@ic-labs/invoice-kit 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +552 -0
  3. package/dist/core/document.d.ts +8 -0
  4. package/dist/core/document.d.ts.map +1 -0
  5. package/dist/core/document.js +22 -0
  6. package/dist/core/document.js.map +1 -0
  7. package/dist/core/factories.d.ts +7 -0
  8. package/dist/core/factories.d.ts.map +1 -0
  9. package/dist/core/factories.js +44 -0
  10. package/dist/core/factories.js.map +1 -0
  11. package/dist/core/types.d.ts +141 -0
  12. package/dist/core/types.d.ts.map +1 -0
  13. package/dist/core/types.js +2 -0
  14. package/dist/core/types.js.map +1 -0
  15. package/dist/core/validation.d.ts +3 -0
  16. package/dist/core/validation.d.ts.map +1 -0
  17. package/dist/core/validation.js +95 -0
  18. package/dist/core/validation.js.map +1 -0
  19. package/dist/index.d.ts +6 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +6 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/locales/ar.d.ts +3 -0
  24. package/dist/locales/ar.d.ts.map +1 -0
  25. package/dist/locales/ar.js +31 -0
  26. package/dist/locales/ar.js.map +1 -0
  27. package/dist/locales/fr.d.ts +3 -0
  28. package/dist/locales/fr.d.ts.map +1 -0
  29. package/dist/locales/fr.js +31 -0
  30. package/dist/locales/fr.js.map +1 -0
  31. package/dist/locales/index.d.ts +3 -0
  32. package/dist/locales/index.d.ts.map +1 -0
  33. package/dist/locales/index.js +8 -0
  34. package/dist/locales/index.js.map +1 -0
  35. package/dist/renderers/pdf.d.ts +3 -0
  36. package/dist/renderers/pdf.d.ts.map +1 -0
  37. package/dist/renderers/pdf.js +337 -0
  38. package/dist/renderers/pdf.js.map +1 -0
  39. package/dist/templates/definitions.d.ts +3 -0
  40. package/dist/templates/definitions.d.ts.map +1 -0
  41. package/dist/templates/definitions.js +12 -0
  42. package/dist/templates/definitions.js.map +1 -0
  43. package/dist/templates/delivery-note.d.ts +3 -0
  44. package/dist/templates/delivery-note.d.ts.map +1 -0
  45. package/dist/templates/delivery-note.js +11 -0
  46. package/dist/templates/delivery-note.js.map +1 -0
  47. package/dist/templates/invoice.d.ts +3 -0
  48. package/dist/templates/invoice.d.ts.map +1 -0
  49. package/dist/templates/invoice.js +11 -0
  50. package/dist/templates/invoice.js.map +1 -0
  51. package/dist/templates/purchase-order.d.ts +3 -0
  52. package/dist/templates/purchase-order.d.ts.map +1 -0
  53. package/dist/templates/purchase-order.js +11 -0
  54. package/dist/templates/purchase-order.js.map +1 -0
  55. package/dist/templates/quote.d.ts +3 -0
  56. package/dist/templates/quote.d.ts.map +1 -0
  57. package/dist/templates/quote.js +11 -0
  58. package/dist/templates/quote.js.map +1 -0
  59. package/dist/utils/formatting.d.ts +4 -0
  60. package/dist/utils/formatting.d.ts.map +1 -0
  61. package/dist/utils/formatting.js +18 -0
  62. package/dist/utils/formatting.js.map +1 -0
  63. package/dist/utils/math.d.ts +3 -0
  64. package/dist/utils/math.d.ts.map +1 -0
  65. package/dist/utils/math.js +14 -0
  66. package/dist/utils/math.js.map +1 -0
  67. package/dist/utils/taxes.d.ts +5 -0
  68. package/dist/utils/taxes.d.ts.map +1 -0
  69. package/dist/utils/taxes.js +44 -0
  70. package/dist/utils/taxes.js.map +1 -0
  71. package/package.json +58 -0
