From 4a362a17c38eb1cf6a453bc8d7d82bea35536b7e Mon Sep 17 00:00:00 2001 From: york yao Date: Wed, 24 May 2017 22:11:17 +0800 Subject: [PATCH] improve types of qrcode@0.8.2 --- types/qrcode/index.d.ts | 218 +++++++++++++++++++++++++++++++---- types/qrcode/qrcode-tests.ts | 58 ++++++++-- 2 files changed, 243 insertions(+), 33 deletions(-) diff --git a/types/qrcode/index.d.ts b/types/qrcode/index.d.ts index f3f355d90b..cb2ce4a9b7 100644 --- a/types/qrcode/index.d.ts +++ b/types/qrcode/index.d.ts @@ -1,35 +1,203 @@ -// Type definitions for qrcode +// Type definitions for qrcode 0.8.2 // Project: https://github.com/soldair/node-qrcode // Definitions by: York Yao // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -type QRCodeOptions = { - errorCorrectLevel?: "minimum" | "medium" | "high" | "max"; +/// + +import * as stream from "stream"; + +export interface QRCodeOptions { + /** + * QR Code version. If not specified the more suitable value will be calculated. + */ + version?: number; + /** + * Error correction level. + * Possible values are low, medium, quartile, high or L, M, Q, H. + * Default: M + */ + errorCorrectionLevel?: "low" | "medium" | "quartile" | "high" | "L" | "M" | "Q" | "H"; + /** + * Helper function used internally to convert a kanji to its Shift JIS value. + * Provide this function if you need support for Kanji mode. + */ + toSJISFunc?: Function; } -declare module "qrcode" { - var qrcode: { - toDataURL(text: string, callback: (error: Error, dataURL: string) => void): void; - toDataURL(text: string, options: QRCodeOptions, callback: (error: Error, dataURL: string) => void): void; - draw(text: string, callback: (error: Error, canvas: HTMLCanvasElement) => void): void; - draw(text: string, options: QRCodeOptions, callback: (error: Error, canvas: HTMLCanvasElement) => void): void; - drawSvg(text: string, callback: (error: Error, svgString: string) => void): void; - drawSvg(text: string, options: QRCodeOptions, callback: (error: Error, svgString: string) => void): void; - save(path: string, text: string, callback: (error: Error, written: any) => void): void; - save(path: string, text: string, options: QRCodeOptions, callback: (error: Error, written: any) => void): void; - drawText(text: string, callback: (error: Error) => void): void; - drawText(text: string, options: QRCodeOptions, callback: (error: Error) => void): void; - drawBitArray(text: string, callback: (error: Error, bits: any, width: number) => void): void; - drawBitArray(text: string, options: QRCodeOptions, callback: (error: Error, bits: any, width: number) => void): void; +export interface QRCodeToDataURLOptions extends QRCodeRenderersOptions { + /** + * Data URI format. + * Default: image/png + */ + type?: "image/png" | "image/jpeg" | "image/webp"; + rendererOpts?: { + /** + * A Number between 0 and 1 indicating image quality if the requested type is image/jpeg or image/webp. + * Default: 0.92 + */ + quality?: number; }; - export = qrcode; } -declare var QRCodeLib: { - QRCodeDraw: { - new (): { - draw(element: HTMLCanvasElement, text: string, callback: (error: Error, canvas: HTMLCanvasElement) => void): void; - draw(element: HTMLCanvasElement, text: string, options: QRCodeOptions, callback: (error: Error, canvas: HTMLCanvasElement) => void): void; - } +export interface QRCodeToStringOptions extends QRCodeOptions { + /** + * Output format. + * Default: utf8 + */ + type?: "utf8" | "svg" | "terminal"; +} + +export interface QRCodeToFileOptions extends QRCodeRenderersOptions { + /** + * Output format. + * Default: png + */ + type?: "png" | "svg" | "utf8"; + rendererOpts?: { + /** + * Compression level for deflate. + * Default: 9 + */ + deflateLevel?: number; + /** + * Compression strategy for deflate. + * Default: 3 + */ + deflateStrategy?: number; }; -}; +} + +export interface QRCodeRenderersOptions extends QRCodeOptions { + /** + * Define how much wide the quiet zone should be. + * Default: 4 + */ + margin?: number; + /** + * Scale factor. A value of 1 means 1px per modules (black dots). + * Default: 4 + */ + scale?: number; + 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; + /** + * Color of light module. Value must be in hex format (RGBA). + * Default: #ffffffff + */ + light?: string; + }; +} + +export interface QRCodeSegment { + data: string; + mode: 'alphanumeric' | 'numeric'; +} + +export interface QRCode { + /** + * Bitmatrix class with modules data + */ + modules: any; + /** + * Calculated QR Code version + */ + version: number; + /** + * Error Correction Level + */ + errorCorrectionLevel: number; + /** + * Calculated Mask pattern + */ + maskPattern: any; + /** + * Generated segments + */ + segments: QRCodeSegment[]; +} + +/** + * Creates QR Code symbol and returns a qrcode object. + */ +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) => void): void; +/** + * Draws qr code symbol to canvas. + */ +export function toCanvas(canvasElement: HTMLCanvasElement, text: string | QRCodeSegment[], options: QRCodeOptions, callback: (error: Error) => void): void; +/** + * Draws qr code symbol to canvas. + */ +export function toCanvas(text: string | QRCodeSegment[], callback: (error: Error, canvas: HTMLCanvasElement) => void): void; +/** + * Draws qr code symbol to canvas. + */ +export function toCanvas(text: string | QRCodeSegment[], options: QRCodeOptions, callback: (error: Error, canvas: HTMLCanvasElement) => void): void; +/** + * Draws qr code symbol to node canvas. + */ +export function toCanvas(canvas: any, text: string | QRCodeSegment[], callback: (error: Error) => void): void; +/** + * Draws qr code symbol to node canvas. + */ +export function toCanvas(canvas: any, text: string | QRCodeSegment[], options: QRCodeOptions, callback: (error: Error) => 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, 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, callback: (error: Error, 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, url: string) => void): void; +/** + * Returns a Data URI containing a representation of the QR Code image. + */ +export function toDataURL(text: string | QRCodeSegment[], options: QRCodeToDataURLOptions, callback: (error: Error, url: string) => void): void; + +/** + * Returns a string representation of the QR Code. + * If choosen output format is svg it will returns a string containing xml code. + */ +export function toString(text: string | QRCodeSegment[], callback: (error: Error, string: string) => void): void; +/** + * Returns a string representation of the QR Code. + * If choosen output format is svg it will returns a string containing xml code. + */ +export function toString(text: string | QRCodeSegment[], options: QRCodeToStringOptions, callback: (error: Error, string: string) => void): void; + +/** + * Saves QR Code to image file. + * If options.type is not specified, the format will be guessed from file extension. + * Recognized extensions are png, svg, txt. + */ +export function toFile(path: string, text: string | QRCodeSegment[], callback: (error: Error) => void): void; +/** + * Saves QR Code to image file. + * If options.type is not specified, the format will be guessed from file extension. + * Recognized extensions are png, svg, txt. + */ +export function toFile(path: string, text: string | QRCodeSegment[], options: QRCodeToFileOptions, callback: (error: Error) => 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) => 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: QRCodeOptions, callback: (error: Error) => void): void; diff --git a/types/qrcode/qrcode-tests.ts b/types/qrcode/qrcode-tests.ts index eecfb4a0d1..6a94a5f580 100644 --- a/types/qrcode/qrcode-tests.ts +++ b/types/qrcode/qrcode-tests.ts @@ -1,14 +1,56 @@ import * as QRCode from 'qrcode'; -QRCode.toDataURL('i am a pony!', function (err, url) { +const canvas = document.getElementById('canvas') as HTMLCanvasElement; + +QRCode.toCanvas(canvas, 'sample text', function (error) { + if (error) console.error(error) + console.log('success!'); +}); + +QRCode.toDataURL('I am a pony!', function (err, url) { console.log(url); }); -var qrcodedraw = new QRCodeLib.QRCodeDraw(); - -qrcodedraw.draw(document.getElementById('test') as HTMLCanvasElement, "this text will be in the code!", function (error, canvas) { - if (error) { - return console.log('Error =( ', error); - } - console.log('success!'); +QRCode.toDataURL('some text', { errorCorrectionLevel: 'H' }, function (err, url) { + console.log(url); +}); + +QRCode.toDataURL('some text', { version: 2 }, function (err, url) { + console.log(url); +}); + +QRCode.toDataURL([ + { data: 'ABCDEFG', mode: 'alphanumeric' }, + { data: '0123456', mode: 'numeric' } +], function (err, url) { + console.log(url); +}); + +QRCode.toCanvas('text', { errorCorrectionLevel: 'H' }, function (err, canvas) { + if (err) throw err; +}); + +QRCode.toDataURL('text', { + errorCorrectionLevel: 'H', + type: 'image/jpeg', + rendererOpts: { + quality: 0.3 + } +}, function (err, url) { + if (err) throw err; +}); + +QRCode.toString('http://www.google.com', function (err, string) { + if (err) throw err; + console.log(string); +}); + +QRCode.toFile('path/to/filename.png', 'Some text', { + color: { + dark: '#00F', // Blue dots + light: '#0000' // Transparent background + } +}, function (err) { + if (err) throw err; + console.log('done'); });