sec-edgar-api 1.0.2 → 1.0.3

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.
@@ -2,6 +2,7 @@ import type { XbrlLinkbase } from '../../../types';
2
2
  import XMLParser from '../XMLParser';
3
3
  export default class LinkbaseParser {
4
4
  private readonly xmlParser;
5
+ private readonly objectUtil;
5
6
  constructor(args?: {
6
7
  xmlParser?: XMLParser;
7
8
  });
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ var ObjectUtil_1 = require("../ObjectUtil");
3
4
  var XMLParser_1 = require("../XMLParser");
4
5
  var util_xbrl_1 = require("./util-xbrl");
5
6
  var LinkbaseParser = /** @class */ (function () {
6
7
  function LinkbaseParser(args) {
8
+ this.objectUtil = new ObjectUtil_1.default();
7
9
  var _a = (args !== null && args !== void 0 ? args : {}).xmlParser, xmlParser = _a === void 0 ? new XMLParser_1.default() : _a;
8
10
  this.xmlParser = xmlParser;
9
11
  }
@@ -12,6 +14,7 @@ var LinkbaseParser = /** @class */ (function () {
12
14
  return this.parseLinkbaseDocument(parsed);
13
15
  };
14
16
  LinkbaseParser.prototype.parseLinkbaseDocument = function (value) {
17
+ var _this = this;
15
18
  value = util_xbrl_1.default.toObject(value);
16
19
  for (var key in value) {
17
20
  var parsedKey = util_xbrl_1.default.parseKey(key);
@@ -20,7 +23,16 @@ var LinkbaseParser = /** @class */ (function () {
20
23
  return this.parseLinkbase(value[key]);
21
24
  }
22
25
  }
23
- return null;
26
+ // if linkbase is not found, try iterating through keys to find it
27
+ var linkbase = null;
28
+ this.objectUtil.iterateKeysDeep(value, function (d) {
29
+ var k = util_xbrl_1.default.parseKey(d.key);
30
+ if (k === 'linkbase') {
31
+ d.breakLoop();
32
+ linkbase = _this.parseLinkbase(d.value);
33
+ }
34
+ });
35
+ return linkbase;
24
36
  };
25
37
  LinkbaseParser.prototype.parseItem = function (value) {
26
38
  value = util_xbrl_1.default.toObject(value);
@@ -31,7 +31,22 @@ function getLabelByTaxonomy(labelLinkbase) {
31
31
  return labelByTaxonomy;
32
32
  }
33
33
  exports.getLabelByTaxonomy = getLabelByTaxonomy;
34
+ function isPascaleCase(str) {
35
+ var startsWithUpperCase = str && str[0].toLowerCase() !== str[0];
36
+ return startsWithUpperCase && str.split('').some(function (c) { return c.toLowerCase() === c; });
37
+ }
38
+ var knownPrefixes = {
39
+ 'us-gaap': true,
40
+ 'ifrs-full': true,
41
+ dei: true,
42
+ srt: true,
43
+ country: true,
44
+ };
34
45
  function getTaxonomyFromId(id) {
35
- return id.split('_').slice(1, 3).join(':');
46
+ var parts = id.split('_');
47
+ var isLabelIndicatorPosition3 = parts[2] === 'lbl';
48
+ var isKnownPrefixPosition1 = knownPrefixes[parts[0]] === true;
49
+ var isNameInPosition2 = parts.length <= 2 || isLabelIndicatorPosition3 || isKnownPrefixPosition1 || isPascaleCase(parts[1]);
50
+ return isNameInPosition2 ? parts.slice(0, 2).join(':') : parts.slice(1, 3).join(':');
36
51
  }
37
52
  exports.getTaxonomyFromId = getTaxonomyFromId;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sec-edgar-api",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
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)",