├── .gitignore
├── README.md
├── createInvoice.js
├── index.js
├── logo.png
├── package-lock.json
├── package.json
└── screenshot.png
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | invoice.pdf
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # PDFKit Invoices
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | ## Prerequisites
10 |
11 | - [Node.js](http://nodejs.org/) (with npm or Yarn)
12 |
13 | ## Getting Started
14 |
15 | This repository is an example of how to make PDF invoices with PDFKit.
16 |
17 | There are two important fields in this this repository:
18 |
19 | - [`index.js`](index.js) is the main entry point. It defines the data structure used to create the invoices.
20 | - [`createInvoice.js`](createInvoice.js) exports a function that can be used to create invoice PDFs.
21 |
22 | To get started, use the following commands:
23 |
24 | ```bash
25 | git clone https://github.com/PSPDFKit-labs/pdfkit-invoice.git
26 |
27 | npm install # Install dependencies
28 |
29 | npm start # This will create an invoice.pdf file in the root of the project.
30 | ```
31 |
32 | To learn more about this project, make sure to read the accompanying [blog post](https://pspdfkit.com/blog/2019/generate-invoices-pdfkit-node)
33 |
34 | ## Contributing
35 |
36 | Please ensure
37 | [you have signed our CLA](https://pspdfkit.com/guides/web/current/miscellaneous/contributing/) so that we can
38 | accept your contributions.
39 |
--------------------------------------------------------------------------------
/createInvoice.js:
--------------------------------------------------------------------------------
1 | const fs = require("fs");
2 | const PDFDocument = require("pdfkit");
3 |
4 | function createInvoice(invoice, path) {
5 | let doc = new PDFDocument({ size: "A4", margin: 50 });
6 |
7 | generateHeader(doc);
8 | generateCustomerInformation(doc, invoice);
9 | generateInvoiceTable(doc, invoice);
10 | generateFooter(doc);
11 |
12 | doc.end();
13 | doc.pipe(fs.createWriteStream(path));
14 | }
15 |
16 | function generateHeader(doc) {
17 | doc
18 | .image("logo.png", 50, 45, { width: 50 })
19 | .fillColor("#444444")
20 | .fontSize(20)
21 | .text("ACME Inc.", 110, 57)
22 | .fontSize(10)
23 | .text("ACME Inc.", 200, 50, { align: "right" })
24 | .text("123 Main Street", 200, 65, { align: "right" })
25 | .text("New York, NY, 10025", 200, 80, { align: "right" })
26 | .moveDown();
27 | }
28 |
29 | function generateCustomerInformation(doc, invoice) {
30 | doc
31 | .fillColor("#444444")
32 | .fontSize(20)
33 | .text("Invoice", 50, 160);
34 |
35 | generateHr(doc, 185);
36 |
37 | const customerInformationTop = 200;
38 |
39 | doc
40 | .fontSize(10)
41 | .text("Invoice Number:", 50, customerInformationTop)
42 | .font("Helvetica-Bold")
43 | .text(invoice.invoice_nr, 150, customerInformationTop)
44 | .font("Helvetica")
45 | .text("Invoice Date:", 50, customerInformationTop + 15)
46 | .text(formatDate(new Date()), 150, customerInformationTop + 15)
47 | .text("Balance Due:", 50, customerInformationTop + 30)
48 | .text(
49 | formatCurrency(invoice.subtotal - invoice.paid),
50 | 150,
51 | customerInformationTop + 30
52 | )
53 |
54 | .font("Helvetica-Bold")
55 | .text(invoice.shipping.name, 300, customerInformationTop)
56 | .font("Helvetica")
57 | .text(invoice.shipping.address, 300, customerInformationTop + 15)
58 | .text(
59 | invoice.shipping.city +
60 | ", " +
61 | invoice.shipping.state +
62 | ", " +
63 | invoice.shipping.country,
64 | 300,
65 | customerInformationTop + 30
66 | )
67 | .moveDown();
68 |
69 | generateHr(doc, 252);
70 | }
71 |
72 | function generateInvoiceTable(doc, invoice) {
73 | let i;
74 | const invoiceTableTop = 330;
75 |
76 | doc.font("Helvetica-Bold");
77 | generateTableRow(
78 | doc,
79 | invoiceTableTop,
80 | "Item",
81 | "Description",
82 | "Unit Cost",
83 | "Quantity",
84 | "Line Total"
85 | );
86 | generateHr(doc, invoiceTableTop + 20);
87 | doc.font("Helvetica");
88 |
89 | for (i = 0; i < invoice.items.length; i++) {
90 | const item = invoice.items[i];
91 | const position = invoiceTableTop + (i + 1) * 30;
92 | generateTableRow(
93 | doc,
94 | position,
95 | item.item,
96 | item.description,
97 | formatCurrency(item.amount / item.quantity),
98 | item.quantity,
99 | formatCurrency(item.amount)
100 | );
101 |
102 | generateHr(doc, position + 20);
103 | }
104 |
105 | const subtotalPosition = invoiceTableTop + (i + 1) * 30;
106 | generateTableRow(
107 | doc,
108 | subtotalPosition,
109 | "",
110 | "",
111 | "Subtotal",
112 | "",
113 | formatCurrency(invoice.subtotal)
114 | );
115 |
116 | const paidToDatePosition = subtotalPosition + 20;
117 | generateTableRow(
118 | doc,
119 | paidToDatePosition,
120 | "",
121 | "",
122 | "Paid To Date",
123 | "",
124 | formatCurrency(invoice.paid)
125 | );
126 |
127 | const duePosition = paidToDatePosition + 25;
128 | doc.font("Helvetica-Bold");
129 | generateTableRow(
130 | doc,
131 | duePosition,
132 | "",
133 | "",
134 | "Balance Due",
135 | "",
136 | formatCurrency(invoice.subtotal - invoice.paid)
137 | );
138 | doc.font("Helvetica");
139 | }
140 |
141 | function generateFooter(doc) {
142 | doc
143 | .fontSize(10)
144 | .text(
145 | "Payment is due within 15 days. Thank you for your business.",
146 | 50,
147 | 780,
148 | { align: "center", width: 500 }
149 | );
150 | }
151 |
152 | function generateTableRow(
153 | doc,
154 | y,
155 | item,
156 | description,
157 | unitCost,
158 | quantity,
159 | lineTotal
160 | ) {
161 | doc
162 | .fontSize(10)
163 | .text(item, 50, y)
164 | .text(description, 150, y)
165 | .text(unitCost, 280, y, { width: 90, align: "right" })
166 | .text(quantity, 370, y, { width: 90, align: "right" })
167 | .text(lineTotal, 0, y, { align: "right" });
168 | }
169 |
170 | function generateHr(doc, y) {
171 | doc
172 | .strokeColor("#aaaaaa")
173 | .lineWidth(1)
174 | .moveTo(50, y)
175 | .lineTo(550, y)
176 | .stroke();
177 | }
178 |
179 | function formatCurrency(cents) {
180 | return "$" + (cents / 100).toFixed(2);
181 | }
182 |
183 | function formatDate(date) {
184 | const day = date.getDate();
185 | const month = date.getMonth() + 1;
186 | const year = date.getFullYear();
187 |
188 | return year + "/" + month + "/" + day;
189 | }
190 |
191 | module.exports = {
192 | createInvoice
193 | };
194 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | const { createInvoice } = require("./createInvoice.js");
2 |
3 | const invoice = {
4 | shipping: {
5 | name: "John Doe",
6 | address: "1234 Main Street",
7 | city: "San Francisco",
8 | state: "CA",
9 | country: "US",
10 | postal_code: 94111
11 | },
12 | items: [
13 | {
14 | item: "TC 100",
15 | description: "Toner Cartridge",
16 | quantity: 2,
17 | amount: 6000
18 | },
19 | {
20 | item: "USB_EXT",
21 | description: "USB Cable Extender",
22 | quantity: 1,
23 | amount: 2000
24 | }
25 | ],
26 | subtotal: 8000,
27 | paid: 0,
28 | invoice_nr: 1234
29 | };
30 |
31 | createInvoice(invoice, "invoice.pdf");
32 |
--------------------------------------------------------------------------------
/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PSPDFKit-labs/pdfkit-invoice/6ffaaa716f07bc137570448c06384ce83006f760/logo.png
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "pdfkit-invoice",
3 | "version": "1.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "pdfkit-invoice",
9 | "version": "1.0.0",
10 | "license": "ISC",
11 | "dependencies": {
12 | "pdfkit": "^0.13.0"
13 | }
14 | },
15 | "node_modules/@swc/helpers": {
16 | "version": "0.3.17",
17 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.3.17.tgz",
18 | "integrity": "sha512-tb7Iu+oZ+zWJZ3HJqwx8oNwSDIU440hmVMDPhpACWQWnrZHK99Bxs70gT1L2dnr5Hg50ZRWEFkQCAnOVVV0z1Q==",
19 | "dependencies": {
20 | "tslib": "^2.4.0"
21 | }
22 | },
23 | "node_modules/available-typed-arrays": {
24 | "version": "1.0.5",
25 | "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
26 | "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
27 | "engines": {
28 | "node": ">= 0.4"
29 | },
30 | "funding": {
31 | "url": "https://github.com/sponsors/ljharb"
32 | }
33 | },
34 | "node_modules/base64-js": {
35 | "version": "1.5.1",
36 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
37 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
38 | "funding": [
39 | {
40 | "type": "github",
41 | "url": "https://github.com/sponsors/feross"
42 | },
43 | {
44 | "type": "patreon",
45 | "url": "https://www.patreon.com/feross"
46 | },
47 | {
48 | "type": "consulting",
49 | "url": "https://feross.org/support"
50 | }
51 | ]
52 | },
53 | "node_modules/brotli": {
54 | "version": "1.3.3",
55 | "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz",
56 | "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==",
57 | "dependencies": {
58 | "base64-js": "^1.1.2"
59 | }
60 | },
61 | "node_modules/call-bind": {
62 | "version": "1.0.2",
63 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
64 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
65 | "dependencies": {
66 | "function-bind": "^1.1.1",
67 | "get-intrinsic": "^1.0.2"
68 | },
69 | "funding": {
70 | "url": "https://github.com/sponsors/ljharb"
71 | }
72 | },
73 | "node_modules/clone": {
74 | "version": "2.1.2",
75 | "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
76 | "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
77 | "engines": {
78 | "node": ">=0.8"
79 | }
80 | },
81 | "node_modules/crypto-js": {
82 | "version": "4.1.1",
83 | "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz",
84 | "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
85 | },
86 | "node_modules/deep-equal": {
87 | "version": "2.0.5",
88 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz",
89 | "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==",
90 | "dependencies": {
91 | "call-bind": "^1.0.0",
92 | "es-get-iterator": "^1.1.1",
93 | "get-intrinsic": "^1.0.1",
94 | "is-arguments": "^1.0.4",
95 | "is-date-object": "^1.0.2",
96 | "is-regex": "^1.1.1",
97 | "isarray": "^2.0.5",
98 | "object-is": "^1.1.4",
99 | "object-keys": "^1.1.1",
100 | "object.assign": "^4.1.2",
101 | "regexp.prototype.flags": "^1.3.0",
102 | "side-channel": "^1.0.3",
103 | "which-boxed-primitive": "^1.0.1",
104 | "which-collection": "^1.0.1",
105 | "which-typed-array": "^1.1.2"
106 | },
107 | "funding": {
108 | "url": "https://github.com/sponsors/ljharb"
109 | }
110 | },
111 | "node_modules/define-properties": {
112 | "version": "1.1.4",
113 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
114 | "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
115 | "dependencies": {
116 | "has-property-descriptors": "^1.0.0",
117 | "object-keys": "^1.1.1"
118 | },
119 | "engines": {
120 | "node": ">= 0.4"
121 | },
122 | "funding": {
123 | "url": "https://github.com/sponsors/ljharb"
124 | }
125 | },
126 | "node_modules/dfa": {
127 | "version": "1.2.0",
128 | "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz",
129 | "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q=="
130 | },
131 | "node_modules/es-abstract": {
132 | "version": "1.20.4",
133 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz",
134 | "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==",
135 | "dependencies": {
136 | "call-bind": "^1.0.2",
137 | "es-to-primitive": "^1.2.1",
138 | "function-bind": "^1.1.1",
139 | "function.prototype.name": "^1.1.5",
140 | "get-intrinsic": "^1.1.3",
141 | "get-symbol-description": "^1.0.0",
142 | "has": "^1.0.3",
143 | "has-property-descriptors": "^1.0.0",
144 | "has-symbols": "^1.0.3",
145 | "internal-slot": "^1.0.3",
146 | "is-callable": "^1.2.7",
147 | "is-negative-zero": "^2.0.2",
148 | "is-regex": "^1.1.4",
149 | "is-shared-array-buffer": "^1.0.2",
150 | "is-string": "^1.0.7",
151 | "is-weakref": "^1.0.2",
152 | "object-inspect": "^1.12.2",
153 | "object-keys": "^1.1.1",
154 | "object.assign": "^4.1.4",
155 | "regexp.prototype.flags": "^1.4.3",
156 | "safe-regex-test": "^1.0.0",
157 | "string.prototype.trimend": "^1.0.5",
158 | "string.prototype.trimstart": "^1.0.5",
159 | "unbox-primitive": "^1.0.2"
160 | },
161 | "engines": {
162 | "node": ">= 0.4"
163 | },
164 | "funding": {
165 | "url": "https://github.com/sponsors/ljharb"
166 | }
167 | },
168 | "node_modules/es-get-iterator": {
169 | "version": "1.1.2",
170 | "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz",
171 | "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==",
172 | "dependencies": {
173 | "call-bind": "^1.0.2",
174 | "get-intrinsic": "^1.1.0",
175 | "has-symbols": "^1.0.1",
176 | "is-arguments": "^1.1.0",
177 | "is-map": "^2.0.2",
178 | "is-set": "^2.0.2",
179 | "is-string": "^1.0.5",
180 | "isarray": "^2.0.5"
181 | },
182 | "funding": {
183 | "url": "https://github.com/sponsors/ljharb"
184 | }
185 | },
186 | "node_modules/es-to-primitive": {
187 | "version": "1.2.1",
188 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
189 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
190 | "dependencies": {
191 | "is-callable": "^1.1.4",
192 | "is-date-object": "^1.0.1",
193 | "is-symbol": "^1.0.2"
194 | },
195 | "engines": {
196 | "node": ">= 0.4"
197 | },
198 | "funding": {
199 | "url": "https://github.com/sponsors/ljharb"
200 | }
201 | },
202 | "node_modules/fontkit": {
203 | "version": "1.9.0",
204 | "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-1.9.0.tgz",
205 | "integrity": "sha512-HkW/8Lrk8jl18kzQHvAw9aTHe1cqsyx5sDnxncx652+CIfhawokEPkeM3BoIC+z/Xv7a0yMr0f3pRRwhGH455g==",
206 | "dependencies": {
207 | "@swc/helpers": "^0.3.13",
208 | "brotli": "^1.3.2",
209 | "clone": "^2.1.2",
210 | "deep-equal": "^2.0.5",
211 | "dfa": "^1.2.0",
212 | "restructure": "^2.0.1",
213 | "tiny-inflate": "^1.0.3",
214 | "unicode-properties": "^1.3.1",
215 | "unicode-trie": "^2.0.0"
216 | }
217 | },
218 | "node_modules/for-each": {
219 | "version": "0.3.3",
220 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
221 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
222 | "dependencies": {
223 | "is-callable": "^1.1.3"
224 | }
225 | },
226 | "node_modules/function-bind": {
227 | "version": "1.1.1",
228 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
229 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
230 | },
231 | "node_modules/function.prototype.name": {
232 | "version": "1.1.5",
233 | "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
234 | "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
235 | "dependencies": {
236 | "call-bind": "^1.0.2",
237 | "define-properties": "^1.1.3",
238 | "es-abstract": "^1.19.0",
239 | "functions-have-names": "^1.2.2"
240 | },
241 | "engines": {
242 | "node": ">= 0.4"
243 | },
244 | "funding": {
245 | "url": "https://github.com/sponsors/ljharb"
246 | }
247 | },
248 | "node_modules/functions-have-names": {
249 | "version": "1.2.3",
250 | "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
251 | "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
252 | "funding": {
253 | "url": "https://github.com/sponsors/ljharb"
254 | }
255 | },
256 | "node_modules/get-intrinsic": {
257 | "version": "1.1.3",
258 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
259 | "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
260 | "dependencies": {
261 | "function-bind": "^1.1.1",
262 | "has": "^1.0.3",
263 | "has-symbols": "^1.0.3"
264 | },
265 | "funding": {
266 | "url": "https://github.com/sponsors/ljharb"
267 | }
268 | },
269 | "node_modules/get-symbol-description": {
270 | "version": "1.0.0",
271 | "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
272 | "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
273 | "dependencies": {
274 | "call-bind": "^1.0.2",
275 | "get-intrinsic": "^1.1.1"
276 | },
277 | "engines": {
278 | "node": ">= 0.4"
279 | },
280 | "funding": {
281 | "url": "https://github.com/sponsors/ljharb"
282 | }
283 | },
284 | "node_modules/has": {
285 | "version": "1.0.3",
286 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
287 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
288 | "dependencies": {
289 | "function-bind": "^1.1.1"
290 | },
291 | "engines": {
292 | "node": ">= 0.4.0"
293 | }
294 | },
295 | "node_modules/has-bigints": {
296 | "version": "1.0.2",
297 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
298 | "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
299 | "funding": {
300 | "url": "https://github.com/sponsors/ljharb"
301 | }
302 | },
303 | "node_modules/has-property-descriptors": {
304 | "version": "1.0.0",
305 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
306 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
307 | "dependencies": {
308 | "get-intrinsic": "^1.1.1"
309 | },
310 | "funding": {
311 | "url": "https://github.com/sponsors/ljharb"
312 | }
313 | },
314 | "node_modules/has-symbols": {
315 | "version": "1.0.3",
316 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
317 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
318 | "engines": {
319 | "node": ">= 0.4"
320 | },
321 | "funding": {
322 | "url": "https://github.com/sponsors/ljharb"
323 | }
324 | },
325 | "node_modules/has-tostringtag": {
326 | "version": "1.0.0",
327 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
328 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
329 | "dependencies": {
330 | "has-symbols": "^1.0.2"
331 | },
332 | "engines": {
333 | "node": ">= 0.4"
334 | },
335 | "funding": {
336 | "url": "https://github.com/sponsors/ljharb"
337 | }
338 | },
339 | "node_modules/internal-slot": {
340 | "version": "1.0.3",
341 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
342 | "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
343 | "dependencies": {
344 | "get-intrinsic": "^1.1.0",
345 | "has": "^1.0.3",
346 | "side-channel": "^1.0.4"
347 | },
348 | "engines": {
349 | "node": ">= 0.4"
350 | }
351 | },
352 | "node_modules/is-arguments": {
353 | "version": "1.1.1",
354 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
355 | "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
356 | "dependencies": {
357 | "call-bind": "^1.0.2",
358 | "has-tostringtag": "^1.0.0"
359 | },
360 | "engines": {
361 | "node": ">= 0.4"
362 | },
363 | "funding": {
364 | "url": "https://github.com/sponsors/ljharb"
365 | }
366 | },
367 | "node_modules/is-bigint": {
368 | "version": "1.0.4",
369 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
370 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
371 | "dependencies": {
372 | "has-bigints": "^1.0.1"
373 | },
374 | "funding": {
375 | "url": "https://github.com/sponsors/ljharb"
376 | }
377 | },
378 | "node_modules/is-boolean-object": {
379 | "version": "1.1.2",
380 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
381 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
382 | "dependencies": {
383 | "call-bind": "^1.0.2",
384 | "has-tostringtag": "^1.0.0"
385 | },
386 | "engines": {
387 | "node": ">= 0.4"
388 | },
389 | "funding": {
390 | "url": "https://github.com/sponsors/ljharb"
391 | }
392 | },
393 | "node_modules/is-callable": {
394 | "version": "1.2.7",
395 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
396 | "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
397 | "engines": {
398 | "node": ">= 0.4"
399 | },
400 | "funding": {
401 | "url": "https://github.com/sponsors/ljharb"
402 | }
403 | },
404 | "node_modules/is-date-object": {
405 | "version": "1.0.5",
406 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
407 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
408 | "dependencies": {
409 | "has-tostringtag": "^1.0.0"
410 | },
411 | "engines": {
412 | "node": ">= 0.4"
413 | },
414 | "funding": {
415 | "url": "https://github.com/sponsors/ljharb"
416 | }
417 | },
418 | "node_modules/is-map": {
419 | "version": "2.0.2",
420 | "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
421 | "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==",
422 | "funding": {
423 | "url": "https://github.com/sponsors/ljharb"
424 | }
425 | },
426 | "node_modules/is-negative-zero": {
427 | "version": "2.0.2",
428 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
429 | "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
430 | "engines": {
431 | "node": ">= 0.4"
432 | },
433 | "funding": {
434 | "url": "https://github.com/sponsors/ljharb"
435 | }
436 | },
437 | "node_modules/is-number-object": {
438 | "version": "1.0.7",
439 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
440 | "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
441 | "dependencies": {
442 | "has-tostringtag": "^1.0.0"
443 | },
444 | "engines": {
445 | "node": ">= 0.4"
446 | },
447 | "funding": {
448 | "url": "https://github.com/sponsors/ljharb"
449 | }
450 | },
451 | "node_modules/is-regex": {
452 | "version": "1.1.4",
453 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
454 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
455 | "dependencies": {
456 | "call-bind": "^1.0.2",
457 | "has-tostringtag": "^1.0.0"
458 | },
459 | "engines": {
460 | "node": ">= 0.4"
461 | },
462 | "funding": {
463 | "url": "https://github.com/sponsors/ljharb"
464 | }
465 | },
466 | "node_modules/is-set": {
467 | "version": "2.0.2",
468 | "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
469 | "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==",
470 | "funding": {
471 | "url": "https://github.com/sponsors/ljharb"
472 | }
473 | },
474 | "node_modules/is-shared-array-buffer": {
475 | "version": "1.0.2",
476 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
477 | "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
478 | "dependencies": {
479 | "call-bind": "^1.0.2"
480 | },
481 | "funding": {
482 | "url": "https://github.com/sponsors/ljharb"
483 | }
484 | },
485 | "node_modules/is-string": {
486 | "version": "1.0.7",
487 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
488 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
489 | "dependencies": {
490 | "has-tostringtag": "^1.0.0"
491 | },
492 | "engines": {
493 | "node": ">= 0.4"
494 | },
495 | "funding": {
496 | "url": "https://github.com/sponsors/ljharb"
497 | }
498 | },
499 | "node_modules/is-symbol": {
500 | "version": "1.0.4",
501 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
502 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
503 | "dependencies": {
504 | "has-symbols": "^1.0.2"
505 | },
506 | "engines": {
507 | "node": ">= 0.4"
508 | },
509 | "funding": {
510 | "url": "https://github.com/sponsors/ljharb"
511 | }
512 | },
513 | "node_modules/is-typed-array": {
514 | "version": "1.1.9",
515 | "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz",
516 | "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==",
517 | "dependencies": {
518 | "available-typed-arrays": "^1.0.5",
519 | "call-bind": "^1.0.2",
520 | "es-abstract": "^1.20.0",
521 | "for-each": "^0.3.3",
522 | "has-tostringtag": "^1.0.0"
523 | },
524 | "engines": {
525 | "node": ">= 0.4"
526 | },
527 | "funding": {
528 | "url": "https://github.com/sponsors/ljharb"
529 | }
530 | },
531 | "node_modules/is-weakmap": {
532 | "version": "2.0.1",
533 | "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
534 | "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==",
535 | "funding": {
536 | "url": "https://github.com/sponsors/ljharb"
537 | }
538 | },
539 | "node_modules/is-weakref": {
540 | "version": "1.0.2",
541 | "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
542 | "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
543 | "dependencies": {
544 | "call-bind": "^1.0.2"
545 | },
546 | "funding": {
547 | "url": "https://github.com/sponsors/ljharb"
548 | }
549 | },
550 | "node_modules/is-weakset": {
551 | "version": "2.0.2",
552 | "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz",
553 | "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==",
554 | "dependencies": {
555 | "call-bind": "^1.0.2",
556 | "get-intrinsic": "^1.1.1"
557 | },
558 | "funding": {
559 | "url": "https://github.com/sponsors/ljharb"
560 | }
561 | },
562 | "node_modules/isarray": {
563 | "version": "2.0.5",
564 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
565 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
566 | },
567 | "node_modules/linebreak": {
568 | "version": "1.1.0",
569 | "resolved": "https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz",
570 | "integrity": "sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==",
571 | "dependencies": {
572 | "base64-js": "0.0.8",
573 | "unicode-trie": "^2.0.0"
574 | }
575 | },
576 | "node_modules/linebreak/node_modules/base64-js": {
577 | "version": "0.0.8",
578 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
579 | "integrity": "sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==",
580 | "engines": {
581 | "node": ">= 0.4"
582 | }
583 | },
584 | "node_modules/object-inspect": {
585 | "version": "1.12.2",
586 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
587 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
588 | "funding": {
589 | "url": "https://github.com/sponsors/ljharb"
590 | }
591 | },
592 | "node_modules/object-is": {
593 | "version": "1.1.5",
594 | "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
595 | "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
596 | "dependencies": {
597 | "call-bind": "^1.0.2",
598 | "define-properties": "^1.1.3"
599 | },
600 | "engines": {
601 | "node": ">= 0.4"
602 | },
603 | "funding": {
604 | "url": "https://github.com/sponsors/ljharb"
605 | }
606 | },
607 | "node_modules/object-keys": {
608 | "version": "1.1.1",
609 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
610 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
611 | "engines": {
612 | "node": ">= 0.4"
613 | }
614 | },
615 | "node_modules/object.assign": {
616 | "version": "4.1.4",
617 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
618 | "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
619 | "dependencies": {
620 | "call-bind": "^1.0.2",
621 | "define-properties": "^1.1.4",
622 | "has-symbols": "^1.0.3",
623 | "object-keys": "^1.1.1"
624 | },
625 | "engines": {
626 | "node": ">= 0.4"
627 | },
628 | "funding": {
629 | "url": "https://github.com/sponsors/ljharb"
630 | }
631 | },
632 | "node_modules/pako": {
633 | "version": "0.2.9",
634 | "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
635 | "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="
636 | },
637 | "node_modules/pdfkit": {
638 | "version": "0.13.0",
639 | "resolved": "https://registry.npmjs.org/pdfkit/-/pdfkit-0.13.0.tgz",
640 | "integrity": "sha512-AW79eHU5eLd2vgRDS9z3bSoi0FA+gYm+100LLosrQQMLUzOBGVOhG7ABcMFpJu7Bpg+MT74XYHi4k9EuU/9EZw==",
641 | "dependencies": {
642 | "crypto-js": "^4.0.0",
643 | "fontkit": "^1.8.1",
644 | "linebreak": "^1.0.2",
645 | "png-js": "^1.0.0"
646 | }
647 | },
648 | "node_modules/png-js": {
649 | "version": "1.0.0",
650 | "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz",
651 | "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g=="
652 | },
653 | "node_modules/regexp.prototype.flags": {
654 | "version": "1.4.3",
655 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
656 | "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
657 | "dependencies": {
658 | "call-bind": "^1.0.2",
659 | "define-properties": "^1.1.3",
660 | "functions-have-names": "^1.2.2"
661 | },
662 | "engines": {
663 | "node": ">= 0.4"
664 | },
665 | "funding": {
666 | "url": "https://github.com/sponsors/ljharb"
667 | }
668 | },
669 | "node_modules/restructure": {
670 | "version": "2.0.1",
671 | "resolved": "https://registry.npmjs.org/restructure/-/restructure-2.0.1.tgz",
672 | "integrity": "sha512-e0dOpjm5DseomnXx2M5lpdZ5zoHqF1+bqdMJUohoYVVQa7cBdnk7fdmeI6byNWP/kiME72EeTiSypTCVnpLiDg=="
673 | },
674 | "node_modules/safe-regex-test": {
675 | "version": "1.0.0",
676 | "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
677 | "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
678 | "dependencies": {
679 | "call-bind": "^1.0.2",
680 | "get-intrinsic": "^1.1.3",
681 | "is-regex": "^1.1.4"
682 | },
683 | "funding": {
684 | "url": "https://github.com/sponsors/ljharb"
685 | }
686 | },
687 | "node_modules/side-channel": {
688 | "version": "1.0.4",
689 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
690 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
691 | "dependencies": {
692 | "call-bind": "^1.0.0",
693 | "get-intrinsic": "^1.0.2",
694 | "object-inspect": "^1.9.0"
695 | },
696 | "funding": {
697 | "url": "https://github.com/sponsors/ljharb"
698 | }
699 | },
700 | "node_modules/string.prototype.trimend": {
701 | "version": "1.0.5",
702 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
703 | "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
704 | "dependencies": {
705 | "call-bind": "^1.0.2",
706 | "define-properties": "^1.1.4",
707 | "es-abstract": "^1.19.5"
708 | },
709 | "funding": {
710 | "url": "https://github.com/sponsors/ljharb"
711 | }
712 | },
713 | "node_modules/string.prototype.trimstart": {
714 | "version": "1.0.5",
715 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
716 | "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
717 | "dependencies": {
718 | "call-bind": "^1.0.2",
719 | "define-properties": "^1.1.4",
720 | "es-abstract": "^1.19.5"
721 | },
722 | "funding": {
723 | "url": "https://github.com/sponsors/ljharb"
724 | }
725 | },
726 | "node_modules/tiny-inflate": {
727 | "version": "1.0.3",
728 | "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
729 | "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="
730 | },
731 | "node_modules/tslib": {
732 | "version": "2.4.0",
733 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
734 | "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
735 | },
736 | "node_modules/unbox-primitive": {
737 | "version": "1.0.2",
738 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
739 | "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
740 | "dependencies": {
741 | "call-bind": "^1.0.2",
742 | "has-bigints": "^1.0.2",
743 | "has-symbols": "^1.0.3",
744 | "which-boxed-primitive": "^1.0.2"
745 | },
746 | "funding": {
747 | "url": "https://github.com/sponsors/ljharb"
748 | }
749 | },
750 | "node_modules/unicode-properties": {
751 | "version": "1.4.1",
752 | "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz",
753 | "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==",
754 | "dependencies": {
755 | "base64-js": "^1.3.0",
756 | "unicode-trie": "^2.0.0"
757 | }
758 | },
759 | "node_modules/unicode-trie": {
760 | "version": "2.0.0",
761 | "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz",
762 | "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==",
763 | "dependencies": {
764 | "pako": "^0.2.5",
765 | "tiny-inflate": "^1.0.0"
766 | }
767 | },
768 | "node_modules/which-boxed-primitive": {
769 | "version": "1.0.2",
770 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
771 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
772 | "dependencies": {
773 | "is-bigint": "^1.0.1",
774 | "is-boolean-object": "^1.1.0",
775 | "is-number-object": "^1.0.4",
776 | "is-string": "^1.0.5",
777 | "is-symbol": "^1.0.3"
778 | },
779 | "funding": {
780 | "url": "https://github.com/sponsors/ljharb"
781 | }
782 | },
783 | "node_modules/which-collection": {
784 | "version": "1.0.1",
785 | "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
786 | "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
787 | "dependencies": {
788 | "is-map": "^2.0.1",
789 | "is-set": "^2.0.1",
790 | "is-weakmap": "^2.0.1",
791 | "is-weakset": "^2.0.1"
792 | },
793 | "funding": {
794 | "url": "https://github.com/sponsors/ljharb"
795 | }
796 | },
797 | "node_modules/which-typed-array": {
798 | "version": "1.1.8",
799 | "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz",
800 | "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==",
801 | "dependencies": {
802 | "available-typed-arrays": "^1.0.5",
803 | "call-bind": "^1.0.2",
804 | "es-abstract": "^1.20.0",
805 | "for-each": "^0.3.3",
806 | "has-tostringtag": "^1.0.0",
807 | "is-typed-array": "^1.1.9"
808 | },
809 | "engines": {
810 | "node": ">= 0.4"
811 | },
812 | "funding": {
813 | "url": "https://github.com/sponsors/ljharb"
814 | }
815 | }
816 | },
817 | "dependencies": {
818 | "@swc/helpers": {
819 | "version": "0.3.17",
820 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.3.17.tgz",
821 | "integrity": "sha512-tb7Iu+oZ+zWJZ3HJqwx8oNwSDIU440hmVMDPhpACWQWnrZHK99Bxs70gT1L2dnr5Hg50ZRWEFkQCAnOVVV0z1Q==",
822 | "requires": {
823 | "tslib": "^2.4.0"
824 | }
825 | },
826 | "available-typed-arrays": {
827 | "version": "1.0.5",
828 | "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
829 | "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw=="
830 | },
831 | "base64-js": {
832 | "version": "1.5.1",
833 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
834 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
835 | },
836 | "brotli": {
837 | "version": "1.3.3",
838 | "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz",
839 | "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==",
840 | "requires": {
841 | "base64-js": "^1.1.2"
842 | }
843 | },
844 | "call-bind": {
845 | "version": "1.0.2",
846 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
847 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
848 | "requires": {
849 | "function-bind": "^1.1.1",
850 | "get-intrinsic": "^1.0.2"
851 | }
852 | },
853 | "clone": {
854 | "version": "2.1.2",
855 | "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
856 | "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="
857 | },
858 | "crypto-js": {
859 | "version": "4.1.1",
860 | "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz",
861 | "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
862 | },
863 | "deep-equal": {
864 | "version": "2.0.5",
865 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz",
866 | "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==",
867 | "requires": {
868 | "call-bind": "^1.0.0",
869 | "es-get-iterator": "^1.1.1",
870 | "get-intrinsic": "^1.0.1",
871 | "is-arguments": "^1.0.4",
872 | "is-date-object": "^1.0.2",
873 | "is-regex": "^1.1.1",
874 | "isarray": "^2.0.5",
875 | "object-is": "^1.1.4",
876 | "object-keys": "^1.1.1",
877 | "object.assign": "^4.1.2",
878 | "regexp.prototype.flags": "^1.3.0",
879 | "side-channel": "^1.0.3",
880 | "which-boxed-primitive": "^1.0.1",
881 | "which-collection": "^1.0.1",
882 | "which-typed-array": "^1.1.2"
883 | }
884 | },
885 | "define-properties": {
886 | "version": "1.1.4",
887 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
888 | "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
889 | "requires": {
890 | "has-property-descriptors": "^1.0.0",
891 | "object-keys": "^1.1.1"
892 | }
893 | },
894 | "dfa": {
895 | "version": "1.2.0",
896 | "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz",
897 | "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q=="
898 | },
899 | "es-abstract": {
900 | "version": "1.20.4",
901 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz",
902 | "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==",
903 | "requires": {
904 | "call-bind": "^1.0.2",
905 | "es-to-primitive": "^1.2.1",
906 | "function-bind": "^1.1.1",
907 | "function.prototype.name": "^1.1.5",
908 | "get-intrinsic": "^1.1.3",
909 | "get-symbol-description": "^1.0.0",
910 | "has": "^1.0.3",
911 | "has-property-descriptors": "^1.0.0",
912 | "has-symbols": "^1.0.3",
913 | "internal-slot": "^1.0.3",
914 | "is-callable": "^1.2.7",
915 | "is-negative-zero": "^2.0.2",
916 | "is-regex": "^1.1.4",
917 | "is-shared-array-buffer": "^1.0.2",
918 | "is-string": "^1.0.7",
919 | "is-weakref": "^1.0.2",
920 | "object-inspect": "^1.12.2",
921 | "object-keys": "^1.1.1",
922 | "object.assign": "^4.1.4",
923 | "regexp.prototype.flags": "^1.4.3",
924 | "safe-regex-test": "^1.0.0",
925 | "string.prototype.trimend": "^1.0.5",
926 | "string.prototype.trimstart": "^1.0.5",
927 | "unbox-primitive": "^1.0.2"
928 | }
929 | },
930 | "es-get-iterator": {
931 | "version": "1.1.2",
932 | "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz",
933 | "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==",
934 | "requires": {
935 | "call-bind": "^1.0.2",
936 | "get-intrinsic": "^1.1.0",
937 | "has-symbols": "^1.0.1",
938 | "is-arguments": "^1.1.0",
939 | "is-map": "^2.0.2",
940 | "is-set": "^2.0.2",
941 | "is-string": "^1.0.5",
942 | "isarray": "^2.0.5"
943 | }
944 | },
945 | "es-to-primitive": {
946 | "version": "1.2.1",
947 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
948 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
949 | "requires": {
950 | "is-callable": "^1.1.4",
951 | "is-date-object": "^1.0.1",
952 | "is-symbol": "^1.0.2"
953 | }
954 | },
955 | "fontkit": {
956 | "version": "1.9.0",
957 | "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-1.9.0.tgz",
958 | "integrity": "sha512-HkW/8Lrk8jl18kzQHvAw9aTHe1cqsyx5sDnxncx652+CIfhawokEPkeM3BoIC+z/Xv7a0yMr0f3pRRwhGH455g==",
959 | "requires": {
960 | "@swc/helpers": "^0.3.13",
961 | "brotli": "^1.3.2",
962 | "clone": "^2.1.2",
963 | "deep-equal": "^2.0.5",
964 | "dfa": "^1.2.0",
965 | "restructure": "^2.0.1",
966 | "tiny-inflate": "^1.0.3",
967 | "unicode-properties": "^1.3.1",
968 | "unicode-trie": "^2.0.0"
969 | }
970 | },
971 | "for-each": {
972 | "version": "0.3.3",
973 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
974 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
975 | "requires": {
976 | "is-callable": "^1.1.3"
977 | }
978 | },
979 | "function-bind": {
980 | "version": "1.1.1",
981 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
982 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
983 | },
984 | "function.prototype.name": {
985 | "version": "1.1.5",
986 | "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
987 | "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
988 | "requires": {
989 | "call-bind": "^1.0.2",
990 | "define-properties": "^1.1.3",
991 | "es-abstract": "^1.19.0",
992 | "functions-have-names": "^1.2.2"
993 | }
994 | },
995 | "functions-have-names": {
996 | "version": "1.2.3",
997 | "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
998 | "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="
999 | },
1000 | "get-intrinsic": {
1001 | "version": "1.1.3",
1002 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
1003 | "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
1004 | "requires": {
1005 | "function-bind": "^1.1.1",
1006 | "has": "^1.0.3",
1007 | "has-symbols": "^1.0.3"
1008 | }
1009 | },
1010 | "get-symbol-description": {
1011 | "version": "1.0.0",
1012 | "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
1013 | "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
1014 | "requires": {
1015 | "call-bind": "^1.0.2",
1016 | "get-intrinsic": "^1.1.1"
1017 | }
1018 | },
1019 | "has": {
1020 | "version": "1.0.3",
1021 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1022 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1023 | "requires": {
1024 | "function-bind": "^1.1.1"
1025 | }
1026 | },
1027 | "has-bigints": {
1028 | "version": "1.0.2",
1029 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
1030 | "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ=="
1031 | },
1032 | "has-property-descriptors": {
1033 | "version": "1.0.0",
1034 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
1035 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
1036 | "requires": {
1037 | "get-intrinsic": "^1.1.1"
1038 | }
1039 | },
1040 | "has-symbols": {
1041 | "version": "1.0.3",
1042 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
1043 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
1044 | },
1045 | "has-tostringtag": {
1046 | "version": "1.0.0",
1047 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
1048 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
1049 | "requires": {
1050 | "has-symbols": "^1.0.2"
1051 | }
1052 | },
1053 | "internal-slot": {
1054 | "version": "1.0.3",
1055 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
1056 | "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
1057 | "requires": {
1058 | "get-intrinsic": "^1.1.0",
1059 | "has": "^1.0.3",
1060 | "side-channel": "^1.0.4"
1061 | }
1062 | },
1063 | "is-arguments": {
1064 | "version": "1.1.1",
1065 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
1066 | "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
1067 | "requires": {
1068 | "call-bind": "^1.0.2",
1069 | "has-tostringtag": "^1.0.0"
1070 | }
1071 | },
1072 | "is-bigint": {
1073 | "version": "1.0.4",
1074 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
1075 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
1076 | "requires": {
1077 | "has-bigints": "^1.0.1"
1078 | }
1079 | },
1080 | "is-boolean-object": {
1081 | "version": "1.1.2",
1082 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
1083 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
1084 | "requires": {
1085 | "call-bind": "^1.0.2",
1086 | "has-tostringtag": "^1.0.0"
1087 | }
1088 | },
1089 | "is-callable": {
1090 | "version": "1.2.7",
1091 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
1092 | "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="
1093 | },
1094 | "is-date-object": {
1095 | "version": "1.0.5",
1096 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
1097 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
1098 | "requires": {
1099 | "has-tostringtag": "^1.0.0"
1100 | }
1101 | },
1102 | "is-map": {
1103 | "version": "2.0.2",
1104 | "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
1105 | "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg=="
1106 | },
1107 | "is-negative-zero": {
1108 | "version": "2.0.2",
1109 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
1110 | "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA=="
1111 | },
1112 | "is-number-object": {
1113 | "version": "1.0.7",
1114 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
1115 | "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
1116 | "requires": {
1117 | "has-tostringtag": "^1.0.0"
1118 | }
1119 | },
1120 | "is-regex": {
1121 | "version": "1.1.4",
1122 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
1123 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
1124 | "requires": {
1125 | "call-bind": "^1.0.2",
1126 | "has-tostringtag": "^1.0.0"
1127 | }
1128 | },
1129 | "is-set": {
1130 | "version": "2.0.2",
1131 | "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
1132 | "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g=="
1133 | },
1134 | "is-shared-array-buffer": {
1135 | "version": "1.0.2",
1136 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
1137 | "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
1138 | "requires": {
1139 | "call-bind": "^1.0.2"
1140 | }
1141 | },
1142 | "is-string": {
1143 | "version": "1.0.7",
1144 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
1145 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
1146 | "requires": {
1147 | "has-tostringtag": "^1.0.0"
1148 | }
1149 | },
1150 | "is-symbol": {
1151 | "version": "1.0.4",
1152 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
1153 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
1154 | "requires": {
1155 | "has-symbols": "^1.0.2"
1156 | }
1157 | },
1158 | "is-typed-array": {
1159 | "version": "1.1.9",
1160 | "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz",
1161 | "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==",
1162 | "requires": {
1163 | "available-typed-arrays": "^1.0.5",
1164 | "call-bind": "^1.0.2",
1165 | "es-abstract": "^1.20.0",
1166 | "for-each": "^0.3.3",
1167 | "has-tostringtag": "^1.0.0"
1168 | }
1169 | },
1170 | "is-weakmap": {
1171 | "version": "2.0.1",
1172 | "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
1173 | "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA=="
1174 | },
1175 | "is-weakref": {
1176 | "version": "1.0.2",
1177 | "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
1178 | "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
1179 | "requires": {
1180 | "call-bind": "^1.0.2"
1181 | }
1182 | },
1183 | "is-weakset": {
1184 | "version": "2.0.2",
1185 | "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz",
1186 | "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==",
1187 | "requires": {
1188 | "call-bind": "^1.0.2",
1189 | "get-intrinsic": "^1.1.1"
1190 | }
1191 | },
1192 | "isarray": {
1193 | "version": "2.0.5",
1194 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
1195 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
1196 | },
1197 | "linebreak": {
1198 | "version": "1.1.0",
1199 | "resolved": "https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz",
1200 | "integrity": "sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==",
1201 | "requires": {
1202 | "base64-js": "0.0.8",
1203 | "unicode-trie": "^2.0.0"
1204 | },
1205 | "dependencies": {
1206 | "base64-js": {
1207 | "version": "0.0.8",
1208 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
1209 | "integrity": "sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw=="
1210 | }
1211 | }
1212 | },
1213 | "object-inspect": {
1214 | "version": "1.12.2",
1215 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
1216 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
1217 | },
1218 | "object-is": {
1219 | "version": "1.1.5",
1220 | "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
1221 | "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
1222 | "requires": {
1223 | "call-bind": "^1.0.2",
1224 | "define-properties": "^1.1.3"
1225 | }
1226 | },
1227 | "object-keys": {
1228 | "version": "1.1.1",
1229 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
1230 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
1231 | },
1232 | "object.assign": {
1233 | "version": "4.1.4",
1234 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
1235 | "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
1236 | "requires": {
1237 | "call-bind": "^1.0.2",
1238 | "define-properties": "^1.1.4",
1239 | "has-symbols": "^1.0.3",
1240 | "object-keys": "^1.1.1"
1241 | }
1242 | },
1243 | "pako": {
1244 | "version": "0.2.9",
1245 | "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
1246 | "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="
1247 | },
1248 | "pdfkit": {
1249 | "version": "0.13.0",
1250 | "resolved": "https://registry.npmjs.org/pdfkit/-/pdfkit-0.13.0.tgz",
1251 | "integrity": "sha512-AW79eHU5eLd2vgRDS9z3bSoi0FA+gYm+100LLosrQQMLUzOBGVOhG7ABcMFpJu7Bpg+MT74XYHi4k9EuU/9EZw==",
1252 | "requires": {
1253 | "crypto-js": "^4.0.0",
1254 | "fontkit": "^1.8.1",
1255 | "linebreak": "^1.0.2",
1256 | "png-js": "^1.0.0"
1257 | }
1258 | },
1259 | "png-js": {
1260 | "version": "1.0.0",
1261 | "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz",
1262 | "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g=="
1263 | },
1264 | "regexp.prototype.flags": {
1265 | "version": "1.4.3",
1266 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
1267 | "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
1268 | "requires": {
1269 | "call-bind": "^1.0.2",
1270 | "define-properties": "^1.1.3",
1271 | "functions-have-names": "^1.2.2"
1272 | }
1273 | },
1274 | "restructure": {
1275 | "version": "2.0.1",
1276 | "resolved": "https://registry.npmjs.org/restructure/-/restructure-2.0.1.tgz",
1277 | "integrity": "sha512-e0dOpjm5DseomnXx2M5lpdZ5zoHqF1+bqdMJUohoYVVQa7cBdnk7fdmeI6byNWP/kiME72EeTiSypTCVnpLiDg=="
1278 | },
1279 | "safe-regex-test": {
1280 | "version": "1.0.0",
1281 | "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
1282 | "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
1283 | "requires": {
1284 | "call-bind": "^1.0.2",
1285 | "get-intrinsic": "^1.1.3",
1286 | "is-regex": "^1.1.4"
1287 | }
1288 | },
1289 | "side-channel": {
1290 | "version": "1.0.4",
1291 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
1292 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
1293 | "requires": {
1294 | "call-bind": "^1.0.0",
1295 | "get-intrinsic": "^1.0.2",
1296 | "object-inspect": "^1.9.0"
1297 | }
1298 | },
1299 | "string.prototype.trimend": {
1300 | "version": "1.0.5",
1301 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
1302 | "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
1303 | "requires": {
1304 | "call-bind": "^1.0.2",
1305 | "define-properties": "^1.1.4",
1306 | "es-abstract": "^1.19.5"
1307 | }
1308 | },
1309 | "string.prototype.trimstart": {
1310 | "version": "1.0.5",
1311 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
1312 | "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
1313 | "requires": {
1314 | "call-bind": "^1.0.2",
1315 | "define-properties": "^1.1.4",
1316 | "es-abstract": "^1.19.5"
1317 | }
1318 | },
1319 | "tiny-inflate": {
1320 | "version": "1.0.3",
1321 | "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
1322 | "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="
1323 | },
1324 | "tslib": {
1325 | "version": "2.4.0",
1326 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
1327 | "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
1328 | },
1329 | "unbox-primitive": {
1330 | "version": "1.0.2",
1331 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
1332 | "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
1333 | "requires": {
1334 | "call-bind": "^1.0.2",
1335 | "has-bigints": "^1.0.2",
1336 | "has-symbols": "^1.0.3",
1337 | "which-boxed-primitive": "^1.0.2"
1338 | }
1339 | },
1340 | "unicode-properties": {
1341 | "version": "1.4.1",
1342 | "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz",
1343 | "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==",
1344 | "requires": {
1345 | "base64-js": "^1.3.0",
1346 | "unicode-trie": "^2.0.0"
1347 | }
1348 | },
1349 | "unicode-trie": {
1350 | "version": "2.0.0",
1351 | "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz",
1352 | "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==",
1353 | "requires": {
1354 | "pako": "^0.2.5",
1355 | "tiny-inflate": "^1.0.0"
1356 | }
1357 | },
1358 | "which-boxed-primitive": {
1359 | "version": "1.0.2",
1360 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
1361 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
1362 | "requires": {
1363 | "is-bigint": "^1.0.1",
1364 | "is-boolean-object": "^1.1.0",
1365 | "is-number-object": "^1.0.4",
1366 | "is-string": "^1.0.5",
1367 | "is-symbol": "^1.0.3"
1368 | }
1369 | },
1370 | "which-collection": {
1371 | "version": "1.0.1",
1372 | "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
1373 | "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
1374 | "requires": {
1375 | "is-map": "^2.0.1",
1376 | "is-set": "^2.0.1",
1377 | "is-weakmap": "^2.0.1",
1378 | "is-weakset": "^2.0.1"
1379 | }
1380 | },
1381 | "which-typed-array": {
1382 | "version": "1.1.8",
1383 | "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz",
1384 | "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==",
1385 | "requires": {
1386 | "available-typed-arrays": "^1.0.5",
1387 | "call-bind": "^1.0.2",
1388 | "es-abstract": "^1.20.0",
1389 | "for-each": "^0.3.3",
1390 | "has-tostringtag": "^1.0.0",
1391 | "is-typed-array": "^1.1.9"
1392 | }
1393 | }
1394 | }
1395 | }
1396 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "pdfkit-invoice",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "node index.js",
8 | "test": "echo \"Error: no test specified\" && exit 1"
9 | },
10 | "keywords": [],
11 | "author": "",
12 | "license": "ISC",
13 | "dependencies": {
14 | "pdfkit": "^0.13.0"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PSPDFKit-labs/pdfkit-invoice/6ffaaa716f07bc137570448c06384ce83006f760/screenshot.png
--------------------------------------------------------------------------------