sec-edgar-api
Version:
Fetch and parse SEC earnings reports and other filings. Useful for financial analysis.
113 lines (112 loc) • 5.46 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseCurrentFilingsXbrl = void 0;
var XMLParser_1 = require("../XMLParser");
function parseCurrentFilingsXbrl(params) {
var xml = params.xml;
var xmlParser = new XMLParser_1.default();
var result = {
title: '',
link: '',
language: '',
lastBuildDate: '',
pubDate: '',
description: '',
items: [],
};
var lastOpenTag = '';
xmlParser.iterateXML({
xml: xml,
onInnerText: function (text) {
var _a, _b;
var textTrimmed = text.trim();
var items = result.items;
var latestItem = ((_a = items[items.length - 1]) !== null && _a !== void 0 ? _a : result);
var tag = textTrimmed ? (_b = lastOpenTag.split(':').pop()) !== null && _b !== void 0 ? _b : '' : '';
if ((latestItem === null || latestItem === void 0 ? void 0 : latestItem[tag]) === undefined || !textTrimmed)
return;
var value = textTrimmed;
switch (tag) {
case 'filingDate': {
var _c = value.split('/'), month = _c[0], day = _c[1], year = _c[2];
value = "".concat(year, "-").concat(month.padStart(2, '0'), "-").concat(day.padStart(2, '0'));
break;
}
case 'acceptanceDatetime': {
var year = value.substring(0, 4);
var month = value.substring(4, 6);
var day = value.substring(6, 8);
var hour = value.substring(8, 10);
var minute = value.substring(10, 12);
var second = value.substring(12, 14);
value = "".concat(year, "-").concat(month, "-").concat(day, "T").concat(hour, ":").concat(minute, ":").concat(second, ":000Z");
}
}
latestItem[tag] = typeof latestItem[tag] === 'number' ? Number(value) : value;
},
onOpenTag: function (tagName, attributes) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
lastOpenTag = tagName;
switch (tagName) {
case 'edgar:xbrlFile': {
var item = result.items[result.items.length - 1];
var attributesMap = xmlParser.mapAttributes(attributes);
item === null || item === void 0 ? void 0 : item.files.push({
url: (_a = attributesMap.get('edgar:url')) !== null && _a !== void 0 ? _a : '',
description: (_b = attributesMap.get('edgar:description')) !== null && _b !== void 0 ? _b : '',
file: (_c = attributesMap.get('edgar:file')) !== null && _c !== void 0 ? _c : '',
inlineXBRL: attributesMap.get('edgar:inlineXBRL') === 'true',
sequence: Number((_d = attributesMap.get('edgar:sequence')) !== null && _d !== void 0 ? _d : -1),
size: Number((_e = attributesMap.get('edgar:size')) !== null && _e !== void 0 ? _e : -1),
type: (_f = attributesMap.get('edgar:type')) !== null && _f !== void 0 ? _f : '',
});
break;
}
case 'item': {
result.items.push({
title: '',
url: '',
companyName: '',
cikNumber: 0,
link: '',
period: '',
pubDate: '',
fileNumber: '',
filingDate: '',
fiscalYearEnd: '',
formType: '',
acceptanceDatetime: '',
accessionNumber: '',
assignedSic: 0,
assistantDirector: '',
enclosureUrl: '',
enclosureLength: 0,
enclosureType: '',
guid: '',
description: '',
files: [],
});
break;
}
case 'enclosure': {
var latestItem = result.items[result.items.length - 1];
if (!latestItem)
return;
var attributesMap = xmlParser.mapAttributes(attributes);
latestItem.enclosureUrl = (_g = attributesMap.get('url')) !== null && _g !== void 0 ? _g : '';
latestItem.enclosureLength = Number((_h = attributesMap.get('length')) !== null && _h !== void 0 ? _h : 0);
latestItem.enclosureType = (_j = attributesMap.get('type')) !== null && _j !== void 0 ? _j : '';
}
}
},
});
// add url to each filing
result.items.forEach(function (item) {
var cikNumber = item.cikNumber, accessionNumber = item.accessionNumber;
var accessionNoHyphen = accessionNumber.replace(/-/g, '');
var filePath = "".concat(Number(cikNumber), "/").concat(accessionNoHyphen, "/").concat(accessionNumber, ".txt");
item.url = "https://www.sec.gov/Archives/edgar/data/".concat(filePath);
});
return result;
}
exports.parseCurrentFilingsXbrl = parseCurrentFilingsXbrl;