chromiumly
Version:
A lightweight Typescript library that interacts with Gotenberg's different modules to convert a variety of document formats to PDF files.
63 lines • 2.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.templateValidators = void 0;
const isObject = (value) => typeof value === 'object' && value !== null;
const hasString = (obj, key) => typeof obj[key] === 'string' && obj[key] !== '';
const hasNumber = (obj, key) => typeof obj[key] === 'number';
const isValidUrl = (value) => {
if (typeof value !== 'string' || value === '')
return false;
try {
new URL(value);
return true;
}
catch {
return false;
}
};
const validateInvoiceSaas = (data) => {
if (!isObject(data)) {
return false;
}
if (!hasString(data, 'invoiceNumber') ||
!hasString(data, 'createdDate') ||
!hasString(data, 'dueDate') ||
!hasString(data, 'currency') ||
!hasString(data, 'subTotal') ||
!hasNumber(data, 'taxRate') ||
!hasString(data, 'taxAmount') ||
!hasString(data, 'total') ||
!hasString(data, 'footerNote')) {
return false;
}
if (data.companyLogo !== undefined && !isValidUrl(data.companyLogo)) {
return false;
}
if (!Array.isArray(data.items) || data.items.length === 0) {
return false;
}
if (!isObject(data.sender) || !isObject(data.receiver)) {
return false;
}
const validateParty = (party) => hasString(party, 'name') && hasString(party, 'addressLine1');
if (!validateParty(data.sender) ||
!validateParty(data.receiver)) {
return false;
}
return data.items.every((item) => {
if (!isObject(item)) {
return false;
}
return (hasString(item, 'description') &&
hasNumber(item, 'qty') &&
hasString(item, 'unitPrice') &&
hasString(item, 'amount'));
});
};
const validateInvoiceClassic = (data) => validateInvoiceSaas(data) &&
isValidUrl(data['companyLogo']);
exports.templateValidators = {
invoice_saas: validateInvoiceSaas,
invoice_classic: validateInvoiceClassic
};
//# sourceMappingURL=templates.validators.js.map