sec-edgar-api 0.5.5 → 0.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -62,29 +62,22 @@ var InstanceParser = /** @class */ (function () {
62
62
  };
63
63
  InstanceParser.prototype.parse = function (xml) {
64
64
  var _this = this;
65
- var _a, _b;
66
- var contentLower = xml.toLowerCase();
67
- var indexXbrlStart = contentLower.indexOf('<xbrl');
68
- var indexXbrlEnd = contentLower.lastIndexOf('</xbrl');
69
- var xbrlContent = xml.substring(indexXbrlStart, indexXbrlEnd + 7);
70
- if (indexXbrlStart === -1) {
71
- return { factElements: [], contexts: [], units: [] };
72
- }
73
- var xbrl = util_xbrl_1.default.extractXbrlObject(this.xmlParser.parse(xbrlContent));
65
+ var _a, _b, _c;
66
+ var xbrl = util_xbrl_1.default.extractXbrlObject(this.xmlParser.parse(xml));
74
67
  var contexts = util_xbrl_1.default
75
- .toArray((_a = xbrl === null || xbrl === void 0 ? void 0 : xbrl.context) !== null && _a !== void 0 ? _a : [])
68
+ .toArray((_b = (_a = xbrl === null || xbrl === void 0 ? void 0 : xbrl.context) !== null && _a !== void 0 ? _a : xbrl === null || xbrl === void 0 ? void 0 : xbrl['xbrli:context']) !== null && _b !== void 0 ? _b : [])
76
69
  .map(function (context) { return _this.parseContext(context); });
77
- var units = util_xbrl_1.default.toArray((_b = xbrl === null || xbrl === void 0 ? void 0 : xbrl.unit) !== null && _b !== void 0 ? _b : []).map(function (unit) {
78
- var _a, _b, _c;
70
+ var units = util_xbrl_1.default.toArray((_c = xbrl === null || xbrl === void 0 ? void 0 : xbrl.unit) !== null && _c !== void 0 ? _c : []).map(function (unit) {
71
+ var _a, _b, _c, _d, _e;
79
72
  return ({
80
73
  id: (_a = unit['@_id']) !== null && _a !== void 0 ? _a : '',
81
- measure: (_c = (_b = unit['measure']) === null || _b === void 0 ? void 0 : _b['#text']) !== null && _c !== void 0 ? _c : '',
74
+ measure: (_e = (_c = (_b = unit['xbrli:measure']) === null || _b === void 0 ? void 0 : _b['#text']) !== null && _c !== void 0 ? _c : (_d = unit['measure']) === null || _d === void 0 ? void 0 : _d['#text']) !== null && _e !== void 0 ? _e : '',
82
75
  });
83
76
  });
84
77
  var factElements = [];
85
78
  for (var name_1 in xbrl) {
86
- for (var _i = 0, _c = util_xbrl_1.default.toArray(xbrl[name_1]); _i < _c.length; _i++) {
87
- var element = _c[_i];
79
+ for (var _i = 0, _d = util_xbrl_1.default.toArray(xbrl[name_1]); _i < _d.length; _i++) {
80
+ var element = _d[_i];
88
81
  if (!element['@_contextRef'])
89
82
  continue;
90
83
  var factElement = { name: name_1, id: '', contextRef: '' };
@@ -24,13 +24,13 @@ function parseKey(key) {
24
24
  return (_b = (_a = key.split(':').pop()) === null || _a === void 0 ? void 0 : _a.replace('@_', '').replace('#', '')) !== null && _b !== void 0 ? _b : '';
25
25
  }
26
26
  function extractXbrlObject(value) {
27
- var _a;
27
+ var _a, _b, _c;
28
28
  var xbrl = value;
29
29
  if (typeof xbrl !== 'object' || xbrl === null) {
30
30
  return null;
31
31
  }
32
32
  for (var i = 0; i < 10; i++) {
33
- var xbrlChild = (_a = xbrl.XBRL) !== null && _a !== void 0 ? _a : xbrl.xbrl;
33
+ var xbrlChild = (_c = (_b = (_a = xbrl.XBRL) !== null && _a !== void 0 ? _a : xbrl.xbrl) !== null && _b !== void 0 ? _b : xbrl['xbrli:xbrl']) !== null && _c !== void 0 ? _c : xbrl['xbrli:XBRL'];
34
34
  if (xbrlChild)
35
35
  xbrl = xbrlChild;
36
36
  else
@@ -15,12 +15,13 @@ export default class FactFiscalCalculator {
15
15
  private readonly endDateByYear;
16
16
  private readonly fiscalsByEndDate;
17
17
  private readonly datesByFiscals;
18
+ private readonly startDateCountMap;
18
19
  private readonly endDateCountMap;
19
20
  private readonly filedDateCountByEndDate;
20
21
  private didResolve;
21
22
  private readonly fiscalYearEnd;
22
23
  constructor(params?: {
23
- facts?: Pick<FactItem, 'end' | 'filed'>[];
24
+ facts?: Pick<FactItem, 'end' | 'filed' | 'start'>[];
24
25
  filings?: Pick<FilingListItemTranslated, 'form' | 'reportDate' | 'filingDate' | 'accessionNumber'>[];
25
26
  fiscalYearEnd?: {
26
27
  month: number;
@@ -31,6 +32,7 @@ export default class FactFiscalCalculator {
31
32
  add(fact: {
32
33
  end: string;
33
34
  filed: string;
35
+ start?: string;
34
36
  }): void;
35
37
  private getDaysBefore;
36
38
  setReportDates(params: SetReportDatesParams): void;
@@ -44,6 +46,10 @@ export default class FactFiscalCalculator {
44
46
  filed: string;
45
47
  end: string;
46
48
  } | null;
49
+ /**
50
+ * Assumes year end from start dates if not provided
51
+ */
52
+ private ensureEndDateByYear;
47
53
  getFiscalYearQuarter(params: {
48
54
  dateStr: string;
49
55
  endDateByYear?: Map<number, Date>;
@@ -12,6 +12,7 @@ var FactFiscalCalculator = /** @class */ (function () {
12
12
  this.fiscalsByEndDate = new Map();
13
13
  this.datesByFiscals = new Map();
14
14
  /// these get cleared after resolve
15
+ this.startDateCountMap = new Map();
15
16
  this.endDateCountMap = new Map();
16
17
  this.filedDateCountByEndDate = new Map();
17
18
  this.didResolve = false;
@@ -49,8 +50,8 @@ var FactFiscalCalculator = /** @class */ (function () {
49
50
  });
50
51
  };
51
52
  FactFiscalCalculator.prototype.add = function (fact) {
52
- var _a, _b, _c;
53
- var end = fact.end, filed = fact.filed;
53
+ var _a, _b, _c, _d;
54
+ var end = fact.end, filed = fact.filed, start = fact.start;
54
55
  if (this.didResolve) {
55
56
  throw new Error('Cannot add fact after resolving');
56
57
  }
@@ -58,10 +59,13 @@ var FactFiscalCalculator = /** @class */ (function () {
58
59
  this.addAnnualReportDate(fact.end);
59
60
  }
60
61
  this.endDateCountMap.set(end, ((_a = this.endDateCountMap.get(end)) !== null && _a !== void 0 ? _a : 0) + 1);
62
+ if (start) {
63
+ this.startDateCountMap.set(start, ((_b = this.startDateCountMap.get(start)) !== null && _b !== void 0 ? _b : 0) + 1);
64
+ }
61
65
  // don't record filed dates for restated facts
62
66
  if (this.getDaysBefore(filed, end) < 60) {
63
- var bucket = (_b = this.filedDateCountByEndDate.get(end)) !== null && _b !== void 0 ? _b : this.filedDateCountByEndDate.set(end, new Map()).get(end);
64
- bucket.set(filed, ((_c = bucket.get(filed)) !== null && _c !== void 0 ? _c : 0) + 1);
67
+ var bucket = (_c = this.filedDateCountByEndDate.get(end)) !== null && _c !== void 0 ? _c : this.filedDateCountByEndDate.set(end, new Map()).get(end);
68
+ bucket.set(filed, ((_d = bucket.get(filed)) !== null && _d !== void 0 ? _d : 0) + 1);
65
69
  }
66
70
  };
67
71
  FactFiscalCalculator.prototype.getDaysBefore = function (dateStrAfter, dateStrBefore) {
@@ -192,6 +196,7 @@ var FactFiscalCalculator = /** @class */ (function () {
192
196
  dates.end = ensureNoWeekends("".concat(yearEnd, "-").concat(datesFound.endMonthDay));
193
197
  }
194
198
  });
199
+ this.ensureEndDateByYear();
195
200
  this.endDateCountMap.clear();
196
201
  this.filedDateCountByEndDate.clear();
197
202
  this.didResolve = true;
@@ -203,8 +208,26 @@ var FactFiscalCalculator = /** @class */ (function () {
203
208
  this.didResolve = true;
204
209
  return (_a = this.datesByFiscals.get("".concat(params.year, "_").concat(params.quarter))) !== null && _a !== void 0 ? _a : null;
205
210
  };
211
+ /**
212
+ * Assumes year end from start dates if not provided
213
+ */
214
+ FactFiscalCalculator.prototype.ensureEndDateByYear = function () {
215
+ if (this.endDateByYear.size > 0 || this.fiscalYearEnd || this.startDateCountMap.size === 0)
216
+ return;
217
+ var maxStartDateCount = 0;
218
+ var maxStartDate = '';
219
+ this.startDateCountMap.forEach(function (count, date) {
220
+ if (count > maxStartDateCount) {
221
+ maxStartDateCount = count;
222
+ maxStartDate = date;
223
+ }
224
+ });
225
+ this.endDateByYear.set(Number(maxStartDate.split('-', 1)[0]) - 1, new Date(maxStartDate));
226
+ this.startDateCountMap.clear();
227
+ };
206
228
  FactFiscalCalculator.prototype.getFiscalYearQuarter = function (params) {
207
229
  var dateStr = params.dateStr, _a = params.endDateByYear, endDateByYear = _a === void 0 ? this.endDateByYear : _a, _b = params.fiscalYearEnd, fiscalYearEnd = _b === void 0 ? this.fiscalYearEnd : _b;
230
+ this.ensureEndDateByYear();
208
231
  if (this.fiscalsByEndDate.has(dateStr)) {
209
232
  return this.fiscalsByEndDate.get(dateStr);
210
233
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sec-edgar-api",
3
- "version": "0.5.5",
3
+ "version": "0.5.7",
4
4
  "description": "Fetch and parse SEC earnings reports and other filings. Useful for financial analysis.",
5
5
  "main": "build/index.js",
6
6
  "author": "Andrew Evers (https://github.com/andyevers)",