New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@qrcode-js/core

Package Overview
Dependencies
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@qrcode-js/core - npm Package Compare versions

Comparing version 0.1.0 to 0.2.0

7

lib/awesome-qr.d.ts
/// <reference types="node" />
import type { Options } from "./types";
import type { Options } from "./types.js";
export declare class AwesomeQR {

@@ -16,6 +16,5 @@ private createCanvas;

};
private static defaultComponentOptions;
static defaultOptions: Options;
constructor(canvas: any, createCanvas: Function, loadImage: Function, options: Partial<Options>);
draw(): Promise<Buffer | ArrayBuffer | string | undefined>;
constructor(canvas: HTMLCanvasElement | any, createCanvas: ((width: number, height: number) => HTMLCanvasElement) | Function, loadImage: Function, options: Options);
draw(): Promise<Buffer | string>;
private _clear;

@@ -22,0 +21,0 @@ static _removeColor(canvasContext: CanvasRenderingContext2D): void;

@@ -1,86 +0,8 @@

"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AwesomeQR = void 0;
var qrcode_1 = require("./qrcode");
var defaultScale = 0.4;
var AwesomeQR = /** @class */ (function () {
function AwesomeQR(canvas, createCanvas, loadImage, options) {
var _options = Object.assign({}, options);
Object.keys(AwesomeQR.defaultOptions).forEach(function (k) {
if (!(k in _options)) {
Object.defineProperty(_options, k, {
value: AwesomeQR.defaultOptions[k],
enumerable: true,
writable: true,
});
}
});
if (!_options.components) {
_options.components = AwesomeQR.defaultComponentOptions;
}
else if (typeof _options.components === "object") {
Object.keys(AwesomeQR.defaultComponentOptions).forEach(function (k) {
if (!(k in _options.components)) {
Object.defineProperty(_options.components, k, {
value: AwesomeQR.defaultComponentOptions[k],
enumerable: true,
writable: true,
});
}
else {
Object.defineProperty(_options.components, k, {
value: __assign(__assign({}, AwesomeQR.defaultComponentOptions[k]), _options.components[k]),
enumerable: true,
writable: true,
});
}
});
}
import { QRCodeModel, QRErrorCorrectLevel, QRUtil } from "./qrcode.js";
import merge from "lodash/merge.js";
const defaultScale = 0.4;
export class AwesomeQR {
constructor(canvas, createCanvas, loadImage, options) {
var _options = Object.assign({}, AwesomeQR.defaultOptions);
merge(_options, options);
this.createCanvas = createCanvas;

@@ -93,8 +15,8 @@ this.loadImage = loadImage;

this.canvasContext = this.canvas.getContext("2d");
this.qrCode = new qrcode_1.QRCodeModel(-1, this.options.correctLevel);
if (Number.isInteger(this.options.maskPattern)) {
this.qrCode.maskPattern = this.options.maskPattern;
this.qrCode = new QRCodeModel(-1, this.options.qr.correctLevel);
if (Number.isInteger(this.options.qr.maskPattern)) {
this.qrCode.maskPattern = this.options.qr.maskPattern;
}
if (Number.isInteger(this.options.version)) {
this.qrCode.typeNumber = this.options.version;
if (Number.isInteger(this.options.qr.version)) {
this.qrCode.typeNumber = this.options.qr.version;
}

@@ -104,12 +26,11 @@ this.qrCode.addData(this.options.text);

}
AwesomeQR.prototype.draw = function () {
var _this = this;
return new Promise(function (resolve) { return _this._draw().then(resolve); });
};
AwesomeQR.prototype._clear = function () {
draw() {
return new Promise((resolve) => this._draw().then(resolve));
}
_clear() {
this.canvasContext.clearRect(0, 0, this.canvas.width, this.canvas.height);
};
AwesomeQR._removeColor = function (canvasContext) {
var oldGlobalCompositeOperation = canvasContext.globalCompositeOperation;
var oldFillStyle = canvasContext.fillStyle;
}
static _removeColor(canvasContext) {
const oldGlobalCompositeOperation = canvasContext.globalCompositeOperation;
const oldFillStyle = canvasContext.fillStyle;
canvasContext.globalCompositeOperation = "destination-out";

@@ -120,4 +41,4 @@ canvasContext.fillStyle = "#FFFFFF";

canvasContext.fillStyle = oldFillStyle;
};
AwesomeQR._prepareRoundedCornerClip = function (canvasContext, x, y, w, h, r) {
}
static _prepareRoundedCornerClip(canvasContext, x, y, w, h, r) {
canvasContext.beginPath();

@@ -130,6 +51,6 @@ canvasContext.moveTo(x, y);

canvasContext.closePath();
};
AwesomeQR._getAverageRGB = function (createCanvas, image) {
var blockSize = 5;
var defaultRGB = {
}
static _getAverageRGB(createCanvas, image) {
const blockSize = 5;
const defaultRGB = {
r: 0,

@@ -139,5 +60,5 @@ g: 0,

};
var width, height;
var i = -4;
var rgb = {
let width, height;
let i = -4;
const rgb = {
r: 0,

@@ -147,7 +68,7 @@ g: 0,

};
var count = 0;
let count = 0;
height = image.naturalHeight || image.height;
width = image.naturalWidth || image.width;
var canvas = createCanvas(width, height);
var context = canvas.getContext("2d");
const canvas = createCanvas(width, height);
const context = canvas.getContext("2d");
if (!context) {

@@ -157,3 +78,3 @@ return defaultRGB;

context.drawImage(image, 0, 0);
var data;
let data;
try {

@@ -179,11 +100,11 @@ data = context.getImageData(0, 0, width, height);

return rgb;
};
AwesomeQR._drawDot = function (canvasContext, left, top, nSize, scale, round) {
}
static _drawDot(canvasContext, left, top, nSize, scale, round) {
AwesomeQR._prepareRoundedCornerClip(canvasContext, (left + (1 - scale) / 2) * nSize, (top + (1 - scale) / 2) * nSize, scale * nSize, scale * nSize, 0.5 * scale * round * nSize);
canvasContext.fill();
};
AwesomeQR._drawTelegramDot = function (canvasContext, left, top, nSize, round, otherCells) {
var x = left * nSize;
var y = top * nSize;
var roundPx = (round * nSize) / 2;
}
static _drawTelegramDot(canvasContext, left, top, nSize, round, otherCells) {
const x = left * nSize;
const y = top * nSize;
const roundPx = (round * nSize) / 2;
canvasContext.beginPath();

@@ -197,8 +118,7 @@ canvasContext.moveTo(x, y);

canvasContext.fill();
};
AwesomeQR.prototype._drawPoint = function (canvasContext, left, top, nSize, parameters, otherCells) {
var _a, _b, _c, _d;
var scale = ((_b = (_a = this.options.components) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.scale) || defaultScale;
var round = ((_d = (_c = this.options.components) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.round) || 0;
var drawFunction = this.options.drawFunction;
}
_drawPoint(canvasContext, left, top, nSize, parameters, otherCells) {
const scale = this.options.dots.scale || defaultScale;
const round = this.options.dots.round || 0;
const drawFunction = this.options.drawFunction;
if (drawFunction === undefined) {

@@ -213,7 +133,6 @@ return AwesomeQR._drawDot(canvasContext, left, top, nSize, scale, round);

}
};
AwesomeQR.prototype._drawFinder = function (canvasContext, left, top, size) {
var _a, _b;
}
_drawFinder(canvasContext, left, top, size) {
// range [0-1]
var rounded = Math.min(Math.max(((_b = (_a = this.options.components) === null || _a === void 0 ? void 0 : _a.finder) === null || _b === void 0 ? void 0 : _b.round) || 0, 0), 1);
const rounded = Math.min(Math.max(this.options.finder.round || 0, 0), 1);
AwesomeQR._prepareRoundedCornerClip(canvasContext, left * size, top * size, 7 * size, 7 * size, 3.5 * rounded * size);

@@ -225,234 +144,211 @@ canvasContext.fill();

canvasContext.fill();
};
AwesomeQR.prototype._draw = function () {
return __awaiter(this, void 0, void 0, function () {
var nCount, rawSize, rawMargin, rawViewportSize, margin, nSize, viewportSize, size, mainCanvas, mainCanvasContext, alignmentPatternCenters, logoSide, logoScale, logoMargin, logoSize, logoX, isInLogoZone, row, col, isBlkPosCtr, isLogoZone, isTiming, isAlignment, i, j, bIsDark, gradient, logoImage, logoScale, logoMargin, logoCornerRadius, logoSize, logoX, backgroundCanvas, backgroundCanvasContext, backgroundImage, backgroundDimming, avgRGB;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
nCount = this.qrCode.moduleCount;
rawSize = this.options.size;
rawMargin = this.options.margin;
if (rawMargin < 0 || rawMargin * 2 >= rawSize) {
rawMargin = 0;
}
async _draw() {
const nCount = this.qrCode.moduleCount;
const rawSize = this.options.size;
let rawMargin = this.options.margin;
if (rawMargin < 0 || rawMargin * 2 >= rawSize) {
rawMargin = 0;
}
const rawViewportSize = rawSize - 2 * rawMargin;
const margin = Math.ceil(rawMargin);
const nSize = Math.ceil(rawViewportSize / nCount);
const viewportSize = nSize * nCount;
const size = viewportSize + 2 * margin;
const mainCanvas = this.createCanvas(size, size);
const mainCanvasContext = mainCanvas.getContext("2d");
mainCanvasContext.fillStyle = this.options.colorDark;
this._clear();
// Translate to make the top and left margins off the viewport
mainCanvasContext.save();
mainCanvasContext.translate(margin, margin);
if (this.options.onEvent) {
this.options.onEvent("start-foreground", mainCanvasContext, {
nCount,
nSize,
});
}
const alignmentPatternCenters = QRUtil.getPatternPosition(this.qrCode.typeNumber);
var logoSide = nCount / 2;
if (!!this.options.logo.image) {
const logoScale = Math.min(Math.max(this.options.logo.scale, 0), 1);
let logoMargin = this.options.logo.margin;
if (logoMargin < 0) {
logoMargin = 0;
}
const logoSize = viewportSize * logoScale;
const logoX = 0.5 * (viewportSize - logoSize);
logoSide = Math.floor(logoX / nSize);
}
const isInLogoZone = (row, col) => col >= logoSide &&
col < nCount - logoSide &&
row >= logoSide &&
row < nCount - logoSide;
for (let row = 0; row < nCount; row++) {
for (let col = 0; col < nCount; col++) {
const isBlkPosCtr = (col < 8 && (row < 8 || row >= nCount - 8)) ||
(col >= nCount - 8 && row < 8);
// If in finder zone then don't print at all
if (isBlkPosCtr)
continue;
const isLogoZone = isInLogoZone(row, col);
// If in logo zone then don't print at all
if (isLogoZone)
continue;
const isTiming = (row == 6 && col >= 8 && col <= nCount - 8) ||
(col == 6 && row >= 8 && row <= nCount - 8);
let isAlignment = false;
for (let i = 0; i < alignmentPatternCenters.length; i++) {
for (let j = 0; j < alignmentPatternCenters.length; j++) {
// Check if point is on the border of the alignment pattern
if (row >= alignmentPatternCenters[i] - 2 &&
row <= alignmentPatternCenters[i] + 2 &&
col >= alignmentPatternCenters[j] - 2 &&
col <= alignmentPatternCenters[j] + 2) {
isAlignment = true;
break;
}
rawViewportSize = rawSize - 2 * rawMargin;
margin = Math.ceil(rawMargin);
nSize = Math.ceil(rawViewportSize / nCount);
viewportSize = nSize * nCount;
size = viewportSize + 2 * margin;
mainCanvas = this.createCanvas(size, size);
mainCanvasContext = mainCanvas.getContext("2d");
mainCanvasContext.fillStyle = this.options.colorDark;
this._clear();
// Translate to make the top and left margins off the viewport
mainCanvasContext.save();
mainCanvasContext.translate(margin, margin);
if (this.options.onEvent) {
this.options.onEvent("start-foreground", mainCanvasContext, {
nCount: nCount,
nSize: nSize,
});
// Check if point is the center of the alignment pattern
if (row == alignmentPatternCenters[i] &&
col == alignmentPatternCenters[j]) {
isAlignment = true;
break;
}
alignmentPatternCenters = qrcode_1.QRUtil.getPatternPosition(this.qrCode.typeNumber);
logoSide = nCount / 2;
if (!!this.options.logoImage) {
logoScale = Math.min(Math.max(this.options.logoScale, 0), 1);
logoMargin = this.options.logoMargin;
if (logoMargin < 0) {
logoMargin = 0;
}
logoSize = viewportSize * logoScale;
logoX = 0.5 * (viewportSize - logoSize);
logoSide = Math.floor(logoX / nSize);
}
isInLogoZone = function (row, col) {
return col >= logoSide &&
col < nCount - logoSide &&
row >= logoSide &&
row < nCount - logoSide;
};
for (row = 0; row < nCount; row++) {
for (col = 0; col < nCount; col++) {
isBlkPosCtr = (col < 8 && (row < 8 || row >= nCount - 8)) ||
(col >= nCount - 8 && row < 8);
// If in finder zone then don't print at all
if (isBlkPosCtr)
continue;
isLogoZone = isInLogoZone(row, col);
// If in logo zone then don't print at all
if (isLogoZone)
continue;
isTiming = (row == 6 && col >= 8 && col <= nCount - 8) ||
(col == 6 && row >= 8 && row <= nCount - 8);
isAlignment = false;
for (i = 0; i < alignmentPatternCenters.length; i++) {
for (j = 0; j < alignmentPatternCenters.length; j++) {
// Check if point is on the border of the alignment pattern
if (row >= alignmentPatternCenters[i] - 2 &&
row <= alignmentPatternCenters[i] + 2 &&
col >= alignmentPatternCenters[j] - 2 &&
col <= alignmentPatternCenters[j] + 2) {
isAlignment = true;
break;
}
// Check if point is the center of the alignment pattern
if (row == alignmentPatternCenters[i] &&
col == alignmentPatternCenters[j]) {
isAlignment = true;
break;
}
}
}
bIsDark = this.qrCode.isDark(row, col);
if (bIsDark) {
this._drawPoint(mainCanvasContext, col, row, nSize, {
isTiming: isTiming,
isAlignment: isAlignment,
}, {
top: (row != 0 &&
this.qrCode.isDark(row - 1, col) &&
!isInLogoZone(row - 1, col)) ||
false,
left: (col != 0 &&
this.qrCode.isDark(row, col - 1) &&
!isInLogoZone(row, col - 1)) ||
false,
right: (col != nCount - 1 &&
this.qrCode.isDark(row, col + 1) &&
!isInLogoZone(row, col + 1)) ||
false,
bottom: (row != nCount - 1 &&
this.qrCode.isDark(row + 1, col) &&
!isInLogoZone(row + 1, col)) ||
false,
});
}
}
}
// - FINDER
this._drawFinder(mainCanvasContext, 0, 0, nSize);
this._drawFinder(mainCanvasContext, nCount - 7, 0, nSize);
this._drawFinder(mainCanvasContext, 0, nCount - 7, nSize);
if (this.options.gradient !== undefined) {
gradient = this.options.gradient(mainCanvasContext, viewportSize);
mainCanvasContext.fillStyle = gradient;
mainCanvasContext.globalCompositeOperation = "source-in";
mainCanvasContext.fillRect(0, 0, viewportSize, viewportSize);
mainCanvasContext.globalCompositeOperation = "source-over";
}
// Fill the margin
if (this.options.whiteMargin) {
mainCanvasContext.fillStyle = "#FFFFFF";
mainCanvasContext.fillRect(-margin, -margin, size, margin);
mainCanvasContext.fillRect(-margin, viewportSize, size, margin);
mainCanvasContext.fillRect(viewportSize, -margin, margin, size);
mainCanvasContext.fillRect(-margin, -margin, margin, size);
}
if (!!!this.options.logoImage) return [3 /*break*/, 2];
return [4 /*yield*/, this.loadImage(this.options.logoImage)];
case 1:
logoImage = _a.sent();
logoScale = Math.min(Math.max(this.options.logoScale, 0), 1);
logoMargin = this.options.logoMargin;
logoCornerRadius = Math.min(Math.max(this.options.logoCornerRadius, 0), 1);
if (logoMargin < 0) {
logoMargin = 0;
}
logoSize = viewportSize * logoScale;
logoX = 0.5 * (viewportSize - logoSize);
// Draw logo image
AwesomeQR._prepareRoundedCornerClip(mainCanvasContext, logoX, logoX, logoSize, logoSize, logoCornerRadius * logoSize * 0.5);
mainCanvasContext.clip();
mainCanvasContext.drawImage(logoImage, logoX, logoX, logoSize, logoSize);
_a.label = 2;
case 2:
if (this.options.onEvent) {
this.options.onEvent("end-foreground", mainCanvasContext, {
nCount: nCount,
nSize: nSize,
});
}
backgroundCanvas = this.createCanvas(size, size);
backgroundCanvasContext = backgroundCanvas.getContext("2d");
if (this.options.onEvent) {
this.options.onEvent("start-background", backgroundCanvasContext, {
nCount: nCount,
nSize: nSize,
});
}
if (!!!this.options.backgroundImage) return [3 /*break*/, 4];
return [4 /*yield*/, this.loadImage(this.options.backgroundImage)];
case 3:
backgroundImage = _a.sent();
backgroundDimming = this.options.backgroundDimming;
if (this.options.autoColor) {
avgRGB = AwesomeQR._getAverageRGB(this.createCanvas, backgroundImage);
this.options.colorDark = "rgb(" + avgRGB.r + "," + avgRGB.g + "," + avgRGB.b + ")";
}
backgroundCanvasContext.drawImage(backgroundImage, 0, 0, size, size);
backgroundCanvasContext.rect(0, 0, size, size);
backgroundCanvasContext.fillStyle = backgroundDimming;
backgroundCanvasContext.fill();
return [3 /*break*/, 5];
case 4:
backgroundCanvasContext.rect(0, 0, size, size);
backgroundCanvasContext.fillStyle = this.options.colorLight;
backgroundCanvasContext.fill();
_a.label = 5;
case 5:
if (this.options.onEvent) {
this.options.onEvent("end-background", backgroundCanvasContext, {
nCount: nCount,
nSize: nSize,
});
}
// Apply foreground to background canvas
backgroundCanvasContext.drawImage(mainCanvas, 0, 0);
// Scale the final image
this.canvasContext.drawImage(backgroundCanvas, 0, 0, rawSize, rawSize);
if (this.options.onEvent) {
this.options.onEvent("final-canvas", this.canvasContext, {
nCount: nCount,
nSize: nSize,
});
}
if (isElement(this.canvas)) {
return [2 /*return*/, Promise.resolve(this.canvas.toDataURL())];
}
return [2 /*return*/, Promise.resolve(this.canvas.toBuffer())];
}
}
const bIsDark = this.qrCode.isDark(row, col);
if (bIsDark) {
this._drawPoint(mainCanvasContext, col, row, nSize, {
isTiming,
isAlignment,
}, {
top: (row != 0 &&
this.qrCode.isDark(row - 1, col) &&
!isInLogoZone(row - 1, col)) ||
false,
left: (col != 0 &&
this.qrCode.isDark(row, col - 1) &&
!isInLogoZone(row, col - 1)) ||
false,
right: (col != nCount - 1 &&
this.qrCode.isDark(row, col + 1) &&
!isInLogoZone(row, col + 1)) ||
false,
bottom: (row != nCount - 1 &&
this.qrCode.isDark(row + 1, col) &&
!isInLogoZone(row + 1, col)) ||
false,
});
}
}
}
// - FINDER
this._drawFinder(mainCanvasContext, 0, 0, nSize);
this._drawFinder(mainCanvasContext, nCount - 7, 0, nSize);
this._drawFinder(mainCanvasContext, 0, nCount - 7, nSize);
if (this.options.gradient !== undefined) {
const gradient = this.options.gradient(mainCanvasContext, viewportSize);
mainCanvasContext.fillStyle = gradient;
mainCanvasContext.globalCompositeOperation = "source-in";
mainCanvasContext.fillRect(0, 0, viewportSize, viewportSize);
mainCanvasContext.globalCompositeOperation = "source-over";
}
// Fill the margin
if (this.options.whiteMargin) {
mainCanvasContext.fillStyle = "#FFFFFF";
mainCanvasContext.fillRect(-margin, -margin, size, margin);
mainCanvasContext.fillRect(-margin, viewportSize, size, margin);
mainCanvasContext.fillRect(viewportSize, -margin, margin, size);
mainCanvasContext.fillRect(-margin, -margin, margin, size);
}
if (!!this.options.logo.image) {
const logoImage = await this.loadImage(this.options.logo.image);
const logoScale = Math.min(Math.max(this.options.logo.scale, 0), 1);
let logoMargin = this.options.logo.margin;
const logoCornerRadius = Math.min(Math.max(this.options.logo.round, 0), 1);
if (logoMargin < 0) {
logoMargin = 0;
}
const logoSize = viewportSize * logoScale;
const logoX = 0.5 * (viewportSize - logoSize);
// Draw logo image
AwesomeQR._prepareRoundedCornerClip(mainCanvasContext, logoX, logoX, logoSize, logoSize, logoCornerRadius * logoSize * 0.5);
mainCanvasContext.clip();
mainCanvasContext.drawImage(logoImage, logoX, logoX, logoSize, logoSize);
}
if (this.options.onEvent) {
this.options.onEvent("end-foreground", mainCanvasContext, {
nCount,
nSize,
});
});
};
AwesomeQR.CorrectLevel = qrcode_1.QRErrorCorrectLevel;
AwesomeQR.defaultComponentOptions = {
data: {
scale: 1,
round: 0,
},
finder: {
round: 0,
},
};
AwesomeQR.defaultOptions = {
text: "",
size: 400,
margin: 20,
colorDark: "#000000",
colorLight: "rgba(0,0,0,0)",
correctLevel: qrcode_1.QRErrorCorrectLevel.M,
backgroundImage: undefined,
backgroundDimming: "rgba(0,0,0,0)",
logoImage: undefined,
logoScale: 0.2,
logoMargin: 4,
logoCornerRadius: 8,
whiteMargin: false,
components: AwesomeQR.defaultComponentOptions,
autoColor: true,
};
return AwesomeQR;
}());
exports.AwesomeQR = AwesomeQR;
}
const backgroundCanvas = this.createCanvas(size, size);
const backgroundCanvasContext = backgroundCanvas.getContext("2d");
if (this.options.onEvent) {
this.options.onEvent("start-background", backgroundCanvasContext, {
nCount,
nSize,
});
}
if (!!this.options.background.image) {
const backgroundImage = await this.loadImage(this.options.background.image);
const backgroundDimming = this.options.background.dimming;
if (this.options.autoColor) {
const avgRGB = AwesomeQR._getAverageRGB(this.createCanvas, backgroundImage);
this.options.colorDark = `rgb(${avgRGB.r},${avgRGB.g},${avgRGB.b})`;
}
backgroundCanvasContext.drawImage(backgroundImage, 0, 0, size, size);
backgroundCanvasContext.rect(0, 0, size, size);
backgroundCanvasContext.fillStyle = backgroundDimming;
backgroundCanvasContext.fill();
}
else {
backgroundCanvasContext.rect(0, 0, size, size);
backgroundCanvasContext.fillStyle = this.options.colorLight;
backgroundCanvasContext.fill();
}
if (this.options.onEvent) {
this.options.onEvent("end-background", backgroundCanvasContext, {
nCount,
nSize,
});
}
// Apply foreground to background canvas
backgroundCanvasContext.drawImage(mainCanvas, 0, 0);
// Scale the final image
this.canvasContext.drawImage(backgroundCanvas, 0, 0, rawSize, rawSize);
if (this.options.onEvent) {
this.options.onEvent("final-canvas", this.canvasContext, {
nCount,
nSize,
});
}
if (isElement(this.canvas)) {
return Promise.resolve(this.canvas.toDataURL());
}
return Promise.resolve(this.canvas.toBuffer());
}
}
AwesomeQR.CorrectLevel = QRErrorCorrectLevel;
AwesomeQR.defaultOptions = {
text: "",
size: 400,
margin: 20,
colorDark: "#000000",
colorLight: "rgba(0,0,0,0)",
qr: {
correctLevel: QRErrorCorrectLevel.M,
},
background: { dimming: "rgba(0,0,0,0)" },
logo: { scale: 0.2, margin: 10, round: 0.4 },
whiteMargin: false,
autoColor: true,
dots: {
scale: 1,
round: 0,
},
finder: {
round: 0,
},
};
function isElement(obj) {

@@ -459,0 +355,0 @@ try {

@@ -1,3 +0,3 @@

export * from "./qrcode";
export { AwesomeQR } from "./awesome-qr";
export type { Options } from "./types";
export * from "./qrcode.js";
export { AwesomeQR } from "./awesome-qr.js";
export type { Options } from "./types.js";

@@ -1,15 +0,2 @@

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./qrcode"), exports);
var awesome_qr_1 = require("./awesome-qr");
Object.defineProperty(exports, "AwesomeQR", { enumerable: true, get: function () { return awesome_qr_1.AwesomeQR; } });
export * from "./qrcode.js";
export { AwesomeQR } from "./awesome-qr.js";

@@ -62,3 +62,3 @@ declare class QR8bitByte {

static getErrorCorrectPolynomial(errorCorrectLength: number): QRPolynomial;
static getLengthInBits(mode: number, type: number): 14 | 11 | 12 | 8 | 10 | 9 | 16 | 13;
static getLengthInBits(mode: number, type: number): 12 | 8 | 10 | 14 | 9 | 11 | 16 | 13;
static getLostPoint(qrCode: QRCodeModel): number;

@@ -65,0 +65,0 @@ }

@@ -1,2 +0,1 @@

"use strict";
//---------------------------------------------------------------------

@@ -18,19 +17,20 @@ // QRCode for JavaScript

//---------------------------------------------------------------------
Object.defineProperty(exports, "__esModule", { value: true });
exports.QRMath = exports.QRUtil = exports.QRMaskPattern = exports.QRErrorCorrectLevel = exports.QRCodeModel = void 0;
function checkQRVersion(version, sText, nCorrectLevel) {
var length = _getUTF8Length(sText);
var i = version - 1;
var nLimit = 0;
const length = _getUTF8Length(sText);
const i = version - 1;
let nLimit = 0;
if (i >= QRCodeLimitLength.length) {
return false;
}
switch (nCorrectLevel) {
case exports.QRErrorCorrectLevel.L:
case QRErrorCorrectLevel.L:
nLimit = QRCodeLimitLength[i][0];
break;
case exports.QRErrorCorrectLevel.M:
case QRErrorCorrectLevel.M:
nLimit = QRCodeLimitLength[i][1];
break;
case exports.QRErrorCorrectLevel.Q:
case QRErrorCorrectLevel.Q:
nLimit = QRCodeLimitLength[i][2];
break;
case exports.QRErrorCorrectLevel.H:
case QRErrorCorrectLevel.H:
nLimit = QRCodeLimitLength[i][3];

@@ -47,12 +47,12 @@ break;

switch (nCorrectLevel) {
case exports.QRErrorCorrectLevel.L:
case QRErrorCorrectLevel.L:
nLimit = QRCodeLimitLength[i][0];
break;
case exports.QRErrorCorrectLevel.M:
case QRErrorCorrectLevel.M:
nLimit = QRCodeLimitLength[i][1];
break;
case exports.QRErrorCorrectLevel.Q:
case QRErrorCorrectLevel.Q:
nLimit = QRCodeLimitLength[i][2];
break;
case exports.QRErrorCorrectLevel.H:
case QRErrorCorrectLevel.H:
nLimit = QRCodeLimitLength[i][3];

@@ -79,12 +79,12 @@ break;

}
var QR8bitByte = /** @class */ (function () {
function QR8bitByte(data) {
class QR8bitByte {
constructor(data) {
this.mode = QRMode.MODE_8BIT_BYTE;
this.parsedData = [];
this.data = data;
var byteArrays = [];
const byteArrays = [];
// Added to support UTF-8 Characters
for (var i = 0, l = this.data.length; i < l; i++) {
var byteArray = [];
var code = this.data.charCodeAt(i);
for (let i = 0, l = this.data.length; i < l; i++) {
const byteArray = [];
const code = this.data.charCodeAt(i);
if (code > 0x10000) {

@@ -117,16 +117,13 @@ byteArray[0] = 0xf0 | ((code & 0x1c0000) >>> 18);

}
QR8bitByte.prototype.getLength = function () {
getLength() {
return this.parsedData.length;
};
QR8bitByte.prototype.write = function (buffer) {
for (var i = 0, l = this.parsedData.length; i < l; i++) {
}
write(buffer) {
for (let i = 0, l = this.parsedData.length; i < l; i++) {
buffer.put(this.parsedData[i], 8);
}
};
return QR8bitByte;
}());
var QRCodeModel = /** @class */ (function () {
function QRCodeModel(typeNumber, errorCorrectLevel) {
if (typeNumber === void 0) { typeNumber = -1; }
if (errorCorrectLevel === void 0) { errorCorrectLevel = exports.QRErrorCorrectLevel.L; }
}
}
export class QRCodeModel {
constructor(typeNumber = -1, errorCorrectLevel = QRErrorCorrectLevel.L) {
this.moduleCount = 0;

@@ -139,3 +136,3 @@ this.dataList = [];

}
QRCodeModel.prototype.addData = function (data) {
addData(data) {
if (this.typeNumber <= 0) {

@@ -145,31 +142,34 @@ this.typeNumber = _getTypeNumber(data, this.errorCorrectLevel);

else if (this.typeNumber > 40) {
throw new Error("Invalid QR version: " + this.typeNumber);
throw new Error(`Invalid QR version: ${this.typeNumber}`);
}
else {
if (!checkQRVersion(this.typeNumber, data, this.errorCorrectLevel)) {
throw new Error("Data is too long for QR version: " + this.typeNumber);
throw new Error(`Data is too long for QR version: ${this.typeNumber}`);
}
}
var newData = new QR8bitByte(data);
const newData = new QR8bitByte(data);
this.dataList.push(newData);
this.dataCache = undefined;
};
QRCodeModel.prototype.isDark = function (row, col) {
if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {
throw new Error(row + "," + col);
this.dataCache?.splice(0, this.dataCache?.length);
}
isDark(row, col) {
if (row < 0 ||
this.moduleCount <= row ||
col < 0 ||
this.moduleCount <= col) {
throw new Error(`${row},${col}`);
}
return this.modules[row][col];
};
QRCodeModel.prototype.getModuleCount = function () {
}
getModuleCount() {
return this.moduleCount;
};
QRCodeModel.prototype.make = function () {
}
make() {
this.makeImpl(false, this.getBestMaskPattern());
};
QRCodeModel.prototype.makeImpl = function (test, maskPattern) {
}
makeImpl(test, maskPattern) {
this.moduleCount = this.typeNumber * 4 + 17;
this.modules = new Array(this.moduleCount);
for (var row = 0; row < this.moduleCount; row++) {
for (let row = 0; row < this.moduleCount; row++) {
this.modules[row] = new Array(this.moduleCount);
for (var col = 0; col < this.moduleCount; col++) {
for (let col = 0; col < this.moduleCount; col++) {
this.modules[row][col] = null;

@@ -191,8 +191,8 @@ }

this.mapData(this.dataCache, maskPattern);
};
QRCodeModel.prototype.setupPositionProbePattern = function (row, col) {
for (var r = -1; r <= 7; r++) {
}
setupPositionProbePattern(row, col) {
for (let r = -1; r <= 7; r++) {
if (row + r <= -1 || this.moduleCount <= row + r)
continue;
for (var c = -1; c <= 7; c++) {
for (let c = -1; c <= 7; c++) {
if (col + c <= -1 || this.moduleCount <= col + c)

@@ -210,12 +210,13 @@ continue;

}
};
QRCodeModel.prototype.getBestMaskPattern = function () {
if (Number.isInteger(this.maskPattern) && Object.values(exports.QRMaskPattern).includes(this.maskPattern)) {
}
getBestMaskPattern() {
if (Number.isInteger(this.maskPattern) &&
Object.values(QRMaskPattern).includes(this.maskPattern)) {
return this.maskPattern;
}
var minLostPoint = 0;
var pattern = 0;
for (var i = 0; i < 8; i++) {
let minLostPoint = 0;
let pattern = 0;
for (let i = 0; i < 8; i++) {
this.makeImpl(true, i);
var lostPoint = QRUtil.getLostPoint(this);
const lostPoint = QRUtil.getLostPoint(this);
if (i == 0 || minLostPoint > lostPoint) {

@@ -227,5 +228,5 @@ minLostPoint = lostPoint;

return pattern;
};
QRCodeModel.prototype.setupTimingPattern = function () {
for (var r = 8; r < this.moduleCount - 8; r++) {
}
setupTimingPattern() {
for (let r = 8; r < this.moduleCount - 8; r++) {
if (this.modules[r][6] != null) {

@@ -236,3 +237,3 @@ continue;

}
for (var c = 8; c < this.moduleCount - 8; c++) {
for (let c = 8; c < this.moduleCount - 8; c++) {
if (this.modules[6][c] != null) {

@@ -243,14 +244,14 @@ continue;

}
};
QRCodeModel.prototype.setupPositionAdjustPattern = function () {
var pos = QRUtil.getPatternPosition(this.typeNumber);
for (var i = 0; i < pos.length; i++) {
for (var j = 0; j < pos.length; j++) {
var row = pos[i];
var col = pos[j];
}
setupPositionAdjustPattern() {
const pos = QRUtil.getPatternPosition(this.typeNumber);
for (let i = 0; i < pos.length; i++) {
for (let j = 0; j < pos.length; j++) {
const row = pos[i];
const col = pos[j];
if (this.modules[row][col] != null) {
continue;
}
for (var r = -2; r <= 2; r++) {
for (var c = -2; c <= 2; c++) {
for (let r = -2; r <= 2; r++) {
for (let c = -2; c <= 2; c++) {
if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {

@@ -266,17 +267,19 @@ this.modules[row + r][col + c] = true;

}
};
QRCodeModel.prototype.setupTypeNumber = function (test) {
var bits = QRUtil.getBCHTypeNumber(this.typeNumber);
}
setupTypeNumber(test) {
const bits = QRUtil.getBCHTypeNumber(this.typeNumber);
for (var i = 0; i < 18; i++) {
var mod = !test && ((bits >> i) & 1) == 1;
this.modules[Math.floor(i / 3)][(i % 3) + this.moduleCount - 8 - 3] = mod;
this.modules[Math.floor(i / 3)][(i % 3) + this.moduleCount - 8 - 3] =
mod;
}
for (var i = 0; i < 18; i++) {
var mod = !test && ((bits >> i) & 1) == 1;
this.modules[(i % 3) + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
this.modules[(i % 3) + this.moduleCount - 8 - 3][Math.floor(i / 3)] =
mod;
}
};
QRCodeModel.prototype.setupTypeInfo = function (test, maskPattern) {
var data = (this.errorCorrectLevel << 3) | maskPattern;
var bits = QRUtil.getBCHTypeInfo(data);
}
setupTypeInfo(test, maskPattern) {
const data = (this.errorCorrectLevel << 3) | maskPattern;
const bits = QRUtil.getBCHTypeInfo(data);
for (var i = 0; i < 15; i++) {

@@ -307,19 +310,19 @@ var mod = !test && ((bits >> i) & 1) == 1;

this.modules[this.moduleCount - 8][8] = !test;
};
QRCodeModel.prototype.mapData = function (data, maskPattern) {
var inc = -1;
var row = this.moduleCount - 1;
var bitIndex = 7;
var byteIndex = 0;
for (var col = this.moduleCount - 1; col > 0; col -= 2) {
}
mapData(data, maskPattern) {
let inc = -1;
let row = this.moduleCount - 1;
let bitIndex = 7;
let byteIndex = 0;
for (let col = this.moduleCount - 1; col > 0; col -= 2) {
if (col == 6)
col--;
while (true) {
for (var c = 0; c < 2; c++) {
for (let c = 0; c < 2; c++) {
if (this.modules[row][col - c] == null) {
var dark = false;
let dark = false;
if (byteIndex < data.length) {
dark = ((data[byteIndex] >>> bitIndex) & 1) == 1;
}
var mask = QRUtil.getMask(maskPattern, row, col - c);
const mask = QRUtil.getMask(maskPattern, row, col - c);
if (mask) {

@@ -344,8 +347,8 @@ dark = !dark;

}
};
QRCodeModel.createData = function (typeNumber, errorCorrectLevel, dataList) {
var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);
var buffer = new QRBitBuffer();
}
static createData(typeNumber, errorCorrectLevel, dataList) {
const rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);
const buffer = new QRBitBuffer();
for (var i = 0; i < dataList.length; i++) {
var data = dataList[i];
const data = dataList[i];
buffer.put(data.mode, 4);

@@ -355,3 +358,3 @@ buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));

}
var totalDataCount = 0;
let totalDataCount = 0;
for (var i = 0; i < rsBlocks.length; i++) {

@@ -361,3 +364,3 @@ totalDataCount += rsBlocks[i].dataCount;

if (buffer.getLengthInBits() > totalDataCount * 8) {
throw new Error("code length overflow. (" + buffer.getLengthInBits() + ">" + totalDataCount * 8 + ")");
throw new Error(`code length overflow. (${buffer.getLengthInBits()}>${totalDataCount * 8})`);
}

@@ -381,12 +384,12 @@ if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {

return QRCodeModel.createBytes(buffer, rsBlocks);
};
QRCodeModel.createBytes = function (buffer, rsBlocks) {
var offset = 0;
var maxDcCount = 0;
var maxEcCount = 0;
var dcdata = new Array(rsBlocks.length);
var ecdata = new Array(rsBlocks.length);
}
static createBytes(buffer, rsBlocks) {
let offset = 0;
let maxDcCount = 0;
let maxEcCount = 0;
const dcdata = new Array(rsBlocks.length);
const ecdata = new Array(rsBlocks.length);
for (var r = 0; r < rsBlocks.length; r++) {
var dcCount = rsBlocks[r].dataCount;
var ecCount = rsBlocks[r].totalCount - dcCount;
const dcCount = rsBlocks[r].dataCount;
const ecCount = rsBlocks[r].totalCount - dcCount;
maxDcCount = Math.max(maxDcCount, dcCount);

@@ -399,17 +402,17 @@ maxEcCount = Math.max(maxEcCount, ecCount);

offset += dcCount;
var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);
var modPoly = rawPoly.mod(rsPoly);
const rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
const rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);
const modPoly = rawPoly.mod(rsPoly);
ecdata[r] = new Array(rsPoly.getLength() - 1);
for (var i = 0; i < ecdata[r].length; i++) {
var modIndex = i + modPoly.getLength() - ecdata[r].length;
const modIndex = i + modPoly.getLength() - ecdata[r].length;
ecdata[r][i] = modIndex >= 0 ? modPoly.get(modIndex) : 0;
}
}
var totalCodeCount = 0;
let totalCodeCount = 0;
for (var i = 0; i < rsBlocks.length; i++) {
totalCodeCount += rsBlocks[i].totalCount;
}
var data = new Array(totalCodeCount);
var index = 0;
const data = new Array(totalCodeCount);
let index = 0;
for (var i = 0; i < maxDcCount; i++) {

@@ -430,11 +433,14 @@ for (var r = 0; r < rsBlocks.length; r++) {

return data;
};
QRCodeModel.PAD0 = 0xec;
QRCodeModel.PAD1 = 0x11;
return QRCodeModel;
}());
exports.QRCodeModel = QRCodeModel;
exports.QRErrorCorrectLevel = { L: 1, M: 0, Q: 3, H: 2 };
var QRMode = { MODE_NUMBER: 1 << 0, MODE_ALPHA_NUM: 1 << 1, MODE_8BIT_BYTE: 1 << 2, MODE_KANJI: 1 << 3 };
exports.QRMaskPattern = {
}
}
QRCodeModel.PAD0 = 0xec;
QRCodeModel.PAD1 = 0x11;
export const QRErrorCorrectLevel = { L: 1, M: 0, Q: 3, H: 2 };
const QRMode = {
MODE_NUMBER: 1 << 0,
MODE_ALPHA_NUM: 1 << 1,
MODE_8BIT_BYTE: 1 << 2,
MODE_KANJI: 1 << 3,
};
export const QRMaskPattern = {
PATTERN000: 0,

@@ -449,21 +455,21 @@ PATTERN001: 1,

};
var QRUtil = /** @class */ (function () {
function QRUtil() {
}
QRUtil.getBCHTypeInfo = function (data) {
var d = data << 10;
export class QRUtil {
static getBCHTypeInfo(data) {
let d = data << 10;
while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {
d ^= QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15));
d ^=
QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15));
}
return ((data << 10) | d) ^ QRUtil.G15_MASK;
};
QRUtil.getBCHTypeNumber = function (data) {
var d = data << 12;
}
static getBCHTypeNumber(data) {
let d = data << 12;
while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {
d ^= QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18));
d ^=
QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18));
}
return (data << 12) | d;
};
QRUtil.getBCHDigit = function (data) {
var digit = 0;
}
static getBCHDigit(data) {
let digit = 0;
while (data != 0) {

@@ -474,36 +480,36 @@ digit++;

return digit;
};
QRUtil.getPatternPosition = function (typeNumber) {
}
static getPatternPosition(typeNumber) {
return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];
};
QRUtil.getMask = function (maskPattern, i, j) {
}
static getMask(maskPattern, i, j) {
switch (maskPattern) {
case exports.QRMaskPattern.PATTERN000:
case QRMaskPattern.PATTERN000:
return (i + j) % 2 == 0;
case exports.QRMaskPattern.PATTERN001:
case QRMaskPattern.PATTERN001:
return i % 2 == 0;
case exports.QRMaskPattern.PATTERN010:
case QRMaskPattern.PATTERN010:
return j % 3 == 0;
case exports.QRMaskPattern.PATTERN011:
case QRMaskPattern.PATTERN011:
return (i + j) % 3 == 0;
case exports.QRMaskPattern.PATTERN100:
case QRMaskPattern.PATTERN100:
return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
case exports.QRMaskPattern.PATTERN101:
case QRMaskPattern.PATTERN101:
return ((i * j) % 2) + ((i * j) % 3) == 0;
case exports.QRMaskPattern.PATTERN110:
case QRMaskPattern.PATTERN110:
return (((i * j) % 2) + ((i * j) % 3)) % 2 == 0;
case exports.QRMaskPattern.PATTERN111:
case QRMaskPattern.PATTERN111:
return (((i * j) % 3) + ((i + j) % 2)) % 2 == 0;
default:
throw new Error("bad maskPattern:" + maskPattern);
throw new Error(`bad maskPattern:${maskPattern}`);
}
};
QRUtil.getErrorCorrectPolynomial = function (errorCorrectLength) {
var a = new QRPolynomial([1], 0);
for (var i = 0; i < errorCorrectLength; i++) {
}
static getErrorCorrectPolynomial(errorCorrectLength) {
let a = new QRPolynomial([1], 0);
for (let i = 0; i < errorCorrectLength; i++) {
a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0));
}
return a;
};
QRUtil.getLengthInBits = function (mode, type) {
}
static getLengthInBits(mode, type) {
if (1 <= type && type < 10) {

@@ -520,3 +526,3 @@ switch (mode) {

default:
throw new Error("mode:" + mode);
throw new Error(`mode:${mode}`);
}

@@ -535,3 +541,3 @@ }

default:
throw new Error("mode:" + mode);
throw new Error(`mode:${mode}`);
}

@@ -550,21 +556,21 @@ }

default:
throw new Error("mode:" + mode);
throw new Error(`mode:${mode}`);
}
}
else {
throw new Error("type:" + type);
throw new Error(`type:${type}`);
}
};
QRUtil.getLostPoint = function (qrCode) {
var moduleCount = qrCode.getModuleCount();
var lostPoint = 0;
}
static getLostPoint(qrCode) {
const moduleCount = qrCode.getModuleCount();
let lostPoint = 0;
for (var row = 0; row < moduleCount; row++) {
for (var col = 0; col < moduleCount; col++) {
var sameCount = 0;
var dark = qrCode.isDark(row, col);
for (var r = -1; r <= 1; r++) {
let sameCount = 0;
const dark = qrCode.isDark(row, col);
for (let r = -1; r <= 1; r++) {
if (row + r < 0 || moduleCount <= row + r) {
continue;
}
for (var c = -1; c <= 1; c++) {
for (let c = -1; c <= 1; c++) {
if (col + c < 0 || moduleCount <= col + c) {

@@ -588,3 +594,3 @@ continue;

for (var col = 0; col < moduleCount - 1; col++) {
var count = 0;
let count = 0;
if (qrCode.isDark(row, col))

@@ -629,3 +635,3 @@ count++;

}
var darkCount = 0;
let darkCount = 0;
for (var col = 0; col < moduleCount; col++) {

@@ -638,64 +644,67 @@ for (var row = 0; row < moduleCount; row++) {

}
var ratio = Math.abs((100 * darkCount) / moduleCount / moduleCount - 50) / 5;
const ratio = Math.abs((100 * darkCount) / moduleCount / moduleCount - 50) / 5;
lostPoint += ratio * 10;
return lostPoint;
};
QRUtil.PATTERN_POSITION_TABLE = [
[],
[6, 18],
[6, 22],
[6, 26],
[6, 30],
[6, 34],
[6, 22, 38],
[6, 24, 42],
[6, 26, 46],
[6, 28, 50],
[6, 30, 54],
[6, 32, 58],
[6, 34, 62],
[6, 26, 46, 66],
[6, 26, 48, 70],
[6, 26, 50, 74],
[6, 30, 54, 78],
[6, 30, 56, 82],
[6, 30, 58, 86],
[6, 34, 62, 90],
[6, 28, 50, 72, 94],
[6, 26, 50, 74, 98],
[6, 30, 54, 78, 102],
[6, 28, 54, 80, 106],
[6, 32, 58, 84, 110],
[6, 30, 58, 86, 114],
[6, 34, 62, 90, 118],
[6, 26, 50, 74, 98, 122],
[6, 30, 54, 78, 102, 126],
[6, 26, 52, 78, 104, 130],
[6, 30, 56, 82, 108, 134],
[6, 34, 60, 86, 112, 138],
[6, 30, 58, 86, 114, 142],
[6, 34, 62, 90, 118, 146],
[6, 30, 54, 78, 102, 126, 150],
[6, 24, 50, 76, 102, 128, 154],
[6, 28, 54, 80, 106, 132, 158],
[6, 32, 58, 84, 110, 136, 162],
[6, 26, 54, 82, 110, 138, 166],
[6, 30, 58, 86, 114, 142, 170],
];
QRUtil.G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);
QRUtil.G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);
QRUtil.G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);
return QRUtil;
}());
exports.QRUtil = QRUtil;
var QRMath = /** @class */ (function () {
function QRMath() {
}
QRMath.glog = function (n) {
}
QRUtil.PATTERN_POSITION_TABLE = [
[],
[6, 18],
[6, 22],
[6, 26],
[6, 30],
[6, 34],
[6, 22, 38],
[6, 24, 42],
[6, 26, 46],
[6, 28, 50],
[6, 30, 54],
[6, 32, 58],
[6, 34, 62],
[6, 26, 46, 66],
[6, 26, 48, 70],
[6, 26, 50, 74],
[6, 30, 54, 78],
[6, 30, 56, 82],
[6, 30, 58, 86],
[6, 34, 62, 90],
[6, 28, 50, 72, 94],
[6, 26, 50, 74, 98],
[6, 30, 54, 78, 102],
[6, 28, 54, 80, 106],
[6, 32, 58, 84, 110],
[6, 30, 58, 86, 114],
[6, 34, 62, 90, 118],
[6, 26, 50, 74, 98, 122],
[6, 30, 54, 78, 102, 126],
[6, 26, 52, 78, 104, 130],
[6, 30, 56, 82, 108, 134],
[6, 34, 60, 86, 112, 138],
[6, 30, 58, 86, 114, 142],
[6, 34, 62, 90, 118, 146],
[6, 30, 54, 78, 102, 126, 150],
[6, 24, 50, 76, 102, 128, 154],
[6, 28, 54, 80, 106, 132, 158],
[6, 32, 58, 84, 110, 136, 162],
[6, 26, 54, 82, 110, 138, 166],
[6, 30, 58, 86, 114, 142, 170],
];
QRUtil.G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);
QRUtil.G18 = (1 << 12) |
(1 << 11) |
(1 << 10) |
(1 << 9) |
(1 << 8) |
(1 << 5) |
(1 << 2) |
(1 << 0);
QRUtil.G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);
export class QRMath {
static glog(n) {
if (n < 1) {
throw new Error("glog(" + n + ")");
throw new Error(`glog(${n})`);
}
return QRMath.LOG_TABLE[n];
};
QRMath.gexp = function (n) {
}
static gexp(n) {
while (n < 0) {

@@ -708,26 +717,27 @@ n += 255;

return QRMath.EXP_TABLE[n];
};
QRMath.EXP_TABLE = new Array(256);
QRMath.LOG_TABLE = new Array(256);
QRMath._constructor = (function () {
for (var i = 0; i < 8; i++) {
QRMath.EXP_TABLE[i] = 1 << i;
}
for (var i = 8; i < 256; i++) {
QRMath.EXP_TABLE[i] =
QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8];
}
for (var i = 0; i < 255; i++) {
QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;
}
})();
return QRMath;
}());
exports.QRMath = QRMath;
var QRPolynomial = /** @class */ (function () {
function QRPolynomial(num, shift) {
}
}
QRMath.EXP_TABLE = new Array(256);
QRMath.LOG_TABLE = new Array(256);
QRMath._constructor = (function () {
for (var i = 0; i < 8; i++) {
QRMath.EXP_TABLE[i] = 1 << i;
}
for (var i = 8; i < 256; i++) {
QRMath.EXP_TABLE[i] =
QRMath.EXP_TABLE[i - 4] ^
QRMath.EXP_TABLE[i - 5] ^
QRMath.EXP_TABLE[i - 6] ^
QRMath.EXP_TABLE[i - 8];
}
for (var i = 0; i < 255; i++) {
QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;
}
})();
class QRPolynomial {
constructor(num, shift) {
if (num.length == undefined) {
throw new Error(num.length + "/" + shift);
throw new Error(`${num.length}/${shift}`);
}
var offset = 0;
let offset = 0;
while (offset < num.length && num[offset] == 0) {

@@ -737,16 +747,16 @@ offset++;

this.num = new Array(num.length - offset + shift);
for (var i = 0; i < num.length - offset; i++) {
for (let i = 0; i < num.length - offset; i++) {
this.num[i] = num[i + offset];
}
}
QRPolynomial.prototype.get = function (index) {
get(index) {
return this.num[index];
};
QRPolynomial.prototype.getLength = function () {
}
getLength() {
return this.num.length;
};
QRPolynomial.prototype.multiply = function (e) {
var num = new Array(this.getLength() + e.getLength() - 1);
for (var i = 0; i < this.getLength(); i++) {
for (var j = 0; j < e.getLength(); j++) {
}
multiply(e) {
const num = new Array(this.getLength() + e.getLength() - 1);
for (let i = 0; i < this.getLength(); i++) {
for (let j = 0; j < e.getLength(); j++) {
num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)));

@@ -756,9 +766,9 @@ }

return new QRPolynomial(num, 0);
};
QRPolynomial.prototype.mod = function (e) {
}
mod(e) {
if (this.getLength() - e.getLength() < 0) {
return this;
}
var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));
var num = new Array(this.getLength());
const ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));
const num = new Array(this.getLength());
for (var i = 0; i < this.getLength(); i++) {

@@ -771,22 +781,21 @@ num[i] = this.get(i);

return new QRPolynomial(num, 0).mod(e);
};
return QRPolynomial;
}());
var QRRSBlock = /** @class */ (function () {
function QRRSBlock(totalCount, dataCount) {
}
}
class QRRSBlock {
constructor(totalCount, dataCount) {
this.totalCount = totalCount;
this.dataCount = dataCount;
}
QRRSBlock.getRSBlocks = function (typeNumber, errorCorrectLevel) {
var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);
static getRSBlocks(typeNumber, errorCorrectLevel) {
const rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);
if (rsBlock == undefined) {
throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel);
throw new Error(`bad rs block @ typeNumber:${typeNumber}/errorCorrectLevel:${errorCorrectLevel}`);
}
var length = rsBlock.length / 3;
var list = [];
for (var i = 0; i < length; i++) {
var count = rsBlock[i * 3 + 0];
var totalCount = rsBlock[i * 3 + 1];
var dataCount = rsBlock[i * 3 + 2];
for (var j = 0; j < count; j++) {
const length = rsBlock.length / 3;
const list = [];
for (let i = 0; i < length; i++) {
const count = rsBlock[i * 3 + 0];
const totalCount = rsBlock[i * 3 + 1];
const dataCount = rsBlock[i * 3 + 2];
for (let j = 0; j < count; j++) {
list.push(new QRRSBlock(totalCount, dataCount));

@@ -796,12 +805,12 @@ }

return list;
};
QRRSBlock.getRsBlockTable = function (typeNumber, errorCorrectLevel) {
}
static getRsBlockTable(typeNumber, errorCorrectLevel) {
switch (errorCorrectLevel) {
case exports.QRErrorCorrectLevel.L:
case QRErrorCorrectLevel.L:
return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
case exports.QRErrorCorrectLevel.M:
case QRErrorCorrectLevel.M:
return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
case exports.QRErrorCorrectLevel.Q:
case QRErrorCorrectLevel.Q:
return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
case exports.QRErrorCorrectLevel.H:
case QRErrorCorrectLevel.H:
return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];

@@ -811,186 +820,185 @@ default:

}
};
QRRSBlock.RS_BLOCK_TABLE = [
[1, 26, 19],
[1, 26, 16],
[1, 26, 13],
[1, 26, 9],
[1, 44, 34],
[1, 44, 28],
[1, 44, 22],
[1, 44, 16],
[1, 70, 55],
[1, 70, 44],
[2, 35, 17],
[2, 35, 13],
[1, 100, 80],
[2, 50, 32],
[2, 50, 24],
[4, 25, 9],
[1, 134, 108],
[2, 67, 43],
[2, 33, 15, 2, 34, 16],
[2, 33, 11, 2, 34, 12],
[2, 86, 68],
[4, 43, 27],
[4, 43, 19],
[4, 43, 15],
[2, 98, 78],
[4, 49, 31],
[2, 32, 14, 4, 33, 15],
[4, 39, 13, 1, 40, 14],
[2, 121, 97],
[2, 60, 38, 2, 61, 39],
[4, 40, 18, 2, 41, 19],
[4, 40, 14, 2, 41, 15],
[2, 146, 116],
[3, 58, 36, 2, 59, 37],
[4, 36, 16, 4, 37, 17],
[4, 36, 12, 4, 37, 13],
[2, 86, 68, 2, 87, 69],
[4, 69, 43, 1, 70, 44],
[6, 43, 19, 2, 44, 20],
[6, 43, 15, 2, 44, 16],
[4, 101, 81],
[1, 80, 50, 4, 81, 51],
[4, 50, 22, 4, 51, 23],
[3, 36, 12, 8, 37, 13],
[2, 116, 92, 2, 117, 93],
[6, 58, 36, 2, 59, 37],
[4, 46, 20, 6, 47, 21],
[7, 42, 14, 4, 43, 15],
[4, 133, 107],
[8, 59, 37, 1, 60, 38],
[8, 44, 20, 4, 45, 21],
[12, 33, 11, 4, 34, 12],
[3, 145, 115, 1, 146, 116],
[4, 64, 40, 5, 65, 41],
[11, 36, 16, 5, 37, 17],
[11, 36, 12, 5, 37, 13],
[5, 109, 87, 1, 110, 88],
[5, 65, 41, 5, 66, 42],
[5, 54, 24, 7, 55, 25],
[11, 36, 12],
[5, 122, 98, 1, 123, 99],
[7, 73, 45, 3, 74, 46],
[15, 43, 19, 2, 44, 20],
[3, 45, 15, 13, 46, 16],
[1, 135, 107, 5, 136, 108],
[10, 74, 46, 1, 75, 47],
[1, 50, 22, 15, 51, 23],
[2, 42, 14, 17, 43, 15],
[5, 150, 120, 1, 151, 121],
[9, 69, 43, 4, 70, 44],
[17, 50, 22, 1, 51, 23],
[2, 42, 14, 19, 43, 15],
[3, 141, 113, 4, 142, 114],
[3, 70, 44, 11, 71, 45],
[17, 47, 21, 4, 48, 22],
[9, 39, 13, 16, 40, 14],
[3, 135, 107, 5, 136, 108],
[3, 67, 41, 13, 68, 42],
[15, 54, 24, 5, 55, 25],
[15, 43, 15, 10, 44, 16],
[4, 144, 116, 4, 145, 117],
[17, 68, 42],
[17, 50, 22, 6, 51, 23],
[19, 46, 16, 6, 47, 17],
[2, 139, 111, 7, 140, 112],
[17, 74, 46],
[7, 54, 24, 16, 55, 25],
[34, 37, 13],
[4, 151, 121, 5, 152, 122],
[4, 75, 47, 14, 76, 48],
[11, 54, 24, 14, 55, 25],
[16, 45, 15, 14, 46, 16],
[6, 147, 117, 4, 148, 118],
[6, 73, 45, 14, 74, 46],
[11, 54, 24, 16, 55, 25],
[30, 46, 16, 2, 47, 17],
[8, 132, 106, 4, 133, 107],
[8, 75, 47, 13, 76, 48],
[7, 54, 24, 22, 55, 25],
[22, 45, 15, 13, 46, 16],
[10, 142, 114, 2, 143, 115],
[19, 74, 46, 4, 75, 47],
[28, 50, 22, 6, 51, 23],
[33, 46, 16, 4, 47, 17],
[8, 152, 122, 4, 153, 123],
[22, 73, 45, 3, 74, 46],
[8, 53, 23, 26, 54, 24],
[12, 45, 15, 28, 46, 16],
[3, 147, 117, 10, 148, 118],
[3, 73, 45, 23, 74, 46],
[4, 54, 24, 31, 55, 25],
[11, 45, 15, 31, 46, 16],
[7, 146, 116, 7, 147, 117],
[21, 73, 45, 7, 74, 46],
[1, 53, 23, 37, 54, 24],
[19, 45, 15, 26, 46, 16],
[5, 145, 115, 10, 146, 116],
[19, 75, 47, 10, 76, 48],
[15, 54, 24, 25, 55, 25],
[23, 45, 15, 25, 46, 16],
[13, 145, 115, 3, 146, 116],
[2, 74, 46, 29, 75, 47],
[42, 54, 24, 1, 55, 25],
[23, 45, 15, 28, 46, 16],
[17, 145, 115],
[10, 74, 46, 23, 75, 47],
[10, 54, 24, 35, 55, 25],
[19, 45, 15, 35, 46, 16],
[17, 145, 115, 1, 146, 116],
[14, 74, 46, 21, 75, 47],
[29, 54, 24, 19, 55, 25],
[11, 45, 15, 46, 46, 16],
[13, 145, 115, 6, 146, 116],
[14, 74, 46, 23, 75, 47],
[44, 54, 24, 7, 55, 25],
[59, 46, 16, 1, 47, 17],
[12, 151, 121, 7, 152, 122],
[12, 75, 47, 26, 76, 48],
[39, 54, 24, 14, 55, 25],
[22, 45, 15, 41, 46, 16],
[6, 151, 121, 14, 152, 122],
[6, 75, 47, 34, 76, 48],
[46, 54, 24, 10, 55, 25],
[2, 45, 15, 64, 46, 16],
[17, 152, 122, 4, 153, 123],
[29, 74, 46, 14, 75, 47],
[49, 54, 24, 10, 55, 25],
[24, 45, 15, 46, 46, 16],
[4, 152, 122, 18, 153, 123],
[13, 74, 46, 32, 75, 47],
[48, 54, 24, 14, 55, 25],
[42, 45, 15, 32, 46, 16],
[20, 147, 117, 4, 148, 118],
[40, 75, 47, 7, 76, 48],
[43, 54, 24, 22, 55, 25],
[10, 45, 15, 67, 46, 16],
[19, 148, 118, 6, 149, 119],
[18, 75, 47, 31, 76, 48],
[34, 54, 24, 34, 55, 25],
[20, 45, 15, 61, 46, 16],
];
return QRRSBlock;
}());
var QRBitBuffer = /** @class */ (function () {
function QRBitBuffer() {
}
}
QRRSBlock.RS_BLOCK_TABLE = [
[1, 26, 19],
[1, 26, 16],
[1, 26, 13],
[1, 26, 9],
[1, 44, 34],
[1, 44, 28],
[1, 44, 22],
[1, 44, 16],
[1, 70, 55],
[1, 70, 44],
[2, 35, 17],
[2, 35, 13],
[1, 100, 80],
[2, 50, 32],
[2, 50, 24],
[4, 25, 9],
[1, 134, 108],
[2, 67, 43],
[2, 33, 15, 2, 34, 16],
[2, 33, 11, 2, 34, 12],
[2, 86, 68],
[4, 43, 27],
[4, 43, 19],
[4, 43, 15],
[2, 98, 78],
[4, 49, 31],
[2, 32, 14, 4, 33, 15],
[4, 39, 13, 1, 40, 14],
[2, 121, 97],
[2, 60, 38, 2, 61, 39],
[4, 40, 18, 2, 41, 19],
[4, 40, 14, 2, 41, 15],
[2, 146, 116],
[3, 58, 36, 2, 59, 37],
[4, 36, 16, 4, 37, 17],
[4, 36, 12, 4, 37, 13],
[2, 86, 68, 2, 87, 69],
[4, 69, 43, 1, 70, 44],
[6, 43, 19, 2, 44, 20],
[6, 43, 15, 2, 44, 16],
[4, 101, 81],
[1, 80, 50, 4, 81, 51],
[4, 50, 22, 4, 51, 23],
[3, 36, 12, 8, 37, 13],
[2, 116, 92, 2, 117, 93],
[6, 58, 36, 2, 59, 37],
[4, 46, 20, 6, 47, 21],
[7, 42, 14, 4, 43, 15],
[4, 133, 107],
[8, 59, 37, 1, 60, 38],
[8, 44, 20, 4, 45, 21],
[12, 33, 11, 4, 34, 12],
[3, 145, 115, 1, 146, 116],
[4, 64, 40, 5, 65, 41],
[11, 36, 16, 5, 37, 17],
[11, 36, 12, 5, 37, 13],
[5, 109, 87, 1, 110, 88],
[5, 65, 41, 5, 66, 42],
[5, 54, 24, 7, 55, 25],
[11, 36, 12],
[5, 122, 98, 1, 123, 99],
[7, 73, 45, 3, 74, 46],
[15, 43, 19, 2, 44, 20],
[3, 45, 15, 13, 46, 16],
[1, 135, 107, 5, 136, 108],
[10, 74, 46, 1, 75, 47],
[1, 50, 22, 15, 51, 23],
[2, 42, 14, 17, 43, 15],
[5, 150, 120, 1, 151, 121],
[9, 69, 43, 4, 70, 44],
[17, 50, 22, 1, 51, 23],
[2, 42, 14, 19, 43, 15],
[3, 141, 113, 4, 142, 114],
[3, 70, 44, 11, 71, 45],
[17, 47, 21, 4, 48, 22],
[9, 39, 13, 16, 40, 14],
[3, 135, 107, 5, 136, 108],
[3, 67, 41, 13, 68, 42],
[15, 54, 24, 5, 55, 25],
[15, 43, 15, 10, 44, 16],
[4, 144, 116, 4, 145, 117],
[17, 68, 42],
[17, 50, 22, 6, 51, 23],
[19, 46, 16, 6, 47, 17],
[2, 139, 111, 7, 140, 112],
[17, 74, 46],
[7, 54, 24, 16, 55, 25],
[34, 37, 13],
[4, 151, 121, 5, 152, 122],
[4, 75, 47, 14, 76, 48],
[11, 54, 24, 14, 55, 25],
[16, 45, 15, 14, 46, 16],
[6, 147, 117, 4, 148, 118],
[6, 73, 45, 14, 74, 46],
[11, 54, 24, 16, 55, 25],
[30, 46, 16, 2, 47, 17],
[8, 132, 106, 4, 133, 107],
[8, 75, 47, 13, 76, 48],
[7, 54, 24, 22, 55, 25],
[22, 45, 15, 13, 46, 16],
[10, 142, 114, 2, 143, 115],
[19, 74, 46, 4, 75, 47],
[28, 50, 22, 6, 51, 23],
[33, 46, 16, 4, 47, 17],
[8, 152, 122, 4, 153, 123],
[22, 73, 45, 3, 74, 46],
[8, 53, 23, 26, 54, 24],
[12, 45, 15, 28, 46, 16],
[3, 147, 117, 10, 148, 118],
[3, 73, 45, 23, 74, 46],
[4, 54, 24, 31, 55, 25],
[11, 45, 15, 31, 46, 16],
[7, 146, 116, 7, 147, 117],
[21, 73, 45, 7, 74, 46],
[1, 53, 23, 37, 54, 24],
[19, 45, 15, 26, 46, 16],
[5, 145, 115, 10, 146, 116],
[19, 75, 47, 10, 76, 48],
[15, 54, 24, 25, 55, 25],
[23, 45, 15, 25, 46, 16],
[13, 145, 115, 3, 146, 116],
[2, 74, 46, 29, 75, 47],
[42, 54, 24, 1, 55, 25],
[23, 45, 15, 28, 46, 16],
[17, 145, 115],
[10, 74, 46, 23, 75, 47],
[10, 54, 24, 35, 55, 25],
[19, 45, 15, 35, 46, 16],
[17, 145, 115, 1, 146, 116],
[14, 74, 46, 21, 75, 47],
[29, 54, 24, 19, 55, 25],
[11, 45, 15, 46, 46, 16],
[13, 145, 115, 6, 146, 116],
[14, 74, 46, 23, 75, 47],
[44, 54, 24, 7, 55, 25],
[59, 46, 16, 1, 47, 17],
[12, 151, 121, 7, 152, 122],
[12, 75, 47, 26, 76, 48],
[39, 54, 24, 14, 55, 25],
[22, 45, 15, 41, 46, 16],
[6, 151, 121, 14, 152, 122],
[6, 75, 47, 34, 76, 48],
[46, 54, 24, 10, 55, 25],
[2, 45, 15, 64, 46, 16],
[17, 152, 122, 4, 153, 123],
[29, 74, 46, 14, 75, 47],
[49, 54, 24, 10, 55, 25],
[24, 45, 15, 46, 46, 16],
[4, 152, 122, 18, 153, 123],
[13, 74, 46, 32, 75, 47],
[48, 54, 24, 14, 55, 25],
[42, 45, 15, 32, 46, 16],
[20, 147, 117, 4, 148, 118],
[40, 75, 47, 7, 76, 48],
[43, 54, 24, 22, 55, 25],
[10, 45, 15, 67, 46, 16],
[19, 148, 118, 6, 149, 119],
[18, 75, 47, 31, 76, 48],
[34, 54, 24, 34, 55, 25],
[20, 45, 15, 61, 46, 16],
];
class QRBitBuffer {
constructor() {
this.buffer = [];
this.length = 0;
}
QRBitBuffer.prototype.get = function (index) {
var bufIndex = Math.floor(index / 8);
get(index) {
const bufIndex = Math.floor(index / 8);
return ((this.buffer[bufIndex] >>> (7 - (index % 8))) & 1) == 1;
};
QRBitBuffer.prototype.put = function (num, length) {
for (var i = 0; i < length; i++) {
}
put(num, length) {
for (let i = 0; i < length; i++) {
this.putBit(((num >>> (length - i - 1)) & 1) == 1);
}
};
QRBitBuffer.prototype.getLengthInBits = function () {
}
getLengthInBits() {
return this.length;
};
QRBitBuffer.prototype.putBit = function (bit) {
var bufIndex = Math.floor(this.length / 8);
}
putBit(bit) {
const bufIndex = Math.floor(this.length / 8);
if (this.buffer.length <= bufIndex) {

@@ -1003,6 +1011,5 @@ this.buffer.push(0);

this.length++;
};
return QRBitBuffer;
}());
var QRCodeLimitLength = [
}
}
const QRCodeLimitLength = [
[17, 14, 11, 7],

@@ -1009,0 +1016,0 @@ [32, 26, 20, 14],

/// <reference types="node" />
export declare type ComponentOptions = {
export declare type Options = {
/**
* Component options for data/ECC.
* Text to be encoded in the QR code.
*/
data?: {
text: string;
/**
* Size of the QR code in pixel.
*
* @defaultValue 400
*/
size?: number;
/**
* Size of margins around the QR code body in pixel.
*
* @defaultValue 20
*/
margin?: number;
qr?: {
/**
* Error correction level of the QR code.
*
* Accepts a value provided by _QRErrorCorrectLevel_.
*
* For more information, please refer to [https://www.qrcode.com/en/about/error_correction.html](https://www.qrcode.com/en/about/error_correction.html).
*
* @defaultValue 0
*/
correctLevel?: number;
/**
* **This is an advanced option.**
*
* Specify the mask pattern to be used in QR code encoding.
*
* Accepts a value provided by _QRMaskPattern_.
*
* To find out all eight mask patterns, please refer to [https://en.wikipedia.org/wiki/File:QR_Code_Mask_Patterns.svg](https://en.wikipedia.org/wiki/File:QR_Code_Mask_Patterns.svg)
*
* For more information, please refer to [https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Masking](https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Masking).
*/
maskPattern?: number;
/**
* **This is an advanced option.**
*
* Specify the version to be used in QR code encoding.
*
* Accepts an integer in range [1, 40].
*
* For more information, please refer to [https://www.qrcode.com/en/about/version.html](https://www.qrcode.com/en/about/version.html).
*/
version?: number;
};
/**
* Options for data/ECC dots.
*/
dots?: {
/**
* Scale factor for all dots.
* @range 0..1
* @default 1

@@ -14,2 +65,3 @@ */

* Percentage to round the dots (after scaling) in the QR
* @range 0..1
* @default 0

@@ -20,3 +72,3 @@ */

/**
* Component options for finder pattern.
* Options for finder squares.
*/

@@ -26,2 +78,3 @@ finder?: {

* Percentage to round the three finder in the QR
* @range 0..1
* @default 0

@@ -31,59 +84,3 @@ */

};
};
export declare type Options = {
/**
* Text to be encoded in the QR code.
*/
text: string;
/**
* Size of the QR code in pixel.
*
* @defaultValue 400
*/
size?: number;
/**
* Size of margins around the QR code body in pixel.
*
* @defaultValue 20
*/
margin?: number;
/**
* Error correction level of the QR code.
*
* Accepts a value provided by _QRErrorCorrectLevel_.
*
* For more information, please refer to [https://www.qrcode.com/en/about/error_correction.html](https://www.qrcode.com/en/about/error_correction.html).
*
* @defaultValue 0
*/
correctLevel?: number;
/**
* **This is an advanced option.**
*
* Specify the mask pattern to be used in QR code encoding.
*
* Accepts a value provided by _QRMaskPattern_.
*
* To find out all eight mask patterns, please refer to [https://en.wikipedia.org/wiki/File:QR_Code_Mask_Patterns.svg](https://en.wikipedia.org/wiki/File:QR_Code_Mask_Patterns.svg)
*
* For more information, please refer to [https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Masking](https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Masking).
*/
maskPattern?: number;
/**
* **This is an advanced option.**
*
* Specify the version to be used in QR code encoding.
*
* Accepts an integer in range [1, 40].
*
* For more information, please refer to [https://www.qrcode.com/en/about/version.html](https://www.qrcode.com/en/about/version.html).
*/
version?: number;
/**
* Options to control components in the QR code.
*
* @deafultValue undefined
*/
components?: ComponentOptions;
/**
* Color of the blocks on the QR code.

@@ -115,60 +112,72 @@ *

/**
* Properties for the gradient
*/
gradient?: (ctx: CanvasRenderingContext2D, size: number) => CanvasGradient;
/**
* Background image to be used in the QR code.
*
* Accepts a `data:` string in web browsers or a Buffer in Node.js.
*
* @defaultValue undefined
*/
backgroundImage?: string | Buffer;
/**
* Color of the dimming mask above the background image.
*
* Accepts a CSS &lt;color&gt;.
*
* For more information about CSS &lt;color&gt;, please refer to [https://developer.mozilla.org/en-US/docs/Web/CSS/color_value](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value).
*
* @defaultValue "rgba(0, 0, 0, 0)"
*/
backgroundDimming?: string;
/**
* Use a white margin instead of a transparent one which reveals the background of the QR code on margins.
*
* @defaultValue true
* @defaultValue false
*/
whiteMargin?: boolean;
/**
* Logo image to be displayed at the center of the QR code.
*
* Accepts a `data:` string in web browsers or a Buffer in Node.js.
*
* When set to `undefined` or `null`, the logo is disabled.
*
* @defaultValue undefined
* Function for creating a gradient as foreground color
* Must return a CanvasGradient
* Overrides colorDark option
*/
logoImage?: string | Buffer;
gradient?: (ctx: CanvasRenderingContext2D, size: number) => CanvasGradient;
/**
* Ratio of the logo size to the QR code size.
*
* @defaultValue 0.2
* Background options
*/
logoScale?: number;
background?: {
/**
* Background image to be used in the QR code.
*
* Accepts a `data:` string in web browsers or a Buffer in Node.js.
*/
image?: string | Buffer;
/**
* Color of the dimming mask above the background image.
*
* Accepts a CSS &lt;color&gt;.
*
* For more information about CSS &lt;color&gt;, please refer to [https://developer.mozilla.org/en-US/docs/Web/CSS/color_value](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value).
*
* @defaultValue "rgba(0, 0, 0, 0)"
*/
dimming?: string;
};
/**
* Size of margins around the logo image in pixels.
*
* @defaultValue 6
* Logo options
*/
logoMargin?: number;
logo?: {
/**
* Logo image to be displayed at the center of the QR code.
*
* Accepts a `data:` string in web browsers or a Buffer in Node.js.
*
* When set to `undefined` or `null`, the logo is disabled.
*/
image?: string | Buffer;
/**
* Ratio of the logo size to the QR code size.
*
* @defaultValue 0.2
*/
scale?: number;
/**
* Size of margins around the logo image in pixels.
*
* @defaultValue 10
*/
margin?: number;
/**
* Corner radius of the logo image in pixels.
*
* @range 0..1
*
* @defaultValue 0.4
*/
round?: number;
};
/**
* Corner radius of the logo image in pixels.
* Custom function to draw a custom shape as a dot in the QR.
*
* @defaultValue 8
* Accepts a string or a custom function
*/
logoCornerRadius?: number;
/**
* Custom function to draw a custom shape as a point in the QR.
*/
drawFunction?: "telegram" | ((canvasContext: CanvasRenderingContext2D, left: number, top: number, nSize: number, scale: number, round: number, parameters: {

@@ -184,3 +193,5 @@ isTiming: boolean;

/**
* Custom function called before at certain phases of drawing the QR
* Custom function called at certain phases of drawing the QR
*
* Useful for customizing the canvas if is not supported by this library
*/

@@ -187,0 +198,0 @@ onEvent?: (type: EventTypes, canvasContext: CanvasRenderingContext2D, parameters: object) => undefined;

@@ -1,2 +0,1 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
export {};
{
"name": "@qrcode-js/core",
"version": "0.1.0",
"version": "0.2.0",
"description": "An awesome but simple QR code generator written in JavaScript.",
"main": "./lib/index.js",
"types": "./lib/index.d.ts",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"type": "module",
"scripts": {
"dev": "tsc -w",
"build-dist": "webpack --config webpack.config.js",
"build-lib": "tsc",
"build": "npm run build-lib && npm run build-dist",
"dev": "tsc -w --preserveWatchOutput",
"build": "tsc",
"prepublishOnly": "npm run build"
},
"files": [
"/lib/",
"/dist/",
"yarn.lock"
"lib"
],

@@ -35,12 +32,10 @@ "repository": {

"dependencies": {
"buffer": "^6.0.3"
"buffer": "^6.0.3",
"lodash": "^4.17.21"
},
"devDependencies": {
"@types/node": "^16.0.14",
"ts-loader": "^8.0.18",
"ts-node": "^10.1.0",
"typescript": "^3.9.6",
"webpack": "^5.27.2",
"webpack-cli": "^4.5.0"
}
"@types/lodash": "^4.14.184",
"@types/node": "^16.0.14"
},
"gitHead": "451e3fc5eeecce64978876246d81d1aff8099b9f"
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc