mirror of
				https://github.com/C4illin/ConvertX.git
				synced 2025-10-31 03:53:30 +00:00 
			
		
		
		
	chore: fix lint
This commit is contained in:
		| @@ -1,21 +1,13 @@ | |||||||
| # Development Dockerfile for ConvertX |  | ||||||
| FROM debian:trixie-slim | FROM debian:trixie-slim | ||||||
|  |  | ||||||
| LABEL org.opencontainers.image.source="https://github.com/C4illin/ConvertX" |  | ||||||
| LABEL description="Development environment for ConvertX with all tools and dependencies" |  | ||||||
|  |  | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  |  | ||||||
| # Install system dependencies and development tools |  | ||||||
| RUN apt-get update && apt-get install -y \ | RUN apt-get update && apt-get install -y \ | ||||||
|   # Basic tools |  | ||||||
|   curl \ |   curl \ | ||||||
|   unzip \ |   unzip \ | ||||||
|   git \ |   git \ | ||||||
|   ca-certificates \ |   ca-certificates \ | ||||||
|   # Build tools |  | ||||||
|   build-essential \ |   build-essential \ | ||||||
|   # ConvertX runtime dependencies |  | ||||||
|   assimp-utils \ |   assimp-utils \ | ||||||
|   calibre \ |   calibre \ | ||||||
|   dasel \ |   dasel \ | ||||||
| @@ -48,7 +40,6 @@ RUN apt-get update && apt-get install -y \ | |||||||
|   --no-install-recommends \ |   --no-install-recommends \ | ||||||
|   && rm -rf /var/lib/apt/lists/* |   && rm -rf /var/lib/apt/lists/* | ||||||
|  |  | ||||||
| # Install Bun (JavaScript runtime and package manager) |  | ||||||
| RUN ARCH=$(uname -m) && \ | RUN ARCH=$(uname -m) && \ | ||||||
|   if [ "$ARCH" = "aarch64" ]; then \ |   if [ "$ARCH" = "aarch64" ]; then \ | ||||||
|   curl -fsSL -o bun-linux-aarch64.zip https://github.com/oven-sh/bun/releases/download/bun-v1.2.2/bun-linux-aarch64.zip; \ |   curl -fsSL -o bun-linux-aarch64.zip https://github.com/oven-sh/bun/releases/download/bun-v1.2.2/bun-linux-aarch64.zip; \ | ||||||
| @@ -59,7 +50,6 @@ RUN ARCH=$(uname -m) && \ | |||||||
|   rm bun-linux-*.zip && \ |   rm bun-linux-*.zip && \ | ||||||
|   chmod +x /usr/local/bin/bun |   chmod +x /usr/local/bin/bun | ||||||
|  |  | ||||||
| # Install VTracer binary for vector tracing |  | ||||||
| RUN ARCH=$(uname -m) && \ | RUN ARCH=$(uname -m) && \ | ||||||
|   if [ "$ARCH" = "aarch64" ]; then \ |   if [ "$ARCH" = "aarch64" ]; then \ | ||||||
|   VTRACER_ASSET="vtracer-aarch64-unknown-linux-musl.tar.gz"; \ |   VTRACER_ASSET="vtracer-aarch64-unknown-linux-musl.tar.gz"; \ | ||||||
| @@ -72,15 +62,8 @@ RUN ARCH=$(uname -m) && \ | |||||||
|   chmod +x /usr/local/bin/vtracer && \ |   chmod +x /usr/local/bin/vtracer && \ | ||||||
|   rm /tmp/vtracer.tar.gz |   rm /tmp/vtracer.tar.gz | ||||||
|  |  | ||||||
| # Create data directory for development |  | ||||||
| RUN mkdir -p data | RUN mkdir -p data | ||||||
|  |  | ||||||
| # Set environment variables for development |  | ||||||
| ENV NODE_ENV=development | ENV NODE_ENV=development | ||||||
| ENV QTWEBENGINE_CHROMIUM_FLAGS="--no-sandbox" | ENV QTWEBENGINE_CHROMIUM_FLAGS="--no-sandbox" | ||||||
|  |  | ||||||
| # Expose the development port |  | ||||||
| EXPOSE 3000 | EXPOSE 3000 | ||||||
|  |  | ||||||
| # Default command for development |  | ||||||
| CMD ["bun", "run", "dev"] | CMD ["bun", "run", "dev"] | ||||||
| @@ -1,8 +1,7 @@ | |||||||
| { | { | ||||||
|   "name": "ConvertX Development Environment", |   "name": "ConvertX Development Environment", | ||||||
|   "build": { |   "build": { | ||||||
|     "dockerfile": "Dockerfile", |     "dockerfile": "Dockerfile" | ||||||
|     "context": ".." |  | ||||||
|   }, |   }, | ||||||
|   "features": { |   "features": { | ||||||
|     "ghcr.io/devcontainers/features/git:1": {}, |     "ghcr.io/devcontainers/features/git:1": {}, | ||||||
| @@ -44,14 +43,7 @@ | |||||||
|       "onAutoForward": "notify" |       "onAutoForward": "notify" | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   // "postCreateCommand": "bun install && bun run dev", |   "postCreateCommand": "bun install", | ||||||
|   "remoteUser": "root", |   "remoteUser": "root", | ||||||
|   "mounts": [ |   "mounts": ["source=${localWorkspaceFolder}/data,target=/app/data,type=bind"] | ||||||
|     "source=${localWorkspaceFolder}/data,target=/app/data,type=bind", |  | ||||||
|     "source=${localWorkspaceFolder}/src,target=/app/src,type=bind" |  | ||||||
|   ], |  | ||||||
|   "containerEnv": { |  | ||||||
|     "NODE_ENV": "development", |  | ||||||
|     "QTWEBENGINE_CHROMIUM_FLAGS": "--no-sandbox" |  | ||||||
|   } |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								bun.lock
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								bun.lock
									
									
									
									
									
								
							| @@ -21,7 +21,6 @@ | |||||||
|         "@total-typescript/ts-reset": "^0.6.1", |         "@total-typescript/ts-reset": "^0.6.1", | ||||||
|         "@types/bun": "latest", |         "@types/bun": "latest", | ||||||
|         "@types/node": "^24.6.2", |         "@types/node": "^24.6.2", | ||||||
|         "@types/tar": "^6.1.13", |  | ||||||
|         "@typescript-eslint/parser": "^8.45.0", |         "@typescript-eslint/parser": "^8.45.0", | ||||||
|         "eslint": "^9.37.0", |         "eslint": "^9.37.0", | ||||||
|         "eslint-plugin-better-tailwindcss": "^3.7.9", |         "eslint-plugin-better-tailwindcss": "^3.7.9", | ||||||
| @@ -240,8 +239,6 @@ | |||||||
|  |  | ||||||
|     "@types/react": ["@types/react@19.1.15", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-+kLxJpaJzXybyDyFXYADyP1cznTO8HSuBpenGlnKOAkH4hyNINiywvXS/tGJhsrGGP/gM185RA3xpjY0Yg4erA=="], |     "@types/react": ["@types/react@19.1.15", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-+kLxJpaJzXybyDyFXYADyP1cznTO8HSuBpenGlnKOAkH4hyNINiywvXS/tGJhsrGGP/gM185RA3xpjY0Yg4erA=="], | ||||||
|  |  | ||||||
|     "@types/tar": ["@types/tar@6.1.13", "", { "dependencies": { "@types/node": "*", "minipass": "^4.0.0" } }, "sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw=="], |  | ||||||
|  |  | ||||||
|     "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.45.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.45.0", "@typescript-eslint/type-utils": "8.45.0", "@typescript-eslint/utils": "8.45.0", "@typescript-eslint/visitor-keys": "8.45.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.45.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg=="], |     "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.45.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.45.0", "@typescript-eslint/type-utils": "8.45.0", "@typescript-eslint/utils": "8.45.0", "@typescript-eslint/visitor-keys": "8.45.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.45.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg=="], | ||||||
|  |  | ||||||
|     "@typescript-eslint/parser": ["@typescript-eslint/parser@8.45.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.45.0", "@typescript-eslint/types": "8.45.0", "@typescript-eslint/typescript-estree": "8.45.0", "@typescript-eslint/visitor-keys": "8.45.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ=="], |     "@typescript-eslint/parser": ["@typescript-eslint/parser@8.45.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.45.0", "@typescript-eslint/types": "8.45.0", "@typescript-eslint/typescript-estree": "8.45.0", "@typescript-eslint/visitor-keys": "8.45.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ=="], | ||||||
| @@ -470,7 +467,7 @@ | |||||||
|  |  | ||||||
|     "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], |     "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], | ||||||
|  |  | ||||||
|     "minipass": ["minipass@4.2.8", "", {}, "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ=="], |     "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], | ||||||
|  |  | ||||||
|     "minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="], |     "minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="], | ||||||
|  |  | ||||||
| @@ -636,8 +633,6 @@ | |||||||
|  |  | ||||||
|     "@eslint/eslintrc/strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], |     "@eslint/eslintrc/strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], | ||||||
|  |  | ||||||
|     "@isaacs/fs-minipass/minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], |  | ||||||
|  |  | ||||||
|     "@napi-rs/wasm-runtime/@emnapi/core": ["@emnapi/core@1.5.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg=="], |     "@napi-rs/wasm-runtime/@emnapi/core": ["@emnapi/core@1.5.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg=="], | ||||||
|  |  | ||||||
|     "@napi-rs/wasm-runtime/@emnapi/runtime": ["@emnapi/runtime@1.5.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ=="], |     "@napi-rs/wasm-runtime/@emnapi/runtime": ["@emnapi/runtime@1.5.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ=="], | ||||||
| @@ -658,8 +653,6 @@ | |||||||
|  |  | ||||||
|     "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], |     "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], | ||||||
|  |  | ||||||
|     "@types/tar/@types/node": ["@types/node@24.5.2", "", { "dependencies": { "undici-types": "~7.12.0" } }, "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ=="], |  | ||||||
|  |  | ||||||
|     "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], |     "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], | ||||||
|  |  | ||||||
|     "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], |     "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], | ||||||
| @@ -674,10 +667,6 @@ | |||||||
|  |  | ||||||
|     "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], |     "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], | ||||||
|  |  | ||||||
|     "minizlib/minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], |  | ||||||
|  |  | ||||||
|     "tar/minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], |  | ||||||
|  |  | ||||||
|     "tsconfig-paths-webpack-plugin/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], |     "tsconfig-paths-webpack-plugin/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], | ||||||
|  |  | ||||||
|     "@napi-rs/wasm-runtime/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], |     "@napi-rs/wasm-runtime/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], | ||||||
| @@ -704,8 +693,6 @@ | |||||||
|  |  | ||||||
|     "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], |     "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], | ||||||
|  |  | ||||||
|     "@types/tar/@types/node/undici-types": ["undici-types@7.12.0", "", {}, "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ=="], |  | ||||||
|  |  | ||||||
|     "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], |     "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], | ||||||
|  |  | ||||||
|     "cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], |     "cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], | ||||||
|   | |||||||
| @@ -4,12 +4,12 @@ | |||||||
|   "scripts": { |   "scripts": { | ||||||
|     "dev": "bun run --watch src/index.tsx", |     "dev": "bun run --watch src/index.tsx", | ||||||
|     "hot": "bun run --hot src/index.tsx", |     "hot": "bun run --hot src/index.tsx", | ||||||
|     "format": "run-p 'format:*'", |     "format": "npm-run-all 'format:*'", | ||||||
|     "format:eslint": "eslint --fix .", |     "format:eslint": "eslint --fix .", | ||||||
|     "format:prettier": "prettier --write .", |     "format:prettier": "prettier --write .", | ||||||
|     "build:js": "tsc", |     "build:js": "tsc", | ||||||
|     "build": "bun x @tailwindcss/cli -i ./src/main.css -o ./public/generated.css && bun run build:js", |     "build": "bun x @tailwindcss/cli -i ./src/main.css -o ./public/generated.css && bun run build:js", | ||||||
|     "lint": "run-p 'lint:*'", |     "lint": "npm-run-all 'lint:*'", | ||||||
|     "lint:tsc": "tsc --noEmit", |     "lint:tsc": "tsc --noEmit", | ||||||
|     "lint:knip": "knip", |     "lint:knip": "knip", | ||||||
|     "lint:eslint": "eslint .", |     "lint:eslint": "eslint .", | ||||||
| @@ -38,7 +38,6 @@ | |||||||
|     "@total-typescript/ts-reset": "^0.6.1", |     "@total-typescript/ts-reset": "^0.6.1", | ||||||
|     "@types/bun": "latest", |     "@types/bun": "latest", | ||||||
|     "@types/node": "^24.6.2", |     "@types/node": "^24.6.2", | ||||||
|     "@types/tar": "^6.1.13", |  | ||||||
|     "@typescript-eslint/parser": "^8.45.0", |     "@typescript-eslint/parser": "^8.45.0", | ||||||
|     "eslint": "^9.37.0", |     "eslint": "^9.37.0", | ||||||
|     "eslint-plugin-better-tailwindcss": "^3.7.9", |     "eslint-plugin-better-tailwindcss": "^3.7.9", | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import path from "node:path"; | import path from "node:path"; | ||||||
| import { Elysia, t } from 'elysia' | import { Elysia } from "elysia"; | ||||||
| import sanitize from "sanitize-filename"; | import sanitize from "sanitize-filename"; | ||||||
| import * as tar from "tar"; | import * as tar from "tar"; | ||||||
| import { outputDir } from ".."; | import { outputDir } from ".."; | ||||||
| @@ -29,9 +29,11 @@ export const download = new Elysia() | |||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|       auth: true, |       auth: true, | ||||||
|     } |     }, | ||||||
|   ) |   ) | ||||||
|   .get("/archive/:userId/:jobId", async ({ params, redirect, user }) => { |   .get( | ||||||
|  |     "/archive/:userId/:jobId", | ||||||
|  |     async ({ params, redirect, user }) => { | ||||||
|       const job = await db |       const job = await db | ||||||
|         .query("SELECT * FROM jobs WHERE user_id = ? AND id = ?") |         .query("SELECT * FROM jobs WHERE user_id = ? AND id = ?") | ||||||
|         .get(user.id, params.jobId); |         .get(user.id, params.jobId); | ||||||
| @@ -56,6 +58,8 @@ export const download = new Elysia() | |||||||
|         ["."], |         ["."], | ||||||
|       ); |       ); | ||||||
|       return Bun.file(outputTar); |       return Bun.file(outputTar); | ||||||
|   }, { |     }, | ||||||
|  |     { | ||||||
|       auth: true, |       auth: true, | ||||||
|   }); |     }, | ||||||
|  |   ); | ||||||
|   | |||||||
| @@ -7,9 +7,9 @@ import { Filename, Jobs } from "../db/types"; | |||||||
| import { ALLOW_UNAUTHENTICATED, HIDE_HISTORY, LANGUAGE, WEBROOT } from "../helpers/env"; | import { ALLOW_UNAUTHENTICATED, HIDE_HISTORY, LANGUAGE, WEBROOT } from "../helpers/env"; | ||||||
| import { userService } from "./user"; | import { userService } from "./user"; | ||||||
|  |  | ||||||
| export const history = new Elysia() | export const history = new Elysia().use(userService).get( | ||||||
|   .use(userService) |   "/history", | ||||||
|   .get("/history", async ({ jwt, redirect, user }) => { |   async ({ redirect, user }) => { | ||||||
|     if (HIDE_HISTORY) { |     if (HIDE_HISTORY) { | ||||||
|       return redirect(`${WEBROOT}/`, 302); |       return redirect(`${WEBROOT}/`, 302); | ||||||
|     } |     } | ||||||
| @@ -208,6 +208,8 @@ export const history = new Elysia() | |||||||
|         </> |         </> | ||||||
|       </BaseHtml> |       </BaseHtml> | ||||||
|     ); |     ); | ||||||
|   }, { |   }, | ||||||
|     auth: true |   { | ||||||
|   }); |     auth: true, | ||||||
|  |   }, | ||||||
|  | ); | ||||||
|   | |||||||
| @@ -6,9 +6,9 @@ import { getAllInputs, getAllTargets } from "../converters/main"; | |||||||
| import { ALLOW_UNAUTHENTICATED, WEBROOT } from "../helpers/env"; | import { ALLOW_UNAUTHENTICATED, WEBROOT } from "../helpers/env"; | ||||||
| import { userService } from "./user"; | import { userService } from "./user"; | ||||||
|  |  | ||||||
| export const listConverters = new Elysia() | export const listConverters = new Elysia().use(userService).get( | ||||||
|   .use(userService) |   "/converters", | ||||||
|   .get("/converters", async () => { |   async () => { | ||||||
|     return ( |     return ( | ||||||
|       <BaseHtml webroot={WEBROOT} title="ConvertX | Converters"> |       <BaseHtml webroot={WEBROOT} title="ConvertX | Converters"> | ||||||
|         <> |         <> | ||||||
| @@ -68,6 +68,8 @@ export const listConverters = new Elysia() | |||||||
|         </> |         </> | ||||||
|       </BaseHtml> |       </BaseHtml> | ||||||
|     ); |     ); | ||||||
|   }, { |   }, | ||||||
|     auth: true |   { | ||||||
|   }); |     auth: true, | ||||||
|  |   }, | ||||||
|  | ); | ||||||
|   | |||||||
| @@ -136,7 +136,9 @@ function ResultsArticle({ | |||||||
|  |  | ||||||
| export const results = new Elysia() | export const results = new Elysia() | ||||||
|   .use(userService) |   .use(userService) | ||||||
|   .get("/results/:jobId", async ({ params, jwt, set, redirect, cookie: { job_id }, user }) => { |   .get( | ||||||
|  |     "/results/:jobId", | ||||||
|  |     async ({ params, set, cookie: { job_id }, user }) => { | ||||||
|       if (job_id?.value) { |       if (job_id?.value) { | ||||||
|         // Clear the job_id cookie since we are viewing the results |         // Clear the job_id cookie since we are viewing the results | ||||||
|         job_id.remove(); |         job_id.remove(); | ||||||
| @@ -177,8 +179,12 @@ export const results = new Elysia() | |||||||
|           </> |           </> | ||||||
|         </BaseHtml> |         </BaseHtml> | ||||||
|       ); |       ); | ||||||
|   }, { auth: true }) |     }, | ||||||
|   .post("/progress/:jobId", async ({ jwt, set, params, cookie: { job_id }, user }) => { |     { auth: true }, | ||||||
|  |   ) | ||||||
|  |   .post( | ||||||
|  |     "/progress/:jobId", | ||||||
|  |     async ({ set, params, cookie: { job_id }, user }) => { | ||||||
|       if (job_id?.value) { |       if (job_id?.value) { | ||||||
|         // Clear the job_id cookie since we are viewing the results |         // Clear the job_id cookie since we are viewing the results | ||||||
|         job_id.remove(); |         job_id.remove(); | ||||||
| @@ -204,4 +210,6 @@ export const results = new Elysia() | |||||||
|         .all(params.jobId); |         .all(params.jobId); | ||||||
|  |  | ||||||
|       return <ResultsArticle user={user} job={job} files={files} outputPath={outputPath} />; |       return <ResultsArticle user={user} job={job} files={files} outputPath={outputPath} />; | ||||||
|   }, { auth: true }); |     }, | ||||||
|  |     { auth: true }, | ||||||
|  |   ); | ||||||
|   | |||||||
| @@ -17,9 +17,9 @@ import { | |||||||
| } from "../helpers/env"; | } from "../helpers/env"; | ||||||
| import { FIRST_RUN, userService } from "./user"; | import { FIRST_RUN, userService } from "./user"; | ||||||
|  |  | ||||||
| export const root = new Elysia() | export const root = new Elysia().use(userService).get( | ||||||
|   .use(userService) |   "/", | ||||||
|   .get("/", async ({ jwt, redirect, cookie: { auth, jobId } }) => { |   async ({ jwt, redirect, cookie: { auth, jobId } }) => { | ||||||
|     if (!ALLOW_UNAUTHENTICATED) { |     if (!ALLOW_UNAUTHENTICATED) { | ||||||
|       if (FIRST_RUN) { |       if (FIRST_RUN) { | ||||||
|         return redirect(`${WEBROOT}/setup`, 302); |         return redirect(`${WEBROOT}/setup`, 302); | ||||||
| @@ -240,9 +240,11 @@ export const root = new Elysia() | |||||||
|         </> |         </> | ||||||
|       </BaseHtml> |       </BaseHtml> | ||||||
|     ); |     ); | ||||||
|   }, { |   }, | ||||||
|  |   { | ||||||
|     cookie: t.Cookie({ |     cookie: t.Cookie({ | ||||||
|       auth: t.Optional(t.String()), |       auth: t.Optional(t.String()), | ||||||
|       jobId: t.Optional(t.String()), |       jobId: t.Optional(t.String()), | ||||||
|     }) |     }), | ||||||
|   }); |   }, | ||||||
|  | ); | ||||||
|   | |||||||
| @@ -39,30 +39,29 @@ export const userService = new Elysia({ name: "user/service" }) | |||||||
|     optionalSession: t.Cookie({ |     optionalSession: t.Cookie({ | ||||||
|       auth: t.Optional(t.String()), |       auth: t.Optional(t.String()), | ||||||
|       jobId: t.Optional(t.String()), |       jobId: t.Optional(t.String()), | ||||||
|     }) |     }), | ||||||
|   }) |   }) | ||||||
|   .macro("auth", { |   .macro("auth", { | ||||||
|     cookie: "session", async resolve({ |     cookie: "session", | ||||||
|       status, jwt, cookie: { auth } |     async resolve({ status, jwt, cookie: { auth } }) { | ||||||
|     }) { |  | ||||||
|       if (!auth.value) { |       if (!auth.value) { | ||||||
|         return status(401, { |         return status(401, { | ||||||
|           success: false, |           success: false, | ||||||
|           message: 'Unauthorized' |           message: "Unauthorized", | ||||||
|         }) |         }); | ||||||
|       } |       } | ||||||
|       const user = await jwt.verify(auth.value); |       const user = await jwt.verify(auth.value); | ||||||
|       if (!user) { |       if (!user) { | ||||||
|         return status(401, { |         return status(401, { | ||||||
|           success: false, |           success: false, | ||||||
|           message: 'Unauthorized' |           message: "Unauthorized", | ||||||
|         }) |         }); | ||||||
|       } |       } | ||||||
|       return { |       return { | ||||||
|         success: true, |         success: true, | ||||||
|         user |         user, | ||||||
|       }; |       }; | ||||||
|     } |     }, | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
| export const user = new Elysia() | export const user = new Elysia() | ||||||
| @@ -237,7 +236,9 @@ export const user = new Elysia() | |||||||
|     }, |     }, | ||||||
|     { body: "signIn" }, |     { body: "signIn" }, | ||||||
|   ) |   ) | ||||||
|   .get("/login", async ({ jwt, redirect, cookie: { auth } }) => { |   .get( | ||||||
|  |     "/login", | ||||||
|  |     async ({ jwt, redirect, cookie: { auth } }) => { | ||||||
|       if (FIRST_RUN) { |       if (FIRST_RUN) { | ||||||
|         return redirect(`${WEBROOT}/setup`, 302); |         return redirect(`${WEBROOT}/setup`, 302); | ||||||
|       } |       } | ||||||
| @@ -312,7 +313,8 @@ export const user = new Elysia() | |||||||
|           </> |           </> | ||||||
|         </BaseHtml> |         </BaseHtml> | ||||||
|       ); |       ); | ||||||
|   }, { body: "signIn", cookie: "optionalSession" } |     }, | ||||||
|  |     { body: "signIn", cookie: "optionalSession" }, | ||||||
|   ) |   ) | ||||||
|   .post( |   .post( | ||||||
|     "/login", |     "/login", | ||||||
| @@ -373,8 +375,9 @@ export const user = new Elysia() | |||||||
|  |  | ||||||
|     return redirect(`${WEBROOT}/login`, 302); |     return redirect(`${WEBROOT}/login`, 302); | ||||||
|   }) |   }) | ||||||
|   .get("/account", async ({ user, redirect }) => { |   .get( | ||||||
|  |     "/account", | ||||||
|  |     async ({ user, redirect }) => { | ||||||
|       if (!user) { |       if (!user) { | ||||||
|         return redirect(`${WEBROOT}/`, 302); |         return redirect(`${WEBROOT}/`, 302); | ||||||
|       } |       } | ||||||
| @@ -447,9 +450,11 @@ export const user = new Elysia() | |||||||
|           </> |           </> | ||||||
|         </BaseHtml> |         </BaseHtml> | ||||||
|       ); |       ); | ||||||
|   }, { |     }, | ||||||
|     auth: true |     { | ||||||
|   }) |       auth: true, | ||||||
|  |     }, | ||||||
|  |   ) | ||||||
|   .post( |   .post( | ||||||
|     "/account", |     "/account", | ||||||
|     async function handler({ body, set, redirect, jwt, cookie: { auth } }) { |     async function handler({ body, set, redirect, jwt, cookie: { auth } }) { | ||||||
| @@ -513,6 +518,6 @@ export const user = new Elysia() | |||||||
|         newPassword: t.MaybeEmpty(t.String()), |         newPassword: t.MaybeEmpty(t.String()), | ||||||
|         password: t.String(), |         password: t.String(), | ||||||
|       }), |       }), | ||||||
|       cookie: "session" |       cookie: "session", | ||||||
|     }, |     }, | ||||||
|   ); |   ); | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import type { ExecFileException } from "node:child_process"; |  | ||||||
| import { beforeEach, expect, test } from "bun:test"; | import { beforeEach, expect, test } from "bun:test"; | ||||||
|  | import type { ExecFileException } from "node:child_process"; | ||||||
| import { convert } from "../../src/converters/dvisvgm"; | import { convert } from "../../src/converters/dvisvgm"; | ||||||
| import { ExecFileFn } from "../../src/converters/types"; | import { ExecFileFn } from "../../src/converters/types"; | ||||||
| import { runCommonTests } from "./helpers/commonTests"; | import { runCommonTests } from "./helpers/commonTests"; | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import type { ExecFileException } from "node:child_process"; |  | ||||||
| import { expect } from "bun:test"; | import { expect } from "bun:test"; | ||||||
|  | import type { ExecFileException } from "node:child_process"; | ||||||
| import { ConvertFnWithExecFile, ExecFileFn } from "../../../src/converters/types"; | import { ConvertFnWithExecFile, ExecFileFn } from "../../../src/converters/types"; | ||||||
|  |  | ||||||
| export async function runConvertSuccessTest(convertFn: ConvertFnWithExecFile) { | export async function runConvertSuccessTest(convertFn: ConvertFnWithExecFile) { | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import type { ExecFileException } from "node:child_process"; |  | ||||||
| import { beforeEach, expect, test } from "bun:test"; | import { beforeEach, expect, test } from "bun:test"; | ||||||
|  | import type { ExecFileException } from "node:child_process"; | ||||||
| import { convert } from "../../src/converters/imagemagick"; | import { convert } from "../../src/converters/imagemagick"; | ||||||
| import { ExecFileFn } from "../../src/converters/types"; | import { ExecFileFn } from "../../src/converters/types"; | ||||||
| import { runCommonTests } from "./helpers/commonTests"; | import { runCommonTests } from "./helpers/commonTests"; | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import type { ExecFileException } from "node:child_process"; |  | ||||||
| import { beforeEach, expect, test } from "bun:test"; | import { beforeEach, expect, test } from "bun:test"; | ||||||
|  | import type { ExecFileException } from "node:child_process"; | ||||||
| import { convert } from "../../src/converters/libjxl"; | import { convert } from "../../src/converters/libjxl"; | ||||||
| import { ExecFileFn } from "../../src/converters/types"; | import { ExecFileFn } from "../../src/converters/types"; | ||||||
| import { runCommonTests } from "./helpers/commonTests"; | import { runCommonTests } from "./helpers/commonTests"; | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import type { ExecFileException } from "node:child_process"; |  | ||||||
| import { expect, test } from "bun:test"; | import { expect, test } from "bun:test"; | ||||||
|  | import type { ExecFileException } from "node:child_process"; | ||||||
| import { convert } from "../../src/converters/msgconvert"; | import { convert } from "../../src/converters/msgconvert"; | ||||||
| import { ExecFileFn } from "../../src/converters/types"; | import { ExecFileFn } from "../../src/converters/types"; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import type { ExecFileException } from "node:child_process"; |  | ||||||
| import { beforeEach, expect, test } from "bun:test"; | import { beforeEach, expect, test } from "bun:test"; | ||||||
|  | import type { ExecFileException } from "node:child_process"; | ||||||
| import { ExecFileFn } from "../../src/converters/types"; | import { ExecFileFn } from "../../src/converters/types"; | ||||||
| import { convert } from "../../src/converters/vips"; | import { convert } from "../../src/converters/vips"; | ||||||
| import { runCommonTests } from "./helpers/commonTests"; | import { runCommonTests } from "./helpers/commonTests"; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user