@juit/qrcode 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +211 -0
- package/NOTICE.md +13 -0
- package/README.md +175 -0
- package/dist/encode.cjs +147 -0
- package/dist/encode.cjs.map +6 -0
- package/dist/encode.d.ts +11 -0
- package/dist/encode.mjs +122 -0
- package/dist/encode.mjs.map +6 -0
- package/dist/images/path.cjs +145 -0
- package/dist/images/path.cjs.map +6 -0
- package/dist/images/path.d.ts +6 -0
- package/dist/images/path.mjs +120 -0
- package/dist/images/path.mjs.map +6 -0
- package/dist/images/pdf.cjs +96 -0
- package/dist/images/pdf.cjs.map +6 -0
- package/dist/images/pdf.d.ts +3 -0
- package/dist/images/pdf.mjs +71 -0
- package/dist/images/pdf.mjs.map +6 -0
- package/dist/images/png.cjs +86 -0
- package/dist/images/png.cjs.map +6 -0
- package/dist/images/png.d.ts +3 -0
- package/dist/images/png.mjs +61 -0
- package/dist/images/png.mjs.map +6 -0
- package/dist/images/svg.cjs +64 -0
- package/dist/images/svg.cjs.map +6 -0
- package/dist/images/svg.d.ts +54 -0
- package/dist/images/svg.mjs +38 -0
- package/dist/images/svg.mjs.map +6 -0
- package/dist/index.cjs +110 -0
- package/dist/index.cjs.map +6 -0
- package/dist/index.d.ts +74 -0
- package/dist/index.mjs +74 -0
- package/dist/index.mjs.map +6 -0
- package/dist/matrix.cjs +360 -0
- package/dist/matrix.cjs.map +6 -0
- package/dist/matrix.d.ts +3 -0
- package/dist/matrix.mjs +335 -0
- package/dist/matrix.mjs.map +6 -0
- package/dist/qrcode.cjs +183 -0
- package/dist/qrcode.cjs.map +6 -0
- package/dist/qrcode.d.ts +20 -0
- package/dist/qrcode.mjs +158 -0
- package/dist/qrcode.mjs.map +6 -0
- package/dist/utils/crc32.cjs +53 -0
- package/dist/utils/crc32.cjs.map +6 -0
- package/dist/utils/crc32.d.ts +9 -0
- package/dist/utils/crc32.mjs +28 -0
- package/dist/utils/crc32.mjs.map +6 -0
- package/dist/utils/dataurl.cjs +35 -0
- package/dist/utils/dataurl.cjs.map +6 -0
- package/dist/utils/dataurl.d.ts +1 -0
- package/dist/utils/dataurl.mjs +10 -0
- package/dist/utils/dataurl.mjs.map +6 -0
- package/dist/utils/deflate.cjs +39 -0
- package/dist/utils/deflate.cjs.map +6 -0
- package/dist/utils/deflate.d.ts +2 -0
- package/dist/utils/deflate.mjs +14 -0
- package/dist/utils/deflate.mjs.map +6 -0
- package/dist/utils/ecc.cjs +93 -0
- package/dist/utils/ecc.cjs.map +6 -0
- package/dist/utils/ecc.d.ts +2 -0
- package/dist/utils/ecc.mjs +68 -0
- package/dist/utils/ecc.mjs.map +6 -0
- package/dist/utils/merge.cjs +41 -0
- package/dist/utils/merge.cjs.map +6 -0
- package/dist/utils/merge.d.ts +2 -0
- package/dist/utils/merge.mjs +16 -0
- package/dist/utils/merge.mjs.map +6 -0
- package/package.json +61 -0
- package/src/encode.ts +180 -0
- package/src/images/path.ts +131 -0
- package/src/images/pdf.ts +76 -0
- package/src/images/png.ts +105 -0
- package/src/images/svg.ts +102 -0
- package/src/index.ts +147 -0
- package/src/matrix.ts +392 -0
- package/src/qrcode.ts +217 -0
- package/src/utils/crc32.ts +50 -0
- package/src/utils/dataurl.ts +7 -0
- package/src/utils/deflate.ts +17 -0
- package/src/utils/ecc.ts +95 -0
- package/src/utils/merge.ts +13 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// images/png.ts
|
|
21
|
+
var png_exports = {};
|
|
22
|
+
__export(png_exports, {
|
|
23
|
+
generatePng: () => generatePng
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(png_exports);
|
|
26
|
+
var import_crc32 = require("../utils/crc32.cjs");
|
|
27
|
+
var import_deflate = require("../utils/deflate.cjs");
|
|
28
|
+
var PNG_HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);
|
|
29
|
+
var PNG_IHDR = new Uint8Array([0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0]);
|
|
30
|
+
var PNG_IDAT = new Uint8Array([0, 0, 0, 0, 73, 68, 65, 84]);
|
|
31
|
+
var PNG_IEND = new Uint8Array([0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]);
|
|
32
|
+
async function png(bitmap2) {
|
|
33
|
+
const chunks = [];
|
|
34
|
+
chunks.push(PNG_HEAD);
|
|
35
|
+
const imageHeader = new Uint8Array(PNG_IHDR);
|
|
36
|
+
const imageHeaderView = new DataView(imageHeader.buffer);
|
|
37
|
+
imageHeaderView.setUint32(8, bitmap2.size, false);
|
|
38
|
+
imageHeaderView.setUint32(12, bitmap2.size, false);
|
|
39
|
+
imageHeaderView.setUint32(21, (0, import_crc32.crc32)(imageHeader, 4, -4), false);
|
|
40
|
+
chunks.push(imageHeader);
|
|
41
|
+
const data = await (0, import_deflate.deflate)(bitmap2.data);
|
|
42
|
+
const imageData = new Uint8Array(PNG_IDAT.length + data.length + 4);
|
|
43
|
+
const imageDataView = new DataView(imageData.buffer);
|
|
44
|
+
imageData.set(PNG_IDAT, 0);
|
|
45
|
+
imageData.set(data, PNG_IDAT.length);
|
|
46
|
+
imageDataView.setUint32(0, imageData.length - 12, false);
|
|
47
|
+
imageDataView.setUint32(imageData.length - 4, (0, import_crc32.crc32)(imageData, 4, -4), false);
|
|
48
|
+
chunks.push(imageData);
|
|
49
|
+
chunks.push(PNG_IEND);
|
|
50
|
+
return new Uint8Array(await new Blob(chunks).arrayBuffer());
|
|
51
|
+
}
|
|
52
|
+
function bitmap(matrix, scale, margin) {
|
|
53
|
+
const n = matrix.length;
|
|
54
|
+
const x = (n + 2 * margin) * scale;
|
|
55
|
+
const data = new Uint8Array((x + 1) * x).fill(255);
|
|
56
|
+
for (let i = 0; i < x; i++) {
|
|
57
|
+
data[i * (x + 1)] = 0;
|
|
58
|
+
}
|
|
59
|
+
for (let i = 0; i < n; i++) {
|
|
60
|
+
for (let j = 0; j < n; j++) {
|
|
61
|
+
if (matrix[i][j]) {
|
|
62
|
+
const offset = ((margin + i) * (x + 1) + (margin + j)) * scale + 1;
|
|
63
|
+
data.fill(0, offset, offset + scale);
|
|
64
|
+
for (let c = 1; c < scale; c++) {
|
|
65
|
+
const chunk = data.subarray(offset, offset + scale);
|
|
66
|
+
data.set(chunk, offset + c * (x + 1));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
data,
|
|
73
|
+
size: x
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
async function generatePng(code, options) {
|
|
77
|
+
const { margin = 4, scale = 1 } = { ...options };
|
|
78
|
+
const result = bitmap(code.matrix, scale, margin);
|
|
79
|
+
const image = await png(result);
|
|
80
|
+
return image;
|
|
81
|
+
}
|
|
82
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
83
|
+
0 && (module.exports = {
|
|
84
|
+
generatePng
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=png.cjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/images/png.ts"],
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAsB;AACtB,qBAAwB;AAiBxB,IAAM,WAAW,IAAI,WAAW,CAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAG,CAAC;AACnE,IAAM,WAAW,IAAI,WAAW,CAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,CAAC;AAClH,IAAM,WAAW,IAAI,WAAW,CAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,EAAG,CAAC;AAC9D,IAAM,WAAW,IAAI,WAAW,CAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,GAAI,CAAC;AAOhF,eAAe,IAAIA,SAAqC;AACtD,QAAM,SAAuB,CAAC;AAG9B,SAAO,KAAK,QAAQ;AAGpB,QAAM,cAAc,IAAI,WAAW,QAAQ;AAC3C,QAAM,kBAAkB,IAAI,SAAS,YAAY,MAAM;AAEvD,kBAAgB,UAAU,GAAGA,QAAO,MAAM,KAAK;AAC/C,kBAAgB,UAAU,IAAIA,QAAO,MAAM,KAAK;AAChD,kBAAgB,UAAU,QAAI,oBAAM,aAAa,GAAG,EAAE,GAAG,KAAK;AAE9D,SAAO,KAAK,WAAW;AAGvB,QAAM,OAAO,UAAM,wBAAQA,QAAO,IAAI;AAGtC,QAAM,YAAY,IAAI,WAAW,SAAS,SAAS,KAAK,SAAS,CAAC;AAClE,QAAM,gBAAgB,IAAI,SAAS,UAAU,MAAM;AAEnD,YAAU,IAAI,UAAU,CAAC;AACzB,YAAU,IAAI,MAAM,SAAS,MAAM;AACnC,gBAAc,UAAU,GAAG,UAAU,SAAS,IAAI,KAAK;AACvD,gBAAc,UAAU,UAAU,SAAS,OAAG,oBAAM,WAAW,GAAG,EAAE,GAAG,KAAK;AAE5E,SAAO,KAAK,SAAS;AAGrB,SAAO,KAAK,QAAQ;AAGpB,SAAO,IAAI,WAAW,MAAM,IAAI,KAAK,MAAM,EAAE,YAAY,CAAC;AAC5D;AAGA,SAAS,OAAO,QAA8B,OAAe,QAAwB;AACnF,QAAM,IAAI,OAAO;AACjB,QAAM,KAAK,IAAI,IAAI,UAAU;AAC7B,QAAM,OAAO,IAAI,YAAY,IAAI,KAAK,CAAC,EAAE,KAAK,GAAG;AAEjD,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,SAAK,KAAK,IAAI,EAAE,IAAI;AAAA,EACtB;AAEA,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,UAAI,OAAO,CAAC,EAAG,CAAC,GAAG;AACjB,cAAM,WAAW,SAAS,MAAM,IAAI,MAAM,SAAS,MAAM,QAAQ;AACjE,aAAK,KAAK,GAAG,QAAQ,SAAS,KAAK;AACnC,iBAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,gBAAM,QAAQ,KAAK,SAAS,QAAQ,SAAS,KAAK;AAClD,eAAK,IAAI,OAAO,SAAS,KAAK,IAAI,EAAE;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,MAAM;AAAA,EACR;AACF;AAOA,eAAsB,YAAY,MAAc,SAAmD;AACjG,QAAM,EAAE,SAAS,GAAG,QAAQ,EAAE,IAAI,EAAE,GAAG,QAAQ;AAC/C,QAAM,SAAS,OAAO,KAAK,QAAQ,OAAO,MAAM;AAChD,QAAM,QAAQ,MAAM,IAAI,MAAM;AAC9B,SAAO;AACT;",
|
|
5
|
+
"names": ["bitmap"]
|
|
6
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// images/png.ts
|
|
2
|
+
import { crc32 } from "../utils/crc32.mjs";
|
|
3
|
+
import { deflate } from "../utils/deflate.mjs";
|
|
4
|
+
var PNG_HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);
|
|
5
|
+
var PNG_IHDR = new Uint8Array([0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0]);
|
|
6
|
+
var PNG_IDAT = new Uint8Array([0, 0, 0, 0, 73, 68, 65, 84]);
|
|
7
|
+
var PNG_IEND = new Uint8Array([0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]);
|
|
8
|
+
async function png(bitmap2) {
|
|
9
|
+
const chunks = [];
|
|
10
|
+
chunks.push(PNG_HEAD);
|
|
11
|
+
const imageHeader = new Uint8Array(PNG_IHDR);
|
|
12
|
+
const imageHeaderView = new DataView(imageHeader.buffer);
|
|
13
|
+
imageHeaderView.setUint32(8, bitmap2.size, false);
|
|
14
|
+
imageHeaderView.setUint32(12, bitmap2.size, false);
|
|
15
|
+
imageHeaderView.setUint32(21, crc32(imageHeader, 4, -4), false);
|
|
16
|
+
chunks.push(imageHeader);
|
|
17
|
+
const data = await deflate(bitmap2.data);
|
|
18
|
+
const imageData = new Uint8Array(PNG_IDAT.length + data.length + 4);
|
|
19
|
+
const imageDataView = new DataView(imageData.buffer);
|
|
20
|
+
imageData.set(PNG_IDAT, 0);
|
|
21
|
+
imageData.set(data, PNG_IDAT.length);
|
|
22
|
+
imageDataView.setUint32(0, imageData.length - 12, false);
|
|
23
|
+
imageDataView.setUint32(imageData.length - 4, crc32(imageData, 4, -4), false);
|
|
24
|
+
chunks.push(imageData);
|
|
25
|
+
chunks.push(PNG_IEND);
|
|
26
|
+
return new Uint8Array(await new Blob(chunks).arrayBuffer());
|
|
27
|
+
}
|
|
28
|
+
function bitmap(matrix, scale, margin) {
|
|
29
|
+
const n = matrix.length;
|
|
30
|
+
const x = (n + 2 * margin) * scale;
|
|
31
|
+
const data = new Uint8Array((x + 1) * x).fill(255);
|
|
32
|
+
for (let i = 0; i < x; i++) {
|
|
33
|
+
data[i * (x + 1)] = 0;
|
|
34
|
+
}
|
|
35
|
+
for (let i = 0; i < n; i++) {
|
|
36
|
+
for (let j = 0; j < n; j++) {
|
|
37
|
+
if (matrix[i][j]) {
|
|
38
|
+
const offset = ((margin + i) * (x + 1) + (margin + j)) * scale + 1;
|
|
39
|
+
data.fill(0, offset, offset + scale);
|
|
40
|
+
for (let c = 1; c < scale; c++) {
|
|
41
|
+
const chunk = data.subarray(offset, offset + scale);
|
|
42
|
+
data.set(chunk, offset + c * (x + 1));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
data,
|
|
49
|
+
size: x
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
async function generatePng(code, options) {
|
|
53
|
+
const { margin = 4, scale = 1 } = { ...options };
|
|
54
|
+
const result = bitmap(code.matrix, scale, margin);
|
|
55
|
+
const image = await png(result);
|
|
56
|
+
return image;
|
|
57
|
+
}
|
|
58
|
+
export {
|
|
59
|
+
generatePng
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=png.mjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/images/png.ts"],
|
|
4
|
+
"mappings": ";AAAA,SAAS,aAAa;AACtB,SAAS,eAAe;AAiBxB,IAAM,WAAW,IAAI,WAAW,CAAE,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAG,CAAC;AACnE,IAAM,WAAW,IAAI,WAAW,CAAE,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,CAAC;AAClH,IAAM,WAAW,IAAI,WAAW,CAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,EAAG,CAAC;AAC9D,IAAM,WAAW,IAAI,WAAW,CAAE,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,GAAI,CAAC;AAOhF,eAAe,IAAIA,SAAqC;AACtD,QAAM,SAAuB,CAAC;AAG9B,SAAO,KAAK,QAAQ;AAGpB,QAAM,cAAc,IAAI,WAAW,QAAQ;AAC3C,QAAM,kBAAkB,IAAI,SAAS,YAAY,MAAM;AAEvD,kBAAgB,UAAU,GAAGA,QAAO,MAAM,KAAK;AAC/C,kBAAgB,UAAU,IAAIA,QAAO,MAAM,KAAK;AAChD,kBAAgB,UAAU,IAAI,MAAM,aAAa,GAAG,EAAE,GAAG,KAAK;AAE9D,SAAO,KAAK,WAAW;AAGvB,QAAM,OAAO,MAAM,QAAQA,QAAO,IAAI;AAGtC,QAAM,YAAY,IAAI,WAAW,SAAS,SAAS,KAAK,SAAS,CAAC;AAClE,QAAM,gBAAgB,IAAI,SAAS,UAAU,MAAM;AAEnD,YAAU,IAAI,UAAU,CAAC;AACzB,YAAU,IAAI,MAAM,SAAS,MAAM;AACnC,gBAAc,UAAU,GAAG,UAAU,SAAS,IAAI,KAAK;AACvD,gBAAc,UAAU,UAAU,SAAS,GAAG,MAAM,WAAW,GAAG,EAAE,GAAG,KAAK;AAE5E,SAAO,KAAK,SAAS;AAGrB,SAAO,KAAK,QAAQ;AAGpB,SAAO,IAAI,WAAW,MAAM,IAAI,KAAK,MAAM,EAAE,YAAY,CAAC;AAC5D;AAGA,SAAS,OAAO,QAA8B,OAAe,QAAwB;AACnF,QAAM,IAAI,OAAO;AACjB,QAAM,KAAK,IAAI,IAAI,UAAU;AAC7B,QAAM,OAAO,IAAI,YAAY,IAAI,KAAK,CAAC,EAAE,KAAK,GAAG;AAEjD,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,SAAK,KAAK,IAAI,EAAE,IAAI;AAAA,EACtB;AAEA,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,UAAI,OAAO,CAAC,EAAG,CAAC,GAAG;AACjB,cAAM,WAAW,SAAS,MAAM,IAAI,MAAM,SAAS,MAAM,QAAQ;AACjE,aAAK,KAAK,GAAG,QAAQ,SAAS,KAAK;AACnC,iBAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,gBAAM,QAAQ,KAAK,SAAS,QAAQ,SAAS,KAAK;AAClD,eAAK,IAAI,OAAO,SAAS,KAAK,IAAI,EAAE;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,MAAM;AAAA,EACR;AACF;AAOA,eAAsB,YAAY,MAAc,SAAmD;AACjG,QAAM,EAAE,SAAS,GAAG,QAAQ,EAAE,IAAI,EAAE,GAAG,QAAQ;AAC/C,QAAM,SAAS,OAAO,KAAK,QAAQ,OAAO,MAAM;AAChD,QAAM,QAAQ,MAAM,IAAI,MAAM;AAC9B,SAAO;AACT;",
|
|
5
|
+
"names": ["bitmap"]
|
|
6
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// images/svg.ts
|
|
21
|
+
var svg_exports = {};
|
|
22
|
+
__export(svg_exports, {
|
|
23
|
+
generateSvg: () => generateSvg,
|
|
24
|
+
generateSvgPath: () => generateSvgPath
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(svg_exports);
|
|
27
|
+
var import_path = require("./path.cjs");
|
|
28
|
+
function convertPath(chunks, code, margin) {
|
|
29
|
+
(0, import_path.generatePaths)(code).forEach((path) => {
|
|
30
|
+
for (let k = 0; k < path.length; k++) {
|
|
31
|
+
const item = path[k];
|
|
32
|
+
switch (item[0]) {
|
|
33
|
+
case "M":
|
|
34
|
+
chunks.push(`M${item[1] + margin} ${item[2] + margin}`);
|
|
35
|
+
break;
|
|
36
|
+
default:
|
|
37
|
+
chunks.push(...item);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
chunks.push("z");
|
|
41
|
+
});
|
|
42
|
+
return chunks;
|
|
43
|
+
}
|
|
44
|
+
function generateSvgPath(code) {
|
|
45
|
+
return convertPath([], code, 0).join();
|
|
46
|
+
}
|
|
47
|
+
function generateSvg(code, options) {
|
|
48
|
+
const { margin = 4, scale = 1 } = { ...options };
|
|
49
|
+
const size = code.size + 2 * margin;
|
|
50
|
+
const scaled = size * scale;
|
|
51
|
+
const chunks = convertPath([
|
|
52
|
+
`<svg xmlns="http://www.w3.org/2000/svg" width="${scaled}" height="${scaled}" viewBox="0 0 ${size} ${size}">`,
|
|
53
|
+
'<path d="'
|
|
54
|
+
// beginning of the path "d" attribute...
|
|
55
|
+
], code, margin);
|
|
56
|
+
chunks.push('"/></svg>');
|
|
57
|
+
return chunks.join("");
|
|
58
|
+
}
|
|
59
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
60
|
+
0 && (module.exports = {
|
|
61
|
+
generateSvg,
|
|
62
|
+
generateSvgPath
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=svg.cjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/images/svg.ts"],
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA8B;AAQ9B,SAAS,YACL,QACA,MACA,QACmB;AACrB,iCAAc,IAAI,EAAE,QAAQ,CAAC,SAAS;AACpC,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,OAAO,KAAK,CAAC;AACnB,cAAQ,KAAK,CAAC,GAAG;AAAA,QACf,KAAK;AACH,iBAAO,KAAK,IAAI,KAAK,CAAC,IAAI,MAAM,IAAI,KAAK,CAAC,IAAI,MAAM,EAAE;AACtD;AAAA,QACF;AACE,iBAAO,KAAK,GAAG,IAAI;AAAA,MACvB;AAAA,IACF;AACA,WAAO,KAAK,GAAG;AAAA,EACjB,CAAC;AAED,SAAO;AACT;AAwDO,SAAS,gBAAgB,MAAsB;AACpD,SAAO,YAAY,CAAC,GAAG,MAAM,CAAC,EAAE,KAAK;AACvC;AAGO,SAAS,YAAY,MAAc,SAAsC;AAC9E,QAAM,EAAE,SAAS,GAAG,QAAQ,EAAE,IAAI,EAAE,GAAG,QAAQ;AAC/C,QAAM,OAAO,KAAK,OAAO,IAAI;AAC7B,QAAM,SAAS,OAAO;AAEtB,QAAM,SAAS,YAAY;AAAA,IACzB,kDAAkD,MAAM,aAAa,MAAM,kBAAkB,IAAI,IAAI,IAAI;AAAA,IACzG;AAAA;AAAA,EACF,GAAG,MAAM,MAAM;AAEf,SAAO,KAAK,WAAW;AACvB,SAAO,OAAO,KAAK,EAAE;AACvB;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { QrCode, QrCodeImageOptions } from '..';
|
|
2
|
+
/**
|
|
3
|
+
* Generate a SVG _path_ for the given {@link QrCode}.
|
|
4
|
+
*
|
|
5
|
+
* The returned SVG path will be a simple conversion of the QR code's own
|
|
6
|
+
* {@link QrCode.matrix matrix} into a square path of _**N**_ "pixels"
|
|
7
|
+
* (where _**N**_ is the size of the {@link QrCode.size size} of the matrix).
|
|
8
|
+
*
|
|
9
|
+
* This can be scaled and positioned into a final SVG using the `scale(...)` and
|
|
10
|
+
* `translate(...)` [basic SVG transformations](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Basic_Transformations).
|
|
11
|
+
*
|
|
12
|
+
* This is also particulary useful with [PDFKit](https://pdfkit.org/)'s own
|
|
13
|
+
* implementation of [SVG paths](https://pdfkit.org/docs/vector.html#svg_paths).
|
|
14
|
+
*
|
|
15
|
+
* We can use it together with `translate(...)` and `scale(...)` to draw our QR
|
|
16
|
+
* code anywhere on the page, in any size. For example, to prepare a simple A4
|
|
17
|
+
* document with a 10cm QR code smack in the middle we can:
|
|
18
|
+
*
|
|
19
|
+
* ```typescript
|
|
20
|
+
* // generate the QR code _structure_ for our message
|
|
21
|
+
* const code = generateQrCode('https://www.juit.com/')
|
|
22
|
+
*
|
|
23
|
+
* // generate the SVG path for our QR code
|
|
24
|
+
* const path = generateSvgPath(code)
|
|
25
|
+
*
|
|
26
|
+
* // calculate how to translate and scale our QR code in the page
|
|
27
|
+
* const dpcm = 72 / 2.54 // PDFKit uses 72dpi (inches) we want metric!
|
|
28
|
+
* const size = 10 * dpcm // 10 cm (size of our QR code) in dots
|
|
29
|
+
* const scale = size / code.size // scale factor for our QR code to be 10 cm
|
|
30
|
+
* const x = ((21 - 10) / 2) * dpcm // center horizontally
|
|
31
|
+
* const y = ((29.7 - 10) / 2) * dpcm // center vertically
|
|
32
|
+
*
|
|
33
|
+
* // create a new A4 document, and stream it to "test.pdf"
|
|
34
|
+
* const document = new PDFDocument({ size: 'A4' })
|
|
35
|
+
* const stream = createWriteStream('test.pdf')
|
|
36
|
+
* document.pipe(stream)
|
|
37
|
+
*
|
|
38
|
+
* // draw our 10cm QR code right in the middle of the page
|
|
39
|
+
* document
|
|
40
|
+
* .translate(x, y) // move to x = 5.5cm, y = 9.85cm
|
|
41
|
+
* .scale(scale) // scale our QR code to 10cm width and height
|
|
42
|
+
* .path(path) // draw our QR code smack in the middle of the page
|
|
43
|
+
* .fill('black') // fill our QR code in black
|
|
44
|
+
* .end() // finish up and close the document
|
|
45
|
+
*
|
|
46
|
+
* // wait for the stream to finish
|
|
47
|
+
* stream.on('finish', () => {
|
|
48
|
+
* // your PDF file is ready!
|
|
49
|
+
* })
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare function generateSvgPath(code: QrCode): string;
|
|
53
|
+
/** Generate a SVG image for the given {@link QrCode} */
|
|
54
|
+
export declare function generateSvg(code: QrCode, options?: QrCodeImageOptions): string;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// images/svg.ts
|
|
2
|
+
import { generatePaths } from "./path.mjs";
|
|
3
|
+
function convertPath(chunks, code, margin) {
|
|
4
|
+
generatePaths(code).forEach((path) => {
|
|
5
|
+
for (let k = 0; k < path.length; k++) {
|
|
6
|
+
const item = path[k];
|
|
7
|
+
switch (item[0]) {
|
|
8
|
+
case "M":
|
|
9
|
+
chunks.push(`M${item[1] + margin} ${item[2] + margin}`);
|
|
10
|
+
break;
|
|
11
|
+
default:
|
|
12
|
+
chunks.push(...item);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
chunks.push("z");
|
|
16
|
+
});
|
|
17
|
+
return chunks;
|
|
18
|
+
}
|
|
19
|
+
function generateSvgPath(code) {
|
|
20
|
+
return convertPath([], code, 0).join();
|
|
21
|
+
}
|
|
22
|
+
function generateSvg(code, options) {
|
|
23
|
+
const { margin = 4, scale = 1 } = { ...options };
|
|
24
|
+
const size = code.size + 2 * margin;
|
|
25
|
+
const scaled = size * scale;
|
|
26
|
+
const chunks = convertPath([
|
|
27
|
+
`<svg xmlns="http://www.w3.org/2000/svg" width="${scaled}" height="${scaled}" viewBox="0 0 ${size} ${size}">`,
|
|
28
|
+
'<path d="'
|
|
29
|
+
// beginning of the path "d" attribute...
|
|
30
|
+
], code, margin);
|
|
31
|
+
chunks.push('"/></svg>');
|
|
32
|
+
return chunks.join("");
|
|
33
|
+
}
|
|
34
|
+
export {
|
|
35
|
+
generateSvg,
|
|
36
|
+
generateSvgPath
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=svg.mjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/images/svg.ts"],
|
|
4
|
+
"mappings": ";AAAA,SAAS,qBAAqB;AAQ9B,SAAS,YACL,QACA,MACA,QACmB;AACrB,gBAAc,IAAI,EAAE,QAAQ,CAAC,SAAS;AACpC,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,OAAO,KAAK,CAAC;AACnB,cAAQ,KAAK,CAAC,GAAG;AAAA,QACf,KAAK;AACH,iBAAO,KAAK,IAAI,KAAK,CAAC,IAAI,MAAM,IAAI,KAAK,CAAC,IAAI,MAAM,EAAE;AACtD;AAAA,QACF;AACE,iBAAO,KAAK,GAAG,IAAI;AAAA,MACvB;AAAA,IACF;AACA,WAAO,KAAK,GAAG;AAAA,EACjB,CAAC;AAED,SAAO;AACT;AAwDO,SAAS,gBAAgB,MAAsB;AACpD,SAAO,YAAY,CAAC,GAAG,MAAM,CAAC,EAAE,KAAK;AACvC;AAGO,SAAS,YAAY,MAAc,SAAsC;AAC9E,QAAM,EAAE,SAAS,GAAG,QAAQ,EAAE,IAAI,EAAE,GAAG,QAAQ;AAC/C,QAAM,OAAO,KAAK,OAAO,IAAI;AAC7B,QAAM,SAAS,OAAO;AAEtB,QAAM,SAAS,YAAY;AAAA,IACzB,kDAAkD,MAAM,aAAa,MAAM,kBAAkB,IAAI,IAAI,IAAI;AAAA,IACzG;AAAA;AAAA,EACF,GAAG,MAAM,MAAM;AAEf,SAAO,KAAK,WAAW;AACvB,SAAO,OAAO,KAAK,EAAE;AACvB;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
generate: () => generate,
|
|
24
|
+
generatePdf: () => import_pdf2.generatePdf,
|
|
25
|
+
generatePdfDataQrCode: () => generatePdfDataQrCode,
|
|
26
|
+
generatePdfQrCode: () => generatePdfQrCode,
|
|
27
|
+
generatePng: () => import_png2.generatePng,
|
|
28
|
+
generatePngDataQrCode: () => generatePngDataQrCode,
|
|
29
|
+
generatePngQrCode: () => generatePngQrCode,
|
|
30
|
+
generateQrCode: () => generateQrCode,
|
|
31
|
+
generateSvg: () => import_svg2.generateSvg,
|
|
32
|
+
generateSvgDataQrCode: () => generateSvgDataQrCode,
|
|
33
|
+
generateSvgPath: () => import_svg2.generateSvgPath,
|
|
34
|
+
generateSvgQrCode: () => generateSvgQrCode
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(src_exports);
|
|
37
|
+
var import_encode = require("./encode.cjs");
|
|
38
|
+
var import_pdf = require("./images/pdf.cjs");
|
|
39
|
+
var import_png = require("./images/png.cjs");
|
|
40
|
+
var import_svg = require("./images/svg.cjs");
|
|
41
|
+
var import_matrix = require("./matrix.cjs");
|
|
42
|
+
var import_qrcode = require("./qrcode.cjs");
|
|
43
|
+
var import_dataurl = require("./utils/dataurl.cjs");
|
|
44
|
+
var import_pdf2 = require("./images/pdf.cjs");
|
|
45
|
+
var import_png2 = require("./images/png.cjs");
|
|
46
|
+
var import_svg2 = require("./images/svg.cjs");
|
|
47
|
+
function generateQrCode(message, options) {
|
|
48
|
+
const { ecLevel = "M", url = false } = { ...options };
|
|
49
|
+
const encoded = (0, import_encode.encodeQrCodeMessage)(message, url);
|
|
50
|
+
const qrcode = (0, import_qrcode.generateQrCodeData)(encoded, ecLevel);
|
|
51
|
+
const matrix = (0, import_matrix.generateQrCodeMatrix)(qrcode);
|
|
52
|
+
return {
|
|
53
|
+
version: qrcode.version,
|
|
54
|
+
ecLevel: qrcode.ecLevel,
|
|
55
|
+
size: matrix.length,
|
|
56
|
+
matrix
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async function generatePngQrCode(message, options) {
|
|
60
|
+
return await (0, import_png.generatePng)(generateQrCode(message, options), options);
|
|
61
|
+
}
|
|
62
|
+
async function generatePdfQrCode(message, options) {
|
|
63
|
+
return await (0, import_pdf.generatePdf)(generateQrCode(message, options), options);
|
|
64
|
+
}
|
|
65
|
+
function generateSvgQrCode(message, options) {
|
|
66
|
+
return (0, import_svg.generateSvg)(generateQrCode(message, options), options);
|
|
67
|
+
}
|
|
68
|
+
async function generatePngDataQrCode(message, options) {
|
|
69
|
+
return (0, import_dataurl.generateDataUrl)(await (0, import_png.generatePng)(generateQrCode(message, options), options), "image/png");
|
|
70
|
+
}
|
|
71
|
+
async function generatePdfDataQrCode(message, options) {
|
|
72
|
+
return (0, import_dataurl.generateDataUrl)(await (0, import_pdf.generatePdf)(generateQrCode(message, options), options), "application/pdf");
|
|
73
|
+
}
|
|
74
|
+
function generateSvgDataQrCode(message, options) {
|
|
75
|
+
return (0, import_dataurl.generateDataUrl)((0, import_svg.generateSvg)(generateQrCode(message, options), options), "image/svg+xml");
|
|
76
|
+
}
|
|
77
|
+
async function generate(message, format, options) {
|
|
78
|
+
switch (format) {
|
|
79
|
+
case "png":
|
|
80
|
+
return await generatePngQrCode(message, options);
|
|
81
|
+
case "pdf":
|
|
82
|
+
return await generatePdfQrCode(message, options);
|
|
83
|
+
case "svg":
|
|
84
|
+
return generateSvgQrCode(message, options);
|
|
85
|
+
case "pngData":
|
|
86
|
+
return await generatePngDataQrCode(message, options);
|
|
87
|
+
case "pdfData":
|
|
88
|
+
return await generatePdfDataQrCode(message, options);
|
|
89
|
+
case "svgData":
|
|
90
|
+
return generateSvgDataQrCode(message, options);
|
|
91
|
+
default:
|
|
92
|
+
throw new Error(`Unsupported format "${format}"`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
96
|
+
0 && (module.exports = {
|
|
97
|
+
generate,
|
|
98
|
+
generatePdf,
|
|
99
|
+
generatePdfDataQrCode,
|
|
100
|
+
generatePdfQrCode,
|
|
101
|
+
generatePng,
|
|
102
|
+
generatePngDataQrCode,
|
|
103
|
+
generatePngQrCode,
|
|
104
|
+
generateQrCode,
|
|
105
|
+
generateSvg,
|
|
106
|
+
generateSvgDataQrCode,
|
|
107
|
+
generateSvgPath,
|
|
108
|
+
generateSvgQrCode
|
|
109
|
+
});
|
|
110
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.ts"],
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAoC;AACpC,iBAA4B;AAC5B,iBAA4B;AAC5B,iBAA4B;AAC5B,oBAAqC;AACrC,oBAAmC;AACnC,qBAAgC;AAEhC,IAAAA,cAA4B;AAC5B,IAAAC,cAA4B;AAC5B,IAAAC,cAA6C;AAkDtC,SAAS,eAAe,SAA8B,SAA2C;AACtG,QAAM,EAAE,UAAU,KAAK,MAAM,MAAM,IAAI,EAAE,GAAG,QAAQ;AAEpD,QAAM,cAAU,mCAAoB,SAAS,GAAG;AAChD,QAAM,aAAS,kCAAmB,SAAS,OAAO;AAClD,QAAM,aAAS,oCAAqB,MAAM;AAE1C,SAAO;AAAA,IACL,SAAS,OAAO;AAAA,IAChB,SAAS,OAAO;AAAA,IAChB,MAAM,OAAO;AAAA,IACb;AAAA,EACF;AACF;AAKA,eAAsB,kBAAkB,SAA8B,SAA8C;AAClH,SAAO,UAAM,wBAAY,eAAe,SAAS,OAAO,GAAG,OAAO;AACpE;AAGA,eAAsB,kBAAkB,SAA8B,SAA8C;AAClH,SAAO,UAAM,wBAAY,eAAe,SAAS,OAAO,GAAG,OAAO;AACpE;AAGO,SAAS,kBAAkB,SAA8B,SAAiC;AAC/F,aAAO,wBAAY,eAAe,SAAS,OAAO,GAAG,OAAO;AAC9D;AAGA,eAAsB,sBAAsB,SAA8B,SAA0C;AAClH,aAAO,gCAAgB,UAAM,wBAAY,eAAe,SAAS,OAAO,GAAG,OAAO,GAAG,WAAW;AAClG;AAGA,eAAsB,sBAAsB,SAA8B,SAA0C;AAClH,aAAO,gCAAgB,UAAM,wBAAY,eAAe,SAAS,OAAO,GAAG,OAAO,GAAG,iBAAiB;AACxG;AAGO,SAAS,sBAAsB,SAA8B,SAAiC;AACnG,aAAO,oCAAgB,wBAAY,eAAe,SAAS,OAAO,GAAG,OAAO,GAAG,eAAe;AAChG;AAwBA,eAAsB,SAClB,SACA,QACA,SAC4B;AAC9B,UAAQ,QAAQ;AAAA,IAEd,KAAK;AAAO,aAAO,MAAM,kBAAkB,SAAS,OAAO;AAAA,IAC3D,KAAK;AAAO,aAAO,MAAM,kBAAkB,SAAS,OAAO;AAAA,IAC3D,KAAK;AAAO,aAAO,kBAAkB,SAAS,OAAO;AAAA,IAErD,KAAK;AAAW,aAAO,MAAM,sBAAsB,SAAS,OAAO;AAAA,IACnE,KAAK;AAAW,aAAO,MAAM,sBAAsB,SAAS,OAAO;AAAA,IACnE,KAAK;AAAW,aAAO,sBAAsB,SAAS,OAAO;AAAA,IAE7D;AAAS,YAAM,IAAI,MAAM,uBAAuB,MAAM,GAAG;AAAA,EAC3D;AACF;",
|
|
5
|
+
"names": ["import_pdf", "import_png", "import_svg"]
|
|
6
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export { generatePdf } from './images/pdf';
|
|
2
|
+
export { generatePng } from './images/png';
|
|
3
|
+
export { generateSvg, generateSvgPath } from './images/svg';
|
|
4
|
+
/**
|
|
5
|
+
* The error correction level for QR codes (`L`, `M`, `Q`, or `H`)
|
|
6
|
+
*
|
|
7
|
+
* * `L`: approximately 7% of error correction capability
|
|
8
|
+
* * `M`: approximately 15% of error correction capability
|
|
9
|
+
* * `Q`: approximately 25% of error correction capability
|
|
10
|
+
* * `H`: approximately 30% of error correction capability
|
|
11
|
+
*/
|
|
12
|
+
export type ECLevel = 'L' | 'M' | 'Q' | 'H';
|
|
13
|
+
/** The structure of a _generated_ QR code */
|
|
14
|
+
export interface QrCode {
|
|
15
|
+
/** The version of the QR code (1...40) */
|
|
16
|
+
readonly version: number;
|
|
17
|
+
/** The error correction level for the QR code */
|
|
18
|
+
readonly ecLevel: ECLevel;
|
|
19
|
+
/** The size (in pixels) of the QR code */
|
|
20
|
+
readonly size: number;
|
|
21
|
+
/** The QR code matrix */
|
|
22
|
+
readonly matrix: readonly boolean[][];
|
|
23
|
+
}
|
|
24
|
+
/** Options for the generation of a {@link QrCode} */
|
|
25
|
+
export interface QrCodeGenerationOptions {
|
|
26
|
+
/** The error correction level for the QR code (default: `M`) */
|
|
27
|
+
ecLevel?: ECLevel;
|
|
28
|
+
/** Whether to optimize URLs in QR codes (default: `false`) */
|
|
29
|
+
url?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/** Options to render a {@link QrCode} into an image */
|
|
32
|
+
export interface QrCodeImageOptions {
|
|
33
|
+
/**
|
|
34
|
+
* The number of pixels used for each dot in the matrix
|
|
35
|
+
* (default: `1` for PNG/SVG and `9` for PDF)
|
|
36
|
+
*/
|
|
37
|
+
scale?: number;
|
|
38
|
+
/**
|
|
39
|
+
* The size of the margin around the QR code in matrix modules
|
|
40
|
+
* (default: `4` as per the QR code specification - the _quiet area_)
|
|
41
|
+
*/
|
|
42
|
+
margin?: number;
|
|
43
|
+
}
|
|
44
|
+
/** QR code options */
|
|
45
|
+
export interface QrCodeOptions extends QrCodeGenerationOptions, QrCodeImageOptions {
|
|
46
|
+
}
|
|
47
|
+
/** Generate a {@link QrCode} from a string or binary message */
|
|
48
|
+
export declare function generateQrCode(message: string | Uint8Array, options?: QrCodeGenerationOptions): QrCode;
|
|
49
|
+
/** Generate a QR code in PNG format from a string or binary message */
|
|
50
|
+
export declare function generatePngQrCode(message: string | Uint8Array, options?: QrCodeOptions): Promise<Uint8Array>;
|
|
51
|
+
/** Generate a QR code in PDF format from a string or binary message */
|
|
52
|
+
export declare function generatePdfQrCode(message: string | Uint8Array, options?: QrCodeOptions): Promise<Uint8Array>;
|
|
53
|
+
/** Generate a QR code in SVG format from a string or binary message */
|
|
54
|
+
export declare function generateSvgQrCode(message: string | Uint8Array, options?: QrCodeOptions): string;
|
|
55
|
+
/** Generate a QR code as a PNG data URL from a string or binary message */
|
|
56
|
+
export declare function generatePngDataQrCode(message: string | Uint8Array, options?: QrCodeOptions): Promise<string>;
|
|
57
|
+
/** Generate a QR code as a PDF data URL from a string or binary message */
|
|
58
|
+
export declare function generatePdfDataQrCode(message: string | Uint8Array, options?: QrCodeOptions): Promise<string>;
|
|
59
|
+
/** Generate a QR code as a SVG data URL from a string or binary message */
|
|
60
|
+
export declare function generateSvgDataQrCode(message: string | Uint8Array, options?: QrCodeOptions): string;
|
|
61
|
+
/** Generate a QR code in PNG format from a string or binary message */
|
|
62
|
+
export declare function generate(message: string | Uint8Array, format: 'png', options?: QrCodeOptions): Promise<Uint8Array>;
|
|
63
|
+
/** Generate a QR code in PDF format from a string or binary message */
|
|
64
|
+
export declare function generate(message: string | Uint8Array, format: 'pdf', options?: QrCodeOptions): Promise<Uint8Array>;
|
|
65
|
+
/** Generate a QR code in SVG format from a string or binary message */
|
|
66
|
+
export declare function generate(message: string | Uint8Array, format: 'svg', options?: QrCodeOptions): Promise<string>;
|
|
67
|
+
/** Generate a QR code as a PNG data URL from a string or binary message */
|
|
68
|
+
export declare function generate(message: string | Uint8Array, format: 'pngData', options?: QrCodeOptions): Promise<string>;
|
|
69
|
+
/** Generate a QR code as a PDF data URL from a string or binary message */
|
|
70
|
+
export declare function generate(message: string | Uint8Array, format: 'pdfData', options?: QrCodeOptions): Promise<string>;
|
|
71
|
+
/** Generate a QR code as a SVG data URL from a string or binary message */
|
|
72
|
+
export declare function generate(message: string | Uint8Array, format: 'svgData', options?: QrCodeOptions): Promise<string>;
|
|
73
|
+
/** Generate a QR code as an image */
|
|
74
|
+
export declare function generate<Format extends 'png' | 'pdf' | 'svg' | 'pngData' | 'pdfData' | 'svgData'>(message: string | Uint8Array, format: Format, options?: QrCodeOptions): Promise<Format extends 'png' ? Uint8Array : Format extends 'pdf' ? Uint8Array : string>;
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// index.ts
|
|
2
|
+
import { encodeQrCodeMessage } from "./encode.mjs";
|
|
3
|
+
import { generatePdf } from "./images/pdf.mjs";
|
|
4
|
+
import { generatePng } from "./images/png.mjs";
|
|
5
|
+
import { generateSvg } from "./images/svg.mjs";
|
|
6
|
+
import { generateQrCodeMatrix } from "./matrix.mjs";
|
|
7
|
+
import { generateQrCodeData } from "./qrcode.mjs";
|
|
8
|
+
import { generateDataUrl } from "./utils/dataurl.mjs";
|
|
9
|
+
import { generatePdf as generatePdf2 } from "./images/pdf.mjs";
|
|
10
|
+
import { generatePng as generatePng2 } from "./images/png.mjs";
|
|
11
|
+
import { generateSvg as generateSvg2, generateSvgPath } from "./images/svg.mjs";
|
|
12
|
+
function generateQrCode(message, options) {
|
|
13
|
+
const { ecLevel = "M", url = false } = { ...options };
|
|
14
|
+
const encoded = encodeQrCodeMessage(message, url);
|
|
15
|
+
const qrcode = generateQrCodeData(encoded, ecLevel);
|
|
16
|
+
const matrix = generateQrCodeMatrix(qrcode);
|
|
17
|
+
return {
|
|
18
|
+
version: qrcode.version,
|
|
19
|
+
ecLevel: qrcode.ecLevel,
|
|
20
|
+
size: matrix.length,
|
|
21
|
+
matrix
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
async function generatePngQrCode(message, options) {
|
|
25
|
+
return await generatePng(generateQrCode(message, options), options);
|
|
26
|
+
}
|
|
27
|
+
async function generatePdfQrCode(message, options) {
|
|
28
|
+
return await generatePdf(generateQrCode(message, options), options);
|
|
29
|
+
}
|
|
30
|
+
function generateSvgQrCode(message, options) {
|
|
31
|
+
return generateSvg(generateQrCode(message, options), options);
|
|
32
|
+
}
|
|
33
|
+
async function generatePngDataQrCode(message, options) {
|
|
34
|
+
return generateDataUrl(await generatePng(generateQrCode(message, options), options), "image/png");
|
|
35
|
+
}
|
|
36
|
+
async function generatePdfDataQrCode(message, options) {
|
|
37
|
+
return generateDataUrl(await generatePdf(generateQrCode(message, options), options), "application/pdf");
|
|
38
|
+
}
|
|
39
|
+
function generateSvgDataQrCode(message, options) {
|
|
40
|
+
return generateDataUrl(generateSvg(generateQrCode(message, options), options), "image/svg+xml");
|
|
41
|
+
}
|
|
42
|
+
async function generate(message, format, options) {
|
|
43
|
+
switch (format) {
|
|
44
|
+
case "png":
|
|
45
|
+
return await generatePngQrCode(message, options);
|
|
46
|
+
case "pdf":
|
|
47
|
+
return await generatePdfQrCode(message, options);
|
|
48
|
+
case "svg":
|
|
49
|
+
return generateSvgQrCode(message, options);
|
|
50
|
+
case "pngData":
|
|
51
|
+
return await generatePngDataQrCode(message, options);
|
|
52
|
+
case "pdfData":
|
|
53
|
+
return await generatePdfDataQrCode(message, options);
|
|
54
|
+
case "svgData":
|
|
55
|
+
return generateSvgDataQrCode(message, options);
|
|
56
|
+
default:
|
|
57
|
+
throw new Error(`Unsupported format "${format}"`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export {
|
|
61
|
+
generate,
|
|
62
|
+
generatePdf2 as generatePdf,
|
|
63
|
+
generatePdfDataQrCode,
|
|
64
|
+
generatePdfQrCode,
|
|
65
|
+
generatePng2 as generatePng,
|
|
66
|
+
generatePngDataQrCode,
|
|
67
|
+
generatePngQrCode,
|
|
68
|
+
generateQrCode,
|
|
69
|
+
generateSvg2 as generateSvg,
|
|
70
|
+
generateSvgDataQrCode,
|
|
71
|
+
generateSvgPath,
|
|
72
|
+
generateSvgQrCode
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.ts"],
|
|
4
|
+
"mappings": ";AAAA,SAAS,2BAA2B;AACpC,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAC5B,SAAS,4BAA4B;AACrC,SAAS,0BAA0B;AACnC,SAAS,uBAAuB;AAEhC,SAAS,eAAAA,oBAAmB;AAC5B,SAAS,eAAAC,oBAAmB;AAC5B,SAAS,eAAAC,cAAa,uBAAuB;AAkDtC,SAAS,eAAe,SAA8B,SAA2C;AACtG,QAAM,EAAE,UAAU,KAAK,MAAM,MAAM,IAAI,EAAE,GAAG,QAAQ;AAEpD,QAAM,UAAU,oBAAoB,SAAS,GAAG;AAChD,QAAM,SAAS,mBAAmB,SAAS,OAAO;AAClD,QAAM,SAAS,qBAAqB,MAAM;AAE1C,SAAO;AAAA,IACL,SAAS,OAAO;AAAA,IAChB,SAAS,OAAO;AAAA,IAChB,MAAM,OAAO;AAAA,IACb;AAAA,EACF;AACF;AAKA,eAAsB,kBAAkB,SAA8B,SAA8C;AAClH,SAAO,MAAM,YAAY,eAAe,SAAS,OAAO,GAAG,OAAO;AACpE;AAGA,eAAsB,kBAAkB,SAA8B,SAA8C;AAClH,SAAO,MAAM,YAAY,eAAe,SAAS,OAAO,GAAG,OAAO;AACpE;AAGO,SAAS,kBAAkB,SAA8B,SAAiC;AAC/F,SAAO,YAAY,eAAe,SAAS,OAAO,GAAG,OAAO;AAC9D;AAGA,eAAsB,sBAAsB,SAA8B,SAA0C;AAClH,SAAO,gBAAgB,MAAM,YAAY,eAAe,SAAS,OAAO,GAAG,OAAO,GAAG,WAAW;AAClG;AAGA,eAAsB,sBAAsB,SAA8B,SAA0C;AAClH,SAAO,gBAAgB,MAAM,YAAY,eAAe,SAAS,OAAO,GAAG,OAAO,GAAG,iBAAiB;AACxG;AAGO,SAAS,sBAAsB,SAA8B,SAAiC;AACnG,SAAO,gBAAgB,YAAY,eAAe,SAAS,OAAO,GAAG,OAAO,GAAG,eAAe;AAChG;AAwBA,eAAsB,SAClB,SACA,QACA,SAC4B;AAC9B,UAAQ,QAAQ;AAAA,IAEd,KAAK;AAAO,aAAO,MAAM,kBAAkB,SAAS,OAAO;AAAA,IAC3D,KAAK;AAAO,aAAO,MAAM,kBAAkB,SAAS,OAAO;AAAA,IAC3D,KAAK;AAAO,aAAO,kBAAkB,SAAS,OAAO;AAAA,IAErD,KAAK;AAAW,aAAO,MAAM,sBAAsB,SAAS,OAAO;AAAA,IACnE,KAAK;AAAW,aAAO,MAAM,sBAAsB,SAAS,OAAO;AAAA,IACnE,KAAK;AAAW,aAAO,sBAAsB,SAAS,OAAO;AAAA,IAE7D;AAAS,YAAM,IAAI,MAAM,uBAAuB,MAAM,GAAG;AAAA,EAC3D;AACF;",
|
|
5
|
+
"names": ["generatePdf", "generatePng", "generateSvg"]
|
|
6
|
+
}
|