From c5f8162a22134cddfcd599ccfec42cbd5c7fef0a Mon Sep 17 00:00:00 2001 From: C4illin Date: Mon, 25 Nov 2024 23:22:18 +0100 Subject: [PATCH 001/343] chore: update deps --- bun.lockb | Bin 166681 -> 166681 bytes package.json | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bun.lockb b/bun.lockb index 0dad806b8425a032ff0b1355a95ba1151b566d5d..fa5d39887ffacd2e36787a465fc231ef7c036103 100755 GIT binary patch delta 1487 zcmZWlc~BE~7~NeGkV6u=lI4;kB}7RG5D^i|CKaiOTH4X7oWWYP7CB6lAOebsN(l-E z*m4OTfS`cLM5rPq`RlF()!(oGH4b$I0@AuyK=DlyeqC%6RLX%vE zlb|ELAgkn!JfxUhp0rR&|9+tF;53xanb4+2u}+mYG^`zU1Buck+r`p)+j%k})eQbb z5vxx>+j-J4#7vL*vGtiypUIlo5(7P}F!(=f@SMQlFsW!EOD0^YhNU=)`%Jx57)zAi zpfY7mvG_H}7Qh;U~{@v=(kNhccu_MFSSr-*l> z)mBo)=bmE)*&E72GcNfVAx{?KWm9!Rmy99Nby|#BT%^RcVl#19UmbxhrUr!AKNmfU zUTl~cyoEQO`ZDZki{}X0!_CVEeHEtxYVG6BN{Ukv3CU133<3ZMOcSPcSOk22I70pX zecbp9Ckam95vV}104vWPcm@7JtlhYN6PxwtQR*$l z&gMtt)uhU{mSc^pu_PbIXKDRg+ELKecB$TWC7+iAa8-3_`!7oTxhwkIR9Nm_>g8aQ zoYK74t!XDcwm*)=?H5{PT2KzHhGR;@#Sidg2h)6B^b$K+MX{M}zV>V@-&m@^$jDOv z>qpOWaR$dM52fu=<*`(c#_W1ISoxbw?E}sNdt*ZZcY%lViB)pbo0Snx;nFT%QG|N zWywZ*2JOY7O;0;C;WZd1_xjY4`7xzX^95;OH#x(lDukR+(Un*jb0@hrIY|A*xQ8;R zyRDv6b9yU{e=}v0)N<-CWt0(>b%fLv%BvPn|D$ZFa<}q)%fl~vbtO~pP<8r;GL6Jk z<3~KNYP*lOWu;Sgnm=r}xVg8WH6(em7haa<*>*!vu^K`*$^N}@L_Q3oH>*`kwl6!`ju9p2iR(~8$d%vQ$X4`q+ ztl=H1>Ihffz52kZH+BnlL^_~OVO3L{gW2h_vU~enk(IYY9Q@qEtGySKoP)9!TuyM| z)9D@IU6meZG+zbQV+TTIf8SrlrR^?cZaOB4EqLNQI#4EmxBK+;iN+RGKw2mAmiQU{nju21^;<@@Y0Cb;Nr!c-!`%Yqvrq Tv@RCfjV8m8lN{kfJ+yxT=)hgT delta 1445 zcmZXQe>~H99LM+lnjc9u?%0MFr`T3o!dN2PWv(AmQ|gLrrAV5%(3DWIe)y4mJ$(Jx z`FY|jPR3)qoIF<757$GRo!As7Jy@MY9W{sCm(?R4_xb1fdB5JT$Lsxmyz_I7^K*@} zs5U*DHd(B04{1GbGMa5)8Ckjr?<6?GiLo;EpR8R)nb6+!dv6b=IJk)U4kq~74nN5o)Ai;Ie3q^u{X{Lx7eYrMNj?fZ^gDqF)ma)rd@knmUo7S7Z)eCd z^}WMm4qwgRb^hoKvBzL|Re($S+G0{ud7q^+)L1jpHXc7zup3*Iyl8REhltemy`GoE z5N8s-=io4pteg~2*YLkdnp|%`hK^k-kEDd0O592a2Er?T+9+l55(ZAI6@%inJB_+4 zykj#=Tj{OUBi`L3ESX|W*x%@>$+~}(fmuVRdmMsQMu7k^+SBz<>xgEzSj;?uo^^b>8 za69FliOqYKzsMRRJx8;qxE1a;?~a;k_`r5=cuM-Z{#x)pw~J`4RZ&=CbC}AIRlT;$ z*?Q1ZY_5EXW-v|bM^XKKMg3{L(ehMc8tHo8gQUl=n#$Y9}MZ0Elz5|cD=0ToaxFoh;tt{%L-48xn;)QW1Cr-&YXKSuR*p;%k zil&Ut33)znOVh2tUba@5$CGS_f7|(|3%s|R=d(iV795sEuB@DQsG9kQg4(XxJrf9; zG0ssMk*35qX(8bx)nSD$~Ia>IT4 z6l{5~4I1u>VhG&KI*)Rih|+y0jP|SK!?*6<;0dL!kq}u`V_#buopE8g*@zp#%db23 z@}gGRYE6kB+j&P@y+hfhjGl>ck@!bdvK?bcWk=q4gnFkd>OxmeLh9K>2Ayvjx1v8N z$;MwaSa&9*I<=IJ?mdw8;`WE@1tuF-TXgb#-=aHTWm;_sq?2*bfhioL^1jo|BgZHA zlSducwkV%LRT|+qk5OJ|Oza1K@s?}&+A&VTV;4<&VCJy>%^Bfsvv47s;OY??;5Bw7 zpHeGsoZ>ebg1Q??T%^E^ffbGFh(e_S5bsY`%YXR^84W_mO z1c{&pxQsyxi~?{*(5IMd1?w>DfO8eVmj88bj{_FyxiG{d|J2q)hQc;&02V$W1N326 zC14KFB)&=@6`1e9v;uh8umf;H#05D7IA$C$Gn|b@wuhgO0v2%jIDpj+T4NPq0yMfng;R zv|1n_!TNAK6Es28YeC>jxS9#F^<1gWl8;OfBIvK9#)O@Q{f>ZGxP}X!gb&$*HWJ1` HP)+&|`xIK7 diff --git a/package.json b/package.json index 1576e07..0622aab 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@types/bun": "^1.1.13", "@types/eslint-plugin-tailwindcss": "^3.17.0", "@types/eslint__js": "^8.42.3", - "@types/node": "^22.9.1", + "@types/node": "^22.9.4", "autoprefixer": "^10.4.20", "cssnano": "^7.0.6", "eslint": "^9.15.0", @@ -42,14 +42,14 @@ "eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-tailwindcss": "^3.17.5", "globals": "^15.12.0", - "knip": "^5.37.1", + "knip": "^5.37.2", "npm-run-all2": "^7.0.1", "postcss": "^8.4.49", "postcss-cli": "^11.0.0", "prettier": "^3.3.3", "tailwind-scrollbar": "^3.1.0", "tailwindcss": "^3.4.15", - "typescript": "^5.6.3", - "typescript-eslint": "^8.15.0" + "typescript": "^5.7.2", + "typescript-eslint": "^8.16.0" } } \ No newline at end of file From aad6da0ae856c68bff38233374a790ee13e664b0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 26 Nov 2024 04:13:39 +0000 Subject: [PATCH 002/343] chore(deps): update oven/bun docker tag to v1.1.37 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index ecba99a..c7b6107 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun:1.1.36-alpine AS base +FROM oven/bun:1.1.37-alpine AS base LABEL org.opencontainers.image.source="https://github.com/C4illin/ConvertX" WORKDIR /app From 22fad995527b346fd99e125236b6a9ec287c8edb Mon Sep 17 00:00:00 2001 From: C4illin Date: Tue, 26 Nov 2024 17:18:48 +0100 Subject: [PATCH 003/343] chore: update converter count --- README.md | 6 +++--- bun.lockb | Bin 166681 -> 166681 bytes 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index eafcbed..b212b00 100644 --- a/README.md +++ b/README.md @@ -26,12 +26,12 @@ A self-hosted online file converter. Supports over a thousand different formats. | [libjxl](https://github.com/libjxl/libjxl) | JPEG XL | 11 | 11 | | [resvg](https://github.com/RazrFalcon/resvg) | SVG | 1 | 1 | | [Vips](https://github.com/libvips/libvips) | Images | 45 | 23 | -| [Assimp](https://github.com/assimp/assimp) | 3D Assets | 70 | 24 | | [XeLaTeX](https://tug.org/xetex/) | LaTeX | 1 | 1 | | [Pandoc](https://pandoc.org/) | Documents | 43 | 65 | -| [GraphicsMagick](http://www.graphicsmagick.org/) | Images | 166 | 133 | +| [GraphicsMagick](http://www.graphicsmagick.org/) | Images | 167 | 130 | | [Inkscape](https://inkscape.org/) | Vector images | 7 | 17 | -| [FFmpeg](https://ffmpeg.org/) | Video | ~473 | ~280 | +| [Assimp](https://github.com/assimp/assimp) | 3D Assets | 77 | 23 | +| [FFmpeg](https://ffmpeg.org/) | Video | ~472 | ~199 | diff --git a/bun.lockb b/bun.lockb index fa5d39887ffacd2e36787a465fc231ef7c036103..06c8a10ee98e14d06a6a47a83bd06b6a52a31cdf 100755 GIT binary patch delta 60 zcmV-C0K@;8mI|4c3V^f$__YBvm-)2;=>amAHn*|20cg|F7Z&0G delta 60 zcmbO^jcevKu7)j)KejR&PXD=;@g14At%1A`y~L&Krs1v{?W`&{N= QjI+=)G~K>&J7dOW0MJzy-2eap From 19ae85424b9f8c3d2affb709054919dac890f0c0 Mon Sep 17 00:00:00 2001 From: C4illin Date: Wed, 27 Nov 2024 16:51:31 +0100 Subject: [PATCH 004/343] chore: add dockerhub pulls badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b212b00..e5b6e78 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ [![Docker](https://github.com/C4illin/ConvertX/actions/workflows/docker-publish.yml/badge.svg?branch=main)](https://github.com/C4illin/ConvertX/actions/workflows/docker-publish.yml) [![ghcr.io Pulls](https://img.shields.io/badge/dynamic/json?logo=github&url=https%3A%2F%2Fipitio.github.io%2Fbackage%2FC4illin%2FConvertX%2Fconvertx.json&query=%24.downloads&label=ghcr.io%20pulls&cacheSeconds=14400)](https://github.com/C4illin/ConvertX/pkgs/container/ConvertX) +![Docker Pulls](https://img.shields.io/docker/pulls/c4illin/convertx?style=flat&logo=docker&label=Dockerhub%20pulls&link=https%3A%2F%2Fhub.docker.com%2Frepository%2Fdocker%2Fc4illin%2Fconvertx%2Fgeneral) [![GitHub Release](https://img.shields.io/github/v/release/C4illin/ConvertX)](https://github.com/C4illin/ConvertX/pkgs/container/convertx) ![GitHub commits since latest release](https://img.shields.io/github/commits-since/C4illin/ConvertX/latest) ![GitHub repo size](https://img.shields.io/github/repo-size/C4illin/ConvertX) From 9c24fe73b5fcf84f600350431f480f9e68593f2c Mon Sep 17 00:00:00 2001 From: C4illin Date: Wed, 27 Nov 2024 17:06:35 +0100 Subject: [PATCH 005/343] chore: add table overview for images --- README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e5b6e78..75927ec 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![Docker](https://github.com/C4illin/ConvertX/actions/workflows/docker-publish.yml/badge.svg?branch=main)](https://github.com/C4illin/ConvertX/actions/workflows/docker-publish.yml) [![ghcr.io Pulls](https://img.shields.io/badge/dynamic/json?logo=github&url=https%3A%2F%2Fipitio.github.io%2Fbackage%2FC4illin%2FConvertX%2Fconvertx.json&query=%24.downloads&label=ghcr.io%20pulls&cacheSeconds=14400)](https://github.com/C4illin/ConvertX/pkgs/container/ConvertX) -![Docker Pulls](https://img.shields.io/docker/pulls/c4illin/convertx?style=flat&logo=docker&label=Dockerhub%20pulls&link=https%3A%2F%2Fhub.docker.com%2Frepository%2Fdocker%2Fc4illin%2Fconvertx%2Fgeneral) +[![Docker Pulls](https://img.shields.io/docker/pulls/c4illin/convertx?style=flat&logo=docker&label=dockerhub%20pulls&link=https%3A%2F%2Fhub.docker.com%2Frepository%2Fdocker%2Fc4illin%2Fconvertx%2Fgeneral)](https://hub.docker.com/r/c4illin/convertx) [![GitHub Release](https://img.shields.io/github/v/release/C4illin/ConvertX)](https://github.com/C4illin/ConvertX/pkgs/container/convertx) ![GitHub commits since latest release](https://img.shields.io/github/commits-since/C4illin/ConvertX/latest) ![GitHub repo size](https://img.shields.io/github/repo-size/C4illin/ConvertX) @@ -81,6 +81,21 @@ All are optional, JWT_SECRET is recommended to be set. > [!WARNING] > If you can't login, make sure you are accessing the service over https or set HTTP_ALLOWED=true +### Docker images + +There is a `:latest` tag that is updated with every release and a `:main` tag that is updated with every push to the main branch. `:latest` is recommended for normal use. + +The image is available on [GitHub Container Registry](https://github.com/C4illin/ConvertX/pkgs/container/ConvertX) and [Docker Hub](https://hub.docker.com/r/c4illin/convertx). + +| Image | What it is | +|-------|------------| +| `image: ghcr.io/c4illin/convertx` | The latest release on ghcr | +| `image: ghcr.io/c4illin/convertx:main` | The latest commit on ghcr | +| `image: c4illin/convertx` | The latest release on docker hub | +| `image: c4illin/convertx:main` | The latest commit on docker hub | + + + ### Tutorial Tutorial in french: From cb143209aec101d77358ba91bc4b20c4d62762da Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 29 Nov 2024 14:10:18 +0000 Subject: [PATCH 006/343] chore(deps): update oven/bun docker tag to v1.1.38 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index c7b6107..8917a84 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun:1.1.37-alpine AS base +FROM oven/bun:1.1.38-alpine AS base LABEL org.opencontainers.image.source="https://github.com/C4illin/ConvertX" WORKDIR /app From 03d3edfff65c252dd4b8922fc98257c089c1ff74 Mon Sep 17 00:00:00 2001 From: C4illin Date: Sat, 7 Dec 2024 02:38:30 +0100 Subject: [PATCH 007/343] feat: add calibre issue #191 --- Dockerfile | 5 ++- compose.yaml | 32 +++++++------- src/converters/assimp.ts | 7 +-- src/converters/calibre.ts | 86 ++++++++++++++++++++++++++++++++++++ src/converters/main.ts | 5 +++ src/helpers/printVersions.ts | 10 +++++ 6 files changed, 123 insertions(+), 22 deletions(-) create mode 100644 src/converters/calibre.ts diff --git a/Dockerfile b/Dockerfile index 8917a84..1905ed9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -51,7 +51,10 @@ RUN apk --no-cache add \ vips-jxl \ libjxl-tools \ assimp \ - inkscape + inkscape \ + poppler-utils + +RUN apk --no-cache add calibre --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing/ # this might be needed for some latex use cases, will add it if needed. # texmf-dist-fontsextra \ diff --git a/compose.yaml b/compose.yaml index 0238bf6..82e127f 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1,16 +1,16 @@ -services: - convertx: - build: - context: . - # dockerfile: Debian.Dockerfile - volumes: - - ./data:/app/data - environment: # Defaults are listed below. All are optional. - - ACCOUNT_REGISTRATION=true # true or false, doesn't matter for the first account (e.g. keep this to false if you only want one account) - - JWT_SECRET=aLongAndSecretStringUsedToSignTheJSONWebToken1234 # will use randomUUID() by default - - HTTP_ALLOWED=true # setting this to true is unsafe, only set this to true locally - - ALLOW_UNAUTHENTICATED=true # allows anyone to use the service without logging in, only set this to true locally - - AUTO_DELETE_EVERY_N_HOURS=1 # checks every n hours for files older then n hours and deletes them, set to 0 to disable - - WEBROOT=/convertx # the root path of the web interface, leave empty to disable - ports: - - 3000:3000 +services: + convertx: + build: + context: . + # dockerfile: Debian.Dockerfile + volumes: + - ./data:/app/data + environment: # Defaults are listed below. All are optional. + - ACCOUNT_REGISTRATION=true # true or false, doesn't matter for the first account (e.g. keep this to false if you only want one account) + - JWT_SECRET=aLongAndSecretStringUsedToSignTheJSONWebToken1234 # will use randomUUID() by default + - HTTP_ALLOWED=true # setting this to true is unsafe, only set this to true locally + - ALLOW_UNAUTHENTICATED=true # allows anyone to use the service without logging in, only set this to true locally + - AUTO_DELETE_EVERY_N_HOURS=1 # checks every n hours for files older then n hours and deletes them, set to 0 to disable + # - WEBROOT=/convertx # the root path of the web interface, leave empty to disable + ports: + - 3000:3000 diff --git a/src/converters/assimp.ts b/src/converters/assimp.ts index aa87811..0ec338a 100644 --- a/src/converters/assimp.ts +++ b/src/converters/assimp.ts @@ -1,9 +1,8 @@ import { exec } from "node:child_process"; -// This could be done dynamically by running `ffmpeg -formats` and parsing the output export const properties = { from: { - muxer: [ + object: [ "3d", "3ds", "3mf", @@ -84,7 +83,7 @@ export const properties = { ], }, to: { - muxer: [ + object: [ "3ds", "3mf", "assbin", @@ -120,8 +119,6 @@ export async function convert( // eslint-disable-next-line @typescript-eslint/no-unused-vars options?: unknown, ): Promise { - // let command = "ffmpeg"; - const command = `assimp export "${filePath}" "${targetPath}"`; return new Promise((resolve, reject) => { diff --git a/src/converters/calibre.ts b/src/converters/calibre.ts new file mode 100644 index 0000000..2d368ab --- /dev/null +++ b/src/converters/calibre.ts @@ -0,0 +1,86 @@ +import { exec } from "node:child_process"; + +export const properties = { + from: { + document: [ + "azw4", + "chm", + "cbr", + "cbz", + "cbt", + "cba", + "cb7", + "djvu", + "docx", + "epub", + "fb2", + "htlz", + "html", + "lit", + "lrf", + "mobi", + "odt", + "pdb", + "pdf", + "pml", + "rb", + "rtf", + "recipe", + "snb", + "tcr", + "txt", + ], + }, + to: { + document: [ + "azw3", + "docx", + "epub", + "fb2", + "html", + "htmlz", + "lit", + "lrf", + "mobi", + "oeb", + "pdb", + "pdf", + "pml", + "rb", + "rtf", + "snb", + "tcr", + "txt", + "txtz", + ], + }, +}; + +export async function convert( + filePath: string, + fileType: string, + convertTo: string, + targetPath: string, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + options?: unknown, +): Promise { + const command = `ebook-convert "${filePath}" "${targetPath}"`; + + return new Promise((resolve, reject) => { + exec(command, (error, stdout, stderr) => { + if (error) { + reject(`error: ${error}`); + } + + if (stdout) { + console.log(`stdout: ${stdout}`); + } + + if (stderr) { + console.error(`stderr: ${stderr}`); + } + + resolve("Done"); + }); + }); +} diff --git a/src/converters/main.ts b/src/converters/main.ts index 7169cf0..e082e2a 100644 --- a/src/converters/main.ts +++ b/src/converters/main.ts @@ -8,6 +8,7 @@ import { convert as convertPandoc, properties as propertiesPandoc } from "./pand import { convert as convertresvg, properties as propertiesresvg } from "./resvg"; import { convert as convertImage, properties as propertiesImage } from "./vips"; import { convert as convertxelatex, properties as propertiesxelatex } from "./xelatex"; +import { convert as convertCalibre, properties as propertiesCalibre } from "./calibre"; // This should probably be reconstructed so that the functions are not imported instead the functions hook into this to make the converters more modular @@ -56,6 +57,10 @@ const properties: Record< properties: propertiesxelatex, converter: convertxelatex, }, + calibre: { + properties: propertiesCalibre, + converter: convertCalibre, + }, pandoc: { properties: propertiesPandoc, converter: convertPandoc, diff --git a/src/helpers/printVersions.ts b/src/helpers/printVersions.ts index 5372f4a..9110487 100644 --- a/src/helpers/printVersions.ts +++ b/src/helpers/printVersions.ts @@ -103,6 +103,16 @@ if (process.env.NODE_ENV === "production") { } }); + exec("ebook-convert --version", (error, stdout) => { + if (error) { + console.error("ebook-convert (calibre) is not installed"); + } + + if (stdout) { + console.log(stdout.split("\n")[0]); + } + }); + exec("bun -v", (error, stdout) => { if (error) { console.error("Bun is not installed. wait what"); From f537c81db7815df8017f834e3162291197e1c40f Mon Sep 17 00:00:00 2001 From: C4illin Date: Wed, 11 Dec 2024 11:01:39 +0100 Subject: [PATCH 008/343] fix: add FFMPEG_ARGS env variable issue #190 --- compose.yaml | 1 + src/converters/ffmpeg.ts | 1446 +++++++++++++++++++------------------- 2 files changed, 725 insertions(+), 722 deletions(-) diff --git a/compose.yaml b/compose.yaml index 82e127f..e20ad4d 100644 --- a/compose.yaml +++ b/compose.yaml @@ -11,6 +11,7 @@ services: - HTTP_ALLOWED=true # setting this to true is unsafe, only set this to true locally - ALLOW_UNAUTHENTICATED=true # allows anyone to use the service without logging in, only set this to true locally - AUTO_DELETE_EVERY_N_HOURS=1 # checks every n hours for files older then n hours and deletes them, set to 0 to disable + # - FFMPEG_ARGS=-hwaccel vulkan # additional arguments to pass to ffmpeg # - WEBROOT=/convertx # the root path of the web interface, leave empty to disable ports: - 3000:3000 diff --git a/src/converters/ffmpeg.ts b/src/converters/ffmpeg.ts index 52b776d..09c464d 100644 --- a/src/converters/ffmpeg.ts +++ b/src/converters/ffmpeg.ts @@ -1,722 +1,724 @@ -import { exec } from "node:child_process"; - -// This could be done dynamically by running `ffmpeg -formats` and parsing the output -export const properties = { - from: { - muxer: [ - "264", - "265", - "266", - "302", - "3dostr", - "3g2", - "3gp", - "4xm", - "669", - "722", - "aa", - "aa3", - "aac", - "aax", - "ac3", - "ac4", - "ace", - "acm", - "act", - "adf", - "adp", - "ads", - "adx", - "aea", - "afc", - "aiff", - "aix", - "al", - "alaw", - "alias_pix", - "alp", - "alsa", - "amf", - "amr", - "amrnb", - "amrwb", - "ams", - "anm", - "ans", - "apc", - "ape", - "apl", - "apm", - "apng", - "aptx", - "aptxhd", - "aqt", - "aqtitle", - "argo_asf", - "argo_brp", - "art", - "asc", - "asf", - "asf_o", - "ass", - "ast", - "au", - "av1", - "avc", - "avi", - "avif", - "avr", - "avs", - "avs2", - "avs3", - "awb", - "bcstm", - "bethsoftvid", - "bfi", - "bfstm", - "bin", - "bink", - "binka", - "bit", - "bitpacked", - "bmv", - "bmp", - "bonk", - "boa", - "brender_pix", - "brstm", - "c2", - "c93", - "caf", - "cavsvideo", - "cdata", - "cdg", - "cdxl", - "cgi", - "cif", - "cine", - "codec2", - "codec2raw", - "concat", - "cri", - "dash", - "dat", - "data", - "daud", - "dav", - "dbm", - "dcstr", - "dds", - "derf", - "dfpwm", - "dfa", - "dhav", - "dif", - "digi", - "dirac", - "diz", - "dmf", - "dnxhd", - "dpx_pipe", - "dsf", - "dsicin", - "dsm", - "dss", - "dtk", - "dtm", - "dts", - "dtshd", - "dv", - "dvbsub", - "dvbtxt", - "dxa", - "ea", - "eac3", - "ea_cdata", - "epaf", - "exr_pipe", - "f32be", - "f32le", - "ec3", - "evc", - "f4v", - "f64be", - "f64le", - "fap", - "far", - "fbdev", - "ffmetadata", - "filmstrip", - "film_cpk", - "fits", - "flac", - "flic", - "flm", - "flv", - "frm", - "fsb", - "fwse", - "g722", - "g723_1", - "g726", - "g726le", - "g729", - "gdm", - "gdv", - "genh", - "gif", - "gsm", - "gxf", - "h261", - "h263", - "h264", - "h265", - "h266", - "h26l", - "hca", - "hcom", - "hevc", - "hls", - "hnm", - "ice", - "ico", - "idcin", - "idf", - "idx", - "iec61883", - "iff", - "ifv", - "ilbc", - "image2", - "imf", - "imx", - "ingenient", - "ipmovie", - "ipu", - "ircam", - "ism", - "isma", - "ismv", - "iss", - "it", - "iv8", - "ivf", - "ivr", - "j2b", - "j2k", - "jack", - "jacosub", - "jv", - "jpegls", - "jpeg", - "jxl", - "kmsgrab", - "kux", - "kvag", - "lavfi", - "laf", - "lmlm4", - "loas", - "lrc", - "luodat", - "lvf", - "lxf", - "m15", - "m2a", - "m4a", - "m4b", - "m4v", - "mac", - "mca", - "mcc", - "mdl", - "med", - "microdvd", - "mj2", - "mjpeg", - "mjpg", - "mk3d", - "mka", - "mks", - "mkv", - "mlp", - "mlv", - "mm", - "mmcmp", - "mmf", - "mms", - "mo3", - "mod", - "mods", - "moflex", - "mov", - "mp2", - "mp3", - "mp4", - "mpa", - "mpc", - "mpc8", - "mpeg", - "mpg", - "mpjpeg", - "mpl2", - "mpo", - "mpsub", - "mptm", - "msbc", - "msf", - "msnwctcp", - "msp", - "mt2", - "mtaf", - "mtm", - "mtv", - "mulaw", - "musx", - "mv", - "mvi", - "mxf", - "mxg", - "nc", - "nfo", - "nist", - "nistsphere", - "nsp", - "nst", - "nsv", - "nut", - "nuv", - "obu", - "ogg", - "okt", - "oma", - "omg", - "opus", - "openal", - "oss", - "osq", - "paf", - "pdv", - "pam", - "pbm", - "pcx", - "pgmyuv", - "pgm", - "pgx", - "photocd", - "pictor", - "pjs", - "plm", - "pmp", - "png", - "ppm", - "pp", - "psd", - "psm", - "psp", - "psxstr", - "pt36", - "ptm", - "pulse", - "pva", - "pvf", - "qcif", - "qcp", - "qdraw", - "r3d", - "rawvideo", - "rco", - "rcv", - "realtext", - "redspark", - "rgb", - "rl2", - "rm", - "roq", - "rpl", - "rka", - "rsd", - "rso", - "rt", - "rtp", - "rtsp", - "s16be", - "s16le", - "s24be", - "s24le", - "s32be", - "s32le", - "s337m", - "s3m", - "s8", - "sami", - "sap", - "sb", - "sbc", - "sbg", - "scc", - "sdns", - "sdp", - "sdr2", - "sds", - "sdx", - "ser", - "sf", - "sfx", - "sfx2", - "sga", - "sgi", - "shn", - "siff", - "sln", - "smi", - "smjpeg", - "smk", - "smush", - "sndio", - "sol", - "son", - "sox", - "spdif", - "sph", - "srt", - "ss2", - "ssa", - "st26", - "stk", - "stl", - "stm", - "stp", - "str", - "sub", - "sup", - "svag", - "svg", - "svs", - "sw", - "swf", - "tak", - "tco", - "tedcaptions", - "thd", - "thp", - "tiertexseq", - "tif", - "tiff", - "tmv", - "truehd", - "tta", - "tty", - "txd", - "txt", - "ty", - "ty+", - "u16be", - "u16le", - "u24be", - "u24le", - "u32be", - "u32le", - "u8", - "ub", - "ul", - "ult", - "umx", - "usm", - "uw", - "v", - "v210", - "v210x", - "vag", - "vb", - "vc1", - "vc1test", - "vidc", - "video4linux2", - "viv", - "vividas", - "vivo", - "vmd", - "vobsub", - "voc", - "vpk", - "vplayer", - "vqe", - "vqf", - "vql", - "vt", - "vtt", - "vvc", - "w64", - "wa", - "wav", - "way", - "wc3movie", - "webm", - "webp", - "webvtt", - "wow", - "wsaud", - "wsd", - "wsvqa", - "wtv", - "wv", - "wve", - "x11grab", - "xa", - "xbin", - "xl", - "xm", - "xmd", - "xmv", - "xpk", - "xvag", - "xwma", - "y4m", - "yop", - "yuv", - "yuv10", - ], - }, - to: { - muxer: [ - "264", - "265", - "266", - "302", - "3g2", - "3gp", - "a64", - "aac", - "ac3", - "ac4", - "adts", - "adx", - "afc", - "aif", - "aifc", - "aiff", - "al", - "amr", - "amv", - "apm", - "apng", - "aptx", - "aptxhd", - "asf", - "ass", - "ast", - "au", - "aud", - "av1", - "avi", - "avif", - "avs", - "avs2", - "avs3", - "bit", - "bmp", - "c2", - "caf", - "cavs", - "chk", - "cpk", - "cvg", - "dfpwm", - "dnxhd", - "dnxhr", - "dpx", - "drc", - "dts", - "dv", - "dvd", - "eac3", - "ec3", - "evc", - "exr", - "f4v", - "ffmeta", - "fits", - "flac", - "flm", - "flv", - "g722", - "gif", - "gsm", - "gxf", - "h261", - "h263", - "h264", - "h265", - "h266", - "hdr", - "hevc", - "ico", - "im1", - "im24", - "im8", - "ircam", - "isma", - "ismv", - "ivf", - "j2c", - "j2k", - "jls", - "jp2", - "jpeg", - "jpg", - "js", - "jss", - "jxl", - "latm", - "lbc", - "ljpg", - "loas", - "lrc", - "m1v", - "m2a", - "m2t", - "m2ts", - "m2v", - "m3u8", - "m4a", - "m4b", - "m4v", - "mjpeg", - "mjpg", - "mkv", - "mlp", - "mmf", - "mov", - "mp2", - "mp3", - "mp4", - "mpa", - "mpd", - "mpeg", - "mpg", - "msbc", - "mts", - "mxf", - "nut", - "obu", - "oga", - "ogg", - "ogv", - "oma", - "opus", - "pam", - "pbm", - "pcm", - "pcx", - "pfm", - "pgm", - "pgmyuv", - "phm", - "pix", - "png", - "ppm", - "psp", - "qoi", - "ra", - "ras", - "rco", - "rcv", - "rgb", - "rm", - "roq", - "rs", - "rso", - "sb", - "sbc", - "scc", - "sf", - "sgi", - "sox", - "spdif", - "spx", - "srt", - "ssa", - "sub", - "sun", - "sunras", - "sup", - "sw", - "swf", - "tco", - "tga", - "thd", - "tif", - "tiff", - "ts", - "tta", - "ttml", - "tun", - "ub", - "ul", - "uw", - "vag", - "vbn", - "vc1", - "vc2", - "vob", - "voc", - "vtt", - "vvc", - "w64", - "wav", - "wbmp", - "webm", - "webp", - "wma", - "wmv", - "wtv", - "wv", - "xbm", - "xface", - "xml", - "xwd", - "y", - "y4m", - "yuv", - ], - }, -}; - -export async function convert( - filePath: string, - fileType: string, - convertTo: string, - targetPath: string, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - options?: unknown, -): Promise { - let extra = ""; - let message = "Done"; - - if (convertTo === "ico") { - // make sure image is 256x256 or smaller - extra = `-filter:v "scale='min(256,iw)':min'(256,ih)':force_original_aspect_ratio=decrease"`; - message = "Done: resized to 256x256"; - } - - const command = `ffmpeg -i "${filePath}" ${extra} "${targetPath}"`; - - return new Promise((resolve, reject) => { - exec(command, (error, stdout, stderr) => { - if (error) { - reject(`error: ${error}`); - } - - if (stdout) { - console.log(`stdout: ${stdout}`); - } - - if (stderr) { - console.error(`stderr: ${stderr}`); - } - - resolve(message); - }); - }); -} +import { exec } from "node:child_process"; + +// This could be done dynamically by running `ffmpeg -formats` and parsing the output +export const properties = { + from: { + muxer: [ + "264", + "265", + "266", + "302", + "3dostr", + "3g2", + "3gp", + "4xm", + "669", + "722", + "aa", + "aa3", + "aac", + "aax", + "ac3", + "ac4", + "ace", + "acm", + "act", + "adf", + "adp", + "ads", + "adx", + "aea", + "afc", + "aiff", + "aix", + "al", + "alaw", + "alias_pix", + "alp", + "alsa", + "amf", + "amr", + "amrnb", + "amrwb", + "ams", + "anm", + "ans", + "apc", + "ape", + "apl", + "apm", + "apng", + "aptx", + "aptxhd", + "aqt", + "aqtitle", + "argo_asf", + "argo_brp", + "art", + "asc", + "asf", + "asf_o", + "ass", + "ast", + "au", + "av1", + "avc", + "avi", + "avif", + "avr", + "avs", + "avs2", + "avs3", + "awb", + "bcstm", + "bethsoftvid", + "bfi", + "bfstm", + "bin", + "bink", + "binka", + "bit", + "bitpacked", + "bmv", + "bmp", + "bonk", + "boa", + "brender_pix", + "brstm", + "c2", + "c93", + "caf", + "cavsvideo", + "cdata", + "cdg", + "cdxl", + "cgi", + "cif", + "cine", + "codec2", + "codec2raw", + "concat", + "cri", + "dash", + "dat", + "data", + "daud", + "dav", + "dbm", + "dcstr", + "dds", + "derf", + "dfpwm", + "dfa", + "dhav", + "dif", + "digi", + "dirac", + "diz", + "dmf", + "dnxhd", + "dpx_pipe", + "dsf", + "dsicin", + "dsm", + "dss", + "dtk", + "dtm", + "dts", + "dtshd", + "dv", + "dvbsub", + "dvbtxt", + "dxa", + "ea", + "eac3", + "ea_cdata", + "epaf", + "exr_pipe", + "f32be", + "f32le", + "ec3", + "evc", + "f4v", + "f64be", + "f64le", + "fap", + "far", + "fbdev", + "ffmetadata", + "filmstrip", + "film_cpk", + "fits", + "flac", + "flic", + "flm", + "flv", + "frm", + "fsb", + "fwse", + "g722", + "g723_1", + "g726", + "g726le", + "g729", + "gdm", + "gdv", + "genh", + "gif", + "gsm", + "gxf", + "h261", + "h263", + "h264", + "h265", + "h266", + "h26l", + "hca", + "hcom", + "hevc", + "hls", + "hnm", + "ice", + "ico", + "idcin", + "idf", + "idx", + "iec61883", + "iff", + "ifv", + "ilbc", + "image2", + "imf", + "imx", + "ingenient", + "ipmovie", + "ipu", + "ircam", + "ism", + "isma", + "ismv", + "iss", + "it", + "iv8", + "ivf", + "ivr", + "j2b", + "j2k", + "jack", + "jacosub", + "jv", + "jpegls", + "jpeg", + "jxl", + "kmsgrab", + "kux", + "kvag", + "lavfi", + "laf", + "lmlm4", + "loas", + "lrc", + "luodat", + "lvf", + "lxf", + "m15", + "m2a", + "m4a", + "m4b", + "m4v", + "mac", + "mca", + "mcc", + "mdl", + "med", + "microdvd", + "mj2", + "mjpeg", + "mjpg", + "mk3d", + "mka", + "mks", + "mkv", + "mlp", + "mlv", + "mm", + "mmcmp", + "mmf", + "mms", + "mo3", + "mod", + "mods", + "moflex", + "mov", + "mp2", + "mp3", + "mp4", + "mpa", + "mpc", + "mpc8", + "mpeg", + "mpg", + "mpjpeg", + "mpl2", + "mpo", + "mpsub", + "mptm", + "msbc", + "msf", + "msnwctcp", + "msp", + "mt2", + "mtaf", + "mtm", + "mtv", + "mulaw", + "musx", + "mv", + "mvi", + "mxf", + "mxg", + "nc", + "nfo", + "nist", + "nistsphere", + "nsp", + "nst", + "nsv", + "nut", + "nuv", + "obu", + "ogg", + "okt", + "oma", + "omg", + "opus", + "openal", + "oss", + "osq", + "paf", + "pdv", + "pam", + "pbm", + "pcx", + "pgmyuv", + "pgm", + "pgx", + "photocd", + "pictor", + "pjs", + "plm", + "pmp", + "png", + "ppm", + "pp", + "psd", + "psm", + "psp", + "psxstr", + "pt36", + "ptm", + "pulse", + "pva", + "pvf", + "qcif", + "qcp", + "qdraw", + "r3d", + "rawvideo", + "rco", + "rcv", + "realtext", + "redspark", + "rgb", + "rl2", + "rm", + "roq", + "rpl", + "rka", + "rsd", + "rso", + "rt", + "rtp", + "rtsp", + "s16be", + "s16le", + "s24be", + "s24le", + "s32be", + "s32le", + "s337m", + "s3m", + "s8", + "sami", + "sap", + "sb", + "sbc", + "sbg", + "scc", + "sdns", + "sdp", + "sdr2", + "sds", + "sdx", + "ser", + "sf", + "sfx", + "sfx2", + "sga", + "sgi", + "shn", + "siff", + "sln", + "smi", + "smjpeg", + "smk", + "smush", + "sndio", + "sol", + "son", + "sox", + "spdif", + "sph", + "srt", + "ss2", + "ssa", + "st26", + "stk", + "stl", + "stm", + "stp", + "str", + "sub", + "sup", + "svag", + "svg", + "svs", + "sw", + "swf", + "tak", + "tco", + "tedcaptions", + "thd", + "thp", + "tiertexseq", + "tif", + "tiff", + "tmv", + "truehd", + "tta", + "tty", + "txd", + "txt", + "ty", + "ty+", + "u16be", + "u16le", + "u24be", + "u24le", + "u32be", + "u32le", + "u8", + "ub", + "ul", + "ult", + "umx", + "usm", + "uw", + "v", + "v210", + "v210x", + "vag", + "vb", + "vc1", + "vc1test", + "vidc", + "video4linux2", + "viv", + "vividas", + "vivo", + "vmd", + "vobsub", + "voc", + "vpk", + "vplayer", + "vqe", + "vqf", + "vql", + "vt", + "vtt", + "vvc", + "w64", + "wa", + "wav", + "way", + "wc3movie", + "webm", + "webp", + "webvtt", + "wow", + "wsaud", + "wsd", + "wsvqa", + "wtv", + "wv", + "wve", + "x11grab", + "xa", + "xbin", + "xl", + "xm", + "xmd", + "xmv", + "xpk", + "xvag", + "xwma", + "y4m", + "yop", + "yuv", + "yuv10", + ], + }, + to: { + muxer: [ + "264", + "265", + "266", + "302", + "3g2", + "3gp", + "a64", + "aac", + "ac3", + "ac4", + "adts", + "adx", + "afc", + "aif", + "aifc", + "aiff", + "al", + "amr", + "amv", + "apm", + "apng", + "aptx", + "aptxhd", + "asf", + "ass", + "ast", + "au", + "aud", + "av1", + "avi", + "avif", + "avs", + "avs2", + "avs3", + "bit", + "bmp", + "c2", + "caf", + "cavs", + "chk", + "cpk", + "cvg", + "dfpwm", + "dnxhd", + "dnxhr", + "dpx", + "drc", + "dts", + "dv", + "dvd", + "eac3", + "ec3", + "evc", + "exr", + "f4v", + "ffmeta", + "fits", + "flac", + "flm", + "flv", + "g722", + "gif", + "gsm", + "gxf", + "h261", + "h263", + "h264", + "h265", + "h266", + "hdr", + "hevc", + "ico", + "im1", + "im24", + "im8", + "ircam", + "isma", + "ismv", + "ivf", + "j2c", + "j2k", + "jls", + "jp2", + "jpeg", + "jpg", + "js", + "jss", + "jxl", + "latm", + "lbc", + "ljpg", + "loas", + "lrc", + "m1v", + "m2a", + "m2t", + "m2ts", + "m2v", + "m3u8", + "m4a", + "m4b", + "m4v", + "mjpeg", + "mjpg", + "mkv", + "mlp", + "mmf", + "mov", + "mp2", + "mp3", + "mp4", + "mpa", + "mpd", + "mpeg", + "mpg", + "msbc", + "mts", + "mxf", + "nut", + "obu", + "oga", + "ogg", + "ogv", + "oma", + "opus", + "pam", + "pbm", + "pcm", + "pcx", + "pfm", + "pgm", + "pgmyuv", + "phm", + "pix", + "png", + "ppm", + "psp", + "qoi", + "ra", + "ras", + "rco", + "rcv", + "rgb", + "rm", + "roq", + "rs", + "rso", + "sb", + "sbc", + "scc", + "sf", + "sgi", + "sox", + "spdif", + "spx", + "srt", + "ssa", + "sub", + "sun", + "sunras", + "sup", + "sw", + "swf", + "tco", + "tga", + "thd", + "tif", + "tiff", + "ts", + "tta", + "ttml", + "tun", + "ub", + "ul", + "uw", + "vag", + "vbn", + "vc1", + "vc2", + "vob", + "voc", + "vtt", + "vvc", + "w64", + "wav", + "wbmp", + "webm", + "webp", + "wma", + "wmv", + "wtv", + "wv", + "xbm", + "xface", + "xml", + "xwd", + "y", + "y4m", + "yuv", + ], + }, +}; + +export async function convert( + filePath: string, + fileType: string, + convertTo: string, + targetPath: string, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + options?: unknown, +): Promise { + let extra = ""; + let message = "Done"; + + if (convertTo === "ico") { + // make sure image is 256x256 or smaller + extra = `-filter:v "scale='min(256,iw)':min'(256,ih)':force_original_aspect_ratio=decrease"`; + message = "Done: resized to 256x256"; + } + + console.log(process.env.FFMPEG_ARGS); + + const command = `ffmpeg ${process.env.FFMPEG_ARGS} -i "${filePath}" ${extra} "${targetPath}"`; + + return new Promise((resolve, reject) => { + exec(command, (error, stdout, stderr) => { + if (error) { + reject(`error: ${error}`); + } + + if (stdout) { + console.log(`stdout: ${stdout}`); + } + + if (stderr) { + console.error(`stderr: ${stderr}`); + } + + resolve(message); + }); + }); +} From d0b89ce74ff3ac92c9f72012798aec3a076a7be4 Mon Sep 17 00:00:00 2001 From: C4illin Date: Wed, 11 Dec 2024 11:09:03 +0100 Subject: [PATCH 009/343] chore: add ffmpeg args and calibre to readme --- README.md | 4 +++- src/converters/ffmpeg.ts | 2 -- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 75927ec..04f5013 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ A self-hosted online file converter. Supports over a thousand different formats. | [resvg](https://github.com/RazrFalcon/resvg) | SVG | 1 | 1 | | [Vips](https://github.com/libvips/libvips) | Images | 45 | 23 | | [XeLaTeX](https://tug.org/xetex/) | LaTeX | 1 | 1 | +| [Calibre](https://calibre-ebook.com/) | E-books | 26 | 19 | | [Pandoc](https://pandoc.org/) | Documents | 43 | 65 | | [GraphicsMagick](http://www.graphicsmagick.org/) | Images | 167 | 130 | | [Inkscape](https://inkscape.org/) | Vector images | 7 | 17 | @@ -76,7 +77,8 @@ All are optional, JWT_SECRET is recommended to be set. | HTTP_ALLOWED | false | Allow HTTP connections, only set this to true locally | | ALLOW_UNAUTHENTICATED | false | Allow unauthenticated users to use the service, only set this to true locally | | AUTO_DELETE_EVERY_N_HOURS | 24 | Checks every n hours for files older then n hours and deletes them, set to 0 to disable | -| WEBROOT | "" | The address to the root path setting this to "/convert" will serve the website on "example.com/convert/" | +| WEBROOT | | The address to the root path setting this to "/convert" will serve the website on "example.com/convert/" | +| FFMPEG_ARGS | | Arguments to pass to ffmpeg, e.g. `-preset veryfast` | > [!WARNING] > If you can't login, make sure you are accessing the service over https or set HTTP_ALLOWED=true diff --git a/src/converters/ffmpeg.ts b/src/converters/ffmpeg.ts index 09c464d..744f416 100644 --- a/src/converters/ffmpeg.ts +++ b/src/converters/ffmpeg.ts @@ -700,8 +700,6 @@ export async function convert( message = "Done: resized to 256x256"; } - console.log(process.env.FFMPEG_ARGS); - const command = `ffmpeg ${process.env.FFMPEG_ARGS} -i "${filePath}" ${extra} "${targetPath}"`; return new Promise((resolve, reject) => { From e9cc8392bbc8b774666360bdb0e54ff643b6821a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 17 Dec 2024 16:08:25 +0000 Subject: [PATCH 010/343] chore(deps): update oven/bun docker tag to v1.1.39 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 1905ed9..6767441 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun:1.1.38-alpine AS base +FROM oven/bun:1.1.39-alpine AS base LABEL org.opencontainers.image.source="https://github.com/C4illin/ConvertX" WORKDIR /app From 9e15114fe83e1edf0eade3f15637a0fad6cc151d Mon Sep 17 00:00:00 2001 From: C4illin Date: Tue, 17 Dec 2024 21:56:24 +0100 Subject: [PATCH 011/343] chore: update deps --- bun.lockb | Bin 166681 -> 168320 bytes package.json | 28 ++++++++++++++-------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/bun.lockb b/bun.lockb index 06c8a10ee98e14d06a6a47a83bd06b6a52a31cdf..61bc091d3b8b4fab76925b40392fd7985a81361f 100755 GIT binary patch delta 32053 zcmeIbcU)9g_dYuNP)8g^Md=_mY#`MEk!Hsc6-&@4Dj)(%6R@Bn7&XxtW7*NIv3HGP zH&|l9uCc}*EB0PuiD=OKtU2c>@s02Ie!lnK-#<6!!^7I^*?sM`%b7WFW==1czo^_~ z&w8D@b}Zd;d-Y_?9w&FE*BE5CvdYvdd-|@YN7W{NXYO=&eB{( zzKYP#LJ}WtBkM~bDW8C>0C^bkwLSG`7{`gg+v}3JH=E)6z2& zG@40@-Y+?=ug9PaO?z88zPTbZJW|r*W3$nUl;qUpY)x}JIX(~hr~{{=Qv(JhS1hrdM24hl~IVNo^^DRKxVk1!lRp*#>cLG9jRu|0_ke`0@{d5mRq{8-YP<&==R)WUGUmlW-$o6n1;}}zhLcK5BsSVT(F>g+X#hw_3>A0x{btyD93Uy} zG*`pr4F2G$z_i%3^yI!8O*C|x&{ZI*p*gXsDP)&OCEfhya=uXLR9>4Fa{dgmE-pXl zHsn%jMQR20k%27Wq-0cG|?EAF41olFJxO);)e8m-cR_@wj!$$eup`(-5zPDsnn zI?!5fNK_k*h6XY-A+~SdF3Fi0v1vJ}vDxuSv6+cfj;6#{9-%MbIibTRuW}2$UT0_$6LCFFK#DmvmnVn`H(blciPH&zbuc0q1lB-gY?kr}a>SqUDgS?Ziig=eNFXJxAfoQHJenc1-!v2iI0nrVEU*41q!SaP%s zkJQ)1sIKhuUrsLQvyZmKJvx{%yKPFg3_74Oq^_QQ(FbIQ3_`j6Fx zuPf&orCKtsw`>!2>cdOPDK!`S$Tm6)FQz5nFl2eitig%ts9tjzUP~?B1xcRVmAhHl z);C~tBCT3K**z>3373ImVM=6Wc??O4%{KMtaaNvr>rf~yfU_WJKsv$qXt>rxlAAAu zq)J=H%5rOeIb8uHRX!8a26C2?Z>&;I7SdCEGIUyzyFk*s4uYim>>)9(dHDfMbv zc@H@VNq)5)vO44>NXjq-lG4RNQbBDMJw81pJrfr2f=)Z7GbDM71tfLIIa9XBBQ%KO z&qGrF9Y!7VbtwW=@MK8JkPk_2lL$#Yk5c&EFgfX+2gwf829hkb6gjt6TKf z;Hd*6AZb8a4w2n=ydu#)jYA$H+95y{XXDUCWIdoJbah_3VSS;B&q3CJ`~{LMR2dSx zL%#WNxdA;Owa{MY{R+}`dj_m%<*KqsQ&!g*EEEzw)X8raH zLwd#@JN&Sn<*2OjZQgBMQftJwnf|Wj{L@0)ZLcR^Yh0+` z=T+`fFRxDP8*G`#tsOS=7I}5~S_jJwuN|xzH+7bk0H^X+tTHchX+Uw>%P?$H*w&1X za@A|=z<>OqX?anup1tN<+(TI`FTw8>Jg{ykyTEhmhMHA{n>OX!YX`9?UQ#zyI{|uQ zc2 zaptSnc85mkQMPY@rJ|S{qs~AJK$M(Nhv`HeL1ViHSVEC&DRR+kzk`PTD&NwW?Fuw% z4@z{@YaQ${i)GDSuk8wr@|hUpI5fFP)=;lK1dVKC!bc%rMNDgolX!Roy|$&IG0y7f zwPT^l<5E-uHibsxQjQme2UtRB4+WLi(z8gu#VeHk#7pq|G7t0))ml5rrbJU~q4Ut1 z7*iL81Xx1pC};K6vl~3nCsbP%+gC$yXoa(08xD! zY%=r#V=)Mtk1;pwZnlgxUg{GBPYLu3)i%afgHr&S8V+CR4=uo$7Pc^32(2Rzt{bHN z1EHQq9%kn`{-N3*s%tbsU|@^7db8uu!YQShwVOuM)#w)qJg0FeTgA6D4%OZU8;;cQ zC)n5>OHB)-7G7Pi9RQ6iXY^?8d}!ol=m|{o9vT_a*b}oJSh^bX?JhyuDF`X;#3&tt zCg-7%s8Q>KpZe;};-EF7_Gk+bA~Ty{X6dzepy{DiAd5*ZwfURC5cUNRY!a&7h+B}h zh=RFm>e)NK1zhVo8Vz=Ln2Dy$MrdR-G#M2(aQ`q_(BwpDEf5C}h0CmjCc6c>;WcQA zUtpL#aR)-ph8G|%4VpZx$Op5PGz~@Ffx)4YcRfBVID{qgEy1DMgIK~T6YP%4Z0oBt z8J0AQffmZQy9H@yBP81!4TRH`goJ7%8fY|8$SM2skI+7L;TSZVash3_G0j(+GOnH%;Ui-Zghm>%+ zgV3nEa3m}~=H7BjOd(jlBQzQ@tT52#K%+7dhcP+_jq)*?9%fdUMWQqGVCGV>$clA86q?*;S}3!WI1A&RwFa8p{!xy4=|w9( ztXqh-c596Ws|Jk{$j+^KllCFnNg&C?Py@_)rZs;9QU?d6YSChNQXDiIPr3c8pnb@o zz4<{ynOdg^xdt4yh6Y$dp*0lC0$ghXG@PbU4~k^xcux0FZ8elitu$7n>jTYLuyNM1 zTJq^_23VTQR>sMrGst_fnXzG^&}azY7_h)7XlM=1mF@wSP{=rl^3iKcq0!*V*$ik0 z?I{(E-n9-I6{0Z~`5YQGNj@!kM9O0&_dFLG#c7RADTIdkNDV{xEKocg6I~gV7GMd5 zdSaYxERW~JgqrOD7r}G81ZmrMkdtDh;Asb-VV#pJG%F#E=lV9qIdW^S5N$F%r3+#) z;&7zr(7ybjMMh~fajIsv9a>{v3J-dY5H-bkR?tOul9wVgShXG>=s;H0mIp~~uLcrp zlx%8U1x#TYFmtdrN>WR02e9O?#`TKLU;2^UL2*ISmL0YG1xhKYXuT6nQhL;;t01b0Sc2BKU zH`yoTxJYO;B{9>tpxqe(_odE*@156ur6HeO_V z1I-^A&bP2cBMhT2G)rF81QQGzjhMWQFNF3n-&ttXf82SX|E@h`4L0kdXGy#yDO7tG z9F>ek+gq=7?pbz0kA?OzZaOq-x`vO!!R#0h>>sMNjgfsyUSUQ-Ba6cQ-SuocFF}eY z;K($XSN-)`|6cMDMbzN0QS^^C|a}HV)XtKF0 z^-;}Dmg)cvBdFA{1R9O8@$9aB22HLVo4EFIyhekup_Et+TJ=?D8PzZu8u=8Q7zdqm z&=fm(2UsSkU8d@KL8GR?v$2oQfJO=Bo%@8MVN*y6pwDh(OHploptUe&qfLD=X>^aE zy^9bPfS%!wr+T8S$(wLDXia!24joe!-gwkvhk41sP_0Rl++r+QIE?v1qjIni)z-5C zd`o7ib}=|O2iXE^!#ilQEsAgl2rnd$m5sd%8Z{2LC|Kf6`|~$hA-0fuovOBx*184I z5Ur%trK#gZ?N5M)VNv1^L4z|XntQrNgYGHXBxoP|eGghUV;miC!!y*{sXh)(jzbN& z3ojWOs&ySG--*dq8xD=uF094KeF&P|Nz&Xi za;@YU`=EU+(>`0>qo{qc&}hLeXIudnLhC~QAej&1O-6)h;|9so2~*!$uU!s}#uQUO zLeFmVk`bYjelTy68=}n|tlmq)S6Bhxk{hb4I7C?uH5v_8MDGUN%SCGq5(mC~MkG)h ztGqjXNW!M_oROj0{fNhYON&jeUTZy6-m+06=0Zd`9a!y z2vJqWn+-Fs5f}&J%~B9D7NA{)PykX`@$i0n?M+GnjSk<9c)o+_2EVUnuvjzn5N>0< zNY(@<0Or6HfG&~}zyY$z4**^NO;WmPfW#xmxbmJ;tm{#Z8T1QRSxG5p0#w5+K*MvV z*xD02mo!`?NuLKu{OAH_iI0u#ZvXaU<4AcM~D)l2EUnD8x6GbOU8J+>ezfkm7kko)b z0lG+1x)Ol+HvnD#B&nQIV=ScHf0-Z)m{aagWO?Y7!COF*=TN#DkW^tUB|S+B)>d?q z6s)62cSxEH4IwF?Cq?4QqX2~)Dbh=k-bCUmD~a+^c#>3*A0*ADCW;JG;z?EmPhV?M z!($Y_tb`>hX!;<6;$lg1=V`XQ;WW!UDw4hlql+X})nCy`lAfaIWhL=x3Qv;C$%Z7O z4}qkpq4Z0U#1B{WGO~#=K^ekWz(^#d3i6c<|0GSg^LX1lN-ze$NRCxflce0=D0*2* z{CM!xobQzQf08sSCoAz~CFP&0@Q``N={p?+aYBhGE2*L%75<+j6*ybTKSz;smGu8j zS|Z<4rg-&ICF3$BBS{J_$1kejCxtI7iCT$YJwNA4U2q@&1b57?LiMR9}z@ZZYTz0znluQxcG*f?FthSxM;(;3=xT z5>Ju}?5yY{sUck;iHcVE=nZa@7X5pCm5;Ok9$(=ZbkQ-EyzSrPt0zqwT>l0ge~+*KzdybzH$4Bxj<1+_@(%s3BHiL@c)i(u!*-wi z{l@YR#d~~@mD};V&r9uoF|8G#Yvllct_fy)m z6}`;AZ*SGHW22GLWBN@$x#8&Sp)Aa_Ws>zRvw@=~_h>TOchmaxA$6{NcedB?#}${g zd@wE{TQrKve0=3X{OpLM9_CAS*s%34Bm3Cw`O2o|?ULX0QE%^V7&|whVwletYacXB zOY*MR?A7}VtD}v_Z(jI_}C79+jilkX8!F*q>QPbpEoZpu;Vf34UzunoqCxLdz;{YIAZi2dyhkB8dy0@IIwsButj#SXE)gF z-swW*wxAu=-uI~4YQo|ZB^|!6>S2}S6>;#+`nx@!L`%(VcaLkkiWjW5M)QNva@QJIFh2xs=sF$uSZ83NJZD`rue)By zFGCCG_0~u8^Ux-)H?ZdX0<>`(bUb*2fwko0H$?M*jXM4aT5BG-F`D0nHfN)OMeuvj zW^B^&$V~=(O*C^;G;i~>j+a7<&}z6qJP`aKWII;{WkOu zTJAOji{Xc$4gCfE`^CU|^PFGMzwPKBv{+tmJNgH0;&uaz=NF)j+kyV=Ft7wZeh2!u z6a9mh$OCtxf6(UaG_YiT588}f=-(~_zDk?93;ioX|DdJvh$8e4T0xP4rSlSK%Xg!H zyA5n0U$Gng+k^h?F|aJ&eGmG#7ya8~h#aIk0i>zHHsI@J4bQfC{96r^E3NHysfSz& zetfd-*o*g4=u%UYXUVRax1P1!`}@wn?m3nAnRHHT{LWK|u$5PN!Cv^m zUIQD#x9o+T_Q6j33@nEy?}MH8!%onKbNl_U6SUm@2A0bYK^uAib~<372M!LvP6uHp zXrp+&gRm2{i3bgAG`|3C+#%TMkb#Zm;}5}3hhZmZ-|)c0uoJX7hYf5zzXxr`udvgv z1~!4u{1tXO0y{yQ$Rm!xPS6UD7}z9U0&V$G*y*T&P2nq!!cNCvr(*`jdG}+m({b1d z+BB{`4nKgFdfdPS-vTY^1p0Tv5J}&YsF$h#uMbyF=9dN(zq#J(#4okK{(jXq&DE%Z zFI>h{jDaK>>PTJ{W3eK%8&QU4|rLz+t?{> z553wu&$e;#%rmK*YFT3KVj6i3Gk$raw9fSSzQ$+b0t=mPT^L-U$L8&0W(=IaaH3;( zr_N)t4qiN5aJKo(%{OPPO|pNs*=5}IekSb~Pw+YTWX*0%YmGyfTa|9P9_HK8x-WvO zd8Xy{+x6nyV3&?7-Zg0V%d*aX-@O^wq}iO5;0%k1hj#{VSz5c>sgxUe?O#Q1X;E~| zap1VIthR2BYBxyJ$M-dzb}f4F(;R=3WY^eVd~5BSZn1J}x@T(X zrVZJ@`3|~WZ}_-*#jot!x)=Y|;^*1VCygI7rFNfMC!gNz5mwPGv0ffe{mqVh{AR$j z9y!0kk50jlpe^9_PQj0$O*~~_i}(d-<4(hmP8-+~KK?ZP=nVV_+A&KUz9 ztG)+q###8$Sp!?iXP$*0ozvyH+8$Wc@5P_Z12?4ad^zXZWV<#GtXn_5-mIE;sgF&_ z++p@BtLk@M>gy3Yt^1&%?(wnf@1)?f-X{owL`RI1nGv z^c3GWtljR;3k~%OS|`1Fp8Y6f$<4a9t)E^i|D)Xx_9IGb)zOEpa0@&$?Eb0PMK8_< z`AR!FSIuzdkIvb(`{VWEapPX)Y~5YlHzvcPd1mtCmlco1jHq5x>*|fLuDPKudz*~X zHots$*7JeQpH*Jms(!^VkLC6!Th8v&Ao1Fdi^Cs=CVl<$gcpmRy(m6VuF>wU2im+mmBOA{j|;Dw;WDUA zhu<&G)hzmpzGYDhUB@fk#w@#_mvg@z!yBi=tDDmY+#3Y)MJc(v5s$o z_A6&kF#6YZJmHCf9p&qwy@poxsev8mu}@*98#=xZ+DV>sIhy^(PvZ9}UhfKecMG0( z#lX(+3(z)03%+W=gJkRidUqQoUNGR1>~+xW?!YP+4eTN>x`^IEt9{9Uhj<5GLhtUv zD$uTS?eFN_J*-5(8}JDJ7HH?8MHUheg<(dHx7)(K2n@6z2bpw0E7hFg0pqbq;M5^B@lBb%!D`{D`oW;$$ z9+$q^QEPKly2&c7#Uzd04_AI0G>ok|RI%`~>ys>##{FU@xBlb#_q%%4IQ8htm}xOT zCB8{>4-2|?oX>e|#|NSQXT0bcyx<8|-Wvw?oU@zJ>;>8>FFmicgvTQ z-@W^N4V|!+&1eT^`rRTW%7sVa;t!;Te zrvwMQ5(BHmSCqiOZ?KuYF|aDU`x`joTWn^~s&egHm>62>TLZJ@Tc9QVrOWGaxQ_Yp zMPnKr|4Vn%s$GnA|Kiy0t7i6_7uEB{9>1EgZyXx5(pgtI?m4T=uvOM#`GVLlH>AIO zaqL+3s7Ya57rv*A5si-uD7`Z6?eNCbrkUnujs0)jgWNa$seOJh;D=56pQfGq{>R|m zQ*Pf{IQUYAZm@mRp0&5UJvn%5d~b(kGh59a-@Zja#cdlzTol)p+O^YrPEL%E-u~>VTl-g;a_ZiIDs7`(-WE@uvARo4qdG@>n?#Iy5SAwj zN*8tg_1nf}TIa~^OEJGnaRwyNaN>-Pj zNB555&hPE`<#z_=#_PR@8@-1cy*IF${KEU_Y2%n~S}-%P+SA6fXc54mK7#5l0vYtX z(8U}EqMo=%#0&{Uqy(aYm??p1V*;X-2oDiq0^&6h1tuUGi4r1~n=)Oy8>g=nMfsj= z*ZuqLU&KzRw)jo)!A3>zCO0)NaP5>>@O$3e*1s$}G2!Tuv&${Chwmr$J-TP)y2pEu zUphUi*{S1wEv}cbo3~hDiekH&p&p$X>hTrb%|KY1gV;`lztEb4*i1yKIS9SjLPU}U z2xkirfg;%ggq)PZPI z0YoVgks_i3h}T3EQ~=RIln}AJB8ZrZAfm*IiXggKgV0%n=q$QhgRrawVmlFCg|-ri z%|xVD0ue2?5Rp_FgmYyO-9>U`5O!5S93`TMu&)B*AQ8D$K*WecL=3e7;b8-!x5%*p zQMW3H%S6PAdR0N3Ct_k%5b@#y5#y?X2(AVqL5!~kBES~JBO($-pe=~IM9i@Tku2^J zF~bf-q#cL>Vx}F4HufM&iAWU@_8?vpQD6@uU6c^9+yO+41BiiQg#(Cgjv#c7AhJYv zM-Y}yAhr`RNNAlvY$hVr3B(Ywg@`0)5YEmZazwH-2s;-LM~N6N>|H<{BqG-ZM6NhQ z#86id9kim>4lXr?(Q5((eRtL@1)j@N4 z+2-y}`Xl;azdC)6&1oK*So3C9OBQElH?#EB`^yieqI+1>T+Tfc%gzb1bcjixXN+ztm7CPH< zSo#8sQ<^dJ3qoi7DLOCH@0x$+c~-3^#m8F=@6>bQ4}bo~2Keo~Sf;ttME5#q?q+vv zmmb)Ng;+;=Qe8B^syoa-Q^dN1u&W1R9}%-erMe&v5;3SQh&iH&h@tgC)UF3&o)}n< zMYH+h5QzoCtv-uxzp$(s4Etl6g&uuyR`c`yv4uOfTxsgG<5tacxg+l{n9#ZU{Sg8F z0pGIbtG_RIYxj-q=fj`>%vQCD3@R9JQ=?+Jx{s!wKgM)rgf}Z+b%CS&C${t*nfjkT7KmrwY^Sb=i~MK4 z36R#5Gn(O{M^kP8EDz(q5{MLTe(Xuvg7FYxU8>Sl3=Lq`;%ResiE@-v{}n`pk8lZK zUyAQ2)~g}X%?M(@n03-C6>KwBP)_|%39~}P>OeeWi6V6PBX8qBKd2LqMhUk7d{hEj zj0j|wX8oJtp(x_$DScC68pyH*y13D(H4I^v(!Ewx(sj9QBSKL7+Gfm7Ohz2*SU59; z^=4YNyW0c{V?)f=;E_UOp|*0a8DZ=-%Meq-*=WfsT2yPswo3Na)E@_(lit%Z+Tu`G$b60s5N zxG@*=62;B&(H8ZKT5Hx351Lw2sgsDaSN|gV8lL^cGj93hPL6o4vnnMS!Yv)^(qOkR z4*9>o|Ib9Pu7<8oN*elV zh8}FBtFyw{b4_9x6qo>Xqi)SbzkDeK!D^`i32CL7N z#3>w>rw@-E$17YVa47&?eZi4Ys7K0^C7OOpI_lA2fUZP^vq4z-UMugz@N`N;(IG`x+UIW*|5dO(Wxf zH_*g`B)h85RyrXZ3zP%Y=PaEOZY#X!z-WFjS_P;%C<8x6Z=i>6=o+SQ)e)xWlF0z{ zj&^#%kuH%NL& zlsG&~ulWvK4ag}*4qplRLit)D>FH5Q=m(5fI6Bu5N8fSKGlX>gpl~#6$Ytr8rf}H$ zjIK?VoUU*I2oX=`9SMh8kr z#5(6~KyV|l3HTW(1U3WvQ1W)55cnBb2doD+0IPrk;3r@iupC$fEC%TBMd+K79{~aU z0DK2b1||UC0}}ySH}mOPTUspL(WUyp3q-sGEWl|2dPLY1V1NV^A&z|PKGHq_?g2DW zXjah-SOhEpE(2G9v%m#_Za7W?#{ru9wC;=rzGj%i`3Q^xz5-~4?GAhi^Z=4I`A5J1(ZX2TDm+@ z9L?6zKtCWJpxrtVNC0AhUI1~Y?kpcH0unQ;xXqnlI1Pg%K06lC>%S;Kv z^h9-epb-k89V8i`l_eDz0Q3Rq+2Mo0A>c4T&jimwUN6L@1GLN1+Ca|`)APi`=wbTb z5THev)~)Km2C6KSEQJ+K^56{rGK1DXO&fM6gF1w^7?lC(vwfut>nwjA1FXh-ot zy5+z!fEM$I189X#gHFqFrV>Z-^prIwjMprNAmCJ68aya5_tJD?(P7xC|bcfea)cc2^a1<)1f0(1Z(fHna3 zr9ArUUHVf|<3866lJ?PHfP9aR`m`6)9*lWy^ey8Ck1+A%Ya~N~a3Bn52~c@-nrRD= zbt8fH0L`?{0QqJoAey?@6M-)QYHbgo7Z9x=7P23Z0K@}*fkc3Mk^<27q;6GN2xkJ+ zK(a_5fOH(RT_QMsxB47!y7+4A{1C|3+uv%Cj zgsE_9aM?ys{Ahq0UY36Yy@bY})`>rWX8^Ub4L}7y1)cy8fd{~S;2v-nxCvYbt^&UU z=YW&II^YQKE3g&V0&D~}0PBH5U^B1@_!-C}Vi!;Z%m;P=zX00+a;ojXE?_6H2iOf9 z0BnJM0QtvWpgM3Epg7|9EAkNJLEr>%3^)oLSHh=h{7*so4LAdw1ug*R0qW63;0kaV zxC9gf*8t@+fcG~LrZjheTL4*r^xFXCBWqEF|Z6+0+5AY)A;|10FCoYfXw^? zcm+@f0&#x<#_@vuZ^KoJc=8o>xTxXOpqs!y4wpLq>V~IfI6nZC(G*ew7(l(#K-xf1 zffR27ox;VyH9)lrNlV0$FSQ0N5T?B503Cbi_+zCYj|dvKIKUR+`H-~R(ym(>um&mt zv=iF^6A(|^wmU$Z8C6mXawsJ2q-63MkktX&BwYa79Gw71fc7mvq;ZhBJdGOy)QCEO zJtFEt(%FDckH12v9yCOlwsSh@cmh-@^_;fz5=fdkG+Ss)iC1R=4Hc!OVWAmDLqnFk z4$v&SPvcKxMdL%$h{pITK+flf!bd~WIUx|3j&J~E2IN$LERh7%256@A0eS;;z8DAT z5BUXTSD*{f0f+#oV(L^YpaqTp*FbY10B8n;0Kq_GfTq`23Zt+uA*tYAKr}E4=mSuC zI){)osKH+WVF-r;)aVe%U|=A^)cABD4M+v@{;3Bsi0BS<1OCSzAPqJC(}q){$q}hj zqkujDHM9j9(j1tJFf5#>X$GY=KrN4iYzdI*`#^64xe}7bbv{6uC~YfXh7xXva9dy@ z>A(tr&ZP!GO?wSo2k7J*Ns!+FUju2(UA}D?17$Su6+m|m`2gJ!}fTJ+o0Z=Csfqse{0NEc%23(Ma8bWC(e;Op^BdF!6QcWYr z!CC()k(yYQl!jJu)hcQsYDL38saVZN>8KNwPfbg4c}fG5D4-Tfm8eiTwIbrx!qm!$ zqjYLzY8tZAx4?LStfIz$2Yn(ylZ3*PfxIdB~84l!kV5+BD}fd=N*3nvpV4;dWaPz-4JI zZf|6D3avM>n&q4WJiX!C6^(0Ze!mN$>$`dc+>#h*{D_V_nXL&0yiPJF$1D_34o*K$ z`Nyx;>^L%30MkPZKg8_u)$W3w5L3mxhpehNu@m2bEfwC+n2mX$Cv34^JlV-S&Gi)C zE%KhRYNoy#&1n(53z>>VDHZWv41^|CsU*JJ#q6Z&mBi9rtexajN#q}9Ri(xnQFM$s zI;#H||N8~&yO!o2?<%ogex6=baFhryLOC(Q`8Q@SPW-{z;~S+8zk^_kv+`L z>GLVVZKm&Kc8%4yA4Er;j*R)^P_eNHW0%$UBOIDIqJph-W~jtK)41Y=2%`O7=HsZo z=-`W}U)#r8Z#;m!jb(GS7qj-VNJsUJ2aT46?7BTRE*A+<0@?GlFxkfz~aUQ$7sca`|R$2eGu`o8 jCt{@}bm|C7_&m>UNzM%+2f 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 Th3~$WMw*xzvx_1hHsk*Sg{jum delta 30986 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 aJXP8$I?O;X5~fMR%b5DeP2)>v^ZpOb(?Ea# diff --git a/package.json b/package.json index 0622aab..9d6d1d2 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,8 @@ "@elysiajs/html": "^1.1.1", "@elysiajs/jwt": "^1.1.1", "@elysiajs/static": "^1.1.1", - "@kitajs/html": "^4.2.4", - "elysia": "^1.1.25" + "@kitajs/html": "^4.2.6", + "elysia": "^1.1.26" }, "module": "src/index.tsx", "type": "module", @@ -25,31 +25,31 @@ "start": "bun run src/index.tsx" }, "devDependencies": { - "@eslint/compat": "^1.2.3", - "@eslint/js": "^9.15.0", + "@eslint/compat": "^1.2.4", + "@eslint/js": "^9.17.0", "@ianvs/prettier-plugin-sort-imports": "^4.4.0", - "@kitajs/ts-html-plugin": "^4.1.0", + "@kitajs/ts-html-plugin": "^4.1.1", "@total-typescript/ts-reset": "^0.6.1", - "@types/bun": "^1.1.13", + "@types/bun": "^1.1.14", "@types/eslint-plugin-tailwindcss": "^3.17.0", "@types/eslint__js": "^8.42.3", - "@types/node": "^22.9.4", + "@types/node": "^22.10.2", "autoprefixer": "^10.4.20", "cssnano": "^7.0.6", - "eslint": "^9.15.0", + "eslint": "^9.17.0", "eslint-plugin-deprecation": "^3.0.0", "eslint-plugin-readable-tailwind": "^1.8.2", "eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-tailwindcss": "^3.17.5", - "globals": "^15.12.0", - "knip": "^5.37.2", - "npm-run-all2": "^7.0.1", + "globals": "^15.13.0", + "knip": "^5.41.0", + "npm-run-all2": "^7.0.2", "postcss": "^8.4.49", "postcss-cli": "^11.0.0", - "prettier": "^3.3.3", + "prettier": "^3.4.2", "tailwind-scrollbar": "^3.1.0", - "tailwindcss": "^3.4.15", + "tailwindcss": "^3.4.17", "typescript": "^5.7.2", - "typescript-eslint": "^8.16.0" + "typescript-eslint": "^8.18.1" } } \ No newline at end of file From 0229851bf9184c40cb9886be3cfcde8fa59212bd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 18 Dec 2024 09:07:21 +0000 Subject: [PATCH 012/343] chore(deps): update oven/bun docker tag to v1.1.40 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6767441..adcf8d4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun:1.1.39-alpine AS base +FROM oven/bun:1.1.40-alpine AS base LABEL org.opencontainers.image.source="https://github.com/C4illin/ConvertX" WORKDIR /app From 9ce46aefbad0777f7dce527e53f2d18922606b0a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 Dec 2024 15:33:31 +0000 Subject: [PATCH 013/343] chore(deps): update oven/bun docker tag to v1.1.41 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index adcf8d4..05edf95 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun:1.1.40-alpine AS base +FROM oven/bun:1.1.41-alpine AS base LABEL org.opencontainers.image.source="https://github.com/C4illin/ConvertX" WORKDIR /app From 815de531ede59773e533b4e1257eae000e2afb0c Mon Sep 17 00:00:00 2001 From: Tejas Shah Date: Thu, 26 Dec 2024 07:04:26 -0800 Subject: [PATCH 014/343] Fixed example docker-compose.yml file --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 04f5013..cbb0f97 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ services: environment: - JWT_SECRET=aLongAndSecretStringUsedToSignTheJSONWebToken1234 # will use randomUUID() if unset volumes: - - convertx:/app/data + - ./data:/app/data ``` or From 95dbc9f678bec7e6e2c03587e1473fb8ff708ea3 Mon Sep 17 00:00:00 2001 From: C4illin Date: Sat, 4 Jan 2025 12:54:22 +0100 Subject: [PATCH 015/343] fix: add qt6-qtbase-private-dev from community repo --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 05edf95..34f0b91 100644 --- a/Dockerfile +++ b/Dockerfile @@ -54,6 +54,8 @@ RUN apk --no-cache add \ inkscape \ poppler-utils +RUN apk --no-cache add qt6-qtbase-private-dev --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community/ + RUN apk --no-cache add calibre --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing/ # this might be needed for some latex use cases, will add it if needed. From e7c34a9c9440e2e783367d2d03a22126132f3dee Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 4 Jan 2025 12:43:57 +0000 Subject: [PATCH 016/343] chore(deps): update oven/bun docker tag to v1.1.42 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 34f0b91..109301c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun:1.1.41-alpine AS base +FROM oven/bun:1.1.42-alpine AS base LABEL org.opencontainers.image.source="https://github.com/C4illin/ConvertX" WORKDIR /app From 538c5b60c9e27a8184740305475245da79bae143 Mon Sep 17 00:00:00 2001 From: Tejas Shah Date: Fri, 3 Jan 2025 15:06:38 -0800 Subject: [PATCH 017/343] fix: skip account setup when ALLOW_UNAUTHENTICATED is true --- bun.lockb | Bin 168320 -> 168320 bytes src/components/header.tsx | 26 +++++++------ src/index.tsx | 78 ++++++++++++++++++++++++-------------- 3 files changed, 64 insertions(+), 40 deletions(-) diff --git a/bun.lockb b/bun.lockb index 61bc091d3b8b4fab76925b40392fd7985a81361f..68fabb93cbcf9097d37a28c2e8c33959dba271ba 100755 GIT binary patch delta 1386 zcmXYw%TH556vpSYQ~@c9P(YAJsq&_2p|%u?ELf-*jH1Lx6e$mbiZPgo_=v5bA^1p) z37%jK!9opSTxrrkiHYt_bm2c>j5~KOG;!f~+B3Od=9}M~nLGEKxzVNUD4zH9XCabf z((Nc2gU48)?aGcRvtpd5tXEkE#ygcAS7yUFU)c#|TQDwC)(0l*wnDqoEMiV;U?xCm z8k#d;a*!;jLfKi3%f`4vPK0(&**18;vVLXqVa>|UE3<=nl?|j=#F$*bQAk=?10@4v zDPqhZm>gyYbXD1~#z|Htl#M8ptk`7%+67%JS@{7kUq7mG1@Ipu7)ZOQ&;j4A>=Js} zrx21-NGiuPPEtAoNxPzP#qh%^f`fv|hf11%67wd zYr1YID+BX^NqQ%hmBY7a+)ZUtwl|Pu=$5id_$kfI?KF!RC*ZWgJAkrJ71RJPsgw-i zF)nCP3|ds#9{5+v?kU>~_5xlqIi;)`{*=Z|E2{y^CDdP1d0$~Ie2xY_KriR2gRyj|mF(Ti<>3Sp!S50y2-cfd;-9w}>r4?|Lh$2=Y*7nSo|jA|T}AWt=_S!VHi zCx4AmzQc*(GoA9m&!(pS#;CnRKJK|rwZaGBO%f?SX@@#{4mAX^5GY31MwRb<8S=0#|M!z(moX)^q2g?`%PijVQz zRqEn@t5ln{53A+2R&w1M4cWr5L4LAECoO{}@qLYYa>>V@btJPX*a|4zFE=*F; m>ciUJBsL51Op?6TR=1avNs5x6Lz`5BF7E>sBrb1~Eg)E+AfO;k=@%9uByuo9G>Re|1c9OwK?#Xb#E(|+3-w@3 zWP&k73nhT@q)AgsOicI#^x(mG<>JM&-h8IaWGDN~@15OucJ^(fi?%4nXZpJkDK*=6 znvBVS6falS1%_cP@Em1lm1QE{t?ZmKE8=`*-O6?#-mC1qvYm(vwpqmVD9i#V(!^dc zc|kUOpRx;@XG7ertWVi4#6dVh)2~blZk5Vm7nS8g2bB$^S;Uw;K(E3255m^Bn(ZvqvEof=mRZT2}{t7KN zs!Tf7p==DZY*P$B11+7ru6feEOK`Dq%`1T(P7`Ay6M%A1`3}NxY55Ih`=JNn((+qi z7{&?j(9TRMD+BX`NhfbBlW)kUc~i8BY+6|j*c)i++KjSV=w8D8i#=3$5IPT9+V)77ygiP0&&^W0qP&@Sw7JWzAqxLmf{nVs|O?EkX>_ z0(U|*B<2^Xh@4Wolqw&CT)vp($<}3@TuPV!bBWq`bD4_S6DNB{wc%rNYPLz$a&In^ zn2J*eQA6VQG94$Y1*=HU79t?Y01x%TK$)@Sjzx zvkpRs*tJGs8sgbC>Pc*^QD+|c*psAU3h;>}`N_lgW%BW-Bz0zn+nI?=C)a73 zy!>sQib{P=Zm(&>yYOETtvThi3{1AwW>J5W+cWoz>|B_lkj3ZraaRhP1^7vd8ZAM$ Yhf^tvlAl{Ps029w3)vH+8|3)$ADq&TtpET3 diff --git a/src/components/header.tsx b/src/components/header.tsx index b1db00e..20167a6 100644 --- a/src/components/header.tsx +++ b/src/components/header.tsx @@ -3,10 +3,12 @@ import { Html } from "@kitajs/html"; export const Header = ({ loggedIn, accountRegistration, + allowUnauthenticated, webroot = "", }: { loggedIn?: boolean; accountRegistration?: boolean; + allowUnauthenticated?: boolean; webroot?: string; }) => { let rightNav: JSX.Element; @@ -24,17 +26,19 @@ export const Header = ({ History -
  • - - Logout - -
  • + {!allowUnauthenticated ? ( +
  • + + Logout + +
  • + ) : null} ); } else { diff --git a/src/index.tsx b/src/index.tsx index c609af2..859ffb4 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -215,6 +215,7 @@ const app = new Elysia({
    @@ -340,6 +341,7 @@ const app = new Elysia({
    @@ -457,36 +459,19 @@ const app = new Elysia({ return redirect(`${WEBROOT}/login`, 302); }) .get("/", async ({ jwt, redirect, cookie: { auth, jobId } }) => { - if (FIRST_RUN) { - return redirect(`${WEBROOT}/setup`, 302); - } + if (!ALLOW_UNAUTHENTICATED) { + if (FIRST_RUN) { + return redirect(`${WEBROOT}/setup`, 302); + } - if (!auth?.value && !ALLOW_UNAUTHENTICATED) { - return redirect(`${WEBROOT}/login`, 302); + if (!auth?.value) { + return redirect(`${WEBROOT}/login`, 302); + } } // validate jwt let user: ({ id: string } & JWTPayloadSpec) | false = false; - if (auth?.value) { - user = await jwt.verify(auth.value); - - if (user !== false && user.id) { - if (Number.parseInt(user.id) < 2 ** 24 || !ALLOW_UNAUTHENTICATED) { - // make sure user exists in db - const existingUser = db - .query("SELECT * FROM users WHERE id = ?") - .as(User) - .get(user.id); - - if (!existingUser) { - if (auth?.value) { - auth.remove(); - } - return redirect(`${WEBROOT}/login`, 302); - } - } - } - } else if (ALLOW_UNAUTHENTICATED) { + if (ALLOW_UNAUTHENTICATED) { const newUserId = String( randomInt( 2 ** 24, @@ -512,6 +497,25 @@ const app = new Elysia({ maxAge: 24 * 60 * 60, sameSite: "strict", }); + } else if (auth?.value) { + user = await jwt.verify(auth.value); + + if (user !== false && user.id) { + if (Number.parseInt(user.id) < 2 ** 24 || !ALLOW_UNAUTHENTICATED) { + // make sure user exists in db + const existingUser = db + .query("SELECT * FROM users WHERE id = ?") + .as(User) + .get(user.id); + + if (!existingUser) { + if (auth?.value) { + auth.remove(); + } + return redirect(`${WEBROOT}/login`, 302); + } + } + } } if (!user) { @@ -547,7 +551,11 @@ const app = new Elysia({ return ( <> -
    +

    Convert

    @@ -951,7 +959,11 @@ const app = new Elysia({ return ( <> -
    +

    Results

    @@ -1038,7 +1050,11 @@ const app = new Elysia({ return ( <> -
    +
    @@ -1284,7 +1300,11 @@ const app = new Elysia({ return ( <> -
    +

    Converters

    From e2581f42f58300b730780d2d824dd4f38955e249 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 Jan 2025 19:03:18 +0000 Subject: [PATCH 018/343] chore(deps): update oven/bun docker tag to v1.1.43 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 109301c..e494ea9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun:1.1.42-alpine AS base +FROM oven/bun:1.1.43-alpine AS base LABEL org.opencontainers.image.source="https://github.com/C4illin/ConvertX" WORKDIR /app From 460bda62d52c8a5f7b8bb6ac5a67605ac806c357 Mon Sep 17 00:00:00 2001 From: C4illin Date: Thu, 16 Jan 2025 21:30:10 +0100 Subject: [PATCH 019/343] chore: update deps --- bun.lockb | Bin 168320 -> 169563 bytes package.json | 32 ++++++++++++++++---------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/bun.lockb b/bun.lockb index 68fabb93cbcf9097d37a28c2e8c33959dba271ba..7fbfc1f7d95f310a7593779394d8828279f8cbca 100755 GIT binary patch delta 35724 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
    cN*EED{V--y2^E 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 Date: Fri, 17 Jan 2025 09:03:11 +0000 Subject: [PATCH 020/343] chore(deps): update oven/bun docker tag to v1.1.44 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index e494ea9..1115f7a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun:1.1.43-alpine AS base +FROM oven/bun:1.1.44-alpine AS base LABEL org.opencontainers.image.source="https://github.com/C4illin/ConvertX" WORKDIR /app From d4e8f376c15494fb34cedd5481c8048a2a82ba33 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Jan 2025 17:41:37 +0000 Subject: [PATCH 021/343] chore(deps): update oven/bun docker tag to v1.1.45 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 1115f7a..9ee33b8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun:1.1.44-alpine AS base +FROM oven/bun:1.1.45-alpine AS base LABEL org.opencontainers.image.source="https://github.com/C4illin/ConvertX" WORKDIR /app From c47f0c12fe2ff163a21e31b10a4d10fce732ffc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emrik=20=C3=96stling?= Date: Sat, 18 Jan 2025 12:01:01 +0100 Subject: [PATCH 022/343] chore(main): release 0.10.0 --- CHANGELOG.md | 14 ++++++++++++++ package.json | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16e0238..101b1ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [0.10.0](https://github.com/C4illin/ConvertX/compare/v0.9.0...v0.10.0) (2025-01-18) + + +### Features + +* add calibre ([03d3edf](https://github.com/C4illin/ConvertX/commit/03d3edfff65c252dd4b8922fc98257c089c1ff74)), closes [#191](https://github.com/C4illin/ConvertX/issues/191) + + +### Bug Fixes + +* add FFMPEG_ARGS env variable ([f537c81](https://github.com/C4illin/ConvertX/commit/f537c81db7815df8017f834e3162291197e1c40f)), closes [#190](https://github.com/C4illin/ConvertX/issues/190) +* add qt6-qtbase-private-dev from community repo ([95dbc9f](https://github.com/C4illin/ConvertX/commit/95dbc9f678bec7e6e2c03587e1473fb8ff708ea3)) +* skip account setup when ALLOW_UNAUTHENTICATED is true ([538c5b6](https://github.com/C4illin/ConvertX/commit/538c5b60c9e27a8184740305475245da79bae143)) + ## [0.9.0](https://github.com/C4illin/ConvertX/compare/v0.8.1...v0.9.0) (2024-11-21) diff --git a/package.json b/package.json index d5e56b3..f5a947e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "convertx-frontend", - "version": "0.9.0", + "version": "0.10.0", "scripts": { "dev": "bun run --watch src/index.tsx", "hot": "bun run --hot src/index.tsx", From 3b7ea88b7382f7c21b120bdc9bda5bb10547f55d Mon Sep 17 00:00:00 2001 From: C4illin Date: Tue, 21 Jan 2025 23:24:53 +0100 Subject: [PATCH 023/343] fix: ffmpeg works without ffmpeg_args issue #212 --- src/converters/ffmpeg.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/converters/ffmpeg.ts b/src/converters/ffmpeg.ts index 744f416..5154dab 100644 --- a/src/converters/ffmpeg.ts +++ b/src/converters/ffmpeg.ts @@ -700,7 +700,7 @@ export async function convert( message = "Done: resized to 256x256"; } - const command = `ffmpeg ${process.env.FFMPEG_ARGS} -i "${filePath}" ${extra} "${targetPath}"`; + const command = `ffmpeg ${process.env.FFMPEG_ARGS || ""} -i "${filePath}" ${extra} "${targetPath}"`; return new Promise((resolve, reject) => { exec(command, (error, stdout, stderr) => { From 6769fa2f831764ad2d4b1c862d65fee8364bd6a9 Mon Sep 17 00:00:00 2001 From: C4illin Date: Tue, 21 Jan 2025 23:25:11 +0100 Subject: [PATCH 024/343] chore: update deps --- bun.lockb | Bin 169563 -> 169563 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bun.lockb b/bun.lockb index 7fbfc1f7d95f310a7593779394d8828279f8cbca..992109c267eea2dff971c9b6acf6f8145a41491b 100755 GIT binary patch delta 214 zcmcb;hU@kku7)j)^?Mmjr#I|nl#sE|GhonUU|>*YU}%`|z-+tuQ3Eax#yAr_6FtM} zTlO;gF`7+h-Up=2rw8q0^kTG_K6f8u6Qjv=h5d{Y%tk;(*83R^SWNW{8K&p&XKY|J zp8jD!qd1F^fu6y1?gNYlKs5%_?G7-C2LTxj3_BSa7zBWJab4pzH-Er(fr&BBP!B9~ z5-7t1l=&cW>E|1_w~K%>CO{c;28Ps}%HqsK1_tK^kAK{=z1a%YV`#8_`2of)R{^ delta 214 zcmcb;hU@kku7)j)^?MmjrZ?*YU}%`|z-+tuQ3Eax#yAr_6Fr0J zTlO;g0TnXu15!rQgZ43cF`7@GyN|Jn(RjMTentsqL!ct-{fq`IK=qc>^Y=400M&ii z&nV7fXrX5~o%;Zz0Z@(Mbh`tL;z2+L1H(>61_lA3U0m0A&CMUMU0`C21B!!WP6B0k zfHEH>F8zGt_I43a#zfCZ&y0Z~HK(#TGm(M8dBNi!_iS&rLiHG#ZC`$Xam!Tz&vHRS From cdf9bad9038761ed5c8f412e3922c9501d18e99f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emrik=20=C3=96stling?= Date: Tue, 21 Jan 2025 23:25:50 +0100 Subject: [PATCH 025/343] chore(main): release 0.10.1 --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 101b1ab..38d1478 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.10.1](https://github.com/C4illin/ConvertX/compare/v0.10.0...v0.10.1) (2025-01-21) + + +### Bug Fixes + +* ffmpeg works without ffmpeg_args ([3b7ea88](https://github.com/C4illin/ConvertX/commit/3b7ea88b7382f7c21b120bdc9bda5bb10547f55d)), closes [#212](https://github.com/C4illin/ConvertX/issues/212) + ## [0.10.0](https://github.com/C4illin/ConvertX/compare/v0.9.0...v0.10.0) (2025-01-18) diff --git a/package.json b/package.json index f5a947e..ebd9a61 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "convertx-frontend", - "version": "0.10.0", + "version": "0.10.1", "scripts": { "dev": "bun run --watch src/index.tsx", "hot": "bun run --hot src/index.tsx", From e1f7fc1ecb870f40812173ac0d7e06780ea5ddf3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 18:46:19 +0000 Subject: [PATCH 026/343] chore(deps): update oven/bun docker tag to v1.2.0 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9ee33b8..d18042e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun:1.1.45-alpine AS base +FROM oven/bun:1.2.0-alpine AS base LABEL org.opencontainers.image.source="https://github.com/C4illin/ConvertX" WORKDIR /app From 0a5d0487b19c3841c06b1b58ed6aa574ff9c0cde Mon Sep 17 00:00:00 2001 From: C4illin Date: Thu, 23 Jan 2025 21:59:24 +0100 Subject: [PATCH 027/343] chore: update deps --- bun.lockb | Bin 169563 -> 165620 bytes package.json | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/bun.lockb b/bun.lockb index 992109c267eea2dff971c9b6acf6f8145a41491b..9fb639b2629c8984ade061b0bdc3f738982a8118 100755 GIT binary patch delta 11643 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 delta 13005 zcmeHNcU%-#*Pc7Fz=9ws9h4@54FQ2gQHqL6Q;9KR7X%bUP_Q6~i`cP59QE3JjXhv6 z#){FXu@P&GiN=x`+iMp!;`f~0yULsI{r>*`dFRK&bIxGOO($PoSHQ{eRO)NGRVA*HUMoqqRa(M zeO}1W=hS+*zK%DT`aX`Fh(j~=alT+0y%X35?1DHNi?L|u1>&jveu^ZyfG>eUDsU}tbsFinaTm?~5c(Z}5eQ$s%re@J#_b`D~8!*_zd65Ieh z155*2nX8|qEK%MEO!dQczE&#ohCvBfgQ)@oV~L9Hi4p$}5&H5#HsGjdaNk+WoqIO@2vpe)1UxY{(P`edf+U+X?s{Or5>eEWG( z!A`5q)wyxQdkyYbJk?Isr(w5-lTSJt_ipU$Gj_pm?vC}%+FQzHdG^ceDW4|=mUZ=x zb0kAK5m8sirjdH?DtLyT%T7eb)zJlXjnW6q&~w>|sJhOqnNr%axpLUa)WW`}B(*_) zm`uq`vF@T%Sq~*TDO_EOvK}a_qgZ=r*zd|oXjY#~QZO_bEoju8;dO(jQmR}v>ILxH z!efec3yu1$@YK3UQ%q_I%8ZmMca1s%9!0`))~NESOtEMms;-3P2VGXG`e@Y8;6=kz zDW%>Tb?6r#d-l?(N5N}{GNzO|Yt-9C8KXQ@x8a2-bJ~ZhoN-wQAWJSU@S!M}lr zI>NIVEJ@f=!W#zfQ{)bKl%Tn8h91MC#nmU_mZVQtzix@}+M-Oq4d=rPgQwrj=iy=J zh#s0G>$jVUV(p_*=fKnVPF^;yr`QgNOlYoA{{SyS=g~=Ejd`UljQ;#Iszi9$ikQTC zu=JBb8}J4^%0t$zw9*qrSo%8D&+qU$>FZzuy@nY)n(B0T)B?tZ zlVgqWjFp7g5K}nR6($wixB+$<1)}2?8aXyyiOC65Pk~4|s}yUrRsJ!g)Jr2jOjpcu z!&F|l1@%?VxQD8>u=G=bb65QvJeorNWJltLLn$H+7mYl1xDqouOg=qaDH$E6PQXox z>gmovc}J#VHYQAdnyJK$2~&3%p>IW>ei1y;119t$ybikLXmaebBxx}6XlDfDGhIR_ zV9}<-024!ua5K&%Sv40{qR#pQR*KGw8Hp{Wvo^yTrn9U@8Ag@?OTVn8IAbc|eWq&` z<5bz?h}PuH93^Ian0hq?oG-KoT8Egzq3a-0K+PE3-SqjBw;3KSqOMGJ2VQ?&zY(Ji z1DFp>-xO`2$ME!7(4u!9Q@gFD@VXjuQs06X3D1nKqH52vA0wSL^7OGv$%HWVZHS!_ zA}Li(LrljRX1O#$BM%*?#1w|fd&emyg<!8dj3RRcG3P5w%bXb~q z@Y<2C(i9pR7+0v66^F??3(I1P@2jhVd6+SU_ zyiEADnWPo?M+vM3yMhnN=${IXh=T9ICh&hGQ7|QN9zHc(C3IqH=%Uas37weqtHS?J zOhwm3`8ApfYWNp0X}^jBVlr>wA2oOjYy|#;#D6g9_eIhCF-LbcC@ z@e)h{)xv)(_;0~Af++~5B!j7;I$)}2jDM7fnP5v2aS&6y6_{qy7EDDBde%zLFsLCH z!3_mB0#ijdF#aS@{G$eZgx?%Y^;&>w$y$TysLfO!2%Xvq7UjgGYjlkD4-o-vML{T- z4q|G!gDCGL^x912vCyfgn${u+y4$Nzrdy4BN+h*n?uFFk!~!P?oc^Afh4YWCL5 z^6R{HhfNDhW28af?K(ci-L*+v^sv)qsvYM&v@14c?OWXI=z{IGZ@1jc*xR>0YcR~> zVp0?TNdNVV8n2i?p!2w}YtnO*nSg+>t>!0eebh=ROq!Y`rN~nf=M;? zYQRfyu`nD)MH`MkwCvK_=cxOik+U{l+@|qeb!5ieoOYWZ+WI!p>};ge969%4P;bW; z$|jGU$0nIyZjpEGj-qYp9-1E=Z+vjiHDyGVgLcTb*T3`qJ9FuD&x!FzgEsRcfrIwk ziTZqR^U2k5Ez0_KoLSN+-tyhBPCTrn>2K?_bV#NVA+0UTGgte*5g}XO07Nm%lSz-KlKMPxFkl-iH>> z=hMzM*nYkDv@3VYrg?h4xPH9e^R~?s$6?CsSp`S#y=%BJ(zPR~C1 zq>=r|bAi6)g_a|Rd)FG{*4kstd~)#11D&0ogl_K{;bPux&Ys?xW#hx*ng#s5Czq`p zZtD}Jy0mxoO2-jS=4Z2Kw9h_Mo{;|a&oB3-&v)Ni=a1jY9h4PU93sZPW{b8p3|^nJ=@++# zE_N?`u2uP!y}T0Q6>+T1lXV^1#O*Tb*(3g|Rz{TtPd#gLygH;Adz~CRy8K;I#|9hb zxy^aJvAD^%ou6LJ96qt?k0JMmZ+Z51;O%{lV-ro35$_!$dUuaGFd?esLFY}Y3kJsY zwHP0tetFc+;B}+sj;?>-++#u8K525y>zA*3bsgUBhG$@_sU62Q3VM0%RP5ToKd0T= z;8b?(y{S6l$%*eaRiwQgvS)OjwacghVUMjX{8ApA-*odmyB%8<={kFd`GQUAl1jUr z%Q1@!ayCA%@y`A;V4M5IyUiMgL@!;(Elik0ocs4X+k9U&Dz-<*ugxP4W_)XP^HD+j z>#w8h$M=S|fRu97fE&0^!j(VpQj8oa{0 zZemu3U7x^eqt-^dZof!=zHjxTm5Xi4&n9fCXlHe7ZL+;oy8q>m$CfM(>XPieK6<+R zGGY4YW;w;nN*Bfb#tY4ugElv*%kCb-pMN{_v#aNRpOLN1o-*aD^BGT<7FvZzKN`00 zhyCqe-7tUQ{^E4s3vr8fFG$^Tm%aLim#lCq@p7E6e(9 z`(0_X$Ah;tM|$h~8kP4d4tG1tZ|-w{H}SA<)w*-Tz6n{auF1~1`&D1FInl;dI~Mv!Cmt@@V%-C+U zWY*FCYqy*Ue%k+3&zJW%bXsEVGyA=xG^F98SDq!VYnR>enws&~fyBE{CRf%Z-0jJK zMS5|C?Xp+2%aAp~1z2;+E?GlUZ)93x>ow|0S$*9gKG7YGIX z2njx}5WE^fDCDCWLbyu8B@(pUy%B^NZV;w6f-s3!kr3hzA;=ZNWIo9i!aWl1k}#F~ zyFpm&0b!vVgz5Zu61sXqh;oN8lb5l2ZYUyA#Ct~Fo!=SA<+v$FHZV<32!rG@%g9j_`U2s`7skix}qn+Zv z_}lj47iWT|D=jZ%On?5t#G#r0%PqdsE9Zpt9(iDW{g-|>yQie}^hmU|$*8m4Zcm#( zu5k+=oJIZOil2+mXw0^CvP^wi|INl8=Z+a|w)6PV^I6@MYkxU0d)g0Y zZ~ipu%;b#@3BlLiO_^WWMR~ZP_|4W@XA$Q~O_1&hAEbM%3G!dUt-T@SHH9$78^SVv zgan^v5WIXKtl*=3AY3Kk5(%rgdsEh%t>)v2*6=E#wY+IF&^kVeXg&X#XhVg6a~5vT zzUHGku*nwjcq~o7VZ6aNPIJDd6|3MyotO`vzZmiJ9ocf7aX5&LCfSH@>%+g%p_xJRr7#==g@#{=bl;9i8zeORlJxN#^kAV`K*LjL-H{|TOL)mbONOR zG}=5Ny1?!SsP(6)pmi=ug8 zN{{xi3N{_{MR+UNmau7sXsk4DKOhJ;tq_fsG=BgW6#Cs)S^^D!^bA#s1n5{QwAQfk z{Zy+vvz7@l5Mrg6pyfgfg0>u*JD4T~fAq_sR0_=lyi#Zy*t3MTN@yX_<_c}K(Aq## zL8D_0!y_wduq{AmEFEh_U?^-l+i61A39TLMRzf zgcc6l1~$zkUHmC70{u(2Lfj6ky4G|CDvwS%7lbP1C7Ej0Ym4{^FU8s$C_hllXG zIMViuINGgluxaE6gcc{XNbo_1{-I0p06oQ}5gihN_?<&~08sXah1MN5UCSu@BSPx| zn_j>mtx{+Su!qB@?il*n6 z?Et#uhXLULohG!Hv?lZblpcoGpe{W`ZAs-oE5Hx%2UcQ)E4X?co2;TI)suMXI`+V^ z2TBrv&j7l5bp_}tX-B?rJ@eGkh3Zd4-vj;v)&T2(wZM8{1F#X;1Z)Pj0AB%Hfo;Hc zU1-=FL0p9`pWo&^1yv+tS#F{RI^h*L=`{ z%2*sv+Q^(O8Y4?Dzz(S7GdHrKE$G&aRpoi&~5Dr{1?C-;07<<#9SkzkPxjn z-2>?1^=#-&TgiZ;%o!5>Lc57WHlrn*SETJLMZ8;n0Aap9bx)TD9kOR6? z0UJS*@MECv!cHGfXvhlzn!QrM3789f4$!qc3LFk-D%Naa=B8R|^JgF!S~d6yKnZsQ zNIwVc1fBsD`#10ucm(_c+yrPf?*V@Sw}7j_8{k*q5)gv6i@{;w_P|2e?ZDaCau;^9 zhGwB~rbBGQ_>OHXhPCBUUo%&a2*{Kd)tv-%f=yq(seT7=B;#+tVvYD>JcHwnx3W&! zDJc1XgYG;QQVQKxYZr zp8<4Nr&*yZ-6ndmqC12Hz!3Z!3VOk(smub;0qAx=8khypM+ExlFawwlOarC>lYwHO z2%rx?6M;ft0#Lx+%b2q^7ba~dItA(b{}%vtLo-f%7f2KuZNC&C85jce1!(p9fa!)x z`aoa+K%cQm8w?BrNGCSfNw8BHJ`-L;19T0beN8rXXc#A56Ue6P0gZbEKp$I)XRKYu7Izc)*yDFt>nUx7>=ydzinP`Ej>H%+cA;7x&C@^(4s+o9@Kvv-h2P z4D^**h;M)&zkZR0RLnla4p<>N<~(Z+ns}Z$g1S}dh$8s?^DO#*l@vW?c19mt;rpuC zZV^)lUGiOjF&n=8C#ErYb`=kQVk21X7^@@9k$-uS1wj0_=HiVgYwrG#+40n;%wFHm zzlDTU?7GB0w{r!FxkyOhkay7@X( zoKm)RX>4x<`}_Ly>%Ze#GygHOXRUeuE#|@KVUU9G-=rnS*u3=fwby|H)9R&BBFIa-vC5M9A@#TJ@+u4DxEvU z;wt(bVH+5?Jj0w89Ywdr^e^Bf>&BNpVfm`D1My{zXCGp=6~0f|TqfThTygLjlbPH< znO8n%0rK%=?kmd<@=wX!>IHLfxtFYe#d7DCROP1ai>keTlk;7hm1V z_S*U^UijOm)^Ce`<(2u?Sz#O3h!TADsvg28pstJIW!jAGO^-Gm+~(^~b(^N}UDUea z^;?(SGjIJ_zuM(fgy99Cylpj$lTWAd8RTD1vcKJo)|;B((H zr(na|(GxCP?S8*DxDlEO^hHDXI4pK#_TqE(CeDcCx)R-W!h1OX?JdS_coX~BJo7KZ zzqn_qi}1&ml??A@x1K*F|Hz8fg)+0i?Z5&%&nc6)c!%^2Z)sOJ9J_x0e9axy#d+rI zAA-kmeDFIKXY>ii1jub&(rG2%}gf-VEzJpL-@oxvXfjrp1Y}J8{=TChiN`PTSsm(RNz$!;!&7r(uZ zZS3jooMH5-fwlR3ijf>AqoFWkT-VU$LnCxqS)hMKyhHb1-Q(vd`ZGY+r9MH2V8hGf zF?&AT{H_1ZUbWlQJwz$`qep(7_+CpYK9w|?z_V0x0QEuxqh67InqZw@I}5q0fae&? z0cM-U?SHd9-(f6wz-NJq$HsC;neR4{!?~Y{Tx53DUjGT<=)#J9Y8gM@_*J+$%5xjy z>c2BsJ`XC=$V)&@A##8IyT9zgS51&knL{Mce>+w=o>|9NC=@>?xb_e(hy@ z7RZzQA+$(C$30Ty`W4|Raw{3Pxd1*YO%7k=gw!g%kZE`eRH@TKcH#AH;qGifiMNo= zKbG2|acf)IQ(v??Rd(eb!w~73B3ttPX0mz3(KI>B$qIWf*mv~M{NyoNEk} Date: Thu, 23 Jan 2025 22:00:19 +0100 Subject: [PATCH 028/343] feat: add deps for vaapi issue #192 --- Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index d18042e..bc750f7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -52,7 +52,9 @@ RUN apk --no-cache add \ libjxl-tools \ assimp \ inkscape \ - poppler-utils + poppler-utils \ + gcompat \ + libva-utils RUN apk --no-cache add qt6-qtbase-private-dev --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community/ From 0ba776c129aeffe4d0cce8e0ed98017d2e7130fd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 Jan 2025 01:48:23 +0000 Subject: [PATCH 029/343] chore(deps): update oven/bun docker tag to v1.2.1 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index bc750f7..3eca653 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun:1.2.0-alpine AS base +FROM oven/bun:1.2.1-alpine AS base LABEL org.opencontainers.image.source="https://github.com/C4illin/ConvertX" WORKDIR /app From c825ec06e2c0ab64f7618444b8d6e4ffb6e5f64c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 1 Feb 2025 08:31:38 +0000 Subject: [PATCH 030/343] chore(deps): update oven/bun docker tag to v1.2.2 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 3eca653..55770f7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun:1.2.1-alpine AS base +FROM oven/bun:1.2.2-alpine AS base LABEL org.opencontainers.image.source="https://github.com/C4illin/ConvertX" WORKDIR /app From e595014fcd59011bb07e4fc0f73db7f314e37167 Mon Sep 17 00:00:00 2001 From: C4illin Date: Sat, 1 Feb 2025 20:15:50 +0100 Subject: [PATCH 031/343] refactor: update Tailwind to v4 --- bun.lockb | Bin 165620 -> 183529 bytes package.json | 8 ++- postcss.config.js | 11 ++-- src/components/base.tsx | 80 +++++++++++++-------------- src/components/header.tsx | 2 +- src/helpers/tailwind.ts | 4 +- src/index.tsx | 28 +++++----- src/main.css | 113 ++++++++++++++++++++++++-------------- tailwind.config.js | 27 --------- 9 files changed, 139 insertions(+), 134 deletions(-) delete mode 100644 tailwind.config.js diff --git a/bun.lockb b/bun.lockb index 9fb639b2629c8984ade061b0bdc3f738982a8118..94f308aeffaf2a5e08171fbf5472200043ba1980 100755 GIT binary patch delta 41941 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 delta 31047 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 ( - - - - - - {title} - - - - - - - {children} - -); +import { Html } from "@elysiajs/html"; + +export const BaseHtml = ({ + children, + title = "ConvertX", + webroot = "", +}: { + children: JSX.Element; + title?: string; + webroot?: string; +}) => ( + + + + + + {title} + + + + + + + {children} + +); diff --git a/src/components/header.tsx b/src/components/header.tsx index 20167a6..7d2eef0 100644 --- a/src/components/header.tsx +++ b/src/components/header.tsx @@ -74,7 +74,7 @@ export const Header = ({ return (
    -
    @@ -601,12 +601,12 @@ const app = new Elysia({ name="convert_to_search" placeholder="Search for conversions" autocomplete="off" - class="w-full rounded bg-neutral-800 p-4" + class="w-full rounded-sm bg-neutral-800 p-4" />