Bump Jimp && Sharp (#1575)

* Bump Jimp && Sharp

Upgrade and use the latest version of jimp and sharp libraries

* lint
This commit is contained in:
DevAstro
2025-07-05 21:58:57 +01:00
committed by GitHub
parent 719a57b275
commit 3cdb0f4dd9
3 changed files with 494 additions and 648 deletions

View File

@@ -61,14 +61,14 @@
"eslint-config-prettier": "^10.1.2", "eslint-config-prettier": "^10.1.2",
"eslint-plugin-prettier": "^5.4.0", "eslint-plugin-prettier": "^5.4.0",
"jest": "^29.7.0", "jest": "^29.7.0",
"jimp": "^0.16.1", "jimp": "^1.6.0",
"json": "^11.0.0", "json": "^11.0.0",
"link-preview-js": "^3.0.0", "link-preview-js": "^3.0.0",
"open": "^8.4.2", "open": "^8.4.2",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"protobufjs-cli": "^1.1.3", "protobufjs-cli": "^1.1.3",
"release-it": "^15.10.3", "release-it": "^15.10.3",
"sharp": "^0.32.6", "sharp": "^0.34.2",
"ts-jest": "^29.3.2", "ts-jest": "^29.3.2",
"ts-node": "^10.8.1", "ts-node": "^10.8.1",
"typedoc": "^0.27.9", "typedoc": "^0.27.9",
@@ -77,9 +77,9 @@
}, },
"peerDependencies": { "peerDependencies": {
"audio-decode": "^2.1.3", "audio-decode": "^2.1.3",
"jimp": "^0.16.1", "jimp": "^1.6.0",
"link-preview-js": "^3.0.0", "link-preview-js": "^3.0.0",
"sharp": "^0.32.6" "sharp": "^0.34.2"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
"audio-decode": { "audio-decode": {

View File

@@ -4,6 +4,7 @@ import { exec } from 'child_process'
import * as Crypto from 'crypto' import * as Crypto from 'crypto'
import { once } from 'events' import { once } from 'events'
import { createReadStream, createWriteStream, promises as fs, WriteStream } from 'fs' import { createReadStream, createWriteStream, promises as fs, WriteStream } from 'fs'
import { ResizeStrategy } from 'jimp'
import type { IAudioMetadata } from 'music-metadata' import type { IAudioMetadata } from 'music-metadata'
import { tmpdir } from 'os' import { tmpdir } from 'os'
import { join } from 'path' import { join } from 'path'
@@ -32,22 +33,12 @@ import { ILogger } from './logger'
const getTmpFilesDirectory = () => tmpdir() const getTmpFilesDirectory = () => tmpdir()
const getImageProcessingLibrary = async () => { const getImageProcessingLibrary = async () => {
const [_jimp, sharp] = await Promise.all([ const [jimp, sharp] = await Promise.all([import('jimp').catch(() => {}), import('sharp').catch(() => {})])
(async () => {
const jimp = await import('jimp').catch(() => {})
return jimp
})(),
(async () => {
const sharp = await import('sharp').catch(() => {})
return sharp
})()
])
if (sharp) { if (sharp) {
return { sharp } return { sharp }
} }
const jimp = _jimp?.default || _jimp
if (jimp) { if (jimp) {
return { jimp } return { jimp }
} }
@@ -159,15 +150,15 @@ export const extractImageThumb = async (bufferOrFilePath: Readable | Buffer | st
height: dimensions.height height: dimensions.height
} }
} }
} else if ('jimp' in lib && typeof lib.jimp?.read === 'function') { } else if ('jimp' in lib && typeof lib.jimp?.Jimp === 'object') {
const { read, MIME_JPEG, RESIZE_BILINEAR, AUTO } = lib.jimp const jimp = await lib.jimp.default.Jimp.read(bufferOrFilePath)
const jimp = await read(bufferOrFilePath as string)
const dimensions = { const dimensions = {
width: jimp.getWidth(), width: jimp.width,
height: jimp.getHeight() height: jimp.height
} }
const buffer = await jimp.quality(50).resize(width, AUTO, RESIZE_BILINEAR).getBufferAsync(MIME_JPEG) const buffer = await jimp
.resize({ w: width, mode: ResizeStrategy.BILINEAR })
.getBuffer('image/jpeg', { quality: 50 })
return { return {
buffer, buffer,
original: dimensions original: dimensions
@@ -207,13 +198,12 @@ export const generateProfilePicture = async (
quality: 50 quality: 50
}) })
.toBuffer() .toBuffer()
} else if ('jimp' in lib && typeof lib.jimp?.read === 'function') { } else if ('jimp' in lib && typeof lib.jimp?.Jimp === 'object') {
const { read, MIME_JPEG, RESIZE_BILINEAR } = lib.jimp const jimp = await lib.jimp.default.Jimp.read(buffer)
const jimp = await read(buffer) const min = Math.min(jimp.width, jimp.height)
const min = Math.min(jimp.getWidth(), jimp.getHeight()) const cropped = jimp.crop({ x: 0, y: 0, w: min, h: min })
const cropped = jimp.crop(0, 0, min, min)
img = cropped.quality(50).resize(w, h, RESIZE_BILINEAR).getBufferAsync(MIME_JPEG) img = cropped.resize({ w, h, mode: ResizeStrategy.BILINEAR }).getBuffer('image/jpeg', { quality: 50 })
} else { } else {
throw new Boom('No image processing library available') throw new Boom('No image processing library available')
} }

1096
yarn.lock

File diff suppressed because it is too large Load Diff