Skip to content

Commit c67d46e

Browse files
author
cemayan
committed
skipRow added.
1 parent ae8993a commit c67d46e

File tree

4 files changed

+193
-9
lines changed

4 files changed

+193
-9
lines changed

README.md

+51-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ npm install --save async-chunk-reader
1313

1414
## Changelog
1515
> Added reading from zip file (v1.0.6)
16-
17-
> Feature to be added : Reading via url (v1.0.7)
16+
> Added skipRows (v.1.0.8)
17+
> to be added in the future (v.1.0.9)
1818
1919
## API
2020
---
@@ -134,5 +134,54 @@ main();
134134
```
135135

136136

137+
### specialChunkSize :
138+
139+
```javascript
140+
async function main(){
141+
142+
const data = await reader
143+
.init({
144+
chunkSize: 100000,
145+
inputFile: 'example/Archive.zip',
146+
specialChunkSize : {0:10000, 1:40000}
147+
})
148+
.get()
149+
150+
for await(let chunk of data){
151+
console.log(chunk.map(d=>d.value))
152+
}
153+
}
154+
155+
main();
156+
157+
```
158+
159+
160+
161+
162+
163+
### to be added in the future (v.1.0.9)
164+
### skipRows :
165+
166+
```javascript
167+
async function main(){
168+
169+
const data = await reader
170+
.init({
171+
chunkSize: 100000,
172+
inputFile: 'example/Archive.zip',
173+
skipRows : 40000
174+
})
175+
.get()
176+
177+
for await(let chunk of data){
178+
console.log(chunk.map(d=>d.value))
179+
}
180+
}
181+
182+
main();
183+
184+
```
185+
137186

138187

package-lock.json

+76-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "async-chunk-reader",
3-
"version": "0.1.7",
3+
"version": "0.1.8",
44
"description": "Async chunk reader",
55
"main": "dist/index.js",
66
"types": "dist/index.d.ts",

src/index.ts

+65-5
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@ import { Stream, Readable } from "stream";
66
import events from "events";
77
import yauzl from "yauzl";
88

9-
const gunzip = zlib.createGunzip();
9+
10+
1011

1112
export interface InitParameters{
1213
chunkSize : number,
1314
encoding? : string,
1415
inputFile : String|Stream,
15-
selectedFileName? :String
16+
selectedFileName? :String,
17+
specialChunkSize?:{[key: number]: number },
18+
skipRows? : number
1619
}
1720

1821
export interface ReaderParameters{
@@ -39,9 +42,11 @@ interface IterableInterface {
3942
next(): Promise<IteratorResult<object>>;
4043
}
4144

45+
4246
events.EventEmitter.defaultMaxListeners = 1000;
47+
//let chunkCounter = 0 ;
4348

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}) {
4550

4651
return {async get(){
4752

@@ -50,8 +55,9 @@ export function init(parameters : InitParameters = {chunkSize : 10000, encodin
5055

5156
if(typeof(parameters.inputFile) == "string"){
5257
if(path.extname(<string>parameters.inputFile)==".gz"){
58+
const gunzip = zlib.createGunzip()
5359
fileStream = fs.createReadStream(<string>parameters.inputFile).pipe(gunzip);
54-
}
60+
}
5561
else if(path.extname(<string>parameters.inputFile)==".zip"){
5662

5763
zipFileStream = new Promise((resolve,reject) => {
@@ -84,7 +90,12 @@ export function init(parameters : InitParameters = {chunkSize : 10000, encodin
8490
input: typeof(zipFileStream) === "undefined" ? fileStream : await zipFileStream,
8591
});
8692

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+
8899
return readLineByStream(parameters,async_itr);
89100
}
90101
else if(parameters.inputFile instanceof Stream ){
@@ -137,14 +148,63 @@ async function readMoreData(parameters:InitParameters ,asyncIterator :AsyncIter
137148
let count = 0;
138149
let arr:Array<object> = [];
139150

151+
140152
while(count < parameters.chunkSize){
141153
const resolved_obj = await asyncIterator.next();
142154
if(!resolved_obj.done){
143155
arr.push(resolved_obj);
144156
}
145157
count++;
146158
}
159+
160+
147161
return arr;
148162
}
149163

150164

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

Comments
 (0)