pst-extractor 1.9.0 → 1.11.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.
Files changed (59) hide show
  1. package/dist/ColumnDescriptor.class.d.ts +26 -26
  2. package/dist/ColumnDescriptor.class.js +51 -51
  3. package/dist/DescriptorIndexNode.class.d.ts +25 -26
  4. package/dist/DescriptorIndexNode.class.js +53 -53
  5. package/dist/LZFu.class.d.ts +11 -12
  6. package/dist/LZFu.class.js +95 -95
  7. package/dist/NodeInfo.class.d.ts +33 -33
  8. package/dist/NodeInfo.class.js +52 -52
  9. package/dist/NodeMap.class.d.ts +35 -35
  10. package/dist/NodeMap.class.js +86 -86
  11. package/dist/OffsetIndexItem.class.d.ts +23 -24
  12. package/dist/OffsetIndexItem.class.js +45 -45
  13. package/dist/OutlookProperties.d.ts +275 -275
  14. package/dist/OutlookProperties.js +281 -281
  15. package/dist/PSTActivity.class.d.ts +103 -103
  16. package/dist/PSTActivity.class.js +144 -144
  17. package/dist/PSTAppointment.class.d.ts +270 -271
  18. package/dist/PSTAppointment.class.js +376 -376
  19. package/dist/PSTAttachment.class.d.ts +172 -172
  20. package/dist/PSTAttachment.class.js +317 -317
  21. package/dist/PSTContact.class.d.ts +884 -884
  22. package/dist/PSTContact.class.js +1227 -1227
  23. package/dist/PSTDescriptorItem.class.d.ts +45 -46
  24. package/dist/PSTDescriptorItem.class.js +99 -99
  25. package/dist/PSTFile.class.d.ts +215 -216
  26. package/dist/PSTFile.class.js +830 -818
  27. package/dist/PSTFolder.class.d.ts +129 -129
  28. package/dist/PSTFolder.class.js +318 -310
  29. package/dist/PSTMessage.class.d.ts +788 -789
  30. package/dist/PSTMessage.class.js +1321 -1321
  31. package/dist/PSTMessageStore.class.d.ts +13 -13
  32. package/dist/PSTMessageStore.class.js +17 -17
  33. package/dist/PSTNodeInputStream.class.d.ts +122 -123
  34. package/dist/PSTNodeInputStream.class.js +524 -514
  35. package/dist/PSTObject.class.d.ts +133 -134
  36. package/dist/PSTObject.class.js +326 -326
  37. package/dist/PSTRecipient.class.d.ts +65 -65
  38. package/dist/PSTRecipient.class.js +103 -103
  39. package/dist/PSTTable.class.d.ts +52 -52
  40. package/dist/PSTTable.class.js +175 -175
  41. package/dist/PSTTable7C.class.d.ts +45 -45
  42. package/dist/PSTTable7C.class.js +282 -281
  43. package/dist/PSTTableBC.class.d.ts +31 -31
  44. package/dist/PSTTableBC.class.js +111 -111
  45. package/dist/PSTTableItem.class.d.ts +47 -48
  46. package/dist/PSTTableItem.class.js +124 -124
  47. package/dist/PSTTask.class.d.ts +146 -146
  48. package/dist/PSTTask.class.js +205 -205
  49. package/dist/PSTUtil.class.d.ts +134 -135
  50. package/dist/PSTUtil.class.js +795 -795
  51. package/dist/RecurrencePattern.class.d.ts +49 -50
  52. package/dist/RecurrencePattern.class.js +120 -120
  53. package/dist/index.d.ts +6 -6
  54. package/dist/index.js +15 -15
  55. package/example/package.json +6 -6
  56. package/example/yarn.lock +120 -67
  57. package/junit.xml +68 -68
  58. package/package.json +26 -26
  59. package/readme.md +3 -3
