First commit

This commit is contained in:
2026-01-12 13:12:46 +01:00
parent b2d9501f6d
commit a1fbd8acf5
4413 changed files with 1245183 additions and 0 deletions

View File

@@ -0,0 +1,402 @@
"use strict";
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const arial8pt = {
100: 6.11767578125,
101: 6.11767578125,
102: 3.05615234375,
103: 6.11767578125,
104: 6.11767578125,
105: 2.44384765625,
106: 2.44384765625,
107: 5.5,
108: 2.44384765625,
109: 9.1630859375,
110: 6.11767578125,
111: 6.11767578125,
112: 6.11767578125,
113: 6.11767578125,
114: 3.6630859375,
115: 5.5,
116: 3.05615234375,
117: 6.11767578125,
118: 5.5,
119: 7.94384765625,
120: 5.5,
121: 5.5,
122: 5.5,
123: 3.673828125,
124: 2.857421875,
125: 3.673828125,
126: 6.423828125,
160: 3.05615234375,
161: 3.6630859375,
162: 6.11767578125,
163: 6.11767578125,
164: 6.11767578125,
165: 6.11767578125,
166: 2.857421875,
167: 6.11767578125,
168: 3.6630859375,
169: 8.10498046875,
170: 4.0712890625,
171: 6.11767578125,
172: 6.423828125,
173: 0,
174: 8.10498046875,
175: 6.07470703125,
176: 4.39892578125,
177: 6.037109375,
178: 3.6630859375,
179: 3.6630859375,
180: 3.6630859375,
181: 6.337890625,
182: 5.908203125,
183: 3.6630859375,
184: 3.6630859375,
185: 3.6630859375,
186: 4.017578125,
187: 6.11767578125,
188: 9.173828125,
189: 9.173828125,
190: 9.173828125,
191: 6.71923828125,
192: 7.3369140625,
193: 7.3369140625,
194: 7.3369140625,
195: 7.3369140625,
196: 7.3369140625,
197: 7.3369140625,
198: 11,
199: 7.94384765625,
200: 7.3369140625,
201: 7.3369140625,
202: 7.3369140625,
203: 7.3369140625,
204: 3.05615234375,
205: 3.05615234375,
206: 3.05615234375,
207: 3.05615234375,
208: 7.94384765625,
209: 7.94384765625,
210: 8.55615234375,
211: 8.55615234375,
212: 8.55615234375,
213: 8.55615234375,
214: 8.55615234375,
215: 6.423828125,
216: 8.55615234375,
217: 7.94384765625,
218: 7.94384765625,
219: 7.94384765625,
220: 7.94384765625,
221: 7.3369140625,
222: 7.3369140625,
223: 6.71923828125,
224: 6.11767578125,
225: 6.11767578125,
226: 6.11767578125,
227: 6.11767578125,
228: 6.11767578125,
229: 6.11767578125,
230: 9.78076171875,
231: 5.5,
232: 6.11767578125,
233: 6.11767578125,
234: 6.11767578125,
235: 6.11767578125,
236: 3.05615234375,
237: 3.05615234375,
238: 3.05615234375,
239: 3.05615234375,
240: 6.11767578125,
241: 6.11767578125,
242: 6.11767578125,
243: 6.11767578125,
244: 6.11767578125,
245: 6.11767578125,
246: 6.11767578125,
247: 6.037109375,
248: 6.71923828125,
249: 6.11767578125,
250: 6.11767578125,
251: 6.11767578125,
252: 6.11767578125,
253: 5.5,
254: 6.11767578125,
32: 3.05615234375,
33: 3.05615234375,
34: 3.90478515625,
35: 6.11767578125,
36: 6.11767578125,
37: 9.78076171875,
38: 7.3369140625,
39: 2.10009765625,
40: 3.6630859375,
41: 3.6630859375,
42: 4.28076171875,
43: 6.423828125,
44: 3.05615234375,
45: 3.6630859375,
46: 3.05615234375,
47: 3.05615234375,
48: 6.11767578125,
49: 6.11767578125,
50: 6.11767578125,
51: 6.11767578125,
52: 6.11767578125,
53: 6.11767578125,
54: 6.11767578125,
55: 6.11767578125,
56: 6.11767578125,
57: 6.11767578125,
58: 3.05615234375,
59: 3.05615234375,
60: 6.423828125,
61: 6.423828125,
62: 6.423828125,
63: 6.11767578125,
64: 11.16650390625,
65: 7.3369140625,
66: 7.3369140625,
67: 7.94384765625,
68: 7.94384765625,
69: 7.3369140625,
70: 6.71923828125,
71: 8.55615234375,
72: 7.94384765625,
73: 3.05615234375,
74: 5.5,
75: 7.3369140625,
76: 6.11767578125,
77: 9.1630859375,
78: 7.94384765625,
79: 8.55615234375,
80: 7.3369140625,
81: 8.55615234375,
82: 7.94384765625,
83: 7.3369140625,
84: 6.71923828125,
85: 7.94384765625,
86: 7.3369140625,
87: 10.38232421875,
88: 7.3369140625,
89: 7.3369140625,
90: 6.71923828125,
91: 3.05615234375,
92: 3.05615234375,
93: 3.05615234375,
94: 5.16162109375,
95: 6.11767578125,
96: 3.6630859375,
97: 6.11767578125,
98: 6.11767578125,
99: 5.5
};
const arial10pt = {
100: 7.22998046875,
101: 7.22998046875,
102: 3.61181640625,
103: 7.22998046875,
104: 7.22998046875,
105: 2.88818359375,
106: 2.88818359375,
107: 6.5,
108: 2.88818359375,
109: 10.8291015625,
110: 7.22998046875,
111: 7.22998046875,
112: 7.22998046875,
113: 7.22998046875,
114: 4.3291015625,
115: 6.5,
116: 3.61181640625,
117: 7.22998046875,
118: 6.5,
119: 9.38818359375,
120: 6.5,
121: 6.5,
122: 6.5,
123: 4.341796875,
124: 3.376953125,
125: 4.341796875,
126: 7.591796875,
160: 3.61181640625,
161: 4.3291015625,
162: 7.22998046875,
163: 7.22998046875,
164: 7.22998046875,
165: 7.22998046875,
166: 3.376953125,
167: 7.22998046875,
168: 4.3291015625,
169: 9.57861328125,
170: 4.8115234375,
171: 7.22998046875,
172: 7.591796875,
173: 0,
174: 9.57861328125,
175: 7.17919921875,
176: 5.19873046875,
177: 7.134765625,
178: 4.3291015625,
179: 4.3291015625,
180: 4.3291015625,
181: 7.490234375,
182: 6.982421875,
183: 4.3291015625,
184: 4.3291015625,
185: 4.3291015625,
186: 4.748046875,
187: 7.22998046875,
188: 10.841796875,
189: 10.841796875,
190: 10.841796875,
191: 7.94091796875,
192: 8.6708984375,
193: 8.6708984375,
194: 8.6708984375,
195: 8.6708984375,
196: 8.6708984375,
197: 8.6708984375,
198: 13,
199: 9.38818359375,
200: 8.6708984375,
201: 8.6708984375,
202: 8.6708984375,
203: 8.6708984375,
204: 3.61181640625,
205: 3.61181640625,
206: 3.61181640625,
207: 3.61181640625,
208: 9.38818359375,
209: 9.38818359375,
210: 10.11181640625,
211: 10.11181640625,
212: 10.11181640625,
213: 10.11181640625,
214: 10.11181640625,
215: 7.591796875,
216: 10.11181640625,
217: 9.38818359375,
218: 9.38818359375,
219: 9.38818359375,
220: 9.38818359375,
221: 8.6708984375,
222: 8.6708984375,
223: 7.94091796875,
224: 7.22998046875,
225: 7.22998046875,
226: 7.22998046875,
227: 7.22998046875,
228: 7.22998046875,
229: 7.22998046875,
230: 11.55908203125,
231: 6.5,
232: 7.22998046875,
233: 7.22998046875,
234: 7.22998046875,
235: 7.22998046875,
236: 3.61181640625,
237: 3.61181640625,
238: 3.61181640625,
239: 3.61181640625,
240: 7.22998046875,
241: 7.22998046875,
242: 7.22998046875,
243: 7.22998046875,
244: 7.22998046875,
245: 7.22998046875,
246: 7.22998046875,
247: 7.134765625,
248: 7.94091796875,
249: 7.22998046875,
250: 7.22998046875,
251: 7.22998046875,
252: 7.22998046875,
253: 6.5,
254: 7.22998046875,
32: 3.61181640625,
33: 3.61181640625,
34: 4.61474609375,
35: 7.22998046875,
36: 7.22998046875,
37: 11.55908203125,
38: 8.6708984375,
39: 2.48193359375,
40: 4.3291015625,
41: 4.3291015625,
42: 5.05908203125,
43: 7.591796875,
44: 3.61181640625,
45: 4.3291015625,
46: 3.61181640625,
47: 3.61181640625,
48: 7.22998046875,
49: 7.22998046875,
50: 7.22998046875,
51: 7.22998046875,
52: 7.22998046875,
53: 7.22998046875,
54: 7.22998046875,
55: 7.22998046875,
56: 7.22998046875,
57: 7.22998046875,
58: 3.61181640625,
59: 3.61181640625,
60: 7.591796875,
61: 7.591796875,
62: 7.591796875,
63: 7.22998046875,
64: 13.19677734375,
65: 8.6708984375,
66: 8.6708984375,
67: 9.38818359375,
68: 9.38818359375,
69: 8.6708984375,
70: 7.94091796875,
71: 10.11181640625,
72: 9.38818359375,
73: 3.61181640625,
74: 6.5,
75: 8.6708984375,
76: 7.22998046875,
77: 10.8291015625,
78: 9.38818359375,
79: 10.11181640625,
80: 8.6708984375,
81: 10.11181640625,
82: 9.38818359375,
83: 8.6708984375,
84: 7.94091796875,
85: 9.38818359375,
86: 8.6708984375,
87: 12.27001953125,
88: 8.6708984375,
89: 8.6708984375,
90: 7.94091796875,
91: 3.61181640625,
92: 3.61181640625,
93: 3.61181640625,
94: 6.10009765625,
95: 7.22998046875,
96: 4.3291015625,
97: 7.22998046875,
98: 7.22998046875,
99: 6.5
};
function calculateTextWidth(text, size) {
let width = 0;
if (size === "8pt") {
for (let c = 0; c < text.length; c++) {
width += arial8pt[text.charCodeAt(c)];
}
} else if (size === "10pt") {
for (let c = 0; c < text.length; c++) {
width += arial10pt[text.charCodeAt(c)];
}
}
return width;
}
exports.arial10pt = arial10pt;
exports.arial8pt = arial8pt;
exports.calculateTextWidth = calculateTextWidth;

