UNPKG

qif-ts

Version:

Typescript library to map QIF formatted data

122 lines (121 loc) 3.71 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.serializeQif = void 0; const types_1 = require("./types"); /** * Serializes a valid QIFData object. * * @param data - The QifData object to be serialised * @returns The QIF formatted string * * @public */ function serializeQif(data) { const output = []; if (data.type) { output.push(data.type); } const transactionMappingFunction = getMappingFunction(data.type); data.transactions .map((transaction) => transactionMappingFunction(transaction)) .forEach((t) => output.push(...t)); return output.join('\n'); } exports.serializeQif = serializeQif; function getMappingFunction(type) { switch (type) { case types_1.QifType.Investment: return investmentTransactionToString; case types_1.QifType.Bank: case types_1.QifType.Cash: case types_1.QifType.Card: case types_1.QifType.Liability: case types_1.QifType.Asset: return nonInvestmentTransactionToString; default: throw new types_1.QifMapperError('Qif File Type not currently supported: ' + type); } } function investmentTransactionToString(transaction) { const output = []; if (transaction.date) { output.push('D' + transaction.date); } if (transaction.investmentAction) { output.push('N' + transaction.investmentAction); } if (transaction.investmentSecurity) { output.push('Y' + transaction.investmentSecurity); } if (transaction.investmentPrice) { output.push('I' + transaction.investmentPrice); } if (transaction.investmentQuantity) { output.push('Q' + transaction.investmentQuantity); } if (transaction.amount) { output.push('T' + transaction.amount); } if (transaction.clearedStatus) { output.push('C' + transaction.clearedStatus); } if (transaction.investmentReminder) { output.push('P' + transaction.investmentReminder); } if (transaction.memo) { output.push('M' + transaction.memo); } if (transaction.investmentComission) { output.push('O' + transaction.investmentComission); } if (transaction.investmentAccount) { output.push('L' + transaction.investmentAccount); } if (transaction.investmentAmountTransferred) { output.push('$' + transaction.investmentAmountTransferred); } output.push('^'); return output; } function nonInvestmentTransactionToString(transaction) { const output = []; if (transaction.date) { output.push('D' + transaction.date); } if (transaction.amount) { output.push('T' + transaction.amount); } if (transaction.reference) { output.push('N' + transaction.reference); } if (transaction.payee) { output.push('P' + transaction.payee); } if (transaction.memo) { output.push('M' + transaction.memo); } if (transaction.address) { output.push('A' + transaction.address.join('\nA')); } if (transaction.category) { output.push('L' + transaction.category); } if (transaction.splits) { for (const split of transaction.splits) { if (split.category) { output.push('S' + split.category); } if (split.memo) { output.push('E' + split.memo); } if (split.amount) { output.push('$' + split.amount); } if (split.percent) { output.push('%' + split.percent); } } } output.push('^'); return output; }