sec-edgar-api
Version:
Fetch and parse SEC earnings reports and other filings. Useful for financial analysis.
70 lines (69 loc) • 5.94 kB
JavaScript
;
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;