View File

@@ -0,0 +1,385 @@
export declare const arial8pt: {
100: number;
101: number;
102: number;
103: number;
104: number;
105: number;
106: number;
107: number;
108: number;
109: number;
110: number;
111: number;
112: number;
113: number;
114: number;
115: number;
116: number;
117: number;
118: number;
119: number;
120: number;
121: number;
122: number;
123: number;
124: number;
125: number;
126: number;
160: number;
161: number;
162: number;
163: number;
164: number;
165: number;
166: number;
167: number;
168: number;
169: number;
170: number;
171: number;
172: number;
173: number;
174: number;
175: number;
176: number;
177: number;
178: number;
179: number;
180: number;
181: number;
182: number;
183: number;
184: number;
185: number;
186: number;
187: number;
188: number;
189: number;
190: number;
191: number;
192: number;
193: number;
194: number;
195: number;
196: number;
197: number;
198: number;
199: number;
200: number;
201: number;
202: number;
203: number;
204: number;
205: number;
206: number;
207: number;
208: number;
209: number;
210: number;
211: number;
212: number;
213: number;
214: number;
215: number;
216: number;
217: number;
218: number;
219: number;
220: number;
221: number;
222: number;
223: number;
224: number;
225: number;
226: number;
227: number;
228: number;
229: number;
230: number;
231: number;
232: number;
233: number;
234: number;
235: number;
236: number;
237: number;
238: number;
239: number;
240: number;
241: number;
242: number;
243: number;
244: number;
245: number;
246: number;
247: number;
248: number;
249: number;
250: number;
251: number;
252: number;
253: number;
254: number;
32: number;
33: number;
34: number;
35: number;
36: number;
37: number;
38: number;
39: number;
40: number;
41: number;
42: number;
43: number;
44: number;
45: number;
46: number;
47: number;
48: number;
49: number;
50: number;
51: number;
52: number;
53: number;
54: number;
55: number;
56: number;
57: number;
58: number;
59: number;
60: number;
61: number;
62: number;
63: number;
64: number;
65: number;
66: number;
67: number;
68: number;
69: number;
70: number;
71: number;
72: number;
73: number;
74: number;
75: number;
76: number;
77: number;
78: number;
79: number;
80: number;
81: number;
82: number;
83: number;
84: number;
85: number;
86: number;
87: number;
88: number;
89: number;
90: number;
91: number;
92: number;
93: number;
94: number;
95: number;
96: number;
97: number;
98: number;
99: number;
};
export declare const arial10pt: {
100: number;
101: number;
102: number;
103: number;
104: number;
105: number;
106: number;
107: number;
108: number;
109: number;
110: number;
111: number;
112: number;
113: number;
114: number;
115: number;
116: number;
117: number;
118: number;
119: number;
120: number;
121: number;
122: number;
123: number;
124: number;
125: number;
126: number;
160: number;
161: number;
162: number;
163: number;
164: number;
165: number;
166: number;
167: number;
168: number;
169: number;
170: number;
171: number;
172: number;
173: number;
174: number;
175: number;
176: number;
177: number;
178: number;
179: number;
180: number;
181: number;
182: number;
183: number;
184: number;
185: number;
186: number;
187: number;
188: number;
189: number;
190: number;
191: number;
192: number;
193: number;
194: number;
195: number;
196: number;
197: number;
198: number;
199: number;
200: number;
201: number;
202: number;
203: number;
204: number;
205: number;
206: number;
207: number;
208: number;
209: number;
210: number;
211: number;
212: number;
213: number;
214: number;
215: number;
216: number;
217: number;
218: number;
219: number;
220: number;
221: number;
222: number;
223: number;
224: number;
225: number;
226: number;
227: number;
228: number;
229: number;
230: number;
231: number;
232: number;
233: number;
234: number;
235: number;
236: number;
237: number;
238: number;
239: number;
240: number;
241: number;
242: number;
243: number;
244: number;
245: number;
246: number;
247: number;
248: number;
249: number;
250: number;
251: number;
252: number;
253: number;
254: number;
32: number;
33: number;
34: number;
35: number;
36: number;
37: number;
38: number;
39: number;
40: number;
41: number;
42: number;
43: number;
44: number;
45: number;
46: number;
47: number;
48: number;
49: number;
50: number;
51: number;
52: number;
53: number;
54: number;
55: number;
56: number;
57: number;
58: number;
59: number;
60: number;
61: number;
62: number;
63: number;
64: number;
65: number;
66: number;
67: number;
68: number;
69: number;
70: number;
71: number;
72: number;
73: number;
74: number;
75: number;
76: number;
77: number;
78: number;
79: number;
80: number;
81: number;
82: number;
83: number;
84: number;
85: number;
86: number;
87: number;
88: number;
89: number;
90: number;
91: number;
92: number;
93: number;
94: number;
95: number;
96: number;
97: number;
98: number;
99: number;
};
export declare function calculateTextWidth(text: string, size: "10pt" | "8pt"): number;

