UNPKG

sec-edgar-api

Version:

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

100 lines (99 loc) 5.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var XMLParser_1 = require("../XMLParser"); var util_xbrl_1 = require("./util-xbrl"); var InstanceParser = /** @class */ (function () { function InstanceParser() { this.xmlParser = new XMLParser_1.default(); } InstanceParser.prototype.parseContext = function (node) { var _a, _b, _c, _d, _e, _f, _g; var context = util_xbrl_1.default.toObject(node); var id = util_xbrl_1.default.toString(context['@_id']); var entity = util_xbrl_1.default.toObject((_a = context['xbrli:entity']) !== null && _a !== void 0 ? _a : context['entity']); var entityIdentifier = util_xbrl_1.default.toObject((_b = entity['xbrli:identifier']) !== null && _b !== void 0 ? _b : entity['identifier']); var entityIdentifierText = util_xbrl_1.default.toString(entityIdentifier['#text']); var entityIdentifierScheme = util_xbrl_1.default.toString(entityIdentifier['@_scheme']); var segment = util_xbrl_1.default.toObject((_c = entity['xbrli:segment']) !== null && _c !== void 0 ? _c : entity['segment']); var segmentExplicitMembers = util_xbrl_1.default.toArray(segment['xbrldi:explicitMember']); var segmentTypedMembers = util_xbrl_1.default.toArray(segment['xbrldi:typedMember']); var segments = []; segmentTypedMembers.forEach(function (member) { var _a; member = util_xbrl_1.default.toObject(member); var dimension = (_a = member['@_dimension']) !== null && _a !== void 0 ? _a : ''; segments.push({ value: util_xbrl_1.default.toString(member["".concat(dimension, ".domain")]), dimension: util_xbrl_1.default.toString(dimension), }); }); segmentExplicitMembers.forEach(function (member) { member = util_xbrl_1.default.toObject(member); segments.push({ value: util_xbrl_1.default.toString(member['#text']), dimension: util_xbrl_1.default.toString(member['@_dimension']), }); }); var period = util_xbrl_1.default.toObject((_d = context['xbrli:period']) !== null && _d !== void 0 ? _d : context['period']); var periodObj = {}; var startDate = (_e = period['xbrli:startDate']) !== null && _e !== void 0 ? _e : period['startDate']; var endDate = (_f = period['xbrli:endDate']) !== null && _f !== void 0 ? _f : period['endDate']; var instant = (_g = period['xbrli:instant']) !== null && _g !== void 0 ? _g : period['instant']; if (startDate) { periodObj.startDate = util_xbrl_1.default.toString(startDate); } if (endDate) { periodObj.endDate = util_xbrl_1.default.toString(endDate); } if (instant) { periodObj.instant = util_xbrl_1.default.toString(instant); } return { id: id, entity: { identifier: { value: entityIdentifierText, scheme: entityIdentifierScheme, }, segment: segments, }, period: periodObj, }; }; InstanceParser.prototype.parse = function (xml) { var _this = this; var _a, _b, _c, _d; var xbrl = util_xbrl_1.default.extractXbrlObject(this.xmlParser.parse(xml)); var contexts = util_xbrl_1.default .toArray((_c = (_b = (_a = xbrl === null || xbrl === void 0 ? void 0 : xbrl.context) !== null && _a !== void 0 ? _a : xbrl === null || xbrl === void 0 ? void 0 : xbrl['xbrli:context']) !== null && _b !== void 0 ? _b : xbrl === null || xbrl === void 0 ? void 0 : xbrl['xbrl:context']) !== null && _c !== void 0 ? _c : []) .map(function (context) { return _this.parseContext(context); }); var units = util_xbrl_1.default.toArray((_d = xbrl === null || xbrl === void 0 ? void 0 : xbrl.unit) !== null && _d !== void 0 ? _d : []).map(function (unit) { var _a, _b, _c, _d, _e, _f, _g; return ({ id: (_a = unit['@_id']) !== null && _a !== void 0 ? _a : '', measure: (_g = (_e = (_c = (_b = unit['xbrli:measure']) === null || _b === void 0 ? void 0 : _b['#text']) !== null && _c !== void 0 ? _c : (_d = unit['measure']) === null || _d === void 0 ? void 0 : _d['#text']) !== null && _e !== void 0 ? _e : (_f = unit['xbrl:measure']) === null || _f === void 0 ? void 0 : _f['#text']) !== null && _g !== void 0 ? _g : '', }); }); var factElements = []; for (var name_1 in xbrl) { for (var _i = 0, _e = util_xbrl_1.default.toArray(xbrl[name_1]); _i < _e.length; _i++) { var element = _e[_i]; if (!element['@_contextRef']) continue; var factElement = { name: name_1, id: '', contextRef: '' }; for (var key in element) { if (key.startsWith('@_')) { factElement[key.substring(2)] = element[key]; } else if (key === '#text') { factElement.text = element[key]; } } factElements.push(factElement); } } return { factElements: factElements, contexts: contexts, units: units }; }; return InstanceParser; }()); exports.default = InstanceParser;