sec-edgar-api 0.3.3 → 0.4.0
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/Client/Client.d.ts +1 -0
- package/build/services/DocumentParser/DocumentParser.d.ts +18 -1
- package/build/services/DocumentParser/DocumentParser.js +17 -2
- package/build/services/DocumentParser/DocumentXmlSplitter.d.ts +17 -0
- package/build/services/DocumentParser/DocumentXmlSplitter.js +38 -0
- package/build/services/DocumentParser/ObjectUtil.d.ts +20 -0
- package/build/services/DocumentParser/ObjectUtil.js +60 -0
- package/build/services/DocumentParser/XBRLParser/HeaderParser.d.ts +38 -0
- package/build/services/DocumentParser/XBRLParser/HeaderParser.js +138 -0
- package/build/services/DocumentParser/XBRLParser/InstanceParser.d.ts +6 -0
- package/build/services/DocumentParser/XBRLParser/InstanceParser.js +107 -0
- package/build/services/DocumentParser/XBRLParser/LinkbaseParser.d.ts +13 -0
- package/build/services/DocumentParser/XBRLParser/LinkbaseParser.js +99 -0
- package/build/services/DocumentParser/XBRLParser/SchemaParser.d.ts +11 -0
- package/build/services/DocumentParser/XBRLParser/SchemaParser.js +144 -0
- package/build/services/DocumentParser/XBRLParser/XBRLParser.d.ts +34 -0
- package/build/services/DocumentParser/XBRLParser/XBRLParser.js +64 -0
- package/build/services/DocumentParser/XBRLParser/util-type.d.ts +15 -0
- package/build/services/DocumentParser/XBRLParser/util-type.js +34 -0
- package/build/services/DocumentParser/XMLNode/XMLNode.js +2 -2
- package/build/services/DocumentParser/XMLParser.d.ts +9 -38
- package/build/services/DocumentParser/XMLParser.js +88 -283
- package/build/services/DocumentParser/XMLParserLegacy.d.ts +43 -0
- package/build/services/DocumentParser/XMLParserLegacy.js +308 -0
- package/build/services/DocumentParser/parsers/index.d.ts +10 -0
- package/build/services/DocumentParser/parsers/index.js +10 -0
- package/build/services/DocumentParser/parsers/parse-companies.d.ts +5 -0
- package/build/services/DocumentParser/parsers/parse-companies.js +52 -0
- package/build/services/DocumentParser/parsers/parse-current-filings-daily.js +8 -8
- package/build/services/DocumentParser/parsers/parse-current-filings-xbrl.d.ts +2 -0
- package/build/services/DocumentParser/parsers/parse-current-filings-xbrl.js +104 -0
- package/build/services/DocumentParser/parsers/parse-current-filings.d.ts +2 -0
- package/build/services/DocumentParser/parsers/parse-current-filings.js +76 -0
- package/build/services/DocumentParser/parsers/parse-form-10k.d.ts +1 -1
- package/build/services/DocumentParser/parsers/parse-form-10k.js +2 -2
- package/build/services/DocumentParser/parsers/parse-form-13g.d.ts +1 -1
- package/build/services/DocumentParser/parsers/parse-form-13g.js +2 -2
- package/build/services/DocumentParser/parsers/parse-form-4.d.ts +1 -1
- package/build/services/DocumentParser/parsers/parse-form-4.js +6 -4
- package/build/services/DocumentParser/parsers/parse-form-def14a.d.ts +1 -1
- package/build/services/DocumentParser/parsers/parse-form-def14a.js +2 -2
- package/build/services/DocumentParser/parsers/parse-insider-transaction.d.ts +7 -0
- package/build/services/DocumentParser/parsers/parse-insider-transaction.js +199 -0
- package/build/services/DocumentParser/parsers/parse-xbrl.d.ts +8 -0
- package/build/services/DocumentParser/parsers/parse-xbrl.js +171 -0
- package/build/services/HtmlTableExtractor/HtmlTableExtractor.d.ts +45 -0
- package/build/services/HtmlTableExtractor/HtmlTableExtractor.js +430 -0
- package/build/services/HtmlTableExtractor/index.d.ts +2 -0
- package/build/services/HtmlTableExtractor/index.js +4 -0
- package/build/services/ReportParser/ReportParser.d.ts +1 -1
- package/build/services/ReportParser/ReportWrapper.js +1 -1
- package/build/services/ReportRawBuilder/FactFiscalCalculator.d.ts +0 -1
- package/build/services/ReportRawBuilder/FactFiscalCalculator.js +1 -1
- package/build/services/ReportRawBuilder/FactGrouper.d.ts +1 -0
- package/build/services/ReportRawBuilder/FactGrouper.js +21 -13
- package/build/services/ReportRawBuilder/FactSplitAdjuster.js +17 -7
- package/build/services/ReportRawBuilder/ReportRawBuilder.d.ts +1 -0
- package/build/services/ReportRawBuilder/ReportRawBuilder.js +20 -15
- package/build/services/SecEdgarApi/FilingMapper.d.ts +4 -0
- package/build/services/SecEdgarApi/FilingMapper.js +37 -0
- package/build/services/SecEdgarApi/RequestWrapper.d.ts +2 -0
- package/build/services/SecEdgarApi/RequestWrapper.js +6 -4
- package/build/services/SecEdgarApi/SecEdgarApi.d.ts +66 -2
- package/build/services/SecEdgarApi/SecEdgarApi.js +236 -71
- package/build/services/SecEdgarApi/Throttler.d.ts +9 -8
- package/build/types/common.type.d.ts +9 -9
- package/build/types/company-search.type.d.ts +5 -0
- package/build/types/company-search.type.js +2 -0
- package/build/types/current-filings.type.d.ts +57 -0
- package/build/types/current-filings.type.js +2 -0
- package/build/types/index.d.ts +3 -0
- package/build/types/index.js +3 -0
- package/build/types/insider-transaction.type.d.ts +32 -0
- package/build/types/insider-transaction.type.js +2 -0
- package/build/types/parsed-filings.type.d.ts +3 -3
- package/build/types/xbrl.type.d.ts +155 -0
- package/build/types/xbrl.type.js +2 -0
- package/package.json +8 -3
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { XMLParams } from '../../types';
|
|
2
|
-
import
|
|
2
|
+
import { ParseXbrlOptions } from './XBRLParser/XBRLParser';
|
|
3
|
+
import XMLParser from './XMLParserLegacy';
|
|
3
4
|
import parsers from './parsers';
|
|
4
5
|
interface DocumentParserArgs {
|
|
5
6
|
parser?: XMLParser;
|
|
@@ -25,5 +26,21 @@ export default class DocumentParser {
|
|
|
25
26
|
filedDate: string;
|
|
26
27
|
}[];
|
|
27
28
|
};
|
|
29
|
+
parseInsiderTransactions(params: XMLParams): {
|
|
30
|
+
transactions: import("../../types").InsiderTransaction[];
|
|
31
|
+
owners: import("../../types").Owner[];
|
|
32
|
+
issuers: import("../../types").Issuer[];
|
|
33
|
+
};
|
|
34
|
+
parseCompanies(params: XMLParams): {
|
|
35
|
+
items: import("../../types").CompanySearchResult[];
|
|
36
|
+
};
|
|
37
|
+
parseCurrentFilings(params: XMLParams): import("../../types").CurrentFilingsList;
|
|
38
|
+
parseCurrentFilingsXbrl(params: XMLParams): import("../../types").CurrentFilingsXBRL;
|
|
39
|
+
parseXbrl(params: XMLParams & ParseXbrlOptions & {
|
|
40
|
+
includeReport?: boolean;
|
|
41
|
+
}): import("./XBRLParser/XBRLParser").XbrlParseResult & {
|
|
42
|
+
report: import("../../types").ReportRaw | null;
|
|
43
|
+
facts: import("../../types").FactItem[];
|
|
44
|
+
};
|
|
28
45
|
}
|
|
29
46
|
export {};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
var
|
|
3
|
+
var XMLParserLegacy_1 = require("./XMLParserLegacy");
|
|
4
4
|
var parsers_1 = require("./parsers");
|
|
5
5
|
var DocumentParser = /** @class */ (function () {
|
|
6
6
|
function DocumentParser(args) {
|
|
7
|
-
var _a = args !== null && args !== void 0 ? args : {}, _b = _a.parser, parser = _b === void 0 ? new
|
|
7
|
+
var _a = args !== null && args !== void 0 ? args : {}, _b = _a.parser, parser = _b === void 0 ? new XMLParserLegacy_1.default() : _b, _c = _a.parsersByName, parsersByName = _c === void 0 ? parsers_1.default : _c;
|
|
8
8
|
this.parser = parser;
|
|
9
9
|
this.parsersByName = parsersByName;
|
|
10
10
|
}
|
|
@@ -23,6 +23,21 @@ var DocumentParser = /** @class */ (function () {
|
|
|
23
23
|
DocumentParser.prototype.parseCurrentFilingsDaily = function (params) {
|
|
24
24
|
return this.parsersByName.parseCurrentFilingsDaily(params);
|
|
25
25
|
};
|
|
26
|
+
DocumentParser.prototype.parseInsiderTransactions = function (params) {
|
|
27
|
+
return this.parsersByName.parseInsiderTransactions(params);
|
|
28
|
+
};
|
|
29
|
+
DocumentParser.prototype.parseCompanies = function (params) {
|
|
30
|
+
return this.parsersByName.parseCompanies(params);
|
|
31
|
+
};
|
|
32
|
+
DocumentParser.prototype.parseCurrentFilings = function (params) {
|
|
33
|
+
return this.parsersByName.parseCurrentFilings(params);
|
|
34
|
+
};
|
|
35
|
+
DocumentParser.prototype.parseCurrentFilingsXbrl = function (params) {
|
|
36
|
+
return this.parsersByName.parseCurrentFilingsXbrl(params);
|
|
37
|
+
};
|
|
38
|
+
DocumentParser.prototype.parseXbrl = function (params) {
|
|
39
|
+
return this.parsersByName.parseXbrl(params);
|
|
40
|
+
};
|
|
26
41
|
return DocumentParser;
|
|
27
42
|
}());
|
|
28
43
|
exports.default = DocumentParser;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface DocumentData {
|
|
2
|
+
type: string;
|
|
3
|
+
fileName: string;
|
|
4
|
+
sequence: number;
|
|
5
|
+
description: string;
|
|
6
|
+
content: string;
|
|
7
|
+
}
|
|
8
|
+
export default class DocumentXmlSplitter {
|
|
9
|
+
private getLineTextAfter;
|
|
10
|
+
private getTextBetween;
|
|
11
|
+
splitDocumentXml(params: {
|
|
12
|
+
xml: string;
|
|
13
|
+
}): {
|
|
14
|
+
headerContent: string;
|
|
15
|
+
documents: DocumentData[];
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var DocumentXmlSplitter = /** @class */ (function () {
|
|
4
|
+
function DocumentXmlSplitter() {
|
|
5
|
+
}
|
|
6
|
+
DocumentXmlSplitter.prototype.getLineTextAfter = function (documentStr, start) {
|
|
7
|
+
var textStart = documentStr.indexOf(start) + start.length;
|
|
8
|
+
return documentStr.substring(textStart, documentStr.indexOf('\n', textStart));
|
|
9
|
+
};
|
|
10
|
+
DocumentXmlSplitter.prototype.getTextBetween = function (documentStr, start, end) {
|
|
11
|
+
var textStart = documentStr.indexOf(start) + start.length;
|
|
12
|
+
return documentStr.substring(textStart, documentStr.lastIndexOf(end));
|
|
13
|
+
};
|
|
14
|
+
DocumentXmlSplitter.prototype.splitDocumentXml = function (params) {
|
|
15
|
+
var xml = params.xml;
|
|
16
|
+
var documentStrings = xml.split('<DOCUMENT>');
|
|
17
|
+
var headerContent = documentStrings[0];
|
|
18
|
+
var documents = [];
|
|
19
|
+
for (var i = 1; i < documentStrings.length; i++) {
|
|
20
|
+
var documentStr = documentStrings[i];
|
|
21
|
+
var type = this.getLineTextAfter(documentStr, '<TYPE>');
|
|
22
|
+
var sequence = this.getLineTextAfter(documentStr, '<SEQUENCE>');
|
|
23
|
+
var fileName = this.getLineTextAfter(documentStr, '<FILENAME>');
|
|
24
|
+
var description = this.getLineTextAfter(documentStr, '<DESCRIPTION>');
|
|
25
|
+
var content = this.getTextBetween(documentStr, '<TEXT>', '</TEXT>');
|
|
26
|
+
documents.push({
|
|
27
|
+
description: description,
|
|
28
|
+
fileName: fileName,
|
|
29
|
+
sequence: Number(sequence),
|
|
30
|
+
type: type,
|
|
31
|
+
content: content,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return { headerContent: headerContent, documents: documents };
|
|
35
|
+
};
|
|
36
|
+
return DocumentXmlSplitter;
|
|
37
|
+
}());
|
|
38
|
+
exports.default = DocumentXmlSplitter;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
interface IterateDeepData {
|
|
2
|
+
key: string;
|
|
3
|
+
value: any;
|
|
4
|
+
currentObj: ObjOrArr;
|
|
5
|
+
originalObj: ObjOrArr;
|
|
6
|
+
path: string;
|
|
7
|
+
pathSeparator: string;
|
|
8
|
+
nextKey: () => void;
|
|
9
|
+
breakLoop: () => void;
|
|
10
|
+
}
|
|
11
|
+
type ObjOrArr = Record<string | symbol | number, any> | any[];
|
|
12
|
+
export default class ObjectUtil {
|
|
13
|
+
private readonly pathSeparator;
|
|
14
|
+
constructor(args?: {
|
|
15
|
+
pathSeparator?: string;
|
|
16
|
+
});
|
|
17
|
+
iterateKeysDeep(obj: ObjOrArr, cb: (data: IterateDeepData) => void | boolean): void;
|
|
18
|
+
setPath(obj: object, path: string, value: any, pathSeparator?: string): void;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var ObjectUtil = /** @class */ (function () {
|
|
4
|
+
function ObjectUtil(args) {
|
|
5
|
+
var _a = (args !== null && args !== void 0 ? args : {}).pathSeparator, pathSeparator = _a === void 0 ? '>' : _a;
|
|
6
|
+
this.pathSeparator = pathSeparator;
|
|
7
|
+
}
|
|
8
|
+
ObjectUtil.prototype.iterateKeysDeep = function (obj, cb) {
|
|
9
|
+
var _this = this;
|
|
10
|
+
var originalObj = obj;
|
|
11
|
+
var isBreak = false;
|
|
12
|
+
var breakLoop = function () { return (isBreak = true); };
|
|
13
|
+
// prevents original object from being modified
|
|
14
|
+
var _iterateKeys = function (obj, cb, path) {
|
|
15
|
+
var isNextKey = false;
|
|
16
|
+
var nextKey = function () { return (isNextKey = true); };
|
|
17
|
+
for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {
|
|
18
|
+
var key = _a[_i];
|
|
19
|
+
isNextKey = false;
|
|
20
|
+
var value = obj[key];
|
|
21
|
+
var p = path ? "".concat(path).concat(_this.pathSeparator).concat(key) : key;
|
|
22
|
+
cb({
|
|
23
|
+
key: key,
|
|
24
|
+
value: value,
|
|
25
|
+
currentObj: obj,
|
|
26
|
+
originalObj: originalObj,
|
|
27
|
+
pathSeparator: _this.pathSeparator,
|
|
28
|
+
path: p,
|
|
29
|
+
nextKey: nextKey,
|
|
30
|
+
breakLoop: breakLoop,
|
|
31
|
+
});
|
|
32
|
+
if (isBreak)
|
|
33
|
+
return;
|
|
34
|
+
if (isNextKey)
|
|
35
|
+
continue;
|
|
36
|
+
var isObjOrArr = typeof value === 'object' && value !== null;
|
|
37
|
+
if (isObjOrArr)
|
|
38
|
+
_iterateKeys(obj[key], cb, p);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
_iterateKeys(obj, cb, '');
|
|
42
|
+
};
|
|
43
|
+
ObjectUtil.prototype.setPath = function (obj, path, value, pathSeparator) {
|
|
44
|
+
var _a;
|
|
45
|
+
var keys = path.split(pathSeparator !== null && pathSeparator !== void 0 ? pathSeparator : this.pathSeparator);
|
|
46
|
+
var ref = obj;
|
|
47
|
+
for (var i = 0; i < keys.length; i++) {
|
|
48
|
+
var key = keys[i];
|
|
49
|
+
if (i === keys.length - 1) {
|
|
50
|
+
ref[key] = value;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
(_a = ref[key]) !== null && _a !== void 0 ? _a : (ref[key] = {});
|
|
54
|
+
ref = ref[key];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
return ObjectUtil;
|
|
59
|
+
}());
|
|
60
|
+
exports.default = ObjectUtil;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface XbrlFormHeader {
|
|
2
|
+
filename: string;
|
|
3
|
+
acceptanceDatetime: string;
|
|
4
|
+
accessionNumber: string;
|
|
5
|
+
submissionType: string;
|
|
6
|
+
reportDate: string;
|
|
7
|
+
filingDate: string;
|
|
8
|
+
form: string;
|
|
9
|
+
dateAsOfChange: string;
|
|
10
|
+
companyName: string;
|
|
11
|
+
cik: number;
|
|
12
|
+
sic: string;
|
|
13
|
+
sicDescription: string;
|
|
14
|
+
irsNumber: string;
|
|
15
|
+
stateOfIncorporation: string;
|
|
16
|
+
fiscalYearEnd: string;
|
|
17
|
+
act: string;
|
|
18
|
+
fileNumber: string;
|
|
19
|
+
filmNumber: string;
|
|
20
|
+
businessAddress: XbrlAddress;
|
|
21
|
+
mailAddress: XbrlAddress;
|
|
22
|
+
formerCompany: XbrlFormerCompany[];
|
|
23
|
+
}
|
|
24
|
+
export interface XbrlAddress {
|
|
25
|
+
street1: string;
|
|
26
|
+
street2: string;
|
|
27
|
+
city: string;
|
|
28
|
+
state: string;
|
|
29
|
+
zip: string;
|
|
30
|
+
phone?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface XbrlFormerCompany {
|
|
33
|
+
name: string;
|
|
34
|
+
dateOfNameChange: Date;
|
|
35
|
+
}
|
|
36
|
+
export default class HeaderParser {
|
|
37
|
+
parse(xml: string): XbrlFormHeader;
|
|
38
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var HeaderParser = /** @class */ (function () {
|
|
4
|
+
function HeaderParser() {
|
|
5
|
+
}
|
|
6
|
+
HeaderParser.prototype.parse = function (xml) {
|
|
7
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
8
|
+
var header = xml.substring(xml.indexOf('<SEC-HEADER>'), xml.indexOf('</SEC-HEADER>') + 13);
|
|
9
|
+
var lines = header.split('\n').filter(function (line) { return line.trim().length > 0; });
|
|
10
|
+
var indexHead = lines.findIndex(function (line) { return line.startsWith('<SEC-HEADER>'); });
|
|
11
|
+
var indexAcceptanceDatetime = lines.findIndex(function (line) { return line.startsWith('<ACCEPTANCE-DATETIME>'); });
|
|
12
|
+
var filename = (_d = (_c = (_b = (_a = lines[indexHead]) === null || _a === void 0 ? void 0 : _a.split('<SEC-HEADER>')[1]) === null || _b === void 0 ? void 0 : _b.split(':')[0]) === null || _c === void 0 ? void 0 : _c.trim()) !== null && _d !== void 0 ? _d : '';
|
|
13
|
+
var acceptanceDatetime = (_g = (_f = (_e = lines[indexAcceptanceDatetime]) === null || _e === void 0 ? void 0 : _e.split('<ACCEPTANCE-DATETIME>')[1]) === null || _f === void 0 ? void 0 : _f.trim()) !== null && _g !== void 0 ? _g : '';
|
|
14
|
+
var object = {
|
|
15
|
+
'ACCESSION NUMBER': '',
|
|
16
|
+
'CONFORMED SUBMISSION TYPE': '',
|
|
17
|
+
'PUBLIC DOCUMENT COUNT': '',
|
|
18
|
+
'CONFORMED PERIOD OF REPORT': '',
|
|
19
|
+
'FILED AS OF DATE': '',
|
|
20
|
+
'DATE AS OF CHANGE': '',
|
|
21
|
+
// filer - companyData
|
|
22
|
+
'COMPANY CONFORMED NAME': '',
|
|
23
|
+
'CENTRAL INDEX KEY': '',
|
|
24
|
+
'STANDARD INDUSTRIAL CLASSIFICATION': '',
|
|
25
|
+
'IRS NUMBER': '',
|
|
26
|
+
'STATE OF INCORPORATION': '',
|
|
27
|
+
'FISCAL YEAR END': '',
|
|
28
|
+
// filer - filing values
|
|
29
|
+
'FORM TYPE': '',
|
|
30
|
+
'SEC ACT': '',
|
|
31
|
+
'SEC FILE NUMBER': '',
|
|
32
|
+
'FILM NUMBER': '',
|
|
33
|
+
// business address:
|
|
34
|
+
'BUSINESS ADDRESS': {
|
|
35
|
+
'STREET 1': '',
|
|
36
|
+
'STREET 2': '',
|
|
37
|
+
CITY: '',
|
|
38
|
+
STATE: '',
|
|
39
|
+
ZIP: '',
|
|
40
|
+
'BUSINESS PHONE': '',
|
|
41
|
+
},
|
|
42
|
+
'MAIL ADDRESS': {
|
|
43
|
+
'STREET 1': '',
|
|
44
|
+
'STREET 2': '',
|
|
45
|
+
CITY: '',
|
|
46
|
+
STATE: '',
|
|
47
|
+
ZIP: '',
|
|
48
|
+
},
|
|
49
|
+
'FORMER COMPANY': [],
|
|
50
|
+
};
|
|
51
|
+
var parentKey = null;
|
|
52
|
+
for (var i = 0; i < lines.length; i++) {
|
|
53
|
+
if (i === indexHead || i === indexAcceptanceDatetime) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
var _p = lines[i].split(':'), k = _p[0], v = _p[1];
|
|
57
|
+
var key = (_h = k === null || k === void 0 ? void 0 : k.trim()) !== null && _h !== void 0 ? _h : '';
|
|
58
|
+
var value = (_j = v === null || v === void 0 ? void 0 : v.trim()) !== null && _j !== void 0 ? _j : '';
|
|
59
|
+
if (key === '') {
|
|
60
|
+
parentKey = null;
|
|
61
|
+
}
|
|
62
|
+
// key === 'FORMER NAMES' || key === 'FILER'
|
|
63
|
+
if (key === 'BUSINESS ADDRESS' || key === 'MAIL ADDRESS') {
|
|
64
|
+
parentKey = key;
|
|
65
|
+
}
|
|
66
|
+
if (key === 'FORMER COMPANY') {
|
|
67
|
+
object[key].push({});
|
|
68
|
+
parentKey = 'FORMER COMPANY';
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (value === '' || key === '') {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (parentKey === 'FORMER COMPANY') {
|
|
75
|
+
object[parentKey][object[parentKey].length - 1][key] = value;
|
|
76
|
+
}
|
|
77
|
+
else if (parentKey) {
|
|
78
|
+
object[parentKey][key] = value;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
object[key] = value;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
var toDateStr = function (str) {
|
|
85
|
+
if (!str)
|
|
86
|
+
return '';
|
|
87
|
+
var year = str.slice(0, 4);
|
|
88
|
+
var month = str.slice(4, 6);
|
|
89
|
+
var day = str.slice(6, 8);
|
|
90
|
+
return "".concat(year, "-").concat(month, "-").concat(day);
|
|
91
|
+
};
|
|
92
|
+
var sicIndustryAndCode = object['STANDARD INDUSTRIAL CLASSIFICATION'];
|
|
93
|
+
return {
|
|
94
|
+
filename: filename,
|
|
95
|
+
acceptanceDatetime: acceptanceDatetime,
|
|
96
|
+
accessionNumber: object['ACCESSION NUMBER'],
|
|
97
|
+
submissionType: object['CONFORMED SUBMISSION TYPE'],
|
|
98
|
+
reportDate: toDateStr(object['CONFORMED PERIOD OF REPORT']),
|
|
99
|
+
filingDate: toDateStr(object['FILED AS OF DATE']),
|
|
100
|
+
form: object['FORM TYPE'],
|
|
101
|
+
dateAsOfChange: toDateStr(object['DATE AS OF CHANGE']),
|
|
102
|
+
companyName: object['COMPANY CONFORMED NAME'],
|
|
103
|
+
cik: Number(object['CENTRAL INDEX KEY']),
|
|
104
|
+
sic: ((_l = (_k = sicIndustryAndCode.split('[')[1]) === null || _k === void 0 ? void 0 : _k.split(']')[0]) !== null && _l !== void 0 ? _l : '0').trim(),
|
|
105
|
+
sicDescription: (_o = (_m = sicIndustryAndCode.split('[')[0]) === null || _m === void 0 ? void 0 : _m.trim()) !== null && _o !== void 0 ? _o : '',
|
|
106
|
+
irsNumber: object['IRS NUMBER'],
|
|
107
|
+
stateOfIncorporation: object['STATE OF INCORPORATION'],
|
|
108
|
+
fiscalYearEnd: object['FISCAL YEAR END'],
|
|
109
|
+
act: object['SEC ACT'],
|
|
110
|
+
fileNumber: object['SEC FILE NUMBER'],
|
|
111
|
+
filmNumber: object['FILM NUMBER'],
|
|
112
|
+
businessAddress: {
|
|
113
|
+
street1: object['BUSINESS ADDRESS']['STREET 1'],
|
|
114
|
+
street2: object['BUSINESS ADDRESS']['STREET 2'],
|
|
115
|
+
city: object['BUSINESS ADDRESS']['CITY'],
|
|
116
|
+
state: object['BUSINESS ADDRESS']['STATE'],
|
|
117
|
+
zip: object['BUSINESS ADDRESS']['ZIP'],
|
|
118
|
+
phone: object['BUSINESS ADDRESS']['BUSINESS PHONE'],
|
|
119
|
+
},
|
|
120
|
+
mailAddress: {
|
|
121
|
+
street1: object['MAIL ADDRESS']['STREET 1'],
|
|
122
|
+
street2: object['MAIL ADDRESS']['STREET 2'],
|
|
123
|
+
city: object['MAIL ADDRESS']['CITY'],
|
|
124
|
+
state: object['MAIL ADDRESS']['STATE'],
|
|
125
|
+
zip: object['MAIL ADDRESS']['ZIP'],
|
|
126
|
+
},
|
|
127
|
+
formerCompany: object['FORMER COMPANY'].map(function (data) {
|
|
128
|
+
var _a;
|
|
129
|
+
return ({
|
|
130
|
+
name: (_a = data['FORMER CONFORMED NAME']) !== null && _a !== void 0 ? _a : '',
|
|
131
|
+
dateOfNameChange: toDateStr(data['DATE OF NAME CHANGE']),
|
|
132
|
+
});
|
|
133
|
+
}),
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
return HeaderParser;
|
|
137
|
+
}());
|
|
138
|
+
exports.default = HeaderParser;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var XMLParser_1 = require("../XMLParser");
|
|
4
|
+
var util_type_1 = require("./util-type");
|
|
5
|
+
var InstanceParser = /** @class */ (function () {
|
|
6
|
+
function InstanceParser() {
|
|
7
|
+
this.xmlParser = new XMLParser_1.default();
|
|
8
|
+
}
|
|
9
|
+
InstanceParser.prototype.parseContext = function (node) {
|
|
10
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
11
|
+
var context = util_type_1.default.toObject(node);
|
|
12
|
+
var id = util_type_1.default.toString(context['@_id']);
|
|
13
|
+
var entity = util_type_1.default.toObject((_a = context['xbrli:entity']) !== null && _a !== void 0 ? _a : context['entity']);
|
|
14
|
+
var entityIdentifier = util_type_1.default.toObject((_b = entity['xbrli:identifier']) !== null && _b !== void 0 ? _b : entity['identifier']);
|
|
15
|
+
var entityIdentifierText = util_type_1.default.toString(entityIdentifier['#text']);
|
|
16
|
+
var entityIdentifierScheme = util_type_1.default.toString(entityIdentifier['@_scheme']);
|
|
17
|
+
var segment = util_type_1.default.toObject((_c = entity['xbrli:segment']) !== null && _c !== void 0 ? _c : entity['segment']);
|
|
18
|
+
var segmentExplicitMembers = util_type_1.default.toArray(segment['xbrldi:explicitMember']);
|
|
19
|
+
var segmentTypedMembers = util_type_1.default.toArray(segment['xbrldi:typedMember']);
|
|
20
|
+
var segments = [];
|
|
21
|
+
segmentTypedMembers.forEach(function (member) {
|
|
22
|
+
var _a;
|
|
23
|
+
member = util_type_1.default.toObject(member);
|
|
24
|
+
var dimension = (_a = member['@_dimension']) !== null && _a !== void 0 ? _a : '';
|
|
25
|
+
segments.push({
|
|
26
|
+
value: util_type_1.default.toString(member["".concat(dimension, ".domain")]),
|
|
27
|
+
dimension: util_type_1.default.toString(dimension),
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
segmentExplicitMembers.forEach(function (member) {
|
|
31
|
+
member = util_type_1.default.toObject(member);
|
|
32
|
+
segments.push({
|
|
33
|
+
value: util_type_1.default.toString(member['#text']),
|
|
34
|
+
dimension: util_type_1.default.toString(member['@_dimension']),
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
var period = util_type_1.default.toObject((_d = context['xbrli:period']) !== null && _d !== void 0 ? _d : context['period']);
|
|
38
|
+
var periodObj = {};
|
|
39
|
+
var startDate = (_e = period['xbrli:startDate']) !== null && _e !== void 0 ? _e : period['startDate'];
|
|
40
|
+
var endDate = (_f = period['xbrli:endDate']) !== null && _f !== void 0 ? _f : period['endDate'];
|
|
41
|
+
var instant = (_g = period['xbrli:instant']) !== null && _g !== void 0 ? _g : period['instant'];
|
|
42
|
+
if (startDate) {
|
|
43
|
+
periodObj.startDate = util_type_1.default.toString(startDate);
|
|
44
|
+
}
|
|
45
|
+
if (endDate) {
|
|
46
|
+
periodObj.endDate = util_type_1.default.toString(endDate);
|
|
47
|
+
}
|
|
48
|
+
if (instant) {
|
|
49
|
+
periodObj.instant = util_type_1.default.toString(instant);
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
id: id,
|
|
53
|
+
entity: {
|
|
54
|
+
identifier: {
|
|
55
|
+
value: entityIdentifierText,
|
|
56
|
+
scheme: entityIdentifierScheme,
|
|
57
|
+
},
|
|
58
|
+
segment: segments,
|
|
59
|
+
},
|
|
60
|
+
period: periodObj,
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
InstanceParser.prototype.parse = function (xml) {
|
|
64
|
+
var _this = this;
|
|
65
|
+
var _a, _b, _c;
|
|
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 doc = this.xmlParser.parse(xbrlContent);
|
|
74
|
+
var xbrl = (_a = doc.xbrl) !== null && _a !== void 0 ? _a : doc.XBRL;
|
|
75
|
+
var contexts = util_type_1.default
|
|
76
|
+
.toArray((_b = xbrl === null || xbrl === void 0 ? void 0 : xbrl.context) !== null && _b !== void 0 ? _b : [])
|
|
77
|
+
.map(function (context) { return _this.parseContext(context); });
|
|
78
|
+
var units = util_type_1.default.toArray((_c = xbrl === null || xbrl === void 0 ? void 0 : xbrl.unit) !== null && _c !== void 0 ? _c : []).map(function (unit) {
|
|
79
|
+
var _a, _b, _c;
|
|
80
|
+
return ({
|
|
81
|
+
id: (_a = unit['@_id']) !== null && _a !== void 0 ? _a : '',
|
|
82
|
+
measure: (_c = (_b = unit['measure']) === null || _b === void 0 ? void 0 : _b['#text']) !== null && _c !== void 0 ? _c : '',
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
var factElements = [];
|
|
86
|
+
for (var name_1 in xbrl) {
|
|
87
|
+
for (var _i = 0, _d = util_type_1.default.toArray(xbrl[name_1]); _i < _d.length; _i++) {
|
|
88
|
+
var element = _d[_i];
|
|
89
|
+
if (!element['@_contextRef'])
|
|
90
|
+
continue;
|
|
91
|
+
var factElement = { name: name_1, id: '', contextRef: '' };
|
|
92
|
+
for (var key in element) {
|
|
93
|
+
if (key.startsWith('@_')) {
|
|
94
|
+
factElement[key.substring(2)] = element[key];
|
|
95
|
+
}
|
|
96
|
+
else if (key === '#text') {
|
|
97
|
+
factElement.text = element[key];
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
factElements.push(factElement);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return { factElements: factElements, contexts: contexts, units: units };
|
|
104
|
+
};
|
|
105
|
+
return InstanceParser;
|
|
106
|
+
}());
|
|
107
|
+
exports.default = InstanceParser;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { XbrlLinkbase } from '../../../types/xbrl.type';
|
|
2
|
+
import XMLParser from '../XMLParser';
|
|
3
|
+
export default class LinkbaseParser {
|
|
4
|
+
private readonly xmlParser;
|
|
5
|
+
constructor(args?: {
|
|
6
|
+
xmlParser?: XMLParser;
|
|
7
|
+
});
|
|
8
|
+
parse(xml: string): XbrlLinkbase | null;
|
|
9
|
+
private parseLinkbaseDocument;
|
|
10
|
+
private parseItem;
|
|
11
|
+
private parseLinkbase;
|
|
12
|
+
private parseItemExtended;
|
|
13
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var XMLParser_1 = require("../XMLParser");
|
|
4
|
+
var util_type_1 = require("./util-type");
|
|
5
|
+
var LinkbaseParser = /** @class */ (function () {
|
|
6
|
+
function LinkbaseParser(args) {
|
|
7
|
+
var _a = (args !== null && args !== void 0 ? args : {}).xmlParser, xmlParser = _a === void 0 ? new XMLParser_1.default() : _a;
|
|
8
|
+
this.xmlParser = xmlParser;
|
|
9
|
+
}
|
|
10
|
+
LinkbaseParser.prototype.parse = function (xml) {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
var parsed = this.xmlParser.parse(xml);
|
|
13
|
+
return this.parseLinkbaseDocument((_b = (_a = parsed.XBRL) !== null && _a !== void 0 ? _a : parsed.xbrl) !== null && _b !== void 0 ? _b : parsed);
|
|
14
|
+
};
|
|
15
|
+
LinkbaseParser.prototype.parseLinkbaseDocument = function (value) {
|
|
16
|
+
value = util_type_1.default.toObject(value);
|
|
17
|
+
for (var key in value) {
|
|
18
|
+
var parsedKey = util_type_1.default.parseKey(key);
|
|
19
|
+
switch (parsedKey) {
|
|
20
|
+
case 'linkbase':
|
|
21
|
+
return this.parseLinkbase(value[key]);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
};
|
|
26
|
+
LinkbaseParser.prototype.parseItem = function (value) {
|
|
27
|
+
value = util_type_1.default.toObject(value);
|
|
28
|
+
var item = {};
|
|
29
|
+
for (var key in value) {
|
|
30
|
+
var parsedKey = util_type_1.default.parseKey(key);
|
|
31
|
+
switch (parsedKey) {
|
|
32
|
+
case 'closed':
|
|
33
|
+
item[parsedKey] = util_type_1.default.toBoolean(value[key]);
|
|
34
|
+
break;
|
|
35
|
+
case 'priority':
|
|
36
|
+
case 'order':
|
|
37
|
+
case 'weight':
|
|
38
|
+
item[parsedKey] = util_type_1.default.toNumber(value[key]);
|
|
39
|
+
break;
|
|
40
|
+
default:
|
|
41
|
+
item[parsedKey] = util_type_1.default.toString(value[key]);
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return item;
|
|
46
|
+
};
|
|
47
|
+
LinkbaseParser.prototype.parseLinkbase = function (value) {
|
|
48
|
+
var _this = this;
|
|
49
|
+
value = util_type_1.default.toObject(value);
|
|
50
|
+
var linkbase = {};
|
|
51
|
+
for (var key in value) {
|
|
52
|
+
var parsedKey = util_type_1.default.parseKey(key);
|
|
53
|
+
switch (parsedKey) {
|
|
54
|
+
case 'referenceLink':
|
|
55
|
+
case 'labelLink':
|
|
56
|
+
case 'presentationLink':
|
|
57
|
+
case 'calculationLink':
|
|
58
|
+
case 'definitionLink':
|
|
59
|
+
linkbase[parsedKey] = util_type_1.default.toArray(value[key]).map(function (v) { return _this.parseItemExtended(v); });
|
|
60
|
+
break;
|
|
61
|
+
case 'roleRef':
|
|
62
|
+
case 'arcroleRef':
|
|
63
|
+
linkbase[parsedKey] = util_type_1.default.toArray(value[key]).map(function (v) { return _this.parseItem(v); });
|
|
64
|
+
break;
|
|
65
|
+
default:
|
|
66
|
+
linkbase[parsedKey] = util_type_1.default.toString(value[key]);
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return linkbase;
|
|
71
|
+
};
|
|
72
|
+
LinkbaseParser.prototype.parseItemExtended = function (value) {
|
|
73
|
+
var _this = this;
|
|
74
|
+
var item = {
|
|
75
|
+
type: 'extended',
|
|
76
|
+
};
|
|
77
|
+
for (var key in value) {
|
|
78
|
+
var parsedKey = util_type_1.default.parseKey(key);
|
|
79
|
+
switch (parsedKey) {
|
|
80
|
+
case 'loc':
|
|
81
|
+
case 'calculationArc':
|
|
82
|
+
case 'definitionArc':
|
|
83
|
+
case 'labelArc':
|
|
84
|
+
case 'presentationArc':
|
|
85
|
+
case 'footnoteArc':
|
|
86
|
+
case 'label':
|
|
87
|
+
case 'footnote':
|
|
88
|
+
item[parsedKey] = util_type_1.default.toArray(value[key]).map(function (v) { return _this.parseItem(v); });
|
|
89
|
+
break;
|
|
90
|
+
default:
|
|
91
|
+
item[parsedKey] = util_type_1.default.toString(value[key]);
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return item;
|
|
96
|
+
};
|
|
97
|
+
return LinkbaseParser;
|
|
98
|
+
}());
|
|
99
|
+
exports.default = LinkbaseParser;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { XbrlSchema } from '../../../types/xbrl.type';
|
|
2
|
+
export default class SchemaParser {
|
|
3
|
+
private readonly xmlParser;
|
|
4
|
+
private parseAppInfo;
|
|
5
|
+
private parseRoleType;
|
|
6
|
+
private parseLinkbaseRef;
|
|
7
|
+
private parseAnnotation;
|
|
8
|
+
private parseElement;
|
|
9
|
+
private parseImport;
|
|
10
|
+
parse(xml: any): XbrlSchema;
|
|
11
|
+
}
|