@@ -6,13 +6,16 @@ import { Stream, Readable } from "stream";
6
6
import events from "events" ;
7
7
import yauzl from "yauzl" ;
8
8
9
- const gunzip = zlib . createGunzip ( ) ;
9
+
10
+
10
11
11
12
export interface InitParameters {
12
13
chunkSize : number ,
13
14
encoding ? : string ,
14
15
inputFile : String | Stream ,
15
- selectedFileName ? :String
16
+ selectedFileName ? :String ,
17
+ specialChunkSize ?:{ [ key : number ] : number } ,
18
+ skipRows ? : number
16
19
}
17
20
18
21
export interface ReaderParameters {
@@ -39,9 +42,11 @@ interface IterableInterface {
39
42
next ( ) : Promise < IteratorResult < object > > ;
40
43
}
41
44
45
+
42
46
events . EventEmitter . defaultMaxListeners = 1000 ;
47
+ //let chunkCounter = 0 ;
43
48
44
- export function init ( parameters : InitParameters = { chunkSize : 10000 , encoding : "utf8" , inputFile : "" , selectedFileName : "" } ) {
49
+ export function init ( parameters : InitParameters = { chunkSize : 10000 , encoding : "utf8" , inputFile : "" , selectedFileName : "" , specialChunkSize : { } , skipRows : 0 } ) {
45
50
46
51
return { async get ( ) {
47
52
@@ -50,8 +55,9 @@ export function init(parameters : InitParameters = {chunkSize : 10000, encodin
50
55
51
56
if ( typeof ( parameters . inputFile ) == "string" ) {
52
57
if ( path . extname ( < string > parameters . inputFile ) == ".gz" ) {
58
+ const gunzip = zlib . createGunzip ( )
53
59
fileStream = fs . createReadStream ( < string > parameters . inputFile ) . pipe ( gunzip ) ;
54
- }
60
+ }
55
61
else if ( path . extname ( < string > parameters . inputFile ) == ".zip" ) {
56
62
57
63
zipFileStream = new Promise ( ( resolve , reject ) => {
@@ -84,7 +90,12 @@ export function init(parameters : InitParameters = {chunkSize : 10000, encodin
84
90
input : typeof ( zipFileStream ) === "undefined" ? fileStream : await zipFileStream ,
85
91
} ) ;
86
92
87
- let async_itr = rl [ Symbol . asyncIterator ] ( ) ;
93
+ let async_itr :AsyncIterableIterator < { } > = rl [ Symbol . asyncIterator ] ( ) ;
94
+
95
+ if ( parameters . hasOwnProperty ( "skipRows" ) ) {
96
+ async_itr = skipRow ( parameters , async_itr ) ;
97
+ }
98
+
88
99
return readLineByStream ( parameters , async_itr ) ;
89
100
}
90
101
else if ( parameters . inputFile instanceof Stream ) {
@@ -137,14 +148,63 @@ async function readMoreData(parameters:InitParameters ,asyncIterator :AsyncIter
137
148
let count = 0 ;
138
149
let arr :Array < object > = [ ] ;
139
150
151
+
140
152
while ( count < parameters . chunkSize ) {
141
153
const resolved_obj = await asyncIterator . next ( ) ;
142
154
if ( ! resolved_obj . done ) {
143
155
arr . push ( resolved_obj ) ;
144
156
}
145
157
count ++ ;
146
158
}
159
+
160
+
147
161
return arr ;
148
162
}
149
163
150
164
165
+
166
+
167
+ // async function readMoreData(parameters:InitParameters ,asyncIterator :AsyncIterableIterator<object>):Promise<Array<object>>{
168
+
169
+ // let count = 0;
170
+ // let arr:Array<object> = [];
171
+
172
+ // let currentChunkSize = 0 ;
173
+ // if(parameters.hasOwnProperty("specialChunkSize") && parameters.specialChunkSize![0] !== 0 ) {
174
+ // currentChunkSize = parameters.specialChunkSize![chunkCounter]
175
+ // }
176
+ // else {
177
+ // currentChunkSize = parameters.chunkSize
178
+ // }
179
+
180
+
181
+ // while(count < currentChunkSize){
182
+ // const resolved_obj = await asyncIterator.next();
183
+ // if(!resolved_obj.done){
184
+ // arr.push(resolved_obj);
185
+ // }
186
+ // count++;
187
+ // }
188
+
189
+
190
+ // if(parameters.hasOwnProperty("specialChunkSize")){
191
+ // chunkCounter++;
192
+ // }
193
+
194
+ // return arr;
195
+ // }
196
+
197
+
198
+
199
+
200
+ function skipRow ( parameters :InitParameters , asyncIterator :AsyncIterableIterator < { } > ) {
201
+
202
+ let count = 0 ;
203
+
204
+ while ( count < parameters . skipRows ! ) {
205
+ asyncIterator . next ( ) ;
206
+ count ++ ;
207
+ }
208
+
209
+ return asyncIterator ;
210
+ }
0 commit comments