sec-edgar-api 0.2.1 → 0.2.2

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.
Files changed (73) hide show
  1. package/README.md +3 -5
  2. package/build/services/DocumentParser/HtmlTableExtractor.d.ts +41 -0
  3. package/build/services/DocumentParser/HtmlTableExtractor.js +408 -0
  4. package/build/services/DocumentParser/XMLParser.d.ts +20 -5
  5. package/build/services/DocumentParser/XMLParser.js +122 -118
  6. package/build/services/DocumentParser/parsers/index.d.ts +5 -3
  7. package/build/services/DocumentParser/parsers/index.js +5 -3
  8. package/build/services/DocumentParser/parsers/parse-current-filings.d.ts +3 -0
  9. package/build/services/DocumentParser/parsers/parse-current-filings.js +98 -0
  10. package/build/services/DocumentParser/parsers/parse-form-13f.d.ts +6 -0
  11. package/build/services/DocumentParser/parsers/parse-form-13f.js +91 -0
  12. package/build/services/DocumentParser/parsers/parse-form-13g.js +2 -2
  13. package/build/services/DocumentParser/parsers/parse-form-4.d.ts +6 -1
  14. package/build/services/DocumentParser/parsers/parse-form-4.js +134 -204
  15. package/build/services/DocumentParser/parsers/parse-form-def14a.d.ts +1 -2
  16. package/build/services/DocumentParser/parsers/parse-form-def14a.js +157 -106
  17. package/build/services/ReportBuilder/FactFiscalCalculator.d.ts +47 -0
  18. package/build/services/ReportBuilder/FactFiscalCalculator.js +228 -0
  19. package/build/services/ReportBuilder/FactPeriodResolver.d.ts +44 -0
  20. package/build/services/ReportBuilder/FactPeriodResolver.js +185 -0
  21. package/build/services/ReportBuilder/FactRecordBuilder.d.ts +7 -0
  22. package/build/services/ReportBuilder/FactRecordBuilder.js +49 -0
  23. package/build/services/ReportBuilder/FactSplitAdjuster.d.ts +39 -0
  24. package/build/services/ReportBuilder/FactSplitAdjuster.js +192 -0
  25. package/build/services/ReportBuilder/ReportBuilder.d.ts +37 -0
  26. package/build/services/ReportBuilder/ReportBuilder.js +180 -0
  27. package/build/services/ReportBuilder/ReportRawResolvable.d.ts +17 -0
  28. package/build/services/ReportBuilder/ReportRawResolvable.js +114 -0
  29. package/build/services/ReportBuilder/index.d.ts +2 -0
  30. package/build/services/ReportBuilder/index.js +4 -0
  31. package/build/services/ReportParser/FactItem.d.ts +66 -0
  32. package/build/services/ReportParser/FactItem.js +50 -0
  33. package/build/services/ReportParser/FactItemFactory.d.ts +22 -0
  34. package/build/services/ReportParser/FactItemFactory.js +150 -0
  35. package/build/services/ReportParser/FactSplitMap.d.ts +16 -0
  36. package/build/services/ReportParser/FactSplitMap.js +101 -0
  37. package/build/services/ReportParser/PropertyResolver.d.ts +1 -0
  38. package/build/services/ReportParser/PropertyResolver.js +1 -0
  39. package/build/services/ReportParser/ReportParser.d.ts +3 -10
  40. package/build/services/ReportParser/ReportParser.js +8 -23
  41. package/build/services/ReportParser/ReportRawParser.d.ts +5 -28
  42. package/build/services/ReportParser/ReportRawParser.js +29 -141
  43. package/build/services/ReportParser/ReportWrapper.js +2 -5
  44. package/build/services/ReportParser/resolvers/index.d.ts +2 -0
  45. package/build/services/ReportParser/resolvers/index.js +2 -0
  46. package/build/services/ReportParser/resolvers/resolve-cash-flow-capex.js +4 -3
  47. package/build/services/ReportParser/resolvers/resolve-cash-flow-operating.js +1 -1
  48. package/build/services/ReportParser/resolvers/resolve-cash-flow-working-capital-non-cash.js +1 -1
  49. package/build/services/ReportParser/resolvers/resolve-expense-depreciation.js +1 -1
  50. package/build/services/ReportParser/resolvers/resolve-fiscal-year-cumulative-properties.js +28 -14
  51. package/build/services/ReportParser/resolvers/resolve-q4-fiscal-year-matching-properties.js +32 -4
  52. package/build/services/ReportParser/resolvers/resolve-split-ratio.d.ts +2 -0
  53. package/build/services/ReportParser/resolvers/resolve-split-ratio.js +37 -0
  54. package/build/services/SecEdgarApi/SecEdgarApi.d.ts +85 -47
  55. package/build/services/SecEdgarApi/SecEdgarApi.js +246 -108
  56. package/build/types/current-filings-xml.type.d.ts +74 -0
  57. package/build/types/current-filings-xml.type.js +6 -0
  58. package/build/types/current-filings.type.d.ts +44 -0
  59. package/build/types/current-filings.type.js +2 -0
  60. package/build/types/form-13f-xml.type.d.ts +105 -0
  61. package/build/types/form-13f-xml.type.js +2 -0
  62. package/build/types/form-4-xml.type.d.ts +132 -0
  63. package/build/types/form-4-xml.type.js +2 -0
  64. package/build/types/index.d.ts +2 -2
  65. package/build/types/index.js +2 -2
  66. package/build/types/parsed-filings.type.d.ts +144 -5
  67. package/build/types/report-raw.type.d.ts +4 -7
  68. package/build/types/report-translated.type.d.ts +1 -2
  69. package/build/types/submission.type.d.ts +3 -2
  70. package/build/util/calculation-map-by-ns.d.ts +6 -0
  71. package/build/util/calculation-map-by-ns.js +9 -0
  72. package/build/util/key-translations.js +1 -2
  73. package/package.json +5 -2
