UNPKG

sec-edgar-api

Version:

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

136 lines (135 loc) 6.51 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); var calculation_map_1 = require("../../util/calculation-map"); var key_translations_1 = require("../../util/key-translations"); var util_map_1 = require("../../util/util-map"); var ReportRawBuilder_1 = require("../ReportRawBuilder"); var PropertyResolver_1 = require("./PropertyResolver"); var ReportResolvable_1 = require("./ReportResolvable"); var ReportWrapper_1 = require("./ReportWrapper"); /** * Takes company facts data from the SEC and translates them to reports as json objects. */ var ReportParser = /** @class */ (function () { function ReportParser(args) { var _a = args !== null && args !== void 0 ? args : {}, _b = _a.propertyResolver, propertyResolver = _b === void 0 ? new PropertyResolver_1.default() : _b, _c = _a.reportBuilder, reportBuilder = _c === void 0 ? new ReportRawBuilder_1.default() : _c, _d = _a.keyTranslator, keyTranslator = _d === void 0 ? key_translations_1.default : _d, _e = _a.defaultCalculationMap, defaultCalculationMap = _e === void 0 ? util_map_1.utilMap.expandMap(calculation_map_1.calculationMapCondensed) : _e; this.keyTranslator = keyTranslator; this.propertyResolver = propertyResolver; this.reportBuilder = reportBuilder; this.defaultCalculationMap = defaultCalculationMap; } /** * Same as parseReports but accepts ReportRaw[] instead of CompanyFactListData * * @deprecated Formerly parseReportsFromRaw. Will be removed in future version. */ ReportParser.prototype.parseReportsFromRawLegacy = function (params) { var reportsRaw = params.reportsRaw, _a = params.usePropertyResolver, usePropertyResolver = _a === void 0 ? true : _a; var reportByYearQuarter = new Map(); var reportsRawFiltered = reportsRaw; this.translateReportsRaw(reportsRawFiltered, function (report, reportRaw) { var fiscalPeriod = report.fiscalPeriod, fiscalYear = report.fiscalYear; var keyReport = "".concat(fiscalYear, "_").concat(fiscalPeriod); reportByYearQuarter.set(keyReport, new ReportWrapper_1.default(report, reportRaw, reportByYearQuarter)); return report; }); var reportWrappers = Array.from(reportByYearQuarter.values()); if (usePropertyResolver) { this.propertyResolver.resolveAll(reportWrappers); } return reportWrappers; }; /** * Same as parseReports but accepts ReportRaw[] instead of CompanyFactListData */ ReportParser.prototype.translateReport = function (params) { var _a; var report = params.report, calculationMap = params.calculationMap; var calcMap = calculationMap !== null && calculationMap !== void 0 ? calculationMap : this.defaultCalculationMap; var reportNew = { cik: report.cik, dateFiled: report.dateFiled, dateReport: report.dateReport, fiscalPeriod: report.fiscalPeriod, url: report.url, fiscalYear: report.fiscalYear, splitDate: report.splitDate, splitRatio: report.splitRatio, }; var reportResolvable = new ReportResolvable_1.default({ report: report, calculationMap: calcMap, }); for (var key in calcMap) { var value = (_a = reportResolvable.get(key)) !== null && _a !== void 0 ? _a : null; // use first truthy value if (!reportNew[key]) { reportNew[key] = value; } } return reportNew; }; /** * Parse raw reports * * @see https://www.sec.gov/edgar/sec-api-documentation */ ReportParser.prototype.parseReportsRaw = function (companyFactListData, options) { var includeNamePrefix = (options !== null && options !== void 0 ? options : {}).includeNamePrefix; var facts = this.reportBuilder.createFacts(companyFactListData, includeNamePrefix).facts; return this.reportBuilder.buildReports(__assign({ facts: facts }, options)); }; /** * Builds ReportRaw[] from facts */ ReportParser.prototype.buildReports = function (params) { return this.reportBuilder.buildReports(params); }; /** * @deprecated use translateReport * * Translate ReportRaw to ReportTranslated by default, but can be used to translate to any object using both the callback and keyTranslator * * @param reportsRaw this is the output of parseReportsRaw * @param callback this is called for each report and can be used to modify the report. This gets the report built by keyTranslator if provided, otherwise ReportTranslated * @param keyTranslator this is iterated through to build the report using the keys. If the ReportRaw has a key that matches a key in the keyTranslator, the value is used. if not, the value is null */ ReportParser.prototype.translateReportsRaw = function (reportsRaw, callback, keyTranslator) { var keyTranslations = (keyTranslator !== null && keyTranslator !== void 0 ? keyTranslator : this.keyTranslator); var reports = []; reportsRaw.forEach(function (report) { var reportNew = {}; // iterate translation keys, ensuring same order and priority for (var key in keyTranslations) { var keysRaw = keyTranslations[key]; reportNew[key] = null; for (var _i = 0, keysRaw_1 = keysRaw; _i < keysRaw_1.length; _i++) { var keyRaw = keysRaw_1[_i]; var value = report[keyRaw]; if (value === undefined) continue; reportNew[key] = value; break; } } var reportFiltered = callback ? callback(reportNew, report, keyTranslations) : reportNew; reports.push(reportFiltered); }); return reports; }; return ReportParser; }()); exports.default = ReportParser;