@zosmaai/medusa-documents-v2 0.2.13

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 (96) hide show
  1. package/.medusa/server/src/admin/index.js +1884 -0
  2. package/.medusa/server/src/admin/index.mjs +1881 -0
  3. package/.medusa/server/src/api/admin/documents/document-invoice-settings/invoice-template/route.js +40 -0
  4. package/.medusa/server/src/api/admin/documents/document-invoice-settings/route.js +62 -0
  5. package/.medusa/server/src/api/admin/documents/document-packing-slip-settings/route.js +62 -0
  6. package/.medusa/server/src/api/admin/documents/document-packing-slip-settings/template/route.js +40 -0
  7. package/.medusa/server/src/api/admin/documents/document-settings/document-address/route.js +47 -0
  8. package/.medusa/server/src/api/admin/documents/document-settings/india-gst/route.js +67 -0
  9. package/.medusa/server/src/api/admin/documents/document-settings/logo/route.js +67 -0
  10. package/.medusa/server/src/api/admin/documents/document-settings/route.js +36 -0
  11. package/.medusa/server/src/api/admin/documents/invoice/display-number/route.js +34 -0
  12. package/.medusa/server/src/api/admin/documents/invoice/generate/route.js +47 -0
  13. package/.medusa/server/src/api/admin/documents/invoice/route.js +112 -0
  14. package/.medusa/server/src/api/admin/documents/packing-slip/preview/route.js +47 -0
  15. package/.medusa/server/src/api/admin/documents/packing-slip/route.js +112 -0
  16. package/.medusa/server/src/links/invoice-order.js +13 -0
  17. package/.medusa/server/src/links/packing-slip-order.js +13 -0
  18. package/.medusa/server/src/modules/documents/assets/fonts/IBMPlexSans-Bold.ttf +0 -0
  19. package/.medusa/server/src/modules/documents/assets/fonts/IBMPlexSans-Regular.ttf +0 -0
  20. package/.medusa/server/src/modules/documents/assets/i18n/locales/de-AT/translation.json +26 -0
  21. package/.medusa/server/src/modules/documents/assets/i18n/locales/en/translation.json +26 -0
  22. package/.medusa/server/src/modules/documents/assets/i18n/locales/es/translation.json +26 -0
  23. package/.medusa/server/src/modules/documents/assets/i18n/locales/fr/translation.json +26 -0
  24. package/.medusa/server/src/modules/documents/assets/i18n/locales/pl/translation.json +26 -0
  25. package/.medusa/server/src/modules/documents/index.js +26 -0
  26. package/.medusa/server/src/modules/documents/loaders/i18next.js +49 -0
  27. package/.medusa/server/src/modules/documents/migrations/Migration20250228142557.js +39 -0
  28. package/.medusa/server/src/modules/documents/migrations/Migration20260810120000.js +14 -0
  29. package/.medusa/server/src/modules/documents/models/document-invoice-settings.js +29 -0
  30. package/.medusa/server/src/modules/documents/models/document-invoice.js +32 -0
  31. package/.medusa/server/src/modules/documents/models/document-packing-slip-settings.js +29 -0
  32. package/.medusa/server/src/modules/documents/models/document-packing-slip.js +32 -0
  33. package/.medusa/server/src/modules/documents/models/document-settings.js +33 -0
  34. package/.medusa/server/src/modules/documents/service.js +502 -0
  35. package/.medusa/server/src/modules/documents/services/generators/invoice-generator.js +78 -0
  36. package/.medusa/server/src/modules/documents/services/generators/packing-slip-generator.js +73 -0
  37. package/.medusa/server/src/modules/documents/services/templates/invoices/basic/basic-logo.js +55 -0
  38. package/.medusa/server/src/modules/documents/services/templates/invoices/basic/basic.js +52 -0
  39. package/.medusa/server/src/modules/documents/services/templates/invoices/basic/parts/customer-info.js +69 -0
  40. package/.medusa/server/src/modules/documents/services/templates/invoices/basic/parts/header-for-logo.js +32 -0
  41. package/.medusa/server/src/modules/documents/services/templates/invoices/basic/parts/header-logo.js +29 -0
  42. package/.medusa/server/src/modules/documents/services/templates/invoices/basic/parts/header.js +35 -0
  43. package/.medusa/server/src/modules/documents/services/templates/invoices/basic/parts/hr.js +23 -0
  44. package/.medusa/server/src/modules/documents/services/templates/invoices/basic/parts/invoice-info.js +35 -0
  45. package/.medusa/server/src/modules/documents/services/templates/invoices/basic/parts/table.js +97 -0
  46. package/.medusa/server/src/modules/documents/services/templates/invoices/india-gst/india-gst.js +72 -0
  47. package/.medusa/server/src/modules/documents/services/templates/invoices/india-gst/parts/footer.js +41 -0
  48. package/.medusa/server/src/modules/documents/services/templates/invoices/india-gst/parts/invoice-meta.js +22 -0
  49. package/.medusa/server/src/modules/documents/services/templates/invoices/india-gst/parts/seller-info.js +42 -0
  50. package/.medusa/server/src/modules/documents/services/templates/invoices/india-gst/parts/table.js +88 -0
  51. package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/basic.js +52 -0
  52. package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/parts/customer-info-small.js +69 -0
  53. package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/parts/customer-info.js +65 -0
  54. package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/parts/header-small.js +37 -0
  55. package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/parts/header.js +37 -0
  56. package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/parts/hr.js +32 -0
  57. package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/parts/table-items-small.js +44 -0
  58. package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/parts/table-items.js +44 -0
  59. package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/parts/table-order-info-small.js +35 -0
  60. package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/parts/table-order-info.js +36 -0
  61. package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/small.js +53 -0
  62. package/.medusa/server/src/modules/documents/types/api.js +14 -0
  63. package/.medusa/server/src/modules/documents/types/constants.js +17 -0
  64. package/.medusa/server/src/modules/documents/types/dto.js +14 -0
  65. package/.medusa/server/src/modules/documents/types/template-kind.js +26 -0
  66. package/.medusa/server/src/modules/documents/utils/currency.js +18 -0
  67. package/.medusa/server/src/ui-components/actions-dropdown/actions-dropdown.js +15 -0
  68. package/.medusa/server/src/ui-components/actions-dropdown/invoice/button-generate-invoice.js +75 -0
  69. package/.medusa/server/src/ui-components/actions-dropdown/packing-slip/button-generate-packing-slip.js +72 -0
  70. package/.medusa/server/src/ui-components/index.js +21 -0
  71. package/.medusa/server/src/ui-components/orders/order-table/invoice-number-from-order.js +107 -0
  72. package/.medusa/server/src/ui-components/orders/order-table/packing-slip-number.js +107 -0
  73. package/.medusa/server/src/ui-components/orders/order-table/use-columns.js +172 -0
  74. package/.medusa/server/src/ui-components/orders/order-table/use-orders.js +145 -0
  75. package/.medusa/server/src/ui-components/orders/order-table/utils/currencies.js +1077 -0
  76. package/.medusa/server/src/ui-components/orders/order-table/utils/time.js +53 -0
  77. package/.medusa/server/src/ui-components/orders/order-table.js +134 -0
  78. package/.medusa/server/src/ui-components/settings/settings-address.js +90 -0
  79. package/.medusa/server/src/ui-components/settings/settings-india-gst.js +90 -0
  80. package/.medusa/server/src/ui-components/settings/settings-invoice-display-number.js +55 -0
  81. package/.medusa/server/src/ui-components/settings/settings-invoice.js +139 -0
  82. package/.medusa/server/src/ui-components/settings/settings-logo.js +108 -0
  83. package/.medusa/server/src/ui-components/tabs/orders-tab.js +28 -0
  84. package/.medusa/server/src/ui-components/tabs/pro-tab.js +23 -0
  85. package/.medusa/server/src/ui-components/tabs/settings-tab.js +29 -0
  86. package/.medusa/server/src/ui-components/tabs/templates-tab/templates-invoice-tab.js +153 -0
  87. package/.medusa/server/src/ui-components/tabs/templates-tab/templates-packing-slip-tab.js +155 -0
  88. package/.medusa/server/src/ui-components/tabs/templates-tab/templates-tab.js +24 -0
  89. package/.medusa/server/src/ui-components/types/api.js +14 -0
  90. package/.medusa/server/src/ui-components/types/invoice.js +14 -0
  91. package/.medusa/server/src/ui-components/types/packing-slip.js +14 -0
  92. package/.medusa/server/src/ui-components/types/template-kind.js +26 -0
  93. package/.medusa/server/src/workflows/assign-invoice.js +31 -0
  94. package/.medusa/server/src/workflows/assign-packing-slip.js +31 -0
  95. package/README.md +171 -0
  96. package/package.json +103 -0
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2024 RSC-Labs, https://rsoftcon.com/
4
+ *
5
+ * MIT License
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software
8
+ * distributed under the License is distributed on an "AS IS" BASIS,
9
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ * See the License for the specific language governing permissions and
11
+ * limitations under the License.
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.validateInputForProvidedKind = validateInputForProvidedKind;
48
+ exports.generatePackingSlip = generatePackingSlip;
49
+ const template_kind_1 = require("../../types/template-kind");
50
+ const basic_1 = __importStar(require("../templates/packing-slips/basic/basic"));
51
+ const small_1 = __importStar(require("../templates/packing-slips/basic/small"));
52
+ function validateInputForProvidedKind(templateKind, documentSettings) {
53
+ switch (templateKind) {
54
+ case template_kind_1.PackingSlipTemplateKind.BASIC:
55
+ return (0, basic_1.validateInput)(documentSettings);
56
+ case template_kind_1.PackingSlipTemplateKind.BASIC_SMALL:
57
+ return (0, small_1.validateInput)(documentSettings);
58
+ default:
59
+ return [false, 'Not supported template'];
60
+ }
61
+ }
62
+ function generatePackingSlip(kind, documentSettings, invoice, order) {
63
+ switch (kind) {
64
+ case template_kind_1.PackingSlipTemplateKind.BASIC:
65
+ return (0, basic_1.default)(documentSettings, invoice, order);
66
+ case template_kind_1.PackingSlipTemplateKind.BASIC_SMALL:
67
+ return (0, small_1.default)(documentSettings, invoice, order);
68
+ default:
69
+ return Promise.resolve(Buffer.from('Not supported template'));
70
+ }
71
+ }
72
+ ;
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2luZy1zbGlwLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2RvY3VtZW50cy9zZXJ2aWNlcy9nZW5lcmF0b3JzL3BhY2tpbmctc2xpcC1nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7O0dBVUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUUgsb0VBU0M7QUFFRCxrREFTQztBQXhCRCw2REFBb0U7QUFDcEUsZ0ZBQTBHO0FBQzFHLGdGQUEwRztBQUUxRyxTQUFnQiw0QkFBNEIsQ0FBQyxZQUFxQyxFQUFFLGdCQUFxQztJQUN2SCxRQUFRLFlBQVksRUFBRSxDQUFDO1FBQ3JCLEtBQUssdUNBQXVCLENBQUMsS0FBSztZQUNoQyxPQUFPLElBQUEscUJBQWtCLEVBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM5QyxLQUFLLHVDQUF1QixDQUFDLFdBQVc7WUFDdEMsT0FBTyxJQUFBLHFCQUFrQixFQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDOUM7WUFDRSxPQUFPLENBQUMsS0FBSyxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDN0MsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBQyxJQUE2QixFQUFFLGdCQUFxQyxFQUFFLE9BQStCLEVBQUUsS0FBZTtJQUN4SixRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSyx1Q0FBdUIsQ0FBQyxLQUFLO1lBQ2hDLE9BQU8sSUFBQSxlQUFhLEVBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pELEtBQUssdUNBQXVCLENBQUMsV0FBVztZQUN0QyxPQUFPLElBQUEsZUFBYSxFQUFDLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RDtZQUNFLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0FBQ0gsQ0FBQztBQUFBLENBQUMifQ==
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2024 RSC-Labs, https://rsoftcon.com/
4
+ *
5
+ * MIT License
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software
8
+ * distributed under the License is distributed on an "AS IS" BASIS,
9
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ * See the License for the specific language governing permissions and
11
+ * limitations under the License.
12
+ */
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.validateInput = validateInput;
18
+ const pdfkit_1 = __importDefault(require("pdfkit"));
19
+ const customer_info_1 = require("./parts/customer-info");
20
+ const table_1 = require("./parts/table");
21
+ const invoice_info_1 = require("./parts/invoice-info");
22
+ const header_for_logo_1 = require("./parts/header-for-logo");
23
+ const header_logo_1 = require("./parts/header-logo");
24
+ const path_1 = __importDefault(require("path"));
25
+ function validateInput(settings) {
26
+ if (settings && settings.storeAddress && settings.storeAddress.company &&
27
+ settings.storeAddress.address_1 &&
28
+ settings.storeAddress.city &&
29
+ settings.storeAddress.postal_code &&
30
+ settings.storeLogoSource)
31
+ return [true, ''];
32
+ return [false, `Not all settings are defined to generate template. Following settings are checked: logo, company, address, city, postal_code`];
33
+ }
34
+ exports.default = async (settings, invoice, order) => {
35
+ var doc = new pdfkit_1.default();
36
+ doc.registerFont('Regular', path_1.default.resolve(__dirname, '../../../../assets/fonts/IBMPlexSans-Regular.ttf'));
37
+ doc.registerFont('Bold', path_1.default.resolve(__dirname, '../../../../assets/fonts/IBMPlexSans-Bold.ttf'));
38
+ doc.font('Regular');
39
+ const buffers = [];
40
+ doc.on("data", buffers.push.bind(buffers));
41
+ const endHeader = (0, header_for_logo_1.generateHeaderForLogo)(doc, 50, settings);
42
+ await (0, header_logo_1.generateHeaderLogo)(doc, 50, settings.storeLogoSource);
43
+ const endInvoice = (0, invoice_info_1.generateInvoiceInformation)(doc, endHeader, invoice);
44
+ const endDetails = (0, customer_info_1.generateCustomerInformation)(doc, endInvoice, order);
45
+ (0, table_1.generateInvoiceTable)(doc, endDetails, order, order.items || []);
46
+ doc.end();
47
+ const bufferPromise = new Promise(resolve => {
48
+ doc.on("end", () => {
49
+ const pdfData = Buffer.concat(buffers);
50
+ resolve(pdfData);
51
+ });
52
+ });
53
+ return await bufferPromise;
54
+ };
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtbG9nby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2RvY3VtZW50cy9zZXJ2aWNlcy90ZW1wbGF0ZXMvaW52b2ljZXMvYmFzaWMvYmFzaWMtbG9nby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7R0FVRzs7Ozs7QUFZSCxzQ0FRQztBQWhCRCxvREFBaUM7QUFDakMseURBQW9FO0FBQ3BFLHlDQUFxRDtBQUNyRCx1REFBa0U7QUFDbEUsNkRBQWdFO0FBQ2hFLHFEQUF5RDtBQUN6RCxnREFBd0I7QUFFeEIsU0FBZ0IsYUFBYSxDQUFDLFFBQThCO0lBQzFELElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxPQUFPO1FBQ3BFLFFBQVEsQ0FBQyxZQUFZLENBQUMsU0FBUztRQUMvQixRQUFRLENBQUMsWUFBWSxDQUFDLElBQUk7UUFDMUIsUUFBUSxDQUFDLFlBQVksQ0FBQyxXQUFXO1FBQ2pDLFFBQVEsQ0FBQyxlQUFlO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEIsT0FBTyxDQUFDLEtBQUssRUFBRSw4SEFBOEgsQ0FBQyxDQUFDO0FBQ2pKLENBQUM7QUFFRCxrQkFBZSxLQUFLLEVBQUUsUUFBNkIsRUFBRSxPQUEyQixFQUFFLEtBQWUsRUFBbUIsRUFBRTtJQUNwSCxJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFXLEVBQUUsQ0FBQztJQUM1QixHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxjQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxrREFBa0QsQ0FBQyxDQUFDLENBQUE7SUFDeEcsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsY0FBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsK0NBQStDLENBQUMsQ0FBQyxDQUFBO0lBQ2xHLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFcEIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFBO0lBQ2xCLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFFMUMsTUFBTSxTQUFTLEdBQUcsSUFBQSx1Q0FBcUIsRUFBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzNELE1BQU0sSUFBQSxnQ0FBa0IsRUFBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxlQUFnQixDQUFDLENBQUM7SUFDN0QsTUFBTSxVQUFVLEdBQUcsSUFBQSx5Q0FBMEIsRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sVUFBVSxHQUFHLElBQUEsMkNBQTJCLEVBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2RSxJQUFBLDRCQUFvQixFQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7SUFFaEUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRVYsTUFBTSxhQUFhLEdBQUcsSUFBSSxPQUFPLENBQVMsT0FBTyxDQUFDLEVBQUU7UUFDbEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQ2YsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUN0QyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDcEIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtJQUVGLE9BQU8sTUFBTSxhQUFhLENBQUM7QUFDN0IsQ0FBQyxDQUFDIn0=
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2024 RSC-Labs, https://rsoftcon.com/
4
+ *
5
+ * MIT License
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software
8
+ * distributed under the License is distributed on an "AS IS" BASIS,
9
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ * See the License for the specific language governing permissions and
11
+ * limitations under the License.
12
+ */
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.validateInput = validateInput;
18
+ const pdfkit_1 = __importDefault(require("pdfkit"));
19
+ const header_1 = require("./parts/header");
20
+ const customer_info_1 = require("./parts/customer-info");
21
+ const table_1 = require("./parts/table");
22
+ const invoice_info_1 = require("./parts/invoice-info");
23
+ const path_1 = __importDefault(require("path"));
24
+ function validateInput(settings) {
25
+ if (settings && settings.storeAddress && settings.storeAddress.company &&
26
+ settings.storeAddress.address_1 &&
27
+ settings.storeAddress.city &&
28
+ settings.storeAddress.postal_code)
29
+ return [true, ''];
30
+ return [false, `Not all settings are defined to generate template. Following settings are checked: company, address, city, postal_code`];
31
+ }
32
+ exports.default = async (settings, invoice, order) => {
33
+ var doc = new pdfkit_1.default();
34
+ doc.registerFont('Regular', path_1.default.resolve(__dirname, '../../../../assets/fonts/IBMPlexSans-Regular.ttf'));
35
+ doc.registerFont('Bold', path_1.default.resolve(__dirname, '../../../../assets/fonts/IBMPlexSans-Bold.ttf'));
36
+ doc.font('Regular');
37
+ const buffers = [];
38
+ doc.on("data", buffers.push.bind(buffers));
39
+ const endHeader = (0, header_1.generateHeader)(doc, 50, settings);
40
+ const endInvoiceInfo = (0, invoice_info_1.generateInvoiceInformation)(doc, endHeader, invoice);
41
+ const endY = (0, customer_info_1.generateCustomerInformation)(doc, endInvoiceInfo, order);
42
+ (0, table_1.generateInvoiceTable)(doc, endY, order, order.items || []);
43
+ doc.end();
44
+ const bufferPromise = new Promise(resolve => {
45
+ doc.on("end", () => {
46
+ const pdfData = Buffer.concat(buffers);
47
+ resolve(pdfData);
48
+ });
49
+ });
50
+ return await bufferPromise;
51
+ };
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvc2VydmljZXMvdGVtcGxhdGVzL2ludm9pY2VzL2Jhc2ljL2Jhc2ljLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7OztHQVVHOzs7OztBQVdILHNDQU9DO0FBaEJELG9EQUFpQztBQUVqQywyQ0FBZ0Q7QUFDaEQseURBQW9FO0FBQ3BFLHlDQUFxRDtBQUNyRCx1REFBa0U7QUFDbEUsZ0RBQXdCO0FBR3hCLFNBQWdCLGFBQWEsQ0FBQyxRQUE4QjtJQUMxRCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsT0FBTztRQUNwRSxRQUFRLENBQUMsWUFBWSxDQUFDLFNBQVM7UUFDL0IsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJO1FBQzFCLFFBQVEsQ0FBQyxZQUFZLENBQUMsV0FBVztRQUNqQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsd0hBQXdILENBQUMsQ0FBQztBQUMzSSxDQUFDO0FBRUQsa0JBQWUsS0FBSyxFQUFFLFFBQTZCLEVBQUUsT0FBMkIsRUFBRSxLQUFlLEVBQW1CLEVBQUU7SUFDcEgsSUFBSSxHQUFHLEdBQUcsSUFBSSxnQkFBVyxFQUFFLENBQUM7SUFDNUIsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsY0FBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsa0RBQWtELENBQUMsQ0FBQyxDQUFBO0lBQ3hHLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLGNBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLCtDQUErQyxDQUFDLENBQUMsQ0FBQTtJQUNsRyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXBCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQTtJQUNsQixHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBRTFDLE1BQU0sU0FBUyxHQUFHLElBQUEsdUJBQWMsRUFBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sY0FBYyxHQUFHLElBQUEseUNBQTBCLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzRSxNQUFNLElBQUksR0FBRyxJQUFBLDJDQUEyQixFQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckUsSUFBQSw0QkFBb0IsRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTFELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUVWLE1BQU0sYUFBYSxHQUFHLElBQUksT0FBTyxDQUFTLE9BQU8sQ0FBQyxFQUFFO1FBQ2xELEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUNmLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDdEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3BCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7SUFFRixPQUFPLE1BQU0sYUFBYSxDQUFDO0FBQzdCLENBQUMsQ0FBQyJ9
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2024 RSC-Labs, https://rsoftcon.com/
4
+ *
5
+ * MIT License
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software
8
+ * distributed under the License is distributed on an "AS IS" BASIS,
9
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ * See the License for the specific language governing permissions and
11
+ * limitations under the License.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.generateCustomerInformation = generateCustomerInformation;
15
+ const hr_1 = require("./hr");
16
+ const i18next_1 = require("i18next");
17
+ function generateCustomerInformation(doc, y, order) {
18
+ doc
19
+ .fillColor("#444444")
20
+ .fontSize(20)
21
+ .text(`${(0, i18next_1.t)("invoice-customer-details", "Details")}`, 50, y + 30);
22
+ (0, hr_1.generateHr)(doc, y + 55);
23
+ const customerInformationTop = y + 70;
24
+ let heightOfBillToAddress;
25
+ if (order.billing_address) {
26
+ doc
27
+ .fontSize(10)
28
+ .font("Bold")
29
+ .text(`${(0, i18next_1.t)("invoice-bill-to", "Bill to")}:`, 50, customerInformationTop, { align: 'left' })
30
+ .font("Regular")
31
+ .text(`${order.billing_address.first_name} ${order.billing_address.last_name}`, 50, customerInformationTop + 15, { align: 'left' })
32
+ .text(`${order.billing_address.city} ${order.billing_address.postal_code}`, 50, customerInformationTop + 30, { align: 'left' });
33
+ const billAddress = order.billing_address.address_1;
34
+ heightOfBillToAddress = doc.heightOfString(billAddress, { width: 150 });
35
+ doc.text(billAddress, 50, customerInformationTop + 45, { align: 'left', width: 150 })
36
+ .moveDown();
37
+ }
38
+ let heightOfShipToAddress;
39
+ if (order.shipping_address) {
40
+ doc
41
+ .fontSize(10)
42
+ .font("Bold")
43
+ .text(`${(0, i18next_1.t)("invoice-ship-to", "Ship to")}:`, 50, customerInformationTop, { align: 'right' })
44
+ .font("Regular")
45
+ .text(`${order.shipping_address.first_name} ${order.shipping_address.last_name}`, 50, customerInformationTop + 15, { align: 'right' })
46
+ .text(`${order.shipping_address.city} ${order.shipping_address.postal_code}`, 50, customerInformationTop + 30, { align: 'right' })
47
+ .moveDown();
48
+ const shipAddress = order.shipping_address.address_1;
49
+ heightOfShipToAddress = doc.heightOfString(shipAddress, { width: 150 });
50
+ doc.text(shipAddress, 360, customerInformationTop + 45, { align: 'right', widdth: 150 })
51
+ .moveDown();
52
+ }
53
+ if (heightOfBillToAddress && heightOfShipToAddress) {
54
+ if (heightOfShipToAddress > heightOfBillToAddress) {
55
+ return customerInformationTop + 45 + heightOfShipToAddress;
56
+ }
57
+ else {
58
+ return customerInformationTop + 45 + heightOfBillToAddress;
59
+ }
60
+ }
61
+ if (heightOfBillToAddress) {
62
+ return customerInformationTop + 45 + heightOfBillToAddress;
63
+ }
64
+ if (heightOfShipToAddress) {
65
+ return customerInformationTop + 45 + heightOfShipToAddress;
66
+ }
67
+ return customerInformationTop;
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXItaW5mby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2RvY3VtZW50cy9zZXJ2aWNlcy90ZW1wbGF0ZXMvaW52b2ljZXMvYmFzaWMvcGFydHMvY3VzdG9tZXItaW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7R0FVRzs7QUFNSCxrRUE0REM7QUFoRUQsNkJBQWtDO0FBQ2xDLHFDQUE0QjtBQUc1QixTQUFnQiwyQkFBMkIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQWU7SUFDakUsR0FBRztTQUNBLFNBQVMsQ0FBQyxTQUFTLENBQUM7U0FDcEIsUUFBUSxDQUFDLEVBQUUsQ0FBQztTQUNaLElBQUksQ0FBQyxHQUFHLElBQUEsV0FBQyxFQUFDLDBCQUEwQixFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUVuRSxJQUFBLGVBQVUsRUFBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBRXhCLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUV0QyxJQUFJLHFCQUF5QyxDQUFDO0lBRTlDLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFCLEdBQUc7YUFDQSxRQUFRLENBQUMsRUFBRSxDQUFDO2FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUVaLElBQUksQ0FBQyxHQUFHLElBQUEsV0FBQyxFQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLHNCQUFzQixFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDO2FBQ3hGLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDZixJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsZUFB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
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2024 RSC-Labs, https://rsoftcon.com/
4
+ *
5
+ * MIT License
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software
8
+ * distributed under the License is distributed on an "AS IS" BASIS,
9
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ * See the License for the specific language governing permissions and
11
+ * limitations under the License.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.generateHeaderForLogo = generateHeaderForLogo;
15
+ function generateHeaderForLogo(doc, y, documentSettings) {
16
+ doc
17
+ .fillColor("#444444")
18
+ .fontSize(20);
19
+ const heightCompany = doc.heightOfString(documentSettings.storeAddress?.company, { width: 250 });
20
+ doc
21
+ .fillColor("#444444")
22
+ .fontSize(20)
23
+ .text(documentSettings.storeAddress?.company, 50, 50, { align: "left", width: 250 })
24
+ .moveDown()
25
+ .fontSize(10)
26
+ .text(documentSettings.storeAddress?.company, 50, heightCompany + 65, { align: "left" })
27
+ .text(`${documentSettings.storeAddress?.city} ${documentSettings.storeAddress?.postal_code}`, 50, heightCompany + 80, { align: "left" });
28
+ const heightOfAddress = doc.heightOfString(documentSettings.storeAddress?.address_1, { width: 250 });
29
+ doc.text(documentSettings.storeAddress?.address_1, 50, heightCompany + 95, { align: "left", width: 250 });
30
+ return heightOfAddress + heightCompany + 95;
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLWZvci1sb2dvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvZG9jdW1lbnRzL3NlcnZpY2VzL3RlbXBsYXRlcy9pbnZvaWNlcy9iYXNpYy9wYXJ0cy9oZWFkZXItZm9yLWxvZ28udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7O0dBVUc7O0FBSUgsc0RBbUJDO0FBbkJELFNBQWdCLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFTLEVBQUUsZ0JBQXFDO0lBQ3pGLEdBQUc7U0FDQSxTQUFTLENBQUMsU0FBUyxDQUFDO1NBQ3BCLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUVmLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBRWpHLEdBQUc7U0FDQSxTQUFTLENBQUMsU0FBUyxDQUFDO1NBQ3BCLFFBQVEsQ0FBQyxFQUFFLENBQUM7U0FDWixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7U0FDbkYsUUFBUSxFQUFFO1NBQ1YsUUFBUSxDQUFDLEVBQUUsQ0FBQztTQUNaLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxhQUFhLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO1NBQ3ZGLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksZ0JBQWdCLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxhQUFhLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDeEksTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDcEcsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxhQUFhLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUV6RyxPQUFPLGVBQWUsR0FBRyxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ2hELENBQUMifQ==
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2024 RSC-Labs, https://rsoftcon.com/
4
+ *
5
+ * MIT License
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software
8
+ * distributed under the License is distributed on an "AS IS" BASIS,
9
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ * See the License for the specific language governing permissions and
11
+ * limitations under the License.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.generateHeaderLogo = generateHeaderLogo;
15
+ async function generateHeaderLogo(doc, y, logoSource) {
16
+ const responseImage = await fetch(logoSource);
17
+ if (responseImage.ok && responseImage.status == 200) {
18
+ const responseImageBuffer = await responseImage.arrayBuffer();
19
+ const responseBuffer = Buffer.from(responseImageBuffer);
20
+ doc
21
+ .image(responseBuffer, 350, y, { align: 'right', width: 200 });
22
+ }
23
+ else {
24
+ doc
25
+ .text('Cannot get logo from provided URL'), 390, y, { align: 'right', width: 200 };
26
+ }
27
+ return y;
28
+ }
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLWxvZ28uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvc2VydmljZXMvdGVtcGxhdGVzL2ludm9pY2VzL2Jhc2ljL3BhcnRzL2hlYWRlci1sb2dvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7OztHQVVHOztBQUVILGdEQWVDO0FBZk0sS0FBSyxVQUFVLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxDQUFTLEVBQUUsVUFBa0I7SUFFekUsTUFBTSxhQUFhLEdBQUcsTUFBTSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFOUMsSUFBSSxhQUFhLENBQUMsRUFBRSxJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7UUFDcEQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM5RCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDeEQsR0FBRzthQUNBLEtBQUssQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztTQUFNLENBQUM7UUFDTixHQUFHO2FBQ0EsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMifQ==
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2024 RSC-Labs, https://rsoftcon.com/
4
+ *
5
+ * MIT License
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software
8
+ * distributed under the License is distributed on an "AS IS" BASIS,
9
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ * See the License for the specific language governing permissions and
11
+ * limitations under the License.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.generateHeader = generateHeader;
15
+ function generateHeader(doc, y, documentSettings) {
16
+ doc
17
+ .fillColor("#444444")
18
+ .fontSize(20);
19
+ const heightCompany = doc.heightOfString(documentSettings.storeAddress?.company, { width: 250 });
20
+ doc
21
+ .text(documentSettings.storeAddress?.company, 50, y, { align: "left", width: 250 })
22
+ .fontSize(10)
23
+ .text(documentSettings.storeAddress?.company, 200, y, { align: "right" })
24
+ .text(`${documentSettings.storeAddress?.city} ${documentSettings.storeAddress?.postal_code}`, 200, y + 15, { align: "right" });
25
+ const heightAddress = doc.heightOfString(documentSettings.storeAddress?.address_1, { width: 150 });
26
+ doc
27
+ .text(`${documentSettings.storeAddress?.address_1}`, 390, y + 30, { align: "right", width: 150 });
28
+ if (heightCompany > heightAddress + 30) {
29
+ return heightCompany + y;
30
+ }
31
+ else {
32
+ return heightAddress + y + 30;
33
+ }
34
+ }
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvZG9jdW1lbnRzL3NlcnZpY2VzL3RlbXBsYXRlcy9pbnZvaWNlcy9iYXNpYy9wYXJ0cy9oZWFkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7O0dBVUc7O0FBSUgsd0NBdUJDO0FBdkJELFNBQWdCLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBUyxFQUFFLGdCQUFxQztJQUNsRixHQUFHO1NBQ0EsU0FBUyxDQUFDLFNBQVMsQ0FBQztTQUNwQixRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7SUFFZixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNqRyxHQUFHO1NBQ0EsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO1NBQ2xGLFFBQVEsQ0FBQyxFQUFFLENBQUM7U0FDWixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO1NBQ3hFLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksZ0JBQWdCLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFFaEksTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLEVBQUMsS0FBSyxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7SUFFakcsR0FBRztTQUNBLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUE7SUFHbEcsSUFBSSxhQUFhLEdBQUcsYUFBYSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sYUFBYSxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sYUFBYSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDaEMsQ0FBQztBQUNILENBQUMifQ==
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2024 RSC-Labs, https://rsoftcon.com/
4
+ *
5
+ * MIT License
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software
8
+ * distributed under the License is distributed on an "AS IS" BASIS,
9
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ * See the License for the specific language governing permissions and
11
+ * limitations under the License.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.generateHr = generateHr;
15
+ function generateHr(doc, y) {
16
+ doc
17
+ .strokeColor("#aaaaaa")
18
+ .lineWidth(1)
19
+ .moveTo(50, y)
20
+ .lineTo(550, y)
21
+ .stroke();
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvc2VydmljZXMvdGVtcGxhdGVzL2ludm9pY2VzL2Jhc2ljL3BhcnRzL2hyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7OztHQVVHOztBQUVILGdDQU9DO0FBUEQsU0FBZ0IsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFTO0lBQ3ZDLEdBQUc7U0FDQSxXQUFXLENBQUMsU0FBUyxDQUFDO1NBQ3RCLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDWixNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNiLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ2QsTUFBTSxFQUFFLENBQUM7QUFDZCxDQUFDIn0=
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2024 RSC-Labs, https://rsoftcon.com/
4
+ *
5
+ * MIT License
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software
8
+ * distributed under the License is distributed on an "AS IS" BASIS,
9
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ * See the License for the specific language governing permissions and
11
+ * limitations under the License.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.generateInvoiceInformation = generateInvoiceInformation;
15
+ const hr_1 = require("./hr");
16
+ const i18next_1 = require("i18next");
17
+ function generateInvoiceInformation(doc, y, invoice) {
18
+ doc
19
+ .fillColor("#444444")
20
+ .fontSize(20)
21
+ .text((0, i18next_1.t)("invoice", "Invoice"), 50, y + 40);
22
+ (0, hr_1.generateHr)(doc, y + 65);
23
+ const invoiceInformationTop = y + 80;
24
+ doc
25
+ .fontSize(10)
26
+ .text(`${(0, i18next_1.t)("invoice-number", "Invoice number")}:`, 50, invoiceInformationTop)
27
+ .font("Bold")
28
+ .text(invoice.displayNumber, 150, invoiceInformationTop)
29
+ .font("Regular")
30
+ .text(`${(0, i18next_1.t)("invoice-date", "Invoice date")}:`, 50, invoiceInformationTop + 15)
31
+ .text(invoice.created_at.toLocaleDateString(), 150, invoiceInformationTop + 15)
32
+ .moveDown();
33
+ return invoiceInformationTop + 15;
34
+ }
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZS1pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvZG9jdW1lbnRzL3NlcnZpY2VzL3RlbXBsYXRlcy9pbnZvaWNlcy9iYXNpYy9wYXJ0cy9pbnZvaWNlLWluZm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7O0dBVUc7O0FBTUgsZ0VBcUJDO0FBeEJELDZCQUFrQztBQUNsQyxxQ0FBNEI7QUFFNUIsU0FBZ0IsMEJBQTBCLENBQUMsR0FBRyxFQUFFLENBQVMsRUFBRSxPQUEyQjtJQUNwRixHQUFHO1NBQ0EsU0FBUyxDQUFDLFNBQVMsQ0FBQztTQUNwQixRQUFRLENBQUMsRUFBRSxDQUFDO1NBQ1osSUFBSSxDQUFDLElBQUEsV0FBQyxFQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBRTdDLElBQUEsZUFBVSxFQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFeEIsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRXJDLEdBQUc7U0FDQSxRQUFRLENBQUMsRUFBRSxDQUFDO1NBQ1osSUFBSSxDQUFDLEdBQUcsSUFBQSxXQUFDLEVBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxxQkFBcUIsQ0FBQztTQUM1RSxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLHFCQUFxQixDQUFDO1NBQ3ZELElBQUksQ0FBQyxTQUFTLENBQUM7U0FDZixJQUFJLENBQUMsR0FBRyxJQUFBLFdBQUMsRUFBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1NBQzdFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsR0FBRyxFQUFFLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztTQUM5RSxRQUFRLEVBQUUsQ0FBQztJQUVkLE9BQU8scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLENBQUMifQ==
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2024 RSC-Labs, https://rsoftcon.com/
4
+ *
5
+ * MIT License
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software
8
+ * distributed under the License is distributed on an "AS IS" BASIS,
9
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ * See the License for the specific language governing permissions and
11
+ * limitations under the License.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.generateInvoiceTable = generateInvoiceTable;
15
+ const hr_1 = require("./hr");
16
+ const i18next_1 = require("i18next");
17
+ const currency_1 = require("../../../../../utils/currency");
18
+ function amountToDisplay(amount, currencyCode) {
19
+ const decimalDigits = (0, currency_1.getDecimalDigits)(currencyCode);
20
+ return `${(amount / Math.pow(10, decimalDigits)).toFixed(decimalDigits)} ${currencyCode.toUpperCase()}`;
21
+ }
22
+ function amountToDisplayNormalized(amount, currencyCode) {
23
+ const decimalDigits = (0, currency_1.getDecimalDigits)(currencyCode);
24
+ return `${parseFloat(amount.toString()).toFixed(decimalDigits)} ${currencyCode.toUpperCase()}`;
25
+ }
26
+ function generateTableRow(doc, y, item, description, unitCost, quantity, lineTotal) {
27
+ doc.fontSize(10);
28
+ const pageHeight = doc.page.height - 80;
29
+ const descriptionHeight = doc.heightOfString(description, { width: 180 });
30
+ const itemHeight = doc.heightOfString(item, { width: 90 });
31
+ const maxHeight = Math.max(descriptionHeight, itemHeight);
32
+ const height = Math.max(maxHeight, 30);
33
+ let _y = y;
34
+ let nextY = y + height;
35
+ if (nextY > pageHeight) {
36
+ doc.addPage();
37
+ _y = 50;
38
+ nextY = _y + height;
39
+ }
40
+ doc
41
+ .text(item, 50, _y, { width: 90 })
42
+ .text(description, 150, _y, { width: 180 })
43
+ .text(unitCost, 280, _y, { width: 90, align: "right" })
44
+ .text(quantity, 370, _y, { width: 90, align: "right" })
45
+ .text(lineTotal, 0, _y, { align: "right" });
46
+ return nextY;
47
+ }
48
+ function generateInvoiceTable(doc, y, order, items) {
49
+ let i;
50
+ const invoiceTableTop = y + 35;
51
+ const pageHeight = doc.page.height - 50;
52
+ doc.font("Bold");
53
+ generateTableRow(doc, invoiceTableTop, (0, i18next_1.t)("invoice-table-header-item", "Item"), (0, i18next_1.t)("invoice-table-header-description", "Description"), (0, i18next_1.t)("invoice-table-header-unit-cost", "Unit Cost"), (0, i18next_1.t)("invoice-table-header-quantity", "Quantity"), (0, i18next_1.t)("invoice-table-header-line-total", "Line Total"));
54
+ (0, hr_1.generateHr)(doc, invoiceTableTop + 20);
55
+ doc.font("Regular");
56
+ let currentY = invoiceTableTop + 30;
57
+ for (i = 0; i < items.length; i++) {
58
+ if (currentY > pageHeight) {
59
+ doc.addPage();
60
+ currentY = 50;
61
+ }
62
+ const item = items[i];
63
+ currentY = generateTableRow(doc, currentY, item.title, item.subtitle, amountToDisplayNormalized(Number(item.raw_unit_price.value), order.currency_code), item.quantity, amountToDisplayNormalized(Number(item.raw_unit_price.value) * item.quantity, order.currency_code));
64
+ currentY += 5;
65
+ if (currentY > pageHeight) {
66
+ doc.addPage();
67
+ currentY = 50;
68
+ }
69
+ (0, hr_1.generateHr)(doc, currentY);
70
+ currentY += 5;
71
+ if (currentY > pageHeight) {
72
+ doc.addPage();
73
+ currentY = 50;
74
+ }
75
+ }
76
+ currentY += 20;
77
+ if (currentY > pageHeight) {
78
+ doc.addPage();
79
+ currentY = 50;
80
+ }
81
+ generateTableRow(doc, currentY, "", "", (0, i18next_1.t)("invoice-table-shipping", "Shipping"), "", amountToDisplayNormalized(order.shipping_subtotal.numeric, order.currency_code));
82
+ currentY += 30;
83
+ if (currentY > pageHeight) {
84
+ doc.addPage();
85
+ currentY = 50;
86
+ }
87
+ generateTableRow(doc, currentY, "", "", (0, i18next_1.t)("invoice-table-tax", "Tax"), "", amountToDisplayNormalized(order.tax_total.numeric, order.currency_code));
88
+ currentY += 45;
89
+ if (currentY > pageHeight) {
90
+ doc.addPage();
91
+ currentY = 50;
92
+ }
93
+ doc.font("Bold");
94
+ generateTableRow(doc, currentY, "", "", (0, i18next_1.t)("invoice-table-total", "Total"), "", amountToDisplayNormalized(order.total.numeric, order.currency_code));
95
+ doc.font("Regular");
96
+ }
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvc2VydmljZXMvdGVtcGxhdGVzL2ludm9pY2VzL2Jhc2ljL3BhcnRzL3RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7OztHQVVHOztBQTRESCxvREErR0M7QUF6S0QsNkJBQWtDO0FBQ2xDLHFDQUE0QjtBQUU1Qiw0REFBaUU7QUFHakUsU0FBUyxlQUFlLENBQUMsTUFBYyxFQUFFLFlBQW9CO0lBQzNELE1BQU0sYUFBYSxHQUFHLElBQUEsMkJBQWdCLEVBQUMsWUFBWSxDQUFDLENBQUM7SUFDckQsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN0RCxhQUFhLENBQ2QsSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztBQUNwQyxDQUFDO0FBRUQsU0FBUyx5QkFBeUIsQ0FDaEMsTUFBYyxFQUNkLFlBQW9CO0lBRXBCLE1BQU0sYUFBYSxHQUFHLElBQUEsMkJBQWdCLEVBQUMsWUFBWSxDQUFDLENBQUM7SUFDckQsT0FBTyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQzdDLGFBQWEsQ0FDZCxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUN2QixHQUFHLEVBQ0gsQ0FBQyxFQUNELElBQUksRUFDSixXQUFXLEVBQ1gsUUFBUSxFQUNSLFFBQVEsRUFDUixTQUFTO0lBRVQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVqQixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7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
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2024 RSC-Labs, https://rsoftcon.com/
4
+ *
5
+ * MIT License
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software
8
+ * distributed under the License is distributed on an "AS IS" BASIS,
9
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ * See the License for the specific language governing permissions and
11
+ * limitations under the License.
12
+ */
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.validateInput = validateInput;
18
+ const pdfkit_1 = __importDefault(require("pdfkit"));
19
+ const path_1 = __importDefault(require("path"));
20
+ const seller_info_1 = require("./parts/seller-info");
21
+ const invoice_meta_1 = require("./parts/invoice-meta");
22
+ const table_1 = require("./parts/table");
23
+ const footer_1 = require("./parts/footer");
24
+ const hr_1 = require("../basic/parts/hr");
25
+ const header_logo_1 = require("../basic/parts/header-logo");
26
+ const customer_info_1 = require("../basic/parts/customer-info");
27
+ function validateInput(settings) {
28
+ if (settings && settings.storeAddress && settings.storeAddress.company &&
29
+ settings.storeAddress.address_1 &&
30
+ settings.storeAddress.city &&
31
+ settings.storeAddress.postal_code &&
32
+ settings.storeIndiaGstDetails?.gstin)
33
+ return [true, ''];
34
+ return [false, `Not all settings are defined to generate template. Following settings are checked: company, address, city, postal_code, GSTIN (in India GST details)`];
35
+ }
36
+ // ponytail: state match by province string equality, upgrade to GST state-code table if buyer/seller provinces don't line up 1:1
37
+ function isInterState(settings, order) {
38
+ const sellerState = settings.storeAddress?.province?.toString().trim().toLowerCase();
39
+ const buyerState = order.billing_address?.province?.toString().trim().toLowerCase();
40
+ if (!sellerState || !buyerState) {
41
+ return false;
42
+ }
43
+ return sellerState !== buyerState;
44
+ }
45
+ exports.default = async (settings, invoice, order) => {
46
+ var doc = new pdfkit_1.default({ size: 'A4', margin: 40 });
47
+ doc.registerFont('Regular', path_1.default.resolve(__dirname, '../../../../assets/fonts/IBMPlexSans-Regular.ttf'));
48
+ doc.registerFont('Bold', path_1.default.resolve(__dirname, '../../../../assets/fonts/IBMPlexSans-Bold.ttf'));
49
+ doc.font('Regular');
50
+ const buffers = [];
51
+ doc.on("data", buffers.push.bind(buffers));
52
+ if (settings.storeLogoSource) {
53
+ await (0, header_logo_1.generateHeaderLogo)(doc, 40, settings.storeLogoSource);
54
+ }
55
+ const endSeller = (0, seller_info_1.generateSellerInfo)(doc, 40, settings);
56
+ const endMeta = (0, invoice_meta_1.generateInvoiceMeta)(doc, 130, invoice, order);
57
+ const headerBottom = Math.max(endSeller, endMeta);
58
+ (0, hr_1.generateHr)(doc, headerBottom + 5);
59
+ const endCustomer = (0, customer_info_1.generateCustomerInformation)(doc, headerBottom + 5, order);
60
+ const interState = isInterState(settings, order);
61
+ const endTable = (0, table_1.generateInvoiceTable)(doc, endCustomer, order, order.items || [], interState);
62
+ await (0, footer_1.generateFooter)(doc, endTable, settings);
63
+ doc.end();
64
+ const bufferPromise = new Promise(resolve => {
65
+ doc.on("end", () => {
66
+ const pdfData = Buffer.concat(buffers);
67
+ resolve(pdfData);
68
+ });
69
+ });
70
+ return await bufferPromise;
71
+ };
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kaWEtZ3N0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvZG9jdW1lbnRzL3NlcnZpY2VzL3RlbXBsYXRlcy9pbnZvaWNlcy9pbmRpYS1nc3QvaW5kaWEtZ3N0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7OztHQVVHOzs7OztBQWNILHNDQVFDO0FBbEJELG9EQUFpQztBQUNqQyxnREFBd0I7QUFDeEIscURBQXlEO0FBQ3pELHVEQUEyRDtBQUMzRCx5Q0FBcUQ7QUFDckQsMkNBQWdEO0FBQ2hELDBDQUErQztBQUMvQyw0REFBZ0U7QUFDaEUsZ0VBQTJFO0FBRTNFLFNBQWdCLGFBQWEsQ0FBQyxRQUE4QjtJQUMxRCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsT0FBTztRQUNwRSxRQUFRLENBQUMsWUFBWSxDQUFDLFNBQVM7UUFDL0IsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJO1FBQzFCLFFBQVEsQ0FBQyxZQUFZLENBQUMsV0FBVztRQUNqQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsS0FBSztRQUNwQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsc0pBQXNKLENBQUMsQ0FBQztBQUN6SyxDQUFDO0FBRUQsaUlBQWlJO0FBQ2pJLFNBQVMsWUFBWSxDQUFDLFFBQTZCLEVBQUUsS0FBZTtJQUNsRSxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyRixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNw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