UNPKG

sec-edgar-api

Version:

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

113 lines (112 loc) 5.46 kB
"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;