fix(build): modernize project configuration and tighten smartjimp TypeScript compatibility
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
* autocreated commitinfo by @pushrocks/commitinfo
|
||||
* autocreated commitinfo by @push.rocks/commitinfo
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@push.rocks/smartjimp',
|
||||
version: '1.0.18',
|
||||
description: 'a tool fr working with images in TypeScript'
|
||||
version: '1.2.1',
|
||||
description: 'A TypeScript library for image processing combining both sharp and jimp libraries.'
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ export class SmartJimp {
|
||||
sourceTypeArg: 'streamfile' | 'smartfile',
|
||||
sourceIdArg: string,
|
||||
assetVariationArg?: IAssetVariation
|
||||
) {
|
||||
): string {
|
||||
return `${sourceTypeArg}_${sourceIdArg}_${
|
||||
assetVariationArg
|
||||
? `${assetVariationArg.width || 'auto'}x${assetVariationArg.height || 'auto'}`
|
||||
@@ -41,7 +41,7 @@ export class SmartJimp {
|
||||
}`;
|
||||
}
|
||||
|
||||
sharpMod: typeof pluginsTyped.sharpType.default;
|
||||
private sharpMod?: typeof pluginsTyped.sharpType.default;
|
||||
public async getSharpMod(): Promise<
|
||||
typeof pluginsTyped.sharpType.default
|
||||
> {
|
||||
@@ -51,7 +51,7 @@ export class SmartJimp {
|
||||
return this.sharpMod;
|
||||
}
|
||||
|
||||
jimpMod: typeof pluginsTyped.jimpType;
|
||||
private jimpMod?: typeof pluginsTyped.jimpType;
|
||||
public async getJimpMod(): Promise<typeof pluginsTyped.jimpType> {
|
||||
if (!this.jimpMod) {
|
||||
this.jimpMod = await import('jimp');
|
||||
@@ -59,12 +59,16 @@ export class SmartJimp {
|
||||
return this.jimpMod;
|
||||
}
|
||||
|
||||
public async computeAssetVariation(assetBufferArg: Buffer, assetVariationArg: IAssetVariation) {
|
||||
public async computeAssetVariation(
|
||||
assetBufferArg: Buffer,
|
||||
assetVariationArg?: IAssetVariation
|
||||
): Promise<Buffer> {
|
||||
if (!assetVariationArg) {
|
||||
return assetBufferArg;
|
||||
}
|
||||
|
||||
if (this.options.mode === 'sharp') {
|
||||
const sharp = await this.getSharpMod();
|
||||
if (!assetVariationArg) {
|
||||
return assetBufferArg;
|
||||
}
|
||||
let sharpImage = sharp(assetBufferArg);
|
||||
sharpImage = sharpImage.resize(assetVariationArg.width, assetVariationArg.height);
|
||||
const resultResize = sharpImage.resize(assetVariationArg.width, assetVariationArg.height);
|
||||
@@ -73,29 +77,29 @@ export class SmartJimp {
|
||||
}
|
||||
switch (assetVariationArg.format) {
|
||||
case 'avif':
|
||||
const avifOptions: any = {};
|
||||
const avifOptions: pluginsTyped.sharpType.AvifOptions = {};
|
||||
if (assetVariationArg.quality !== undefined) {
|
||||
avifOptions.quality = assetVariationArg.quality;
|
||||
}
|
||||
sharpImage = resultResize.avif(avifOptions);
|
||||
break;
|
||||
case 'webp':
|
||||
const webpOptions: any = {};
|
||||
const webpOptions: pluginsTyped.sharpType.WebpOptions = {};
|
||||
if (assetVariationArg.quality !== undefined) {
|
||||
webpOptions.quality = assetVariationArg.quality;
|
||||
}
|
||||
sharpImage = resultResize.webp(webpOptions);
|
||||
break;
|
||||
case 'png':
|
||||
const pngOptions: any = {};
|
||||
const pngOptions: pluginsTyped.sharpType.PngOptions = {};
|
||||
if (assetVariationArg.quality !== undefined) {
|
||||
pngOptions.quality = assetVariationArg.quality;
|
||||
}
|
||||
sharpImage = resultResize.png(pngOptions);
|
||||
break;
|
||||
case 'jpeg':
|
||||
const jpegOptions: any = {
|
||||
progressive: assetVariationArg.progressive || false
|
||||
const jpegOptions: pluginsTyped.sharpType.JpegOptions = {
|
||||
progressive: assetVariationArg.progressive || false,
|
||||
};
|
||||
if (assetVariationArg.quality !== undefined) {
|
||||
jpegOptions.quality = assetVariationArg.quality;
|
||||
@@ -104,8 +108,8 @@ export class SmartJimp {
|
||||
break;
|
||||
default:
|
||||
// Default to JPEG
|
||||
const defaultJpegOptions: any = {
|
||||
progressive: assetVariationArg.progressive || false
|
||||
const defaultJpegOptions: pluginsTyped.sharpType.JpegOptions = {
|
||||
progressive: assetVariationArg.progressive || false,
|
||||
};
|
||||
if (assetVariationArg.quality !== undefined) {
|
||||
defaultJpegOptions.quality = assetVariationArg.quality;
|
||||
@@ -117,24 +121,27 @@ export class SmartJimp {
|
||||
const jimpMod = await this.getJimpMod();
|
||||
let jimpImage = await jimpMod.Jimp.read(assetBufferArg);
|
||||
if (assetVariationArg.width || assetVariationArg.height) {
|
||||
const resizeOptions: any = {};
|
||||
if (assetVariationArg.width) resizeOptions.w = assetVariationArg.width;
|
||||
if (assetVariationArg.height) resizeOptions.h = assetVariationArg.height;
|
||||
jimpImage.resize(resizeOptions);
|
||||
if (assetVariationArg.width && assetVariationArg.height) {
|
||||
jimpImage.resize({ w: assetVariationArg.width, h: assetVariationArg.height });
|
||||
} else if (assetVariationArg.width) {
|
||||
jimpImage.resize({ w: assetVariationArg.width });
|
||||
} else if (assetVariationArg.height) {
|
||||
jimpImage.resize({ h: assetVariationArg.height });
|
||||
}
|
||||
}
|
||||
if (assetVariationArg.invert) {
|
||||
jimpImage.invert();
|
||||
jimpImage.invert();
|
||||
}
|
||||
// Note: Jimp does not support progressive JPEG encoding
|
||||
// Progressive option is ignored in jimp mode
|
||||
const jpegOptions: any = {};
|
||||
const jpegOptions: { quality?: number } = {};
|
||||
if (assetVariationArg.quality !== undefined) {
|
||||
jpegOptions.quality = assetVariationArg.quality;
|
||||
}
|
||||
|
||||
switch (assetVariationArg.format) {
|
||||
case 'png':
|
||||
return await jimpImage.getBuffer("image/png");
|
||||
return await jimpImage.getBuffer('image/png');
|
||||
case 'webp':
|
||||
case 'avif':
|
||||
console.log(`Jimp doesn't support ${assetVariationArg.format}, falling back to JPEG`);
|
||||
@@ -142,9 +149,11 @@ export class SmartJimp {
|
||||
case 'jpeg':
|
||||
default:
|
||||
// Default to JPEG
|
||||
return await jimpImage.getBuffer("image/jpeg", jpegOptions);
|
||||
return await jimpImage.getBuffer('image/jpeg', jpegOptions);
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error(`Unsupported smartjimp mode: ${this.options.mode}`);
|
||||
}
|
||||
|
||||
public async getFromSmartfile(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import * as plugins from './plugins.js';
|
||||
|
||||
export const packageDir = plugins.path.join(plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url), '../');
|
||||
export const nogitDir = plugins.path.join(packageDir, '.nogit/')
|
||||
export const nogitDir = plugins.path.join(packageDir, '.nogit/');
|
||||
|
||||
Reference in New Issue
Block a user