@@ -10,16 +10,131 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
+ if (ar || !(i in from)) {
16
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
+ ar[i] = from[i];
18
+ }
19
+ }
20
+ return to.concat(ar || Array.prototype.slice.call(from));
21
+ };
13
22
  Object.defineProperty(exports, "__esModule", { value: true });
14
- var ColNode_1 = require("./XMLNode/ColNode");
15
- var DocumentNode_1 = require("./XMLNode/DocumentNode");
16
- var HRNode_1 = require("./XMLNode/HRNode");
17
- var NonTableNode_1 = require("./XMLNode/NonTableNode");
18
- var RowNode_1 = require("./XMLNode/RowNode");
19
- var TableNode_1 = require("./XMLNode/TableNode");
23
+ var fast_xml_parser_1 = require("fast-xml-parser");
20
24
  var XMLParser = /** @class */ (function () {
21
- function XMLParser() {
25
+ function XMLParser(args) {
26
+ var _a = (args !== null && args !== void 0 ? args : {}).parser, parser = _a === void 0 ? new fast_xml_parser_1.XMLParser() : _a;
27
+ this.parser = parser;
22
28
  }
29
+ XMLParser.prototype.extractJsonKey = function (json, extractKey) {
30
+ var obj = {};
31
+ this.iterateKeysDeep(json, function (key, currentObj) {
32
+ if (key === extractKey) {
33
+ obj = currentObj[key];
34
+ return true;
35
+ }
36
+ });
37
+ return obj;
38
+ };
39
+ XMLParser.prototype.parse = function (xml) {
40
+ return this.parser.parse(xml);
41
+ };
42
+ /**
43
+ * Return true in the callback if you want the loop to stop
44
+ */
45
+ XMLParser.prototype.iterateKeysDeep = function (obj, cb) {
46
+ var originalObj = obj;
47
+ // prevents original object from being modified
48
+ var _iterateKeys = function (obj, cb) {
49
+ for (var key in obj) {
50
+ var shouldBreak = cb(key, obj, originalObj) === true;
51
+ if (shouldBreak)
52
+ return;
53
+ var value = obj[key];
54
+ var isObjOrArr = typeof value === 'object' && value !== null;
55
+ if (isObjOrArr)
56
+ _iterateKeys(obj[key], cb);
57
+ }
58
+ };
59
+ _iterateKeys(obj, cb);
60
+ };
61
+ XMLParser.prototype.parseSectionTables = function (xml) {
62
+ var _this = this;
63
+ var xmlSplit = xml.split(/<HR.*?>/gi);
64
+ var fastParser = new fast_xml_parser_1.XMLParser({
65
+ htmlEntities: true,
66
+ ignoreAttributes: false,
67
+ alwaysCreateTextNode: true,
68
+ });
69
+ var toArray = function (value) { return (Array.isArray(value) ? value : [value]); };
70
+ var parseTable = function (obj) {
71
+ var _a, _b, _c, _d;
72
+ var getRowStrings = function (rows) {
73
+ var _a, _b, _c;
74
+ var results = [];
75
+ for (var i = 0; i < rows.length; i++) {
76
+ var obj_1 = rows[i];
77
+ var isObject = typeof obj_1 === 'object' && obj_1;
78
+ var cols = isObject ? (_c = (_b = (_a = obj_1['TD']) !== null && _a !== void 0 ? _a : obj_1['td']) !== null && _b !== void 0 ? _b : obj_1['TH']) !== null && _c !== void 0 ? _c : obj_1['th'] : [];
79
+ var rowCols = [];
80
+ var _loop_1 = function (a) {
81
+ var col = cols[a];
82
+ if (typeof col !== 'object' || !col) {
83
+ rowCols.push(String(col || '').trim());
84
+ }
85
+ var colStr = '';
86
+ _this.iterateKeysDeep(col, function (key, curObj) {
87
+ var _a;
88
+ if (!key.startsWith('@_')) {
89
+ colStr = "".concat((_a = curObj[key]) !== null && _a !== void 0 ? _a : '').trim();
90
+ }
91
+ });
92
+ rowCols.push(String(colStr || '').trim());
93
+ var colSpan = !Array.isArray(col) ? Number(col['@_COLSPAN']) || 1 : 1;
94
+ for (var c = 1; c < colSpan; c++) {
95
+ rowCols.push('@_SPAN');
96
+ }
97
+ };
98
+ for (var a = 0; a < (cols !== null && cols !== void 0 ? cols : []).length; a++) {
99
+ _loop_1(a);
100
+ }
101
+ results.push(rowCols);
102
+ }
103
+ return results;
104
+ };
105
+ var table = toArray(obj);
106
+ var thead = toArray((_b = (_a = table['THEAD']) !== null && _a !== void 0 ? _a : table['thead']) !== null && _b !== void 0 ? _b : []);
107
+ var tbody = toArray((_d = (_c = table['TBODY']) !== null && _c !== void 0 ? _c : table['tbody']) !== null && _d !== void 0 ? _d : []);
108
+ var tableRows = __spreadArray(__spreadArray(__spreadArray([], thead, true), table, true), tbody, true).map(function (obj) { var _a, _b; return toArray((_b = (_a = obj['TR']) !== null && _a !== void 0 ? _a : obj['tr']) !== null && _b !== void 0 ? _b : []); }).flat();
109
+ var tableData = [];
110
+ tableData.push(getRowStrings(tableRows));
111
+ return tableData;
112
+ };
113
+ var sections = [];
114
+ xmlSplit.forEach(function (xml) {
115
+ var tableIndex = xml.indexOf('<TABLE');
116
+ tableIndex = tableIndex === -1 ? xml.indexOf('<table') : tableIndex;
117
+ var text = xml
118
+ .substring(0, tableIndex)
119
+ .replace(/<\/?(.|\n)*?>/gi, ' ')
120
+ .replace(/\s+/g, ' ');
121
+ var xmlTables = xml
122
+ .replace(/<(?!(\/?TABLE|\/?TR|\/?TD|\/?TH|\/?HTML))(.|\n)*?>/gi, ' ')
123
+ .replace(/\s+/g, ' ');
124
+ var tableObjects = fastParser.parse(xmlTables);
125
+ var tableObjectsFlat = [];
126
+ _this.iterateKeysDeep(tableObjects, function (key, curObj) {
127
+ if (key.toLowerCase() === 'table') {
128
+ tableObjectsFlat.push.apply(tableObjectsFlat, toArray(curObj[key]));
129
+ }
130
+ });
131
+ var tables = tableObjectsFlat.map(function (t) { return parseTable(t)[0]; });
132
+ if (tables.length > 0) {
133
+ sections.push({ text: text, tables: tables });
134
+ }
135
+ });
136
+ return sections;
137
+ };
23
138
  XMLParser.prototype.iterateXML = function (params) {
24
139
  var _a, _b, _c;
25
140
  var xml = params.xml, onCharacter = params.onCharacter, onCloseTag = params.onCloseTag, onOpenTag = params.onOpenTag;
@@ -191,117 +306,6 @@ var XMLParser = /** @class */ (function () {
191
306
  });
192
307
  return textByColKey;
193
308
  };
194
- XMLParser.prototype.getDocumentNode = function (params) {
195
- var xml = params.xml;
196
- var rowsArr = [];
197
- var colsArr = [];
198
- var documentNode = new DocumentNode_1.DocumentNode();
199
- var curNode = null;
200
- var prevRowCols = [];
201
- var curRowCols = [];
202
- var isBold = false;
203
- var boldPath = null;
204
- var pushColToRow = function (col) {
205
- var _a;
206
- var colIndex = curRowCols.length;
207
- col.setIndex(colIndex);
208
- var colSpan = col.getColSpan();
209
- Array.from({ length: colSpan }).forEach(function () { return curRowCols.push(col); });
210
- var topSibling = (_a = prevRowCols[colIndex]) !== null && _a !== void 0 ? _a : null;
211
- topSibling === null || topSibling === void 0 ? void 0 : topSibling.addBottomSibling(col);
212
- };
213
- this.iterateXML({
214
- xml: xml,
215
- onCloseTag: function (_a) {
216
- var _b;
217
- var path = _a.path;
218
- var tag = path.split('.').pop();
219
- if ((curNode === null || curNode === void 0 ? void 0 : curNode.getPath()) === boldPath) {
220
- curNode === null || curNode === void 0 ? void 0 : curNode.setText("".concat((_b = curNode === null || curNode === void 0 ? void 0 : curNode.getText()) !== null && _b !== void 0 ? _b : '', "}}"));
221
- boldPath = null;
222
- }
223
- },
224
- onCharacter: function (_a) {
225
- var _b;
226
- var char = _a.char;
227
- curNode === null || curNode === void 0 ? void 0 : curNode.setText(((_b = curNode === null || curNode === void 0 ? void 0 : curNode.getText()) !== null && _b !== void 0 ? _b : '') + char);
228
- },
229
- onOpenTag: function (_a) {
230
- var _b;
231
- var path = _a.path, attributesStr = _a.attributesStr;
232
- // skip nested tables
233
- if (path.split('.').reduce(function (acc, cur) { return (cur === 'table' ? acc + 1 : acc); }, 0) > 1)
234
- return;
235
- var tag = path.split('.').pop();
236
- var isInTable = path.includes('table');
237
- var topLevelNodes = documentNode.getChildren();
238
- var prevTopLevelNode = topLevelNodes[topLevelNodes.length - 1];
239
- var wasHorizontalLine = prevTopLevelNode instanceof HRNode_1.HRNode;
240
- var wasNonTableNode = prevTopLevelNode instanceof NonTableNode_1.NonTableNode;
241
- var wasBold = isBold;
242
- var attributesLower = attributesStr.toLowerCase().replace(/\s/g, '');
243
- isBold =
244
- tag === 'b' ||
245
- tag === 'strong' ||
246
- attributesLower.includes('font-weight:bold') ||
247
- attributesLower.includes('font-weight:700') ||
248
- attributesLower.includes('font-weight:800') ||
249
- attributesLower.includes('font-weight:900');
250
- if (!isInTable) {
251
- prevRowCols = [];
252
- curRowCols = [];
253
- }
254
- if (tag === 'hr' && !isInTable) {
255
- var hr = new HRNode_1.HRNode({ attributesStr: attributesStr, path: path });
256
- hr.setPreviousSibling(prevTopLevelNode !== null && prevTopLevelNode !== void 0 ? prevTopLevelNode : null);
257
- topLevelNodes.push(hr);
258
- curNode = hr;
259
- }
260
- else if (tag === 'table') {
261
- var table = new TableNode_1.TableNode({ attributesStr: attributesStr, path: path });
262
- table.setPreviousSibling(prevTopLevelNode !== null && prevTopLevelNode !== void 0 ? prevTopLevelNode : null);
263
- topLevelNodes.push(table);
264
- curNode = table;
265
- }
266
- else if (tag === 'tr') {
267
- var row = new RowNode_1.RowNode({ attributesStr: attributesStr, path: path });
268
- var prevRow = rowsArr[rowsArr.length - 1];
269
- row.setParent(prevTopLevelNode);
270
- row.setPreviousSibling((prevRow === null || prevRow === void 0 ? void 0 : prevRow.getParent()) === row.getParent() ? prevRow : null);
271
- rowsArr.push(row);
272
- prevRowCols = curRowCols;
273
- curRowCols = [];
274
- curNode = row;
275
- }
276
- else if (tag === 'td' || tag === 'th') {
277
- var col = new ColNode_1.ColNode({ attributesStr: attributesStr, path: path });
278
- var prevCol = colsArr[colsArr.length - 1];
279
- col.setParent(rowsArr[rowsArr.length - 1]);
280
- col.setPreviousSibling((prevCol === null || prevCol === void 0 ? void 0 : prevCol.getParent()) === col.getParent() ? prevCol : null);
281
- colsArr.push(col);
282
- pushColToRow(col);
283
- curNode = col;
284
- }
285
- else if ((!isInTable && !wasNonTableNode) || (wasHorizontalLine && tag !== 'hr')) {
286
- var node = new NonTableNode_1.NonTableNode({ attributesStr: attributesStr, path: path });
287
- node.setPreviousSibling(prevTopLevelNode !== null && prevTopLevelNode !== void 0 ? prevTopLevelNode : null);
288
- topLevelNodes.push(node);
289
- curNode = node;
290
- }
291
- else if (curNode && !curNode.getText().endsWith('\n')) {
292
- curNode.setText("".concat(curNode.getText().trim(), "\n"));
293
- }
294
- if (isBold && !wasBold && !(curNode === null || curNode === void 0 ? void 0 : curNode.getText().endsWith('{{'))) {
295
- curNode === null || curNode === void 0 ? void 0 : curNode.setText("".concat(curNode === null || curNode === void 0 ? void 0 : curNode.getText().trim(), "{{"));
296
- }
297
- if (isBold) {
298
- boldPath = (_b = curNode === null || curNode === void 0 ? void 0 : curNode.getPath()) !== null && _b !== void 0 ? _b : null;
299
- }
300
- },
301
- });
302
- documentNode.setText(xml);
303
- return documentNode;
304
- };
305
309
  return XMLParser;
306
310
  }());
307
311
  exports.default = XMLParser;
@@ -1,11 +1,13 @@
1
- import { parseForm4 } from './parse-form-4';
1
+ import { parseCurrentFilings } from './parse-current-filings';
2
+ import { parseForm13f } from './parse-form-13f';
2
3
  import { parseForm13g } from './parse-form-13g';
3
- import { parseForm10k } from './parse-form-10k';
4
+ import { parseForm4 } from './parse-form-4';
4
5
  import { parseFormDef14a } from './parse-form-def14a';
5
6
  declare const parsers: {
6
7
  parseForm4: typeof parseForm4;
7
8
  parseForm13g: typeof parseForm13g;
8
- parseForm10k: typeof parseForm10k;
9
+ parseForm13f: typeof parseForm13f;
9
10
  parseFormDef14a: typeof parseFormDef14a;
11
+ parseCurrentFilings: typeof parseCurrentFilings;
10
12
  };
11
13
  export default parsers;
@@ -1,13 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var parse_form_4_1 = require("./parse-form-4");
3
+ var parse_current_filings_1 = require("./parse-current-filings");
4
+ var parse_form_13f_1 = require("./parse-form-13f");
4
5
  var parse_form_13g_1 = require("./parse-form-13g");
5
- var parse_form_10k_1 = require("./parse-form-10k");
6
+ var parse_form_4_1 = require("./parse-form-4");
6
7
  var parse_form_def14a_1 = require("./parse-form-def14a");
7
8
  var parsers = {
8
9
  parseForm4: parse_form_4_1.parseForm4,
9
10
  parseForm13g: parse_form_13g_1.parseForm13g,
10
- parseForm10k: parse_form_10k_1.parseForm10k,
11
+ parseForm13f: parse_form_13f_1.parseForm13f,
11
12
  parseFormDef14a: parse_form_def14a_1.parseFormDef14a,
13
+ parseCurrentFilings: parse_current_filings_1.parseCurrentFilings,
12
14
  };
13
15
  exports.default = parsers;
@@ -0,0 +1,3 @@
1
+ import { XMLParams } from '../../../types';
2
+ import { CurrentFilingsList } from '../../../types/current-filings.type';
3
+ export declare function parseCurrentFilings(params: XMLParams): CurrentFilingsList;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseCurrentFilings = void 0;
4
+ var fast_xml_parser_1 = require("fast-xml-parser");
5
+ function parseCurrentFilings(params) {
6
+ var _a;
7
+ var parser = new fast_xml_parser_1.XMLParser({ ignoreAttributes: false });
8
+ var json = parser.parse(params.xml);
9
+ var toArray = function (value) { return (Array.isArray(value) ? value : [value]).filter(Boolean); };
10
+ var toObject = function (value) {
11
+ value = Array.isArray(value) ? value[0] : value;
12
+ return (value && typeof value === 'object' ? value : {});
13
+ };
14
+ var toString = function (value) { return String(value || ''); };
15
+ var toNumber = function (value) { return Number(value) || 0; };
16
+ var toBoolean = function (value) {
17
+ var isFalseStr = ['false', '0', 'no', 'null', 'undefined'].includes(String(value).toLowerCase());
18
+ return isFalseStr ? false : Boolean(value);
19
+ };
20
+ var toDateStr = function (value) {
21
+ var _a = value.split('/'), month = _a[0], day = _a[1], year = _a[2];
22
+ return "".concat(year, "-").concat(month, "-").concat(day);
23
+ };
24
+ var parseConcatDate = function (value) {
25
+ var acceptanceDateTime = toString(toNumber(value));
26
+ var year = acceptanceDateTime.slice(0, 4);
27
+ var month = acceptanceDateTime.slice(4, 6);
28
+ var day = acceptanceDateTime.slice(6, 8);
29
+ var hour = acceptanceDateTime.slice(8, 10);
30
+ var minute = acceptanceDateTime.slice(10, 12);
31
+ var second = acceptanceDateTime.slice(12, 14);
32
+ return acceptanceDateTime.length < 9
33
+ ? "".concat(year, "-").concat(month, "-").concat(day)
34
+ : "".concat(year, "-").concat(month, "-").concat(day, " ").concat(hour, ":").concat(minute, ":").concat(second);
35
+ };
36
+ var parseFiscalYearEnd = function (value) {
37
+ var str = toString(value).padStart(4, '0');
38
+ var month = str.slice(0, 2);
39
+ var day = str.slice(2, 4);
40
+ return "".concat(month, "-").concat(day);
41
+ };
42
+ var channelXML = toObject((_a = json === null || json === void 0 ? void 0 : json.rss) === null || _a === void 0 ? void 0 : _a.channel);
43
+ var description = channelXML.description, item = channelXML.item, language = channelXML.language, lastBuildDate = channelXML.lastBuildDate, link = channelXML.link, pubDate = channelXML.pubDate, title = channelXML.title;
44
+ var atomLink = toObject(channelXML['atom:link']);
45
+ var itemsXML = toArray(item);
46
+ return {
47
+ title: toString(title),
48
+ link: toString(link),
49
+ href: toString(atomLink['@_href']),
50
+ description: toString(description),
51
+ language: toString(language),
52
+ pubDate: toString(pubDate),
53
+ lastBuildDate: toString(lastBuildDate),
54
+ items: itemsXML.map(function (itemXML) {
55
+ var _a;
56
+ itemXML = toObject(itemXML);
57
+ var enclosure = toObject(itemXML.enclosure);
58
+ var filing = toObject(itemXML['edgar:xbrlFiling']);
59
+ var xbrlFilesXML = toArray((_a = filing['edgar:xbrlFiles']) === null || _a === void 0 ? void 0 : _a['edgar:xbrlFile']);
60
+ return {
61
+ title: toString(itemXML.title),
62
+ link: toString(itemXML.link),
63
+ guid: toString(itemXML.guid),
64
+ enclosureUrl: toString(enclosure['@_url']),
65
+ enclosureLength: toString(enclosure['@_length']),
66
+ enclosureType: toString(enclosure['@_type']),
67
+ description: toString(itemXML.description),
68
+ pubDate: toString(itemXML.pubDate),
69
+ filing: {
70
+ companyName: toString(filing['edgar:companyName']),
71
+ formType: toString(filing['edgar:formType']),
72
+ filingDate: toDateStr(filing['edgar:filingDate']),
73
+ cikNumber: toNumber(filing['edgar:cikNumber']),
74
+ accessionNumber: toString(filing['edgar:accessionNumber']),
75
+ fileNumber: toString(filing['edgar:fileNumber']),
76
+ acceptanceDatetime: parseConcatDate(filing['edgar:acceptanceDatetime']),
77
+ period: parseConcatDate(filing['edgar:period']),
78
+ assistantDirector: toString(filing['edgar:assistantDirector']),
79
+ assignedSic: toNumber(filing['edgar:assignedSic']),
80
+ fiscalYearEnd: parseFiscalYearEnd(filing['edgar:fiscalYearEnd']),
81
+ xbrlFiles: xbrlFilesXML.map(function (xbrlFileXML) {
82
+ xbrlFileXML = toObject(xbrlFileXML);
83
+ return {
84
+ sequence: toNumber(xbrlFileXML['@_edgar:sequence']),
85
+ file: toString(xbrlFileXML['@_edgar:file']),
86
+ type: toString(xbrlFileXML['@_edgar:type']),
87
+ size: toNumber(xbrlFileXML['@_edgar:size']),
88
+ description: toString(xbrlFileXML['@_edgar:description']),
89
+ inlineXBRL: toBoolean(xbrlFileXML['@_edgar:inlineXBRL']),
90
+ url: toString(xbrlFileXML['@_edgar:url']),
91
+ };
92
+ }),
93
+ },
94
+ };
95
+ }),
96
+ };
97
+ }
98
+ exports.parseCurrentFilings = parseCurrentFilings;
@@ -0,0 +1,6 @@
1
+ import { Form13FData, XMLParams } from '../../../types';
2
+ import XMLParser from '../XMLParser';
3
+ /**
4
+ * Form 13F - Holdings Report
5
+ */
6
+ export declare function parseForm13f(params: XMLParams, xmlParser?: XMLParser): Form13FData;
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseForm13f = void 0;
4
+ var XMLParser_1 = require("../XMLParser");
5
+ /**
6
+ * Form 13F - Holdings Report
7
+ */
8
+ function parseForm13f(params, xmlParser) {
9
+ var _a, _b;
10
+ if (xmlParser === void 0) { xmlParser = new XMLParser_1.default(); }
11
+ var json = xmlParser.parse(params.xml);
12
+ var informationTable = xmlParser.extractJsonKey(json, 'informationTable');
13
+ var edgarSubmission = xmlParser.extractJsonKey(json, 'edgarSubmission');
14
+ var toArray = function (value) { return (Array.isArray(value) ? value : [value]).filter(Boolean); };
15
+ var formData = edgarSubmission.formData, headerData = edgarSubmission.headerData;
16
+ var _c = headerData !== null && headerData !== void 0 ? headerData : {}, filerInfo = _c.filerInfo, submissionType = _c.submissionType;
17
+ var _d = filerInfo !== null && filerInfo !== void 0 ? filerInfo : {}, filer = _d.filer, flags = _d.flags, _e = _d.liveTestFlag, liveTestFlag = _e === void 0 ? '' : _e, periodOfReport = _d.periodOfReport;
18
+ var _f = flags !== null && flags !== void 0 ? flags : {}, _g = _f.confirmingCopyFlag, confirmingCopyFlag = _g === void 0 ? false : _g, _h = _f.overrideInternetFlag, overrideInternetFlag = _h === void 0 ? false : _h, _j = _f.returnCopyFlag, returnCopyFlag = _j === void 0 ? false : _j;
19
+ var _k = (_a = filer === null || filer === void 0 ? void 0 : filer.credentials) !== null && _a !== void 0 ? _a : {}, _l = _k.ccc, ccc = _l === void 0 ? '' : _l, _m = _k.cik, cik = _m === void 0 ? 0 : _m;
20
+ var coverPage = formData.coverPage, signatureBlock = formData.signatureBlock, summaryPage = formData.summaryPage;
21
+ var _o = coverPage !== null && coverPage !== void 0 ? coverPage : {}, filingManager = _o.filingManager, form13FFileNumber = _o.form13FFileNumber, otherManagersInfo = _o.otherManagersInfo, provideInfoForInstruction5 = _o.provideInfoForInstruction5, reportCalendarOrQuarter = _o.reportCalendarOrQuarter, reportType = _o.reportType;
22
+ var _p = filingManager !== null && filingManager !== void 0 ? filingManager : {}, address = _p.address, filingManagerName = _p.name;
23
+ var _q = summaryPage !== null && summaryPage !== void 0 ? summaryPage : {}, isConfidentialOmitted = _q.isConfidentialOmitted, otherIncludedManagersCount = _q.otherIncludedManagersCount, otherManagers2Info = _q.otherManagers2Info, tableEntryTotal = _q.tableEntryTotal, tableValueTotal = _q.tableValueTotal;
24
+ var _r = signatureBlock !== null && signatureBlock !== void 0 ? signatureBlock : {}, city = _r.city, signatureName = _r.name, phone = _r.phone, signature = _r.signature, signatureDate = _r.signatureDate, stateOrCountry = _r.stateOrCountry, title = _r.title;
25
+ var otherManager = (otherManagersInfo !== null && otherManagersInfo !== void 0 ? otherManagersInfo : {}).otherManager;
26
+ var otherManagers2 = (_b = otherManagers2Info.otherManager2) !== null && _b !== void 0 ? _b : [];
27
+ return {
28
+ submissionType: String(submissionType || ''),
29
+ periodOfReport: String(periodOfReport || ''),
30
+ cik: Number(cik) || 0,
31
+ ccc: String(ccc || ''),
32
+ form13FFileNumber: String(form13FFileNumber || ''),
33
+ liveTestFlag: String(liveTestFlag || ''),
34
+ reportCalendarOrQuarter: String(reportCalendarOrQuarter || ''),
35
+ reportType: String(reportType || ''),
36
+ confirmingCopyFlag: Boolean(confirmingCopyFlag),
37
+ overrideInternetFlag: Boolean(overrideInternetFlag),
38
+ returnCopyFlag: Boolean(returnCopyFlag),
39
+ filingManager: {
40
+ name: String(filingManagerName || ''),
41
+ ns1City: String(address['ns1:city'] || ''),
42
+ ns1StateOrCountry: String(address['ns1:stateOrCountry'] || ''),
43
+ ns1Street1: String(address['ns1:street1'] || ''),
44
+ ns1ZipCode: String(address['ns1:zipCode'] || 0),
45
+ },
46
+ otherManagers: toArray(otherManager).map(function (otherManager) { return ({
47
+ sequenceNumber: Number(otherManager.sequenceNumber) || -1,
48
+ form13FFileNumber: String(otherManager.form13FFileNumber || ''),
49
+ name: String(otherManager.name || ''),
50
+ }); }),
51
+ provideInfoForInstruction5: String(provideInfoForInstruction5 || ''),
52
+ signatureBlock: {
53
+ city: String(city || ''),
54
+ name: String(signatureName || ''),
55
+ phone: String(phone || ''),
56
+ signature: String(signature || ''),
57
+ signatureDate: String(signatureDate || ''),
58
+ stateOrCountry: String(stateOrCountry || ''),
59
+ title: String(title || ''),
60
+ },
61
+ otherManagers2: toArray(otherManagers2).map(function (otherManager) { return ({
62
+ sequenceNumber: Number(otherManager.sequenceNumber) || -1,
63
+ name: String(otherManager.otherManager.name || ''),
64
+ form13FFileNumber: String(otherManager.otherManager.form13FFileNumber || ''),
65
+ }); }),
66
+ otherIncludedManagersCount: Number(otherIncludedManagersCount || 0),
67
+ tableEntryTotal: Number(tableEntryTotal || 0),
68
+ tableValueTotal: Number(tableValueTotal || 0),
69
+ isConfidentialOmitted: Boolean(isConfidentialOmitted),
70
+ infoTable: toArray(informationTable.infoTable).map(function (infoTable) {
71
+ var _a = infoTable !== null && infoTable !== void 0 ? infoTable : {}, cusip = _a.cusip, investmentDiscretion = _a.investmentDiscretion, nameOfIssuer = _a.nameOfIssuer, otherManager = _a.otherManager, shrsOrPrnAmt = _a.shrsOrPrnAmt, titleOfClass = _a.titleOfClass, value = _a.value, votingAuthority = _a.votingAuthority;
72
+ var _b = votingAuthority !== null && votingAuthority !== void 0 ? votingAuthority : {}, votingAuthorityNone = _b.None, votingAuthorityShared = _b.Shared, votingAuthoritySole = _b.Sole;
73
+ return {
74
+ nameOfIssuer: String(nameOfIssuer || ''),
75
+ titleOfClass: String(titleOfClass || ''),
76
+ cusip: String(cusip || ''),
77
+ value: Number(value) || 0,
78
+ sharesOrPrincipalAmount: Number((shrsOrPrnAmt === null || shrsOrPrnAmt === void 0 ? void 0 : shrsOrPrnAmt.sshPrnamt) || 0) || 0,
79
+ isPrincipalAmount: (shrsOrPrnAmt === null || shrsOrPrnAmt === void 0 ? void 0 : shrsOrPrnAmt.sshPrnamtType) !== 'SH',
80
+ investmentDiscretion: String(investmentDiscretion || ''),
81
+ votingAuthoritySole: Number(votingAuthoritySole) || 0,
82
+ votingAuthorityShared: Number(votingAuthorityShared) || 0,
83
+ votingAuthorityNone: Number(votingAuthorityNone) || 0,
84
+ otherManagers: String(otherManager || '')
85
+ .split(',')
86
+ .map(Number),
87
+ };
88
+ }),
89
+ };
90
+ }
91
+ exports.parseForm13f = parseForm13f;
@@ -58,7 +58,7 @@ function parseForm13g(params, xmlParser) {
58
58
  return "continue";
59
59
  var textParts = text.split('&nbsp;').filter(function (t) { return t.trim() !== ''; });
60
60
  var colNameIndex = textParts.findIndex(function (t) { return getKey(t) === colName; });
61
- var value = (_c = (_b = textParts[colNameIndex + 1]) === null || _b === void 0 ? void 0 : _b.trim()) !== null && _c !== void 0 ? _c : '';
61
+ var value = ((_c = (_b = textParts[colNameIndex + 1]) === null || _b === void 0 ? void 0 : _b.trim()) !== null && _c !== void 0 ? _c : '').replace(/&.*?;/g, ' ').replace(/\s+/g, ' ').trim();
62
62
  switch (colName) {
63
63
  case 'shares':
64
64
  holder.shares = Number(value.replace(/[^0-9]/g, '')) || 0;
@@ -83,6 +83,6 @@ function parseForm13g(params, xmlParser) {
83
83
  if (((_d = holders[holders.length - 1]) === null || _d === void 0 ? void 0 : _d.name) === '') {
84
84
  holders.pop();
85
85
  }
86
- return { holders: holders };
86
+ return { institutionalHolders: holders };
87
87
  }
88
88
  exports.parseForm13g = parseForm13g;
@@ -1,7 +1,12 @@
1
1
  import { Form4Data, XMLParams } from '../../../types';
2
2
  import XMLParser from '../XMLParser';
3
3
  /**
4
- * Form 4 - Insider Transactions
4
+ * Form 4 and form 5 - Insider Transactions
5
+ *
6
+ * TODO: sometimes not working. keys not consistently coming back objects vs arrays:
7
+ *
8
+ * here reporting owner is array, so not being extracted correctly
9
+ * https://www.sec.gov/Archives/edgar/data/1067983/000095017024044198/0000950170-24-044198.txt
5
10
  *
6
11
  * example at https://www.sec.gov/Archives/edgar/data/320193/000032019323000079/xslF345X05/wk-form4_1691533817.xml
7
12
  */