discord-image-utils
Version:
A powerful library for generating and modifying images with Discord.js - includes meme generation, filters, effects and animations
91 lines • 3.64 kB
JavaScript
/** @format */
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadImage = exports.registerFont = exports.createCanvas = exports.Image = exports.CanvasRenderingContext2D = exports.Canvas = void 0;
/**
* this this witten by ai so review it
* Canvas compatibility layer
* Supports both node-canvas and @napi-rs/canvas for better Node.js compatibility
*/
let canvasImpl;
let Canvas;
let CanvasRenderingContext2D;
let Image;
let loadImage;
let createCanvas;
let registerFont;
try {
// Try @napi-rs/canvas first (better Node.js v24+ support)
canvasImpl = eval('require')('@napi-rs/canvas');
exports.Canvas = Canvas = canvasImpl.Canvas;
exports.CanvasRenderingContext2D = CanvasRenderingContext2D = canvasImpl.CanvasRenderingContext2D;
exports.Image = Image = canvasImpl.Image;
loadImage = canvasImpl.loadImage;
exports.createCanvas = createCanvas = canvasImpl.createCanvas;
const napiRegisterFont = canvasImpl.GlobalFonts?.registerFromPath;
if (napiRegisterFont) {
exports.registerFont = registerFont = (path, options) => napiRegisterFont(path, options.family);
}
//console.log('Using @napi-rs/canvas for better performance and compatibility');
}
catch (napiError) {
try {
// Fallback to node-canvas
canvasImpl = eval('require')('canvas');
exports.Canvas = Canvas = canvasImpl.Canvas;
exports.CanvasRenderingContext2D = CanvasRenderingContext2D = canvasImpl.CanvasRenderingContext2D;
exports.Image = Image = canvasImpl.Image;
loadImage = canvasImpl.loadImage;
exports.createCanvas = createCanvas = canvasImpl.createCanvas;
exports.registerFont = registerFont = canvasImpl.registerFont;
console.log('Using node-canvas (fallback)');
}
catch (canvasError) {
throw new Error('No canvas implementation found. Please install either @napi-rs/canvas or canvas:\n' +
'npm install @napi-rs/canvas\n' +
'or\n' +
'npm install canvas\n\n' +
`@napi-rs/canvas error: ${napiError?.message || 'Unknown error'}\n` +
`canvas error: ${canvasError?.message || 'Unknown error'}`);
}
}
// Check if something is Buffer-like
function isBufferLike(obj) {
return obj && typeof obj === 'object' && typeof obj.length === 'number' && typeof obj.buffer !== 'undefined';
}
// Compatibility wrapper for loadImage to handle different signatures
const compatLoadImage = async (source) => {
try {
if (typeof loadImage === 'function') {
return await loadImage(source);
}
// Fallback implementation for different canvas libraries
const img = new Image();
return new Promise((resolve, reject) => {
img.onload = () => resolve(img);
img.onerror = reject;
if (isBufferLike(source)) {
img.src = source;
}
else if (typeof source === 'string') {
if (source.startsWith('data:') || source.startsWith('http')) {
img.src = source;
}
else {
// Assume it's a file path
const fs = eval('require')('fs');
const data = fs.readFileSync(source);
img.src = data;
}
}
else {
img.src = source;
}
});
}
catch (error) {
throw new Error(`Failed to load image: ${error?.message || String(error)}`);
}
};
exports.loadImage = compatLoadImage;
//# sourceMappingURL=canvas-compat.js.map
;