@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.
Files changed (82) hide show
  1. package/LICENSE.md +211 -0
  2. package/NOTICE.md +13 -0
  3. package/README.md +175 -0
  4. package/dist/encode.cjs +147 -0
  5. package/dist/encode.cjs.map +6 -0
  6. package/dist/encode.d.ts +11 -0
  7. package/dist/encode.mjs +122 -0
  8. package/dist/encode.mjs.map +6 -0
  9. package/dist/images/path.cjs +145 -0
  10. package/dist/images/path.cjs.map +6 -0
  11. package/dist/images/path.d.ts +6 -0
  12. package/dist/images/path.mjs +120 -0
  13. package/dist/images/path.mjs.map +6 -0
  14. package/dist/images/pdf.cjs +96 -0
  15. package/dist/images/pdf.cjs.map +6 -0
  16. package/dist/images/pdf.d.ts +3 -0
  17. package/dist/images/pdf.mjs +71 -0
  18. package/dist/images/pdf.mjs.map +6 -0
  19. package/dist/images/png.cjs +86 -0
  20. package/dist/images/png.cjs.map +6 -0
  21. package/dist/images/png.d.ts +3 -0
  22. package/dist/images/png.mjs +61 -0
  23. package/dist/images/png.mjs.map +6 -0
  24. package/dist/images/svg.cjs +64 -0
  25. package/dist/images/svg.cjs.map +6 -0
  26. package/dist/images/svg.d.ts +54 -0
  27. package/dist/images/svg.mjs +38 -0
  28. package/dist/images/svg.mjs.map +6 -0
  29. package/dist/index.cjs +110 -0
  30. package/dist/index.cjs.map +6 -0
  31. package/dist/index.d.ts +74 -0
  32. package/dist/index.mjs +74 -0
  33. package/dist/index.mjs.map +6 -0
  34. package/dist/matrix.cjs +360 -0
  35. package/dist/matrix.cjs.map +6 -0
  36. package/dist/matrix.d.ts +3 -0
  37. package/dist/matrix.mjs +335 -0
  38. package/dist/matrix.mjs.map +6 -0
  39. package/dist/qrcode.cjs +183 -0
  40. package/dist/qrcode.cjs.map +6 -0
  41. package/dist/qrcode.d.ts +20 -0
  42. package/dist/qrcode.mjs +158 -0
  43. package/dist/qrcode.mjs.map +6 -0
  44. package/dist/utils/crc32.cjs +53 -0
  45. package/dist/utils/crc32.cjs.map +6 -0
  46. package/dist/utils/crc32.d.ts +9 -0
  47. package/dist/utils/crc32.mjs +28 -0
  48. package/dist/utils/crc32.mjs.map +6 -0
  49. package/dist/utils/dataurl.cjs +35 -0
  50. package/dist/utils/dataurl.cjs.map +6 -0
  51. package/dist/utils/dataurl.d.ts +1 -0
  52. package/dist/utils/dataurl.mjs +10 -0
  53. package/dist/utils/dataurl.mjs.map +6 -0
  54. package/dist/utils/deflate.cjs +39 -0
  55. package/dist/utils/deflate.cjs.map +6 -0
  56. package/dist/utils/deflate.d.ts +2 -0
  57. package/dist/utils/deflate.mjs +14 -0
  58. package/dist/utils/deflate.mjs.map +6 -0
  59. package/dist/utils/ecc.cjs +93 -0
  60. package/dist/utils/ecc.cjs.map +6 -0
  61. package/dist/utils/ecc.d.ts +2 -0
  62. package/dist/utils/ecc.mjs +68 -0
  63. package/dist/utils/ecc.mjs.map +6 -0
  64. package/dist/utils/merge.cjs +41 -0
  65. package/dist/utils/merge.cjs.map +6 -0
  66. package/dist/utils/merge.d.ts +2 -0
  67. package/dist/utils/merge.mjs +16 -0
  68. package/dist/utils/merge.mjs.map +6 -0
  69. package/package.json +61 -0
  70. package/src/encode.ts +180 -0
  71. package/src/images/path.ts +131 -0
  72. package/src/images/pdf.ts +76 -0
  73. package/src/images/png.ts +105 -0
  74. package/src/images/svg.ts +102 -0
  75. package/src/index.ts +147 -0
  76. package/src/matrix.ts +392 -0
  77. package/src/qrcode.ts +217 -0
  78. package/src/utils/crc32.ts +50 -0
  79. package/src/utils/dataurl.ts +7 -0
  80. package/src/utils/deflate.ts +17 -0
  81. package/src/utils/ecc.ts +95 -0
  82. package/src/utils/merge.ts +13 -0
