sec-edgar-api 0.4.0 → 0.4.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.
- package/build/services/DocumentParser/DocumentParser.d.ts +3 -4
- package/build/services/DocumentParser/XBRLParser/InstanceParser.js +27 -28
- package/build/services/DocumentParser/XBRLParser/LinkbaseParser.js +18 -19
- package/build/services/DocumentParser/XBRLParser/SchemaParser.js +35 -37
- package/build/services/DocumentParser/XBRLParser/XBRLParser.d.ts +1 -1
- package/build/services/DocumentParser/XBRLParser/XBRLParser.js +5 -1
- package/build/services/DocumentParser/XBRLParser/{util-type.d.ts → util-xbrl.d.ts} +4 -2
- package/build/services/DocumentParser/XBRLParser/{util-type.js → util-xbrl.js} +18 -2
- package/build/services/DocumentParser/parsers/parse-xbrl.d.ts +4 -4
- package/build/services/DocumentParser/parsers/parse-xbrl.js +21 -13
- package/build/services/ReportRawBuilder/FactSplitAdjuster.js +2 -1
- package/build/services/SecEdgarApi/SecEdgarApi.d.ts +34 -26
- package/build/services/SecEdgarApi/SecEdgarApi.js +40 -36
- package/build/util/constants.d.ts +2 -0
- package/build/util/constants.js +5 -0
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { XMLParams } from '../../types';
|
|
2
|
-
import {
|
|
2
|
+
import { GetDocumentXbrlParams } from '../SecEdgarApi';
|
|
3
3
|
import XMLParser from './XMLParserLegacy';
|
|
4
4
|
import parsers from './parsers';
|
|
5
5
|
interface DocumentParserArgs {
|
|
@@ -36,11 +36,10 @@ export default class DocumentParser {
|
|
|
36
36
|
};
|
|
37
37
|
parseCurrentFilings(params: XMLParams): import("../../types").CurrentFilingsList;
|
|
38
38
|
parseCurrentFilingsXbrl(params: XMLParams): import("../../types").CurrentFilingsXBRL;
|
|
39
|
-
parseXbrl(params: XMLParams &
|
|
40
|
-
includeReport?: boolean;
|
|
41
|
-
}): import("./XBRLParser/XBRLParser").XbrlParseResult & {
|
|
39
|
+
parseXbrl(params: XMLParams & GetDocumentXbrlParams): import("./XBRLParser/XBRLParser").XbrlParseResult & {
|
|
42
40
|
report: import("../../types").ReportRaw | null;
|
|
43
41
|
facts: import("../../types").FactItem[];
|
|
42
|
+
xml: string;
|
|
44
43
|
};
|
|
45
44
|
}
|
|
46
45
|
export {};
|
|
@@ -1,52 +1,52 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
var XMLParser_1 = require("../XMLParser");
|
|
4
|
-
var
|
|
4
|
+
var util_xbrl_1 = require("./util-xbrl");
|
|
5
5
|
var InstanceParser = /** @class */ (function () {
|
|
6
6
|
function InstanceParser() {
|
|
7
7
|
this.xmlParser = new XMLParser_1.default();
|
|
8
8
|
}
|
|
9
9
|
InstanceParser.prototype.parseContext = function (node) {
|
|
10
10
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
11
|
-
var context =
|
|
12
|
-
var id =
|
|
13
|
-
var entity =
|
|
14
|
-
var entityIdentifier =
|
|
15
|
-
var entityIdentifierText =
|
|
16
|
-
var entityIdentifierScheme =
|
|
17
|
-
var segment =
|
|
18
|
-
var segmentExplicitMembers =
|
|
19
|
-
var segmentTypedMembers =
|
|
11
|
+
var context = util_xbrl_1.default.toObject(node);
|
|
12
|
+
var id = util_xbrl_1.default.toString(context['@_id']);
|
|
13
|
+
var entity = util_xbrl_1.default.toObject((_a = context['xbrli:entity']) !== null && _a !== void 0 ? _a : context['entity']);
|
|
14
|
+
var entityIdentifier = util_xbrl_1.default.toObject((_b = entity['xbrli:identifier']) !== null && _b !== void 0 ? _b : entity['identifier']);
|
|
15
|
+
var entityIdentifierText = util_xbrl_1.default.toString(entityIdentifier['#text']);
|
|
16
|
+
var entityIdentifierScheme = util_xbrl_1.default.toString(entityIdentifier['@_scheme']);
|
|
17
|
+
var segment = util_xbrl_1.default.toObject((_c = entity['xbrli:segment']) !== null && _c !== void 0 ? _c : entity['segment']);
|
|
18
|
+
var segmentExplicitMembers = util_xbrl_1.default.toArray(segment['xbrldi:explicitMember']);
|
|
19
|
+
var segmentTypedMembers = util_xbrl_1.default.toArray(segment['xbrldi:typedMember']);
|
|
20
20
|
var segments = [];
|
|
21
21
|
segmentTypedMembers.forEach(function (member) {
|
|
22
22
|
var _a;
|
|
23
|
-
member =
|
|
23
|
+
member = util_xbrl_1.default.toObject(member);
|
|
24
24
|
var dimension = (_a = member['@_dimension']) !== null && _a !== void 0 ? _a : '';
|
|
25
25
|
segments.push({
|
|
26
|
-
value:
|
|
27
|
-
dimension:
|
|
26
|
+
value: util_xbrl_1.default.toString(member["".concat(dimension, ".domain")]),
|
|
27
|
+
dimension: util_xbrl_1.default.toString(dimension),
|
|
28
28
|
});
|
|
29
29
|
});
|
|
30
30
|
segmentExplicitMembers.forEach(function (member) {
|
|
31
|
-
member =
|
|
31
|
+
member = util_xbrl_1.default.toObject(member);
|
|
32
32
|
segments.push({
|
|
33
|
-
value:
|
|
34
|
-
dimension:
|
|
33
|
+
value: util_xbrl_1.default.toString(member['#text']),
|
|
34
|
+
dimension: util_xbrl_1.default.toString(member['@_dimension']),
|
|
35
35
|
});
|
|
36
36
|
});
|
|
37
|
-
var period =
|
|
37
|
+
var period = util_xbrl_1.default.toObject((_d = context['xbrli:period']) !== null && _d !== void 0 ? _d : context['period']);
|
|
38
38
|
var periodObj = {};
|
|
39
39
|
var startDate = (_e = period['xbrli:startDate']) !== null && _e !== void 0 ? _e : period['startDate'];
|
|
40
40
|
var endDate = (_f = period['xbrli:endDate']) !== null && _f !== void 0 ? _f : period['endDate'];
|
|
41
41
|
var instant = (_g = period['xbrli:instant']) !== null && _g !== void 0 ? _g : period['instant'];
|
|
42
42
|
if (startDate) {
|
|
43
|
-
periodObj.startDate =
|
|
43
|
+
periodObj.startDate = util_xbrl_1.default.toString(startDate);
|
|
44
44
|
}
|
|
45
45
|
if (endDate) {
|
|
46
|
-
periodObj.endDate =
|
|
46
|
+
periodObj.endDate = util_xbrl_1.default.toString(endDate);
|
|
47
47
|
}
|
|
48
48
|
if (instant) {
|
|
49
|
-
periodObj.instant =
|
|
49
|
+
periodObj.instant = util_xbrl_1.default.toString(instant);
|
|
50
50
|
}
|
|
51
51
|
return {
|
|
52
52
|
id: id,
|
|
@@ -62,7 +62,7 @@ var InstanceParser = /** @class */ (function () {
|
|
|
62
62
|
};
|
|
63
63
|
InstanceParser.prototype.parse = function (xml) {
|
|
64
64
|
var _this = this;
|
|
65
|
-
var _a, _b
|
|
65
|
+
var _a, _b;
|
|
66
66
|
var contentLower = xml.toLowerCase();
|
|
67
67
|
var indexXbrlStart = contentLower.indexOf('<xbrl');
|
|
68
68
|
var indexXbrlEnd = contentLower.lastIndexOf('</xbrl');
|
|
@@ -70,12 +70,11 @@ var InstanceParser = /** @class */ (function () {
|
|
|
70
70
|
if (indexXbrlStart === -1) {
|
|
71
71
|
return { factElements: [], contexts: [], units: [] };
|
|
72
72
|
}
|
|
73
|
-
var
|
|
74
|
-
var
|
|
75
|
-
|
|
76
|
-
.toArray((_b = xbrl === null || xbrl === void 0 ? void 0 : xbrl.context) !== null && _b !== void 0 ? _b : [])
|
|
73
|
+
var xbrl = util_xbrl_1.default.extractXbrlObject(this.xmlParser.parse(xbrlContent));
|
|
74
|
+
var contexts = util_xbrl_1.default
|
|
75
|
+
.toArray((_a = xbrl === null || xbrl === void 0 ? void 0 : xbrl.context) !== null && _a !== void 0 ? _a : [])
|
|
77
76
|
.map(function (context) { return _this.parseContext(context); });
|
|
78
|
-
var units =
|
|
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) {
|
|
79
78
|
var _a, _b, _c;
|
|
80
79
|
return ({
|
|
81
80
|
id: (_a = unit['@_id']) !== null && _a !== void 0 ? _a : '',
|
|
@@ -84,8 +83,8 @@ var InstanceParser = /** @class */ (function () {
|
|
|
84
83
|
});
|
|
85
84
|
var factElements = [];
|
|
86
85
|
for (var name_1 in xbrl) {
|
|
87
|
-
for (var _i = 0,
|
|
88
|
-
var element =
|
|
86
|
+
for (var _i = 0, _c = util_xbrl_1.default.toArray(xbrl[name_1]); _i < _c.length; _i++) {
|
|
87
|
+
var element = _c[_i];
|
|
89
88
|
if (!element['@_contextRef'])
|
|
90
89
|
continue;
|
|
91
90
|
var factElement = { name: name_1, id: '', contextRef: '' };
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
var XMLParser_1 = require("../XMLParser");
|
|
4
|
-
var
|
|
4
|
+
var util_xbrl_1 = require("./util-xbrl");
|
|
5
5
|
var LinkbaseParser = /** @class */ (function () {
|
|
6
6
|
function LinkbaseParser(args) {
|
|
7
7
|
var _a = (args !== null && args !== void 0 ? args : {}).xmlParser, xmlParser = _a === void 0 ? new XMLParser_1.default() : _a;
|
|
8
8
|
this.xmlParser = xmlParser;
|
|
9
9
|
}
|
|
10
10
|
LinkbaseParser.prototype.parse = function (xml) {
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
return this.parseLinkbaseDocument((_b = (_a = parsed.XBRL) !== null && _a !== void 0 ? _a : parsed.xbrl) !== null && _b !== void 0 ? _b : parsed);
|
|
11
|
+
var parsed = util_xbrl_1.default.extractXbrlObject(this.xmlParser.parse(xml));
|
|
12
|
+
return this.parseLinkbaseDocument(parsed);
|
|
14
13
|
};
|
|
15
14
|
LinkbaseParser.prototype.parseLinkbaseDocument = function (value) {
|
|
16
|
-
value =
|
|
15
|
+
value = util_xbrl_1.default.toObject(value);
|
|
17
16
|
for (var key in value) {
|
|
18
|
-
var parsedKey =
|
|
17
|
+
var parsedKey = util_xbrl_1.default.parseKey(key);
|
|
19
18
|
switch (parsedKey) {
|
|
20
19
|
case 'linkbase':
|
|
21
20
|
return this.parseLinkbase(value[key]);
|
|
@@ -24,21 +23,21 @@ var LinkbaseParser = /** @class */ (function () {
|
|
|
24
23
|
return null;
|
|
25
24
|
};
|
|
26
25
|
LinkbaseParser.prototype.parseItem = function (value) {
|
|
27
|
-
value =
|
|
26
|
+
value = util_xbrl_1.default.toObject(value);
|
|
28
27
|
var item = {};
|
|
29
28
|
for (var key in value) {
|
|
30
|
-
var parsedKey =
|
|
29
|
+
var parsedKey = util_xbrl_1.default.parseKey(key);
|
|
31
30
|
switch (parsedKey) {
|
|
32
31
|
case 'closed':
|
|
33
|
-
item[parsedKey] =
|
|
32
|
+
item[parsedKey] = util_xbrl_1.default.toBoolean(value[key]);
|
|
34
33
|
break;
|
|
35
34
|
case 'priority':
|
|
36
35
|
case 'order':
|
|
37
36
|
case 'weight':
|
|
38
|
-
item[parsedKey] =
|
|
37
|
+
item[parsedKey] = util_xbrl_1.default.toNumber(value[key]);
|
|
39
38
|
break;
|
|
40
39
|
default:
|
|
41
|
-
item[parsedKey] =
|
|
40
|
+
item[parsedKey] = util_xbrl_1.default.toString(value[key]);
|
|
42
41
|
break;
|
|
43
42
|
}
|
|
44
43
|
}
|
|
@@ -46,24 +45,24 @@ var LinkbaseParser = /** @class */ (function () {
|
|
|
46
45
|
};
|
|
47
46
|
LinkbaseParser.prototype.parseLinkbase = function (value) {
|
|
48
47
|
var _this = this;
|
|
49
|
-
value =
|
|
48
|
+
value = util_xbrl_1.default.toObject(value);
|
|
50
49
|
var linkbase = {};
|
|
51
50
|
for (var key in value) {
|
|
52
|
-
var parsedKey =
|
|
51
|
+
var parsedKey = util_xbrl_1.default.parseKey(key);
|
|
53
52
|
switch (parsedKey) {
|
|
54
53
|
case 'referenceLink':
|
|
55
54
|
case 'labelLink':
|
|
56
55
|
case 'presentationLink':
|
|
57
56
|
case 'calculationLink':
|
|
58
57
|
case 'definitionLink':
|
|
59
|
-
linkbase[parsedKey] =
|
|
58
|
+
linkbase[parsedKey] = util_xbrl_1.default.toArray(value[key]).map(function (v) { return _this.parseItemExtended(v); });
|
|
60
59
|
break;
|
|
61
60
|
case 'roleRef':
|
|
62
61
|
case 'arcroleRef':
|
|
63
|
-
linkbase[parsedKey] =
|
|
62
|
+
linkbase[parsedKey] = util_xbrl_1.default.toArray(value[key]).map(function (v) { return _this.parseItem(v); });
|
|
64
63
|
break;
|
|
65
64
|
default:
|
|
66
|
-
linkbase[parsedKey] =
|
|
65
|
+
linkbase[parsedKey] = util_xbrl_1.default.toString(value[key]);
|
|
67
66
|
break;
|
|
68
67
|
}
|
|
69
68
|
}
|
|
@@ -75,7 +74,7 @@ var LinkbaseParser = /** @class */ (function () {
|
|
|
75
74
|
type: 'extended',
|
|
76
75
|
};
|
|
77
76
|
for (var key in value) {
|
|
78
|
-
var parsedKey =
|
|
77
|
+
var parsedKey = util_xbrl_1.default.parseKey(key);
|
|
79
78
|
switch (parsedKey) {
|
|
80
79
|
case 'loc':
|
|
81
80
|
case 'calculationArc':
|
|
@@ -85,10 +84,10 @@ var LinkbaseParser = /** @class */ (function () {
|
|
|
85
84
|
case 'footnoteArc':
|
|
86
85
|
case 'label':
|
|
87
86
|
case 'footnote':
|
|
88
|
-
item[parsedKey] =
|
|
87
|
+
item[parsedKey] = util_xbrl_1.default.toArray(value[key]).map(function (v) { return _this.parseItem(v); });
|
|
89
88
|
break;
|
|
90
89
|
default:
|
|
91
|
-
item[parsedKey] =
|
|
90
|
+
item[parsedKey] = util_xbrl_1.default.toString(value[key]);
|
|
92
91
|
break;
|
|
93
92
|
}
|
|
94
93
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
var XMLParser_1 = require("../XMLParser");
|
|
4
|
-
var
|
|
4
|
+
var util_xbrl_1 = require("./util-xbrl");
|
|
5
5
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
6
6
|
var SchemaParser = /** @class */ (function () {
|
|
7
7
|
function SchemaParser() {
|
|
@@ -9,130 +9,128 @@ var SchemaParser = /** @class */ (function () {
|
|
|
9
9
|
}
|
|
10
10
|
SchemaParser.prototype.parseAppInfo = function (value) {
|
|
11
11
|
var _this = this;
|
|
12
|
-
value =
|
|
12
|
+
value = util_xbrl_1.default.toObject(value);
|
|
13
13
|
var appinfo = {};
|
|
14
14
|
for (var key in value) {
|
|
15
|
-
var parsedKey =
|
|
15
|
+
var parsedKey = util_xbrl_1.default.parseKey(key);
|
|
16
16
|
switch (parsedKey) {
|
|
17
17
|
case 'roleType':
|
|
18
|
-
appinfo.roleType =
|
|
18
|
+
appinfo.roleType = util_xbrl_1.default.toArray(value[key]).map(function (v) { return _this.parseRoleType(v); });
|
|
19
19
|
break;
|
|
20
20
|
case 'linkbaseRef':
|
|
21
|
-
appinfo.linkbaseRef =
|
|
21
|
+
appinfo.linkbaseRef = util_xbrl_1.default.toArray(value[key]).map(function (v) { return _this.parseLinkbaseRef(v); });
|
|
22
22
|
break;
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
return appinfo;
|
|
26
26
|
};
|
|
27
27
|
SchemaParser.prototype.parseRoleType = function (value) {
|
|
28
|
-
value =
|
|
28
|
+
value = util_xbrl_1.default.toObject(value);
|
|
29
29
|
var roleType = {};
|
|
30
30
|
for (var key in value) {
|
|
31
|
-
var parsedKey =
|
|
31
|
+
var parsedKey = util_xbrl_1.default.parseKey(key);
|
|
32
32
|
switch (parsedKey) {
|
|
33
33
|
case 'usedOn':
|
|
34
|
-
roleType[parsedKey] =
|
|
34
|
+
roleType[parsedKey] = util_xbrl_1.default.toArray(value[key]).map(function (v) { return util_xbrl_1.default.toString(v['#text']); });
|
|
35
35
|
break;
|
|
36
36
|
default:
|
|
37
|
-
roleType[parsedKey] =
|
|
37
|
+
roleType[parsedKey] = util_xbrl_1.default.toString(value[key]);
|
|
38
38
|
break;
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
return roleType;
|
|
42
42
|
};
|
|
43
43
|
SchemaParser.prototype.parseLinkbaseRef = function (value) {
|
|
44
|
-
value =
|
|
44
|
+
value = util_xbrl_1.default.toObject(value);
|
|
45
45
|
var item = {};
|
|
46
46
|
for (var key in value) {
|
|
47
|
-
var parsedKey =
|
|
48
|
-
item[parsedKey] =
|
|
47
|
+
var parsedKey = util_xbrl_1.default.parseKey(key);
|
|
48
|
+
item[parsedKey] = util_xbrl_1.default.toString(value[key]);
|
|
49
49
|
}
|
|
50
50
|
return item;
|
|
51
51
|
};
|
|
52
52
|
SchemaParser.prototype.parseAnnotation = function (value) {
|
|
53
|
-
value =
|
|
53
|
+
value = util_xbrl_1.default.toObject(value);
|
|
54
54
|
var annotation = {};
|
|
55
55
|
for (var key in value) {
|
|
56
|
-
var parsedKey =
|
|
56
|
+
var parsedKey = util_xbrl_1.default.parseKey(key);
|
|
57
57
|
switch (parsedKey) {
|
|
58
58
|
case 'appinfo':
|
|
59
59
|
annotation.appinfo = this.parseAppInfo(value[key]);
|
|
60
60
|
break;
|
|
61
61
|
case 'documentation':
|
|
62
|
-
annotation.documentation =
|
|
62
|
+
annotation.documentation = util_xbrl_1.default.toString(value[key]);
|
|
63
63
|
break;
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
return annotation;
|
|
67
67
|
};
|
|
68
68
|
SchemaParser.prototype.parseElement = function (value) {
|
|
69
|
-
value =
|
|
69
|
+
value = util_xbrl_1.default.toObject(value);
|
|
70
70
|
var element = {
|
|
71
|
-
id:
|
|
72
|
-
name:
|
|
73
|
-
type:
|
|
71
|
+
id: util_xbrl_1.default.toString(value['@_id']),
|
|
72
|
+
name: util_xbrl_1.default.toString(value['@_name']),
|
|
73
|
+
type: util_xbrl_1.default.toString(value['@_type']),
|
|
74
74
|
};
|
|
75
75
|
for (var key in value) {
|
|
76
|
-
var parsedKey =
|
|
77
|
-
switch (
|
|
76
|
+
var parsedKey = util_xbrl_1.default.parseKey(key);
|
|
77
|
+
switch (util_xbrl_1.default.parseKey(key)) {
|
|
78
78
|
case 'abstract':
|
|
79
79
|
case 'nillable':
|
|
80
80
|
case 'headUsable':
|
|
81
|
-
element[parsedKey] =
|
|
81
|
+
element[parsedKey] = util_xbrl_1.default.toBoolean(value[key]);
|
|
82
82
|
break;
|
|
83
83
|
case 'complexType':
|
|
84
84
|
case 'annotation':
|
|
85
|
-
element[parsedKey] =
|
|
85
|
+
element[parsedKey] = util_xbrl_1.default.toObject(value[key]);
|
|
86
86
|
break;
|
|
87
87
|
default:
|
|
88
|
-
element[parsedKey] =
|
|
88
|
+
element[parsedKey] = util_xbrl_1.default.toString(value[key]);
|
|
89
89
|
break;
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
return element;
|
|
93
93
|
};
|
|
94
94
|
SchemaParser.prototype.parseImport = function (value) {
|
|
95
|
-
value =
|
|
95
|
+
value = util_xbrl_1.default.toObject(value);
|
|
96
96
|
return {
|
|
97
|
-
namespace:
|
|
98
|
-
schemaLocation:
|
|
97
|
+
namespace: util_xbrl_1.default.toString(value['@_namespace']),
|
|
98
|
+
schemaLocation: util_xbrl_1.default.toString(value['@_schemaLocation']),
|
|
99
99
|
};
|
|
100
100
|
};
|
|
101
101
|
SchemaParser.prototype.parse = function (xml) {
|
|
102
102
|
var _this = this;
|
|
103
|
-
var
|
|
104
|
-
var parsed = this.xmlParser.parse(xml);
|
|
105
|
-
var xbrl = (_b = (_a = parsed.XBRL) !== null && _a !== void 0 ? _a : parsed.xbrl) !== null && _b !== void 0 ? _b : parsed;
|
|
103
|
+
var xbrl = util_xbrl_1.default.extractXbrlObject(this.xmlParser.parse(xml));
|
|
106
104
|
var schemaRaw = null;
|
|
107
105
|
for (var key in xbrl) {
|
|
108
|
-
if (
|
|
106
|
+
if (util_xbrl_1.default.parseKey(key) !== 'schema')
|
|
109
107
|
continue;
|
|
110
108
|
schemaRaw = xbrl[key];
|
|
111
109
|
break;
|
|
112
110
|
}
|
|
113
111
|
var value = schemaRaw === null ? xbrl : schemaRaw;
|
|
114
112
|
var schema = {
|
|
115
|
-
xmlns:
|
|
113
|
+
xmlns: util_xbrl_1.default.toString(value['@_xmlns']),
|
|
116
114
|
_xmlnsProps: {},
|
|
117
115
|
};
|
|
118
116
|
for (var key in value) {
|
|
119
|
-
var parsedKey =
|
|
117
|
+
var parsedKey = util_xbrl_1.default.parseKey(key);
|
|
120
118
|
switch (parsedKey) {
|
|
121
119
|
case 'annotation':
|
|
122
120
|
schema.annotation = this.parseAnnotation(value[key]);
|
|
123
121
|
break;
|
|
124
122
|
case 'element':
|
|
125
|
-
schema.element =
|
|
123
|
+
schema.element = util_xbrl_1.default.toArray(value[key]).map(function (v) { return _this.parseElement(v); });
|
|
126
124
|
break;
|
|
127
125
|
case 'import':
|
|
128
|
-
schema.import =
|
|
126
|
+
schema.import = util_xbrl_1.default.toArray(value[key]).map(function (v) { return _this.parseImport(v); });
|
|
129
127
|
break;
|
|
130
128
|
default:
|
|
131
129
|
if (key.startsWith('@_xmlns:')) {
|
|
132
|
-
schema._xmlnsProps[parsedKey] =
|
|
130
|
+
schema._xmlnsProps[parsedKey] = util_xbrl_1.default.toString(value[key]);
|
|
133
131
|
}
|
|
134
132
|
else {
|
|
135
|
-
schema[parsedKey] =
|
|
133
|
+
schema[parsedKey] = util_xbrl_1.default.toString(value[key]);
|
|
136
134
|
}
|
|
137
135
|
break;
|
|
138
136
|
}
|
|
@@ -17,7 +17,11 @@ var XBRLParser = /** @class */ (function () {
|
|
|
17
17
|
var _a, _b, _c, _d, _e, _f;
|
|
18
18
|
var xmlDocs = documents.filter(function (doc) { return doc.fileName.endsWith('.xml') || doc.fileName.endsWith('.xsd'); });
|
|
19
19
|
return {
|
|
20
|
-
instanceDoc: (_a = xmlDocs.find(function (doc) {
|
|
20
|
+
instanceDoc: (_a = xmlDocs.find(function (doc) {
|
|
21
|
+
return doc.description.toLowerCase().includes('instance doc') ||
|
|
22
|
+
doc.fileName.endsWith('_htm.xml') ||
|
|
23
|
+
(doc.content.includes('<us-gaap') && doc.content.includes('<context'));
|
|
24
|
+
})) !== null && _a !== void 0 ? _a : null,
|
|
21
25
|
schemaDoc: (_b = xmlDocs.find(function (doc) { return doc.fileName.endsWith('.xsd'); })) !== null && _b !== void 0 ? _b : null,
|
|
22
26
|
linkbasePresentationDoc: (_c = xmlDocs.find(function (doc) { return doc.fileName.endsWith('_pre.xml'); })) !== null && _c !== void 0 ? _c : null,
|
|
23
27
|
linkbaseDefinitionDoc: (_d = xmlDocs.find(function (doc) { return doc.fileName.endsWith('_def.xml'); })) !== null && _d !== void 0 ? _d : null,
|
|
@@ -4,12 +4,14 @@ declare function toObject<T>(value: T): T;
|
|
|
4
4
|
declare function toString(value: any): string;
|
|
5
5
|
declare function toBoolean(value: any): boolean;
|
|
6
6
|
declare function parseKey(key: string): string;
|
|
7
|
-
declare
|
|
7
|
+
declare function extractXbrlObject(value: any): any;
|
|
8
|
+
declare const utilXbrl: {
|
|
8
9
|
toArray: typeof toArray;
|
|
9
10
|
toNumber: typeof toNumber;
|
|
10
11
|
toObject: typeof toObject;
|
|
11
12
|
toString: typeof toString;
|
|
12
13
|
toBoolean: typeof toBoolean;
|
|
13
14
|
parseKey: typeof parseKey;
|
|
15
|
+
extractXbrlObject: typeof extractXbrlObject;
|
|
14
16
|
};
|
|
15
|
-
export default
|
|
17
|
+
export default utilXbrl;
|
|
@@ -23,12 +23,28 @@ function parseKey(key) {
|
|
|
23
23
|
var _a, _b;
|
|
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;
|
|
28
|
+
var xbrl = value;
|
|
29
|
+
if (typeof xbrl !== 'object' || xbrl === null) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
for (var i = 0; i < 10; i++) {
|
|
33
|
+
var xbrlChild = (_a = xbrl.XBRL) !== null && _a !== void 0 ? _a : xbrl.xbrl;
|
|
34
|
+
if (xbrlChild)
|
|
35
|
+
xbrl = xbrlChild;
|
|
36
|
+
else
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
return xbrl;
|
|
40
|
+
}
|
|
41
|
+
var utilXbrl = {
|
|
27
42
|
toArray: toArray,
|
|
28
43
|
toNumber: toNumber,
|
|
29
44
|
toObject: toObject,
|
|
30
45
|
toString: toString,
|
|
31
46
|
toBoolean: toBoolean,
|
|
32
47
|
parseKey: parseKey,
|
|
48
|
+
extractXbrlObject: extractXbrlObject,
|
|
33
49
|
};
|
|
34
|
-
exports.default =
|
|
50
|
+
exports.default = utilXbrl;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { FactItem, ReportRaw, XMLParams } from '../../../types';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}): XbrlParseResult & {
|
|
2
|
+
import { GetDocumentXbrlParams } from '../../SecEdgarApi';
|
|
3
|
+
import { XbrlParseResult } from '../XBRLParser/XBRLParser';
|
|
4
|
+
export declare function parseXbrl(params: XMLParams & GetDocumentXbrlParams): XbrlParseResult & {
|
|
6
5
|
report: ReportRaw | null;
|
|
7
6
|
facts: FactItem[];
|
|
7
|
+
xml: string;
|
|
8
8
|
};
|
|
@@ -23,6 +23,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
23
23
|
};
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
25
|
exports.parseXbrl = void 0;
|
|
26
|
+
var constants_1 = require("../../../util/constants");
|
|
26
27
|
var XBRLParser_1 = require("../XBRLParser/XBRLParser");
|
|
27
28
|
function isWithinDays(params) {
|
|
28
29
|
var dateA = params.dateA, dateB = params.dateB, days = params.days;
|
|
@@ -31,7 +32,7 @@ function isWithinDays(params) {
|
|
|
31
32
|
return daysDiff < days;
|
|
32
33
|
}
|
|
33
34
|
function buildReportsFromFacts(params) {
|
|
34
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
35
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
|
|
35
36
|
var filing = params.filing, facts = params.facts, fiscalPeriod = params.fiscalPeriod, fiscalYear = params.fiscalYear, pathSeparator = params.pathSeparator, cikProp = params.cik;
|
|
36
37
|
var urlParts = (_a = filing === null || filing === void 0 ? void 0 : filing.url.split('/')) !== null && _a !== void 0 ? _a : [];
|
|
37
38
|
var cik = cikProp !== null && cikProp !== void 0 ? cikProp : urlParts[(_b = urlParts.indexOf('data')) !== null && _b !== void 0 ? _b : -1];
|
|
@@ -41,15 +42,22 @@ function buildReportsFromFacts(params) {
|
|
|
41
42
|
fiscalPeriod: fiscalPeriod,
|
|
42
43
|
fiscalYear: fiscalYear,
|
|
43
44
|
};
|
|
45
|
+
// if there is a split fact, make sure it's from the current fiscal year
|
|
46
|
+
var allowedMonthsPriorForSplit = fiscalPeriod === 'FY' ? 12 : 3;
|
|
47
|
+
var splitFact = facts.find(function (f) {
|
|
48
|
+
var _a;
|
|
49
|
+
return f.name.endsWith(constants_1.KEY_SPLIT) &&
|
|
50
|
+
isWithinDays({ dateA: f.filed, dateB: (_a = filing === null || filing === void 0 ? void 0 : filing.reportDate) !== null && _a !== void 0 ? _a : '', days: allowedMonthsPriorForSplit * 30 });
|
|
51
|
+
});
|
|
44
52
|
var reportFocus = {
|
|
45
53
|
cik: Number(cik !== null && cik !== void 0 ? cik : reportFactValues.cik),
|
|
46
54
|
dateFiled: (_d = filing === null || filing === void 0 ? void 0 : filing.filingDate) !== null && _d !== void 0 ? _d : '',
|
|
47
55
|
dateReport: String((_e = filing === null || filing === void 0 ? void 0 : filing.reportDate) !== null && _e !== void 0 ? _e : reportFactValues.dateReport),
|
|
48
56
|
fiscalPeriod: (fiscalPeriod !== null && fiscalPeriod !== void 0 ? fiscalPeriod : reportFactValues.fiscalPeriod),
|
|
49
57
|
fiscalYear: Number(fiscalYear !== null && fiscalYear !== void 0 ? fiscalYear : reportFactValues.fiscalYear),
|
|
50
|
-
splitDate: null,
|
|
51
|
-
splitRatio: null,
|
|
52
|
-
url: (
|
|
58
|
+
splitDate: (_f = splitFact === null || splitFact === void 0 ? void 0 : splitFact.end) !== null && _f !== void 0 ? _f : null,
|
|
59
|
+
splitRatio: (splitFact === null || splitFact === void 0 ? void 0 : splitFact.value) ? Number(splitFact.value) : null,
|
|
60
|
+
url: (_g = filing === null || filing === void 0 ? void 0 : filing.url) !== null && _g !== void 0 ? _g : '',
|
|
53
61
|
};
|
|
54
62
|
var reportByDateRange = {};
|
|
55
63
|
var factByName = new Map();
|
|
@@ -59,16 +67,16 @@ function buildReportsFromFacts(params) {
|
|
|
59
67
|
for (var _i = 0, facts_1 = facts; _i < facts_1.length; _i++) {
|
|
60
68
|
var fact = facts_1[_i];
|
|
61
69
|
var dateKey = fact.start ? "".concat(fact.start, "_").concat(fact.end) : fact.end;
|
|
62
|
-
(
|
|
63
|
-
startDate: (
|
|
70
|
+
(_h = reportByDateRange[dateKey]) !== null && _h !== void 0 ? _h : (reportByDateRange[dateKey] = {
|
|
71
|
+
startDate: (_j = fact.start) !== null && _j !== void 0 ? _j : '',
|
|
64
72
|
endDate: fact.end,
|
|
65
73
|
});
|
|
66
|
-
var isFocusFact = (
|
|
74
|
+
var isFocusFact = (_k = isFocusFactByDateKey.get(dateKey)) !== null && _k !== void 0 ? _k : isWithinDays({ dateA: fact.end, dateB: reportFocus.dateReport, days: 45 });
|
|
67
75
|
isFocusFactByDateKey.set(dateKey, isFocusFact);
|
|
68
76
|
var el = fact;
|
|
69
|
-
var scale = Number((
|
|
70
|
-
var decimals = Number((
|
|
71
|
-
var suffix = (
|
|
77
|
+
var scale = Number((_l = el.scale) !== null && _l !== void 0 ? _l : 0) || 0;
|
|
78
|
+
var decimals = Number((_m = el.decimals) !== null && _m !== void 0 ? _m : 0) || 0;
|
|
79
|
+
var suffix = (_o = fact === null || fact === void 0 ? void 0 : fact.segments) === null || _o === void 0 ? void 0 : _o.map(function (_a) {
|
|
72
80
|
var dimension = _a.dimension, value = _a.value;
|
|
73
81
|
return "".concat(dimension).concat(pathSeparator).concat(value);
|
|
74
82
|
}).join(pathSeparator);
|
|
@@ -82,8 +90,8 @@ function buildReportsFromFacts(params) {
|
|
|
82
90
|
var prevRounding = roundPlacesByName.get(prevFactKey);
|
|
83
91
|
var prevScale = scaleByName.get(prevFactKey);
|
|
84
92
|
var prevFact_1 = factByName.get(prevFactKey);
|
|
85
|
-
var prevUnit = (
|
|
86
|
-
var unit = (
|
|
93
|
+
var prevUnit = (_q = (_p = prevFact_1 === null || prevFact_1 === void 0 ? void 0 : prevFact_1.unit) === null || _p === void 0 ? void 0 : _p.split('_').pop()) === null || _q === void 0 ? void 0 : _q.toLowerCase();
|
|
94
|
+
var unit = (_s = (_r = fact.unit) === null || _r === void 0 ? void 0 : _r.split('_').pop()) === null || _s === void 0 ? void 0 : _s.toLowerCase();
|
|
87
95
|
var shouldSkip = [
|
|
88
96
|
(prevUnit === null || prevUnit === void 0 ? void 0 : prevUnit.length) === 3 && (unit === null || unit === void 0 ? void 0 : unit.length) === 3 && prevUnit !== unit && prevUnit === 'usd',
|
|
89
97
|
(prevRounding !== null && prevRounding !== void 0 ? prevRounding : 0) < roundPlaces,
|
|
@@ -166,6 +174,6 @@ function parseXbrl(params) {
|
|
|
166
174
|
urlPrimaryDocument: '',
|
|
167
175
|
},
|
|
168
176
|
}), factsFiltered = _p.factsFiltered, reportFocus = _p.reportFocus;
|
|
169
|
-
return __assign(__assign({}, response), { facts: factsFiltered, report: reportFocus });
|
|
177
|
+
return __assign(__assign({}, response), { facts: factsFiltered, report: factsFiltered.length > 0 ? reportFocus : null, xml: xml });
|
|
170
178
|
}
|
|
171
179
|
exports.parseXbrl = parseXbrl;
|
|
@@ -20,6 +20,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
20
20
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
21
21
|
};
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
var constants_1 = require("../../util/constants");
|
|
23
24
|
var FactPeriodResolver_1 = require("./FactPeriodResolver");
|
|
24
25
|
/**
|
|
25
26
|
* Splits can be filed multiple times throughout different reports. There is no clear
|
|
@@ -29,7 +30,7 @@ var FactPeriodResolver_1 = require("./FactPeriodResolver");
|
|
|
29
30
|
*/
|
|
30
31
|
var FactSplitAdjuster = /** @class */ (function () {
|
|
31
32
|
function FactSplitAdjuster() {
|
|
32
|
-
this.keySplit =
|
|
33
|
+
this.keySplit = constants_1.KEY_SPLIT;
|
|
33
34
|
this.preferFirstValue = true;
|
|
34
35
|
}
|
|
35
36
|
FactSplitAdjuster.prototype.getGroupValue = function (factGroup, isTrailing) {
|
|
@@ -2,7 +2,6 @@ import { CompanyFactFrame, CompanyFactListData, CompanyTickerItem, DailyFilingFo
|
|
|
2
2
|
import { FilingListDetails, FilingListItemTranslated, SubmissionList } from '../../types/submission.type';
|
|
3
3
|
import { IClient } from '../Client';
|
|
4
4
|
import DocumentParser from '../DocumentParser';
|
|
5
|
-
import { ParseXbrlOptions } from '../DocumentParser/XBRLParser/XBRLParser';
|
|
6
5
|
import ReportParser from '../ReportParser';
|
|
7
6
|
import ReportWrapper from '../ReportParser/ReportWrapper';
|
|
8
7
|
import FilingMapper from './FilingMapper';
|
|
@@ -54,12 +53,6 @@ export interface GetFactFrameParams {
|
|
|
54
53
|
unit?: 'pure' | 'USD' | 'shares' | string;
|
|
55
54
|
taxonomy?: 'us-gaap' | 'dei' | 'invest' | string;
|
|
56
55
|
}
|
|
57
|
-
export interface GetDocumentXMLParams {
|
|
58
|
-
/** symbol or cik */
|
|
59
|
-
symbol: string | number;
|
|
60
|
-
accessionNumber: string;
|
|
61
|
-
primaryDocument: string;
|
|
62
|
-
}
|
|
63
56
|
export interface GetInsiderTransactionsParams {
|
|
64
57
|
page: number;
|
|
65
58
|
symbol: string | number;
|
|
@@ -83,6 +76,15 @@ interface GetCurrentFilingsParams {
|
|
|
83
76
|
symbol?: string | number;
|
|
84
77
|
searchType?: 'include' | 'exclude' | 'only';
|
|
85
78
|
}
|
|
79
|
+
export interface GetDocumentXbrlParams {
|
|
80
|
+
url?: string;
|
|
81
|
+
symbol?: string | number;
|
|
82
|
+
accessionNumber?: string;
|
|
83
|
+
includeReport?: boolean;
|
|
84
|
+
includeInstance?: boolean;
|
|
85
|
+
includeLinkbases?: boolean;
|
|
86
|
+
includeSchema?: boolean;
|
|
87
|
+
}
|
|
86
88
|
/**
|
|
87
89
|
* Gets reports from companies filed with the SEC
|
|
88
90
|
*
|
|
@@ -192,7 +194,8 @@ export default class SecEdgarApi {
|
|
|
192
194
|
*/
|
|
193
195
|
getMutualFundList(): Promise<FieldDataResponse<'cik' | 'seriesId' | 'classId' | 'symbol'>>;
|
|
194
196
|
/**
|
|
195
|
-
*
|
|
197
|
+
* If url is provided, all other props are ignored. Otherwise, both accessionNumber
|
|
198
|
+
* and symbol (symbol or cik) are required. provide fileName if different from `${accessionNumber}.txt`
|
|
196
199
|
*
|
|
197
200
|
* Some form types can be parsed using the DocumentParser such as form 4 (insider transactions) and form 13g (institutional holders)
|
|
198
201
|
*
|
|
@@ -200,19 +203,32 @@ export default class SecEdgarApi {
|
|
|
200
203
|
*
|
|
201
204
|
* @see https://www.sec.gov/forms for a list of form types
|
|
202
205
|
*/
|
|
203
|
-
|
|
206
|
+
getDocument(params: {
|
|
207
|
+
url?: string;
|
|
208
|
+
symbol?: string | number;
|
|
209
|
+
accessionNumber?: string;
|
|
210
|
+
fileName?: string;
|
|
211
|
+
}): Promise<string>;
|
|
204
212
|
/**
|
|
205
|
-
*
|
|
206
|
-
*
|
|
207
|
-
* Some form types can be parsed using the DocumentParser such as form 4 (insider transactions) and form 13g (institutional holders)
|
|
213
|
+
* Fetches SEC document and parses XBRL data. If url is provided, symbol and accessionNumber are ignored.
|
|
208
214
|
*
|
|
209
|
-
*
|
|
215
|
+
* Use "include" params to specify what to parse. If not provided, all data is parsed.
|
|
216
|
+
*/
|
|
217
|
+
getDocumentXbrl(params: GetDocumentXbrlParams): Promise<import("../DocumentParser/XBRLParser/XBRLParser").XbrlParseResult & {
|
|
218
|
+
report: ReportRaw | null;
|
|
219
|
+
facts: import("../../types").FactItem[];
|
|
220
|
+
xml: string;
|
|
221
|
+
}>;
|
|
222
|
+
/**
|
|
223
|
+
* Builds a url for a document. If fileName is not provided, it defaults to `${accessionNumber}.txt`
|
|
210
224
|
*
|
|
211
|
-
*
|
|
225
|
+
* format: `https://www.sec.gov/Archives/edgar/data/${cik}/${accessionNumberNoHyphen)}/${fileNameAccessionFile}`
|
|
212
226
|
*/
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
227
|
+
buildDocumentUrl(params: {
|
|
228
|
+
symbol: string | number;
|
|
229
|
+
accessionNumber: string;
|
|
230
|
+
fileName?: string;
|
|
231
|
+
}): string;
|
|
216
232
|
/**
|
|
217
233
|
* Used for getting insider transactions. extracts insider transaction urls from submission list response, and parses the xml doc.
|
|
218
234
|
*
|
|
@@ -285,17 +301,9 @@ export default class SecEdgarApi {
|
|
|
285
301
|
/**
|
|
286
302
|
* @see https://www.sec.gov/structureddata/rss-feeds-submitted-filings
|
|
287
303
|
*/
|
|
288
|
-
|
|
304
|
+
getCurrentFilingsXbrl(params?: {
|
|
289
305
|
taxonomy?: 'usGaap' | 'mutualFund' | 'inlineXbrl' | 'allXbrl';
|
|
290
306
|
}): Promise<import("../../types").CurrentFilingsXBRL>;
|
|
291
|
-
getDocumentXbrl(params: {
|
|
292
|
-
url: string;
|
|
293
|
-
} & ParseXbrlOptions & {
|
|
294
|
-
includeReport?: boolean;
|
|
295
|
-
}): Promise<import("../DocumentParser/XBRLParser/XBRLParser").XbrlParseResult & {
|
|
296
|
-
report: ReportRaw | null;
|
|
297
|
-
facts: import("../../types").FactItem[];
|
|
298
|
-
}>;
|
|
299
307
|
/**
|
|
300
308
|
* Gets insider transactions for a provided symbol or CIK.
|
|
301
309
|
*
|
|
@@ -354,7 +354,8 @@ var SecEdgarApi = /** @class */ (function () {
|
|
|
354
354
|
});
|
|
355
355
|
};
|
|
356
356
|
/**
|
|
357
|
-
*
|
|
357
|
+
* If url is provided, all other props are ignored. Otherwise, both accessionNumber
|
|
358
|
+
* and symbol (symbol or cik) are required. provide fileName if different from `${accessionNumber}.txt`
|
|
358
359
|
*
|
|
359
360
|
* Some form types can be parsed using the DocumentParser such as form 4 (insider transactions) and form 13g (institutional holders)
|
|
360
361
|
*
|
|
@@ -362,32 +363,50 @@ var SecEdgarApi = /** @class */ (function () {
|
|
|
362
363
|
*
|
|
363
364
|
* @see https://www.sec.gov/forms for a list of form types
|
|
364
365
|
*/
|
|
365
|
-
SecEdgarApi.prototype.
|
|
366
|
+
SecEdgarApi.prototype.getDocument = function (params) {
|
|
366
367
|
return __awaiter(this, void 0, void 0, function () {
|
|
367
|
-
var accessionNumber,
|
|
368
|
-
return __generator(this, function (
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
368
|
+
var _a, accessionNumber, fileName, _b, symbol, urlProp, url;
|
|
369
|
+
return __generator(this, function (_c) {
|
|
370
|
+
_a = params.accessionNumber, accessionNumber = _a === void 0 ? '' : _a, fileName = params.fileName, _b = params.symbol, symbol = _b === void 0 ? '' : _b, urlProp = params.url;
|
|
371
|
+
if (!urlProp && (!accessionNumber || !symbol)) {
|
|
372
|
+
throw new Error('Must provide either url or (a)ccessionNumber and symbol)');
|
|
373
|
+
}
|
|
374
|
+
url = urlProp !== null && urlProp !== void 0 ? urlProp : this.buildDocumentUrl({ symbol: symbol, accessionNumber: accessionNumber, fileName: fileName });
|
|
375
|
+
return [2 /*return*/, this.request(url, true)];
|
|
372
376
|
});
|
|
373
377
|
});
|
|
374
378
|
};
|
|
375
379
|
/**
|
|
376
|
-
*
|
|
377
|
-
*
|
|
378
|
-
* Some form types can be parsed using the DocumentParser such as form 4 (insider transactions) and form 13g (institutional holders)
|
|
379
|
-
*
|
|
380
|
-
* endpoint: `https://www.sec.gov/Archives/edgar/data/${cik}/${accessionNumber}/${primaryDocument}`
|
|
380
|
+
* Fetches SEC document and parses XBRL data. If url is provided, symbol and accessionNumber are ignored.
|
|
381
381
|
*
|
|
382
|
-
*
|
|
382
|
+
* Use "include" params to specify what to parse. If not provided, all data is parsed.
|
|
383
383
|
*/
|
|
384
|
-
SecEdgarApi.prototype.
|
|
384
|
+
SecEdgarApi.prototype.getDocumentXbrl = function (params) {
|
|
385
385
|
return __awaiter(this, void 0, void 0, function () {
|
|
386
|
+
var url, accessionNumber, symbol, options, xml;
|
|
386
387
|
return __generator(this, function (_a) {
|
|
387
|
-
|
|
388
|
+
switch (_a.label) {
|
|
389
|
+
case 0:
|
|
390
|
+
url = params.url, accessionNumber = params.accessionNumber, symbol = params.symbol, options = __rest(params, ["url", "accessionNumber", "symbol"]);
|
|
391
|
+
return [4 /*yield*/, this.getDocument({ url: url, accessionNumber: accessionNumber, symbol: symbol })];
|
|
392
|
+
case 1:
|
|
393
|
+
xml = _a.sent();
|
|
394
|
+
return [2 /*return*/, this.documentParser.parseXbrl(__assign({ xml: xml }, options))];
|
|
395
|
+
}
|
|
388
396
|
});
|
|
389
397
|
});
|
|
390
398
|
};
|
|
399
|
+
/**
|
|
400
|
+
* Builds a url for a document. If fileName is not provided, it defaults to `${accessionNumber}.txt`
|
|
401
|
+
*
|
|
402
|
+
* format: `https://www.sec.gov/Archives/edgar/data/${cik}/${accessionNumberNoHyphen)}/${fileNameAccessionFile}`
|
|
403
|
+
*/
|
|
404
|
+
SecEdgarApi.prototype.buildDocumentUrl = function (params) {
|
|
405
|
+
var symbol = params.symbol, accessionNumber = params.accessionNumber, fileNameProp = params.fileName;
|
|
406
|
+
var cik = Number(this.getCikString(symbol));
|
|
407
|
+
var fileName = fileNameProp !== null && fileNameProp !== void 0 ? fileNameProp : "".concat(accessionNumber, ".txt");
|
|
408
|
+
return "".concat(this.baseUrlSec, "/Archives/edgar/data/").concat(cik, "/").concat(accessionNumber.replace(/-/g, ''), "/").concat(fileName);
|
|
409
|
+
};
|
|
391
410
|
/**
|
|
392
411
|
* Used for getting insider transactions. extracts insider transaction urls from submission list response, and parses the xml doc.
|
|
393
412
|
*
|
|
@@ -411,7 +430,7 @@ var SecEdgarApi = /** @class */ (function () {
|
|
|
411
430
|
case 0:
|
|
412
431
|
_b = (_a = this.documentParser).parseForm4;
|
|
413
432
|
_c = {};
|
|
414
|
-
return [4 /*yield*/, this.
|
|
433
|
+
return [4 /*yield*/, this.getDocument(params)];
|
|
415
434
|
case 1: return [2 /*return*/, _b.apply(_a, [(_c.xml = _d.sent(), _c)])];
|
|
416
435
|
}
|
|
417
436
|
});
|
|
@@ -446,7 +465,7 @@ var SecEdgarApi = /** @class */ (function () {
|
|
|
446
465
|
case 0:
|
|
447
466
|
_b = (_a = this.documentParser).parseForm13g;
|
|
448
467
|
_c = {};
|
|
449
|
-
return [4 /*yield*/, this.
|
|
468
|
+
return [4 /*yield*/, this.getDocument(params)];
|
|
450
469
|
case 1: return [2 /*return*/, _b.apply(_a, [(_c.xml = _d.sent(), _c)])];
|
|
451
470
|
}
|
|
452
471
|
});
|
|
@@ -490,7 +509,7 @@ var SecEdgarApi = /** @class */ (function () {
|
|
|
490
509
|
case 0:
|
|
491
510
|
_b = (_a = this.documentParser).parseForm10k;
|
|
492
511
|
_c = {};
|
|
493
|
-
return [4 /*yield*/, this.
|
|
512
|
+
return [4 /*yield*/, this.getDocument(params)];
|
|
494
513
|
case 1: return [2 /*return*/, _b.apply(_a, [(_c.xml = _d.sent(), _c)])];
|
|
495
514
|
}
|
|
496
515
|
});
|
|
@@ -524,7 +543,7 @@ var SecEdgarApi = /** @class */ (function () {
|
|
|
524
543
|
case 0:
|
|
525
544
|
_b = (_a = this.documentParser).parseFormDef14a;
|
|
526
545
|
_c = {};
|
|
527
|
-
return [4 /*yield*/, this.
|
|
546
|
+
return [4 /*yield*/, this.getDocument(params)];
|
|
528
547
|
case 1: return [2 /*return*/, _b.apply(_a, [(_c.xml = _d.sent(), _c)])];
|
|
529
548
|
}
|
|
530
549
|
});
|
|
@@ -579,7 +598,7 @@ var SecEdgarApi = /** @class */ (function () {
|
|
|
579
598
|
switch (_e.label) {
|
|
580
599
|
case 0:
|
|
581
600
|
_b = params !== null && params !== void 0 ? params : {}, _c = _b.page, page = _c === void 0 ? 1 : _c, _d = _b.itemsPerPage, itemsPerPage = _d === void 0 ? 100 : _d, formType = _b.formType, searchType = _b.searchType, symbol = _b.symbol;
|
|
582
|
-
type = (_a = formType === null || formType === void 0 ? void 0 : formType.replace(/\s
|
|
601
|
+
type = (_a = formType === null || formType === void 0 ? void 0 : formType.trim().replace(/\s/g, '+')) !== null && _a !== void 0 ? _a : null;
|
|
583
602
|
owner = searchType !== null && searchType !== void 0 ? searchType : ((formType === null || formType === void 0 ? void 0 : formType.includes(' ')) ? 'include' : 'only');
|
|
584
603
|
offset = (page - 1) * Math.max(1, itemsPerPage || 100);
|
|
585
604
|
cik = symbol ? Number(this.getCikString(symbol)) : null;
|
|
@@ -601,7 +620,7 @@ var SecEdgarApi = /** @class */ (function () {
|
|
|
601
620
|
/**
|
|
602
621
|
* @see https://www.sec.gov/structureddata/rss-feeds-submitted-filings
|
|
603
622
|
*/
|
|
604
|
-
SecEdgarApi.prototype.
|
|
623
|
+
SecEdgarApi.prototype.getCurrentFilingsXbrl = function (params) {
|
|
605
624
|
return __awaiter(this, void 0, void 0, function () {
|
|
606
625
|
var _a, taxonomy, urlByTaxonomy, url, xml;
|
|
607
626
|
return __generator(this, function (_b) {
|
|
@@ -623,21 +642,6 @@ var SecEdgarApi = /** @class */ (function () {
|
|
|
623
642
|
});
|
|
624
643
|
});
|
|
625
644
|
};
|
|
626
|
-
SecEdgarApi.prototype.getDocumentXbrl = function (params) {
|
|
627
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
628
|
-
var url, options, xml;
|
|
629
|
-
return __generator(this, function (_a) {
|
|
630
|
-
switch (_a.label) {
|
|
631
|
-
case 0:
|
|
632
|
-
url = params.url, options = __rest(params, ["url"]);
|
|
633
|
-
return [4 /*yield*/, this.getDocumentXMLByUrl({ url: url })];
|
|
634
|
-
case 1:
|
|
635
|
-
xml = _a.sent();
|
|
636
|
-
return [2 /*return*/, this.documentParser.parseXbrl(__assign({ xml: xml }, options))];
|
|
637
|
-
}
|
|
638
|
-
});
|
|
639
|
-
});
|
|
640
|
-
};
|
|
641
645
|
/**
|
|
642
646
|
* Gets insider transactions for a provided symbol or CIK.
|
|
643
647
|
*
|
package/package.json
CHANGED