6
node_modules/swissqrbill/lib/cjs/svg/index.cjs generated vendored Normal file
View File

@@ -0,0 +1,6 @@
"use strict";
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const swissqrbill = require("./swissqrbill.cjs");
const swissqrcode = require("./swissqrcode.cjs");
exports.SwissQRBill = swissqrbill.SwissQRBill;
exports.SwissQRCode = swissqrcode.SwissQRCode;

2
node_modules/swissqrbill/lib/cjs/svg/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,2 @@
export * from './swissqrbill.js';
export * from './swissqrcode.js';

329
node_modules/swissqrbill/lib/cjs/svg/swissqrbill.cjs generated vendored Normal file
View File

@@ -0,0 +1,329 @@
"use strict";
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const svgEngine = require("svg-engine");
const cleaner = require("../shared/cleaner.cjs");
const translations = require("../shared/translations.cjs");
const validator = require("../shared/validator.cjs");
const swissqrcode = require("./swissqrcode.cjs");
const utils = require("../shared/utils.cjs");
const characterWidth = require("./character-width.cjs");
class SwissQRBill {
constructor(data, options) {
this.scissors = true;
this.outlines = true;
this.language = "DE";
this.font = "Arial";
this.data = data;
this.data = cleaner.cleanData(this.data);
validator.validateData(this.data);
this.language = (options == null ? void 0 : options.language) !== void 0 ? options.language : this.language;
this.outlines = (options == null ? void 0 : options.outlines) !== void 0 ? options.outlines : this.outlines;
this.font = (options == null ? void 0 : options.fontName) !== void 0 ? options.fontName : this.font;
this.scissors = (options == null ? void 0 : options.scissors) !== void 0 ? options.scissors : this.scissors;
this.instance = new svgEngine.SVG();
this.instance.width("210mm");
this.instance.height("105mm");
this._render();
}
/**
* Outputs the SVG as a string.
*
* @returns The outerHTML of the SVG.
*/
toString() {
return this.instance.outerHTML;
}
/**
* Returns the SVG element.
*
* @returns The SVG element.
*/
get element() {
return this.instance.element;
}
_render() {
const formattedCreditorAddress = this._formatAddress(this.data.creditor);
let receiptLineCount = 0;
let paymentPartLineCount = 0;
this.instance.addRect(0, 0, "100%", "100%").fill("#fff");
if (this.outlines) {
this.instance.addLine("62mm", "0mm", "62mm", "105mm").stroke(1, "dashed", "black");
}
if (this.scissors) {
const scissorsCenter = "M8.55299 18.3969C9.54465 17.5748 9.51074 16.0915 9.08357 14.9829L6.47473 8.02261C7.58167 5.9986 7.26467 3.99833 7.80373 3.99833C8.22582 3.99833 8.13259 4.38482 9.23105 4.32719C10.2854 4.27125 11.0652 3.1711 10.9957 2.13197C11.0025 1.09115 10.2041 0.0130391 9.1056 0.00456339C7.99867 -0.0734135 6.96972 0.858918 6.89683 1.95907C6.70527 3.24907 7.48674 5.53413 5.56613 6.60547C4.09305 5.80705 4.08797 4.38991 4.16255 3.10838C4.22358 2.04552 3.91845 0.76738 2.87424 0.260531C1.87241 -0.229367 0.446794 0.25036 0.139972 1.37594C-0.277034 2.51168 0.250156 4.07122 1.55541 4.34244C2.56233 4.55095 3.03528 3.83729 3.40143 4.1119C3.67774 4.31871 3.5167 5.62906 4.566 7.96667L1.908 15.5033C1.64356 16.456 1.65204 17.6206 2.58776 18.463L5.5424 10.6484L8.55299 18.3969ZM10.1634 2.87953C9.55143 3.97629 7.88849 3.88645 7.56641 2.74731C7.20704 1.71666 8.20887 0.397838 9.32767 0.726697C10.2447 0.919943 10.5821 2.12858 10.1634 2.87953ZM3.36753 2.927C2.94544 4.07122 1.00789 3.87797 0.746835 2.71341C0.479001 1.94042 0.8638 0.836881 1.77409 0.758904C2.88102 0.608036 3.87946 1.90821 3.36753 2.927Z";
const scissorsSVG = this.instance.addSVG("11px", "19px").x(utils.mm2px(62) - 5.25).y("30pt");
scissorsSVG.addPath(scissorsCenter).fill("black");
}
const receiptContainer = this.instance.addSVG().x("5mm").y("5mm");
const receiptTextContainer = receiptContainer.addText();
receiptTextContainer.addTSpan(translations.translations[this.language].receipt).x(0).y(0).dy("11pt").fontFamily(this.font).fontWeight("bold").fontSize("11pt");
receiptTextContainer.addTSpan(translations.translations[this.language].account).x(0).y("7mm").dy("9pt").fontFamily(this.font).fontWeight("bold").fontSize("6pt");
receiptTextContainer.addTSpan(utils.formatIBAN(this.data.creditor.account)).x(0).dy("9pt").fontFamily(this.font).fontWeight("normal").fontSize("8pt");
receiptLineCount++;
let receiptCreditorAddressLines = [];
for (const line of formattedCreditorAddress) {
const messageLines = this._fitTextToWidth(line, utils.mm2px(52), 2, "8pt");
receiptCreditorAddressLines = [...receiptCreditorAddressLines, ...messageLines];
}
for (const line of receiptCreditorAddressLines) {
receiptLineCount++;
receiptTextContainer.addTSpan(line).x(0).dy("9pt").fontFamily(this.font).fontWeight("normal").fontSize("8pt");
}
if (this.data.reference !== void 0) {
receiptTextContainer.addTSpan(translations.translations[this.language].reference).x(0).dy("18pt").fontFamily(this.font).fontWeight("bold").fontSize("6pt");
receiptTextContainer.addTSpan(utils.formatReference(this.data.reference)).x(0).dy("9pt").fontFamily(this.font).fontWeight("normal").fontSize("8pt");
receiptLineCount++;
}
if (this.data.debtor !== void 0) {
const formattedDebtorAddress = this._formatAddress(this.data.debtor);
receiptTextContainer.addTSpan(translations.translations[this.language].payableBy).x(0).dy("18pt").fontFamily(this.font).fontWeight("bold").fontSize("6pt");
let receiptDebtorAddressLines = [];
for (const line of formattedDebtorAddress) {
const messageLines = this._fitTextToWidth(line, utils.mm2px(52), 2, "8pt");
receiptDebtorAddressLines = [...receiptDebtorAddressLines, ...messageLines];
}
for (const line of receiptDebtorAddressLines) {
receiptTextContainer.addTSpan(line).x(0).dy("9pt").fontFamily(this.font).fontWeight("normal").fontSize("8pt");
}
} else {
receiptTextContainer.addTSpan(translations.translations[this.language].payableByName).x(0).dy("18pt").fontFamily(this.font).fontWeight("bold").fontSize("6pt");
const referenceHeight = this.data.reference !== void 0 ? utils.pt2mm(18) : 0;
this._addRectangle(
5,
12 + utils.pt2mm(9) + receiptLineCount * utils.pt2mm(9) + utils.pt2mm(referenceHeight) + utils.pt2mm(18) + 1,
52,
20
);
}
const amountContainer = receiptContainer.addText().y("63mm");
amountContainer.addTSpan(translations.translations[this.language].currency).x(0).dy("6pt").fontFamily(this.font).fontWeight("bold").fontSize("6pt");
const amountXPosition = this.data.amount === void 0 ? 13 : 22;
amountContainer.addTSpan(translations.translations[this.language].amount).x(`${amountXPosition}mm`).fontFamily(this.font).fontWeight("bold").fontSize("6pt");
amountContainer.addTSpan(this.data.currency).x(0).dy("11pt").fontFamily(this.font).fontWeight("normal").fontSize("8pt");
if (this.data.amount !== void 0) {
amountContainer.addTSpan(utils.formatAmount(this.data.amount)).x(`${amountXPosition}mm`).fontFamily(this.font).fontWeight("normal").fontSize("8pt");
} else {
this._addRectangle(27, 68, 30, 10);
}
amountContainer.addTSpan(translations.translations[this.language].acceptancePoint).x("52mm").y("82mm").textAlign("right").fontFamily(this.font).fontWeight("bold").fontSize("6pt");
const paymentPartContainer = this.instance.addSVG().x("67mm").y("5mm");
paymentPartContainer.addText(translations.translations[this.language].paymentPart).x(0).y(0).dy("11pt").fontFamily(this.font).fontWeight("bold").fontSize("11pt");
this._renderQRCode();
const paymentPartMiddleTextContainer = paymentPartContainer.addText().y("63mm");
paymentPartMiddleTextContainer.addTSpan(translations.translations[this.language].currency).x(0).dy("8pt").fontFamily(this.font).fontWeight("bold").fontSize("8pt");
paymentPartMiddleTextContainer.addTSpan(translations.translations[this.language].amount).x("22mm").fontFamily(this.font).fontWeight("bold").fontSize("8pt");
paymentPartMiddleTextContainer.addTSpan(this.data.currency).x(0).dy("13pt").fontFamily(this.font).fontWeight("normal").fontSize("10pt");
if (this.data.amount !== void 0) {
paymentPartMiddleTextContainer.addTSpan(utils.formatAmount(this.data.amount)).x("22mm").fontFamily(this.font).fontWeight("normal").fontSize("10pt");
} else {
this._addRectangle(
78,
68 + utils.pt2mm(8) + utils.pt2mm(5),
40,
15
);
}
const alternativeSchemeContainer = paymentPartContainer.addText().x(0).y("90mm");
if (this.data.av1 !== void 0) {
const [scheme, data] = this.data.av1.split(/(\/.+)/);
alternativeSchemeContainer.addTSpan(scheme).x(0).fontFamily(this.font).fontWeight("bold").fontSize("7pt");
alternativeSchemeContainer.addTSpan(this.data.av1.length > 90 ? `${data.substr(0, 87)}...` : data).fontFamily(this.font).fontWeight("normal").fontSize("7pt");
}
if (this.data.av2 !== void 0) {
const [scheme, data] = this.data.av2.split(/(\/.+)/);
alternativeSchemeContainer.addTSpan(scheme).x(0).dy("8pt").fontFamily(this.font).fontWeight("bold").fontSize("7pt");
alternativeSchemeContainer.addTSpan(this.data.av2.length > 90 ? `${data.substr(0, 87)}...` : data).fontFamily(this.font).fontWeight("normal").fontSize("7pt");
}
const paymentPartDebtorContainer = this.instance.addSVG().x("118mm").y("5mm");
const paymentPartRightTextContainer = paymentPartDebtorContainer.addText();
paymentPartRightTextContainer.addTSpan(translations.translations[this.language].account).x(0).y(0).dy("11pt").fontFamily(this.font).fontWeight("bold").fontSize("8pt");
paymentPartRightTextContainer.addTSpan(utils.formatIBAN(this.data.creditor.account)).x(0).dy("11pt").fontFamily(this.font).fontWeight("normal").fontSize("10pt");
paymentPartLineCount++;
let paymentPartCreditorAddressLines = [];
for (const line of formattedCreditorAddress) {
const messageLines = this._fitTextToWidth(line, utils.mm2px(52), 2, "8pt");
paymentPartCreditorAddressLines = [...paymentPartCreditorAddressLines, ...messageLines];
}
for (const line of paymentPartCreditorAddressLines) {
paymentPartRightTextContainer.addTSpan(line).x(0).dy("11pt").fontFamily(this.font).fontWeight("normal").fontSize("10pt");
paymentPartLineCount++;
}
if (this.data.reference !== void 0) {
paymentPartRightTextContainer.addTSpan(translations.translations[this.language].reference).x(0).dy("22pt").fontFamily(this.font).fontWeight("bold").fontSize("8pt");
paymentPartRightTextContainer.addTSpan(utils.formatReference(this.data.reference)).x(0).dy("11pt").fontFamily(this.font).fontWeight("normal").fontSize("10pt");
paymentPartLineCount++;
}
if (this.data.message !== void 0 || this.data.additionalInformation !== void 0) {
paymentPartRightTextContainer.addTSpan(translations.translations[this.language].additionalInformation).x(0).dy("22pt").fontFamily(this.font).fontWeight("bold").fontSize("8pt");
const referenceType = utils.getReferenceType(this.data.reference);
const maxLines = referenceType === "QRR" || referenceType === "SCOR" ? 3 : 4;
const lengthInPixel = utils.mm2px(87);
this._getLineCountOfText(this.data.message, lengthInPixel, "10pt");
const linesOfAdditionalInformation = this._getLineCountOfText(this.data.additionalInformation, lengthInPixel, "10pt");
if (this.data.additionalInformation !== void 0) {
if (referenceType === "QRR" || referenceType === "SCOR") {
if (this.data.message !== void 0) {
paymentPartRightTextContainer.addTSpan(this._ellipsis(this.data.message, lengthInPixel, "10pt")).x(0).dy("11pt").fontFamily(this.font).fontWeight("normal").fontSize("10pt");
paymentPartLineCount++;
}
} else {
if (this.data.message !== void 0) {
const maxLinesOfMessage = maxLines - linesOfAdditionalInformation;
const messageLines = this._fitTextToWidth(this.data.message, lengthInPixel, maxLinesOfMessage, "10pt");
for (let i = 0; i < maxLinesOfMessage; i++) {
paymentPartRightTextContainer.addTSpan(messageLines[i]).x(0).dy("11pt").fontFamily(this.font).fontWeight("normal").fontSize("10pt");
paymentPartLineCount++;
}
}
}
const additionalInformationLines = this._fitTextToWidth(this.data.additionalInformation, lengthInPixel, linesOfAdditionalInformation, "10pt");
for (let i = 0; i < linesOfAdditionalInformation; i++) {
paymentPartRightTextContainer.addTSpan(additionalInformationLines[i]).x(0).dy("11pt").fontFamily(this.font).fontWeight("normal").fontSize("10pt");
paymentPartLineCount++;
}
} else if (this.data.message !== void 0) {
const messageLines = this._fitTextToWidth(this.data.message, lengthInPixel, maxLines, "10pt");
for (let i = 0; i < maxLines; i++) {
paymentPartRightTextContainer.addTSpan(messageLines[i]).x(0).dy("11pt").fontFamily(this.font).fontWeight("normal").fontSize("10pt");
paymentPartLineCount++;
}
}
}
if (this.data.debtor !== void 0) {
const formattedDebtorAddress = this._formatAddress(this.data.debtor);
paymentPartRightTextContainer.addTSpan(translations.translations[this.language].payableBy).x(0).dy("22pt").fontFamily(this.font).fontWeight("bold").fontSize("8pt");
let paymentPartDebtorAddressLines = [];
for (const line of formattedDebtorAddress) {
const messageLines = this._fitTextToWidth(line, utils.mm2px(52), 2, "8pt");
paymentPartDebtorAddressLines = [...paymentPartDebtorAddressLines, ...messageLines];
}
for (const line of paymentPartDebtorAddressLines) {
paymentPartRightTextContainer.addTSpan(line).x(0).dy("11pt").fontFamily(this.font).fontWeight("normal").fontSize("10pt");
}
} else {
paymentPartRightTextContainer.addTSpan(translations.translations[this.language].payableByName).x(0).dy("22pt").fontFamily(this.font).fontWeight("bold").fontSize("8pt");
const referenceHeight = this.data.reference !== void 0 ? utils.pt2mm(22) : 0;
const additionalInformationHeight = this.data.additionalInformation !== void 0 || this.data.message !== void 0 ? utils.pt2mm(22) : 0;
this._addRectangle(
118,
5 + utils.pt2mm(11) + paymentPartLineCount * utils.pt2mm(11) + referenceHeight + additionalInformationHeight + utils.pt2mm(22) + 1,
65,
25
);
}
}
_renderQRCode() {
const qrCode = new swissqrcode.SwissQRCode(this.data);
qrCode.instance.x("67mm").y("17mm");
this.instance.appendInstance(qrCode.instance);
}
_formatAddress(data) {
const countryPrefix = data.country !== "CH" ? `${data.country} - ` : "";
if (data.buildingNumber !== void 0) {
return [data.name, `${data.address} ${data.buildingNumber}`, `${countryPrefix}${data.zip} ${data.city}`];
} else {
return [data.name, data.address, `${countryPrefix}${data.zip} ${data.city}`];
}
}
_getLineCountOfText(text, lengthInPixel, size) {
if (text === void 0) {
return 0;
} else {
let lines = 0;
let remainder = characterWidth.calculateTextWidth(text, size);
while (remainder > 1) {
lines++;
remainder -= lengthInPixel;
}
return lines;
}
}
_fitTextToWidth(text, lengthInPixel, maxLines, size) {
var _a;
const remainder = text.split(/([ |-])/g);
let lines = [];
let currentLine = "";
const checkCurrentLine = (currentLine2) => {
const lines2 = [];
let leftover = "";
if (characterWidth.calculateTextWidth(currentLine2, size) > lengthInPixel) {
const currentWordRemainder = currentLine2.split("");
let currentWord = "";
while (currentWordRemainder.length > 0) {
if (characterWidth.calculateTextWidth(currentWord, size) <= lengthInPixel) {
currentWord += currentWordRemainder.shift();
} else {
lines2.push(currentWord);
currentWord = "";
}
}
if (currentWord !== "") {
leftover = currentWord;
}
} else {
lines2.push(currentLine2);
}
return { leftover, lines: lines2 };
};
while (remainder.length > 0) {
const nextWord = remainder.shift();
const separator = (_a = remainder.shift()) != null ? _a : "";
if (characterWidth.calculateTextWidth(currentLine + nextWord + separator, size) <= lengthInPixel) {
currentLine += nextWord + separator;
} else {
if (currentLine !== "") {
const { leftover, lines: newLines } = checkCurrentLine(currentLine);
lines.push(...newLines);
currentLine = leftover + nextWord + separator;
} else {
currentLine = nextWord + separator;
}
}
}
if (currentLine !== "" && currentLine !== " ") {
const { leftover, lines: newLines } = checkCurrentLine(currentLine);
lines.push(...newLines);
if (leftover !== "") {
lines.push(leftover);
}
}
if (lines.length > maxLines) {
lines = lines.slice(0, maxLines);
lines[lines.length - 1] = this._ellipsis(lines[lines.length - 1], lengthInPixel, size);
}
return lines;
}
_ellipsis(text, lengthInPixel, size) {
let result = "";
if (characterWidth.calculateTextWidth(text, size) > lengthInPixel) {
for (let c = 0; c < text.length; c++) {
if (characterWidth.calculateTextWidth(`${result}${text[c]}...`, size) <= lengthInPixel) {
result += text[c];
} else {
break;
}
}
} else {
return text;
}
if (result.substr(-1) === " ") {
result = result.slice(0, -1);
}
return `${result}...`;
}
_addRectangle(x, y, width, height) {
const container = this.instance.addSVG(`${width}mm`, `${height}mm`);
container.x(`${x}mm`).y(`${y}mm`);
const length = 3;
container.addLine("0mm", "0mm", `${length}mm`, "0mm").stroke(".75pt", "solid", "black");
container.addLine(`${width - length}mm`, "0mm", `${width}mm`, "0mm").stroke(".75pt", "solid", "black");
container.addLine(`${width}mm`, "0mm", `${width}mm`, `${length}mm`).stroke(".75pt", "solid", "black");
container.addLine(`${width}mm`, `${height - length}mm`, `${width}mm`, `${height}mm`).stroke(".75pt", "solid", "black");
container.addLine(`${width - length}mm`, `${height}mm`, `${width}mm`, `${height}mm`).stroke(".75pt", "solid", "black");
container.addLine("0mm", `${height}mm`, `${length}mm`, `${height}mm`).stroke(".75pt", "solid", "black");
container.addLine("0mm", `${height - length}mm`, "0mm", `${height}mm`).stroke(".75pt", "solid", "black");
container.addLine("0mm", "0mm", "0mm", `${length}mm`).stroke(".75pt", "solid", "black");
return container;
}
}
exports.SwissQRBill = SwissQRBill;

