From f72b775ee2cb24d6b96e352ddc50a1dff3325749 Mon Sep 17 00:00:00 2001 From: split Date: Thu, 11 Jul 2024 02:38:57 -0700 Subject: [PATCH] switch to sharp, dockerize --- .dockerignore | 11 + .env.example | 2 +- Dockerfile | 41 ++ bun.lockb | Bin 77324 -> 71140 bytes imagemagick.policy.xml | 134 ----- package-lock.json | 1117 +++++++++++++++++++++------------------- package.json | 14 +- prisma/schema.prisma | 1 + src/lib/avatars.ts | 33 +- 9 files changed, 672 insertions(+), 681 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile delete mode 100644 imagemagick.policy.xml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..15187ac --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +build +.data +node_modules +readme +README.md +.npmrc +.prettierrc +.prettierignore +.gitignore +.env.example +.svelte-kit \ No newline at end of file diff --git a/.env.example b/.env.example index 61d1b31..04fdff8 100644 --- a/.env.example +++ b/.env.example @@ -21,4 +21,4 @@ USERINFO__IDENTIFIER=preferred_username ALLOWED_TYPES=image/jpg,image/jpeg,image/png,image/png,image/webp,image/gif # Prisma database URL -DATABASE_URL="file:../.data/data.db" \ No newline at end of file +DATABASE_URL=file:../.data/data.db \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..2699866 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,41 @@ +# skidded off https://git.madhouselabs.net/MadHouse-Labs/file-uploader/src/branch/master/Dockerfile +FROM node:lts-alpine AS base +WORKDIR /usr/src/app + +FROM oven/bun:1-debian AS base2 +WORKDIR /usr/src/app + +FROM base AS install +RUN mkdir -p /temp/dev +COPY package.json package-lock.json /temp/dev/ +RUN cd /temp/dev && npm install + +RUN mkdir -p /temp/prod +COPY package.json package-lock.json /temp/prod/ +RUN cd /temp/prod && npm install --omit dev + +FROM base AS prisma +COPY --from=install /temp/prod/node_modules node_modules +COPY . . +RUN npx prisma generate + +FROM base AS prisma-dev +COPY --from=install /temp/dev/node_modules node_modules +COPY . . +RUN npx prisma generate + +FROM base2 AS build +COPY --from=prisma-dev /usr/src/app/node_modules node_modules +COPY . . +# vite build +RUN NODE_ENV=production bun --bun run build + +FROM base2 AS release +COPY --from=prisma /usr/src/app/prisma prisma +COPY --from=prisma /usr/src/app/node_modules node_modules +COPY --from=build /usr/src/app/build build +COPY --from=build /usr/src/app/static static +COPY --from=build /usr/src/app/package.json . + +EXPOSE 3000/tcp +CMD [ "bun", "run", "./build/index.js" ] \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index b798965e290c7435391775617441db18fdc93130..d93105c778966c878e771394eede812297b834dd 100755 GIT binary patch delta 17074 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 delta 20357 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 F{|m596086K diff --git a/imagemagick.policy.xml b/imagemagick.policy.xml deleted file mode 100644 index 34f5341..0000000 --- a/imagemagick.policy.xml +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index cd23edf..01efe88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,18 @@ { "name": "ava", - "version": "0.0.1", + "version": "1.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ava", - "version": "0.0.1", + "version": "1.1.0", "dependencies": { "@fontsource-variable/inter": "^5.0.18", "@fontsource-variable/noto-sans-mono": "^5.0.20", "@prisma/client": "5.16.2", - "@types/node": "^20.14.10", - "magickwand.js": "^1.1.0" + "mime": "^4.0.4", + "sharp": "^0.33.4" }, "devDependencies": { "@sveltejs/adapter-auto": "^3.0.0", @@ -23,6 +23,7 @@ "prettier-plugin-svelte": "^3.1.2", "prisma": "^5.16.2", "svelte": "^4.2.7", + "svelte-adapter-bun": "^0.5.2", "svelte-check": "^3.6.0", "tslib": "^2.4.1", "typescript": "^5.0.0", @@ -47,6 +48,7 @@ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz", "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", "license": "MIT", + "optional": true, "dependencies": { "tslib": "^2.4.0" } @@ -431,6 +433,456 @@ "integrity": "sha512-Mik/wbKjiir7t+KBaDZnPZ5GjDnPOXpMF7obmFeyRa528ZsrKcFiSn4ZvArrn3sJMCp/k23wakOcXOWlGNc9cw==", "license": "OFL-1.1" }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz", + "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.2" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz", + "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.2" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", + "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "macos": ">=11", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", + "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "macos": ">=10.13", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", + "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", + "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", + "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", + "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", + "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", + "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz", + "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.2" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz", + "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.2" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz", + "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.31", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.2" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz", + "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.2" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz", + "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz", + "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.2" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz", + "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.1.1" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz", + "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz", + "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -479,42 +931,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "license": "BSD-3-Clause", - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@polka/url": { "version": "1.0.0-next.25", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", @@ -906,6 +1322,7 @@ "version": "20.14.10", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", + "dev": true, "license": "MIT", "dependencies": { "undici-types": "~5.26.4" @@ -927,12 +1344,6 @@ "@types/node": "*" } }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "license": "ISC" - }, "node_modules/acorn": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", @@ -945,27 +1356,6 @@ "node": ">=0.4.0" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -979,26 +1369,6 @@ "node": ">= 8" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "license": "ISC" - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/aria-query": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", @@ -1020,7 +1390,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/binary-extensions": { "version": "2.3.0", @@ -1038,6 +1409,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1085,18 +1457,6 @@ "undici-types": "~5.26.4" } }, - "node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -1121,15 +1481,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, "node_modules/code-red": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", @@ -1143,25 +1494,52 @@ "periscopic": "^3.1.0" } }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "license": "ISC", - "bin": { - "color-support": "bin.js" + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "license": "ISC" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/cookie": { "version": "0.6.0", @@ -1189,6 +1567,7 @@ "version": "4.3.5", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -1210,12 +1589,6 @@ "node": ">=0.10.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "license": "MIT" - }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -1249,26 +1622,6 @@ "integrity": "sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==", "dev": true }, - "node_modules/emnapi": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/emnapi/-/emnapi-1.2.0.tgz", - "integrity": "sha512-rcq+dJCcfr08I0XM/57LPRqaUokGfni/+SvhO7NaJthTTjRdohhIy0FQwyC5rR1enAsjkldQg83th8J5hURv0Q==", - "license": "MIT", - "peerDependencies": { - "node-addon-api": ">= 6.1.0" - }, - "peerDependenciesMeta": { - "node-addon-api": { - "optional": true - } - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, "node_modules/es6-promise": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", @@ -1340,34 +1693,11 @@ "node": ">=8" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", @@ -1383,32 +1713,12 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1454,25 +1764,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "license": "ISC" - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/import-meta-resolve": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", @@ -1488,6 +1779,7 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1496,7 +1788,14 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" }, "node_modules/is-binary-path": { "version": "2.1.0", @@ -1519,15 +1818,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -1582,53 +1872,27 @@ "@jridgewell/sourcemap-codec": "^1.4.15" } }, - "node_modules/magickwand.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/magickwand.js/-/magickwand.js-1.1.0.tgz", - "integrity": "sha512-39GIX3de3lZ++SQ8xhjnnAt6rGLVI7suXdLDpcqDFpZqUTdhvfto4LfNt5IFmQZbpIp56cbETyxyOHgW80Es8A==", - "hasInstallScript": true, - "license": "ISC", - "dependencies": { - "@emnapi/runtime": "^1.0.0", - "@mapbox/node-pre-gyp": "^1.0.11", - "chalk": "^5.3.0", - "emnapi": "^1.0.0", - "node-addon-api": "^8.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true }, + "node_modules/mime": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.4.tgz", + "integrity": "sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==", + "funding": [ + "https://github.com/sponsors/broofa" + ], + "license": "MIT", + "bin": { + "mime": "bin/cli.js" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -1642,6 +1906,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1658,40 +1923,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -1725,7 +1956,8 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/nanoid": { "version": "3.3.7", @@ -1745,50 +1977,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/node-addon-api": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.1.0.tgz", - "integrity": "sha512-yBY+qqWSv3dWKGODD6OGE6GnTX7Q2r+4+DfpqxHSHh8x0B4EKP9+wVGLS6U/AM1vxSNNmUEuIV5EGhYwPpfOwQ==", - "license": "MIT", - "engines": { - "node": "^18 || ^20 || >= 21" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "license": "ISC", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -1798,32 +1986,11 @@ "node": ">=0.10.0" } }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "dependencies": { "wrappy": "1" } @@ -1832,6 +1999,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -1935,20 +2103,6 @@ "node": ">=16.13" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -2021,26 +2175,6 @@ "node": ">=6" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/sander": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", @@ -2065,23 +2199,60 @@ "node": ">=10" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "license": "ISC" - }, "node_modules/set-cookie-parser": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", "dev": true }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" + "node_modules/sharp": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz", + "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.0" + }, + "engines": { + "libvips": ">=8.15.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.4", + "@img/sharp-darwin-x64": "0.33.4", + "@img/sharp-libvips-darwin-arm64": "1.0.2", + "@img/sharp-libvips-darwin-x64": "1.0.2", + "@img/sharp-libvips-linux-arm": "1.0.2", + "@img/sharp-libvips-linux-arm64": "1.0.2", + "@img/sharp-libvips-linux-s390x": "1.0.2", + "@img/sharp-libvips-linux-x64": "1.0.2", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", + "@img/sharp-libvips-linuxmusl-x64": "1.0.2", + "@img/sharp-linux-arm": "0.33.4", + "@img/sharp-linux-arm64": "0.33.4", + "@img/sharp-linux-s390x": "0.33.4", + "@img/sharp-linux-x64": "0.33.4", + "@img/sharp-linuxmusl-arm64": "0.33.4", + "@img/sharp-linuxmusl-x64": "0.33.4", + "@img/sharp-wasm32": "0.33.4", + "@img/sharp-win32-ia32": "0.33.4", + "@img/sharp-win32-x64": "0.33.4" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } }, "node_modules/sirv": { "version": "2.0.4", @@ -2121,41 +2292,6 @@ "node": ">=0.10.0" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -2193,6 +2329,16 @@ "node": ">=16" } }, + "node_modules/svelte-adapter-bun": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/svelte-adapter-bun/-/svelte-adapter-bun-0.5.2.tgz", + "integrity": "sha512-xEtFgaal6UgrCwwkSIcapO9kopoFNUYCYqyKCikdqxX9bz2TDYnrWQZ7qBnkunMxi1HOIERUCvTcebYGiarZLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tiny-glob": "^0.2.9" + } + }, "node_modules/svelte-check": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.8.2.tgz", @@ -2287,35 +2433,6 @@ } } }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/tiny-glob": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", @@ -2347,16 +2464,11 @@ "node": ">=6" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, "node_modules/tslib": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "devOptional": true }, "node_modules/typescript": { "version": "5.5.2", @@ -2375,12 +2487,7 @@ "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, "license": "MIT" }, "node_modules/vite": { @@ -2452,41 +2559,11 @@ } } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true } } } diff --git a/package.json b/package.json index 5fd92ab..3be089a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ava", - "version": "1.0.1", + "version": "1.1.0", "private": true, "scripts": { "dev": "vite dev", @@ -12,8 +12,6 @@ "format": "prettier --write ." }, "devDependencies": { - "@sveltejs/adapter-auto": "^3.0.0", - "@sveltejs/kit": "^2.0.0", "@sveltejs/vite-plugin-svelte": "^3.0.0", "@types/bun": "^1.1.6", "prettier": "^3.1.1", @@ -31,10 +29,14 @@ "@fontsource-variable/inter": "^5.0.18", "@fontsource-variable/noto-sans-mono": "^5.0.20", "@prisma/client": "5.16.2", - "magickwand.js": "^1.1.0", - "mime": "^4.0.4" + "mime": "^4.0.4", + "sharp": "^0.33.4", + "@sveltejs/kit": "^2.0.0" }, "trustedDependencies": [ - "magickwand.js" + "@prisma/client", + "@prisma/engines", + "prisma", + "sharp" ] } diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 5720b92..6700849 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -3,6 +3,7 @@ generator client { provider = "prisma-client-js" + binaryTargets = ["native", "debian-openssl-1.1.x"] } datasource db { diff --git a/src/lib/avatars.ts b/src/lib/avatars.ts index 1e62eb4..ca4bb6a 100644 --- a/src/lib/avatars.ts +++ b/src/lib/avatars.ts @@ -3,11 +3,9 @@ import { existsSync } from "node:fs" import { join } from "node:path" import { prisma } from "./clientsingleton" import configuration from "./configuration" -import { Magick, MagickCore } from "magickwand.js" +import Sharp from "sharp" import mime from "mime" -Magick.SetSecurityPolicy(await Bun.file('./imagemagick.policy.xml').text()) - // todo: make customizable export const avatarDirectory = "./.data/avatars" export const defaultAvatarDirectory = "./static/default/" @@ -37,23 +35,18 @@ export async function getPathToAvatarForIdentifier(identifier: string, size: str return getPathToAvatarForUid(user?.userId, size) } -export async function rerenderAvatar(bin: ArrayBuffer, squareSize?: number) { - let img = new Magick.Image; - // read file - await img.readAsync(new Magick.Blob(bin),"") - if (squareSize) { - // resize, but don't upscale, while filling without squishing - await img.scaleAsync(`${squareSize}x${squareSize}^>`) - } - // center crop - const size = img.size() - squareSize = Math.min(size.width(), size.height()) - await img.extentAsync(`${squareSize}x${squareSize}`, MagickCore.CenterGravity) - - // return avatar buffer - let tempBlob = new Magick.Blob() - await img.writeAsync(tempBlob) - return tempBlob.dataAsync() +export async function rerenderAvatar(bin: ArrayBuffer, squareSize: number) { + let img = Sharp(bin); + let metadata = await img.metadata(); + squareSize = Math.min(...[metadata.width, metadata.height].filter(e => e) as number[], squareSize) + + img.resize({ + width: squareSize, + height: squareSize, + fit: "cover" + }) + + return img.toBuffer() } export async function setNewAvatar(uid: string, avatar?: File) {