@@ -0,0 +1,122 @@
1
+ // encode.ts
2
+ var ALPHANUM = function(s) {
3
+ const res = {};
4
+ for (let i = 0; i < s.length; i++) {
5
+ res[s[i]] = i;
6
+ }
7
+ return res;
8
+ }("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:");
9
+ function pushBits(arr, n, value) {
10
+ for (let bit = 1 << n - 1; bit; bit = bit >>> 1) {
11
+ arr.push(!!(bit & value));
12
+ }
13
+ return arr;
14
+ }
15
+ function binaryEncode(data) {
16
+ const len = data.length;
17
+ const bits = [];
18
+ for (let i = 0; i < len; i++) {
19
+ pushBits(bits, 8, data[i]);
20
+ }
21
+ const d = pushBits([false, true, false, false], 16, len);
22
+ const res = {
23
+ data27: d.concat(bits)
24
+ };
25
+ res.data10 = res.data27;
26
+ if (len < 256) {
27
+ const d2 = pushBits([false, true, false, false], 8, len);
28
+ res.data1 = d2.concat(bits);
29
+ }
30
+ return res;
31
+ }
32
+ function alphanumEncode(str) {
33
+ const len = str.length;
34
+ const bits = [];
35
+ for (let i = 0; i < len; i += 2) {
36
+ let b = 6;
37
+ let n = ALPHANUM[str[i]];
38
+ if (str[i + 1]) {
39
+ b = 11;
40
+ n = n * 45 + ALPHANUM[str[i + 1]];
41
+ }
42
+ pushBits(bits, b, n);
43
+ }
44
+ const d = pushBits([false, false, true, false], 13, len);
45
+ const res = {
46
+ data27: d.concat(bits)
47
+ };
48
+ if (len < 2048) {
49
+ const d2 = pushBits([false, false, true, false], 11, len);
50
+ res.data10 = d2.concat(bits);
51
+ }
52
+ if (len < 512) {
53
+ const d2 = pushBits([false, false, true, false], 9, len);
54
+ res.data1 = d2.concat(bits);
55
+ }
56
+ return res;
57
+ }
58
+ function numericEncode(str) {
59
+ const len = str.length;
60
+ const bits = [];
61
+ for (let i = 0; i < len; i += 3) {
62
+ const s = str.substring(i, i + 3);
63
+ const b = Math.ceil(s.length * 10 / 3);
64
+ pushBits(bits, b, parseInt(s, 10));
65
+ }
66
+ const d = pushBits([false, false, false, true], 14, len);
67
+ const res = {
68
+ data27: d.concat(bits)
69
+ };
70
+ if (len < 4096) {
71
+ const d2 = pushBits([false, false, false, true], 12, len);
72
+ res.data10 = d2.concat(bits);
73
+ }
74
+ if (len < 1024) {
75
+ const d2 = pushBits([false, false, false, true], 10, len);
76
+ res.data1 = d2.concat(bits);
77
+ }
78
+ return res;
79
+ }
80
+ function urlEncode(str) {
81
+ const slash = str.indexOf("/", 8) + 1 || str.length;
82
+ const res = encodeQrCodeMessage(str.slice(0, slash).toUpperCase(), false);
83
+ if (slash >= str.length)
84
+ return res;
85
+ const path = encodeQrCodeMessage(str.slice(slash), false);
86
+ res.data27 = res.data27.concat(path.data27);
87
+ if (res.data10 && path.data10) {
88
+ res.data10 = res.data10.concat(path.data10);
89
+ }
90
+ if (res.data1 && path.data1) {
91
+ res.data1 = res.data1.concat(path.data1);
92
+ }
93
+ return res;
94
+ }
95
+ function encodeQrCodeMessage(message, url) {
96
+ let data;
97
+ if (typeof message === "string") {
98
+ data = new TextEncoder().encode(message);
99
+ if (/^[0-9]+$/.test(message)) {
100
+ if (data.length > 7089)
101
+ throw new Error(`Too much numeric data (len=${data.length})`);
102
+ return numericEncode(message);
103
+ }
104
+ if (/^[0-9A-Z $%*+./:-]+$/.test(message)) {
105
+ if (data.length > 4296)
106
+ throw new Error(`Too much alphanumeric data (len=${data.length})`);
107
+ return alphanumEncode(message);
108
+ }
109
+ if (url && /^https?:/i.test(message)) {
110
+ return urlEncode(message);
111
+ }
112
+ } else {
113
+ data = message;
114
+ }
115
+ if (data.length > 2953)
116
+ throw new Error(`Too much binary data (len=${data.length})`);
117
+ return binaryEncode(data);
118
+ }
119
+ export {
120
+ encodeQrCodeMessage
121
+ };
122
+ //# sourceMappingURL=encode.mjs.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/encode.ts"],
4
+ "mappings": "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",
5
+ "names": ["d"]
6
+ }
@@ -0,0 +1,145 @@
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/path.ts
21
+ var path_exports = {};
22
+ __export(path_exports, {
23
+ generatePaths: () => generatePaths
24
+ });
25
+ module.exports = __toCommonJS(path_exports);
26
+ function generatePaths(code) {
27
+ const { matrix, size } = code;
28
+ const filled = [];
29
+ for (let row = -1; row <= size; row++) {
30
+ filled[row] = [];
31
+ }
32
+ const path = [];
33
+ for (let row = 0; row < size; row++) {
34
+ for (let col = 0; col < size; col++) {
35
+ if (filled[row][col])
36
+ continue;
37
+ filled[row][col] = true;
38
+ if (isDark(row, col)) {
39
+ if (!isDark(row - 1, col)) {
40
+ path.push(plot(row, col, "right"));
41
+ }
42
+ } else {
43
+ if (isDark(row, col - 1)) {
44
+ path.push(plot(row, col, "down"));
45
+ }
46
+ }
47
+ }
48
+ }
49
+ return path;
50
+ function isDark(row, col) {
51
+ if (row < 0 || col < 0 || row >= size || col >= size)
52
+ return false;
53
+ return !!matrix[row][col];
54
+ }
55
+ function plot(row0, col0, dir) {
56
+ filled[row0][col0] = true;
57
+ const res = [];
58
+ res.push(["M", col0, row0]);
59
+ let row = row0;
60
+ let col = col0;
61
+ let len = 0;
62
+ do {
63
+ switch (dir) {
64
+ case "right":
65
+ filled[row][col] = true;
66
+ if (isDark(row, col)) {
67
+ filled[row - 1][col] = true;
68
+ if (isDark(row - 1, col)) {
69
+ res.push(["h", len]);
70
+ len = 0;
71
+ dir = "up";
72
+ } else {
73
+ len++;
74
+ col++;
75
+ }
76
+ } else {
77
+ res.push(["h", len]);
78
+ len = 0;
79
+ dir = "down";
80
+ }
81
+ break;
82
+ case "left":
83
+ filled[row - 1][col - 1] = true;
84
+ if (isDark(row - 1, col - 1)) {
85
+ filled[row][col - 1] = true;
86
+ if (isDark(row, col - 1)) {
87
+ res.push(["h", -len]);
88
+ len = 0;
89
+ dir = "down";
90
+ } else {
91
+ len++;
92
+ col--;
93
+ }
94
+ } else {
95
+ res.push(["h", -len]);
96
+ len = 0;
97
+ dir = "up";
98
+ }
99
+ break;
100
+ case "down":
101
+ filled[row][col - 1] = true;
102
+ if (isDark(row, col - 1)) {
103
+ filled[row][col] = true;
104
+ if (isDark(row, col)) {
105
+ res.push(["v", len]);
106
+ len = 0;
107
+ dir = "right";
108
+ } else {
109
+ len++;
110
+ row++;
111
+ }
112
+ } else {
113
+ res.push(["v", len]);
114
+ len = 0;
115
+ dir = "left";
116
+ }
117
+ break;
118
+ case "up":
119
+ filled[row - 1][col] = true;
120
+ if (isDark(row - 1, col)) {
121
+ filled[row - 1][col - 1] = true;
122
+ if (isDark(row - 1, col - 1)) {
123
+ res.push(["v", -len]);
124
+ len = 0;
125
+ dir = "left";
126
+ } else {
127
+ len++;
128
+ row--;
129
+ }
130
+ } else {
131
+ res.push(["v", -len]);
132
+ len = 0;
133
+ dir = "right";
134
+ }
135
+ break;
136
+ }
137
+ } while (row != row0 || col != col0);
138
+ return res;
139
+ }
140
+ }
141
+ // Annotate the CommonJS export names for ESM import in node:
142
+ 0 && (module.exports = {
143
+ generatePaths
144
+ });
145
+ //# sourceMappingURL=path.cjs.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/images/path.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -0,0 +1,6 @@
1
+ import type { QrCode } from '../index';
2
+ export type PathItem = ['M', number, number] | ['h', number] | ['v', number];
3
+ export type Path = PathItem[];
4
+ export type Paths = Path[];
5
+ /** Generate a set of vector paths for a QR code */
6
+ export declare function generatePaths(code: QrCode): Paths;
@@ -0,0 +1,120 @@
1
+ // images/path.ts
2
+ function generatePaths(code) {
3
+ const { matrix, size } = code;
4
+ const filled = [];
5
+ for (let row = -1; row <= size; row++) {
6
+ filled[row] = [];
7
+ }
8
+ const path = [];
9
+ for (let row = 0; row < size; row++) {
10
+ for (let col = 0; col < size; col++) {
11
+ if (filled[row][col])
12
+ continue;
13
+ filled[row][col] = true;
14
+ if (isDark(row, col)) {
15
+ if (!isDark(row - 1, col)) {
16
+ path.push(plot(row, col, "right"));
17
+ }
18
+ } else {
19
+ if (isDark(row, col - 1)) {
20
+ path.push(plot(row, col, "down"));
21
+ }
22
+ }
23
+ }
24
+ }
25
+ return path;
26
+ function isDark(row, col) {
27
+ if (row < 0 || col < 0 || row >= size || col >= size)
28
+ return false;
29
+ return !!matrix[row][col];
30
+ }
31
+ function plot(row0, col0, dir) {
32
+ filled[row0][col0] = true;
33
+ const res = [];
34
+ res.push(["M", col0, row0]);
35
+ let row = row0;
36
+ let col = col0;
37
+ let len = 0;
38
+ do {
39
+ switch (dir) {
40
+ case "right":
41
+ filled[row][col] = true;
42
+ if (isDark(row, col)) {
43
+ filled[row - 1][col] = true;
44
+ if (isDark(row - 1, col)) {
45
+ res.push(["h", len]);
46
+ len = 0;
47
+ dir = "up";
48
+ } else {
49
+ len++;
50
+ col++;
51
+ }
52
+ } else {
53
+ res.push(["h", len]);
54
+ len = 0;
55
+ dir = "down";
56
+ }
57
+ break;
58
+ case "left":
59
+ filled[row - 1][col - 1] = true;
60
+ if (isDark(row - 1, col - 1)) {
61
+ filled[row][col - 1] = true;
62
+ if (isDark(row, col - 1)) {
63
+ res.push(["h", -len]);
64
+ len = 0;
65
+ dir = "down";
66
+ } else {
67
+ len++;
68
+ col--;
69
+ }
70
+ } else {
71
+ res.push(["h", -len]);
72
+ len = 0;
73
+ dir = "up";
74
+ }
75
+ break;
76
+ case "down":
77
+ filled[row][col - 1] = true;
78
+ if (isDark(row, col - 1)) {
79
+ filled[row][col] = true;
80
+ if (isDark(row, col)) {
81
+ res.push(["v", len]);
82
+ len = 0;
83
+ dir = "right";
84
+ } else {
85
+ len++;
86
+ row++;
87
+ }
88
+ } else {
89
+ res.push(["v", len]);
90
+ len = 0;
91
+ dir = "left";
92
+ }
93
+ break;
94
+ case "up":
95
+ filled[row - 1][col] = true;
96
+ if (isDark(row - 1, col)) {
97
+ filled[row - 1][col - 1] = true;
98
+ if (isDark(row - 1, col - 1)) {
99
+ res.push(["v", -len]);
100
+ len = 0;
101
+ dir = "left";
102
+ } else {
103
+ len++;
104
+ row--;
105
+ }
106
+ } else {
107
+ res.push(["v", -len]);
108
+ len = 0;
109
+ dir = "right";
110
+ }
111
+ break;
112
+ }
113
+ } while (row != row0 || col != col0);
114
+ return res;
115
+ }
116
+ }
117
+ export {
118
+ generatePaths
119
+ };
120
+ //# sourceMappingURL=path.mjs.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/images/path.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -0,0 +1,96 @@
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/pdf.ts
21
+ var pdf_exports = {};
22
+ __export(pdf_exports, {
23
+ generatePdf: () => generatePdf
24
+ });
25
+ module.exports = __toCommonJS(pdf_exports);
26
+ var import_deflate = require("../utils/deflate.cjs");
27
+ var import_merge = require("../utils/merge.cjs");
28
+ var import_path = require("./path.cjs");
29
+ async function generatePdf(code, options) {
30
+ const { margin = 4, scale = 9 } = { ...options };
31
+ const size = (code.size + 2 * margin) * scale;
32
+ const encoder = new TextEncoder();
33
+ const chunks = [
34
+ encoder.encode("%PDF-1.0\n\n"),
35
+ // PDF header
36
+ encoder.encode("1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj\n"),
37
+ encoder.encode("2 0 obj << /Type /Pages /Count 1 /Kids [ 3 0 R ] >> endobj\n"),
38
+ encoder.encode(`3 0 obj << /Type /Page /Parent 2 0 R /Resources <<>> /Contents 4 0 R /MediaBox [ 0 0 ${size} ${size} ] >> endobj
39
+ `)
40
+ ];
41
+ let path = `${scale} 0 0 ${scale} 0 0 cm
42
+ `;
43
+ path += (0, import_path.generatePaths)(code).map(function(subpath) {
44
+ let x = NaN;
45
+ let y = NaN;
46
+ let res = "";
47
+ for (let k = 0; k < subpath.length; k++) {
48
+ const item = subpath[k];
49
+ switch (item[0]) {
50
+ case "M":
51
+ x = item[1] + margin;
52
+ y = code.size - item[2] + margin;
53
+ res += x + " " + y + " m ";
54
+ break;
55
+ case "h":
56
+ x += item[1];
57
+ res += x + " " + y + " l ";
58
+ break;
59
+ case "v":
60
+ y -= item[1];
61
+ res += x + " " + y + " l ";
62
+ break;
63
+ }
64
+ }
65
+ res += "h";
66
+ return res;
67
+ }).join("\n");
68
+ path += "\nf\n";
69
+ const deflated = await (0, import_deflate.deflate)(encoder.encode(path));
70
+ chunks.push((0, import_merge.mergeArrays)(
71
+ encoder.encode(`4 0 obj << /Length ${deflated.length} /Filter /FlateDecode >> stream
72
+ `),
73
+ // start the stream
74
+ deflated,
75
+ // the path is deflated
76
+ encoder.encode("\nendstream\nendobj\n")
77
+ // end the stream
78
+ ));
79
+ let xref = "xref\n0 5\n0000000000 65535 f \n";
80
+ let offset = chunks[0].length;
81
+ for (let i = 1; i < 5; i++) {
82
+ xref += `0000000000${offset}`.slice(-10) + " 00000 n \n";
83
+ offset += chunks[i].length;
84
+ }
85
+ chunks.push(
86
+ encoder.encode(xref),
87
+ encoder.encode("trailer << /Root 1 0 R /Size 5 >>\n"),
88
+ encoder.encode("startxref\n" + offset + "\n%%EOF\n")
89
+ );
90
+ return (0, import_merge.mergeArrays)(...chunks);
91
+ }
92
+ // Annotate the CommonJS export names for ESM import in node:
93
+ 0 && (module.exports = {
94
+ generatePdf
95
+ });
96
+ //# sourceMappingURL=pdf.cjs.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/images/pdf.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAwB;AACxB,mBAA4B;AAC5B,kBAA8B;AAK9B,eAAsB,YAAY,MAAc,SAAmD;AACjG,QAAM,EAAE,SAAS,GAAG,QAAQ,EAAE,IAAI,EAAE,GAAG,QAAQ;AAC/C,QAAM,QAAQ,KAAK,OAAO,IAAI,UAAU;AAGxC,QAAM,UAAU,IAAI,YAAY;AAGhC,QAAM,SAAuB;AAAA,IAC3B,QAAQ,OAAO,cAAc;AAAA;AAAA,IAC7B,QAAQ,OAAO,oDAAoD;AAAA,IACnE,QAAQ,OAAO,8DAA8D;AAAA,IAC7E,QAAQ,OAAO,wFAAwF,IAAI,IAAI,IAAI;AAAA,CAAgB;AAAA,EACrI;AAGA,MAAI,OAAO,GAAG,KAAK,QAAQ,KAAK;AAAA;AAChC,cAAQ,2BAAc,IAAI,EAAE,IAAI,SAAS,SAAS;AAChD,QAAI,IAAY;AAChB,QAAI,IAAY;AAChB,QAAI,MAAc;AAElB,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAM,OAAO,QAAQ,CAAC;AACtB,cAAQ,KAAK,CAAC,GAAG;AAAA,QACf,KAAK;AACH,cAAI,KAAK,CAAC,IAAI;AACd,cAAI,KAAK,OAAO,KAAK,CAAC,IAAI;AAC1B,iBAAO,IAAI,MAAM,IAAI;AACrB;AAAA,QACF,KAAK;AACH,eAAK,KAAK,CAAC;AACX,iBAAO,IAAI,MAAM,IAAI;AACrB;AAAA,QACF,KAAK;AACH,eAAK,KAAK,CAAC;AACX,iBAAO,IAAI,MAAM,IAAI;AACrB;AAAA,MACJ;AAAA,IACF;AACA,WAAO;AACP,WAAO;AAAA,EACT,CAAC,EAAE,KAAK,IAAI;AACZ,UAAQ;AAGR,QAAM,WAAW,UAAM,wBAAQ,QAAQ,OAAO,IAAI,CAAC;AACnD,SAAO,SAAK;AAAA,IACR,QAAQ,OAAO,sBAAsB,SAAS,MAAM;AAAA,CAAmC;AAAA;AAAA,IACvF;AAAA;AAAA,IACA,QAAQ,OAAO,uBAAuB;AAAA;AAAA,EAC1C,CAAC;AAGD,MAAI,OAAO;AACX,MAAI,SAAS,OAAO,CAAC,EAAG;AACxB,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAQ,aAAa,MAAM,GAAG,MAAM,GAAG,IAAI;AAC3C,cAAU,OAAO,CAAC,EAAG;AAAA,EACvB;AAEA,SAAO;AAAA,IACH,QAAQ,OAAO,IAAI;AAAA,IACnB,QAAQ,OAAO,qCAAqC;AAAA,IACpD,QAAQ,OAAO,gBAAgB,SAAS,WAAW;AAAA,EACvD;AAEA,aAAO,0BAAY,GAAG,MAAM;AAC9B;",
5
+ "names": []
6
+ }
@@ -0,0 +1,3 @@
1
+ import type { QrCode, QrCodeImageOptions } from '..';
2
+ /** Generate a PDF document for the given {@link QrCode} */
3
+ export declare function generatePdf(code: QrCode, options?: QrCodeImageOptions): Promise<Uint8Array>;
@@ -0,0 +1,71 @@
1
+ // images/pdf.ts
2
+ import { deflate } from "../utils/deflate.mjs";
3
+ import { mergeArrays } from "../utils/merge.mjs";
4
+ import { generatePaths } from "./path.mjs";
5
+ async function generatePdf(code, options) {
6
+ const { margin = 4, scale = 9 } = { ...options };
7
+ const size = (code.size + 2 * margin) * scale;
8
+ const encoder = new TextEncoder();
9
+ const chunks = [
10
+ encoder.encode("%PDF-1.0\n\n"),
11
+ // PDF header
12
+ encoder.encode("1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj\n"),
13
+ encoder.encode("2 0 obj << /Type /Pages /Count 1 /Kids [ 3 0 R ] >> endobj\n"),
14
+ encoder.encode(`3 0 obj << /Type /Page /Parent 2 0 R /Resources <<>> /Contents 4 0 R /MediaBox [ 0 0 ${size} ${size} ] >> endobj
15
+ `)
16
+ ];
17
+ let path = `${scale} 0 0 ${scale} 0 0 cm
18
+ `;
19
+ path += generatePaths(code).map(function(subpath) {
20
+ let x = NaN;
21
+ let y = NaN;
22
+ let res = "";
23
+ for (let k = 0; k < subpath.length; k++) {
24
+ const item = subpath[k];
25
+ switch (item[0]) {
26
+ case "M":
27
+ x = item[1] + margin;
28
+ y = code.size - item[2] + margin;
29
+ res += x + " " + y + " m ";
30
+ break;
31
+ case "h":
32
+ x += item[1];
33
+ res += x + " " + y + " l ";
34
+ break;
35
+ case "v":
36
+ y -= item[1];
37
+ res += x + " " + y + " l ";
38
+ break;
39
+ }
40
+ }
41
+ res += "h";
42
+ return res;
43
+ }).join("\n");
44
+ path += "\nf\n";
45
+ const deflated = await deflate(encoder.encode(path));
46
+ chunks.push(mergeArrays(
47
+ encoder.encode(`4 0 obj << /Length ${deflated.length} /Filter /FlateDecode >> stream
48
+ `),
49
+ // start the stream
50
+ deflated,
51
+ // the path is deflated
52
+ encoder.encode("\nendstream\nendobj\n")
53
+ // end the stream
54
+ ));
55
+ let xref = "xref\n0 5\n0000000000 65535 f \n";
56
+ let offset = chunks[0].length;
57
+ for (let i = 1; i < 5; i++) {
58
+ xref += `0000000000${offset}`.slice(-10) + " 00000 n \n";
59
+ offset += chunks[i].length;
60
+ }
61
+ chunks.push(
62
+ encoder.encode(xref),
63
+ encoder.encode("trailer << /Root 1 0 R /Size 5 >>\n"),
64
+ encoder.encode("startxref\n" + offset + "\n%%EOF\n")
65
+ );
66
+ return mergeArrays(...chunks);
67
+ }
68
+ export {
69
+ generatePdf
70
+ };
71
+ //# sourceMappingURL=pdf.mjs.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/images/pdf.ts"],
4
+ "mappings": ";AAAA,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAK9B,eAAsB,YAAY,MAAc,SAAmD;AACjG,QAAM,EAAE,SAAS,GAAG,QAAQ,EAAE,IAAI,EAAE,GAAG,QAAQ;AAC/C,QAAM,QAAQ,KAAK,OAAO,IAAI,UAAU;AAGxC,QAAM,UAAU,IAAI,YAAY;AAGhC,QAAM,SAAuB;AAAA,IAC3B,QAAQ,OAAO,cAAc;AAAA;AAAA,IAC7B,QAAQ,OAAO,oDAAoD;AAAA,IACnE,QAAQ,OAAO,8DAA8D;AAAA,IAC7E,QAAQ,OAAO,wFAAwF,IAAI,IAAI,IAAI;AAAA,CAAgB;AAAA,EACrI;AAGA,MAAI,OAAO,GAAG,KAAK,QAAQ,KAAK;AAAA;AAChC,UAAQ,cAAc,IAAI,EAAE,IAAI,SAAS,SAAS;AAChD,QAAI,IAAY;AAChB,QAAI,IAAY;AAChB,QAAI,MAAc;AAElB,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAM,OAAO,QAAQ,CAAC;AACtB,cAAQ,KAAK,CAAC,GAAG;AAAA,QACf,KAAK;AACH,cAAI,KAAK,CAAC,IAAI;AACd,cAAI,KAAK,OAAO,KAAK,CAAC,IAAI;AAC1B,iBAAO,IAAI,MAAM,IAAI;AACrB;AAAA,QACF,KAAK;AACH,eAAK,KAAK,CAAC;AACX,iBAAO,IAAI,MAAM,IAAI;AACrB;AAAA,QACF,KAAK;AACH,eAAK,KAAK,CAAC;AACX,iBAAO,IAAI,MAAM,IAAI;AACrB;AAAA,MACJ;AAAA,IACF;AACA,WAAO;AACP,WAAO;AAAA,EACT,CAAC,EAAE,KAAK,IAAI;AACZ,UAAQ;AAGR,QAAM,WAAW,MAAM,QAAQ,QAAQ,OAAO,IAAI,CAAC;AACnD,SAAO,KAAK;AAAA,IACR,QAAQ,OAAO,sBAAsB,SAAS,MAAM;AAAA,CAAmC;AAAA;AAAA,IACvF;AAAA;AAAA,IACA,QAAQ,OAAO,uBAAuB;AAAA;AAAA,EAC1C,CAAC;AAGD,MAAI,OAAO;AACX,MAAI,SAAS,OAAO,CAAC,EAAG;AACxB,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAQ,aAAa,MAAM,GAAG,MAAM,GAAG,IAAI;AAC3C,cAAU,OAAO,CAAC,EAAG;AAAA,EACvB;AAEA,SAAO;AAAA,IACH,QAAQ,OAAO,IAAI;AAAA,IACnB,QAAQ,OAAO,qCAAqC;AAAA,IACpD,QAAQ,OAAO,gBAAgB,SAAS,WAAW;AAAA,EACvD;AAEA,SAAO,YAAY,GAAG,MAAM;AAC9B;",
5
+ "names": []
6
+ }