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