Merge branch 'renovate/canvas-3.x' into 'main'

Update dependency canvas to v3

See merge request PronounsPage/PronounsPage!585
This commit is contained in:
Valentyne Stigloher 2025-02-23 14:32:54 +00:00
commit 5ca29e538d
5 changed files with 65 additions and 143 deletions

View File

@ -6,7 +6,7 @@
artifacts: false artifacts: false
rules: rules:
- -
if: $CI_COMMIT_REF_PROTECTED && $DEPLOY_TARGET =~ $ENVIRONMENT_PATTERN if: $CI_COMMIT_TAG =~ /^deploy-.*/ && $CI_COMMIT_TAG_MESSAGE =~ $ENVIRONMENT_PATTERN
- -
if: $CI_COMMIT_REF_PROTECTED == 'true' && $DEPLOY_TARGET =~ $ENVIRONMENT_PATTERN if: $CI_COMMIT_REF_PROTECTED == 'true' && $DEPLOY_TARGET =~ $ENVIRONMENT_PATTERN
- -

View File

@ -23,7 +23,7 @@
"@sentry/cli": "^2.31.0", "@sentry/cli": "^2.31.0",
"@sentry/node": "^7.109.0", "@sentry/node": "^7.109.0",
"abort-controller": "^3.0.0", "abort-controller": "^3.0.0",
"canvas": "^2.11.2", "canvas": "^3.1.0",
"dotenv": "^16.4.5", "dotenv": "^16.4.5",
"feed": "^4.2.2", "feed": "^4.2.2",
"generic-diff": "^1.0.1", "generic-diff": "^1.0.1",

172
pnpm-lock.yaml generated
View File

