Update Jimp and add WASM plugins (#3784) * Update jimp, use WASM format plugins * Fix Jimp import path in thumbnails endpoint * Fix size variable * Add fetch patch to handle file URLs * Fix JPEG thumbnailing * Enhance fetch patch to validate file paths and support specific extensions * Add default msBmp format * Update jsconfig * Update JPEG color space in thumbnail generation to YCbCr * Install jimp plugins explicitly * Refactor fetch patch utility functions

058fef1146a96ffbe937699f3f29ca70e56815b7

Cohee <18619528+Cohee1207@users.noreply.github.com>

Signed
10 files changed, +1082 -345Ignore whitespace
jsconfig.json+1 -1
@@ -2,7 +2,7 @@
2 "compilerOptions": {2 "compilerOptions": {
3 "module": "ESNext",3 "module": "ESNext",
4 "target": "ES2023",4 "target": "ES2023",
5 "moduleResolution": "Node",5 "moduleResolution": "Bundler",
6 "strictNullChecks": true,6 "strictNullChecks": true,
7 "strictFunctionTypes": true,7 "strictFunctionTypes": true,
8 "checkJs": true,8 "checkJs": true,
package-lock.json+883 -326
@@ -14,6 +14,26 @@
14 "@agnai/sentencepiece-js": "^1.1.1",14 "@agnai/sentencepiece-js": "^1.1.1",
15 "@agnai/web-tokenizers": "^0.1.3",15 "@agnai/web-tokenizers": "^0.1.3",
16 "@iconfu/svg-inject": "^1.2.3",16 "@iconfu/svg-inject": "^1.2.3",
17 "@jimp/core": "^1.6.0",
18 "@jimp/js-bmp": "^1.6.0",
19 "@jimp/js-gif": "^1.6.0",
20 "@jimp/js-tiff": "^1.6.0",
21 "@jimp/plugin-circle": "^1.6.0",
22 "@jimp/plugin-color": "^1.6.0",
23 "@jimp/plugin-contain": "^1.6.0",
24 "@jimp/plugin-cover": "^1.6.0",
25 "@jimp/plugin-crop": "^1.6.0",
26 "@jimp/plugin-displace": "^1.6.0",
27 "@jimp/plugin-fisheye": "^1.6.0",
28 "@jimp/plugin-flip": "^1.6.0",
29 "@jimp/plugin-mask": "^1.6.0",
30 "@jimp/plugin-quantize": "^1.6.0",
31 "@jimp/plugin-rotate": "^1.6.0",
32 "@jimp/plugin-threshold": "^1.6.0",
33 "@jimp/wasm-avif": "^1.6.0",
34 "@jimp/wasm-jpeg": "^1.6.0",
35 "@jimp/wasm-png": "^1.6.0",
36 "@jimp/wasm-webp": "^1.6.0",
17 "@mozilla/readability": "^0.6.0",37 "@mozilla/readability": "^0.6.0",
18 "@popperjs/core": "^2.11.8",38 "@popperjs/core": "^2.11.8",
19 "@zeldafan0225/ai_horde": "^5.2.0",39 "@zeldafan0225/ai_horde": "^5.2.0",
@@ -46,7 +66,6 @@
46 "ip-regex": "^5.0.0",66 "ip-regex": "^5.0.0",
47 "ipaddr.js": "^2.2.0",67 "ipaddr.js": "^2.2.0",
48 "is-docker": "^3.0.0",68 "is-docker": "^3.0.0",
49 "jimp": "^0.22.10",
50 "localforage": "^1.10.0",69 "localforage": "^1.10.0",
51 "lodash": "^4.17.21",70 "lodash": "^4.17.21",
52 "mime-types": "^2.1.35",71 "mime-types": "^2.1.35",
@@ -428,7 +447,55 @@
428 "@jimp/custom": ">=0.3.5"447 "@jimp/custom": ">=0.3.5"
429 }448 }
430 },449 },
450 "node_modules/@jimp/bmp/node_modules/@jimp/utils": {
451 "version": "0.22.12",
452 "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.12.tgz",
453 "integrity": "sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==",
454 "license": "MIT",
455 "dependencies": {
456 "regenerator-runtime": "^0.13.3"
457 }
458 },
431 "node_modules/@jimp/core": {459 "node_modules/@jimp/core": {
460 "version": "1.6.0",
461 "resolved": "https://registry.npmjs.org/@jimp/core/-/core-1.6.0.tgz",
462 "integrity": "sha512-EQQlKU3s9QfdJqiSrZWNTxBs3rKXgO2W+GxNXDtwchF3a4IqxDheFX1ti+Env9hdJXDiYLp2jTRjlxhPthsk8w==",
463 "license": "MIT",
464 "dependencies": {
465 "@jimp/file-ops": "1.6.0",
466 "@jimp/types": "1.6.0",
467 "@jimp/utils": "1.6.0",
468 "await-to-js": "^3.0.0",
469 "exif-parser": "^0.1.12",
470 "file-type": "^16.0.0",
471 "mime": "3"
472 },
473 "engines": {
474 "node": ">=18"
475 }
476 },
477 "node_modules/@jimp/core/node_modules/mime": {
478 "version": "3.0.0",
479 "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
480 "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
481 "license": "MIT",
482 "bin": {
483 "mime": "cli.js"
484 },
485 "engines": {
486 "node": ">=10.0.0"
487 }
488 },
489 "node_modules/@jimp/custom": {
490 "version": "0.22.12",
491 "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.22.12.tgz",
492 "integrity": "sha512-xcmww1O/JFP2MrlGUMd3Q78S3Qu6W3mYTXYuIqFq33EorgYHV/HqymHfXy9GjiCJ7OI+7lWx6nYFOzU7M4rd1Q==",
493 "license": "MIT",
494 "dependencies": {
495 "@jimp/core": "^0.22.12"
496 }
497 },
498 "node_modules/@jimp/custom/node_modules/@jimp/core": {
432 "version": "0.22.12",499 "version": "0.22.12",
433 "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.22.12.tgz",500 "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.22.12.tgz",
434 "integrity": "sha512-l0RR0dOPyzMKfjUW1uebzueFEDtCOj9fN6pyTYWWOM/VS4BciXQ1VVrJs8pO3kycGYZxncRKhCoygbNr8eEZQA==",501 "integrity": "sha512-l0RR0dOPyzMKfjUW1uebzueFEDtCOj9fN6pyTYWWOM/VS4BciXQ1VVrJs8pO3kycGYZxncRKhCoygbNr8eEZQA==",
@@ -444,13 +511,67 @@
444 "tinycolor2": "^1.6.0"511 "tinycolor2": "^1.6.0"
445 }512 }
446 },513 },
447 "node_modules/@jimp/custom": {514 "node_modules/@jimp/custom/node_modules/@jimp/utils": {
448 "version": "0.22.12",515 "version": "0.22.12",
449 "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.22.12.tgz",516 "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.12.tgz",
450 "integrity": "sha512-xcmww1O/JFP2MrlGUMd3Q78S3Qu6W3mYTXYuIqFq33EorgYHV/HqymHfXy9GjiCJ7OI+7lWx6nYFOzU7M4rd1Q==",517 "integrity": "sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==",
451 "license": "MIT",518 "license": "MIT",
452 "dependencies": {519 "dependencies": {
453 "@jimp/core": "^0.22.12"520 "regenerator-runtime": "^0.13.3"
521 }
522 },
523 "node_modules/@jimp/custom/node_modules/buffer": {
524 "version": "5.7.1",
525 "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
526 "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
527 "funding": [
528 {
529 "type": "github",
530 "url": "https://github.com/sponsors/feross"
531 },
532 {
533 "type": "patreon",
534 "url": "https://www.patreon.com/feross"
535 },
536 {
537 "type": "consulting",
538 "url": "https://feross.org/support"
539 }
540 ],
541 "license": "MIT",
542 "dependencies": {
543 "base64-js": "^1.3.1",
544 "ieee754": "^1.1.13"
545 }
546 },
547 "node_modules/@jimp/custom/node_modules/pixelmatch": {
548 "version": "4.0.2",
549 "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz",
550 "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==",
551 "license": "ISC",
552 "dependencies": {
553 "pngjs": "^3.0.0"
554 },
555 "bin": {
556 "pixelmatch": "bin/pixelmatch"
557 }
558 },
559 "node_modules/@jimp/custom/node_modules/pngjs": {
560 "version": "3.4.0",
561 "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
562 "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==",
563 "license": "MIT",
564 "engines": {
565 "node": ">=4.0.0"
566 }
567 },
568 "node_modules/@jimp/file-ops": {
569 "version": "1.6.0",
570 "resolved": "https://registry.npmjs.org/@jimp/file-ops/-/file-ops-1.6.0.tgz",
571 "integrity": "sha512-Dx/bVDmgnRe1AlniRpCKrGRm5YvGmUwbDzt+MAkgmLGf+jvBT75hmMEZ003n9HQI/aPnm/YKnXjg/hOpzNCpHQ==",
572 "license": "MIT",
573 "engines": {
574 "node": ">=18"
454 }575 }
455 },576 },
456 "node_modules/@jimp/gif": {577 "node_modules/@jimp/gif": {
@@ -467,6 +588,15 @@
467 "@jimp/custom": ">=0.3.5"588 "@jimp/custom": ">=0.3.5"
468 }589 }
469 },590 },
591 "node_modules/@jimp/gif/node_modules/@jimp/utils": {
592 "version": "0.22.12",
593 "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.12.tgz",
594 "integrity": "sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==",
595 "license": "MIT",
596 "dependencies": {
597 "regenerator-runtime": "^0.13.3"
598 }
599 },
470 "node_modules/@jimp/jpeg": {600 "node_modules/@jimp/jpeg": {
471 "version": "0.22.12",601 "version": "0.22.12",
472 "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.22.12.tgz",602 "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.22.12.tgz",
@@ -480,186 +610,237 @@
480 "@jimp/custom": ">=0.3.5"610 "@jimp/custom": ">=0.3.5"
481 }611 }
482 },612 },
483 "node_modules/@jimp/plugin-blit": {613 "node_modules/@jimp/jpeg/node_modules/@jimp/utils": {
484 "version": "0.22.12",614 "version": "0.22.12",
485 "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.22.12.tgz",615 "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.12.tgz",
486 "integrity": "sha512-xslz2ZoFZOPLY8EZ4dC29m168BtDx95D6K80TzgUi8gqT7LY6CsajWO0FAxDwHz6h0eomHMfyGX0stspBrTKnQ==",616 "integrity": "sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==",
487 "license": "MIT",617 "license": "MIT",
488 "dependencies": {618 "dependencies": {
489 "@jimp/utils": "^0.22.12"619 "regenerator-runtime": "^0.13.3"
490 },
491 "peerDependencies": {
492 "@jimp/custom": ">=0.3.5"
493 }620 }
494 },621 },
495 "node_modules/@jimp/plugin-blur": {622 "node_modules/@jimp/js-bmp": {
496 "version": "0.22.12",623 "version": "1.6.0",
497 "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.22.12.tgz",624 "resolved": "https://registry.npmjs.org/@jimp/js-bmp/-/js-bmp-1.6.0.tgz",
498 "integrity": "sha512-S0vJADTuh1Q9F+cXAwFPlrKWzDj2F9t/9JAbUvaaDuivpyWuImEKXVz5PUZw2NbpuSHjwssbTpOZ8F13iJX4uw==",625 "integrity": "sha512-FU6Q5PC/e3yzLyBDXupR3SnL3htU7S3KEs4e6rjDP6gNEOXRFsWs6YD3hXuXd50jd8ummy+q2WSwuGkr8wi+Gw==",
499 "license": "MIT",626 "license": "MIT",
500 "dependencies": {627 "dependencies": {
501 "@jimp/utils": "^0.22.12"628 "@jimp/core": "1.6.0",
629 "@jimp/types": "1.6.0",
630 "@jimp/utils": "1.6.0",
631 "bmp-ts": "^1.0.9"
502 },632 },
503 "peerDependencies": {633 "engines": {
504 "@jimp/custom": ">=0.3.5"634 "node": ">=18"
505 }635 }
506 },636 },
507 "node_modules/@jimp/plugin-circle": {637 "node_modules/@jimp/js-gif": {
508 "version": "0.22.12",638 "version": "1.6.0",
509 "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.22.12.tgz",639 "resolved": "https://registry.npmjs.org/@jimp/js-gif/-/js-gif-1.6.0.tgz",
510 "integrity": "sha512-SWVXx1yiuj5jZtMijqUfvVOJBwOifFn0918ou4ftoHgegc5aHWW5dZbYPjvC9fLpvz7oSlptNl2Sxr1zwofjTg==",640 "integrity": "sha512-N9CZPHOrJTsAUoWkWZstLPpwT5AwJ0wge+47+ix3++SdSL/H2QzyMqxbcDYNFe4MoI5MIhATfb0/dl/wmX221g==",
511 "license": "MIT",641 "license": "MIT",
512 "dependencies": {642 "dependencies": {
513 "@jimp/utils": "^0.22.12"643 "@jimp/core": "1.6.0",
644 "@jimp/types": "1.6.0",
645 "gifwrap": "^0.10.1",
646 "omggif": "^1.0.10"
514 },647 },
515 "peerDependencies": {648 "engines": {
516 "@jimp/custom": ">=0.3.5"649 "node": ">=18"
517 }650 }
518 },651 },
519 "node_modules/@jimp/plugin-color": {652 "node_modules/@jimp/js-jpeg": {
520 "version": "0.22.12",653 "version": "1.6.0",
521 "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.22.12.tgz",654 "resolved": "https://registry.npmjs.org/@jimp/js-jpeg/-/js-jpeg-1.6.0.tgz",
522 "integrity": "sha512-xImhTE5BpS8xa+mAN6j4sMRWaUgUDLoaGHhJhpC+r7SKKErYDR0WQV4yCE4gP+N0gozD0F3Ka1LUSaMXrn7ZIA==",655 "integrity": "sha512-6vgFDqeusblf5Pok6B2DUiMXplH8RhIKAryj1yn+007SIAQ0khM1Uptxmpku/0MfbClx2r7pnJv9gWpAEJdMVA==",
523 "license": "MIT",656 "license": "MIT",
524 "dependencies": {657 "dependencies": {
525 "@jimp/utils": "^0.22.12",658 "@jimp/core": "1.6.0",
526 "tinycolor2": "^1.6.0"659 "@jimp/types": "1.6.0",
660 "jpeg-js": "^0.4.4"
527 },661 },
528 "peerDependencies": {662 "engines": {
529 "@jimp/custom": ">=0.3.5"663 "node": ">=18"
530 }664 }
531 },665 },
532 "node_modules/@jimp/plugin-contain": {666 "node_modules/@jimp/js-png": {
533 "version": "0.22.12",667 "version": "1.6.0",
534 "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.22.12.tgz",668 "resolved": "https://registry.npmjs.org/@jimp/js-png/-/js-png-1.6.0.tgz",
535 "integrity": "sha512-Eo3DmfixJw3N79lWk8q/0SDYbqmKt1xSTJ69yy8XLYQj9svoBbyRpSnHR+n9hOw5pKXytHwUW6nU4u1wegHNoQ==",669 "integrity": "sha512-AbQHScy3hDDgMRNfG0tPjL88AV6qKAILGReIa3ATpW5QFjBKpisvUaOqhzJ7Reic1oawx3Riyv152gaPfqsBVg==",
536 "license": "MIT",670 "license": "MIT",
537 "dependencies": {671 "dependencies": {
538 "@jimp/utils": "^0.22.12"672 "@jimp/core": "1.6.0",
673 "@jimp/types": "1.6.0",
674 "pngjs": "^7.0.0"
539 },675 },
540 "peerDependencies": {676 "engines": {
541 "@jimp/custom": ">=0.3.5",677 "node": ">=18"
542 "@jimp/plugin-blit": ">=0.3.5",
543 "@jimp/plugin-resize": ">=0.3.5",
544 "@jimp/plugin-scale": ">=0.3.5"
545 }678 }
546 },679 },
547 "node_modules/@jimp/plugin-cover": {680 "node_modules/@jimp/js-tiff": {
548 "version": "0.22.12",681 "version": "1.6.0",
549 "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.22.12.tgz",682 "resolved": "https://registry.npmjs.org/@jimp/js-tiff/-/js-tiff-1.6.0.tgz",
550 "integrity": "sha512-z0w/1xH/v/knZkpTNx+E8a7fnasQ2wHG5ze6y5oL2dhH1UufNua8gLQXlv8/W56+4nJ1brhSd233HBJCo01BXA==",683 "integrity": "sha512-zhReR8/7KO+adijj3h0ZQUOiun3mXUv79zYEAKvE0O+rP7EhgtKvWJOZfRzdZSNv0Pu1rKtgM72qgtwe2tFvyw==",
551 "license": "MIT",684 "license": "MIT",
552 "dependencies": {685 "dependencies": {
553 "@jimp/utils": "^0.22.12"686 "@jimp/core": "1.6.0",
687 "@jimp/types": "1.6.0",
688 "utif2": "^4.1.0"
554 },689 },
555 "peerDependencies": {690 "engines": {
556 "@jimp/custom": ">=0.3.5",691 "node": ">=18"
557 "@jimp/plugin-crop": ">=0.3.5",
558 "@jimp/plugin-resize": ">=0.3.5",
559 "@jimp/plugin-scale": ">=0.3.5"
560 }692 }
561 },693 },
562 "node_modules/@jimp/plugin-crop": {694 "node_modules/@jimp/plugin-blit": {
563 "version": "0.22.12",695 "version": "1.6.0",
564 "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.22.12.tgz",696 "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-1.6.0.tgz",
565 "integrity": "sha512-FNuUN0OVzRCozx8XSgP9MyLGMxNHHJMFt+LJuFjn1mu3k0VQxrzqbN06yIl46TVejhyAhcq5gLzqmSCHvlcBVw==",697 "integrity": "sha512-M+uRWl1csi7qilnSK8uxK4RJMSuVeBiO1AY0+7APnfUbQNZm6hCe0CCFv1Iyw1D/Dhb8ph8fQgm5mwM0eSxgVA==",
566 "license": "MIT",698 "license": "MIT",
567 "dependencies": {699 "dependencies": {
568 "@jimp/utils": "^0.22.12"700 "@jimp/types": "1.6.0",
701 "@jimp/utils": "1.6.0",
702 "zod": "^3.23.8"
569 },703 },
570 "peerDependencies": {704 "engines": {
571 "@jimp/custom": ">=0.3.5"705 "node": ">=18"
572 }706 }
573 },707 },
574 "node_modules/@jimp/plugin-displace": {708 "node_modules/@jimp/plugin-blur": {
575 "version": "0.22.12",709 "version": "1.6.0",
576 "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.22.12.tgz",710 "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-1.6.0.tgz",
577 "integrity": "sha512-qpRM8JRicxfK6aPPqKZA6+GzBwUIitiHaZw0QrJ64Ygd3+AsTc7BXr+37k2x7QcyCvmKXY4haUrSIsBug4S3CA==",711 "integrity": "sha512-zrM7iic1OTwUCb0g/rN5y+UnmdEsT3IfuCXCJJNs8SZzP0MkZ1eTvuwK9ZidCuMo4+J3xkzCidRwYXB5CyGZTw==",
578 "license": "MIT",712 "license": "MIT",
713 "peer": true,
579 "dependencies": {714 "dependencies": {
580 "@jimp/utils": "^0.22.12"715 "@jimp/core": "1.6.0",
716 "@jimp/utils": "1.6.0"
581 },717 },
582 "peerDependencies": {718 "engines": {
583 "@jimp/custom": ">=0.3.5"719 "node": ">=18"
584 }720 }
585 },721 },
586 "node_modules/@jimp/plugin-dither": {722 "node_modules/@jimp/plugin-circle": {
587 "version": "0.22.12",723 "version": "1.6.0",
588 "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.22.12.tgz",724 "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-1.6.0.tgz",
589 "integrity": "sha512-jYgGdSdSKl1UUEanX8A85v4+QUm+PE8vHFwlamaKk89s+PXQe7eVE3eNeSZX4inCq63EHL7cX580dMqkoC3ZLw==",725 "integrity": "sha512-xt1Gp+LtdMKAXfDp3HNaG30SPZW6AQ7dtAtTnoRKorRi+5yCJjKqXRgkewS5bvj8DEh87Ko1ydJfzqS3P2tdWw==",
590 "license": "MIT",726 "license": "MIT",
591 "dependencies": {727 "dependencies": {
592 "@jimp/utils": "^0.22.12"728 "@jimp/types": "1.6.0",
729 "zod": "^3.23.8"
593 },730 },
594 "peerDependencies": {731 "engines": {
595 "@jimp/custom": ">=0.3.5"732 "node": ">=18"
596 }733 }
597 },734 },
598 "node_modules/@jimp/plugin-fisheye": {735 "node_modules/@jimp/plugin-color": {
599 "version": "0.22.12",736 "version": "1.6.0",
600 "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.22.12.tgz",737 "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-1.6.0.tgz",
601 "integrity": "sha512-LGuUTsFg+fOp6KBKrmLkX4LfyCy8IIsROwoUvsUPKzutSqMJnsm3JGDW2eOmWIS/jJpPaeaishjlxvczjgII+Q==",738 "integrity": "sha512-J5q8IVCpkBsxIXM+45XOXTrsyfblyMZg3a9eAo0P7VPH4+CrvyNQwaYatbAIamSIN1YzxmO3DkIZXzRjFSz1SA==",
602 "license": "MIT",739 "license": "MIT",
603 "dependencies": {740 "dependencies": {
604 "@jimp/utils": "^0.22.12"741 "@jimp/core": "1.6.0",
742 "@jimp/types": "1.6.0",
743 "@jimp/utils": "1.6.0",
744 "tinycolor2": "^1.6.0",
745 "zod": "^3.23.8"
605 },746 },
606 "peerDependencies": {747 "engines": {
607 "@jimp/custom": ">=0.3.5"748 "node": ">=18"
608 }749 }
609 },750 },
610 "node_modules/@jimp/plugin-flip": {751 "node_modules/@jimp/plugin-contain": {
611 "version": "0.22.12",752 "version": "1.6.0",
612 "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.22.12.tgz",753 "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-1.6.0.tgz",
613 "integrity": "sha512-m251Rop7GN8W0Yo/rF9LWk6kNclngyjIJs/VXHToGQ6EGveOSTSQaX2Isi9f9lCDLxt+inBIb7nlaLLxnvHX8Q==",754 "integrity": "sha512-oN/n+Vdq/Qg9bB4yOBOxtY9IPAtEfES8J1n9Ddx+XhGBYT1/QTU/JYkGaAkIGoPnyYvmLEDqMz2SGihqlpqfzQ==",
614 "license": "MIT",755 "license": "MIT",
615 "dependencies": {756 "dependencies": {
616 "@jimp/utils": "^0.22.12"757 "@jimp/core": "1.6.0",
758 "@jimp/plugin-blit": "1.6.0",
759 "@jimp/plugin-resize": "1.6.0",
760 "@jimp/types": "1.6.0",
761 "@jimp/utils": "1.6.0",
762 "zod": "^3.23.8"
617 },763 },
618 "peerDependencies": {764 "engines": {
619 "@jimp/custom": ">=0.3.5",765 "node": ">=18"
620 "@jimp/plugin-rotate": ">=0.3.5"
621 }766 }
622 },767 },
623 "node_modules/@jimp/plugin-gaussian": {768 "node_modules/@jimp/plugin-cover": {
624 "version": "0.22.12",769 "version": "1.6.0",
625 "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.22.12.tgz",770 "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-1.6.0.tgz",
626 "integrity": "sha512-sBfbzoOmJ6FczfG2PquiK84NtVGeScw97JsCC3rpQv1PHVWyW+uqWFF53+n3c8Y0P2HWlUjflEla2h/vWShvhg==",771 "integrity": "sha512-Iow0h6yqSC269YUJ8HC3Q/MpCi2V55sMlbkkTTx4zPvd8mWZlC0ykrNDeAy9IJegrQ7v5E99rJwmQu25lygKLA==",
627 "license": "MIT",772 "license": "MIT",
628 "dependencies": {773 "dependencies": {
629 "@jimp/utils": "^0.22.12"774 "@jimp/core": "1.6.0",
775 "@jimp/plugin-crop": "1.6.0",
776 "@jimp/plugin-resize": "1.6.0",
777 "@jimp/types": "1.6.0",
778 "zod": "^3.23.8"
630 },779 },
631 "peerDependencies": {780 "engines": {
632 "@jimp/custom": ">=0.3.5"781 "node": ">=18"
633 }782 }
634 },783 },
635 "node_modules/@jimp/plugin-invert": {784 "node_modules/@jimp/plugin-crop": {
636 "version": "0.22.12",785 "version": "1.6.0",
637 "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.22.12.tgz",786 "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-1.6.0.tgz",
638 "integrity": "sha512-N+6rwxdB+7OCR6PYijaA/iizXXodpxOGvT/smd/lxeXsZ/empHmFFFJ/FaXcYh19Tm04dGDaXcNF/dN5nm6+xQ==",787 "integrity": "sha512-KqZkEhvs+21USdySCUDI+GFa393eDIzbi1smBqkUPTE+pRwSWMAf01D5OC3ZWB+xZsNla93BDS9iCkLHA8wang==",
639 "license": "MIT",788 "license": "MIT",
640 "dependencies": {789 "dependencies": {
641 "@jimp/utils": "^0.22.12"790 "@jimp/core": "1.6.0",
791 "@jimp/types": "1.6.0",
792 "@jimp/utils": "1.6.0",
793 "zod": "^3.23.8"
642 },794 },
643 "peerDependencies": {795 "engines": {
644 "@jimp/custom": ">=0.3.5"796 "node": ">=18"
645 }797 }
646 },798 },
647 "node_modules/@jimp/plugin-mask": {799 "node_modules/@jimp/plugin-displace": {
648 "version": "0.22.12",800 "version": "1.6.0",
649 "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.22.12.tgz",801 "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-1.6.0.tgz",
650 "integrity": "sha512-4AWZg+DomtpUA099jRV8IEZUfn1wLv6+nem4NRJC7L/82vxzLCgXKTxvNvBcNmJjT9yS1LAAmiJGdWKXG63/NA==",802 "integrity": "sha512-4Y10X9qwr5F+Bo5ME356XSACEF55485j5nGdiyJ9hYzjQP9nGgxNJaZ4SAOqpd+k5sFaIeD7SQ0Occ26uIng5Q==",
651 "license": "MIT",803 "license": "MIT",
652 "dependencies": {804 "dependencies": {
653 "@jimp/utils": "^0.22.12"805 "@jimp/types": "1.6.0",
806 "@jimp/utils": "1.6.0",
807 "zod": "^3.23.8"
654 },808 },
655 "peerDependencies": {809 "engines": {
656 "@jimp/custom": ">=0.3.5"810 "node": ">=18"
657 }811 }
658 },812 },
659 "node_modules/@jimp/plugin-normalize": {813 "node_modules/@jimp/plugin-fisheye": {
814 "version": "1.6.0",
815 "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-1.6.0.tgz",
816 "integrity": "sha512-E5QHKWSCBFtpgZarlmN3Q6+rTQxjirFqo44ohoTjzYVrDI6B6beXNnPIThJgPr0Y9GwfzgyarKvQuQuqCnnfbA==",
817 "license": "MIT",
818 "dependencies": {
819 "@jimp/types": "1.6.0",
820 "@jimp/utils": "1.6.0",
821 "zod": "^3.23.8"
822 },
823 "engines": {
824 "node": ">=18"
825 }
826 },
827 "node_modules/@jimp/plugin-flip": {
828 "version": "1.6.0",
829 "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-1.6.0.tgz",
830 "integrity": "sha512-/+rJVDuBIVOgwoyVkBjUFHtP+wmW0r+r5OQ2GpatQofToPVbJw1DdYWXlwviSx7hvixTWLKVgRWQ5Dw862emDg==",
831 "license": "MIT",
832 "dependencies": {
833 "@jimp/types": "1.6.0",
834 "zod": "^3.23.8"
835 },
836 "engines": {
837 "node": ">=18"
838 }
839 },
840 "node_modules/@jimp/plugin-gaussian": {
660 "version": "0.22.12",841 "version": "0.22.12",
661 "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.22.12.tgz",842 "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.22.12.tgz",
662 "integrity": "sha512-0So0rexQivnWgnhacX4cfkM2223YdExnJTTy6d06WbkfZk5alHUx8MM3yEzwoCN0ErO7oyqEWRnEkGC+As1FtA==",843 "integrity": "sha512-sBfbzoOmJ6FczfG2PquiK84NtVGeScw97JsCC3rpQv1PHVWyW+uqWFF53+n3c8Y0P2HWlUjflEla2h/vWShvhg==",
663 "license": "MIT",844 "license": "MIT",
664 "dependencies": {845 "dependencies": {
665 "@jimp/utils": "^0.22.12"846 "@jimp/utils": "^0.22.12"
@@ -668,24 +849,40 @@
668 "@jimp/custom": ">=0.3.5"849 "@jimp/custom": ">=0.3.5"
669 }850 }
670 },851 },
671 "node_modules/@jimp/plugin-print": {852 "node_modules/@jimp/plugin-gaussian/node_modules/@jimp/utils": {
672 "version": "0.22.12",853 "version": "0.22.12",
673 "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.22.12.tgz",854 "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.12.tgz",
674 "integrity": "sha512-c7TnhHlxm87DJeSnwr/XOLjJU/whoiKYY7r21SbuJ5nuH+7a78EW1teOaj5gEr2wYEd7QtkFqGlmyGXY/YclyQ==",855 "integrity": "sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==",
675 "license": "MIT",856 "license": "MIT",
676 "dependencies": {857 "dependencies": {
677 "@jimp/utils": "^0.22.12",858 "regenerator-runtime": "^0.13.3"
678 "load-bmfont": "^1.4.1"859 }
860 },
861 "node_modules/@jimp/plugin-hash": {
862 "version": "1.6.0",
863 "resolved": "https://registry.npmjs.org/@jimp/plugin-hash/-/plugin-hash-1.6.0.tgz",
864 "integrity": "sha512-wWzl0kTpDJgYVbZdajTf+4NBSKvmI3bRI8q6EH9CVeIHps9VWVsUvEyb7rpbcwVLWYuzDtP2R0lTT6WeBNQH9Q==",
865 "license": "MIT",
866 "dependencies": {
867 "@jimp/core": "1.6.0",
868 "@jimp/js-bmp": "1.6.0",
869 "@jimp/js-jpeg": "1.6.0",
870 "@jimp/js-png": "1.6.0",
871 "@jimp/js-tiff": "1.6.0",
872 "@jimp/plugin-color": "1.6.0",
873 "@jimp/plugin-resize": "1.6.0",
874 "@jimp/types": "1.6.0",
875 "@jimp/utils": "1.6.0",
876 "any-base": "^1.1.0"
679 },877 },
680 "peerDependencies": {878 "engines": {
681 "@jimp/custom": ">=0.3.5",879 "node": ">=18"
682 "@jimp/plugin-blit": ">=0.3.5"
683 }880 }
684 },881 },
685 "node_modules/@jimp/plugin-resize": {882 "node_modules/@jimp/plugin-invert": {
686 "version": "0.22.12",883 "version": "0.22.12",
687 "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.22.12.tgz",884 "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.22.12.tgz",
688 "integrity": "sha512-3NyTPlPbTnGKDIbaBgQ3HbE6wXbAlFfxHVERmrbqAi8R3r6fQPxpCauA8UVDnieg5eo04D0T8nnnNIX//i/sXg==",885 "integrity": "sha512-N+6rwxdB+7OCR6PYijaA/iizXXodpxOGvT/smd/lxeXsZ/empHmFFFJ/FaXcYh19Tm04dGDaXcNF/dN5nm6+xQ==",
689 "license": "MIT",886 "license": "MIT",
690 "dependencies": {887 "dependencies": {
691 "@jimp/utils": "^0.22.12"888 "@jimp/utils": "^0.22.12"
@@ -694,19 +891,91 @@
694 "@jimp/custom": ">=0.3.5"891 "@jimp/custom": ">=0.3.5"
695 }892 }
696 },893 },
697 "node_modules/@jimp/plugin-rotate": {894 "node_modules/@jimp/plugin-invert/node_modules/@jimp/utils": {
698 "version": "0.22.12",895 "version": "0.22.12",
699 "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.22.12.tgz",896 "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.12.tgz",
700 "integrity": "sha512-9YNEt7BPAFfTls2FGfKBVgwwLUuKqy+E8bDGGEsOqHtbuhbshVGxN2WMZaD4gh5IDWvR+emmmPPWGgaYNYt1gA==",897 "integrity": "sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==",
898 "license": "MIT",
899 "dependencies": {
900 "regenerator-runtime": "^0.13.3"
901 }
902 },
903 "node_modules/@jimp/plugin-mask": {
904 "version": "1.6.0",
905 "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-1.6.0.tgz",
906 "integrity": "sha512-Cwy7ExSJMZszvkad8NV8o/Z92X2kFUFM8mcDAhNVxU0Q6tA0op2UKRJY51eoK8r6eds/qak3FQkXakvNabdLnA==",
907 "license": "MIT",
908 "dependencies": {
909 "@jimp/types": "1.6.0",
910 "zod": "^3.23.8"
911 },
912 "engines": {
913 "node": ">=18"
914 }
915 },
916 "node_modules/@jimp/plugin-normalize": {
917 "version": "0.22.12",
918 "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.22.12.tgz",
919 "integrity": "sha512-0So0rexQivnWgnhacX4cfkM2223YdExnJTTy6d06WbkfZk5alHUx8MM3yEzwoCN0ErO7oyqEWRnEkGC+As1FtA==",
701 "license": "MIT",920 "license": "MIT",
702 "dependencies": {921 "dependencies": {
703 "@jimp/utils": "^0.22.12"922 "@jimp/utils": "^0.22.12"
704 },923 },
705 "peerDependencies": {924 "peerDependencies": {
706 "@jimp/custom": ">=0.3.5",925 "@jimp/custom": ">=0.3.5"
707 "@jimp/plugin-blit": ">=0.3.5",926 }
708 "@jimp/plugin-crop": ">=0.3.5",927 },
709 "@jimp/plugin-resize": ">=0.3.5"928 "node_modules/@jimp/plugin-normalize/node_modules/@jimp/utils": {
929 "version": "0.22.12",
930 "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.12.tgz",
931 "integrity": "sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==",
932 "license": "MIT",
933 "dependencies": {
934 "regenerator-runtime": "^0.13.3"
935 }
936 },
937 "node_modules/@jimp/plugin-quantize": {
938 "version": "1.6.0",
939 "resolved": "https://registry.npmjs.org/@jimp/plugin-quantize/-/plugin-quantize-1.6.0.tgz",
940 "integrity": "sha512-EmzZ/s9StYQwbpG6rUGBCisc3f64JIhSH+ncTJd+iFGtGo0YvSeMdAd+zqgiHpfZoOL54dNavZNjF4otK+mvlg==",
941 "license": "MIT",
942 "dependencies": {
943 "image-q": "^4.0.0",
944 "zod": "^3.23.8"
945 },
946 "engines": {
947 "node": ">=18"
948 }
949 },
950 "node_modules/@jimp/plugin-resize": {
951 "version": "1.6.0",
952 "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-1.6.0.tgz",
953 "integrity": "sha512-uSUD1mqXN9i1SGSz5ov3keRZ7S9L32/mAQG08wUwZiEi5FpbV0K8A8l1zkazAIZi9IJzLlTauRNU41Mi8IF9fA==",
954 "license": "MIT",
955 "dependencies": {
956 "@jimp/core": "1.6.0",
957 "@jimp/types": "1.6.0",
958 "zod": "^3.23.8"
959 },
960 "engines": {
961 "node": ">=18"
962 }
963 },
964 "node_modules/@jimp/plugin-rotate": {
965 "version": "1.6.0",
966 "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-1.6.0.tgz",
967 "integrity": "sha512-JagdjBLnUZGSG4xjCLkIpQOZZ3Mjbg8aGCCi4G69qR+OjNpOeGI7N2EQlfK/WE8BEHOW5vdjSyglNqcYbQBWRw==",
968 "license": "MIT",
969 "dependencies": {
970 "@jimp/core": "1.6.0",
971 "@jimp/plugin-crop": "1.6.0",
972 "@jimp/plugin-resize": "1.6.0",
973 "@jimp/types": "1.6.0",
974 "@jimp/utils": "1.6.0",
975 "zod": "^3.23.8"
976 },
977 "engines": {
978 "node": ">=18"
710 }979 }
711 },980 },
712 "node_modules/@jimp/plugin-scale": {981 "node_modules/@jimp/plugin-scale": {
@@ -722,6 +991,15 @@
722 "@jimp/plugin-resize": ">=0.3.5"991 "@jimp/plugin-resize": ">=0.3.5"
723 }992 }
724 },993 },
994 "node_modules/@jimp/plugin-scale/node_modules/@jimp/utils": {
995 "version": "0.22.12",
996 "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.12.tgz",
997 "integrity": "sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==",
998 "license": "MIT",
999 "dependencies": {
1000 "regenerator-runtime": "^0.13.3"
1001 }
1002 },
725 "node_modules/@jimp/plugin-shadow": {1003 "node_modules/@jimp/plugin-shadow": {
726 "version": "0.22.12",1004 "version": "0.22.12",
727 "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.22.12.tgz",1005 "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.22.12.tgz",
@@ -736,18 +1014,30 @@
736 "@jimp/plugin-resize": ">=0.3.5"1014 "@jimp/plugin-resize": ">=0.3.5"
737 }1015 }
738 },1016 },
739 "node_modules/@jimp/plugin-threshold": {1017 "node_modules/@jimp/plugin-shadow/node_modules/@jimp/utils": {
740 "version": "0.22.12",1018 "version": "0.22.12",
741 "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.22.12.tgz",1019 "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.12.tgz",
742 "integrity": "sha512-4x5GrQr1a/9L0paBC/MZZJjjgjxLYrqSmWd+e+QfAEPvmRxdRoQ5uKEuNgXnm9/weHQBTnQBQsOY2iFja+XGAw==",1020 "integrity": "sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==",
743 "license": "MIT",1021 "license": "MIT",
744 "dependencies": {1022 "dependencies": {
745 "@jimp/utils": "^0.22.12"1023 "regenerator-runtime": "^0.13.3"
1024 }
1025 },
1026 "node_modules/@jimp/plugin-threshold": {
1027 "version": "1.6.0",
1028 "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-1.6.0.tgz",
1029 "integrity": "sha512-M59m5dzLoHOVWdM41O8z9SyySzcDn43xHseOH0HavjsfQsT56GGCC4QzU1banJidbUrePhzoEdS42uFE8Fei8w==",
1030 "license": "MIT",
1031 "dependencies": {
1032 "@jimp/core": "1.6.0",
1033 "@jimp/plugin-color": "1.6.0",
1034 "@jimp/plugin-hash": "1.6.0",
1035 "@jimp/types": "1.6.0",
1036 "@jimp/utils": "1.6.0",
1037 "zod": "^3.23.8"
746 },1038 },
747 "peerDependencies": {1039 "engines": {
748 "@jimp/custom": ">=0.3.5",1040 "node": ">=18"
749 "@jimp/plugin-color": ">=0.8.0",
750 "@jimp/plugin-resize": ">=0.8.0"
751 }1041 }
752 },1042 },
753 "node_modules/@jimp/plugins": {1043 "node_modules/@jimp/plugins": {
@@ -783,6 +1073,222 @@
783 "@jimp/custom": ">=0.3.5"1073 "@jimp/custom": ">=0.3.5"
784 }1074 }
785 },1075 },
1076 "node_modules/@jimp/plugins/node_modules/@jimp/plugin-blit": {
1077 "version": "0.22.12",
1078 "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.22.12.tgz",
1079 "integrity": "sha512-xslz2ZoFZOPLY8EZ4dC29m168BtDx95D6K80TzgUi8gqT7LY6CsajWO0FAxDwHz6h0eomHMfyGX0stspBrTKnQ==",
1080 "license": "MIT",
1081 "dependencies": {
1082 "@jimp/utils": "^0.22.12"
1083 },
1084 "peerDependencies": {
1085 "@jimp/custom": ">=0.3.5"
1086 }
1087 },
1088 "node_modules/@jimp/plugins/node_modules/@jimp/plugin-blur": {
1089 "version": "0.22.12",
1090 "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.22.12.tgz",
1091 "integrity": "sha512-S0vJADTuh1Q9F+cXAwFPlrKWzDj2F9t/9JAbUvaaDuivpyWuImEKXVz5PUZw2NbpuSHjwssbTpOZ8F13iJX4uw==",
1092 "license": "MIT",
1093 "dependencies": {
1094 "@jimp/utils": "^0.22.12"
1095 },
1096 "peerDependencies": {
1097 "@jimp/custom": ">=0.3.5"
1098 }
1099 },
1100 "node_modules/@jimp/plugins/node_modules/@jimp/plugin-circle": {
1101 "version": "0.22.12",
1102 "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.22.12.tgz",
1103 "integrity": "sha512-SWVXx1yiuj5jZtMijqUfvVOJBwOifFn0918ou4ftoHgegc5aHWW5dZbYPjvC9fLpvz7oSlptNl2Sxr1zwofjTg==",
1104 "license": "MIT",
1105 "dependencies": {
1106 "@jimp/utils": "^0.22.12"
1107 },
1108 "peerDependencies": {
1109 "@jimp/custom": ">=0.3.5"
1110 }
1111 },
1112 "node_modules/@jimp/plugins/node_modules/@jimp/plugin-color": {
1113 "version": "0.22.12",
1114 "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.22.12.tgz",
1115 "integrity": "sha512-xImhTE5BpS8xa+mAN6j4sMRWaUgUDLoaGHhJhpC+r7SKKErYDR0WQV4yCE4gP+N0gozD0F3Ka1LUSaMXrn7ZIA==",
1116 "license": "MIT",
1117 "dependencies": {
1118 "@jimp/utils": "^0.22.12",
1119 "tinycolor2": "^1.6.0"
1120 },
1121 "peerDependencies": {
1122 "@jimp/custom": ">=0.3.5"
1123 }
1124 },
1125 "node_modules/@jimp/plugins/node_modules/@jimp/plugin-contain": {
1126 "version": "0.22.12",
1127 "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.22.12.tgz",
1128 "integrity": "sha512-Eo3DmfixJw3N79lWk8q/0SDYbqmKt1xSTJ69yy8XLYQj9svoBbyRpSnHR+n9hOw5pKXytHwUW6nU4u1wegHNoQ==",
1129 "license": "MIT",
1130 "dependencies": {
1131 "@jimp/utils": "^0.22.12"
1132 },
1133 "peerDependencies": {
1134 "@jimp/custom": ">=0.3.5",
1135 "@jimp/plugin-blit": ">=0.3.5",
1136 "@jimp/plugin-resize": ">=0.3.5",
1137 "@jimp/plugin-scale": ">=0.3.5"
1138 }
1139 },
1140 "node_modules/@jimp/plugins/node_modules/@jimp/plugin-cover": {
1141 "version": "0.22.12",
1142 "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.22.12.tgz",
1143 "integrity": "sha512-z0w/1xH/v/knZkpTNx+E8a7fnasQ2wHG5ze6y5oL2dhH1UufNua8gLQXlv8/W56+4nJ1brhSd233HBJCo01BXA==",
1144 "license": "MIT",
1145 "dependencies": {
1146 "@jimp/utils": "^0.22.12"
1147 },
1148 "peerDependencies": {
1149 "@jimp/custom": ">=0.3.5",
1150 "@jimp/plugin-crop": ">=0.3.5",
1151 "@jimp/plugin-resize": ">=0.3.5",
1152 "@jimp/plugin-scale": ">=0.3.5"
1153 }
1154 },
1155 "node_modules/@jimp/plugins/node_modules/@jimp/plugin-crop": {
1156 "version": "0.22.12",
1157 "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.22.12.tgz",
1158 "integrity": "sha512-FNuUN0OVzRCozx8XSgP9MyLGMxNHHJMFt+LJuFjn1mu3k0VQxrzqbN06yIl46TVejhyAhcq5gLzqmSCHvlcBVw==",
1159 "license": "MIT",
1160 "dependencies": {
1161 "@jimp/utils": "^0.22.12"
1162 },
1163 "peerDependencies": {
1164 "@jimp/custom": ">=0.3.5"
1165 }
1166 },
1167 "node_modules/@jimp/plugins/node_modules/@jimp/plugin-displace": {
1168 "version": "0.22.12",
1169 "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.22.12.tgz",
1170 "integrity": "sha512-qpRM8JRicxfK6aPPqKZA6+GzBwUIitiHaZw0QrJ64Ygd3+AsTc7BXr+37k2x7QcyCvmKXY4haUrSIsBug4S3CA==",
1171 "license": "MIT",
1172 "dependencies": {
1173 "@jimp/utils": "^0.22.12"
1174 },
1175 "peerDependencies": {
1176 "@jimp/custom": ">=0.3.5"
1177 }
1178 },
1179 "node_modules/@jimp/plugins/node_modules/@jimp/plugin-dither": {
1180 "version": "0.22.12",
1181 "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.22.12.tgz",
1182 "integrity": "sha512-jYgGdSdSKl1UUEanX8A85v4+QUm+PE8vHFwlamaKk89s+PXQe7eVE3eNeSZX4inCq63EHL7cX580dMqkoC3ZLw==",
1183 "license": "MIT",
1184 "dependencies": {
1185 "@jimp/utils": "^0.22.12"
1186 },
1187 "peerDependencies": {
1188 "@jimp/custom": ">=0.3.5"
1189 }
1190 },
1191 "node_modules/@jimp/plugins/node_modules/@jimp/plugin-fisheye": {
1192 "version": "0.22.12",
1193 "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.22.12.tgz",
1194 "integrity": "sha512-LGuUTsFg+fOp6KBKrmLkX4LfyCy8IIsROwoUvsUPKzutSqMJnsm3JGDW2eOmWIS/jJpPaeaishjlxvczjgII+Q==",
1195 "license": "MIT",
1196 "dependencies": {
1197 "@jimp/utils": "^0.22.12"
1198 },
1199 "peerDependencies": {
1200 "@jimp/custom": ">=0.3.5"
1201 }
1202 },
1203 "node_modules/@jimp/plugins/node_modules/@jimp/plugin-flip": {
1204 "version": "0.22.12",
1205 "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.22.12.tgz",
1206 "integrity": "sha512-m251Rop7GN8W0Yo/rF9LWk6kNclngyjIJs/VXHToGQ6EGveOSTSQaX2Isi9f9lCDLxt+inBIb7nlaLLxnvHX8Q==",
1207 "license": "MIT",
1208 "dependencies": {
1209 "@jimp/utils": "^0.22.12"
1210 },
1211 "peerDependencies": {
1212 "@jimp/custom": ">=0.3.5",
1213 "@jimp/plugin-rotate": ">=0.3.5"
1214 }
1215 },
1216 "node_modules/@jimp/plugins/node_modules/@jimp/plugin-mask": {
1217 "version": "0.22.12",
1218 "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.22.12.tgz",
1219 "integrity": "sha512-4AWZg+DomtpUA099jRV8IEZUfn1wLv6+nem4NRJC7L/82vxzLCgXKTxvNvBcNmJjT9yS1LAAmiJGdWKXG63/NA==",
1220 "license": "MIT",
1221 "dependencies": {
1222 "@jimp/utils": "^0.22.12"
1223 },
1224 "peerDependencies": {
1225 "@jimp/custom": ">=0.3.5"
1226 }
1227 },
1228 "node_modules/@jimp/plugins/node_modules/@jimp/plugin-print": {
1229 "version": "0.22.12",
1230 "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.22.12.tgz",
1231 "integrity": "sha512-c7TnhHlxm87DJeSnwr/XOLjJU/whoiKYY7r21SbuJ5nuH+7a78EW1teOaj5gEr2wYEd7QtkFqGlmyGXY/YclyQ==",
1232 "license": "MIT",
1233 "dependencies": {
1234 "@jimp/utils": "^0.22.12",
1235 "load-bmfont": "^1.4.1"
1236 },
1237 "peerDependencies": {
1238 "@jimp/custom": ">=0.3.5",
1239 "@jimp/plugin-blit": ">=0.3.5"
1240 }
1241 },
1242 "node_modules/@jimp/plugins/node_modules/@jimp/plugin-resize": {
1243 "version": "0.22.12",
1244 "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.22.12.tgz",
1245 "integrity": "sha512-3NyTPlPbTnGKDIbaBgQ3HbE6wXbAlFfxHVERmrbqAi8R3r6fQPxpCauA8UVDnieg5eo04D0T8nnnNIX//i/sXg==",
1246 "license": "MIT",
1247 "dependencies": {
1248 "@jimp/utils": "^0.22.12"
1249 },
1250 "peerDependencies": {
1251 "@jimp/custom": ">=0.3.5"
1252 }
1253 },
1254 "node_modules/@jimp/plugins/node_modules/@jimp/plugin-rotate": {
1255 "version": "0.22.12",
1256 "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.22.12.tgz",
1257 "integrity": "sha512-9YNEt7BPAFfTls2FGfKBVgwwLUuKqy+E8bDGGEsOqHtbuhbshVGxN2WMZaD4gh5IDWvR+emmmPPWGgaYNYt1gA==",
1258 "license": "MIT",
1259 "dependencies": {
1260 "@jimp/utils": "^0.22.12"
1261 },
1262 "peerDependencies": {
1263 "@jimp/custom": ">=0.3.5",
1264 "@jimp/plugin-blit": ">=0.3.5",
1265 "@jimp/plugin-crop": ">=0.3.5",
1266 "@jimp/plugin-resize": ">=0.3.5"
1267 }
1268 },
1269 "node_modules/@jimp/plugins/node_modules/@jimp/plugin-threshold": {
1270 "version": "0.22.12",
1271 "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.22.12.tgz",
1272 "integrity": "sha512-4x5GrQr1a/9L0paBC/MZZJjjgjxLYrqSmWd+e+QfAEPvmRxdRoQ5uKEuNgXnm9/weHQBTnQBQsOY2iFja+XGAw==",
1273 "license": "MIT",
1274 "dependencies": {
1275 "@jimp/utils": "^0.22.12"
1276 },
1277 "peerDependencies": {
1278 "@jimp/custom": ">=0.3.5",
1279 "@jimp/plugin-color": ">=0.8.0",
1280 "@jimp/plugin-resize": ">=0.8.0"
1281 }
1282 },
1283 "node_modules/@jimp/plugins/node_modules/@jimp/utils": {
1284 "version": "0.22.12",
1285 "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.12.tgz",
1286 "integrity": "sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==",
1287 "license": "MIT",
1288 "dependencies": {
1289 "regenerator-runtime": "^0.13.3"
1290 }
1291 },
786 "node_modules/@jimp/png": {1292 "node_modules/@jimp/png": {
787 "version": "0.22.12",1293 "version": "0.22.12",
788 "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.22.12.tgz",1294 "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.22.12.tgz",
@@ -796,6 +1302,24 @@
796 "@jimp/custom": ">=0.3.5"1302 "@jimp/custom": ">=0.3.5"
797 }1303 }
798 },1304 },
1305 "node_modules/@jimp/png/node_modules/@jimp/utils": {
1306 "version": "0.22.12",
1307 "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.12.tgz",
1308 "integrity": "sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==",
1309 "license": "MIT",
1310 "dependencies": {
1311 "regenerator-runtime": "^0.13.3"
1312 }
1313 },
1314 "node_modules/@jimp/png/node_modules/pngjs": {
1315 "version": "6.0.0",
1316 "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz",
1317 "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==",
1318 "license": "MIT",
1319 "engines": {
1320 "node": ">=12.13.0"
1321 }
1322 },
799 "node_modules/@jimp/tiff": {1323 "node_modules/@jimp/tiff": {
800 "version": "0.22.12",1324 "version": "0.22.12",
801 "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.22.12.tgz",1325 "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.22.12.tgz",
@@ -809,29 +1333,81 @@
809 }1333 }
810 },1334 },
811 "node_modules/@jimp/types": {1335 "node_modules/@jimp/types": {
812 "version": "0.22.12",1336 "version": "1.6.0",
813 "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.22.12.tgz",1337 "resolved": "https://registry.npmjs.org/@jimp/types/-/types-1.6.0.tgz",
814 "integrity": "sha512-wwKYzRdElE1MBXFREvCto5s699izFHNVvALUv79GXNbsOVqlwlOxlWJ8DuyOGIXoLP4JW/m30YyuTtfUJgMRMA==",1338 "integrity": "sha512-7UfRsiKo5GZTAATxm2qQ7jqmUXP0DxTArztllTcYdyw6Xi5oT4RaoXynVtCD4UyLK5gJgkZJcwonoijrhYFKfg==",
815 "license": "MIT",1339 "license": "MIT",
816 "dependencies": {1340 "dependencies": {
817 "@jimp/bmp": "^0.22.12",1341 "zod": "^3.23.8"
818 "@jimp/gif": "^0.22.12",
819 "@jimp/jpeg": "^0.22.12",
820 "@jimp/png": "^0.22.12",
821 "@jimp/tiff": "^0.22.12",
822 "timm": "^1.6.1"
823 },1342 },
824 "peerDependencies": {1343 "engines": {
825 "@jimp/custom": ">=0.3.5"1344 "node": ">=18"
826 }1345 }
827 },1346 },
828 "node_modules/@jimp/utils": {1347 "node_modules/@jimp/utils": {
829 "version": "0.22.12",1348 "version": "1.6.0",
830 "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.12.tgz",1349 "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-1.6.0.tgz",
831 "integrity": "sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==",1350 "integrity": "sha512-gqFTGEosKbOkYF/WFj26jMHOI5OH2jeP1MmC/zbK6BF6VJBf8rIC5898dPfSzZEbSA0wbbV5slbntWVc5PKLFA==",
832 "license": "MIT",1351 "license": "MIT",
833 "dependencies": {1352 "dependencies": {
834 "regenerator-runtime": "^0.13.3"1353 "@jimp/types": "1.6.0",
1354 "tinycolor2": "^1.6.0"
1355 },
1356 "engines": {
1357 "node": ">=18"
1358 }
1359 },
1360 "node_modules/@jimp/wasm-avif": {
1361 "version": "1.6.0",
1362 "resolved": "https://registry.npmjs.org/@jimp/wasm-avif/-/wasm-avif-1.6.0.tgz",
1363 "integrity": "sha512-OjiqqtD71MTLVQgB/oUOZ8PD+nxLQtl/Lyf/P/hhL56L6iCJbcciA3xO0Y9OJept7+R34ORY4f7RwWwt535DHg==",
1364 "license": "MIT",
1365 "dependencies": {
1366 "@jsquash/avif": "^1.3.0",
1367 "zod": "^3.23.8"
1368 },
1369 "engines": {
1370 "node": ">=18"
1371 }
1372 },
1373 "node_modules/@jimp/wasm-jpeg": {
1374 "version": "1.6.0",
1375 "resolved": "https://registry.npmjs.org/@jimp/wasm-jpeg/-/wasm-jpeg-1.6.0.tgz",
1376 "integrity": "sha512-zURjiESa79XXpMHzvvLMD3RC+wzFevS8lcTgyoZq4/y7qE5WrrUTWUBhr1UMFDueQ4gmOUf6EZ8L3/jkS/6nKQ==",
1377 "license": "MIT",
1378 "dependencies": {
1379 "@jsquash/jpeg": "^1.4.0",
1380 "zod": "^3.23.8"
1381 },
1382 "engines": {
1383 "node": ">=18"
1384 }
1385 },
1386 "node_modules/@jimp/wasm-png": {
1387 "version": "1.6.0",
1388 "resolved": "https://registry.npmjs.org/@jimp/wasm-png/-/wasm-png-1.6.0.tgz",
1389 "integrity": "sha512-D1xTVXpErApFH4YiOWZDoF8S8B6I3PgoCe38WsnTxDLfple8KGZMBdNjv3UO7vczsdlg5rATwWMBbNwxK03jNQ==",
1390 "license": "MIT",
1391 "dependencies": {
1392 "@jsquash/oxipng": "^2.3.0",
1393 "@jsquash/png": "^3.0.1",
1394 "zod": "^3.23.8"
1395 },
1396 "engines": {
1397 "node": ">=18"
1398 }
1399 },
1400 "node_modules/@jimp/wasm-webp": {
1401 "version": "1.6.0",
1402 "resolved": "https://registry.npmjs.org/@jimp/wasm-webp/-/wasm-webp-1.6.0.tgz",
1403 "integrity": "sha512-P0zUpK6n2XIAn8bt0F6rhSn1+FgteBTrL+TBb6Oqw8v5qEDJoNYkd6LlfZYN8YwtRBTBdZ8GFnWsg2Sar+qOkA==",
1404 "license": "MIT",
1405 "dependencies": {
1406 "@jsquash/webp": "^1.4.0",
1407 "zod": "^3.23.8"
1408 },
1409 "engines": {
1410 "node": ">=18"
835 }1411 }
836 },1412 },
837 "node_modules/@jridgewell/gen-mapping": {1413 "node_modules/@jridgewell/gen-mapping": {
@@ -892,6 +1468,45 @@
892 "@jridgewell/sourcemap-codec": "^1.4.14"1468 "@jridgewell/sourcemap-codec": "^1.4.14"
893 }1469 }
894 },1470 },
1471 "node_modules/@jsquash/avif": {
1472 "version": "1.3.0",
1473 "resolved": "https://registry.npmjs.org/@jsquash/avif/-/avif-1.3.0.tgz",
1474 "integrity": "sha512-N6zH27O/AioCPNGxaf33PYnUEQZmAjUz0JwwAf9eMHRdYItn+CxwxlsHSSOkFmZKW+v9uVX6c7ZPQ4RTXArL7A==",
1475 "license": "Apache-2.0",
1476 "dependencies": {
1477 "wasm-feature-detect": "^1.2.11"
1478 }
1479 },
1480 "node_modules/@jsquash/jpeg": {
1481 "version": "1.5.0",
1482 "resolved": "https://registry.npmjs.org/@jsquash/jpeg/-/jpeg-1.5.0.tgz",
1483 "integrity": "sha512-Jam3X9BhbP1f+d58TfYobV/ZpYhCnawBF7YMS0Vt5Gi1v5Rk+xUdqYiZarAn0PwAzy2Zm2pPU/VzXHsLhwT9QQ==",
1484 "license": "Apache-2.0"
1485 },
1486 "node_modules/@jsquash/oxipng": {
1487 "version": "2.3.0",
1488 "resolved": "https://registry.npmjs.org/@jsquash/oxipng/-/oxipng-2.3.0.tgz",
1489 "integrity": "sha512-aQ8wiEp6ztlTMXc+RMt/CG8crU3mEHDU+h+JYkIi6ctMhlh8+Ltj5XwQFfBuyzKYrp8NxaFW80Dp824bqjr+zA==",
1490 "license": "Apache-2.0",
1491 "dependencies": {
1492 "wasm-feature-detect": "^1.2.11"
1493 }
1494 },
1495 "node_modules/@jsquash/png": {
1496 "version": "3.0.1",
1497 "resolved": "https://registry.npmjs.org/@jsquash/png/-/png-3.0.1.tgz",
1498 "integrity": "sha512-Bnvv93Y5LL92cuk2r2gpV+9JKuDo2/w7bOODw1iPxk8VARknky0sS1tSDgMosUdhNb4CdMlcCm3TMzTaqa3zZw==",
1499 "license": "Apache-2.0"
1500 },
1501 "node_modules/@jsquash/webp": {
1502 "version": "1.4.0",
1503 "resolved": "https://registry.npmjs.org/@jsquash/webp/-/webp-1.4.0.tgz",
1504 "integrity": "sha512-yKJb6Hilq+qV/4C4qTDEalBobNwJO09LeHHtilmWg5mYHFUDwMunfeAap/r3cL5KsHkGOoI0IjY2nKbTaHq9Bw==",
1505 "license": "Apache-2.0",
1506 "dependencies": {
1507 "wasm-feature-detect": "^1.2.11"
1508 }
1509 },
895 "node_modules/@kwsites/file-exists": {1510 "node_modules/@kwsites/file-exists": {
896 "version": "1.1.1",1511 "version": "1.1.1",
897 "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",1512 "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
@@ -1955,29 +2570,6 @@
1955 "balanced-match": "^1.0.0"2570 "balanced-match": "^1.0.0"
1956 }2571 }
1957 },2572 },
1958 "node_modules/archiver-utils/node_modules/buffer": {
1959 "version": "6.0.3",
1960 "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
1961 "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
1962 "funding": [
1963 {
1964 "type": "github",
1965 "url": "https://github.com/sponsors/feross"
1966 },
1967 {
1968 "type": "patreon",
1969 "url": "https://www.patreon.com/feross"
1970 },
1971 {
1972 "type": "consulting",
1973 "url": "https://feross.org/support"
1974 }
1975 ],
1976 "dependencies": {
1977 "base64-js": "^1.3.1",
1978 "ieee754": "^1.2.1"
1979 }
1980 },
1981 "node_modules/archiver-utils/node_modules/glob": {2573 "node_modules/archiver-utils/node_modules/glob": {
1982 "version": "10.3.12",2574 "version": "10.3.12",
1983 "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz",2575 "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz",
@@ -2055,29 +2647,6 @@
2055 "safe-buffer": "~5.2.0"2647 "safe-buffer": "~5.2.0"
2056 }2648 }
2057 },2649 },
2058 "node_modules/archiver/node_modules/buffer": {
2059 "version": "6.0.3",
2060 "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
2061 "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
2062 "funding": [
2063 {
2064 "type": "github",
2065 "url": "https://github.com/sponsors/feross"
2066 },
2067 {
2068 "type": "patreon",
2069 "url": "https://www.patreon.com/feross"
2070 },
2071 {
2072 "type": "consulting",
2073 "url": "https://feross.org/support"
2074 }
2075 ],
2076 "dependencies": {
2077 "base64-js": "^1.3.1",
2078 "ieee754": "^1.2.1"
2079 }
2080 },
2081 "node_modules/archiver/node_modules/buffer-crc32": {2650 "node_modules/archiver/node_modules/buffer-crc32": {
2082 "version": "1.0.0",2651 "version": "1.0.0",
2083 "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz",2652 "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz",
@@ -2174,6 +2743,15 @@
2174 "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",2743 "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
2175 "license": "MIT"2744 "license": "MIT"
2176 },2745 },
2746 "node_modules/await-to-js": {
2747 "version": "3.0.0",
2748 "resolved": "https://registry.npmjs.org/await-to-js/-/await-to-js-3.0.0.tgz",
2749 "integrity": "sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==",
2750 "license": "MIT",
2751 "engines": {
2752 "node": ">=6.0.0"
2753 }
2754 },
2177 "node_modules/axios": {2755 "node_modules/axios": {
2178 "version": "1.8.3",2756 "version": "1.8.3",
2179 "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.3.tgz",2757 "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.3.tgz",
@@ -2251,6 +2829,12 @@
2251 "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==",2829 "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==",
2252 "license": "MIT"2830 "license": "MIT"
2253 },2831 },
2832 "node_modules/bmp-ts": {
2833 "version": "1.0.9",
2834 "resolved": "https://registry.npmjs.org/bmp-ts/-/bmp-ts-1.0.9.tgz",
2835 "integrity": "sha512-cTEHk2jLrPyi+12M3dhpEbnnPOsaZuq7C45ylbbQIiWgDFZq4UVYPEY5mlqjvsj/6gJv9qX5sa+ebDzLXT28Vw==",
2836 "license": "MIT"
2837 },
2254 "node_modules/body-parser": {2838 "node_modules/body-parser": {
2255 "version": "1.20.3",2839 "version": "1.20.3",
2256 "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",2840 "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
@@ -2343,9 +2927,9 @@
2343 }2927 }
2344 },2928 },
2345 "node_modules/buffer": {2929 "node_modules/buffer": {
2346 "version": "5.7.1",2930 "version": "6.0.3",
2347 "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",2931 "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
2348 "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",2932 "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
2349 "funding": [2933 "funding": [
2350 {2934 {
2351 "type": "github",2935 "type": "github",
@@ -2363,7 +2947,7 @@
2363 "license": "MIT",2947 "license": "MIT",
2364 "dependencies": {2948 "dependencies": {
2365 "base64-js": "^1.3.1",2949 "base64-js": "^1.3.1",
2366 "ieee754": "^1.1.13"2950 "ieee754": "^1.2.1"
2367 }2951 }
2368 },2952 },
2369 "node_modules/buffer-crc32": {2953 "node_modules/buffer-crc32": {
@@ -2678,29 +3262,6 @@
2678 "node": ">= 14"3262 "node": ">= 14"
2679 }3263 }
2680 },3264 },
2681 "node_modules/compress-commons/node_modules/buffer": {
2682 "version": "6.0.3",
2683 "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
2684 "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
2685 "funding": [
2686 {
2687 "type": "github",
2688 "url": "https://github.com/sponsors/feross"
2689 },
2690 {
2691 "type": "patreon",
2692 "url": "https://www.patreon.com/feross"
2693 },
2694 {
2695 "type": "consulting",
2696 "url": "https://feross.org/support"
2697 }
2698 ],
2699 "dependencies": {
2700 "base64-js": "^1.3.1",
2701 "ieee754": "^1.2.1"
2702 }
2703 },
2704 "node_modules/compress-commons/node_modules/crc-32": {3265 "node_modules/compress-commons/node_modules/crc-32": {
2705 "version": "1.2.2",3266 "version": "1.2.2",
2706 "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",3267 "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
@@ -3002,29 +3563,6 @@
3002 "node": ">= 14"3563 "node": ">= 14"
3003 }3564 }
3004 },3565 },
3005 "node_modules/crc32-stream/node_modules/buffer": {
3006 "version": "6.0.3",
3007 "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
3008 "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
3009 "funding": [
3010 {
3011 "type": "github",
3012 "url": "https://github.com/sponsors/feross"
3013 },
3014 {
3015 "type": "patreon",
3016 "url": "https://www.patreon.com/feross"
3017 },
3018 {
3019 "type": "consulting",
3020 "url": "https://feross.org/support"
3021 }
3022 ],
3023 "dependencies": {
3024 "base64-js": "^1.3.1",
3025 "ieee754": "^1.2.1"
3026 }
3027 },
3028 "node_modules/crc32-stream/node_modules/crc-32": {3566 "node_modules/crc32-stream/node_modules/crc-32": {
3029 "version": "1.2.2",3567 "version": "1.2.2",
3030 "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",3568 "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
@@ -5090,18 +5628,6 @@
5090 "url": "https://github.com/chalk/supports-color?sponsor=1"5628 "url": "https://github.com/chalk/supports-color?sponsor=1"
5091 }5629 }
5092 },5630 },
5093 "node_modules/jimp": {
5094 "version": "0.22.12",
5095 "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.22.12.tgz",
5096 "integrity": "sha512-R5jZaYDnfkxKJy1dwLpj/7cvyjxiclxU3F4TrI/J4j2rS0niq6YDUMoPn5hs8GDpO+OZGo7Ky057CRtWesyhfg==",
5097 "license": "MIT",
5098 "dependencies": {
5099 "@jimp/custom": "^0.22.12",
5100 "@jimp/plugins": "^0.22.12",
5101 "@jimp/types": "^0.22.12",
5102 "regenerator-runtime": "^0.13.3"
5103 }
5104 },
5105 "node_modules/jpeg-js": {5631 "node_modules/jpeg-js": {
5106 "version": "0.4.4",5632 "version": "0.4.4",
5107 "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz",5633 "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz",
@@ -6008,9 +6534,9 @@
6008 }6534 }
6009 },6535 },
6010 "node_modules/parse-headers": {6536 "node_modules/parse-headers": {
6011 "version": "2.0.5",6537 "version": "2.0.6",
6012 "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz",6538 "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.6.tgz",
6013 "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==",6539 "integrity": "sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==",
6014 "license": "MIT"6540 "license": "MIT"
6015 },6541 },
6016 "node_modules/parse-imports": {6542 "node_modules/parse-imports": {
@@ -6148,27 +6674,6 @@
6148 "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==",6674 "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==",
6149 "license": "ISC"6675 "license": "ISC"
6150 },6676 },
6151 "node_modules/pixelmatch": {
6152 "version": "4.0.2",
6153 "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz",
6154 "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==",
6155 "license": "ISC",
6156 "dependencies": {
6157 "pngjs": "^3.0.0"
6158 },
6159 "bin": {
6160 "pixelmatch": "bin/pixelmatch"
6161 }
6162 },
6163 "node_modules/pixelmatch/node_modules/pngjs": {
6164 "version": "3.4.0",
6165 "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
6166 "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==",
6167 "license": "MIT",
6168 "engines": {
6169 "node": ">=4.0.0"
6170 }
6171 },
6172 "node_modules/platform": {6677 "node_modules/platform": {
6173 "version": "1.3.6",6678 "version": "1.3.6",
6174 "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz",6679 "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz",
@@ -6201,12 +6706,12 @@
6201 }6706 }
6202 },6707 },
6203 "node_modules/pngjs": {6708 "node_modules/pngjs": {
6204 "version": "6.0.0",6709 "version": "7.0.0",
6205 "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz",6710 "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz",
6206 "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==",6711 "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==",
6207 "license": "MIT",6712 "license": "MIT",
6208 "engines": {6713 "engines": {
6209 "node": ">=12.13.0"6714 "node": ">=14.19.0"
6210 }6715 }
6211 },6716 },
6212 "node_modules/prelude-ls": {6717 "node_modules/prelude-ls": {
@@ -6478,12 +6983,12 @@
6478 }6983 }
6479 },6984 },
6480 "node_modules/readable-web-to-node-stream": {6985 "node_modules/readable-web-to-node-stream": {
6481 "version": "3.0.2",6986 "version": "3.0.4",
6482 "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",6987 "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.4.tgz",
6483 "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",6988 "integrity": "sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==",
6484 "license": "MIT",6989 "license": "MIT",
6485 "dependencies": {6990 "dependencies": {
6486 "readable-stream": "^3.6.0"6991 "readable-stream": "^4.7.0"
6487 },6992 },
6488 "engines": {6993 "engines": {
6489 "node": ">=8"6994 "node": ">=8"
@@ -6494,17 +6999,48 @@
6494 }6999 }
6495 },7000 },
6496 "node_modules/readable-web-to-node-stream/node_modules/readable-stream": {7001 "node_modules/readable-web-to-node-stream/node_modules/readable-stream": {
6497 "version": "3.6.2",7002 "version": "4.7.0",
6498 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",7003 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz",
6499 "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",7004 "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
6500 "license": "MIT",7005 "license": "MIT",
6501 "dependencies": {7006 "dependencies": {
6502 "inherits": "^2.0.3",7007 "abort-controller": "^3.0.0",
6503 "string_decoder": "^1.1.1",7008 "buffer": "^6.0.3",
6504 "util-deprecate": "^1.0.1"7009 "events": "^3.3.0",
7010 "process": "^0.11.10",
7011 "string_decoder": "^1.3.0"
6505 },7012 },
6506 "engines": {7013 "engines": {
6507 "node": ">= 6"7014 "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7015 }
7016 },
7017 "node_modules/readable-web-to-node-stream/node_modules/safe-buffer": {
7018 "version": "5.2.1",
7019 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
7020 "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
7021 "funding": [
7022 {
7023 "type": "github",
7024 "url": "https://github.com/sponsors/feross"
7025 },
7026 {
7027 "type": "patreon",
7028 "url": "https://www.patreon.com/feross"
7029 },
7030 {
7031 "type": "consulting",
7032 "url": "https://feross.org/support"
7033 }
7034 ],
7035 "license": "MIT"
7036 },
7037 "node_modules/readable-web-to-node-stream/node_modules/string_decoder": {
7038 "version": "1.3.0",
7039 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
7040 "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
7041 "license": "MIT",
7042 "dependencies": {
7043 "safe-buffer": "~5.2.0"
6508 }7044 }
6509 },7045 },
6510 "node_modules/readdir-glob": {7046 "node_modules/readdir-glob": {
@@ -6922,6 +7458,35 @@
6922 "onnxruntime-web": "1.14.0"7458 "onnxruntime-web": "1.14.0"
6923 }7459 }
6924 },7460 },
7461 "node_modules/sillytavern-transformers/node_modules/@jimp/types": {
7462 "version": "0.22.12",
7463 "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.22.12.tgz",
7464 "integrity": "sha512-wwKYzRdElE1MBXFREvCto5s699izFHNVvALUv79GXNbsOVqlwlOxlWJ8DuyOGIXoLP4JW/m30YyuTtfUJgMRMA==",
7465 "license": "MIT",
7466 "dependencies": {
7467 "@jimp/bmp": "^0.22.12",
7468 "@jimp/gif": "^0.22.12",
7469 "@jimp/jpeg": "^0.22.12",
7470 "@jimp/png": "^0.22.12",
7471 "@jimp/tiff": "^0.22.12",
7472 "timm": "^1.6.1"
7473 },
7474 "peerDependencies": {
7475 "@jimp/custom": ">=0.3.5"
7476 }
7477 },
7478 "node_modules/sillytavern-transformers/node_modules/jimp": {
7479 "version": "0.22.12",
7480 "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.22.12.tgz",
7481 "integrity": "sha512-R5jZaYDnfkxKJy1dwLpj/7cvyjxiclxU3F4TrI/J4j2rS0niq6YDUMoPn5hs8GDpO+OZGo7Ky057CRtWesyhfg==",
7482 "license": "MIT",
7483 "dependencies": {
7484 "@jimp/custom": "^0.22.12",
7485 "@jimp/plugins": "^0.22.12",
7486 "@jimp/types": "^0.22.12",
7487 "regenerator-runtime": "^0.13.3"
7488 }
7489 },
6925 "node_modules/simple-git": {7490 "node_modules/simple-git": {
6926 "version": "3.27.0",7491 "version": "3.27.0",
6927 "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.27.0.tgz",7492 "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.27.0.tgz",
@@ -7589,6 +8154,12 @@
7589 "vectra": "bin/vectra.js"8154 "vectra": "bin/vectra.js"
7590 }8155 }
7591 },8156 },
8157 "node_modules/wasm-feature-detect": {
8158 "version": "1.8.0",
8159 "resolved": "https://registry.npmjs.org/wasm-feature-detect/-/wasm-feature-detect-1.8.0.tgz",
8160 "integrity": "sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ==",
8161 "license": "Apache-2.0"
8162 },
7592 "node_modules/watchpack": {8163 "node_modules/watchpack": {
7593 "version": "2.4.2",8164 "version": "2.4.2",
7594 "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",8165 "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
@@ -7955,29 +8526,6 @@
7955 "node": ">= 14"8526 "node": ">= 14"
7956 }8527 }
7957 },8528 },
7958 "node_modules/zip-stream/node_modules/buffer": {
7959 "version": "6.0.3",
7960 "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
7961 "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
7962 "funding": [
7963 {
7964 "type": "github",
7965 "url": "https://github.com/sponsors/feross"
7966 },
7967 {
7968 "type": "patreon",
7969 "url": "https://www.patreon.com/feross"
7970 },
7971 {
7972 "type": "consulting",
7973 "url": "https://feross.org/support"
7974 }
7975 ],
7976 "dependencies": {
7977 "base64-js": "^1.3.1",
7978 "ieee754": "^1.2.1"
7979 }
7980 },
7981 "node_modules/zip-stream/node_modules/readable-stream": {8529 "node_modules/zip-stream/node_modules/readable-stream": {
7982 "version": "4.5.2",8530 "version": "4.5.2",
7983 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",8531 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
@@ -8019,6 +8567,15 @@
8019 "dependencies": {8567 "dependencies": {
8020 "safe-buffer": "~5.2.0"8568 "safe-buffer": "~5.2.0"
8021 }8569 }
8570 },
8571 "node_modules/zod": {
8572 "version": "3.24.2",
8573 "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz",
8574 "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==",
8575 "license": "MIT",
8576 "funding": {
8577 "url": "https://github.com/sponsors/colinhacks"
8578 }
8022 }8579 }
8023 }8580 }
8024}8581}
package.json+20 -1
@@ -4,6 +4,26 @@
4 "@agnai/sentencepiece-js": "^1.1.1",4 "@agnai/sentencepiece-js": "^1.1.1",
5 "@agnai/web-tokenizers": "^0.1.3",5 "@agnai/web-tokenizers": "^0.1.3",
6 "@iconfu/svg-inject": "^1.2.3",6 "@iconfu/svg-inject": "^1.2.3",
7 "@jimp/core": "^1.6.0",
8 "@jimp/js-bmp": "^1.6.0",
9 "@jimp/js-gif": "^1.6.0",
10 "@jimp/js-tiff": "^1.6.0",
11 "@jimp/plugin-circle": "^1.6.0",
12 "@jimp/plugin-color": "^1.6.0",
13 "@jimp/plugin-contain": "^1.6.0",
14 "@jimp/plugin-cover": "^1.6.0",
15 "@jimp/plugin-crop": "^1.6.0",
16 "@jimp/plugin-displace": "^1.6.0",
17 "@jimp/plugin-fisheye": "^1.6.0",
18 "@jimp/plugin-flip": "^1.6.0",
19 "@jimp/plugin-mask": "^1.6.0",
20 "@jimp/plugin-quantize": "^1.6.0",
21 "@jimp/plugin-rotate": "^1.6.0",
22 "@jimp/plugin-threshold": "^1.6.0",
23 "@jimp/wasm-avif": "^1.6.0",
24 "@jimp/wasm-jpeg": "^1.6.0",
25 "@jimp/wasm-png": "^1.6.0",
26 "@jimp/wasm-webp": "^1.6.0",
7 "@mozilla/readability": "^0.6.0",27 "@mozilla/readability": "^0.6.0",
8 "@popperjs/core": "^2.11.8",28 "@popperjs/core": "^2.11.8",
9 "@zeldafan0225/ai_horde": "^5.2.0",29 "@zeldafan0225/ai_horde": "^5.2.0",
@@ -36,7 +56,6 @@
36 "ip-regex": "^5.0.0",56 "ip-regex": "^5.0.0",
37 "ipaddr.js": "^2.2.0",57 "ipaddr.js": "^2.2.0",
38 "is-docker": "^3.0.0",58 "is-docker": "^3.0.0",
39 "jimp": "^0.22.10",
40 "localforage": "^1.10.0",59 "localforage": "^1.10.0",
41 "lodash": "^4.17.21",60 "lodash": "^4.17.21",
42 "mime-types": "^2.1.35",61 "mime-types": "^2.1.35",
public/scripts/utils.js+2 -0
@@ -1437,6 +1437,8 @@ export async function ensureImageFormatSupported(file) {
1437 'image/tiff',1437 'image/tiff',
1438 'image/gif',1438 'image/gif',
1439 'image/apng',1439 'image/apng',
1440 'image/webp',
1441 'image/avif',
1440 ];1442 ];
14411443
1442 if (supportedTypes.includes(file.type) || !file.type.startsWith('image/')) {1444 if (supportedTypes.includes(file.type) || !file.type.startsWith('image/')) {
server.js+1 -0
@@ -20,6 +20,7 @@ import bodyParser from 'body-parser';
20import open from 'open';20import open from 'open';
2121
22// local library imports22// local library imports
23import './src/fetch-patch.js';
23import { serverEvents, EVENT_NAMES } from './src/server-events.js';24import { serverEvents, EVENT_NAMES } from './src/server-events.js';
24import { CommandLineParser } from './src/command-line.js';25import { CommandLineParser } from './src/command-line.js';
25import { loadPlugins } from './src/plugin-loader.js';26import { loadPlugins } from './src/plugin-loader.js';
src/endpoints/avatars.js+5 -4
@@ -3,7 +3,7 @@ import fs from 'node:fs';
33
4import express from 'express';4import express from 'express';
5import sanitize from 'sanitize-filename';5import sanitize from 'sanitize-filename';
6import jimp from 'jimp';6import { Jimp, JimpMime } from '../jimp.js';
7import { sync as writeFileAtomicSync } from 'write-file-atomic';7import { sync as writeFileAtomicSync } from 'write-file-atomic';
88
9import { AVATAR_WIDTH, AVATAR_HEIGHT } from '../constants.js';9import { AVATAR_WIDTH, AVATAR_HEIGHT } from '../constants.js';
@@ -41,13 +41,14 @@ router.post('/upload', async (request, response) => {
41 try {41 try {
42 const pathToUpload = path.join(request.file.destination, request.file.filename);42 const pathToUpload = path.join(request.file.destination, request.file.filename);
43 const crop = tryParse(request.query.crop);43 const crop = tryParse(request.query.crop);
44 let rawImg = await jimp.read(pathToUpload);44 const rawImg = await Jimp.read(pathToUpload);
4545
46 if (typeof crop == 'object' && [crop.x, crop.y, crop.width, crop.height].every(x => typeof x === 'number')) {46 if (typeof crop == 'object' && [crop.x, crop.y, crop.width, crop.height].every(x => typeof x === 'number')) {
47 rawImg = rawImg.crop(crop.x, crop.y, crop.width, crop.height);47 rawImg.crop({ w: crop.width, h: crop.height, x: crop.x, y: crop.y });
48 }48 }
4949
50 const image = await rawImg.cover(AVATAR_WIDTH, AVATAR_HEIGHT).getBufferAsync(jimp.MIME_PNG);50 rawImg.cover({ w: AVATAR_WIDTH, h: AVATAR_HEIGHT });
51 const image = await rawImg.getBuffer(JimpMime.png);
5152
52 const filename = request.body.overwrite_name || `${Date.now()}.png`;53 const filename = request.body.overwrite_name || `${Date.now()}.png`;
53 const pathToNewFile = path.join(request.user.directories.avatars, filename);54 const pathToNewFile = path.join(request.user.directories.avatars, filename);
src/endpoints/characters.js+9 -8
@@ -10,7 +10,7 @@ import { sync as writeFileAtomicSync } from 'write-file-atomic';
10import yaml from 'yaml';10import yaml from 'yaml';
11import _ from 'lodash';11import _ from 'lodash';
12import mime from 'mime-types';12import mime from 'mime-types';
13import jimp from 'jimp';13import { Jimp, JimpMime } from '../jimp.js';
14import storage from 'node-persist';14import storage from 'node-persist';
1515
16import { AVATAR_WIDTH, AVATAR_HEIGHT } from '../constants.js';16import { AVATAR_WIDTH, AVATAR_HEIGHT } from '../constants.js';
@@ -277,12 +277,12 @@ async function writeCharacterData(inputFile, data, outputFile, request, crop = u
277 * @returns {Promise<Buffer>} Image buffer277 * @returns {Promise<Buffer>} Image buffer
278 */278 */
279async function parseImageBuffer(buffer, crop) {279async function parseImageBuffer(buffer, crop) {
280 const image = await jimp.read(buffer);280 const image = await Jimp.fromBuffer(buffer);
281 let finalWidth = image.bitmap.width, finalHeight = image.bitmap.height;281 let finalWidth = image.bitmap.width, finalHeight = image.bitmap.height;
282282
283 // Apply crop if defined283 // Apply crop if defined
284 if (typeof crop == 'object' && [crop.x, crop.y, crop.width, crop.height].every(x => typeof x === 'number')) {284 if (typeof crop == 'object' && [crop.x, crop.y, crop.width, crop.height].every(x => typeof x === 'number')) {
285 image.crop(crop.x, crop.y, crop.width, crop.height);285 image.crop({ x: crop.x, y: crop.y, w: crop.width, h: crop.height });
286 // Apply standard resize if requested286 // Apply standard resize if requested
287 if (crop.want_resize) {287 if (crop.want_resize) {
288 finalWidth = AVATAR_WIDTH;288 finalWidth = AVATAR_WIDTH;
@@ -293,7 +293,8 @@ async function parseImageBuffer(buffer, crop) {
293 }293 }
294 }294 }
295295
296 return image.cover(finalWidth, finalHeight).getBufferAsync(jimp.MIME_PNG);296 image.cover({ w: finalWidth, h: finalHeight });
297 return await image.getBuffer(JimpMime.png);
297}298}
298299
299/**300/**
@@ -304,12 +305,12 @@ async function parseImageBuffer(buffer, crop) {
304 */305 */
305async function tryReadImage(imgPath, crop) {306async function tryReadImage(imgPath, crop) {
306 try {307 try {
307 let rawImg = await jimp.read(imgPath);308 const rawImg = await Jimp.read(imgPath);
308 let finalWidth = rawImg.bitmap.width, finalHeight = rawImg.bitmap.height;309 let finalWidth = rawImg.bitmap.width, finalHeight = rawImg.bitmap.height;
309310
310 // Apply crop if defined311 // Apply crop if defined
311 if (typeof crop == 'object' && [crop.x, crop.y, crop.width, crop.height].every(x => typeof x === 'number')) {312 if (typeof crop == 'object' && [crop.x, crop.y, crop.width, crop.height].every(x => typeof x === 'number')) {
312 rawImg = rawImg.crop(crop.x, crop.y, crop.width, crop.height);313 rawImg.crop({ x: crop.x, y: crop.y, w: crop.width, h: crop.height });
313 // Apply standard resize if requested314 // Apply standard resize if requested
314 if (crop.want_resize) {315 if (crop.want_resize) {
315 finalWidth = AVATAR_WIDTH;316 finalWidth = AVATAR_WIDTH;
@@ -320,8 +321,8 @@ async function tryReadImage(imgPath, crop) {
320 }321 }
321 }322 }
322323
323 const image = await rawImg.cover(finalWidth, finalHeight).getBufferAsync(jimp.MIME_PNG);324 rawImg.cover({ w: finalWidth, h: finalHeight });
324 return image;325 return await rawImg.getBuffer(JimpMime.png);
325 }326 }
326 // If it's an unsupported type of image (APNG) - just read the file as buffer327 // If it's an unsupported type of image (APNG) - just read the file as buffer
327 catch (error) {328 catch (error) {
src/endpoints/thumbnails.js+7 -5
@@ -5,7 +5,7 @@ import path from 'node:path';
5import mime from 'mime-types';5import mime from 'mime-types';
6import express from 'express';6import express from 'express';
7import sanitize from 'sanitize-filename';7import sanitize from 'sanitize-filename';
8import jimp from 'jimp';8import { Jimp, JimpMime } from '../jimp.js';
9import { sync as writeFileAtomicSync } from 'write-file-atomic';9import { sync as writeFileAtomicSync } from 'write-file-atomic';
1010
11import { getConfigValue } from '../util.js';11import { getConfigValue } from '../util.js';
@@ -122,14 +122,16 @@ async function generateThumbnail(directories, type, file) {
122122
123 try {123 try {
124 const size = dimensions[type];124 const size = dimensions[type];
125 const image = await jimp.read(pathToOriginalFile);125 const image = await Jimp.read(pathToOriginalFile);
126 const imgType = type == 'avatar' && pngFormat ? 'image/png' : 'image/jpeg';
127 const width = !isNaN(size?.[0]) && size?.[0] > 0 ? size[0] : image.bitmap.width;126 const width = !isNaN(size?.[0]) && size?.[0] > 0 ? size[0] : image.bitmap.width;
128 const height = !isNaN(size?.[1]) && size?.[1] > 0 ? size[1] : image.bitmap.height;127 const height = !isNaN(size?.[1]) && size?.[1] > 0 ? size[1] : image.bitmap.height;
129 buffer = await image.cover(width, height).quality(quality).getBufferAsync(imgType);128 image.cover({ w: width, h: height });
129 buffer = pngFormat
130 ? await image.getBuffer(JimpMime.png)
131 : await image.getBuffer(JimpMime.jpeg, { quality: quality, jpegColorSpace: 'ycbcr' });
130 }132 }
131 catch (inner) {133 catch (inner) {
132 console.warn(`Thumbnailer can not process the image: ${pathToOriginalFile}. Using original size`);134 console.warn(`Thumbnailer can not process the image: ${pathToOriginalFile}. Using original size`, inner);
133 buffer = fs.readFileSync(pathToOriginalFile);135 buffer = fs.readFileSync(pathToOriginalFile);
134 }136 }
135137
src/fetch-patch.js+91 -0
@@ -0,0 +1,91 @@
1import fs from 'node:fs';
2import path from 'node:path';
3import { fileURLToPath } from 'node:url';
4import mime from 'mime-types';
5
6const originalFetch = globalThis.fetch;
7
8const ALLOWED_EXTENSIONS = [
9 '.wasm',
10];
11
12/**
13 * Checks if a child path is under a parent path.
14 * @param {string} parentPath Parent path
15 * @param {string} childPath Child path
16 * @returns {boolean} Returns true if the child path is under the parent path, false otherwise
17 */
18function isPathUnderParent(parentPath, childPath) {
19 const normalizedParent = path.normalize(parentPath);
20 const normalizedChild = path.normalize(childPath);
21
22 const relativePath = path.relative(normalizedParent, normalizedChild);
23
24 return !relativePath.startsWith('..') && !path.isAbsolute(relativePath);
25}
26
27/**
28 * Checks if the given request is a file URL.
29 * @param {string | URL | Request} request The request to check
30 * @return {boolean} Returns true if the request is a file URL, false otherwise
31 */
32function isFileURL(request) {
33 if (typeof request === 'string') {
34 return request.startsWith('file://');
35 }
36 if (request instanceof URL) {
37 return request.protocol === 'file:';
38 }
39 if (request instanceof Request) {
40 return request.url.startsWith('file://');
41 }
42 return false;
43}
44
45/**
46 * Gets the URL from the request.
47 * @param {string | URL | Request} request The request to get the URL from
48 * @return {string} The URL of the request
49 */
50function getRequestURL(request) {
51 if (typeof request === 'string') {
52 return request;
53 }
54 if (request instanceof URL) {
55 return request.href;
56 }
57 if (request instanceof Request) {
58 return request.url;
59 }
60 throw new TypeError('Invalid request type');
61}
62
63// Patched fetch function that handles file URLs
64globalThis.fetch = async (/** @type {string | URL | Request} */ request, /** @type {RequestInit | undefined} */ options) => {
65 if (!isFileURL(request)) {
66 return originalFetch(request, options);
67 }
68 const url = getRequestURL(request);
69 const filePath = path.resolve(fileURLToPath(url));
70 const cwd = path.resolve(process.cwd()) + path.sep;
71 const isUnderCwd = isPathUnderParent(cwd, filePath);
72 if (!isUnderCwd) {
73 throw new Error('Requested file path is outside of the current working directory.');
74 }
75 const parsedPath = path.parse(filePath);
76 if (!ALLOWED_EXTENSIONS.includes(parsedPath.ext)) {
77 throw new Error('Unsupported file extension.');
78 }
79 const fileName = parsedPath.base;
80 const buffer = await fs.promises.readFile(filePath);
81 const blob = new Blob([buffer]);
82 const response = new Response(blob, {
83 status: 200,
84 statusText: 'OK',
85 headers: {
86 'Content-Type': mime.lookup(fileName) || 'application/octet-stream',
87 'Content-Length': buffer.length.toString(),
88 },
89 });
90 return response;
91};
src/jimp.js+63 -0
@@ -0,0 +1,63 @@
1import { createJimp } from '@jimp/core';
2
3// Optimized image formats
4import webp from '@jimp/wasm-webp';
5import png from '@jimp/wasm-png';
6import jpeg from '@jimp/wasm-jpeg';
7import avif from '@jimp/wasm-avif';
8
9// Other image formats
10import bmp, { msBmp } from '@jimp/js-bmp';
11import gif from '@jimp/js-gif';
12import tiff from '@jimp/js-tiff';
13
14// Plugins
15import * as blit from '@jimp/plugin-blit';
16import * as circle from '@jimp/plugin-circle';
17import * as color from '@jimp/plugin-color';
18import * as contain from '@jimp/plugin-contain';
19import * as cover from '@jimp/plugin-cover';
20import * as crop from '@jimp/plugin-crop';
21import * as displace from '@jimp/plugin-displace';
22import * as fisheye from '@jimp/plugin-fisheye';
23import * as flip from '@jimp/plugin-flip';
24import * as mask from '@jimp/plugin-mask';
25import * as resize from '@jimp/plugin-resize';
26import * as rotate from '@jimp/plugin-rotate';
27import * as threshold from '@jimp/plugin-threshold';
28import * as quantize from '@jimp/plugin-quantize';
29
30const defaultPlugins = [
31 blit.methods,
32 circle.methods,
33 color.methods,
34 contain.methods,
35 cover.methods,
36 crop.methods,
37 displace.methods,
38 fisheye.methods,
39 flip.methods,
40 mask.methods,
41 resize.methods,
42 rotate.methods,
43 threshold.methods,
44 quantize.methods,
45];
46
47// A custom jimp that uses WASM for optimized formats and JS for the rest
48const Jimp = createJimp({
49 formats: [webp, png, jpeg, avif, bmp, msBmp, gif, tiff],
50 plugins: [...defaultPlugins],
51});
52
53const JimpMime = {
54 bmp: bmp().mime,
55 gif: gif().mime,
56 jpeg: jpeg().mime,
57 png: png().mime,
58 tiff: tiff().mime,
59};
60
61export default Jimp;
62
63export { Jimp, JimpMime };