UNPKG

sec-edgar-api

Version:

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

143 lines (142 loc) 5.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var XMLParser_1 = require("../XMLParser"); var util_xbrl_1 = require("./util-xbrl"); /* eslint-disable @typescript-eslint/no-explicit-any */ var SchemaParser = /** @class */ (function () { function SchemaParser() { this.xmlParser = new XMLParser_1.default(); } SchemaParser.prototype.parseAppInfo = function (value) { var _this = this; value = util_xbrl_1.default.toObject(value); var appinfo = {}; for (var key in value) { var parsedKey = util_xbrl_1.default.parseKey(key); switch (parsedKey) { case 'roleType': appinfo.roleType = util_xbrl_1.default.toArray(value[key]).map(function (v) { return _this.parseRoleType(v); }); break; case 'linkbaseRef': appinfo.linkbaseRef = util_xbrl_1.default.toArray(value[key]).map(function (v) { return _this.parseLinkbaseRef(v); }); break; } } return appinfo; }; SchemaParser.prototype.parseRoleType = function (value) { value = util_xbrl_1.default.toObject(value); var roleType = {}; for (var key in value) { var parsedKey = util_xbrl_1.default.parseKey(key); switch (parsedKey) { case 'usedOn': roleType[parsedKey] = util_xbrl_1.default.toArray(value[key]).map(function (v) { return util_xbrl_1.default.toString(v['#text']); }); break; default: roleType[parsedKey] = util_xbrl_1.default.toString(value[key]); break; } } return roleType; }; SchemaParser.prototype.parseLinkbaseRef = function (value) { value = util_xbrl_1.default.toObject(value); var item = {}; for (var key in value) { var parsedKey = util_xbrl_1.default.parseKey(key); item[parsedKey] = util_xbrl_1.default.toString(value[key]); } return item; }; SchemaParser.prototype.parseAnnotation = function (value) { value = util_xbrl_1.default.toObject(value); var annotation = {}; for (var key in value) { var parsedKey = util_xbrl_1.default.parseKey(key); switch (parsedKey) { case 'appinfo': annotation.appinfo = this.parseAppInfo(value[key]); break; case 'documentation': annotation.documentation = util_xbrl_1.default.toString(value[key]); break; } } return annotation; }; SchemaParser.prototype.parseElement = function (value) { value = util_xbrl_1.default.toObject(value); var element = { id: util_xbrl_1.default.toString(value['@_id']), name: util_xbrl_1.default.toString(value['@_name']), type: util_xbrl_1.default.toString(value['@_type']), }; for (var key in value) { var parsedKey = util_xbrl_1.default.parseKey(key); switch (util_xbrl_1.default.parseKey(key)) { case 'abstract': case 'nillable': case 'headUsable': element[parsedKey] = util_xbrl_1.default.toBoolean(value[key]); break; case 'complexType': case 'annotation': element[parsedKey] = util_xbrl_1.default.toObject(value[key]); break; default: element[parsedKey] = util_xbrl_1.default.toString(value[key]); break; } } return element; }; SchemaParser.prototype.parseImport = function (value) { value = util_xbrl_1.default.toObject(value); return { namespace: util_xbrl_1.default.toString(value['@_namespace']), schemaLocation: util_xbrl_1.default.toString(value['@_schemaLocation']), }; }; SchemaParser.prototype.parse = function (xml) { var _this = this; var xbrl = util_xbrl_1.default.extractXbrlObject(this.xmlParser.parse(xml)); var schemaRaw = null; for (var key in xbrl) { if (util_xbrl_1.default.parseKey(key) !== 'schema') continue; schemaRaw = xbrl[key]; break; } var value = schemaRaw === null ? xbrl : schemaRaw; var schema = { xmlns: util_xbrl_1.default.toString(value['@_xmlns']), _xmlnsProps: {}, }; for (var key in value) { var parsedKey = util_xbrl_1.default.parseKey(key); switch (parsedKey) { case 'annotation': schema.annotation = this.parseAnnotation(value[key]); break; case 'element': schema.element = util_xbrl_1.default.toArray(value[key]).map(function (v) { return _this.parseElement(v); }); break; case 'import': schema.import = util_xbrl_1.default.toArray(value[key]).map(function (v) { return _this.parseImport(v); }); break; default: if (key.startsWith('@_xmlns:')) { schema._xmlnsProps[parsedKey] = util_xbrl_1.default.toString(value[key]); } else { schema[parsedKey] = util_xbrl_1.default.toString(value[key]); } break; } } return schema; }; return SchemaParser; }()); exports.default = SchemaParser;