Skip to content

Commit

Permalink
Add d.ts declaration
Browse files Browse the repository at this point in the history
  • Loading branch information
Denys Kozak committed Jan 10, 2021
1 parent 7396a3a commit 304bdf2
Show file tree
Hide file tree
Showing 24 changed files with 187 additions and 57 deletions.
12 changes: 12 additions & 0 deletions .npmignore
@@ -0,0 +1,12 @@
coverage
src
.editorconfig
.eslintignore
.eslintrc.js
.gitignore
.prettierrc.js
jest.config.js
tsconfig.json
webpack.config.build.js
webpack.config.common.js
webpack.config.dev-server.js
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 5 additions & 3 deletions package.json
@@ -1,8 +1,9 @@
{
"name": "qr-code-styling",
"version": "1.3.1",
"version": "1.3.2",
"description": "Add a style and an image to your QR code",
"main": "lib/qr-code-styling.js",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"files": [
"lib"
],
Expand Down Expand Up @@ -54,7 +55,8 @@
"qrimage",
"image",
"qrlogo",
"logo"
"logo",
"design"
],
"author": "Denys Kozak <kozak.denys.dev@gmail.com>",
"license": "MIT",
Expand Down
26 changes: 0 additions & 26 deletions src/common.d.ts

This file was deleted.

2 changes: 2 additions & 0 deletions src/constants/cornerDotTypes.ts
@@ -1,3 +1,5 @@
import { CornerDotTypes } from "../types";

