UNPKG

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
"use strict"; /** @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