readline-pager 0.2.4 → 0.2.6
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/README.md +19 -14
- package/dist/main.cjs +3 -2
- package/dist/main.d.cts +1 -1
- package/dist/main.d.mts +1 -1
- package/dist/main.mjs +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
# 📄 readline-pager
|
|
2
2
|
|
|
3
|
-
<p align="center"
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="https://raw.githubusercontent.com/devmor-j/readline-pager/main/logo.webp" alt="logo" width="349">
|
|
5
|
+
</p>
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://www.npmjs.com/package/readline-pager">
|
|
9
|
+
<img src="https://img.shields.io/npm/v/readline-pager?color=brightgreen" alt="version">
|
|
10
|
+
</a>
|
|
11
|
+
<img src="https://img.shields.io/npm/dw/readline-pager" alt="downloads">
|
|
12
|
+
<img src="https://img.shields.io/github/stars/devmor-j/readline-pager" alt="stars">
|
|
13
|
+
</p>
|
|
6
14
|
|
|
7
|
-
`readline-pager` reads large text files page-by-page without loading the entire file into memory.
|
|
15
|
+
⚡ Memory-efficient, paginated file reader for Node.js with async iteration, prefetching, backward reading and optional worker support. `readline-pager` reads large text files page-by-page without loading the entire file into memory.
|
|
8
16
|
|
|
9
17
|
- ✅ Zero dependencies
|
|
10
18
|
- ✅ Async iterator (`for await...of`) + manual `next()` API
|
|
11
19
|
- ✅ Forward & backward reading (EOF → BOF)
|
|
12
20
|
- ✅ Optional worker thread mode (forward only)
|
|
13
|
-
- ✅ Up to ~
|
|
21
|
+
- ✅ Up to ~3x faster than Node.js `readline`
|
|
14
22
|
- ✅ ~97% test coverage & fully typed (TypeScript)
|
|
15
23
|
|
|
16
24
|
> **Important:**
|
|
@@ -30,6 +38,7 @@ npm install readline-pager
|
|
|
30
38
|
|
|
31
39
|
```ts
|
|
32
40
|
import { createPager } from "readline-pager";
|
|
41
|
+
// const { createPager } = require("readline-pager");
|
|
33
42
|
|
|
34
43
|
const pager = createPager("./bigfile.txt");
|
|
35
44
|
|
|
@@ -43,8 +52,6 @@ for await (const page of pager) {
|
|
|
43
52
|
**Recommended for highest throughput:**
|
|
44
53
|
|
|
45
54
|
```ts
|
|
46
|
-
const pager = createPager("./bigfile.txt");
|
|
47
|
-
|
|
48
55
|
while (true) {
|
|
49
56
|
const page = await pager.next();
|
|
50
57
|
if (!page) break;
|
|
@@ -52,9 +59,7 @@ while (true) {
|
|
|
52
59
|
|
|
53
60
|
// or
|
|
54
61
|
let page;
|
|
55
|
-
while ((page = await pager.next()) !== null) {
|
|
56
|
-
// process page
|
|
57
|
-
}
|
|
62
|
+
while ((page = await pager.next()) !== null) {}
|
|
58
63
|
```
|
|
59
64
|
|
|
60
65
|
- `while + next()` is the fastest iteration method (avoids extra async-iterator overhead).
|
|
@@ -68,14 +73,14 @@ while ((page = await pager.next()) !== null) {
|
|
|
68
73
|
createPager(filepath, {
|
|
69
74
|
chunkSize?: number, // default: 64 * 1024 (64 KiB)
|
|
70
75
|
pageSize?: number, // default: 1_000
|
|
71
|
-
delimiter?: string,
|
|
76
|
+
delimiter?: string, // default: "\n"
|
|
72
77
|
prefetch?: number, // default: 1
|
|
73
78
|
backward?: boolean, // default: false
|
|
74
79
|
useWorker?: boolean, // default: false (forward only)
|
|
75
80
|
});
|
|
76
81
|
```
|
|
77
82
|
|
|
78
|
-
- `chunkSize
|
|
83
|
+
- `chunkSize` — number of bytes read per I/O operation.
|
|
79
84
|
- `pageSize` — number of lines per page.
|
|
80
85
|
- `delimiter` — line separator.
|
|
81
86
|
- `prefetch` — max number of pages buffered internally. Not required for typical use; tuning has little effect once the engine is optimized.
|
|
@@ -127,14 +132,14 @@ node test/_benchmark.ts --lines=20000 --page-size=500 --backward
|
|
|
127
132
|
| 100M | 3528.59 | ~441 | ~298 | **~1,378** |
|
|
128
133
|
| 1,000M | 35285.95 | ~426 | ~294 | **~1,168** |
|
|
129
134
|
|
|
130
|
-
**
|
|
135
|
+
**Runtime Environment:** Node.js v25.6.1 & Bun v1.3.9
|
|
131
136
|
|
|
132
137
|
---
|
|
133
138
|
|
|
134
139
|
## 🛠 Development & Contributing
|
|
135
140
|
|
|
136
|
-
- Minimum supported Node.js: **v18.12
|
|
137
|
-
- Development/test environment: **Node v25.6
|
|
141
|
+
- Minimum supported Node.js: **v18.12 (lts/hydrogen)**.
|
|
142
|
+
- Development/test environment: **Node v25.6 & TypeScript v5.9**.
|
|
138
143
|
|
|
139
144
|
Run tests:
|
|
140
145
|
|
package/dist/main.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.
|
|
1
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
2
2
|
let node_fs_promises = require("node:fs/promises");
|
|
3
3
|
let node_worker_threads = require("node:worker_threads");
|
|
4
4
|
|
|
@@ -298,4 +298,5 @@ function createPager(filepath, options = {}) {
|
|
|
298
298
|
}
|
|
299
299
|
|
|
300
300
|
//#endregion
|
|
301
|
-
exports.createPager = createPager;
|
|
301
|
+
exports.createPager = createPager;
|
|
302
|
+
exports.default = createPager;
|
package/dist/main.d.cts
CHANGED
|
@@ -20,4 +20,4 @@ interface Pager extends AsyncIterable<string[]> {
|
|
|
20
20
|
//#region src/main.d.ts
|
|
21
21
|
declare function createPager(filepath: string, options?: PagerOptions): Pager;
|
|
22
22
|
//#endregion
|
|
23
|
-
export { Pager, PagerOptions, ReaderOptions, createPager };
|
|
23
|
+
export { Pager, PagerOptions, ReaderOptions, createPager, createPager as default };
|
package/dist/main.d.mts
CHANGED
|
@@ -20,4 +20,4 @@ interface Pager extends AsyncIterable<string[]> {
|
|
|
20
20
|
//#region src/main.d.ts
|
|
21
21
|
declare function createPager(filepath: string, options?: PagerOptions): Pager;
|
|
22
22
|
//#endregion
|
|
23
|
-
export { Pager, PagerOptions, ReaderOptions, createPager };
|
|
23
|
+
export { Pager, PagerOptions, ReaderOptions, createPager, createPager as default };
|
package/dist/main.mjs
CHANGED