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