UNPKG

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.

387 lines (383 loc) 14.3 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var __async = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; // src/index.ts var src_exports = {}; __export(src_exports, { QR: () => QR, default: () => src_default }); module.exports = __toCommonJS(src_exports); // src/lib/util.ts var import_fs = __toESM(require("fs")); var import_qrcode = __toESM(require("qrcode")); var import_sharp = __toESM(require("sharp")); var _Util = class _Util { }; _Util.generatePngQR = (payload, size = 400, ecl = "H", fileName, filePath) => __async(_Util, null, function* () { try { size = parseInt(String(size)); const result = new Promise((resolve, reject) => { import_qrcode.default.toFile( `${filePath}/${fileName}.png`, [{ data: payload }], { width: size, margin: 0.5, type: "png", errorCorrectionLevel: ecl }, (err, url) => { if (err) { reject(err); } else { resolve(url); } } ); }); return true; } catch (error) { throw new Error(error); } }); _Util.generatePngQRWithLogo = (payload, size = 400, ecl = "H", fileName, filePath, logoPath) => __async(_Util, null, function* () { try { size = parseInt(String(size)); const qrBuffer = yield import_qrcode.default.toBuffer( [{ data: payload }], { width: size, margin: 0.5, type: "png", errorCorrectionLevel: ecl } ); const qrImage = (0, import_sharp.default)(qrBuffer).resize(size, size); const logoImage = (0, import_sharp.default)(logoPath).resize(Math.floor(size / 4), Math.floor(size / 4), { fit: "contain", background: { r: 255, g: 255, b: 255, alpha: 0 } }).toFormat("png"); const compositeImage = yield qrImage.composite([{ input: yield logoImage.toBuffer(), gravity: "center" }]).png().toBuffer(); import_fs.default.writeFileSync(`${filePath}/${fileName}.png`, compositeImage); return true; } catch (error) { throw new Error(error); } }); _Util.generateSvgQR = (payload, size = 400, ecl = "H", fileName, filePath) => __async(_Util, null, function* () { try { size = parseInt(String(size)); if (filePath && fileName) { const result = new Promise((resolve, reject) => { import_qrcode.default.toFile( `${filePath}/${fileName}.svg`, [{ data: payload }], { width: size, margin: 0.5, type: "svg", errorCorrectionLevel: ecl }, (err, url) => { if (err) { reject(err); } else { resolve(url); } } ); }); return true; } else { const result = new Promise((resolve, reject) => { import_qrcode.default.toString([{ data: payload }], { type: "svg", width: size, margin: 0.5, errorCorrectionLevel: ecl }, (err, url) => { if (err) { reject(err); } else { if (url) { resolve(url); } else { reject(new Error("QRCode generation failed")); } } }); }); return result; } } catch (error) { throw new Error(error); } }); _Util.generateSvgQRWithLogo = (payload, size = 400, ecl = "H", fileName, filePath, logoPath) => __async(_Util, null, function* () { try { size = parseInt(String(size)); const qrBuffer = yield import_qrcode.default.toBuffer(payload, { width: size, margin: 0.5, errorCorrectionLevel: ecl }); const qrImage = (0, import_sharp.default)(qrBuffer).resize(size, size); const logoSize = Math.floor(size / 4); const logoImage = (0, import_sharp.default)(logoPath).resize(logoSize, logoSize, { fit: "contain", background: { r: 255, g: 255, b: 255, alpha: 0 } }).toFormat("png"); const compositeImage = yield qrImage.composite([{ input: yield logoImage.toBuffer(), gravity: "center" }]).png().toBuffer(); const base64Data = `data:image/png;base64,${compositeImage.toString("base64")}`; const svgData = `<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 400 400"> <image href="${base64Data}" width="400" height="400"/> </svg>`; if (filePath && fileName) { import_fs.default.writeFileSync(`${filePath}/${fileName}.svg`, svgData, "utf-8"); return true; } return svgData; } catch (error) { throw new Error(error); } }); _Util.generateSvgQRFile = (payload, size = 400, ecl = "H", fileName, filePath) => __async(_Util, null, function* () { try { size = parseInt(String(size)); const result = new Promise((resolve, reject) => { import_qrcode.default.toFile( `${filePath}/${fileName}.svg`, [{ data: payload }], { width: size, margin: 0.5, type: "svg", errorCorrectionLevel: ecl }, (err, url) => { if (err) { reject(err); } else { resolve(url); } } ); }); return true; } catch (error) { throw new Error(error); } }); _Util.generateSvgQRWithLogoFile = (payload, size = 400, ecl = "H", fileName, filePath, logoPath) => __async(_Util, null, function* () { try { size = parseInt(String(size)); const qrBuffer = yield import_qrcode.default.toBuffer(payload, { width: size, margin: 0.5, errorCorrectionLevel: ecl }); const qrImage = (0, import_sharp.default)(qrBuffer).resize(size, size); const logoSize = Math.floor(size / 4); const logoImage = (0, import_sharp.default)(logoPath).resize(logoSize, logoSize, { fit: "contain", background: { r: 255, g: 255, b: 255, alpha: 0 } }).toFormat("png"); const compositeImage = yield qrImage.composite([{ input: yield logoImage.toBuffer(), gravity: "center" }]).png().toBuffer(); const base64Data = `data:image/png;base64,${compositeImage.toString("base64")}`; const svgData = `<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 400 400"> <image href="${base64Data}" width="400" height="400"/> </svg>`; import_fs.default.writeFileSync(`${filePath}/${fileName}.svg`, svgData, "utf-8"); return true; } catch (error) { throw new Error(error); } }); _Util.generateBase64QR = (payload, size = 400, ecl = "H") => __async(_Util, null, function* () { try { size = parseInt(String(size)); const result = new Promise((resolve, reject) => { import_qrcode.default.toDataURL([{ data: payload }], { width: size, margin: 0.5, errorCorrectionLevel: ecl }, (err, url) => { if (err) { reject(err); } else { if (url) { resolve(url); } else { reject(new Error("QRCode generation failed")); } } }); }); return result; } catch (error) { throw new Error(error); } }); _Util.generateBase64QrWithLogo = (payload, size = 400, ecl = "H", logoPath) => __async(_Util, null, function* () { try { size = parseInt(String(size)); const qrBuffer = yield import_qrcode.default.toBuffer(payload, { width: size, margin: 0.5, errorCorrectionLevel: ecl }); const qrImage = (0, import_sharp.default)(qrBuffer).resize(size, size); const logoSize = Math.floor(size / 4); const logoImage = (0, import_sharp.default)(logoPath).resize(logoSize, logoSize, { fit: "contain", background: { r: 255, g: 255, b: 255, alpha: 0 } }).toFormat("png"); const compositeImage = yield qrImage.composite([{ input: yield logoImage.toBuffer(), gravity: "center" }]).png().toBuffer(); return `data:image/png;base64,${compositeImage.toString("base64")}`; } catch (error) { throw new Error(error); } }); _Util.base64ToImage = (base64Data, fileName, filePath) => __async(_Util, null, function* () { try { const data = base64Data.replace(/^data:image\/\w+;base64,/, ""); const buf = Buffer.from(data, "base64"); import_fs.default.writeFileSync(`${filePath}/${fileName}`, buf); return true; } catch (error) { throw new Error(error); } }); _Util.base64ToSvg = (base64Data, fileName, filePath) => __async(_Util, null, function* () { try { const svgData = `<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 400 400"> <image href="${base64Data}" width="400" height="400"/> </svg>`; import_fs.default.writeFileSync(`${filePath}/${fileName}`, svgData, "utf-8"); return true; } catch (error) { throw new Error(error); } }); var Util = _Util; // src/lib/init.ts var Init = class { static png(payload, size = 400, ecl, fileName, filePath) { return __async(this, null, function* () { try { const result = yield Util.generatePngQR(payload, size, ecl, fileName, filePath); return result; } catch (error) { throw new Error(error); } }); } static pngWithLogo(payload, size = 400, ecl, fileName, filePath, logoPath) { return __async(this, null, function* () { try { const result = yield Util.generatePngQRWithLogo(payload, size, ecl, fileName, filePath, logoPath); return result; } catch (error) { throw new Error(error); } }); } static base64(payload, size = 400, ecl) { return __async(this, null, function* () { try { const result = yield Util.generateBase64QR(payload, size, ecl); return result; } catch (error) { throw new Error(error); } }); } static base64WithLogo(payload, size = 400, ecl, logoPath) { return __async(this, null, function* () { try { const result = yield Util.generateBase64QrWithLogo(payload, size, ecl, logoPath); return result; } catch (error) { throw new Error(error); } }); } static svg(payload, size = 400, ecl, fileName, filePath) { return __async(this, null, function* () { try { const result = yield Util.generateSvgQR(payload, size, ecl, fileName, filePath); return result; } catch (error) { throw new Error(error); } }); } static svgWithLogo(payload, size = 400, ecl, fileName, filePath, logoPath) { return __async(this, null, function* () { try { const result = yield Util.generateSvgQRWithLogo(payload, size, ecl, fileName, filePath, logoPath); return result; } catch (error) { throw new Error(error); } }); } static svgFile(payload, size = 400, ecl, fileName, filePath) { return __async(this, null, function* () { try { const result = yield Util.generateSvgQRFile(payload, size, ecl, fileName, filePath); return result; } catch (error) { throw new Error(error); } }); } static svgWithLogoFile(payload, size = 400, ecl, fileName, filePath, logoPath) { return __async(this, null, function* () { try { const result = yield Util.generateSvgQRWithLogoFile(payload, size, ecl, fileName, filePath, logoPath); return result; } catch (error) { throw new Error(error); } }); } }; // src/index.ts var QR = class { constructor() { } static validateLogoPath(logoPath) { if (!logoPath) return null; if (!/\.(png|svg)$/i.test(logoPath)) { throw new Error(`Invalid logo file type "${logoPath}". Only .png or .svg files are allowed.`); } return logoPath; } static generate(payload, options) { const { format = "png", size = 400, errorCorrection = "M", filePath, fileName, logoPath } = options; const validLogoPath = this.validateLogoPath(logoPath != null ? logoPath : ""); switch (format) { case "png": return logoPath ? Init.pngWithLogo(payload, size, errorCorrection, fileName, filePath, validLogoPath) : Init.png(payload, size, errorCorrection, fileName, filePath); case "svg": return logoPath ? Init.svgWithLogo(payload, size, errorCorrection, fileName, filePath, validLogoPath) : Init.svg(payload, size, errorCorrection, fileName, filePath); case "base64": return logoPath ? Init.base64WithLogo(payload, size, errorCorrection, validLogoPath) : Init.base64(payload, size, errorCorrection); default: throw new Error("Invalid format. Supported formats: png, svg, base64."); } } }; var src_default = QR; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { QR }); //# sourceMappingURL=index.js.map