62
node_modules/swissqrbill/lib/cjs/svg/swissqrbill.d.ts generated vendored Normal file
View File

@@ -0,0 +1,62 @@
import { SVG } from 'svg-engine';
import { Data, SVGOptions } from '../shared/types.js';
/**
* The SwissQRBill class creates the Payment Part with the QR Code as an SVG.
*
* @example
* ```ts
* const data = {
* amount: 1994.75,
* creditor: {
* account: "CH44 3199 9123 0008 8901 2",
* address: "Musterstrasse",
* buildingNumber: 7,
* city: "Musterstadt",
* country: "CH",
* name: "SwissQRBill",
* zip: 1234
* },
* currency: "CHF",
* debtor: {
* address: "Musterstrasse",
* buildingNumber: 1,
* city: "Musterstadt",
* country: "CH",
* name: "Peter Muster",
* zip: 1234
* },
* reference: "21 00000 00003 13947 14300 09017"
* };
*
* const svg = new SwissQRBill(data);
* writeFileSync("qr-bill.svg", svg.toString());
* ```
*/
export declare class SwissQRBill {
instance: SVG;
private scissors;
private outlines;
private language;
private font;
private data;
constructor(data: Data, options?: SVGOptions);
/**
* Outputs the SVG as a string.
*
* @returns The outerHTML of the SVG.
*/
toString(): string;
/**
* Returns the SVG element.
*
* @returns The SVG element.
*/
get element(): SVGElement;
private _render;
private _renderQRCode;
private _formatAddress;
private _getLineCountOfText;
private _fitTextToWidth;
private _ellipsis;
private _addRectangle;
}