@ -33,8 +33,8 @@ importers:
specifier: ^3.0.0 specifier: ^3.0.0
version: 3.0.0 version: 3.0.0
canvas: canvas:
specifier: ^2.11.2 specifier: ^3.1.0
version: 2.11.2(encoding@0.1.13) version: 3.1.0
dotenv: dotenv:
specifier: ^16.4.5 specifier: ^16.4.5
version: 16.4.7 version: 16.4.7
@ -67,7 +67,7 @@ importers:
version: 0.7.3 version: 0.7.3
jsdom: jsdom:
specifier: ^24.1.1 specifier: ^24.1.1
version: 24.1.3(canvas@2.11.2(encoding@0.1.13)) version: 24.1.3(canvas@3.1.0)
luxon: luxon:
specifier: ^1.28.1 specifier: ^1.28.1
version: 1.28.1 version: 1.28.1
@ -146,7 +146,7 @@ importers:
version: 1.0.1(@vue/compiler-sfc@3.5.13)(eslint@9.13.0(jiti@2.4.2))(magicast@0.3.5)(typescript@5.7.2)(vite@5.4.11(@types/node@20.16.5)(sass@1.32.12)(terser@5.33.0)) version: 1.0.1(@vue/compiler-sfc@3.5.13)(eslint@9.13.0(jiti@2.4.2))(magicast@0.3.5)(typescript@5.7.2)(vite@5.4.11(@types/node@20.16.5)(sass@1.32.12)(terser@5.33.0))
'@nuxt/test-utils': '@nuxt/test-utils':
specifier: ^3.15.4 specifier: ^3.15.4
version: 3.15.4(@playwright/test@1.50.0)(@types/node@20.16.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(magicast@0.3.5)(playwright-core@1.50.0)(sass@1.32.12)(terser@5.33.0)(typescript@5.7.2)(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(sass@1.32.12)(terser@5.33.0))(yaml@2.7.0) version: 3.15.4(@playwright/test@1.50.0)(@types/node@20.16.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@24.1.3(canvas@3.1.0))(magicast@0.3.5)(playwright-core@1.50.0)(sass@1.32.12)(terser@5.33.0)(typescript@5.7.2)(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@3.1.0))(sass@1.32.12)(terser@5.33.0))(yaml@2.7.0)
'@nuxtjs/plausible': '@nuxtjs/plausible':
specifier: ^1.2.0 specifier: ^1.2.0
version: 1.2.0(magicast@0.3.5) version: 1.2.0(magicast@0.3.5)
@ -215,7 +215,7 @@ importers:
version: 0.10.6(magicast@0.3.5)(vite@5.4.11(@types/node@20.16.5)(sass@1.32.12)(terser@5.33.0))(workbox-build@7.3.0)(workbox-window@7.3.0) version: 0.10.6(magicast@0.3.5)(vite@5.4.11(@types/node@20.16.5)(sass@1.32.12)(terser@5.33.0))(workbox-build@7.3.0)(workbox-window@7.3.0)
'@vitest/coverage-v8': '@vitest/coverage-v8':
specifier: ^2.1.9 specifier: ^2.1.9
version: 2.1.9(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(sass@1.32.12)(terser@5.33.0)) version: 2.1.9(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@3.1.0))(sass@1.32.12)(terser@5.33.0))
'@vue/test-utils': '@vue/test-utils':
specifier: ^2.4.6 specifier: ^2.4.6
version: 2.4.6 version: 2.4.6
@ -284,7 +284,7 @@ importers:
version: https://codeload.github.com/pixunil/h3-express/tar.gz/0dd96342062c6190cc50101e7b48480587ca9582 version: https://codeload.github.com/pixunil/h3-express/tar.gz/0dd96342062c6190cc50101e7b48480587ca9582
html-validate: html-validate:
specifier: ^9.2.2 specifier: ^9.2.2
version: 9.3.0(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(sass@1.32.12)(terser@5.33.0)) version: 9.3.0(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@3.1.0))(sass@1.32.12)(terser@5.33.0))
markdown-it: markdown-it:
specifier: ^14.0.0 specifier: ^14.0.0
version: 14.1.0 version: 14.1.0
@ -329,7 +329,7 @@ importers:
version: 5.7.2 version: 5.7.2
vitest: vitest:
specifier: ^2.1.9 specifier: ^2.1.9
version: 2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(sass@1.32.12)(terser@5.33.0) version: 2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@3.1.0))(sass@1.32.12)(terser@5.33.0)
vue-component-type-helpers: vue-component-type-helpers:
specifier: ^2.1.6 specifier: ^2.1.6
version: 2.1.6 version: 2.1.6
@ -1657,10 +1657,6 @@ packages:
'@kwsites/promise-deferred@1.1.1': '@kwsites/promise-deferred@1.1.1':
resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==}
'@mapbox/node-pre-gyp@1.0.11':
resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==}
hasBin: true
'@mapbox/node-pre-gyp@2.0.0': '@mapbox/node-pre-gyp@2.0.0':
resolution: {integrity: sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==} resolution: {integrity: sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==}
engines: {node: '>=18'} engines: {node: '>=18'}
@ -3006,11 +3002,6 @@ packages:
resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==}
engines: {node: '>=14'} engines: {node: '>=14'}
are-we-there-yet@2.0.0:
resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==}
engines: {node: '>=10'}
deprecated: This package is no longer supported.
are-we-there-yet@3.0.1: are-we-there-yet@3.0.1:
resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
@ -3307,9 +3298,9 @@ packages:
caniuse-lite@1.0.30001692: caniuse-lite@1.0.30001692:
resolution: {integrity: sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==} resolution: {integrity: sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==}
canvas@2.11.2: canvas@3.1.0:
resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} resolution: {integrity: sha512-tTj3CqqukVJ9NgSahykNwtGda7V33VLObwrHfzT0vqJXu7J4d4C/7kQQW3fOEGDfZZoILPut5H00gOjyttPGyg==}
engines: {node: '>=6'} engines: {node: ^18.12.0 || >= 20.9.0}
capture-stack-trace@1.0.2: capture-stack-trace@1.0.2:
resolution: {integrity: sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==} resolution: {integrity: sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==}
@ -3753,10 +3744,6 @@ packages:
decimal.js@10.4.3: decimal.js@10.4.3:
resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
decompress-response@4.2.1:
resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==}
engines: {node: '>=8'}
decompress-response@6.0.0: decompress-response@6.0.0:
resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -4461,11 +4448,6 @@ packages:
resolution: {integrity: sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==} resolution: {integrity: sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==}
engines: {node: '>=10'} engines: {node: '>=10'}
gauge@3.0.2:
resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==}
engines: {node: '>=10'}
deprecated: This package is no longer supported.
gauge@4.0.4: gauge@4.0.4:
resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
@ -5476,10 +5458,6 @@ packages:
magicast@0.3.5: magicast@0.3.5:
resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==}
make-dir@3.1.0:
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
engines: {node: '>=8'}
make-dir@4.0.0: make-dir@4.0.0:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -5603,10 +5581,6 @@ packages:
resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
engines: {node: '>=12'} engines: {node: '>=12'}
mimic-response@2.1.0:
resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==}
engines: {node: '>=8'}
mimic-response@3.1.0: mimic-response@3.1.0:
resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -5728,9 +5702,6 @@ packages:
multiformats@9.9.0: multiformats@9.9.0:
resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==}
nan@2.20.0:
resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==}
nanoid@3.3.8: nanoid@3.3.8:
resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@ -5867,10 +5838,6 @@ packages:
resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==}
engines: {node: '>=18'} engines: {node: '>=18'}
npmlog@5.0.1:
resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==}
deprecated: This package is no longer supported.
npmlog@6.0.2: npmlog@6.0.2:
resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
@ -6926,9 +6893,6 @@ packages:
simple-concat@1.0.1: simple-concat@1.0.1:
resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
simple-get@3.1.1:
resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==}
simple-get@4.0.1: simple-get@4.0.1:
resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
@ -10012,21 +9976,6 @@ snapshots:
'@kwsites/promise-deferred@1.1.1': {} '@kwsites/promise-deferred@1.1.1': {}
'@mapbox/node-pre-gyp@1.0.11(encoding@0.1.13)':
dependencies:
detect-libc: 2.0.3
https-proxy-agent: 5.0.1
make-dir: 3.1.0
node-fetch: 2.7.0(encoding@0.1.13)
nopt: 5.0.0
npmlog: 5.0.1
rimraf: 3.0.2
semver: 7.6.3
tar: 6.2.1
transitivePeerDependencies:
- encoding
- supports-color
'@mapbox/node-pre-gyp@2.0.0(encoding@0.1.13)': '@mapbox/node-pre-gyp@2.0.0(encoding@0.1.13)':
dependencies: dependencies:
consola: 3.4.0 consola: 3.4.0
@ -10306,7 +10255,7 @@ snapshots:
- magicast - magicast
- supports-color - supports-color
'@nuxt/test-utils@3.15.4(@playwright/test@1.50.0)(@types/node@20.16.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(magicast@0.3.5)(playwright-core@1.50.0)(sass@1.32.12)(terser@5.33.0)(typescript@5.7.2)(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(sass@1.32.12)(terser@5.33.0))(yaml@2.7.0)': '@nuxt/test-utils@3.15.4(@playwright/test@1.50.0)(@types/node@20.16.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@24.1.3(canvas@3.1.0))(magicast@0.3.5)(playwright-core@1.50.0)(sass@1.32.12)(terser@5.33.0)(typescript@5.7.2)(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@3.1.0))(sass@1.32.12)(terser@5.33.0))(yaml@2.7.0)':
dependencies: dependencies:
'@nuxt/kit': 3.15.4(magicast@0.3.5) '@nuxt/kit': 3.15.4(magicast@0.3.5)
'@nuxt/schema': 3.15.4 '@nuxt/schema': 3.15.4
@ -10332,14 +10281,14 @@ snapshots:
unenv: 1.10.0 unenv: 1.10.0
unplugin: 2.1.2 unplugin: 2.1.2
vite: 6.1.0(@types/node@20.16.5)(jiti@2.4.2)(sass@1.32.12)(terser@5.33.0)(yaml@2.7.0) vite: 6.1.0(@types/node@20.16.5)(jiti@2.4.2)(sass@1.32.12)(terser@5.33.0)(yaml@2.7.0)
vitest-environment-nuxt: 1.0.1(@playwright/test@1.50.0)(@types/node@20.16.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(magicast@0.3.5)(playwright-core@1.50.0)(sass@1.32.12)(terser@5.33.0)(typescript@5.7.2)(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(sass@1.32.12)(terser@5.33.0))(yaml@2.7.0) vitest-environment-nuxt: 1.0.1(@playwright/test@1.50.0)(@types/node@20.16.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@24.1.3(canvas@3.1.0))(magicast@0.3.5)(playwright-core@1.50.0)(sass@1.32.12)(terser@5.33.0)(typescript@5.7.2)(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@3.1.0))(sass@1.32.12)(terser@5.33.0))(yaml@2.7.0)
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.2)
optionalDependencies: optionalDependencies:
'@playwright/test': 1.50.0 '@playwright/test': 1.50.0
'@vue/test-utils': 2.4.6 '@vue/test-utils': 2.4.6
jsdom: 24.1.3(canvas@2.11.2(encoding@0.1.13)) jsdom: 24.1.3(canvas@3.1.0)
playwright-core: 1.50.0 playwright-core: 1.50.0
vitest: 2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(sass@1.32.12)(terser@5.33.0) vitest: 2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@3.1.0))(sass@1.32.12)(terser@5.33.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- jiti - jiti
@ -11551,7 +11500,7 @@ snapshots:
vite: 6.1.0(@types/node@20.16.5)(jiti@2.4.2)(sass@1.32.12)(terser@5.33.0)(yaml@2.7.0) vite: 6.1.0(@types/node@20.16.5)(jiti@2.4.2)(sass@1.32.12)(terser@5.33.0)(yaml@2.7.0)
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.2)
'@vitest/coverage-v8@2.1.9(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(sass@1.32.12)(terser@5.33.0))': '@vitest/coverage-v8@2.1.9(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@3.1.0))(sass@1.32.12)(terser@5.33.0))':
dependencies: dependencies:
'@ampproject/remapping': 2.3.0 '@ampproject/remapping': 2.3.0
'@bcoe/v8-coverage': 0.2.3 '@bcoe/v8-coverage': 0.2.3
@ -11565,7 +11514,7 @@ snapshots:
std-env: 3.8.0 std-env: 3.8.0
test-exclude: 7.0.1 test-exclude: 7.0.1
tinyrainbow: 1.2.0 tinyrainbow: 1.2.0
vitest: 2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(sass@1.32.12)(terser@5.33.0) vitest: 2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@3.1.0))(sass@1.32.12)(terser@5.33.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -11789,7 +11738,8 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- typescript - typescript
abbrev@1.1.1: {} abbrev@1.1.1:
optional: true
abbrev@2.0.0: {} abbrev@2.0.0: {}
@ -11882,7 +11832,8 @@ snapshots:
normalize-path: 3.0.0 normalize-path: 3.0.0
picomatch: 2.3.1 picomatch: 2.3.1
aproba@2.0.0: {} aproba@2.0.0:
optional: true
archiver-utils@5.0.2: archiver-utils@5.0.2:
dependencies: dependencies:
@ -11906,11 +11857,6 @@ snapshots:
are-docs-informative@0.0.2: {} are-docs-informative@0.0.2: {}
are-we-there-yet@2.0.0:
dependencies:
delegates: 1.0.0
readable-stream: 3.6.2
are-we-there-yet@3.0.1: are-we-there-yet@3.0.1:
dependencies: dependencies:
delegates: 1.0.0 delegates: 1.0.0
@ -12247,14 +12193,10 @@ snapshots:
caniuse-lite@1.0.30001692: {} caniuse-lite@1.0.30001692: {}
canvas@2.11.2(encoding@0.1.13): canvas@3.1.0:
dependencies: dependencies:
'@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13) node-addon-api: 7.1.1
nan: 2.20.0 prebuild-install: 7.1.2
simple-get: 3.1.1
transitivePeerDependencies:
- encoding
- supports-color
capture-stack-trace@1.0.2: {} capture-stack-trace@1.0.2: {}
@ -12386,7 +12328,8 @@ snapshots:
color-name: 1.1.4 color-name: 1.1.4
simple-swizzle: 0.2.2 simple-swizzle: 0.2.2
color-support@1.1.3: {} color-support@1.1.3:
optional: true
color@4.2.3: color@4.2.3:
dependencies: dependencies:
@ -12438,7 +12381,8 @@ snapshots:
consola@3.4.0: {} consola@3.4.0: {}
console-control-strings@1.1.0: {} console-control-strings@1.1.0:
optional: true
content-disposition@0.5.4: content-disposition@0.5.4:
dependencies: dependencies:
@ -12681,10 +12625,6 @@ snapshots:
decimal.js@10.4.3: {} decimal.js@10.4.3: {}
decompress-response@4.2.1:
dependencies:
mimic-response: 2.1.0
decompress-response@6.0.0: decompress-response@6.0.0:
dependencies: dependencies:
mimic-response: 3.1.0 mimic-response: 3.1.0
@ -12734,7 +12674,8 @@ snapshots:
delegate@3.2.0: {} delegate@3.2.0: {}
delegates@1.0.0: {} delegates@1.0.0:
optional: true
denque@2.1.0: {} denque@2.1.0: {}
@ -13630,18 +13571,6 @@ snapshots:
fuse.js@7.1.0: {} fuse.js@7.1.0: {}
gauge@3.0.2:
dependencies:
aproba: 2.0.0
color-support: 1.1.3
console-control-strings: 1.1.0
has-unicode: 2.0.1
object-assign: 4.1.1
signal-exit: 3.0.7
string-width: 4.2.3
strip-ansi: 6.0.1
wide-align: 1.1.5
gauge@4.0.4: gauge@4.0.4:
dependencies: dependencies:
aproba: 2.0.0 aproba: 2.0.0
@ -13914,7 +13843,8 @@ snapshots:
dependencies: dependencies:
has-symbols: 1.1.0 has-symbols: 1.1.0
has-unicode@2.0.1: {} has-unicode@2.0.1:
optional: true
hash.js@1.1.7: hash.js@1.1.7:
dependencies: dependencies:
@ -13949,7 +13879,7 @@ snapshots:
html-tags@3.3.1: {} html-tags@3.3.1: {}
html-validate@9.3.0(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(sass@1.32.12)(terser@5.33.0)): html-validate@9.3.0(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@3.1.0))(sass@1.32.12)(terser@5.33.0)):
dependencies: dependencies:
'@html-validate/stylish': 4.2.0 '@html-validate/stylish': 4.2.0
'@sidvind/better-ajv-errors': 3.0.1(ajv@8.17.1) '@sidvind/better-ajv-errors': 3.0.1(ajv@8.17.1)
@ -13960,7 +13890,7 @@ snapshots:
prompts: 2.4.2 prompts: 2.4.2
semver: 7.6.3 semver: 7.6.3
optionalDependencies: optionalDependencies:
vitest: 2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(sass@1.32.12)(terser@5.33.0) vitest: 2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@3.1.0))(sass@1.32.12)(terser@5.33.0)
html2canvas@1.4.1: html2canvas@1.4.1:
dependencies: dependencies:
@ -14416,7 +14346,7 @@ snapshots:
jsdoc-type-pratt-parser@4.1.0: {} jsdoc-type-pratt-parser@4.1.0: {}
jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)): jsdom@24.1.3(canvas@3.1.0):
dependencies: dependencies:
cssstyle: 4.1.0 cssstyle: 4.1.0
data-urls: 5.0.0 data-urls: 5.0.0
@ -14440,7 +14370,7 @@ snapshots:
ws: 8.18.0 ws: 8.18.0
xml-name-validator: 5.0.0 xml-name-validator: 5.0.0
optionalDependencies: optionalDependencies:
canvas: 2.11.2(encoding@0.1.13) canvas: 3.1.0
transitivePeerDependencies: transitivePeerDependencies:
- bufferutil - bufferutil
- supports-color - supports-color
@ -14716,10 +14646,6 @@ snapshots:
'@babel/types': 7.26.8 '@babel/types': 7.26.8
source-map-js: 1.2.1 source-map-js: 1.2.1
make-dir@3.1.0:
dependencies:
semver: 6.3.1
make-dir@4.0.0: make-dir@4.0.0:
dependencies: dependencies:
semver: 7.6.3 semver: 7.6.3
@ -14845,8 +14771,6 @@ snapshots:
mimic-fn@4.0.0: {} mimic-fn@4.0.0: {}
mimic-response@2.1.0: {}
mimic-response@3.1.0: {} mimic-response@3.1.0: {}
min-indent@1.0.1: {} min-indent@1.0.1: {}
@ -14957,8 +14881,6 @@ snapshots:
multiformats@9.9.0: {} multiformats@9.9.0: {}
nan@2.20.0: {}
nanoid@3.3.8: {} nanoid@3.3.8: {}
nanoid@5.0.9: {} nanoid@5.0.9: {}
@ -15121,6 +15043,7 @@ snapshots:
nopt@5.0.0: nopt@5.0.0:
dependencies: dependencies:
abbrev: 1.1.1 abbrev: 1.1.1
optional: true
nopt@7.2.1: nopt@7.2.1:
dependencies: dependencies:
@ -15160,13 +15083,6 @@ snapshots:
path-key: 4.0.0 path-key: 4.0.0
unicorn-magic: 0.3.0 unicorn-magic: 0.3.0
npmlog@5.0.1:
dependencies:
are-we-there-yet: 2.0.0
console-control-strings: 1.1.0
gauge: 3.0.2
set-blocking: 2.0.0
npmlog@6.0.2: npmlog@6.0.2:
dependencies: dependencies:
are-we-there-yet: 3.0.1 are-we-there-yet: 3.0.1
@ -16194,6 +16110,7 @@ snapshots:
rimraf@3.0.2: rimraf@3.0.2:
dependencies: dependencies:
glob: 7.2.3 glob: 7.2.3
optional: true
rimraf@5.0.10: rimraf@5.0.10:
dependencies: dependencies:
@ -16449,12 +16366,6 @@ snapshots:
simple-concat@1.0.1: {} simple-concat@1.0.1: {}
simple-get@3.1.1:
dependencies:
decompress-response: 4.2.1
once: 1.4.0
simple-concat: 1.0.1
simple-get@4.0.1: simple-get@4.0.1:
dependencies: dependencies:
decompress-response: 6.0.0 decompress-response: 6.0.0
@ -17469,9 +17380,9 @@ snapshots:
terser: 5.33.0 terser: 5.33.0
yaml: 2.7.0 yaml: 2.7.0
vitest-environment-nuxt@1.0.1(@playwright/test@1.50.0)(@types/node@20.16.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(magicast@0.3.5)(playwright-core@1.50.0)(sass@1.32.12)(terser@5.33.0)(typescript@5.7.2)(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(sass@1.32.12)(terser@5.33.0))(yaml@2.7.0): vitest-environment-nuxt@1.0.1(@playwright/test@1.50.0)(@types/node@20.16.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@24.1.3(canvas@3.1.0))(magicast@0.3.5)(playwright-core@1.50.0)(sass@1.32.12)(terser@5.33.0)(typescript@5.7.2)(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@3.1.0))(sass@1.32.12)(terser@5.33.0))(yaml@2.7.0):
dependencies: dependencies:
'@nuxt/test-utils': 3.15.4(@playwright/test@1.50.0)(@types/node@20.16.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(magicast@0.3.5)(playwright-core@1.50.0)(sass@1.32.12)(terser@5.33.0)(typescript@5.7.2)(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(sass@1.32.12)(terser@5.33.0))(yaml@2.7.0) '@nuxt/test-utils': 3.15.4(@playwright/test@1.50.0)(@types/node@20.16.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@24.1.3(canvas@3.1.0))(magicast@0.3.5)(playwright-core@1.50.0)(sass@1.32.12)(terser@5.33.0)(typescript@5.7.2)(vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@3.1.0))(sass@1.32.12)(terser@5.33.0))(yaml@2.7.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@cucumber/cucumber' - '@cucumber/cucumber'
- '@jest/globals' - '@jest/globals'
@ -17498,7 +17409,7 @@ snapshots:
- vitest - vitest
- yaml - yaml
vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(sass@1.32.12)(terser@5.33.0): vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.3(canvas@3.1.0))(sass@1.32.12)(terser@5.33.0):
dependencies: dependencies:
'@vitest/expect': 2.1.9 '@vitest/expect': 2.1.9
'@vitest/mocker': 2.1.9(vite@5.4.11(@types/node@20.16.5)(sass@1.32.12)(terser@5.33.0)) '@vitest/mocker': 2.1.9(vite@5.4.11(@types/node@20.16.5)(sass@1.32.12)(terser@5.33.0))
@ -17522,7 +17433,7 @@ snapshots:
why-is-node-running: 2.3.0 why-is-node-running: 2.3.0
optionalDependencies: optionalDependencies:
'@types/node': 20.16.5 '@types/node': 20.16.5
jsdom: 24.1.3(canvas@2.11.2(encoding@0.1.13)) jsdom: 24.1.3(canvas@3.1.0)
transitivePeerDependencies: transitivePeerDependencies:
- less - less
- lightningcss - lightningcss
@ -17718,6 +17629,7 @@ snapshots:
wide-align@1.1.5: wide-align@1.1.5:
dependencies: dependencies:
string-width: 4.2.3 string-width: 4.2.3
optional: true
word-wrap@1.2.5: {} word-wrap@1.2.5: {}

