UNPKG

sec-edgar-api

Version:

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

111 lines (110 loc) 4.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ObjectUtil_1 = require("../ObjectUtil"); var XMLParser_1 = require("../XMLParser"); var util_xbrl_1 = require("./util-xbrl"); var LinkbaseParser = /** @class */ (function () { function LinkbaseParser(args) { this.objectUtil = new ObjectUtil_1.default(); var _a = (args !== null && args !== void 0 ? args : {}).xmlParser, xmlParser = _a === void 0 ? new XMLParser_1.default() : _a; this.xmlParser = xmlParser; } LinkbaseParser.prototype.parse = function (xml) { var parsed = util_xbrl_1.default.extractXbrlObject(this.xmlParser.parse(xml)); return this.parseLinkbaseDocument(parsed); }; LinkbaseParser.prototype.parseLinkbaseDocument = function (value) { var _this = this; value = util_xbrl_1.default.toObject(value); for (var key in value) { var parsedKey = util_xbrl_1.default.parseKey(key); switch (parsedKey) { case 'linkbase': return this.parseLinkbase(value[key]); } } // if linkbase is not found, try iterating through keys to find it var linkbase = null; this.objectUtil.iterateKeysDeep(value, function (d) { var k = util_xbrl_1.default.parseKey(d.key); if (k === 'linkbase') { d.breakLoop(); linkbase = _this.parseLinkbase(d.value); } }); return linkbase; }; LinkbaseParser.prototype.parseItem = function (value) { value = util_xbrl_1.default.toObject(value); var item = {}; for (var key in value) { var parsedKey = util_xbrl_1.default.parseKey(key); switch (parsedKey) { case 'closed': item[parsedKey] = util_xbrl_1.default.toBoolean(value[key]); break; case 'priority': case 'order': case 'weight': item[parsedKey] = util_xbrl_1.default.toNumber(value[key]); break; default: item[parsedKey] = util_xbrl_1.default.toString(value[key]); break; } } return item; }; LinkbaseParser.prototype.parseLinkbase = function (value) { var _this = this; value = util_xbrl_1.default.toObject(value); var linkbase = {}; for (var key in value) { var parsedKey = util_xbrl_1.default.parseKey(key); switch (parsedKey) { case 'referenceLink': case 'labelLink': case 'presentationLink': case 'calculationLink': case 'definitionLink': linkbase[parsedKey] = util_xbrl_1.default.toArray(value[key]).map(function (v) { return _this.parseItemExtended(v); }); break; case 'roleRef': case 'arcroleRef': linkbase[parsedKey] = util_xbrl_1.default.toArray(value[key]).map(function (v) { return _this.parseItem(v); }); break; default: linkbase[parsedKey] = util_xbrl_1.default.toString(value[key]); break; } } return linkbase; }; LinkbaseParser.prototype.parseItemExtended = function (value) { var _this = this; var item = { type: 'extended', }; for (var key in value) { var parsedKey = util_xbrl_1.default.parseKey(key); switch (parsedKey) { case 'loc': case 'calculationArc': case 'definitionArc': case 'labelArc': case 'presentationArc': case 'footnoteArc': case 'label': case 'footnote': item[parsedKey] = util_xbrl_1.default.toArray(value[key]).map(function (v) { return _this.parseItem(v); }); break; default: item[parsedKey] = util_xbrl_1.default.toString(value[key]); break; } } return item; }; return LinkbaseParser; }()); exports.default = LinkbaseParser;