control-see
Version:
Control Util Documentos Electronicos SUNAT
87 lines • 2.96 kB
JavaScript
import { xml } from 'xml-serializer-ts';
import { RDocument, CDR, ZipSerializer } from '@fe/common/exchange';
import { Utils, XmlUtilsCDR } from '@fe/utils';
import * as AdmZip from 'adm-zip';
import * as jszip from 'jszip';
export class XMLSerializer {
constructor() {
this.utils = new Utils();
}
xmlGenerate(xmlStructure) {
const document = new RDocument();
try {
document.xmlDocument = xml.serialize(xmlStructure);
document.success = true;
return document;
}
catch (e) {
document.success = false;
document.message = e.toString();
document.origin = 'GenerarXML';
throw document;
}
}
async zipGenerate(xml, fileName) {
const rzip = new ZipSerializer();
try {
const zip = new jszip();
zip.file(`${fileName}.xml`, xml);
rzip.contentFile = await zip.generateAsync({ type: 'base64' });
rzip.success = true;
return rzip;
}
catch (e) {
rzip.success = false;
rzip.message = e;
rzip.origin = 'GenerarZip';
throw rzip;
}
}
async zipCompress(xml, fileName) {
const rzip = new ZipSerializer();
try {
const zip = new AdmZip();
zip.addFile(`${fileName}.xml`, Buffer.from(xml, 'utf-8'));
rzip.contentFile = zip.toBuffer().toString('base64');
rzip.success = true;
return rzip;
}
catch (e) {
rzip.success = false;
rzip.message = e;
rzip.origin = 'ComprimirZip';
throw rzip;
}
}
async documentResponseGenerate(constancy) {
let cdr = new CDR();
try {
const zip = await jszip.loadAsync(constancy, { base64: true });
const files = Object.keys(zip.files);
if (files.length === 0) {
cdr.message = 'Respuesta de SUNAT vacio.';
cdr.success = false;
}
else {
for (let i = 0; i < files.length; i++) {
const fileName = zip.files[files[i]].name;
if (!fileName.endsWith('.xml'))
continue;
const xmlDoc = await zip.file(fileName).async('text');
const xmlUtil = new XmlUtilsCDR(xmlDoc);
cdr = xmlUtil.reponseCDR;
cdr.fileName = fileName.split('.').shift();
cdr.success = true;
}
}
return cdr;
}
catch (e) {
cdr.success = false;
cdr.message = e;
cdr.origin = 'GenerarArchivoCDR';
throw cdr;
}
}
}
//# sourceMappingURL=serializer.js.map