{"version":3,"sources":["../../src/utils/helper.ts","../../src/utils/config.ts","../../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","require_config","defaultConfig","fs","path","invoiceMaker","PDFInvoice","payload","config","printer","docDefinition","resolve","reject","stream","err","sections","withTaxes","withDueDate","sectionCompany","refLabel","dateLabel","dueDateLabel","statusLabel","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\n\ninterface Helpers {\n\tcalcItemTotal(item: ItemInfo): number | string;\n\tcalcTax(items: ItemInfo[]): number | string;\n\tcalcSubTotal(items: ItemInfo[]): number | string;\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\n}\n\nconst helper: Helpers = {\n\t/**\n\t * Item total price calculation.\n\t *\n\t * @param {Object} item.\n\t * @returns {number} total.\n\t * @since 1.0.0\n\t */\n\tcalcItemTotal: function (item: ItemInfo): string {\n\t\tconst price = item.price || 0;\n\t\tconst quantity = item.quantity || 1;\n\t\treturn (price * quantity).toFixed(2);\n\t},\n\n\t/**\n\t * Calculate subtotal.\n\t *\n\t * @param {Object} items.\n\t * @returns {number} total.\n\t * @since 1.0.0\n\t */\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\n\t\tif (items.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tlet total = 0;\n\n\t\titems.forEach((item) => {\n\t\t\ttotal += Number(this.calcItemTotal(item));\n\t\t});\n\n\t\treturn total.toFixed(2);\n\t},\n\n\t/**\n\t * Calculate tax.\n\t *\n\t * @param {Object} items.\n\t * @returns {number} total.\n\t * @since 1.0.0\n\t */\n\tcalcTax: function (items: ItemInfo[]): number | string {\n\t\tif (items.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tlet total = 0;\n\n\t\titems.forEach((item) => {\n\t\t\tconst price = item.price;\n\t\t\tconst quantity = item.quantity;\n\t\t\tconst tax = item.tax || 0;\n\n\t\t\ttotal += (price * quantity * tax) / 100;\n\t\t});\n\n\t\treturn total.toFixed(2);\n\t},\n\n\t/**\n\t * Calculate total final price.\n\t *\n\t * @param {Object} items.\n\t * @returns {number} total.\n\t * @since 1.0.0\n\t */\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\n\t\tif (items.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst subTotal = Number(this.calcSubTotal(items));\n\t\tconst tax = Number(this.calcTax(items));\n\n\t\treturn (subTotal + tax).toFixed(2);\n\t},\n};\n\nmodule.exports = helper;\n","/**\n * Holds the default configuration.\n *\n * @returns {Object} config.\n * @since 1.0.7\n */\nconst defaultConfig = {\n\tstring: {\n\t\tinvoice: \"I N V O I C E\",\n\t\trefNumber: \"Ref no\",\n\t\tdate: \"Date\",\n\t\tdueDate: \"Due Date\",\n\t\tstatus: \"Status\",\n\t\tbillTo: \"Bill To\",\n\t\titem: \"Item\",\n\t\tquantity: \"Qty\",\n\t\tprice: \"Price\",\n\t\ttax: \"Tax\",\n\t\ttotal: \"Total\",\n\t\tsubTotal: \"Subtotal\",\n\t\ttotalTax: \"Total Tax\",\n\t},\n\tfont: {\n\t\thelvetica: {\n\t\t\tnormal: \"Helvetica\",\n\t\t\tbold: \"Helvetica-Bold\",\n\t\t\titalics: \"Helvetica-Oblique\",\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\n\t\t},\n\t},\n};\n\nmodule.exports = defaultConfig;\n","const fs = require(\"fs\");\nconst path = require(\"path\");\nconst invoiceMaker = require(\"pdfmake\");\nconst helper = require(\"../utils/helper\");\nconst defaultConfig = require(\"../utils/config\");\n\nimport type {\n\tCompanyInfo,\n\tCustomerInfo,\n\tInvoiceInfo,\n\tItemInfo,\n\tQRInfo,\n\tNotes,\n\tInvoicePayLoad,\n\tSimplePDFInvoice,\n\tConfiguration,\n} from \"../../global\";\n\nexport class PDFInvoice implements SimplePDFInvoice {\n\tpayload: InvoicePayLoad;\n\tcompany: CompanyInfo;\n\tinvoice: InvoiceInfo;\n\tcustomer: CustomerInfo;\n\titems: ItemInfo[];\n\tcurrency: string;\n\tpath: string;\n\tqr: QRInfo;\n\tnote: Notes;\n\tdate: string;\n\tconfig: Configuration;\n\tdoc: any;\n\tconstructor(\n\t\tpayload: InvoicePayLoad,\n\t\tconfig: Configuration = defaultConfig\n\t) {\n\t\tthis.payload = payload;\n\n\t\t// Invoice content section.\n\t\tthis.company = payload.company;\n\t\tthis.customer = payload.customer;\n\t\tthis.invoice = payload.invoice;\n\t\tthis.items = payload.items;\n\t\tthis.qr = payload.qr;\n\t\tthis.note = payload.note;\n\n\t\t// Invoice currency.\n\t\tthis.currency = this.invoice.currency || \"$\";\n\n\t\t// Path.\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\n\n\t\t// Invoice information.\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\n\t\t\tyear: \"numeric\",\n\t\t\tmonth: \"numeric\",\n\t\t\tday: \"numeric\",\n\t\t});\n\n\t\t// Configuration.\n\t\tthis.config = config;\n\n\t\tconst printer = new invoiceMaker(this.fonts());\n\t\tconst docDefinition = {\n\t\t\tpageSize: \"A4\",\n\t\t\torientation: \"portrait\",\n\t\t\tpageMargins: [40, 40, 40, 40],\n\t\t\tinfo: this.meta(),\n\t\t\tcontent: this.content(),\n\t\t\tdefaultStyle: this.defaultStyle(),\n\t\t\tstyles: this.styles(),\n\t\t};\n\t\tthis.doc = printer.createPdfKitDocument(docDefinition);\n\n\t}\n\n\t/**\n\t * Create a PDF invoice.\n\t *\n\t * @returns {void}\n\t * @since 1.0.0\n\t */\n\tasync create(): Promise<string> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst stream = fs.createWriteStream(this.path);\n\n\t\t\tthis.doc.pipe(stream);\n\n\t\t\tthis.doc.on(\"end\", () => {\n\t\t\t\tresolve(this.path);\n\t\t\t});\n\n\t\t\tthis.doc.on(\"error\", (err: any) => {\n\t\t\t\treject(err);\n\t\t\t});\n\n\t\t\tthis.doc.end();\n\t\t});\n\t}\n\n\tgetDoc(): any {\n\t\treturn this.doc\n\t}\n\n\t/**\n\t * Fonts.\n\t *\n\t * @returns {Object} font.\n\t * @since 1.0.0\n\t */\n\tfonts(): any {\n\t\tconst fonts = {\n\t\t\tHelvetica: {\n\t\t\t\tnormal: \"Helvetica\",\n\t\t\t\tbold: \"Helvetica-Bold\",\n\t\t\t\titalics: \"Helvetica-Oblique\",\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\n\t\t\t},\n\t\t};\n\n\t\treturn fonts;\n\t}\n\n\t/**\n\t * Doc meta.\n\t *\n\t * @returns {Object} meta.\n\t * @since 1.0.0\n\t */\n\tmeta(): any {\n\t\tconst meta = {\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\n\t\t\tauthor: this.company.name,\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\n\t\t\tkeywords: \"invoice\",\n\t\t};\n\n\t\treturn meta;\n\t}\n\n\t/**\n\t * Default invoice styles.\n\t *\n\t * @returns {Object} defaults.\n\t * @since 1.0.0\n\t */\n\tdefaultStyle(): any {\n\t\tconst defaults = {\n\t\t\tfontSize: 10,\n\t\t\tlineHeight: 1.8,\n\t\t\tbold: false,\n\t\t\tfont: \"Helvetica\",\n\t\t\tcolor: \"#222222\",\n\t\t\tcolumnGap: 30,\n\t\t};\n\t\treturn defaults;\n\t}\n\n\t/**\n\t * Invoice styles.\n\t *\n\t * @returns {Object} defaults.\n\t * @since 1.0.0\n\t */\n\tstyles(): any {\n\t\tconst styles = {\n\t\t\th1: {\n\t\t\t\tfontSize: 18,\n\t\t\t\tbold: true,\n\t\t\t},\n\t\t\th2: {\n\t\t\t\tfontSize: 16,\n\t\t\t\tbold: true,\n\t\t\t},\n\t\t\th3: {\n\t\t\t\tfontSize: 14,\n\t\t\t\tbold: true,\n\t\t\t},\n\t\t\ttext: {\n\t\t\t\tfontSize: 10,\n\t\t\t\tbold: false,\n\t\t\t},\n\t\t\ttextBold: {\n\t\t\t\tfontSize: 10,\n\t\t\t\tbold: true,\n\t\t\t},\n\t\t};\n\t\treturn styles;\n\t}\n\n\t/**\n\t * Return the invoice layout.\n\t *\n\t * @returns {Object} layout.\n\t * @since 1.0.0\n\t */\n\tcontent(): any {\n\t\tconst sections = [];\n\n\t\tconst withTaxes = !!this.config.string.tax\n\t\tconst withDueDate = !!this.config.string.dueDate\n\n\t\t/**\n\t\t * Left: Company section.\n\t\t * Right: Invoice section.\n\t\t *\n\t\t * @since 1.0.0\n\t\t */\n\t\tconst sectionCompany = {\n\t\t\tcolumns: [\n\t\t\t\t{\n\t\t\t\t\twidth: \"70%\",\n\t\t\t\t\tstack: [] as any,\n\t\t\t\t\tstyle: \"text\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\twidth: \"30%\",\n\t\t\t\t\tstack: [] as any,\n\t\t\t\t\tstyle: \"text\",\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tif (this.company.logo || this.company.image) {\n\t\t\tif (this.company.logo?.startsWith(\"<svg\")) {\n\t\t\t\tsectionCompany.columns[0].stack.unshift({\n\t\t\t\t\tsvg: this.company.logo,\n\t\t\t\t\tmargin: [0, 0, 0, 20],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.company.image) {\n\t\t\t\tsectionCompany.columns[0].stack.unshift({\n\t\t\t\t\timage: this.company.image.path,\n\t\t\t\t\tfit: [this.company.image.styles.width || 200, this.company.image.styles.heght || 100]\n\t\t\t\t});\n\t\t\t}\n\n\n\t\t\tsectionCompany.columns[0].stack.push({\n\t\t\t\ttext: this.company.name,\n\t\t\t\tstyle: \"h3\",\n\t\t\t});\n\t\t} else {\n\t\t\tsectionCompany.columns[0].stack.unshift({\n\t\t\t\ttext: this.company.name,\n\t\t\t\tstyle: \"h1\",\n\t\t\t});\n\t\t}\n\n\t\tif (this.company.address) {\n\t\t\tsectionCompany.columns[0].stack.push({\n\t\t\t\ttext: this.company.address,\n\t\t\t\tstyle: \"text\",\n\t\t\t});\n\t\t}\n\n\t\tif (this.company.phone) {\n\t\t\tsectionCompany.columns[0].stack.push({\n\t\t\t\ttext: this.company.phone,\n\t\t\t\tstyle: \"text\",\n\t\t\t});\n\t\t}\n\n\t\tif (this.company.email) {\n\t\t\tsectionCompany.columns[0].stack.push({\n\t\t\t\ttext: this.company.email,\n\t\t\t\tstyle: \"text\",\n\t\t\t});\n\t\t}\n\n\t\tif (this.company.website) {\n\t\t\tsectionCompany.columns[0].stack.push({\n\t\t\t\ttext: this.company.website,\n\t\t\t\tstyle: \"text\",\n\t\t\t});\n\t\t}\n\n\t\tif (this.company.taxId) {\n\t\t\tsectionCompany.columns[0].stack.push({\n\t\t\t\ttext: this.company.taxId,\n\t\t\t\tstyle: \"text\",\n\t\t\t});\n\t\t}\n\n\t\t// Invoice information.\n\t\tif (this.invoice.label) {\n\t\t\tsectionCompany.columns[1].stack.unshift({\n\t\t\t\ttext: this.invoice.label,\n\t\t\t\tstyle: \"h1\",\n\t\t\t});\n\t\t} else {\n\t\t\tsectionCompany.columns[1].stack.unshift({\n\t\t\t\ttext: this.config.string.invoice || \"I N V O I C E\",\n\t\t\t\tstyle: \"h1\",\n\t\t\t});\n\t\t}\n\n\t\tconst refLabel = this.config.string.refNumber || \"Ref no:\";\n\n\t\tsectionCompany.columns[1].stack.push({\n\t\t\ttext: refLabel + \": #\" + (this.invoice.number || 1),\n\t\t\tstyle: \"textBold\",\n\t\t});\n\n\t\tconst dateLabel = this.config.string.date;\n\n\t\tsectionCompany.columns[1].stack.push({\n\t\t\ttext: dateLabel + \": \" + (this.invoice.date || this.date),\n\t\t\tstyle: \"text\",\n\t\t});\n\n\t\tif (withDueDate) {\n\t\t\tconst dueDateLabel = this.config.string.dueDate;\n\n\t\t\tsectionCompany.columns[1].stack.push({\n\t\t\t\ttext: dueDateLabel + \": \" + (this.invoice.dueDate || this.date),\n\t\t\t\tstyle: \"text\",\n\t\t\t});\n\t\t}\n\n\t\tconst statusLabel = this.config.string.status;\n\n\t\tsectionCompany.columns[1].stack.push({\n\t\t\ttext: statusLabel + \": \" + (this.invoice.status || \"Pending!\"),\n\t\t\tstyle: \"textBold\",\n\t\t});\n\n\t\tsections.push(sectionCompany);\n\n\t\t/**\n\t\t * Left: Bill to section.\n\t\t *\n\t\t * @since 1.0.0\n\t\t */\n\t\tconst sectionCustomer = {\n\t\t\tcolumns: [\n\t\t\t\t{\n\t\t\t\t\twidth: 300,\n\t\t\t\t\tmargin: [0, 30, 0, 0],\n\t\t\t\t\tstack: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: this.config.string.billTo,\n\t\t\t\t\t\t\tstyle: \"h2\",\n\t\t\t\t\t\t},\n\t\t\t\t\t] as any,\n\t\t\t\t\tstyle: \"text\",\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tif (this.customer.name) {\n\t\t\tsectionCustomer.columns[0].stack.push({\n\t\t\t\ttext: this.customer.name,\n\t\t\t\tstyle: \"textBold\",\n\t\t\t});\n\t\t}\n\n\t\tif (this.customer.company) {\n\t\t\tsectionCustomer.columns[0].stack.push({\n\t\t\t\ttext: this.customer.company,\n\t\t\t\tstyle: \"text\",\n\t\t\t});\n\t\t}\n\n\t\tif (this.customer.address) {\n\t\t\tsectionCustomer.columns[0].stack.push({\n\t\t\t\ttext: this.customer.address,\n\t\t\t\tstyle: \"text\",\n\t\t\t});\n\t\t}\n\n\t\tif (this.customer.phone) {\n\t\t\tsectionCustomer.columns[0].stack.push({\n\t\t\t\ttext: this.customer.phone,\n\t\t\t\tstyle: \"text\",\n\t\t\t});\n\t\t}\n\n\t\tif (this.customer.email) {\n\t\t\tsectionCustomer.columns[0].stack.push({\n\t\t\t\ttext: this.customer.email,\n\t\t\t\tstyle: \"text\",\n\t\t\t});\n\t\t}\n\n\t\tif (this.customer.taxId) {\n\t\t\tsectionCustomer.columns[0].stack.push({\n\t\t\t\ttext: this.customer.taxId,\n\t\t\t\tstyle: \"text\",\n\t\t\t});\n\t\t}\n\n\t\tsections.push(sectionCustomer);\n\n\t\t/**\n\t\t * Full: Items section.\n\t\t *\n\t\t * @since 1.0.0\n\t\t */\n\t\tconst sectionItems = {\n\t\t\tmargin: [0, 30, 0, 0],\n\t\t\tlineHeight: 1.5,\n\t\t\ttable: {\n\t\t\t\twidths: [200, 50, \"*\", ...(withTaxes ? [50] : []), \"*\"],\n\t\t\t\theaderRows: 1,\n\t\t\t\tlineHeight: 1.5,\n\t\t\t\tbody: [\n\t\t\t\t\t[\n\t\t\t\t\t\t`\\n ${this.config.string.item}`,\n\t\t\t\t\t\t`\\n ${this.config.string.quantity}`,\n\t\t\t\t\t\t`\\n ${this.config.string.price}`,\n\t\t\t\t\t\t...(withTaxes ? [`\\n ${this.config.string.tax}`] : []),\n\t\t\t\t\t\t`\\n ${this.config.string.total}`,\n\t\t\t\t\t],\n\t\t\t\t] as any,\n\t\t\t},\n\t\t};\n\n\t\tif (this.items.length > 0) {\n\t\t\tthis.items.forEach((item) => {\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\n\n\t\t\t\tsectionItems.table.body.push([\n\t\t\t\t\t`\\n ${item.name}`,\n\t\t\t\t\t`\\n ${item.quantity}`,\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\n\t\t\t\t\t...(withTaxes ? [`\\n ${item.tax || 0}%`] : []),\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\n\t\t\t\t]);\n\t\t\t});\n\t\t}\n\n\t\tsections.push(sectionItems);\n\n\t\t/**\n\t\t * Right: Total section.\n\t\t *\n\t\t * @since 1.0.0\n\t\t */\n\t\tconst sectionTotal = {\n\t\t\tmargin: [0, 20, 0, 0],\n\t\t\tcolumns: [\n\t\t\t\t{\n\t\t\t\t\twidth: \"*\",\n\t\t\t\t\tstack: [\" \"],\n\t\t\t\t\tstyle: \"text\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\twidth: 200,\n\t\t\t\t\tlineHeight: 1.5,\n\t\t\t\t\tstyle: \"textBold\",\n\t\t\t\t\ttable: {\n\t\t\t\t\t\twidths: [80, \"*\"],\n\t\t\t\t\t\theaderRows: 1,\n\t\t\t\t\t\tlineHeight: 1.5,\n\t\t\t\t\t\tbody: [\n\t\t\t\t\t\t\t...(withTaxes ? [[\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.subTotal}`,\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\n\t\t\t\t\t\t\t\t\tthis.items\n\t\t\t\t\t\t\t\t)}`,\n\t\t\t\t\t\t\t]] : []),\n\t\t\t\t\t\t\t...(withTaxes ? [[\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.totalTax}`,\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\n\t\t\t\t\t\t\t\t\tthis.items\n\t\t\t\t\t\t\t\t)}`,\n\t\t\t\t\t\t\t]] : []),\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.total}`,\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\n\t\t\t\t\t\t\t\t\tthis.items\n\t\t\t\t\t\t\t\t)}`,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tsections.push(sectionTotal);\n\n\t\t/**\n\t\t * Left: QR section.\n\t\t *\n\t\t * @since 1.0.0\n\t\t */\n\t\tif (this.payload.qr) {\n\t\t\tconst sectionQR = {\n\t\t\t\tmargin: [0, 50, 0, 0],\n\t\t\t\tqr: this.payload.qr.data,\n\t\t\t\tfit: this.payload.qr.width || \"50\",\n\t\t\t};\n\n\t\t\tsections.push(sectionQR);\n\t\t}\n\n\t\t/**\n\t\t * Left: Notes section.\n\t\t *\n\t\t * @since 1.0.0\n\t\t */\n\t\tif (this.payload.note) {\n\t\t\tconst sectionNote = {\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\n\t\t\t\ttext: this.payload.note,\n\t\t\t\titalics: true,\n\t\t\t};\n\n\t\t\tsections.push(sectionNote);\n\t\t}\n\n\t\t/**\n\t\t * Return the invoice sections.\n\t\t *\n\t\t * @since 1.0.0\n\t\t */\n\t\treturn sections;\n\t}\n}\n"]}