View File

@ -1,6 +1,9 @@
import fs from 'node:fs/promises';
import { createCanvas, loadImage } from 'canvas'; import { createCanvas, loadImage } from 'canvas';
import type { CanvasRenderingContext2D, Image } from 'canvas'; import type { CanvasRenderingContext2D, Image } from 'canvas';
import { Router } from 'express'; import { Router } from 'express';
import sharp from 'sharp';
import SQL from 'sql-template-strings'; import SQL from 'sql-template-strings';
import type { Translations } from '../../locale/translations.ts'; import type { Translations } from '../../locale/translations.ts';
@ -37,6 +40,12 @@ const drawCircle = (context: CanvasRenderingContext2D, image: Image, x: number,
context.restore(); context.restore();
}; };
const loadSvgImage = async (svg: string): Promise<Image> => {
const pngBuffer = await sharp(await fs.readFile(svg)).png()
.toBuffer();
return await loadImage(pngBuffer);
};
const router = Router(); const router = Router();
const width = 1200; const width = 1200;
@ -79,24 +88,25 @@ const getBannerKey = defineCachedFunction(async (path: string, db: Database) =>
}, { }, {
name: 'banner', name: 'banner',
getKey: (path) => path, getKey: (path) => path,
shouldBypassCache: () => true,
maxAge: 24 * 60 * 60, maxAge: 24 * 60 * 60,
}); });
const drawDefault = async (context: CanvasRenderingContext2D, fontName: string) => { const drawDefault = async (context: CanvasRenderingContext2D, fontName: string) => {
const leftRatio = 5; const leftRatio = 5;
const logo = await loadImage('public/logo/logo.svg'); const logo = await loadSvgImage('public/logo/logo.svg');
context.drawImage(logo, width / leftRatio - imageSize / 2, height / 2 - imageSize / 2, imageSize, imageSize); context.drawImage(logo, width / leftRatio - imageSize / 2, height / 2 - imageSize / 2, imageSize, imageSize);
context.font = `regular ${translations.title.length < 10 ? 120 : translations.title.length < 14 ? 80 : 72}pt '${fontName}'`; context.font = `${translations.title.length < 10 ? 120 : translations.title.length < 14 ? 80 : 72}pt '${fontName}'`;
context.fillText(translations.title, width / leftRatio + imageSize / 1.5, height / 2 + (translations.title.length < 10 ? 48 : translations.title.length < 14 ? 36 : 24)); context.fillText(translations.title, width / leftRatio + imageSize / 1.5, height / 2 + (translations.title.length < 10 ? 48 : translations.title.length < 14 ? 36 : 24));
return 'default.png'; return 'default.png';
}; };
const drawPronounUsage = async (context: CanvasRenderingContext2D, fontName: string, usage: PronounUsage) => { const drawPronounUsage = async (context: CanvasRenderingContext2D, fontName: string, usage: PronounUsage) => {
const logo = await loadImage('public/logo/logo.svg'); const logo = await loadSvgImage('public/logo/logo.svg');
context.drawImage(logo, width / leftRatio - imageSize / 2, height / 2 - imageSize / 2, imageSize, imageSize); context.drawImage(logo, width / leftRatio - imageSize / 2, height / 2 - imageSize / 2, imageSize, imageSize);
context.font = `regular 48pt '${fontName}'`; context.font = `48pt '${fontName}'`;
context.fillText(`${translations.pronouns.intro}:`, width / leftRatio + imageSize / 1.5, height / 2 - 36); context.fillText(`${translations.pronouns.intro}:`, width / leftRatio + imageSize / 1.5, height / 2 - 36);
context.font = `bold ${usage.short.options.length <= 2 ? '70' : '36'}pt '${fontName}'`; context.font = `bold ${usage.short.options.length <= 2 ? '70' : '36'}pt '${fontName}'`;
@ -114,17 +124,17 @@ const drawProfileBanner = async (
user: Pick<User, 'id' | 'username' | 'email' | 'avatarSource'>, user: Pick<User, 'id' | 'username' | 'email' | 'avatarSource'>,
db: Database, db: Database,
) => { ) => {
const logoPrimary = await loadImage('public/logo/logo-primary.svg'); const logoPrimary = await loadSvgImage('public/logo/logo-primary.svg');
try { try {
const avatarImage = await loadImage(await avatar(db, user)); const avatarImage = await loadImage(await avatar(db, user));
drawCircle(context, avatarImage, width / leftRatio - imageSize / 2, height / 2 - imageSize / 2, imageSize); drawCircle(context, avatarImage, width / leftRatio - imageSize / 2, height / 2 - imageSize / 2, imageSize);
} catch {} } catch {}
context.font = `regular 48pt '${fontName}'`; context.font = `48pt '${fontName}'`;
context.fillText(`@${user.username}`, width / leftRatio + imageSize, height / 2); context.fillText(`@${user.username}`, width / leftRatio + imageSize, height / 2);
context.font = `regular 24pt '${fontName}'`; context.font = `24pt '${fontName}'`;
context.fillStyle = '#C71585'; context.fillStyle = '#C71585';
const logoSize = 24 * 1.25; const logoSize = 24 * 1.25;
context.drawImage(logoPrimary, width / leftRatio + imageSize, height / 2 + logoSize - 8, logoSize, logoSize); context.drawImage(logoPrimary, width / leftRatio + imageSize, height / 2 + logoSize - 8, logoSize, logoSize);

View File

@ -257,7 +257,7 @@ router.get('/nouns/:id.png', async (req, res) => {
context.font = `bold 64pt '${fontName}'`; context.font = `bold 64pt '${fontName}'`;
genders.forEach((gender, column) => { genders.forEach((gender, column) => {
context.font = 'regular 24pt FontAwesome'; context.font = '24pt FontAwesome';
context.fillText(iconUnicodesByGender[gender], column * (width - 2 * padding) / genders.length + padding, padding * 1.5); context.fillText(iconUnicodesByGender[gender], column * (width - 2 * padding) / genders.length + padding, padding * 1.5);
context.font = `bold 24pt '${fontName}'`; context.font = `bold 24pt '${fontName}'`;
@ -265,7 +265,7 @@ router.get('/nouns/:id.png', async (req, res) => {
context.fillText(header, column * (width - 2 * padding) / genders.length + padding + 36, padding * 1.5); context.fillText(header, column * (width - 2 * padding) / genders.length + padding + 36, padding * 1.5);
}); });
context.font = `regular 24pt '${fontName}'`; context.font = `24pt '${fontName}'`;
genders.forEach((form, column) => { genders.forEach((form, column) => {
let i = 0; let i = 0;
for (const [key, symbol] of [['', '⋅'], ['Pl', '⁖']] as const) { for (const [key, symbol] of [['', '⋅'], ['Pl', '⁖']] as const) {
@ -278,9 +278,9 @@ router.get('/nouns/:id.png', async (req, res) => {
}); });
context.fillStyle = '#C71585'; context.fillStyle = '#C71585';
context.font = 'regular 16pt FontAwesome'; context.font = '16pt FontAwesome';
context.fillText('\uf02c', padding, height - padding + 12); context.fillText('\uf02c', padding, height - padding + 12);
context.font = `regular 16pt '${fontName}'`; context.font = `16pt '${fontName}'`;
context.fillText( context.fillText(
`${translations.domain}/${global.config.nouns.routeMain || global.config.nouns.route}`, `${translations.domain}/${global.config.nouns.routeMain || global.config.nouns.route}`,
padding + 36, padding + 36,