UNPKG

longurl-js

Version:

LongURL - Programmable URL management framework with entity-driven design and production-ready infrastructure

69 lines (68 loc) 2.28 kB
"use strict"; /** * QR Code Generator * * Handles QR code generation for URLs using the qrcode package. * Provides compressed, optimized QR codes for storage and sharing. */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateQRCode = generateQRCode; exports.generateOptimizedQRCode = generateOptimizedQRCode; exports.isValidQRCodeDataUrl = isValidQRCodeDataUrl; const qrcode_1 = __importDefault(require("qrcode")); /** * Generate a QR code for a URL as a base64 data URL * * @param url The URL to encode in the QR code * @param options QR code generation options * @returns Base64 data URL of the QR code image */ async function generateQRCode(url, options = {}) { try { const { width = 256, margin = 2, color = { dark: '#000000', light: '#FFFFFF' }, errorCorrectionLevel = 'M' } = options; // Generate QR code as data URL (base64) const qrCodeDataUrl = await qrcode_1.default.toDataURL(url, { width, margin, color, errorCorrectionLevel }); return qrCodeDataUrl; } catch (error) { throw new Error(`Failed to generate QR code: ${error instanceof Error ? error.message : String(error)}`); } } /** * Generate a QR code with optimized settings for storage * * @param url The URL to encode * @returns Compressed base64 QR code data URL */ async function generateOptimizedQRCode(url) { return generateQRCode(url, { width: 200, // Smaller size for storage efficiency margin: 1, // Minimal margin errorCorrectionLevel: 'L' // Lower error correction for smaller size }); } /** * Validate if a string is a valid QR code data URL * * @param qrCodeDataUrl The data URL to validate * @returns True if valid, false otherwise */ function isValidQRCodeDataUrl(qrCodeDataUrl) { if (!qrCodeDataUrl || typeof qrCodeDataUrl !== 'string') { return false; } // Check if it's a valid data URL format const dataUrlPattern = /^data:image\/(png|jpeg|gif|webp);base64,/; return dataUrlPattern.test(qrCodeDataUrl); }