├── .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 | Screenshot of an invoice PDF in the PSPDFKit for Web reader. 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 --------------------------------------------------------------------------------