UNPKG

qrcode-vue3

Version:

Add a style and an image to your QR code Vue3

78 lines (64 loc) 2.51 kB
import type { Gradient, RequiredOptions } from "../core/QROptions"; function sanitizeGradient(gradient: Gradient): Gradient { const newGradient = { ...gradient }; if (!newGradient.colorStops || !newGradient.colorStops.length) { // eslint-disable-next-line no-throw-literal throw "Field 'colorStops' is required in gradient"; } if (newGradient.rotation) { newGradient.rotation = Number(newGradient.rotation); } else { newGradient.rotation = 0; } newGradient.colorStops = newGradient.colorStops.map((colorStop: { offset: number; color: string }) => ({ ...colorStop, offset: Number(colorStop.offset) })); return newGradient; } export default function sanitizeOptions(options: RequiredOptions): RequiredOptions { const newOptions = { ...options }; newOptions.width = Number(newOptions.width); newOptions.height = Number(newOptions.height); newOptions.margin = Number(newOptions.margin); newOptions.imageOptions = { ...newOptions.imageOptions, hideBackgroundDots: Boolean(newOptions.imageOptions.hideBackgroundDots), imageSize: Number(newOptions.imageOptions.imageSize), margin: Number(newOptions.imageOptions.margin) }; if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) { newOptions.margin = Math.min(newOptions.width, newOptions.height); } newOptions.dotsOptions = { ...newOptions.dotsOptions }; if (newOptions.dotsOptions.gradient) { newOptions.dotsOptions.gradient = sanitizeGradient(newOptions.dotsOptions.gradient); } if (newOptions.cornersSquareOptions) { newOptions.cornersSquareOptions = { ...newOptions.cornersSquareOptions }; if (newOptions.cornersSquareOptions.gradient) { newOptions.cornersSquareOptions.gradient = sanitizeGradient(newOptions.cornersSquareOptions.gradient); } } if (newOptions.cornersDotOptions) { newOptions.cornersDotOptions = { ...newOptions.cornersDotOptions }; if (newOptions.cornersDotOptions.gradient) { newOptions.cornersDotOptions.gradient = sanitizeGradient(newOptions.cornersDotOptions.gradient); } } if (newOptions.backgroundOptions) { newOptions.backgroundOptions = { ...newOptions.backgroundOptions }; if (newOptions.backgroundOptions.gradient) { newOptions.backgroundOptions.gradient = sanitizeGradient(newOptions.backgroundOptions.gradient); } } return newOptions; }