@@ -1,175 +1,175 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.PSTTable = void 0;
7
- /* eslint-disable @typescript-eslint/no-explicit-any */
8
- const long_1 = __importDefault(require("long"));
9
- const NodeInfo_class_1 = require("./NodeInfo.class");
10
- const PSTNodeInputStream_class_1 = require("./PSTNodeInputStream.class");
11
- // The PST Table is the workhorse of the whole system.
12
- // It allows for an item to be read and broken down into the individual properties that it consists of.
13
- // For most PST Objects, it appears that only 7c and bc table types are used.
14
- class PSTTable {
15
- /**
16
- * Creates an instance of PSTTable. The PST Table is the workhorse of the whole system.
17
- * It allows for an item to be read and broken down into the individual properties that it consists of.
18
- * For most PST Objects, it appears that only 7C and BC table types are used.
19
- * @param {PSTNodeInputStream} pstNodeInputStream
20
- * @param {Map<number, PSTDescriptorItem>} subNodeDescriptorItems
21
- * @memberof PSTTable
22
- */
23
- constructor(pstNodeInputStream, subNodeDescriptorItems) {
24
- this.numberOfKeys = 0;
25
- this.numberOfIndexLevels = 0;
26
- this.subNodeDescriptorItems = new Map();
27
- if (subNodeDescriptorItems) {
28
- this.subNodeDescriptorItems = subNodeDescriptorItems;
29
- }
30
- this.pstNodeInputStream = pstNodeInputStream;
31
- this.arrayBlocks = pstNodeInputStream.getBlockOffsets();
32
- // the next two bytes should be the table type (bSig)
33
- // 0xEC is HN (Heap-on-Node)
34
- pstNodeInputStream.seek(long_1.default.ZERO);
35
- const headdata = Buffer.alloc(4);
36
- pstNodeInputStream.readCompletely(headdata);
37
- this.tableTypeByte = headdata[3];
38
- switch (this.tableTypeByte // bClientSig
39
- ) {
40
- case 0x7c: // Table Context (TC/HN)
41
- this.tableType = '7c';
42
- break;
43
- case 188:
44
- this.tableType = 'bc'; // Property Context (PC/BTH)
45
- break;
46
- default:
47
- throw new Error('PSTTable::constructor Unable to parse table, bad table type. Unknown identifier: 0x' +
48
- headdata[3].toString(16));
49
- }
50
- this.hidUserRoot = pstNodeInputStream
51
- .seekAndReadLong(long_1.default.fromValue(4), 4)
52
- .toNumber(); // hidUserRoot
53
- // all tables should have a BTHHEADER at hnid == 0x20
54
- const headerNodeInfo = this.getNodeInfo(0x20);
55
- if (!headerNodeInfo) {
56
- throw new Error('PSTTable::constructor headerNodeInfo is null');
57
- }
58
- headerNodeInfo.pstNodeInputStream.seek(long_1.default.fromValue(headerNodeInfo.startOffset));
59
- let headerByte = headerNodeInfo.pstNodeInputStream.read() & 0xff;
60
- if (headerByte != 0xb5) {
61
- headerNodeInfo.pstNodeInputStream.seek(long_1.default.fromValue(headerNodeInfo.startOffset));
62
- headerByte = headerNodeInfo.pstNodeInputStream.read() & 0xff;
63
- headerNodeInfo.pstNodeInputStream.seek(long_1.default.fromValue(headerNodeInfo.startOffset));
64
- const tmp = Buffer.alloc(1024);
65
- headerNodeInfo.pstNodeInputStream.readCompletely(tmp);
66
- throw new Error("PSTTable::constructor Unable to parse table, can't find BTHHEADER header information: " +
67
- headerByte);
68
- }
69
- this.sizeOfItemKey = headerNodeInfo.pstNodeInputStream.read() & 0xff; // Size of key in key table
70
- this.sizeOfItemValue = headerNodeInfo.pstNodeInputStream.read() & 0xff; // Size of value in key table
71
- this.numberOfIndexLevels = headerNodeInfo.pstNodeInputStream.read() & 0xff;
72
- this.hidRoot = headerNodeInfo
73
- .seekAndReadLong(long_1.default.fromValue(4), 4)
74
- .toNumber();
75
- }
76
- /**
77
- * Release data.
78
- * @protected
79
- * @memberof PSTTable
80
- */
81
- releaseRawData() {
82
- this.subNodeDescriptorItems.clear();
83
- }
84
- /**
85
- * Number of items in table.
86
- * @readonly
87
- * @type {number}
88
- * @memberof PSTTable
89
- */
90
- get rowCount() {
91
- return this.numberOfKeys;
92
- }
93
- /**
94
- * Get information for the node in the b-tree.
95
- * @param {number} hnid
96
- * @returns {NodeInfo}
97
- * @memberof PSTTable
98
- */
99
- getNodeInfo(hnid) {
100
- // Zero-length node?
101
- if (hnid == 0) {
102
- return new NodeInfo_class_1.NodeInfo(0, 0, this.pstNodeInputStream);
103
- }
104
- // Is it a subnode ID?
105
- if (this.subNodeDescriptorItems && this.subNodeDescriptorItems.has(hnid)) {
106
- const item = this.subNodeDescriptorItems.get(hnid);
107
- let subNodeInfo = null;
108
- try {
109
- const subNodeIn = new PSTNodeInputStream_class_1.PSTNodeInputStream(this.pstNodeInputStream.pstFile, item);
110
- subNodeInfo = new NodeInfo_class_1.NodeInfo(0, subNodeIn.length.toNumber(), subNodeIn);
111
- }
112
- catch (err) {
113
- throw new Error('PSTTable::getNodeInfo: IOException reading subNode:\n' + err);
114
- }
115
- // return new NodeInfo(0, data.length, data);
116
- return subNodeInfo;
117
- }
118
- if ((hnid & 0x1f) != 0) {
119
- // Some kind of external node
120
- return null;
121
- }
122
- const whichBlock = hnid >>> 16;
123
- if (whichBlock > this.arrayBlocks.length) {
124
- throw new Error("PSTTable::getNodeInfo: block doesn't exist: " +
125
- hnid +
126
- ', ' +
127
- whichBlock +
128
- ', ' +
129
- this.arrayBlocks.length);
130
- }
131
- // A normal node in a local heap
132
- const index = (hnid & 0xffff) >> 5;
133
- let blockOffset = 0;
134
- if (whichBlock > 0) {
135
- blockOffset = this.arrayBlocks[whichBlock - 1].toNumber();
136
- }
137
- // Get offset of HN page map
138
- let iHeapNodePageMap = this.pstNodeInputStream
139
- .seekAndReadLong(long_1.default.fromValue(blockOffset), 2)
140
- .toNumber() + blockOffset;
141
- const cAlloc = this.pstNodeInputStream
142
- .seekAndReadLong(long_1.default.fromValue(iHeapNodePageMap), 2)
143
- .toNumber();
144
- if (index >= cAlloc + 1) {
145
- throw new Error("PSTTable::getNodeInfo: node index doesn't exist! nid = " + hnid);
146
- }
147
- iHeapNodePageMap += 2 * index + 2;
148
- const start = this.pstNodeInputStream
149
- .seekAndReadLong(long_1.default.fromValue(iHeapNodePageMap), 2)
150
- .toNumber() + blockOffset;
151
- const end = this.pstNodeInputStream
152
- .seekAndReadLong(long_1.default.fromValue(iHeapNodePageMap + 2), 2)
153
- .toNumber() + blockOffset;
154
- return new NodeInfo_class_1.NodeInfo(start, end, this.pstNodeInputStream);
155
- }
156
- /**
157
- * JSON stringify the object properties.
158
- * @returns {string}
159
- * @memberof PSTTable
160
- */
161
- toJSON() {
162
- const clone = Object.assign({
163
- tableType: this.tableType,
164
- tableTypeByte: this.tableTypeByte,
165
- hidUserRoot: this.hidUserRoot,
166
- sizeOfItemKey: this.sizeOfItemKey,
167
- sizeOfItemValue: this.sizeOfItemValue,
168
- hidRoot: this.hidRoot,
169
- numberOfKeys: this.numberOfKeys,
170
- numberOfIndexLevels: this.numberOfIndexLevels,
171
- }, this);
172
- return clone;
173
- }
174
- }
175
- exports.PSTTable = PSTTable;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PSTTable = void 0;
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ const long_1 = __importDefault(require("long"));
9
+ const NodeInfo_class_1 = require("./NodeInfo.class");
10
+ const PSTNodeInputStream_class_1 = require("./PSTNodeInputStream.class");
11
+ // The PST Table is the workhorse of the whole system.
12
+ // It allows for an item to be read and broken down into the individual properties that it consists of.
13
+ // For most PST Objects, it appears that only 7c and bc table types are used.
14
+ class PSTTable {
15
+ /**
16
+ * Creates an instance of PSTTable. The PST Table is the workhorse of the whole system.
17
+ * It allows for an item to be read and broken down into the individual properties that it consists of.
18
+ * For most PST Objects, it appears that only 7C and BC table types are used.
19
+ * @param {PSTNodeInputStream} pstNodeInputStream
20
+ * @param {Map<number, PSTDescriptorItem>} subNodeDescriptorItems
21
+ * @memberof PSTTable
22
+ */
23
+ constructor(pstNodeInputStream, subNodeDescriptorItems) {
24
+ this.numberOfKeys = 0;
25
+ this.numberOfIndexLevels = 0;
26
+ this.subNodeDescriptorItems = new Map();
27
+ if (subNodeDescriptorItems) {
28
+ this.subNodeDescriptorItems = subNodeDescriptorItems;
29
+ }
30
+ this.pstNodeInputStream = pstNodeInputStream;
31
+ this.arrayBlocks = pstNodeInputStream.getBlockOffsets();
32
+ // the next two bytes should be the table type (bSig)
33
+ // 0xEC is HN (Heap-on-Node)
34
+ pstNodeInputStream.seek(long_1.default.ZERO);
35
+ const headdata = Buffer.alloc(4);
36
+ pstNodeInputStream.readCompletely(headdata);
37
+ this.tableTypeByte = headdata[3];
38
+ switch (this.tableTypeByte // bClientSig
39
+ ) {
40
+ case 0x7c: // Table Context (TC/HN)
41
+ this.tableType = '7c';
42
+ break;
43
+ case 188:
44
+ this.tableType = 'bc'; // Property Context (PC/BTH)
45
+ break;
46
+ default:
47
+ throw new Error('PSTTable::constructor Unable to parse table, bad table type. Unknown identifier: 0x' +
48
+ headdata[3].toString(16));
49
+ }
50
+ this.hidUserRoot = pstNodeInputStream
51
+ .seekAndReadLong(long_1.default.fromValue(4), 4)
52
+ .toNumber(); // hidUserRoot
53
+ // all tables should have a BTHHEADER at hnid == 0x20
54
+ const headerNodeInfo = this.getNodeInfo(0x20);
55
+ if (!headerNodeInfo) {
56
+ throw new Error('PSTTable::constructor headerNodeInfo is null');
57
+ }
58
+ headerNodeInfo.pstNodeInputStream.seek(long_1.default.fromValue(headerNodeInfo.startOffset));
59
+ let headerByte = headerNodeInfo.pstNodeInputStream.read() & 0xff;
60
+ if (headerByte != 0xb5) {
61
+ headerNodeInfo.pstNodeInputStream.seek(long_1.default.fromValue(headerNodeInfo.startOffset));
62
+ headerByte = headerNodeInfo.pstNodeInputStream.read() & 0xff;
63
+ headerNodeInfo.pstNodeInputStream.seek(long_1.default.fromValue(headerNodeInfo.startOffset));
64
+ const tmp = Buffer.alloc(1024);
65
+ headerNodeInfo.pstNodeInputStream.readCompletely(tmp);
66
+ throw new Error("PSTTable::constructor Unable to parse table, can't find BTHHEADER header information: " +
67
+ headerByte);
68
+ }
69
+ this.sizeOfItemKey = headerNodeInfo.pstNodeInputStream.read() & 0xff; // Size of key in key table
70
+ this.sizeOfItemValue = headerNodeInfo.pstNodeInputStream.read() & 0xff; // Size of value in key table
71
+ this.numberOfIndexLevels = headerNodeInfo.pstNodeInputStream.read() & 0xff;
72
+ this.hidRoot = headerNodeInfo
73
+ .seekAndReadLong(long_1.default.fromValue(4), 4)
74
+ .toNumber();
75
+ }
76
+ /**
77
+ * Release data.
78
+ * @protected
79
+ * @memberof PSTTable
80
+ */
81
+ releaseRawData() {
82
+ this.subNodeDescriptorItems.clear();
83
+ }
84
+ /**
85
+ * Number of items in table.
86
+ * @readonly
87
+ * @type {number}
88
+ * @memberof PSTTable
89
+ */
90
+ get rowCount() {
91
+ return this.numberOfKeys;
92
+ }
93
+ /**
94
+ * Get information for the node in the b-tree.
95
+ * @param {number} hnid
96
+ * @returns {NodeInfo}
97
+ * @memberof PSTTable
98
+ */
99
+ getNodeInfo(hnid) {
100
+ // Zero-length node?
101
+ if (hnid == 0) {
102
+ return new NodeInfo_class_1.NodeInfo(0, 0, this.pstNodeInputStream);
103
+ }
104
+ // Is it a subnode ID?
105
+ if (this.subNodeDescriptorItems && this.subNodeDescriptorItems.has(hnid)) {
106
+ const item = this.subNodeDescriptorItems.get(hnid);
107
+ let subNodeInfo = null;
108
+ try {
109
+ const subNodeIn = new PSTNodeInputStream_class_1.PSTNodeInputStream(this.pstNodeInputStream.pstFile, item);
110
+ subNodeInfo = new NodeInfo_class_1.NodeInfo(0, subNodeIn.length.toNumber(), subNodeIn);
111
+ }
112
+ catch (err) {
113
+ throw new Error('PSTTable::getNodeInfo: IOException reading subNode:\n' + err);
114
+ }
115
+ // return new NodeInfo(0, data.length, data);
116
+ return subNodeInfo;
117
+ }
118
+ if ((hnid & 0x1f) != 0) {
119
+ // Some kind of external node
120
+ return null;
121
+ }
122
+ const whichBlock = hnid >>> 16;
123
+ if (whichBlock > this.arrayBlocks.length) {
124
+ throw new Error("PSTTable::getNodeInfo: block doesn't exist: " +
125
+ hnid +
126
+ ', ' +
127
+ whichBlock +
128
+ ', ' +
129
+ this.arrayBlocks.length);
130
+ }
131
+ // A normal node in a local heap
132
+ const index = (hnid & 0xffff) >> 5;
133
+ let blockOffset = 0;
134
+ if (whichBlock > 0) {
135
+ blockOffset = this.arrayBlocks[whichBlock - 1].toNumber();
136
+ }
137
+ // Get offset of HN page map
138
+ let iHeapNodePageMap = this.pstNodeInputStream
139
+ .seekAndReadLong(long_1.default.fromValue(blockOffset), 2)
140
+ .toNumber() + blockOffset;
141
+ const cAlloc = this.pstNodeInputStream
142
+ .seekAndReadLong(long_1.default.fromValue(iHeapNodePageMap), 2)
143
+ .toNumber();
144
+ if (index >= cAlloc + 1) {
145
+ throw new Error("PSTTable::getNodeInfo: node index doesn't exist! nid = " + hnid);
146
+ }
147
+ iHeapNodePageMap += 2 * index + 2;
148
+ const start = this.pstNodeInputStream
149
+ .seekAndReadLong(long_1.default.fromValue(iHeapNodePageMap), 2)
150
+ .toNumber() + blockOffset;
151
+ const end = this.pstNodeInputStream
152
+ .seekAndReadLong(long_1.default.fromValue(iHeapNodePageMap + 2), 2)
153
+ .toNumber() + blockOffset;
154
+ return new NodeInfo_class_1.NodeInfo(start, end, this.pstNodeInputStream);
155
+ }
156
+ /**
157
+ * JSON stringify the object properties.
158
+ * @returns {string}
159
+ * @memberof PSTTable
160
+ */
161
+ toJSON() {
162
+ const clone = Object.assign({
163
+ tableType: this.tableType,
164
+ tableTypeByte: this.tableTypeByte,
165
+ hidUserRoot: this.hidUserRoot,
166
+ sizeOfItemKey: this.sizeOfItemKey,
167
+ sizeOfItemValue: this.sizeOfItemValue,
168
+ hidRoot: this.hidRoot,
169
+ numberOfKeys: this.numberOfKeys,
170
+ numberOfIndexLevels: this.numberOfIndexLevels,
171
+ }, this);
172
+ return clone;
173
+ }
174
+ }
175
+ exports.PSTTable = PSTTable;
@@ -1,45 +1,45 @@
1
- import { PSTDescriptorItem } from './PSTDescriptorItem.class';
2
- import { PSTNodeInputStream } from './PSTNodeInputStream.class';
3
- import { PSTTable } from './PSTTable.class';
4
- import { PSTTableItem } from './PSTTableItem.class';
5
- export declare class PSTTable7C extends PSTTable {
6
- private items;
7
- private numberOfDataSets;
8
- private BLOCK_SIZE;
9
- private numColumns;
10
- private TCI_bm;
11
- private TCI_1b;
12
- private columnDescriptors;
13
- private overrideCol;
14
- private rowNodeInfo;
15
- private keyMap;
16
- /**
17
- * Creates an instance of PSTTable7C ("Table Context").
18
- * @param {PSTNodeInputStream} pstNodeInputStream
19
- * @param {Map<number, PSTDescriptorItem>} subNodeDescriptorItems
20
- * @param {number} [entityToExtract]
21
- * @memberof PSTTable7C
22
- */
23
- constructor(pstNodeInputStream: PSTNodeInputStream, subNodeDescriptorItems?: Map<number, PSTDescriptorItem>, entityToExtract?: number);
24
- /**
25
- * Get items from the table.
26
- * @param {number} [startAtRecord]
27
- * @param {number} [numberOfRecordsToReturn]
28
- * @returns {Map<number, PSTTableItem>[]}
29
- * @memberof PSTTable7C
30
- */
31
- getItems(startAtRecord?: number, numberOfRecordsToReturn?: number): Map<number, PSTTableItem>[];
32
- /**
33
- * Get the number of rows.
34
- * @readonly
35
- * @type {number}
36
- * @memberof PSTTable7C
37
- */
38
- get rowCount(): number;
39
- /**
40
- * JSON stringify the object properties.
41
- * @returns {string}
42
- * @memberof PSTTable7C
43
- */
44
- toJSON(): any;
45
- }
1
+ import { PSTDescriptorItem } from './PSTDescriptorItem.class';
2
+ import { PSTNodeInputStream } from './PSTNodeInputStream.class';
3
+ import { PSTTable } from './PSTTable.class';
4
+ import { PSTTableItem } from './PSTTableItem.class';
5
+ export declare class PSTTable7C extends PSTTable {
6
+ private items;
7
+ private numberOfDataSets;
8
+ private BLOCK_SIZE;
9
+ private numColumns;
10
+ private TCI_bm;
11
+ private TCI_1b;
12
+ private columnDescriptors;
13
+ private overrideCol;
14
+ private rowNodeInfo;
15
+ private keyMap;
16
+ /**
17
+ * Creates an instance of PSTTable7C ("Table Context").
18
+ * @param {PSTNodeInputStream} pstNodeInputStream
19
+ * @param {Map<number, PSTDescriptorItem>} subNodeDescriptorItems
20
+ * @param {number} [entityToExtract]
21
+ * @memberof PSTTable7C
22
+ */
23
+ constructor(pstNodeInputStream: PSTNodeInputStream, subNodeDescriptorItems?: Map<number, PSTDescriptorItem>, entityToExtract?: number);
24
+ /**
25
+ * Get items from the table.
26
+ * @param {number} [startAtRecord]
27
+ * @param {number} [numberOfRecordsToReturn]
28
+ * @returns {Map<number, PSTTableItem>[]}
29
+ * @memberof PSTTable7C
30
+ */
31
+ getItems(startAtRecord?: number, numberOfRecordsToReturn?: number): Map<number, PSTTableItem>[];
32
+ /**
33
+ * Get the number of rows.
34
+ * @readonly
35
+ * @type {number}
36
+ * @memberof PSTTable7C
37
+ */
38
+ get rowCount(): number;
39
+ /**
40
+ * JSON stringify the object properties.
41
+ * @returns {string}
42
+ * @memberof PSTTable7C
43
+ */
44
+ toJSON(): any;
45
+ }