diff --git a/api/package-lock.json b/api/package-lock.json index f6b21bdef..073078d12 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -92,7 +92,7 @@ "zod": "^3.23.8" }, "bin": { - "unraid-api": "unraid-api.js" + "unraid-api": "dist/cli.js" }, "devDependencies": { "@graphql-codegen/add": "^5.0.2", @@ -105,6 +105,7 @@ "@graphql-codegen/typescript-resolvers": "4.0.6", "@graphql-typed-document-node/core": "^3.2.0", "@nestjs/testing": "^10.3.8", + "@originjs/vite-plugin-commonjs": "^1.0.3", "@types/async-exit-hook": "^2.0.2", "@types/btoa": "^1.2.5", "@types/bytes": "^3.1.4", @@ -134,9 +135,11 @@ "eslint": "^9.12.0", "graphql-codegen-typescript-validation-schema": "^0.14.1", "jiti": "^2.3.3", + "rollup-plugin-node-externals": "^7.1.3", "standard-version": "^9.5.0", "typescript": "^5.4.5", "typescript-eslint": "^8.10.0", + "vite-plugin-node": "^4.0.0", "vite-tsconfig-paths": "^4.3.2", "vitest": "^2.1.1", "zx": "^7.2.3" @@ -1708,6 +1711,23 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", + "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/openbsd-arm64": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", @@ -3714,6 +3734,16 @@ "npm": ">=5.0.0" } }, + "node_modules/@originjs/vite-plugin-commonjs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@originjs/vite-plugin-commonjs/-/vite-plugin-commonjs-1.0.3.tgz", + "integrity": "sha512-KuEXeGPptM2lyxdIEJ4R11+5ztipHoE7hy8ClZt3PYaOVQ/pyngd2alaSrPnwyFeOW1UagRBaQ752aA1dTMdOQ==", + "dev": true, + "license": "MulanPSL2", + "dependencies": { + "esbuild": "^0.14.14" + } + }, "node_modules/@parcel/watcher": { "version": "2.1.0", "dev": true, @@ -4082,6 +4112,27 @@ "integrity": "sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==", "dev": true }, + "node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", @@ -7994,6 +8045,383 @@ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" }, + "node_modules/esbuild": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", + "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/linux-loong64": "0.14.54", + "esbuild-android-64": "0.14.54", + "esbuild-android-arm64": "0.14.54", + "esbuild-darwin-64": "0.14.54", + "esbuild-darwin-arm64": "0.14.54", + "esbuild-freebsd-64": "0.14.54", + "esbuild-freebsd-arm64": "0.14.54", + "esbuild-linux-32": "0.14.54", + "esbuild-linux-64": "0.14.54", + "esbuild-linux-arm": "0.14.54", + "esbuild-linux-arm64": "0.14.54", + "esbuild-linux-mips64le": "0.14.54", + "esbuild-linux-ppc64le": "0.14.54", + "esbuild-linux-riscv64": "0.14.54", + "esbuild-linux-s390x": "0.14.54", + "esbuild-netbsd-64": "0.14.54", + "esbuild-openbsd-64": "0.14.54", + "esbuild-sunos-64": "0.14.54", + "esbuild-windows-32": "0.14.54", + "esbuild-windows-64": "0.14.54", + "esbuild-windows-arm64": "0.14.54" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", + "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", + "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", + "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", + "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", + "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", + "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", + "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", + "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", + "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", + "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", + "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", + "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", + "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", + "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", + "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", + "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", + "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", + "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", + "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", + "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/escalade": { "version": "3.1.1", "license": "MIT", @@ -8428,6 +8856,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-4.0.0.tgz", "integrity": "sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==", + "license": "MIT", "engines": { "node": ">=18" }, @@ -13448,6 +13877,29 @@ "fsevents": "~2.3.2" } }, + "node_modules/rollup-plugin-node-externals": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-externals/-/rollup-plugin-node-externals-7.1.3.tgz", + "integrity": "sha512-RM+7tJAejAoRsCf93TptTSdqUhRA8S78DleihMiu54Kac+uLkd9VIegLPhGnaW3ehZTXh56+R301mFH6j2A7vw==", + "dev": true, + "funding": [ + { + "type": "patreon", + "url": "https://patreon.com/Septh" + }, + { + "type": "paypal", + "url": "https://paypal.me/septh07" + } + ], + "license": "MIT", + "engines": { + "node": ">= 21 || ^20.6.0 || ^18.19.0" + }, + "peerDependencies": { + "rollup": "^3.0.0 || ^4.0.0" + } + }, "node_modules/run-async": { "version": "2.4.1", "dev": true, @@ -15612,6 +16064,27 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/vite-plugin-node": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/vite-plugin-node/-/vite-plugin-node-4.0.0.tgz", + "integrity": "sha512-KwINBvYBjNqYml/dSmBWJo2rSr+qrRbqbuuG5oNhu7+R3R5Rh9fibpslvr3LUwOjjkreIb9VId/37Rf7KL96qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^4.1.1", + "chalk": "^4.1.2", + "debug": "^4.3.2" + }, + "peerDependencies": { + "@swc/core": "^1.7.26", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + } + } + }, "node_modules/vite-tsconfig-paths": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.2.tgz", @@ -17662,6 +18135,13 @@ } } }, + "@esbuild/linux-loong64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", + "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", + "dev": true, + "optional": true + }, "@esbuild/openbsd-arm64": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", @@ -19069,6 +19549,15 @@ "node-fetch": "^2.6.1" } }, + "@originjs/vite-plugin-commonjs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@originjs/vite-plugin-commonjs/-/vite-plugin-commonjs-1.0.3.tgz", + "integrity": "sha512-KuEXeGPptM2lyxdIEJ4R11+5ztipHoE7hy8ClZt3PYaOVQ/pyngd2alaSrPnwyFeOW1UagRBaQ752aA1dTMdOQ==", + "dev": true, + "requires": { + "esbuild": "^0.14.14" + } + }, "@parcel/watcher": { "version": "2.1.0", "dev": true, @@ -19336,6 +19825,24 @@ "integrity": "sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==", "dev": true }, + "@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + } + } + }, "@rollup/rollup-android-arm-eabi": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", @@ -22001,6 +22508,175 @@ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" }, + "esbuild": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", + "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", + "dev": true, + "requires": { + "@esbuild/linux-loong64": "0.14.54", + "esbuild-android-64": "0.14.54", + "esbuild-android-arm64": "0.14.54", + "esbuild-darwin-64": "0.14.54", + "esbuild-darwin-arm64": "0.14.54", + "esbuild-freebsd-64": "0.14.54", + "esbuild-freebsd-arm64": "0.14.54", + "esbuild-linux-32": "0.14.54", + "esbuild-linux-64": "0.14.54", + "esbuild-linux-arm": "0.14.54", + "esbuild-linux-arm64": "0.14.54", + "esbuild-linux-mips64le": "0.14.54", + "esbuild-linux-ppc64le": "0.14.54", + "esbuild-linux-riscv64": "0.14.54", + "esbuild-linux-s390x": "0.14.54", + "esbuild-netbsd-64": "0.14.54", + "esbuild-openbsd-64": "0.14.54", + "esbuild-sunos-64": "0.14.54", + "esbuild-windows-32": "0.14.54", + "esbuild-windows-64": "0.14.54", + "esbuild-windows-arm64": "0.14.54" + } + }, + "esbuild-android-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", + "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", + "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", + "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", + "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", + "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", + "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", + "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", + "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", + "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", + "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", + "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", + "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", + "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", + "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", + "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", + "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", + "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", + "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", + "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", + "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", + "dev": true, + "optional": true + }, "escalade": { "version": "3.1.1" }, @@ -25700,6 +26376,13 @@ "fsevents": "~2.3.2" } }, + "rollup-plugin-node-externals": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-externals/-/rollup-plugin-node-externals-7.1.3.tgz", + "integrity": "sha512-RM+7tJAejAoRsCf93TptTSdqUhRA8S78DleihMiu54Kac+uLkd9VIegLPhGnaW3ehZTXh56+R301mFH6j2A7vw==", + "dev": true, + "requires": {} + }, "run-async": { "version": "2.4.1", "dev": true @@ -27185,6 +27868,17 @@ "vite": "^5.0.0" } }, + "vite-plugin-node": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/vite-plugin-node/-/vite-plugin-node-4.0.0.tgz", + "integrity": "sha512-KwINBvYBjNqYml/dSmBWJo2rSr+qrRbqbuuG5oNhu7+R3R5Rh9fibpslvr3LUwOjjkreIb9VId/37Rf7KL96qg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^4.1.1", + "chalk": "^4.1.2", + "debug": "^4.3.2" + } + }, "vite-tsconfig-paths": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.2.tgz", diff --git a/api/package.json b/api/package.json index 37830fb6f..094f1e887 100644 --- a/api/package.json +++ b/api/package.json @@ -8,6 +8,7 @@ "license": "UNLICENSED", "scripts": { "build:docker": "./scripts/dc.sh run --rm builder", + "build": "vite build", "build-and-pack": "./scripts/build.mjs", "codegen": "MOTHERSHIP_GRAPHQL_LINK='https://staging.mothership.unraid.net/ws' graphql-codegen --config codegen.yml -r dotenv/config './.env.staging'", "codegen:watch": "DOTENV_CONFIG_PATH='./.env.staging' graphql-codegen --config codegen.yml --watch -r dotenv/config", @@ -15,9 +16,9 @@ "tsc": "tsc --noEmit", "lint": "eslint --flag unstable_ts_config --config .eslintrc.ts src/", "lint:fix": "eslint --flag unstable_ts_config --fix --config .eslintrc.ts src/", - "test:watch": "vitest --pool=forks", - "test": "vitest run --pool=forks", - "coverage": "vitest run --coverage", + "test:watch": "DOTENV_CONFIG_PATH=./.env.test NODE_ENV=test vitest --pool=forks", + "test": "DOTENV_CONFIG_PATH=./.env.test NODE_ENV=test vitest run --pool=forks", + "coverage": "DOTENV_CONFIG_PATH=./.env.test NODE_ENV=test vitest run --coverage", "release": "standard-version", "install:unraid": "./scripts/install-in-unraid.sh", "boot:unraid": "tsx -r dotenv/config src/index.ts", @@ -44,7 +45,7 @@ "node_modules/" ], "bin": { - "unraid-api": "unraid-api.js" + "unraid-api": "dist/cli.js" }, "dependencies": { "@apollo/client": "^3.10.4", @@ -140,6 +141,7 @@ "@graphql-codegen/typescript-resolvers": "4.0.6", "@graphql-typed-document-node/core": "^3.2.0", "@nestjs/testing": "^10.3.8", + "@originjs/vite-plugin-commonjs": "^1.0.3", "@types/async-exit-hook": "^2.0.2", "@types/btoa": "^1.2.5", "@types/bytes": "^3.1.4", @@ -169,9 +171,11 @@ "eslint": "^9.12.0", "graphql-codegen-typescript-validation-schema": "^0.14.1", "jiti": "^2.3.3", + "rollup-plugin-node-externals": "^7.1.3", "standard-version": "^9.5.0", "typescript": "^5.4.5", "typescript-eslint": "^8.10.0", + "vite-plugin-node": "^4.0.0", "vite-tsconfig-paths": "^4.3.2", "vitest": "^2.1.1", "zx": "^7.2.3" diff --git a/api/scripts/build.mjs b/api/scripts/build.mjs index 160b9be12..e76fec77a 100755 --- a/api/scripts/build.mjs +++ b/api/scripts/build.mjs @@ -22,16 +22,23 @@ try { // Build Generated Types await $`npm run codegen`; + await $`npm run build`; // Copy app files to plugin directory await $`cp -r ./src/ ./deploy/pre-pack/src/`; + await $`cp -r ./dist/ ./deploy/pre-pack/dist/`; // Copy environment to deployment directory - await $`cp ./.env.production ./deploy/pre-pack/.env.production`; - await $`cp ./.env.staging ./deploy/pre-pack/.env.staging`; - await $`cp ./tsconfig.json ./deploy/pre-pack/tsconfig.json`; - await $`cp ./unraid-api.js ./deploy/pre-pack/unraid-api.js`; - await $`cp ./codegen.yml ./deploy/pre-pack/codegen.yml`; - await $`cp ./ecosystem.config.json ./deploy/pre-pack/ecosystem.config.json`; + const files = [ + '.env.production', + '.env.staging', + 'tsconfig.json', + 'codegen.yml', + 'ecosystem.config.json' + ] + + for (const file of files) { + await $`cp ./${file} ./deploy/pre-pack/${file}`; + } // Get package details const { name, version, ...rest } = await import('../package.json', { diff --git a/api/src/cli/commands/report.ts b/api/src/cli/commands/report.ts index 03f47790b..266de1e6b 100644 --- a/api/src/cli/commands/report.ts +++ b/api/src/cli/commands/report.ts @@ -16,7 +16,7 @@ import { import { MinigraphStatus } from '@app/graphql/generated/api/types'; import { API_VERSION } from '@app/environment'; import { loadStateFiles } from '@app/store/modules/emhttp'; -import { ApolloClient, ApolloQueryResult, NormalizedCacheObject } from '@apollo/client/core'; +import { ApolloClient, ApolloQueryResult, NormalizedCacheObject } from '@apollo/client/core/index.js'; type CloudQueryResult = NonNullable['data']['cloud']>; type ServersQueryResultServer = NonNullable['data']['servers']>[0]; diff --git a/api/src/graphql/client/api/get-api-client.ts b/api/src/graphql/client/api/get-api-client.ts index 3144f120c..118a0a655 100644 --- a/api/src/graphql/client/api/get-api-client.ts +++ b/api/src/graphql/client/api/get-api-client.ts @@ -3,14 +3,14 @@ import { HttpLink, InMemoryCache, split, -} from '@apollo/client/core'; -import { onError } from '@apollo/client/link/error'; +} from '@apollo/client/core/index.js'; +import { onError } from '@apollo/client/link/error/index.js'; import { getInternalApiAddress } from '@app/consts'; import WebSocket from 'ws'; import { fetch } from 'cross-fetch'; -import { getMainDefinition } from '@apollo/client/utilities'; +import { getMainDefinition } from '@apollo/client/utilities/index.js'; import { graphqlLogger } from '@app/core/log'; -import { GraphQLWsLink } from '@apollo/client/link/subscriptions'; +import { GraphQLWsLink } from '@apollo/client/link/subscriptions/index.js'; import { createClient } from 'graphql-ws'; import { getters } from '@app/store/index'; diff --git a/api/src/graphql/resolvers/subscription/remote-graphql/remote-graphql-helpers.ts b/api/src/graphql/resolvers/subscription/remote-graphql/remote-graphql-helpers.ts index 63df10813..51185040a 100644 --- a/api/src/graphql/resolvers/subscription/remote-graphql/remote-graphql-helpers.ts +++ b/api/src/graphql/resolvers/subscription/remote-graphql/remote-graphql-helpers.ts @@ -1,4 +1,4 @@ -import { gql, QueryOptions } from "@apollo/client/core"; +import { gql, QueryOptions } from "@apollo/client/core/index.js"; interface ParsedQuery { query?: string; diff --git a/api/src/mothership/graphql-client.ts b/api/src/mothership/graphql-client.ts index 6489f17a7..cd7292ba3 100644 --- a/api/src/mothership/graphql-client.ts +++ b/api/src/mothership/graphql-client.ts @@ -11,8 +11,8 @@ import { ApolloClient, InMemoryCache, type NormalizedCacheObject, -} from '@apollo/client/core'; -import { GraphQLWsLink } from '@apollo/client/link/subscriptions'; +} from '@apollo/client/core/index.js'; +import { GraphQLWsLink } from '@apollo/client/link/subscriptions/index.js'; import { MinigraphStatus } from '@app/graphql/generated/api/types'; import { API_VERSION } from '@app/environment'; import { @@ -20,8 +20,8 @@ import { setMothershipTimeout, } from '@app/store/modules/minigraph'; import { logoutUser } from '@app/store/modules/config'; -import { RetryLink } from '@apollo/client/link/retry'; -import { ErrorLink } from '@apollo/client/link/error'; +import { RetryLink } from '@apollo/client/link/retry/index.js'; +import { ErrorLink } from '@apollo/client/link/error/index.js'; import { isApiKeyValid } from '@app/store/getters/index'; import { buildDelayFunction } from '@app/mothership/utils/delay-function'; import { WebSocket } from 'ws'; diff --git a/api/unraid-api.js b/api/unraid-api.js deleted file mode 100755 index 38faee11c..000000000 --- a/api/unraid-api.js +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env node -import { execSync } from "child_process"; - -// Collect all arguments passed to the script -const args = process.argv.slice(2).join(" "); - - - -// Run the TypeScript app using tsx and pass the arguments -try { - execSync(`npm run tsx:unraid -- ${args}`, { stdio: "inherit", cwd: import.meta.dirname }); -} catch (error) { - console.error("Failed to run the TypeScript app", error); - process.exit(1); -} diff --git a/api/vite.config.ts b/api/vite.config.ts index 54ac0f7c1..c22bfab36 100644 --- a/api/vite.config.ts +++ b/api/vite.config.ts @@ -1,26 +1,37 @@ import { defineConfig } from 'vitest/config'; import tsconfigPaths from 'vite-tsconfig-paths'; -import { config } from 'dotenv'; +import nodeExternals from 'rollup-plugin-node-externals'; +import { viteCommonjs } from '@originjs/vite-plugin-commonjs'; export default defineConfig(() => { - config({ path: './.env.test' }); - // Manually set NODE_ENV to make sure we always run tests in test mode - process.env.NODE_ENV = 'test'; - return { - plugins: [tsconfigPaths()], - test: { - globals: true, - coverage: { - all: true, - include: ['src/**/*'], - reporter: ['text', 'json', 'html'], - }, - clearMocks: true, - setupFiles: [ - 'src/__test__/setup/keyserver-mock.ts' - ], - exclude: ['deploy/', 'node_modules/'], - }, - }; + return { + plugins: [tsconfigPaths(), nodeExternals(), viteCommonjs()], + build: { + outDir: 'dist', + rollupOptions: { + input: { + main: 'src/index.ts', + cli: 'src/cli.ts', + }, + output: { + entryFileNames: '[name].js', + }, + }, + modulePreload: false, + minify: false, + target: 'esnext', + }, + test: { + globals: true, + coverage: { + all: true, + include: ['src/**/*'], + reporter: ['text', 'json', 'html'], + }, + clearMocks: true, + setupFiles: ['src/__test__/setup/keyserver-mock.ts', 'dotenv/config'], + exclude: ['deploy/', 'node_modules/'], + }, + }; }); diff --git a/web/helpers/apollo-cache/index.ts b/web/helpers/apollo-cache/index.ts index 39fa372ac..fc0841354 100644 --- a/web/helpers/apollo-cache/index.ts +++ b/web/helpers/apollo-cache/index.ts @@ -1,4 +1,4 @@ -import { InMemoryCache, type InMemoryCacheConfig } from "@apollo/client/core"; +import { InMemoryCache, type InMemoryCacheConfig } from "@apollo/client/core/index.js"; import { mergeAndDedup } from "./merge"; import { NotificationType } from "../../composables/gql/typename"; diff --git a/web/helpers/create-apollo-client.ts b/web/helpers/create-apollo-client.ts index adbd8a56b..ab4c5afe4 100644 --- a/web/helpers/create-apollo-client.ts +++ b/web/helpers/create-apollo-client.ts @@ -3,18 +3,16 @@ import { ApolloClient, createHttpLink, split, - type NormalizedCacheObject, -} from "@apollo/client/core"; + ApolloLink, Observable } from "@apollo/client/core/index.js"; -import { onError } from "@apollo/client/link/error"; -import { RetryLink } from "@apollo/client/link/retry"; -import { GraphQLWsLink } from "@apollo/client/link/subscriptions"; -import { getMainDefinition } from "@apollo/client/utilities"; +import { onError } from "@apollo/client/link/error/index.js"; +import { RetryLink } from "@apollo/client/link/retry/index.js"; +import { GraphQLWsLink } from "@apollo/client/link/subscriptions/index.js"; +import { getMainDefinition } from "@apollo/client/utilities/index.js"; import { provideApolloClient } from "@vue/apollo-composable"; import { createClient } from "graphql-ws"; import { WEBGUI_GRAPHQL } from "./urls"; import { createApolloCache } from "./apollo-cache"; -import { ApolloLink, Observable } from "@apollo/client/core"; import { useServerStore } from "~/store/server"; const httpEndpoint = WEBGUI_GRAPHQL; diff --git a/web/store/server.ts b/web/store/server.ts index 7e0ae2a55..e26fe8b08 100644 --- a/web/store/server.ts +++ b/web/store/server.ts @@ -29,7 +29,7 @@ import { usePurchaseStore } from "~/store/purchase"; import { useThemeStore, type Theme } from "~/store/theme"; import { useUnraidApiStore } from "~/store/unraidApi"; -import type { ApolloQueryResult } from "@apollo/client/core/types"; +import type { ApolloQueryResult } from "@apollo/client/core/index.js/types"; import type { Config, PartialCloudFragment,