UNPKG

sec-edgar-api

Version:

Fetch and parse SEC earnings reports and other filings. Useful for financial analysis.

70 lines (69 loc) 5.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var DocumentXmlSplitter_1 = require("../DocumentXmlSplitter"); var HeaderParser_1 = require("./HeaderParser"); var InstanceParser_1 = require("./InstanceParser"); var LinkbaseParser_1 = require("./LinkbaseParser"); var SchemaParser_1 = require("./SchemaParser"); var XBRLParser = /** @class */ (function () { function XBRLParser() { this.splitter = new DocumentXmlSplitter_1.default(); this.headerParser = new HeaderParser_1.default(); this.linkbaseParser = new LinkbaseParser_1.default(); this.instanceParser = new InstanceParser_1.default(); this.schemaParser = new SchemaParser_1.default(); } XBRLParser.prototype.filterDocuments = function (documents) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; var xmlDocs = documents.filter(function (doc) { return doc.fileName.endsWith('.xml') || doc.fileName.endsWith('.xsd'); }); var instanceDoc = (_a = xmlDocs.find(function (doc) { return doc.description.toLowerCase().includes('instance doc') || doc.fileName.endsWith('_htm.xml') || (doc.content.includes('<us-gaap') && doc.content.includes('<context')); })) !== null && _a !== void 0 ? _a : null; return { instanceDoc: instanceDoc, schemaDoc: (_b = xmlDocs.find(function (doc) { return doc.fileName.endsWith('.xsd'); })) !== null && _b !== void 0 ? _b : null, linkbasePresentationDoc: (_d = (_c = xmlDocs.find(function (doc) { return doc.fileName.endsWith('_pre.xml'); })) !== null && _c !== void 0 ? _c : xmlDocs.find(function (doc) { return doc !== instanceDoc && doc.content.includes('link:presentationLink>'); })) !== null && _d !== void 0 ? _d : null, linkbaseDefinitionDoc: (_f = (_e = xmlDocs.find(function (doc) { return doc.fileName.endsWith('_def.xml'); })) !== null && _e !== void 0 ? _e : xmlDocs.find(function (doc) { return doc !== instanceDoc && doc.content.includes('link:definitionLink>'); })) !== null && _f !== void 0 ? _f : null, linkbaseCalculationDoc: (_h = (_g = xmlDocs.find(function (doc) { return doc.fileName.endsWith('_cal.xml'); })) !== null && _g !== void 0 ? _g : xmlDocs.find(function (doc) { return doc !== instanceDoc && doc.content.includes('link:calculationLink>'); })) !== null && _h !== void 0 ? _h : null, linkbaseLabelDoc: (_k = (_j = xmlDocs.find(function (doc) { return doc.fileName.endsWith('_lab.xml'); })) !== null && _j !== void 0 ? _j : xmlDocs.find(function (doc) { return doc !== instanceDoc && doc.content.includes('link:labelLink>'); })) !== null && _k !== void 0 ? _k : null, }; }; XBRLParser.prototype.createXbrlDocument = function (doc, xbrl) { if (!doc) return null; var description = doc.description, fileName = doc.fileName, sequence = doc.sequence, type = doc.type; return xbrl ? { fileName: fileName, description: description, sequence: sequence, type: type, xbrl: xbrl } : null; }; XBRLParser.prototype.parse = function (xml, options) { var _a, _b, _c, _d, _e, _f; var _g = options !== null && options !== void 0 ? options : {}, _h = _g.includeInstance, includeInstance = _h === void 0 ? true : _h, _j = _g.includeLinkbases, includeLinkbases = _j === void 0 ? true : _j, _k = _g.includeSchema, includeSchema = _k === void 0 ? true : _k; var documents = this.splitter.splitDocumentXml({ xml: xml }).documents; var _l = this.filterDocuments(documents), instanceDoc = _l.instanceDoc, linkbaseCalculationDoc = _l.linkbaseCalculationDoc, linkbaseDefinitionDoc = _l.linkbaseDefinitionDoc, linkbaseLabelDoc = _l.linkbaseLabelDoc, linkbasePresentationDoc = _l.linkbasePresentationDoc, schemaDoc = _l.schemaDoc; var header = this.headerParser.parse(xml); var instance = includeInstance ? this.instanceParser.parse((_a = instanceDoc === null || instanceDoc === void 0 ? void 0 : instanceDoc.content) !== null && _a !== void 0 ? _a : '') : null; var schema = includeSchema ? this.schemaParser.parse((_b = schemaDoc === null || schemaDoc === void 0 ? void 0 : schemaDoc.content) !== null && _b !== void 0 ? _b : '') : null; var linkbasePresentation = includeLinkbases ? this.linkbaseParser.parse((_c = linkbasePresentationDoc === null || linkbasePresentationDoc === void 0 ? void 0 : linkbasePresentationDoc.content) !== null && _c !== void 0 ? _c : '') : null; var linkbaseCalculation = includeLinkbases ? this.linkbaseParser.parse((_d = linkbaseCalculationDoc === null || linkbaseCalculationDoc === void 0 ? void 0 : linkbaseCalculationDoc.content) !== null && _d !== void 0 ? _d : '') : null; var linkbaseDefinition = includeLinkbases ? this.linkbaseParser.parse((_e = linkbaseDefinitionDoc === null || linkbaseDefinitionDoc === void 0 ? void 0 : linkbaseDefinitionDoc.content) !== null && _e !== void 0 ? _e : '') : null; var linkbaseLabel = includeLinkbases ? this.linkbaseParser.parse((_f = linkbaseLabelDoc === null || linkbaseLabelDoc === void 0 ? void 0 : linkbaseLabelDoc.content) !== null && _f !== void 0 ? _f : '') : null; return { header: header, instance: this.createXbrlDocument(instanceDoc, instance), schema: this.createXbrlDocument(schemaDoc, schema), linkbasePresentation: this.createXbrlDocument(linkbasePresentationDoc, linkbasePresentation), linkbaseCalculation: this.createXbrlDocument(linkbaseCalculationDoc, linkbaseCalculation), linkbaseDefinition: this.createXbrlDocument(linkbaseDefinitionDoc, linkbaseDefinition), linkbaseLabel: this.createXbrlDocument(linkbaseLabelDoc, linkbaseLabel), }; }; return XBRLParser; }()); exports.default = XBRLParser;