/// import * as stream from "stream"; export type QRCodeErrorCorrectionLevel = "low" | "medium" | "quartile" | "high" | "L" | "M" | "Q" | "H"; export type QRCodeMaskPattern = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7; export type QRCodeToSJISFunc = (codePoint: string) => number; export interface QRCodeOptions { /** * QR Code version. If not specified the more suitable value will be calculated. */ version?: number | undefined; /** * Error correction level. * @default 'M' */ errorCorrectionLevel?: QRCodeErrorCorrectionLevel | undefined; /** * Mask pattern used to mask the symbol. * * If not specified the more suitable value will be calculated. */ maskPattern?: QRCodeMaskPattern | undefined; /** * Helper function used internally to convert a kanji to its Shift JIS value. * Provide this function if you need support for Kanji mode. */ toSJISFunc?: QRCodeToSJISFunc | undefined; } export type QRCodeDataURLType = "image/png" | "image/jpeg" | "image/webp"; export type QRCodeToDataURLOptions = QRCodeToDataURLOptionsJpegWebp | QRCodeToDataURLOptionsOther; export interface QRCodeToDataURLOptionsJpegWebp extends QRCodeRenderersOptions { /** * Data URI format. * @default 'image/png' */ type: "image/jpeg" | "image/webp"; rendererOpts?: | { /** * A number between `0` and `1` indicating image quality. * @default 0.92 */ quality?: number | undefined; } | undefined; } export interface QRCodeToDataURLOptionsOther extends QRCodeRenderersOptions { /** * Data URI format. * @default 'image/png' */ type?: Exclude | undefined; } export type QRCodeStringType = "utf8" | "svg" | "terminal"; export type QRCodeToStringOptions = QRCodeToStringOptionsTerminal | QRCodeToStringOptionsOther; export interface QRCodeToStringOptionsTerminal extends QRCodeRenderersOptions { /** * Output format. * @default 'utf8' */ type: "terminal"; /** * Outputs smaller QR code. * @default false */ small?: boolean | undefined; } export interface QRCodeToStringOptionsOther extends QRCodeRenderersOptions { /** * Output format. * @default 'utf8' */ type?: Exclude | undefined; } export type QRCodeFileType = "png" | "svg" | "utf8"; export type QRCodeToFileOptions = QRCodeToFileOptionsPng | QRCodeToFileOptionsOther; export interface QRCodeToFileOptionsPng extends QRCodeRenderersOptions { /** * Output format. * @default 'png' */ type?: "png" | undefined; rendererOpts?: | { /** * Compression level for deflate. * @default 9 */ deflateLevel?: number | undefined; /** * Compression strategy for deflate. * @default 3 */ deflateStrategy?: number | undefined; } | undefined; } export interface QRCodeToFileOptionsOther extends QRCodeRenderersOptions { /** * Output format. * @default 'png' */ type: Exclude | undefined; } export type QRCodeFileStreamType = "png"; export interface QRCodeToFileStreamOptions extends QRCodeRenderersOptions { /** * Output format. Only png supported for file stream. */ type?: QRCodeFileStreamType | undefined; rendererOpts?: | { /** * Compression level for deflate. * @default 9 */ deflateLevel?: number | undefined; /** * Compression strategy for deflate. * @default 3 */ deflateStrategy?: number | undefined; } | undefined; } export type QRCodeBufferType = "png"; export interface QRCodeToBufferOptions extends QRCodeRenderersOptions { /** * Output format. Only png supported for Buffer. */ type?: QRCodeBufferType | undefined; rendererOpts?: | { /** * Compression level for deflate. * @default 9 */ deflateLevel?: number | undefined; /** * Compression strategy for deflate. * @default 3 */ deflateStrategy?: number | undefined; } | undefined; } export interface QRCodeRenderersOptions extends QRCodeOptions { /** * Define how much wide the quiet zone should be. * @default 4 */ margin?: number | undefined; /** * Scale factor. A value of `1` means 1px per modules (black dots). * @default 4 */ scale?: number | undefined; /** * Forces a specific width for the output image. * If width is too small to contain the qr symbol, this option will be ignored. * Takes precedence over `scale`. */ width?: number | undefined; color?: | { /** * Color of dark module. Value must be in hex format (RGBA). * Note: dark color should always be darker than `color.light`. * @default '#000000ff' */ dark?: string | undefined; /** * Color of light module. Value must be in hex format (RGBA). * @default '#ffffffff' */ light?: string | undefined; } | undefined; } export type QRCodeSegmentMode = "alphanumeric" | "numeric" | "byte" | "kanji"; export type QRCodeSegment = | QRCodeNumericSegment | QRCodeAlphanumericSegment | QRCodeByteSegment | QRCodeKanjiSegment | { mode?: never; data: string | Buffer | Uint8ClampedArray | Uint8Array; }; export interface QRCodeNumericSegment { mode: "numeric"; data: string | number; } export interface QRCodeAlphanumericSegment { mode: "alphanumeric"; data: string; } export interface QRCodeByteSegment { mode: "byte"; data: Buffer | Uint8ClampedArray | Uint8Array; } export interface QRCodeKanjiSegment { mode: "kanji"; data: string; } export interface QRCode { /** * BitMatrix class with modules data */ modules: BitMatrix; /** * Calculated QR Code version */ version: number; /** * Error Correction Level */ errorCorrectionLevel: ErrorCorrectionLevel; /** * Calculated Mask pattern */ maskPattern: QRCodeMaskPattern | undefined; /** * Generated segments */ segments: GeneratedQRCodeSegment[]; } /** * Helper class to handle QR Code symbol modules. */ export interface BitMatrix { /** * Symbol size. */ size: number; data: Uint8Array; reservedBit: Uint8Array; /** * Set bit value at specified location * If reserved flag is set, this bit will be ignored during masking process. */ set(row: number, col: number, value: number, reserved: boolean): void; /** * @return Bit value at specified location. */ get(row: number, col: number): number; /** * Applies xor operator at specified location (used during masking process). */ xor(row: number, col: number, value: number): void; /** * Check if bit at specified location is reserved. */ isReserved(row: number, col: number): number; } export interface ErrorCorrectionLevel { bit: 0 | 1 | 2 | 3; } export type ModeId = "Numeric" | "Alphanumeric" | "Byte" | "Kanji"; export interface Mode { id: TModeId; bit: number; ccBits: readonly number[]; } export type GeneratedQRCodeSegment = NumericData | AlphanumericData | ByteData | KanjiData; export interface DataSegment { getLength(): number; getBitsLength(): number; } export interface NumericData extends DataSegment { mode: Mode<"Numeric">; data: string; } export interface AlphanumericData extends DataSegment { mode: Mode<"Alphanumeric">; data: string; } export interface ByteData extends DataSegment { mode: Mode<"Byte">; data: Uint8Array; } export interface KanjiData extends DataSegment { mode: Mode<"Kanji">; data: string; } /** * Creates QR Code symbol and returns a qrcode object. * @param text Text to encode or a list of objects describing segments. */ export function create(text: string | QRCodeSegment[], options?: QRCodeOptions): QRCode; /** * Draws qr code symbol to canvas. */ export function toCanvas( canvasElement: HTMLCanvasElement, text: string | QRCodeSegment[], callback: (error: Error | null | undefined) => void, ): void; /** * Draws qr code symbol to canvas. */ export function toCanvas( canvasElement: HTMLCanvasElement, text: string | QRCodeSegment[], options?: QRCodeRenderersOptions, ): Promise; /** * Draws qr code symbol to canvas. */ export function toCanvas( canvasElement: HTMLCanvasElement, text: string | QRCodeSegment[], options: QRCodeRenderersOptions, callback: (error: Error | null | undefined) => void, ): void; /** * Draws qr code symbol to canvas. */ export function toCanvas( text: string | QRCodeSegment[], callback: (error: Error | null | undefined, canvas: HTMLCanvasElement) => void, ): void; /** * Draws qr code symbol to canvas. */ export function toCanvas(text: string | QRCodeSegment[], options?: QRCodeRenderersOptions): Promise; /** * Draws qr code symbol to canvas. */ export function toCanvas( text: string | QRCodeSegment[], options: QRCodeRenderersOptions, callback: (error: Error | null | undefined, canvas: HTMLCanvasElement) => void, ): void; /** * Draws qr code symbol to node canvas. */ export function toCanvas( canvas: any, text: string | QRCodeSegment[], callback: (error: Error | null | undefined) => void, ): void; /** * Draws qr code symbol to node canvas. */ export function toCanvas(canvas: any, text: string | QRCodeSegment[], options?: QRCodeRenderersOptions): Promise; /** * Draws qr code symbol to node canvas. */ export function toCanvas( canvas: any, text: string | QRCodeSegment[], options: QRCodeRenderersOptions, callback: (error: Error | null | undefined) => void, ): void; /** * Returns a Data URI containing a representation of the QR Code image. */ export function toDataURL( canvasElement: HTMLCanvasElement, text: string | QRCodeSegment[], callback: (error: Error | null | undefined, url: string) => void, ): void; /** * Returns a Data URI containing a representation of the QR Code image. */ export function toDataURL( canvasElement: HTMLCanvasElement, text: string | QRCodeSegment[], options?: QRCodeToDataURLOptions, ): Promise; /** * Returns a Data URI containing a representation of the QR Code image. */ export function toDataURL( canvasElement: HTMLCanvasElement, text: string | QRCodeSegment[], options: QRCodeToDataURLOptions, callback: (error: Error | null | undefined, url: string) => void, ): void; /** * Returns a Data URI containing a representation of the QR Code image. */ export function toDataURL( text: string | QRCodeSegment[], callback: (error: Error | null | undefined, url: string) => void, ): void; /** * Returns a Data URI containing a representation of the QR Code image. */ export function toDataURL(text: string | QRCodeSegment[], options?: QRCodeToDataURLOptions): Promise; /** * Returns a Data URI containing a representation of the QR Code image. */ export function toDataURL( text: string | QRCodeSegment[], options: QRCodeToDataURLOptions, callback: (error: Error | null | undefined, url: string) => void, ): void; /** * Returns a string representation of the QR Code. */ export function toString( text: string | QRCodeSegment[], callback: (error: Error | null | undefined, string: string) => void, ): void; /** * Returns a string representation of the QR Code. */ export function toString(text: string | QRCodeSegment[], options?: QRCodeToStringOptions): Promise; /** * Returns a string representation of the QR Code. */ export function toString( text: string | QRCodeSegment[], options: QRCodeToStringOptions, callback: (error: Error | null | undefined, string: string) => void, ): void; /** * Saves QR Code to image file. * If `options.type` is not specified, the format will be guessed from file extension. */ export function toFile( path: string, text: string | QRCodeSegment[], callback: (error: Error | null | undefined) => void, ): void; /** * Saves QR Code to image file. * If `options.type` is not specified, the format will be guessed from file extension. */ export function toFile(path: string, text: string | QRCodeSegment[], options?: QRCodeToFileOptions): Promise; /** * Saves QR Code to image file. * If `options.type` is not specified, the format will be guessed from file extension. */ export function toFile( path: string, text: string | QRCodeSegment[], options: QRCodeToFileOptions, callback: (error: Error | null | undefined) => void, ): void; /** * Writes QR Code image to stream. Only works with png format for now. */ export function toFileStream( stream: stream.Writable, text: string | QRCodeSegment[], callback: (error: Error | null | undefined) => void, ): void; /** * Writes QR Code image to stream. Only works with png format for now. */ export function toFileStream( stream: stream.Writable, text: string | QRCodeSegment[], options?: QRCodeToFileStreamOptions, ): Promise; /** * Writes QR Code image to stream. Only works with png format for now. */ export function toFileStream( stream: stream.Writable, text: string | QRCodeSegment[], options: QRCodeToFileStreamOptions, callback: (error: Error | null | undefined) => void, ): void; /** * Returns a Buffer containing a representation of the QR Code image. Only works with png format. */ export function toBuffer( text: string | QRCodeSegment[], callback: (error: Error | null | undefined, buffer: Buffer) => void, ): void; /** * Returns a Buffer containing a representation of the QR Code image. Only works with png format. */ export function toBuffer(text: string | QRCodeSegment[], options?: QRCodeToBufferOptions): Promise; /** * Returns a Buffer containing a representation of the QR Code image. Only works with png format. */ export function toBuffer( text: string | QRCodeSegment[], options: QRCodeToBufferOptions, callback: (error: Error | null | undefined, buffer: Buffer) => void, ): void;