@@ -0,0 +1,141 @@
1
+ export type DocumentType = "invoice" | "quote" | "purchaseOrder" | "deliveryNote";
2
+ export type LocaleCode = "fr-MA" | "ar-MA";
3
+ export interface Party {
4
+ name: string;
5
+ addressLines: string[];
6
+ email?: string;
7
+ phone?: string;
8
+ city?: string;
9
+ country?: string;
10
+ taxId?: string;
11
+ ice?: string;
12
+ if?: string;
13
+ rc?: string;
14
+ }
15
+ export interface LineItemInput {
16
+ name: string;
17
+ description?: string;
18
+ quantity: number;
19
+ unitPrice?: number;
20
+ price?: number;
21
+ unit?: string;
22
+ discountRate?: number;
23
+ }
24
+ export interface LineItem extends Omit<LineItemInput, "unitPrice" | "price"> {
25
+ unitPrice: number;
26
+ lineSubtotal: number;
27
+ lineDiscountAmount: number;
28
+ lineTotal: number;
29
+ }
30
+ export interface DiscountInput {
31
+ type: "percentage" | "fixed";
32
+ value: number;
33
+ label?: string;
34
+ }
35
+ export interface PaymentTerms {
36
+ label: string;
37
+ dueDate?: Date;
38
+ notes?: string;
39
+ }
40
+ export interface LocalBankInfo {
41
+ type: "local";
42
+ bankName: string;
43
+ holderName: string;
44
+ rib: string;
45
+ }
46
+ export interface InternationalBankInfo {
47
+ type: "international";
48
+ bankName: string;
49
+ holderName: string;
50
+ swiftCode: string;
51
+ iban: string;
52
+ }
53
+ export type BankInfo = LocalBankInfo | InternationalBankInfo;
54
+ export interface DocumentInput {
55
+ number: string;
56
+ logo?: string;
57
+ seller: Party;
58
+ client: Party;
59
+ items: LineItemInput[];
60
+ issueDate?: Date;
61
+ dueDate?: Date;
62
+ currency?: string;
63
+ vatRate?: number;
64
+ discounts?: DiscountInput[];
65
+ notes?: string;
66
+ paymentTerms?: PaymentTerms;
67
+ bankInfo?: BankInfo;
68
+ locale?: LocaleCode;
69
+ title?: string;
70
+ }
71
+ export interface DocumentTotals {
72
+ subtotal: number;
73
+ discountTotal: number;
74
+ taxableBase: number;
75
+ vatAmount: number;
76
+ total: number;
77
+ }
78
+ export interface BusinessDocumentData {
79
+ type: DocumentType;
80
+ title: string;
81
+ number: string;
82
+ logo?: string;
83
+ issueDate: Date;
84
+ dueDate?: Date;
85
+ seller: Party;
86
+ client: Party;
87
+ items: LineItem[];
88
+ currency: string;
89
+ vatRate: number;
90
+ discounts: DiscountInput[];
91
+ paymentTerms?: PaymentTerms;
92
+ bankInfo?: BankInfo;
93
+ notes?: string;
94
+ locale: LocaleCode;
95
+ totals: DocumentTotals;
96
+ }
97
+ export interface PdfRenderOptions {
98
+ outputPath?: string;
99
+ fonts?: {
100
+ regular?: string;
101
+ bold?: string;
102
+ };
103
+ }
104
+ export interface TemplateLabels {
105
+ documentTitle: string;
106
+ seller: string;
107
+ client: string;
108
+ number: string;
109
+ issueDate: string;
110
+ dueDate: string;
111
+ item: string;
112
+ description: string;
113
+ quantity: string;
114
+ unitPrice: string;
115
+ amount: string;
116
+ subtotal: string;
117
+ discount: string;
118
+ taxableBase: string;
119
+ vat: string;
120
+ total: string;
121
+ paymentTerms: string;
122
+ bankDetails: string;
123
+ notes: string;
124
+ currency: string;
125
+ bankName: string;
126
+ holderName: string;
127
+ rib: string;
128
+ swiftCode: string;
129
+ iban: string;
130
+ ice: string;
131
+ if: string;
132
+ rc: string;
133
+ }
134
+ export interface TemplateDefinition {
135
+ type: DocumentType;
136
+ getTitle(locale: LocaleCode): string;
137
+ }
138
+ export interface CreateDocumentOptions extends DocumentInput {
139
+ type: DocumentType;
140
+ }
141
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { CreateDocumentOptions } from "./types.js";
2
+ export declare const validateDocumentInput: (input: CreateDocumentOptions) => void;
3
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,qBAAqB,EAAuC,MAAM,YAAY,CAAC;AAyEvG,eAAO,MAAM,qBAAqB,GAAI,OAAO,qBAAqB,KAAG,IA+CpE,CAAC"}
@@ -0,0 +1,95 @@
1
+ const assertNonEmptyString = (value, field) => {
2
+ if (value.trim().length === 0) {
3
+ throw new Error(`${field} must be a non-empty string.`);
4
+ }
5
+ };
6
+ const assertFiniteNumber = (value, field) => {
7
+ if (!Number.isFinite(value)) {
8
+ throw new Error(`${field} must be a finite number.`);
9
+ }
10
+ };
11
+ const validateParty = (party, field) => {
12
+ assertNonEmptyString(party.name, `${field}.name`);
13
+ if (party.addressLines.length === 0) {
14
+ throw new Error(`${field}.addressLines must contain at least one line.`);
15
+ }
16
+ for (const [index, line] of party.addressLines.entries()) {
17
+ assertNonEmptyString(line, `${field}.addressLines[${index}]`);
18
+ }
19
+ };
20
+ const validateItem = (item, index, requiresPricing) => {
21
+ assertNonEmptyString(item.name, `items[${index}].name`);
22
+ assertFiniteNumber(item.quantity, `items[${index}].quantity`);
23
+ if (item.quantity <= 0) {
24
+ throw new Error(`items[${index}].quantity must be greater than zero.`);
25
+ }
26
+ const resolvedPrice = item.unitPrice ?? item.price;
27
+ if (requiresPricing && resolvedPrice === undefined) {
28
+ throw new Error(`items[${index}] must define unitPrice or price.`);
29
+ }
30
+ if (resolvedPrice !== undefined) {
31
+ assertFiniteNumber(resolvedPrice, `items[${index}].unitPrice`);
32
+ if (resolvedPrice < 0) {
33
+ throw new Error(`items[${index}].unitPrice cannot be negative.`);
34
+ }
35
+ }
36
+ if (item.discountRate !== undefined) {
37
+ assertFiniteNumber(item.discountRate, `items[${index}].discountRate`);
38
+ }
39
+ };
40
+ const validateDiscount = (discount, index) => {
41
+ assertFiniteNumber(discount.value, `discounts[${index}].value`);
42
+ if (discount.value < 0) {
43
+ throw new Error(`discounts[${index}].value cannot be negative.`);
44
+ }
45
+ };
46
+ const validateBankInfo = (bankInfo) => {
47
+ assertNonEmptyString(bankInfo.bankName, "bankInfo.bankName");
48
+ assertNonEmptyString(bankInfo.holderName, "bankInfo.holderName");
49
+ if (bankInfo.type === "local") {
50
+ assertNonEmptyString(bankInfo.rib, "bankInfo.rib");
51
+ return;
52
+ }
53
+ assertNonEmptyString(bankInfo.swiftCode, "bankInfo.swiftCode");
54
+ assertNonEmptyString(bankInfo.iban, "bankInfo.iban");
55
+ };
56
+ export const validateDocumentInput = (input) => {
57
+ const requiresPricing = input.type !== "deliveryNote";
58
+ assertNonEmptyString(input.number, "number");
59
+ if (input.logo !== undefined) {
60
+ assertNonEmptyString(input.logo, "logo");
61
+ try {
62
+ const url = new URL(input.logo);
63
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
64
+ throw new Error("invalid protocol");
65
+ }
66
+ }
67
+ catch {
68
+ throw new Error("logo must be a valid http or https URL.");
69
+ }
70
+ }
71
+ validateParty(input.seller, "seller");
72
+ validateParty(input.client, "client");
73
+ if (input.items.length === 0) {
74
+ throw new Error("items must contain at least one line item.");
75
+ }
76
+ input.items.forEach((item, index) => {
77
+ validateItem(item, index, requiresPricing);
78
+ });
79
+ if (requiresPricing) {
80
+ input.discounts?.forEach(validateDiscount);
81
+ }
82
+ if (requiresPricing && input.vatRate !== undefined) {
83
+ assertFiniteNumber(input.vatRate, "vatRate");
84
+ if (input.vatRate < 0 || input.vatRate > 1) {
85
+ throw new Error("vatRate must be between 0 and 1.");
86
+ }
87
+ }
88
+ if (input.currency !== undefined) {
89
+ assertNonEmptyString(input.currency, "currency");
90
+ }
91
+ if (input.bankInfo) {
92
+ validateBankInfo(input.bankInfo);
93
+ }
94
+ };
95
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export * from "./core/factories.js";
2
+ export * from "./core/document.js";
3
+ export * from "./core/types.js";
4
+ export * from "./locales/index.js";
5
+ export * from "./utils/taxes.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export * from "./core/factories.js";
2
+ export * from "./core/document.js";
3
+ export * from "./core/types.js";
4
+ export * from "./locales/index.js";
5
+ export * from "./utils/taxes.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TemplateLabels } from "../core/types.js";
2
+ export declare const arLabels: TemplateLabels;
3
+ //# sourceMappingURL=ar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../src/locales/ar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,eAAO,MAAM,QAAQ,EAAE,cA6BtB,CAAC"}
@@ -0,0 +1,31 @@
1
+ export const arLabels = {
2
+ documentTitle: "مستند",
3
+ seller: "البائع",
4
+ client: "العميل",
5
+ number: "الرقم",
6
+ issueDate: "التاريخ",
7
+ dueDate: "تاريخ الاستحقاق",
8
+ item: "الصنف",
9
+ description: "الوصف",
10
+ quantity: "الكمية",
11
+ unitPrice: "سعر الوحدة",
12
+ amount: "المبلغ",
13
+ subtotal: "المجموع الفرعي",
14
+ discount: "الخصم",
15
+ taxableBase: "الاساس الخاضع للضريبة",
16
+ vat: "الضريبة على القيمة المضافة",
17
+ total: "المجموع",
18
+ paymentTerms: "شروط الدفع",
19
+ bankDetails: "المعلومات البنكية",
20
+ notes: "ملاحظات",
21
+ currency: "العملة",
22
+ bankName: "اسم البنك",
23
+ holderName: "اسم صاحب الحساب",
24
+ rib: "رقم الحساب البنكي المحلي",
25
+ swiftCode: "سويفت",
26
+ iban: "آيبان",
27
+ ice: "ICE",
28
+ if: "IF",
29
+ rc: "RC"
30
+ };
31
+ //# sourceMappingURL=ar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ar.js","sourceRoot":"","sources":["../../src/locales/ar.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACtC,aAAa,EAAE,OAAO;IACtB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,OAAO;IACf,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,iBAAiB;IAC1B,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,OAAO;IACpB,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,YAAY;IACvB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,gBAAgB;IAC1B,QAAQ,EAAE,OAAO;IACjB,WAAW,EAAE,uBAAuB;IACpC,GAAG,EAAE,4BAA4B;IACjC,KAAK,EAAE,SAAS;IAChB,YAAY,EAAE,YAAY;IAC1B,WAAW,EAAE,mBAAmB;IAChC,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,WAAW;IACrB,UAAU,EAAE,iBAAiB;IAC7B,GAAG,EAAE,0BAA0B;IAC/B,SAAS,EAAE,OAAO;IAClB,IAAI,EAAE,OAAO;IACb,GAAG,EAAE,KAAK;IACV,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;CACT,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TemplateLabels } from "../core/types.js";
2
+ export declare const frLabels: TemplateLabels;
3
+ //# sourceMappingURL=fr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fr.d.ts","sourceRoot":"","sources":["../../src/locales/fr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,eAAO,MAAM,QAAQ,EAAE,cA6BtB,CAAC"}
@@ -0,0 +1,31 @@
1
+ export const frLabels = {
2
+ documentTitle: "Document",
3
+ seller: "Vendeur",
4
+ client: "Client",
5
+ number: "Numero",
6
+ issueDate: "Date",
7
+ dueDate: "Echeance",
8
+ item: "Article",
9
+ description: "Description",
10
+ quantity: "Quantite",
11
+ unitPrice: "Prix unitaire",
12
+ amount: "Montant",
13
+ subtotal: "Sous-total",
14
+ discount: "Remise",
15
+ taxableBase: "Base taxable",
16
+ vat: "TVA",
17
+ total: "Total TTC",
18
+ paymentTerms: "Conditions de paiement",
19
+ bankDetails: "Coordonnees bancaires",
20
+ notes: "Notes",
21
+ currency: "Devise",
22
+ bankName: "Banque",
23
+ holderName: "Titulaire",
24
+ rib: "RIB",
25
+ swiftCode: "SWIFT",
26
+ iban: "IBAN",
27
+ ice: "ICE",
28
+ if: "IF",
29
+ rc: "RC"
30
+ };
31
+ //# sourceMappingURL=fr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fr.js","sourceRoot":"","sources":["../../src/locales/fr.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACtC,aAAa,EAAE,UAAU;IACzB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,MAAM;IACjB,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,aAAa;IAC1B,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,eAAe;IAC1B,MAAM,EAAE,SAAS;IACjB,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,cAAc;IAC3B,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,WAAW;IAClB,YAAY,EAAE,wBAAwB;IACtC,WAAW,EAAE,uBAAuB;IACpC,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,WAAW;IACvB,GAAG,EAAE,KAAK;IACV,SAAS,EAAE,OAAO;IAClB,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;CACT,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { LocaleCode, TemplateLabels } from "../core/types.js";
2
+ export declare const getLabels: (locale: LocaleCode) => TemplateLabels;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/locales/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASnE,eAAO,MAAM,SAAS,GAAI,QAAQ,UAAU,KAAG,cAA6C,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { arLabels } from "./ar.js";
2
+ import { frLabels } from "./fr.js";
3
+ const locales = {
4
+ "fr-MA": frLabels,
5
+ "ar-MA": arLabels
6
+ };
7
+ export const getLabels = (locale) => locales[locale] ?? frLabels;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/locales/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,MAAM,OAAO,GAAuC;IAClD,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAkB,EAAkB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { BusinessDocumentData, PdfRenderOptions } from "../core/types.js";
2
+ export declare const renderDocumentPdf: (document: BusinessDocumentData, options?: PdfRenderOptions) => Promise<Uint8Array>;
3
+ //# sourceMappingURL=pdf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../src/renderers/pdf.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA0KzF,eAAO,MAAM,iBAAiB,GAC5B,UAAU,oBAAoB,EAC9B,UAAU,gBAAgB,KACzB,OAAO,CAAC,UAAU,CAwPpB,CAAC"}