qrcode-generator-sabai
Version:
qrcode-generator-sabai is a Node.js package designed to simplify QR code generation from various payloads to images. It offers ease of use and extensive customization options.
1 lines • 24.8 kB
Source Map (JSON)
{"version":3,"sources":["../src/lib/util.ts","../src/lib/init.ts","../src/index.ts"],"sourcesContent":["import fs from 'fs';\nimport QRCode from 'qrcode';\nimport { eclType } from '../types/dataType';\nimport sharp from 'sharp';\n\nexport default class Util {\n\n public static generatePngQR = async (payload: string, size: number = 400, ecl: eclType = 'H', fileName: string, filePath: string): Promise<boolean> => {\n try {\n size = parseInt(String(size));\n const result = new Promise<string>((resolve, reject) => {\n QRCode.toFile(\n `${filePath}/${fileName}.png`,\n [{ data: payload }],\n { width: size, margin: 0.5, type: 'png', errorCorrectionLevel: ecl },\n (err?: any | null, url?: string) => {\n if (err) {\n reject(err);\n } else {\n resolve(url!);\n }\n });\n });\n return true;\n } catch (error: any) {\n throw new Error(error);\n }\n }\n public static generatePngQRWithLogo = async (payload: string, size: number = 400, ecl: eclType = 'H', fileName: string, filePath: string, logoPath: string): Promise<boolean> => {\n try {\n size = parseInt(String(size));\n const qrBuffer = await QRCode.toBuffer(\n [{ data: payload }],\n { width: size, margin: 0.5, type: 'png', errorCorrectionLevel: ecl },\n );\n\n const qrImage = sharp(qrBuffer).resize(size, size);\n const logoImage = sharp(logoPath,)\n .resize(Math.floor(size / 4), Math.floor(size / 4), { fit: 'contain', background: { r: 255, g: 255, b: 255, alpha: 0 } })\n .toFormat('png');\n\n const compositeImage = await qrImage\n .composite([{ input: await logoImage.toBuffer(), gravity: 'center' }])\n .png()\n .toBuffer();\n\n fs.writeFileSync(`${filePath}/${fileName}.png`, compositeImage);\n return true;\n\n } catch (error: any) {\n throw new Error(error);\n }\n }\n public static generateSvgQR = async (payload: string, size: number = 400, ecl: eclType = 'H', fileName: string, filePath: string): Promise<string | boolean> => {\n try {\n size = parseInt(String(size));\n if (filePath && fileName) {\n const result = new Promise<string>((resolve, reject) => {\n QRCode.toFile(\n `${filePath}/${fileName}.svg`,\n [{ data: payload }],\n { width: size, margin: 0.5, type: 'svg', errorCorrectionLevel: ecl },\n (err?: any | null, url?: string) => {\n if (err) {\n reject(err);\n } else {\n resolve(url!);\n }\n });\n });\n return true;\n } else {\n const result = new Promise<string>((resolve, reject) => {\n QRCode.toString([{ data: payload }], { type: 'svg', width: size, margin: 0.5, errorCorrectionLevel: ecl }, (err?: any | null, url?: string) => {\n if (err) {\n reject(err);\n } else {\n if (url) {\n resolve(url);\n } else {\n reject(new Error(\"QRCode generation failed\"));\n }\n }\n });\n });\n return result;\n }\n } catch (error: any) {\n throw new Error(error);\n }\n }\n public static generateSvgQRWithLogo = async (payload: string, size: number = 400, ecl: eclType = 'H', fileName: string, filePath: string, logoPath: string): Promise<string | boolean> => {\n try {\n\n size = parseInt(String(size));\n const qrBuffer = await QRCode.toBuffer(payload, {\n width: size,\n margin: 0.5,\n errorCorrectionLevel: ecl,\n });\n\n const qrImage = sharp(qrBuffer).resize(size, size);\n const logoSize = Math.floor(size / 4);\n const logoImage = sharp(logoPath)\n .resize(logoSize, logoSize, { fit: 'contain', background: { r: 255, g: 255, b: 255, alpha: 0 } })\n .toFormat('png');\n\n const compositeImage = await qrImage\n .composite([{ input: await logoImage.toBuffer(), gravity: 'center' }])\n .png()\n .toBuffer();\n\n const base64Data = `data:image/png;base64,${compositeImage.toString('base64')}`;\n\n \n // Convert base64 image to an SVG-compatible format\n const svgData = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"400\" height=\"400\" viewBox=\"0 0 400 400\">\n <image href=\"${base64Data}\" width=\"400\" height=\"400\"/>\n </svg>`;\n\n if (filePath && fileName) {\n fs.writeFileSync(`${filePath}/${fileName}.svg`, svgData, 'utf-8');\n return true;\n }\n\n return svgData;\n\n } catch (error: any) {\n throw new Error(error);\n }\n };\n\n public static generateSvgQRFile = async (payload: string, size: number = 400, ecl: eclType = 'H', fileName: string, filePath: string): Promise<boolean> => {\n try {\n size = parseInt(String(size));\n const result = new Promise<string>((resolve, reject) => {\n QRCode.toFile(\n `${filePath}/${fileName}.svg`,\n [{ data: payload }],\n { width: size, margin: 0.5, type: 'svg', errorCorrectionLevel: ecl },\n (err?: any | null, url?: string) => {\n if (err) {\n reject(err);\n } else {\n resolve(url!);\n }\n });\n });\n return true;\n } catch (error: any) {\n throw new Error(error);\n }\n }\n public static generateSvgQRWithLogoFile = async (payload: string, size: number = 400, ecl: eclType = 'H', fileName: string, filePath: string, logoPath: string): Promise<boolean> => {\n try {\n\n size = parseInt(String(size));\n const qrBuffer = await QRCode.toBuffer(payload, {\n width: size,\n margin: 0.5,\n errorCorrectionLevel: ecl,\n });\n\n const qrImage = sharp(qrBuffer).resize(size, size);\n const logoSize = Math.floor(size / 4);\n const logoImage = sharp(logoPath)\n .resize(logoSize, logoSize, { fit: 'contain', background: { r: 255, g: 255, b: 255, alpha: 0 } })\n .toFormat('png');\n\n const compositeImage = await qrImage\n .composite([{ input: await logoImage.toBuffer(), gravity: 'center' }])\n .png()\n .toBuffer();\n\n const base64Data = `data:image/png;base64,${compositeImage.toString('base64')}`;\n\n // Convert base64 image to an SVG-compatible format\n const svgData = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"400\" height=\"400\" viewBox=\"0 0 400 400\">\n <image href=\"${base64Data}\" width=\"400\" height=\"400\"/>\n </svg>`;\n\n // Save the properly formatted SVG file\n fs.writeFileSync(`${filePath}/${fileName}.svg`, svgData, 'utf-8');\n\n return true;\n\n } catch (error: any) {\n throw new Error(error);\n }\n };\n\n public static generateBase64QR = async (payload: string, size: number = 400, ecl: eclType = 'H'): Promise<string> => {\n try {\n size = parseInt(String(size));\n const result = new Promise<string>((resolve, reject) => {\n QRCode.toDataURL([{ data: payload }], { width: size, margin: 0.5, errorCorrectionLevel: ecl }, (err?: any | null, url?: string) => {\n if (err) {\n reject(err);\n } else {\n if (url) {\n resolve(url);\n } else {\n reject(new Error(\"QRCode generation failed\"));\n }\n }\n })\n });\n return result;\n } catch (error: any) {\n throw new Error(error);\n }\n }\n public static generateBase64QrWithLogo = async (payload: string, size: number = 400, ecl: eclType = 'H', logoPath: string): Promise<string> => {\n try {\n\n size = parseInt(String(size));\n const qrBuffer = await QRCode.toBuffer(payload, {\n width: size,\n margin: 0.5,\n errorCorrectionLevel: ecl,\n });\n\n const qrImage = sharp(qrBuffer).resize(size, size);\n const logoSize = Math.floor(size / 4);\n const logoImage = sharp(logoPath)\n .resize(logoSize, logoSize, { fit: 'contain', background: { r: 255, g: 255, b: 255, alpha: 0 } })\n .toFormat('png');\n\n const compositeImage = await qrImage\n .composite([{ input: await logoImage.toBuffer(), gravity: 'center' }])\n .png()\n .toBuffer();\n\n return `data:image/png;base64,${compositeImage.toString('base64')}`;\n\n } catch (error: any) {\n throw new Error(error);\n }\n }\n public static base64ToImage = async (base64Data: string, fileName: string, filePath: string): Promise<boolean> => {\n try {\n\n const data = base64Data.replace(/^data:image\\/\\w+;base64,/, \"\");\n const buf = Buffer.from(data, 'base64');\n fs.writeFileSync(`${filePath}/${fileName}`, buf)\n\n return true\n\n } catch (error: any) {\n throw new Error(error);\n }\n }\n\n public static base64ToSvg = async (base64Data: string, fileName: string, filePath: string): Promise<boolean> => {\n try {\n\n // Convert base64 image to an SVG-compatible format\n const svgData = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"400\" height=\"400\" viewBox=\"0 0 400 400\">\n <image href=\"${base64Data}\" width=\"400\" height=\"400\"/>\n </svg>`;\n\n // Save the properly formatted SVG file\n fs.writeFileSync(`${filePath}/${fileName}`, svgData, 'utf-8');\n return true;\n } catch (error: any) {\n throw new Error(error);\n }\n }\n}","import Util from './util';\nimport { eclType } from '../types/dataType';\nexport default class Init {\n\n public static async png(payload: string, size: number = 400, ecl: eclType, fileName: string, filePath: string): Promise<boolean> {\n try {\n const result = await Util.generatePngQR(payload, size, ecl, fileName, filePath);\n return result;\n\n } catch (error: any) {\n throw new Error(error);\n }\n }\n public static async pngWithLogo(payload: string, size: number = 400, ecl: eclType, fileName: string, filePath: string, logoPath: string): Promise<boolean> {\n try {\n \n // const base64Data = await Util.generateBase64QrWithLogo(payload, size, ecl, logoPath);\n // const result = await Util.base64ToImage(base64Data, fileName, filePath);\n const result = await Util.generatePngQRWithLogo(payload, size, ecl, fileName, filePath, logoPath);\n return result;\n\n } catch (error: any) {\n throw new Error(error);\n }\n }\n\n public static async base64(payload: string, size: number = 400, ecl: eclType): Promise<string> {\n try {\n const result = await Util.generateBase64QR(payload, size, ecl);\n return result;\n\n } catch (error: any) {\n throw new Error(error);\n }\n }\n public static async base64WithLogo(payload: string, size: number = 400, ecl: eclType, logoPath: string): Promise<string> {\n try {\n\n const result = await Util.generateBase64QrWithLogo(payload, size, ecl, logoPath);\n return result;\n\n } catch (error: any) {\n throw new Error(error);\n }\n }\n public static async svg(payload: string, size: number = 400, ecl: eclType, fileName: string, filePath: string): Promise<string | boolean> {\n try {\n const result = await Util.generateSvgQR(payload, size, ecl, fileName, filePath);\n return result;\n\n } catch (error: any) {\n throw new Error(error);\n }\n }\n public static async svgWithLogo(payload: string, size: number = 400, ecl: eclType, fileName: string, filePath: string, logoPath: string): Promise<string | boolean> {\n try {\n const result = await Util.generateSvgQRWithLogo(payload, size, ecl, fileName, filePath, logoPath);\n return result;\n\n } catch (error: any) {\n throw new Error(error);\n }\n }\n\n public static async svgFile(payload: string, size: number = 400, ecl: eclType, fileName: string, filePath: string): Promise<boolean> {\n try {\n\n const result = await Util.generateSvgQRFile(payload, size, ecl, fileName, filePath);\n return result;\n\n } catch (error: any) {\n throw new Error(error);\n }\n }\n public static async svgWithLogoFile(payload: string, size: number = 400, ecl: eclType, fileName: string, filePath: string, logoPath: string): Promise<boolean> {\n try {\n\n // const base64Data = await Util.generateBase64QrWithLogo(payload, size, ecl, logoPath);\n // const result = await Util.base64ToSvg(base64Data, fileName, filePath);\n\n const result = await Util.generateSvgQRWithLogoFile(payload, size, ecl, fileName, filePath, logoPath);\n return result;\n\n } catch (error: any) {\n throw new Error(error);\n }\n }\n\n}","import Init from \"./lib/init\";\nimport { QRCodeOptions } from './types/dataType';\nclass QR {\n\n constructor() {}\n\n private static validateLogoPath(logoPath: string | null): string | null {\n if (!logoPath) return null;\n\n if (!/\\.(png|svg)$/i.test(logoPath)) {\n throw new Error(`Invalid logo file type \"${logoPath}\". Only .png or .svg files are allowed.`);\n }\n\n return logoPath;\n }\n\n public static generate(payload: any, options: QRCodeOptions): Promise<string | boolean> {\n \n const { format = 'png', size = 400, errorCorrection = 'M', filePath, fileName, logoPath } = options;\n \n const validLogoPath = this.validateLogoPath(logoPath ?? '');\n\n switch (format) {\n case 'png':\n return logoPath\n ? Init.pngWithLogo(payload, size, errorCorrection, fileName!, filePath!, validLogoPath!)\n : Init.png(payload, size, errorCorrection, fileName!, filePath!);\n case 'svg':\n return logoPath\n ? Init.svgWithLogo(payload, size, errorCorrection, fileName!, filePath!, validLogoPath!)\n : Init.svg(payload, size, errorCorrection, fileName!, filePath!);\n case 'base64':\n return logoPath\n ? Init.base64WithLogo(payload, size, errorCorrection, validLogoPath!)\n : Init.base64(payload, size, errorCorrection);\n default:\n throw new Error('Invalid format. Supported formats: png, svg, base64.');\n }\n }\n}\n// ✅ Fix export: Works for both CommonJS and ESM\nexport { QR };\nexport default QR;"],"mappings":"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","names":[]}