51
node_modules/swissqrbill/lib/cjs/svg/swissqrcode.cjs generated vendored Normal file
View File

@@ -0,0 +1,51 @@
"use strict";
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const svgEngine = require("svg-engine");
const qrCode = require("../shared/qr-code.cjs");
class SwissQRCode {
/**
* Creates a Swiss QR Code.
*
* @param data The data to be encoded in the QR code.
* @param size The size of the QR code in mm.
* @throws { ValidationError } Throws an error if the data is invalid.
*/
constructor(data, size = 46) {
this.instance = new svgEngine.SVG();
this.instance.width(`${size}mm`);
this.instance.height(`${size}mm`);
qrCode.renderQRCode(data, size, (xPos, yPos, blockSize) => {
this.instance.addRect(
`${xPos}mm`,
`${yPos}mm`,
`${blockSize}mm`,
`${blockSize}mm`
).fill("black");
});
qrCode.renderSwissCross(size, (xPos, yPos, width, height, fillColor) => {
this.instance.addRect(
`${xPos}mm`,
`${yPos}mm`,
`${width}mm`,
`${height}mm`
).fill(fillColor);
});
}
/**
* Outputs the SVG as a string.
*
* @returns The outerHTML of the SVG element.
*/
toString() {
return this.instance.outerHTML;
}
/**
* Returns the SVG element.
*
* @returns The SVG element.
*/
get element() {
return this.instance.element;
}
}
exports.SwissQRCode = SwissQRCode;

25
node_modules/swissqrbill/lib/cjs/svg/swissqrcode.d.ts generated vendored Normal file
View File

@@ -0,0 +1,25 @@
import { SVG } from 'svg-engine';
import { Data } from '../shared/types.js';
export declare class SwissQRCode {
instance: SVG;
/**
* Creates a Swiss QR Code.
*
* @param data The data to be encoded in the QR code.
* @param size The size of the QR code in mm.
* @throws { ValidationError } Throws an error if the data is invalid.
*/
constructor(data: Data, size?: number);
/**
* Outputs the SVG as a string.
*
* @returns The outerHTML of the SVG element.
*/
toString(): string;
/**
* Returns the SVG element.
*
* @returns The SVG element.
*/
get element(): SVGElement;
}