ofx-data-extractor
Advanced tools
Comparing version 1.2.4 to 1.3.0
@@ -1,11 +0,11 @@ | ||
// Ofx-data-extractor v1.2.4 Copyright (c) 2023 Fábio Pereira França | ||
const h=/<\/\w+>/g,m=/<\w+>/g,u="<STMTTRN>",o="</STMTTRN>";function R(n){const t=n.slice(0,4),e=n.slice(4,6),r=n.slice(6,8),s=n.slice(8,10),i=n.slice(10,12),a=n.slice(12,14),[l,p]=n.slice(14).replace("[","").replace("]","").split(":");return{yyyy:t,yy:t.slice(2),y:t,MM:e,M:e,dd:r,d:r,hh:s,h:s,mm:i,m:i,ss:a,s:a,O:l,TZ:p}}function f(n,t){const e=R(n);let r=t;for(const[s,i]of Object.entries(e))r=r.replace(s,i);return r}function T(n){const t=n.replace(/(},})/g,"}}").replace(/(}")/g,'},"').replace(/(},])/g,"}]").replace(/(,})/g,"}").replace(/({")/g,`{ | ||
// Ofx-data-extractor v1.3.0 Copyright (c) 2023 Fábio Pereira França | ||
const I=/<\/\w+>/g,N=/<\w+>/g,x="<BANKMSGSRSV1>",f="</BANKMSGSRSV1>",E="<CREDITCARDMSGSRSV1>",l="</CREDITCARDMSGSRSV1>",d="<STMTTRN>",c="</STMTTRN>",b=[x,d,E],M=[f,l,c];function O(e){const t=e.slice(0,4),n=e.slice(4,6),r=e.slice(6,8),a=e.slice(8,10),s=e.slice(10,12),i=e.slice(12,14);return{yyyy:t,yy:t.slice(2),y:t,MM:n,M:n,dd:r,d:r,hh:a,h:a,mm:s,m:s,ss:i,s:i}}function g(e,t){const n=O(e);let r=t;for(const[a,s]of Object.entries(n))r=r.replace(a,s);return r}function T(e){return e.replace(/(\\)/g,"\\\\").replace(I,t=>D(t,!0)).replace(N,t=>w(t,!0)).replace(/(},})/g,"}}").replace(/(}")/g,'},"').replace(/(},])/g,"}]").replace(/(,})/g,"}").replace(/({")/g,`{ | ||
"`).replace(/(})/g,` | ||
}`).replace(/(",")/g,`", | ||
"`).replace(/,\s*}/g,` | ||
}`).replace(/(,",)/,",");return t.at(-1)===","?t.slice(0,-1):t}function N(n){const t=n.slice(0,12),e=n.slice(12,19),r=n.slice(19),s={date:t,transactionCode:e,protocol:r};return JSON.stringify(s)}function w(n){return n.startsWith("DT")}function S(n){return n.trim()}function y(n){return n===u?n:n.replace(/[<]/g,` | ||
`).replace(/[>]/g,":{")}function D(n){return n===o?` | ||
${n}`:"},"}function x(n){const t=n.search(","),e=n.search(".");return t>e?n.replace(/[.]/g,"").replace(/[,]/g,"."):n.replace(/[,]/g,"")}function g(n,t){return n.endsWith("ID")||n.endsWith("NUM")?!1:!isNaN(Number(t))}function d(n){const t=n.indexOf(u),e=n.lastIndexOf(o)+o.length,r=n.substring(t,e),s=new RegExp(u,"g"),i=new RegExp(o,"g"),a=`"STRTTRN":[${r.replace(s,"{").replace(i,"},")}]`;return{oldListText:r,newListText:a}}function E(n,t){const e={};for(const r of n){const[s,i]=r.split(":"),a=s.replace(` | ||
`,"");e[a]=t&&g(s,i)?Number(i):i}return e}function b(n){return n.reduce((t,e)=>e.TRNTYPE.toLocaleLowerCase().startsWith("deb")?(t.amountOfDebits++,t.debit+=Number(e.TRNAMT.replace("-","")),t):(t.amountOfCredits++,t.credit+=Number(e.TRNAMT),t),{credit:0,debit:0,amountOfCredits:0,amountOfDebits:0})}function O(n){return n.toString()}async function _(n){return await new Promise((e,r)=>{import("fs").then(s=>s.readFile(n,(i,a)=>{i?r(i):e(a.toString())}))})}async function M(n){return await new Promise((e,r)=>{if(typeof window<"u"&&window.FileReader){const s=new window.FileReader;s.onload=i=>e(i.target.result),s.onerror=i=>r(i.target.error),s.readAsText(n)}else r(new Error("FileReader is not available in this environment."))})}class c{_data;_config={};constructor(t,e){e&&(this._config=e),this._data=t}static fromBuffer(t){return new c(O(t))}static async fromFilePath(t){const e=await _(t);return new c(e)}static async fromBlob(t){const e=await M(t);return new c(e)}config(t){return this._config=t,this}getHeaders(){const[t]=this._data.split("<OFX>"),e=t.split(` | ||
`),r=i=>!!i.trim().length,s=e.filter(r);return E(s,!!this._config.nativeTypes)}getBankTransferList(){const{newListText:t}=d(this.getPartialJsonData()),e=t.slice(10),r=T(e);return JSON.parse(r)}getPartialJsonData(){const[t,e]=this._data.split("<OFX>"),r="<OFX>"+e,{sanitize:s}=this;return r.replace(h,D).replace(m,y).split(` | ||
`).map(S).filter(Boolean).map(s,this).join("")}sanitizeValue(t,e){let r=e.replace(/[{]/g,"").replace(/(},)/g,"");return t.endsWith("AMT")&&(r=x(r)),w(t)&&(r=this.configDate(r)),t==="FITID"?this.configFinancialInstitutionTransactionId(r):this._config.nativeTypes&&g(t,r)?`${r},`:`"${r}",`}sanitize(t){let e=t;const r=e.slice(0,e.indexOf(":")),s=this.sanitizeValue,i=l=>s.call(this,r,l);return t.match(/{(\w|\W)+/)&&(e=e.replace(/({(\w|\W)+)$/,i)),e.search(/(^\w+:)/)<0?e:e.replace(r+":",`"${r}":`)}configFinancialInstitutionTransactionId(t){const{fitId:e}=this._config;return e==="separated"?N(t):`"${t}",`}configDate(t){const{formatDate:e}=this._config;return e?f(t,e):f(t,"y-M-d")}getTransactionsSummary(){const t=this.getContent(),{DTEND:e,DTSTART:r,STRTTRN:s}=t.OFX.BANKMSGSRSV1.STMTTRNRS.STMTRS.BANKTRANLIST,i=b(s);return{dateStart:r,dateEnd:e,...i}}getContent(){const t=this.getPartialJsonData(),{newListText:e,oldListText:r}=d(t),s=t.replace(r,e);return JSON.parse(`{${T(s)}}`)}toJson(){const t=this.getHeaders(),e=this.getContent();return{...t,...e}}}export{c as Ofx,M as blobToString,O as bufferToString,_ as fileFromPathToString,T as fixJsonProblems,f as formatDate}; | ||
}`).replace(/(,",)/,",").slice(0,-1)}function B(e){const t=e.slice(0,12),n=e.slice(12,19),r=e.slice(19),a={date:t,transactionCode:n,protocol:r};return JSON.stringify(a)}function F(e){return e.startsWith("DT")}function G(e){return e.trim()}function w(e,t=!1){return b.includes(e)&&!t?e:e.replace(/[<]/g,` | ||
"`).replace(/[>]/g,'":{')}function D(e,t=!1){return M.includes(e)&&!t?` | ||
${e}`:"},"}function P({fitId:e,fitValue:t}){return e==="separated"?B(t):`"${t}",`}function k(e){const t=e.search(","),n=e.search(".");return t>n?e.replace(/[.]/g,"").replace(/[,]/g,"."):e.replace(/[,]/g,"")}function _({dateString:e,formatDate:t}){return t?g(e,t):g(e,"y-M-d")}function J(e){let t=e.value.replace(/[{]/g,"").replace(/(},)/g,"");const n=e.field.replace(/['"]/g,"");return n.endsWith("AMT")&&(t=k(t)),F(n)&&(t=_({dateString:t,formatDate:e.formatDate})),n==="FITID"?P({fitId:e.fitId,fitValue:t}):e.nativeTypes&&p(n,t)?`${Number(t)},`:`"${t}",`}function K(e,t){let n=e;const r=n.slice(0,n.indexOf(":")),a=s=>J({field:r,value:s,...t});return e.match(/{(\w|\W)+/)&&(n=n.replace(/({(\w|\W)+)$/,a)),n}function p(e,t){return e.endsWith("ID")||e.endsWith("NUM")?!1:!isNaN(Number(t))}function A(e){const t=e.indexOf(d),n=e.lastIndexOf(c)+c.length,r=e.substring(t,n),a=new RegExp(d,"g"),s=new RegExp(c,"g"),i=`"STRTTRN":[${r.replace(a,"{").replace(s,"},")}]`;return{oldListText:e,newListText:e.replace(r,i)}}function S(e){const t=e.substring(e.indexOf(x),e.indexOf(f)+f.length),n=A(t);return{newBankStatementTransactions:n.newListText,oldBankStatementTransactions:n.oldListText}}function m(e){const t=e.substring(e.indexOf(E),e.indexOf(l)+l.length),n=A(t);return{newCreditCardStatementTransactions:n.newListText,oldCreditCardStatementTransactions:n.oldListText}}function $(e,t){const n={};for(const r of e){const[a,s]=r.split(":"),i=a.replace(` | ||
`,"");n[i]=t&&p(a,s)?Number(s):s}return n}function z(e){return e.reduce((t,n)=>n.TRNTYPE.toLocaleLowerCase().startsWith("deb")?(t.amountOfDebits++,t.debit+=Number(n.TRNAMT.replace("-","")),t):(t.amountOfCredits++,t.credit+=Number(n.TRNAMT),t),{credit:0,debit:0,amountOfCredits:0,amountOfDebits:0})}class V{config;internConfig={};constructor(t){this.config=t,this.internConfig=t}getConfig(){return this.internConfig}sanitizeRow(t){return K(t,this.internConfig)}getPartialJsonData(t){const[n,r]=t.split("<OFX>"),a="<OFX>"+r,{sanitizeRow:s}=this;return a.replace(I,i=>D(i)).replace(N,i=>w(i)).split(` | ||
`).map(G).filter(Boolean).map(s,this).join("")}}function R(e){return e.toString()}async function h(e){return await new Promise((n,r)=>{import("fs").then(a=>a.readFile(e,(s,i)=>{s?r(s):n(i.toString())}))})}async function C(e){return await new Promise((n,r)=>{if(typeof window<"u"&&window.FileReader){const a=new window.FileReader;a.onload=s=>n(s.target.result),a.onerror=s=>r(s.target.error),a.readAsText(e)}else r(new Error("FileReader is not available in this environment."))})}class o{data;dataRead="";constructor(t){this.data=t,t&&(this.dataRead=t)}getData(){return this.dataRead}fromString(t){return new o(t)}fromBuffer(t){return new o(R(t))}async fromFilePath(t){return new o(await h(t))}async fromBlob(t){return new o(await C(t))}static fromString(t){return new o(t)}static fromBuffer(t){return new o(R(t))}static async fromFilePath(t){return new o(await h(t))}static async fromBlob(t){return new o(await C(t))}}class W{configInstance={}}class y extends W{setConfig(t){this.configInstance=t}getBankTransferList(t){const{newBankStatementTransactions:n}=S(this.configInstance.getPartialJsonData(t));return JSON.parse(`{${T(n)}}`)?.BANKMSGSRSV1?.STMTTRNRS?.STMTRS?.BANKTRANLIST?.STRTTRN}getCreditCardTransferList(t){const{newCreditCardStatementTransactions:n}=m(this.configInstance.getPartialJsonData(t));return JSON.parse(`{${T(n)}}`)?.CREDITCARDMSGSRSV1?.CCSTMTTRNRS?.CCSTMTRS?.BANKTRANLIST?.STRTTRN}getTransactionsSummary(t){const n=this.getContent(t),{DTEND:r,DTSTART:a,STRTTRN:s}=n.OFX.BANKMSGSRSV1.STMTTRNRS.STMTRS.BANKTRANLIST,i=z(s);return{dateStart:a,dateEnd:r,...i}}getContent(t){const n=this.configInstance.getPartialJsonData(t),{newBankStatementTransactions:r,oldBankStatementTransactions:a}=S(n),{newCreditCardStatementTransactions:s,oldCreditCardStatementTransactions:i}=m(n),L=n.replace(i,s).replace(a,r);return JSON.parse(`{${T(L)}}`)}}class j{customExtractor;customExtractorInstance;dataReaderInstance=new o("");constructor(t){this.customExtractor=t,this.customExtractorInstance=t||new y,this.config({})}data(t){return this.dataReaderInstance=t,this}config(t){return this.customExtractorInstance.setConfig(new V(t)),this}getHeaders(){const[t]=this.dataReaderInstance.getData().split("<OFX>"),n=t.split(` | ||
`),r=s=>!!s.trim().length,a=n.filter(r);return $(a,!!this.customExtractorInstance.configInstance.getConfig().nativeTypes)}getBankTransferList(){return this.customExtractorInstance.getBankTransferList(this.dataReaderInstance.getData())}getCreditCardTransferList(){return this.customExtractorInstance.getCreditCardTransferList(this.dataReaderInstance.getData())}getTransactionsSummary(){return this.customExtractorInstance.getTransactionsSummary(this.dataReaderInstance.getData())}getContent(){return this.customExtractorInstance.getContent(this.dataReaderInstance.getData())}toJson(){const t=this.getHeaders(),n=this.customExtractorInstance.getContent(this.dataReaderInstance.getData());return{...t,...n}}}class u{extractor;constructor(t,n){this.extractor=new j(new y),this.extractor.data(new o(t)),this.extractor.config(n||{})}static fromBuffer(t){return new u(o.fromBuffer(t).getData())}static async fromFilePath(t){const n=await o.fromFilePath(t);return new u(n.getData())}static async fromBlob(t){const n=await o.fromBlob(t);return new u(n.getData())}config(t){return this.extractor.config(t),this}getHeaders(){return this.extractor.getHeaders()}getBankTransferList(){return this.extractor.getBankTransferList()}getTransactionsSummary(){return this.extractor.getTransactionsSummary()}getContent(){return this.extractor.getContent()}toJson(){return this.extractor.toJson()}}export{j as Extractor,u as Ofx,y as OfxExtractor,o as Reader,C as blobToString,R as bufferToString,h as fileFromPathToString,T as fixJsonProblems,g as formatDate}; |
@@ -1,3 +0,11 @@ | ||
export { Ofx } from './main'; | ||
export { formatDate, fixJsonProblems, blobToString, bufferToString, fileFromPathToString, } from './helpers'; | ||
export type { OfxResponse, OFXMetaData, OfxStructure, BankTransferList, } from './types'; | ||
export { Ofx } from './older-implementation/main'; | ||
export { blobToString, bufferToString, fileFromPathToString, } from './common/reader'; | ||
export { fixJsonProblems } from './common/parse'; | ||
export { formatDate } from './common/date'; | ||
export type { IExtractor } from './interfaces/extractor.interface'; | ||
export type { CustomExtractor } from './interfaces/custom-extractor.interface'; | ||
export type { OfxResponse, OfxStructure, BankTransferList } from './@types/ofx'; | ||
export { Reader } from './implementations/reader'; | ||
export { OfxExtractor } from './implementations/ofx-extractor'; | ||
export { Extractor } from './implementations/extractor'; | ||
export type { MetaData, ExtractorConfig, DateResponse } from './@types/common'; |
@@ -1,11 +0,11 @@ | ||
// Ofx-data-extractor v1.2.4 Copyright (c) 2023 Fábio Pereira França | ||
(function(o,c){typeof exports=="object"&&typeof module<"u"?c(exports):typeof define=="function"&&define.amd?define(["exports"],c):(o=typeof globalThis<"u"?globalThis:o||self,c(o.ofx={}))})(this,function(o){"use strict";const c=/<\/\w+>/g,S=/<\w+>/g,u="<STMTTRN>",f="</STMTTRN>";function y(n){const t=n.slice(0,4),e=n.slice(4,6),s=n.slice(6,8),r=n.slice(8,10),i=n.slice(10,12),a=n.slice(12,14),[g,M]=n.slice(14).replace("[","").replace("]","").split(":");return{yyyy:t,yy:t.slice(2),y:t,MM:e,M:e,dd:s,d:s,hh:r,h:r,mm:i,m:i,ss:a,s:a,O:g,TZ:M}}function T(n,t){const e=y(n);let s=t;for(const[r,i]of Object.entries(e))s=s.replace(r,i);return s}function d(n){const t=n.replace(/(},})/g,"}}").replace(/(}")/g,'},"').replace(/(},])/g,"}]").replace(/(,})/g,"}").replace(/({")/g,`{ | ||
// Ofx-data-extractor v1.3.0 Copyright (c) 2023 Fábio Pereira França | ||
(function(c,u){typeof exports=="object"&&typeof module<"u"?u(exports):typeof define=="function"&&define.amd?define(["exports"],u):(c=typeof globalThis<"u"?globalThis:c||self,u(c.ofx={}))})(this,function(c){"use strict";const u=/<\/\w+>/g,N=/<\w+>/g,E="<BANKMSGSRSV1>",d="</BANKMSGSRSV1>",x="<CREDITCARDMSGSRSV1>",g="</CREDITCARDMSGSRSV1>",S="<STMTTRN>",T="</STMTTRN>",O=[E,S,x],M=[d,g,T];function B(e){const t=e.slice(0,4),n=e.slice(4,6),r=e.slice(6,8),a=e.slice(8,10),s=e.slice(10,12),i=e.slice(12,14);return{yyyy:t,yy:t.slice(2),y:t,MM:n,M:n,dd:r,d:r,hh:a,h:a,mm:s,m:s,ss:i,s:i}}function m(e,t){const n=B(e);let r=t;for(const[a,s]of Object.entries(n))r=r.replace(a,s);return r}function l(e){return e.replace(/(\\)/g,"\\\\").replace(u,t=>D(t,!0)).replace(N,t=>w(t,!0)).replace(/(},})/g,"}}").replace(/(}")/g,'},"').replace(/(},])/g,"}]").replace(/(,})/g,"}").replace(/({")/g,`{ | ||
"`).replace(/(})/g,` | ||
}`).replace(/(",")/g,`", | ||
"`).replace(/,\s*}/g,` | ||
}`).replace(/(,",)/,",");return t.at(-1)===","?t.slice(0,-1):t}function w(n){const t=n.slice(0,12),e=n.slice(12,19),s=n.slice(19),r={date:t,transactionCode:e,protocol:s};return JSON.stringify(r)}function b(n){return n.startsWith("DT")}function D(n){return n.trim()}function x(n){return n===u?n:n.replace(/[<]/g,` | ||
`).replace(/[>]/g,":{")}function E(n){return n===f?` | ||
${n}`:"},"}function O(n){const t=n.search(","),e=n.search(".");return t>e?n.replace(/[.]/g,"").replace(/[,]/g,"."):n.replace(/[,]/g,"")}function p(n,t){return n.endsWith("ID")||n.endsWith("NUM")?!1:!isNaN(Number(t))}function h(n){const t=n.indexOf(u),e=n.lastIndexOf(f)+f.length,s=n.substring(t,e),r=new RegExp(u,"g"),i=new RegExp(f,"g"),a=`"STRTTRN":[${s.replace(r,"{").replace(i,"},")}]`;return{oldListText:s,newListText:a}}function _(n,t){const e={};for(const s of n){const[r,i]=s.split(":"),a=r.replace(` | ||
`,"");e[a]=t&&p(r,i)?Number(i):i}return e}function F(n){return n.reduce((t,e)=>e.TRNTYPE.toLocaleLowerCase().startsWith("deb")?(t.amountOfDebits++,t.debit+=Number(e.TRNAMT.replace("-","")),t):(t.amountOfCredits++,t.credit+=Number(e.TRNAMT),t),{credit:0,debit:0,amountOfCredits:0,amountOfDebits:0})}function m(n){return n.toString()}async function R(n){return await new Promise((e,s)=>{import("fs").then(r=>r.readFile(n,(i,a)=>{i?s(i):e(a.toString())}))})}async function N(n){return await new Promise((e,s)=>{if(typeof window<"u"&&window.FileReader){const r=new window.FileReader;r.onload=i=>e(i.target.result),r.onerror=i=>s(i.target.error),r.readAsText(n)}else s(new Error("FileReader is not available in this environment."))})}class l{_data;_config={};constructor(t,e){e&&(this._config=e),this._data=t}static fromBuffer(t){return new l(m(t))}static async fromFilePath(t){const e=await R(t);return new l(e)}static async fromBlob(t){const e=await N(t);return new l(e)}config(t){return this._config=t,this}getHeaders(){const[t]=this._data.split("<OFX>"),e=t.split(` | ||
`),s=i=>!!i.trim().length,r=e.filter(s);return _(r,!!this._config.nativeTypes)}getBankTransferList(){const{newListText:t}=h(this.getPartialJsonData()),e=t.slice(10),s=d(e);return JSON.parse(s)}getPartialJsonData(){const[t,e]=this._data.split("<OFX>"),s="<OFX>"+e,{sanitize:r}=this;return s.replace(c,E).replace(S,x).split(` | ||
`).map(D).filter(Boolean).map(r,this).join("")}sanitizeValue(t,e){let s=e.replace(/[{]/g,"").replace(/(},)/g,"");return t.endsWith("AMT")&&(s=O(s)),b(t)&&(s=this.configDate(s)),t==="FITID"?this.configFinancialInstitutionTransactionId(s):this._config.nativeTypes&&p(t,s)?`${s},`:`"${s}",`}sanitize(t){let e=t;const s=e.slice(0,e.indexOf(":")),r=this.sanitizeValue,i=g=>r.call(this,s,g);return t.match(/{(\w|\W)+/)&&(e=e.replace(/({(\w|\W)+)$/,i)),e.search(/(^\w+:)/)<0?e:e.replace(s+":",`"${s}":`)}configFinancialInstitutionTransactionId(t){const{fitId:e}=this._config;return e==="separated"?w(t):`"${t}",`}configDate(t){const{formatDate:e}=this._config;return e?T(t,e):T(t,"y-M-d")}getTransactionsSummary(){const t=this.getContent(),{DTEND:e,DTSTART:s,STRTTRN:r}=t.OFX.BANKMSGSRSV1.STMTTRNRS.STMTRS.BANKTRANLIST,i=F(r);return{dateStart:s,dateEnd:e,...i}}getContent(){const t=this.getPartialJsonData(),{newListText:e,oldListText:s}=h(t),r=t.replace(s,e);return JSON.parse(`{${d(r)}}`)}toJson(){const t=this.getHeaders(),e=this.getContent();return{...t,...e}}}o.Ofx=l,o.blobToString=N,o.bufferToString=m,o.fileFromPathToString=R,o.fixJsonProblems=d,o.formatDate=T}); | ||
}`).replace(/(,",)/,",").slice(0,-1)}function F(e){const t=e.slice(0,12),n=e.slice(12,19),r=e.slice(19),a={date:t,transactionCode:n,protocol:r};return JSON.stringify(a)}function P(e){return e.startsWith("DT")}function G(e){return e.trim()}function w(e,t=!1){return O.includes(e)&&!t?e:e.replace(/[<]/g,` | ||
"`).replace(/[>]/g,'":{')}function D(e,t=!1){return M.includes(e)&&!t?` | ||
${e}`:"},"}function k({fitId:e,fitValue:t}){return e==="separated"?F(t):`"${t}",`}function _(e){const t=e.search(","),n=e.search(".");return t>n?e.replace(/[.]/g,"").replace(/[,]/g,"."):e.replace(/[,]/g,"")}function J({dateString:e,formatDate:t}){return t?m(e,t):m(e,"y-M-d")}function K(e){let t=e.value.replace(/[{]/g,"").replace(/(},)/g,"");const n=e.field.replace(/['"]/g,"");return n.endsWith("AMT")&&(t=_(t)),P(n)&&(t=J({dateString:t,formatDate:e.formatDate})),n==="FITID"?k({fitId:e.fitId,fitValue:t}):e.nativeTypes&&p(n,t)?`${Number(t)},`:`"${t}",`}function $(e,t){let n=e;const r=n.slice(0,n.indexOf(":")),a=s=>K({field:r,value:s,...t});return e.match(/{(\w|\W)+/)&&(n=n.replace(/({(\w|\W)+)$/,a)),n}function p(e,t){return e.endsWith("ID")||e.endsWith("NUM")?!1:!isNaN(Number(t))}function b(e){const t=e.indexOf(S),n=e.lastIndexOf(T)+T.length,r=e.substring(t,n),a=new RegExp(S,"g"),s=new RegExp(T,"g"),i=`"STRTTRN":[${r.replace(a,"{").replace(s,"},")}]`;return{oldListText:e,newListText:e.replace(r,i)}}function y(e){const t=e.substring(e.indexOf(E),e.indexOf(d)+d.length),n=b(t);return{newBankStatementTransactions:n.newListText,oldBankStatementTransactions:n.oldListText}}function A(e){const t=e.substring(e.indexOf(x),e.indexOf(g)+g.length),n=b(t);return{newCreditCardStatementTransactions:n.newListText,oldCreditCardStatementTransactions:n.oldListText}}function j(e,t){const n={};for(const r of e){const[a,s]=r.split(":"),i=a.replace(` | ||
`,"");n[i]=t&&p(a,s)?Number(s):s}return n}function z(e){return e.reduce((t,n)=>n.TRNTYPE.toLocaleLowerCase().startsWith("deb")?(t.amountOfDebits++,t.debit+=Number(n.TRNAMT.replace("-","")),t):(t.amountOfCredits++,t.credit+=Number(n.TRNAMT),t),{credit:0,debit:0,amountOfCredits:0,amountOfDebits:0})}class V{config;internConfig={};constructor(t){this.config=t,this.internConfig=t}getConfig(){return this.internConfig}sanitizeRow(t){return $(t,this.internConfig)}getPartialJsonData(t){const[n,r]=t.split("<OFX>"),a="<OFX>"+r,{sanitizeRow:s}=this;return a.replace(u,i=>D(i)).replace(N,i=>w(i)).split(` | ||
`).map(G).filter(Boolean).map(s,this).join("")}}function R(e){return e.toString()}async function h(e){return await new Promise((n,r)=>{import("fs").then(a=>a.readFile(e,(s,i)=>{s?r(s):n(i.toString())}))})}async function C(e){return await new Promise((n,r)=>{if(typeof window<"u"&&window.FileReader){const a=new window.FileReader;a.onload=s=>n(s.target.result),a.onerror=s=>r(s.target.error),a.readAsText(e)}else r(new Error("FileReader is not available in this environment."))})}class o{data;dataRead="";constructor(t){this.data=t,t&&(this.dataRead=t)}getData(){return this.dataRead}fromString(t){return new o(t)}fromBuffer(t){return new o(R(t))}async fromFilePath(t){return new o(await h(t))}async fromBlob(t){return new o(await C(t))}static fromString(t){return new o(t)}static fromBuffer(t){return new o(R(t))}static async fromFilePath(t){return new o(await h(t))}static async fromBlob(t){return new o(await C(t))}}class W{configInstance={}}class I extends W{setConfig(t){this.configInstance=t}getBankTransferList(t){const{newBankStatementTransactions:n}=y(this.configInstance.getPartialJsonData(t));return JSON.parse(`{${l(n)}}`)?.BANKMSGSRSV1?.STMTTRNRS?.STMTRS?.BANKTRANLIST?.STRTTRN}getCreditCardTransferList(t){const{newCreditCardStatementTransactions:n}=A(this.configInstance.getPartialJsonData(t));return JSON.parse(`{${l(n)}}`)?.CREDITCARDMSGSRSV1?.CCSTMTTRNRS?.CCSTMTRS?.BANKTRANLIST?.STRTTRN}getTransactionsSummary(t){const n=this.getContent(t),{DTEND:r,DTSTART:a,STRTTRN:s}=n.OFX.BANKMSGSRSV1.STMTTRNRS.STMTRS.BANKTRANLIST,i=z(s);return{dateStart:a,dateEnd:r,...i}}getContent(t){const n=this.configInstance.getPartialJsonData(t),{newBankStatementTransactions:r,oldBankStatementTransactions:a}=y(n),{newCreditCardStatementTransactions:s,oldCreditCardStatementTransactions:i}=A(n),X=n.replace(i,s).replace(a,r);return JSON.parse(`{${l(X)}}`)}}class L{customExtractor;customExtractorInstance;dataReaderInstance=new o("");constructor(t){this.customExtractor=t,this.customExtractorInstance=t||new I,this.config({})}data(t){return this.dataReaderInstance=t,this}config(t){return this.customExtractorInstance.setConfig(new V(t)),this}getHeaders(){const[t]=this.dataReaderInstance.getData().split("<OFX>"),n=t.split(` | ||
`),r=s=>!!s.trim().length,a=n.filter(r);return j(a,!!this.customExtractorInstance.configInstance.getConfig().nativeTypes)}getBankTransferList(){return this.customExtractorInstance.getBankTransferList(this.dataReaderInstance.getData())}getCreditCardTransferList(){return this.customExtractorInstance.getCreditCardTransferList(this.dataReaderInstance.getData())}getTransactionsSummary(){return this.customExtractorInstance.getTransactionsSummary(this.dataReaderInstance.getData())}getContent(){return this.customExtractorInstance.getContent(this.dataReaderInstance.getData())}toJson(){const t=this.getHeaders(),n=this.customExtractorInstance.getContent(this.dataReaderInstance.getData());return{...t,...n}}}class f{extractor;constructor(t,n){this.extractor=new L(new I),this.extractor.data(new o(t)),this.extractor.config(n||{})}static fromBuffer(t){return new f(o.fromBuffer(t).getData())}static async fromFilePath(t){const n=await o.fromFilePath(t);return new f(n.getData())}static async fromBlob(t){const n=await o.fromBlob(t);return new f(n.getData())}config(t){return this.extractor.config(t),this}getHeaders(){return this.extractor.getHeaders()}getBankTransferList(){return this.extractor.getBankTransferList()}getTransactionsSummary(){return this.extractor.getTransactionsSummary()}getContent(){return this.extractor.getContent()}toJson(){return this.extractor.toJson()}}c.Extractor=L,c.Ofx=f,c.OfxExtractor=I,c.Reader=o,c.blobToString=C,c.bufferToString=R,c.fileFromPathToString=h,c.fixJsonProblems=l,c.formatDate=m}); |
{ | ||
"name": "ofx-data-extractor", | ||
"version": "1.2.4", | ||
"version": "1.3.0", | ||
"keywords": [ | ||
@@ -5,0 +5,0 @@ "ofx", |
@@ -97,3 +97,18 @@ # [ofx-data-extractor](https://www.npmjs.com/package/ofx-data-extractor) | ||
### Contributors | ||
<table> | ||
<tbody> | ||
<tr> | ||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/segunadebayo"><img src="https://avatars2.githubusercontent.com/u/6916170?v=4?s=64" width="64px;" alt="Segun Adebayo"/><br /><sub><b>Segun Adebayo</b></sub></a><br /><a href="https://github.com/chakra-ui/chakra-ui/commits?author=segunadebayo" title="Code">💻</a> <a href="#maintenance-segunadebayo" title="Maintenance">🚧</a> <a href="https://github.com/chakra-ui/chakra-ui/commits?author=segunadebayo" title="Documentation">📖</a> <a href="#example-segunadebayo" title="Examples">💡</a> <a href="#design-segunadebayo" title="Design">🎨</a></td> | ||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tioluwani94"><img src="https://avatars1.githubusercontent.com/u/11310046?v=4?s=64" width="64px;" alt="Tioluwani Kolawole"/><br /><sub><b>Tioluwani Kolawole</b></sub></a><br /><a href="https://github.com/chakra-ui/chakra-ui/commits?author=tioluwani94" title="Documentation">📖</a> <a href="#example-tioluwani94" title="Examples">💡</a> <a href="#maintenance-tioluwani94" title="Maintenance">🚧</a></td> | ||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/devanshj"><img src="https://avatars0.githubusercontent.com/u/30295578?v=4?s=64" width="64px;" alt="Devansh Jethmalani"/><br /><sub><b>Devansh Jethmalani</b></sub></a><br /><a href="https://github.com/chakra-ui/chakra-ui/commits?author=devanshj" title="Code">💻</a></td> | ||
<td align="center" valign="top" width="14.28%"><a href="http://adrianaleixandre.com"><img src="https://avatars3.githubusercontent.com/u/920212?v=4?s=64" width="64px;" alt="Adrian Aleixandre"/><br /><sub><b>Adrian Aleixandre</b></sub></a><br /><a href="https://github.com/chakra-ui/chakra-ui/commits?author=Vynlar" title="Code">💻</a> <a href="https://github.com/chakra-ui/chakra-ui/commits?author=Vynlar" title="Documentation">📖</a></td> | ||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lee-reinhardt"><img src="https://avatars1.githubusercontent.com/u/980089?v=4?s=64" width="64px;" alt="Lee"/><br /><sub><b>Lee</b></sub></a><br /><a href="https://github.com/chakra-ui/chakra-ui/commits?author=lee-reinhardt" title="Documentation">📖</a></td> | ||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kripod"><img src="https://avatars3.githubusercontent.com/u/14854048?v=4?s=64" width="64px;" alt="Kristóf Poduszló"/><br /><sub><b>Kristóf Poduszló</b></sub></a><br /><a href="https://github.com/chakra-ui/chakra-ui/commits?author=kripod" title="Code">💻</a> <a href="#ideas-kripod" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/chakra-ui/chakra-ui/issues?q=author%3Akripod" title="Bug reports">🐛</a> <a href="https://github.com/chakra-ui/chakra-ui/commits?author=kripod" title="Documentation">📖</a></td> | ||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wKovacs64"><img src="https://avatars1.githubusercontent.com/u/1288694?v=4?s=64" width="64px;" alt="Justin Hall"/><br /><sub><b>Justin Hall</b></sub></a><br /><a href="https://github.com/chakra-ui/chakra-ui/commits?author=wKovacs64" title="Code">💻</a></td> | ||
</tr> | ||
</tbody> | ||
</table | ||
[license-image]: https://img.shields.io/badge/license-MIT-blue.svg?style=flat | ||
[license-url]: LICENSE |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
34580
19
359
114
1