longurl-js
Version:
LongURL - Programmable URL management framework with entity-driven design and production-ready infrastructure
69 lines (68 loc) • 2.28 kB
JavaScript
;
/**
* 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);
}