export default {
dot: "dot",
square: "square"
Expand Down
2 changes: 2 additions & 0 deletions src/constants/cornerSquareTypes.ts
@@ -1,3 +1,5 @@
import { CornerSquareTypes } from "../types";

export default {
dot: "dot",
square: "square",
Expand Down
2 changes: 2 additions & 0 deletions src/constants/dotTypes.ts
@@ -1,3 +1,5 @@
import { DotTypes } from "../types";

export default {
dots: "dots",
rounded: "rounded",
Expand Down
2 changes: 2 additions & 0 deletions src/constants/errorCorrectionLevels.ts
@@ -1,3 +1,5 @@
import { ErrorCorrectionLevel } from "../types";

interface ErrorCorrectionLevels {
[key: string]: ErrorCorrectionLevel;
}
Expand Down
2 changes: 2 additions & 0 deletions src/constants/gradientTypes.ts
@@ -1,3 +1,5 @@
import { GradientTypes } from "../types";

export default {
radial: "radial",
linear: "linear"
Expand Down
2 changes: 2 additions & 0 deletions src/constants/modes.ts
@@ -1,3 +1,5 @@
import { Mode } from "../types";

interface Modes {
[key: string]: Mode;
}
Expand Down
2 changes: 2 additions & 0 deletions src/constants/qrTypes.ts
@@ -1,3 +1,5 @@
import { TypeNumber } from "../types";

interface TypesMap {
[key: number]: TypeNumber;
}
Expand Down
7 changes: 4 additions & 3 deletions src/core/QRCanvas.ts
Expand Up @@ -3,8 +3,9 @@ import errorCorrectionPercents from "../constants/errorCorrectionPercents";
import QRDot from "./QRDot";
import QRCornerSquare from "./QRCornerSquare";
import QRCornerDot from "./QRCornerDot";
import { Options, Gradient } from "./QROptions";
import { RequiredOptions, Gradient } from "./QROptions";
import gradientTypes from "../constants/gradientTypes";
import { QRCode } from "../types";

type FilterFunction = (i: number, j: number) => boolean;

Expand All @@ -30,12 +31,12 @@ const dotMask = [

export default class QRCanvas {
_canvas: HTMLCanvasElement;
_options: Options;
_options: RequiredOptions;
_qr?: QRCode;
_image?: HTMLImageElement;

//TODO don't pass all options to this class
constructor(options: Options) {
constructor(options: RequiredOptions) {
this._canvas = document.createElement("canvas");
this._canvas.width = options.width;
this._canvas.height = options.height;
Expand Down
9 changes: 5 additions & 4 deletions src/core/QRCodeStyling.ts
Expand Up @@ -2,8 +2,9 @@ import getMode from "../tools/getMode";
import mergeDeep from "../tools/merge";
import downloadURI from "../tools/downloadURI";
import QRCanvas from "./QRCanvas";
import defaultOptions, { Options } from "./QROptions";
import defaultOptions, { Options, RequiredOptions } from "./QROptions";
import sanitizeOptions from "../tools/sanitizeOptions";
import { Extension, QRCode } from "../types";
import qrcode from "qrcode-generator";

type DownloadOptions = {
Expand All @@ -12,14 +13,14 @@ type DownloadOptions = {
};

export default class QRCodeStyling {
_options: Options;
_options: RequiredOptions;
_container?: HTMLElement;
_canvas?: QRCanvas;
_qr?: QRCode;
_drawingPromise?: Promise<void>;

constructor(options?: Partial<Options>) {
this._options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as Options) : defaultOptions;
this._options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as RequiredOptions) : defaultOptions;
this.update();
}

Expand All @@ -31,7 +32,7 @@ export default class QRCodeStyling {

update(options?: Partial<Options>): void {
QRCodeStyling._clearContainer(this._container);
this._options = options ? sanitizeOptions(mergeDeep(this._options, options) as Options) : this._options;
this._options = options ? sanitizeOptions(mergeDeep(this._options, options) as RequiredOptions) : this._options;

if (!this._options.data) {
return;
Expand Down
1 change: 1 addition & 0 deletions src/core/QRCornerDot.ts
@@ -1,4 +1,5 @@
import cornerDotTypes from "../constants/cornerDotTypes";
import { CornerDotType } from "../types";

type DrawArgs = {
x: number;
Expand Down
1 change: 1 addition & 0 deletions src/core/QRCornerSquare.ts
@@ -1,4 +1,5 @@
import cornerSquareTypes from "../constants/cornerSquareTypes";
import { CornerSquareType } from "../types";

type DrawArgs = {
x: number;
Expand Down
1 change: 1 addition & 0 deletions src/core/QRDot.ts
@@ -1,4 +1,5 @@
import dotTypes from "../constants/dotTypes";
import { DotType } from "../types";

type GetNeighbor = (x: number, y: number) => boolean;
type DrawArgs = {
Expand Down
64 changes: 49 additions & 15 deletions src/core/QROptions.ts
@@ -1,5 +1,14 @@
import qrTypes from "../constants/qrTypes";
import errorCorrectionLevels from "../constants/errorCorrectionLevels";
import {
DotType,
GradientType,
CornerSquareType,
CornerDotType,
TypeNumber,
ErrorCorrectionLevel,
Mode
} from "../types";

export type Gradient = {
type: GradientType;
Expand All @@ -11,23 +20,23 @@ export type Gradient = {
};

export type Options = {
width: number;
height: number;
width?: number;
height?: number;
data?: string;
image?: string;
qrOptions: {
typeNumber: TypeNumber;
qrOptions?: {
typeNumber?: TypeNumber;
mode?: Mode;
errorCorrectionLevel: ErrorCorrectionLevel;
errorCorrectionLevel?: ErrorCorrectionLevel;
};
imageOptions: {
hideBackgroundDots: boolean;
imageSize: number;
margin: number;
imageOptions?: {
hideBackgroundDots?: boolean;
imageSize?: number;
crossOrigin?: string;
margin?: number;
};
dotsOptions: {
type: DotType;
dotsOptions?: {
type?: DotType;
color?: string;
gradient?: Gradient;
};
Expand All @@ -41,17 +50,42 @@ export type Options = {
color?: string;
gradient?: Gradient;
};
backgroundOptions: {
backgroundOptions?: {
color?: string;
gradient?: Gradient;
};
};

const defaultOptions: Options = {
export interface RequiredOptions extends Options {
width: number;
height: number;
data: string;
qrOptions: {
typeNumber: TypeNumber;
mode?: Mode;
errorCorrectionLevel: ErrorCorrectionLevel;
};
imageOptions: {
hideBackgroundDots: boolean;
imageSize: number;
crossOrigin?: string;
margin: number;
};
dotsOptions: {
type: DotType;
color: string;
gradient?: Gradient;
};
backgroundOptions: {
color: string;
gradient?: Gradient;
};
}

const defaultOptions: RequiredOptions = {
width: 300,
height: 300,
data: undefined,
image: undefined,
data: "",
qrOptions: {
typeNumber: qrTypes[0],
mode: undefined,
Expand Down
2 changes: 1 addition & 1 deletion src/index.ts
Expand Up @@ -7,5 +7,5 @@ import errorCorrectionPercents from "./constants/errorCorrectionPercents";
import modes from "./constants/modes";
import qrTypes from "./constants/qrTypes";

export default QRCodeStyling;
export { dotTypes, cornerDotTypes, cornerSquareTypes, errorCorrectionLevels, errorCorrectionPercents, modes, qrTypes };
export default QRCodeStyling;
1 change: 1 addition & 0 deletions src/tools/getMode.ts
@@ -1,4 +1,5 @@
import modes from "../constants/modes";
import { Mode } from "../types";

export default function getMode(data: string): Mode {
switch (true) {
Expand Down
2 changes: 2 additions & 0 deletions src/tools/merge.ts
@@ -1,3 +1,5 @@
import { UnknownObject } from "../types";

const isObject = (obj: object): boolean => !!obj && typeof obj === "object" && !Array.isArray(obj);

export default function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject {
Expand Down
4 changes: 2 additions & 2 deletions src/tools/sanitizeOptions.ts
@@ -1,4 +1,4 @@
import { Gradient, Options } from "../core/QROptions";
import { Gradient, RequiredOptions } from "../core/QROptions";

function sanitizeGradient(gradient: Gradient): Gradient {
const newGradient = { ...gradient };
Expand All @@ -21,7 +21,7 @@ function sanitizeGradient(gradient: Gradient): Gradient {
return newGradient;
}

export default function sanitizeOptions(options: Options): Options {
export default function sanitizeOptions(options: RequiredOptions): RequiredOptions {
const newOptions = { ...options };

newOptions.width = Number(newOptions.width);
Expand Down

0 comments on commit 304bdf2

Please sign in to comment.