@lexmata/micropdf 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/LICENSE +191 -0
- package/README.md +985 -0
- package/binding.gyp +73 -0
- package/dist/annot.d.ts +458 -0
- package/dist/annot.d.ts.map +1 -0
- package/dist/annot.js +697 -0
- package/dist/annot.js.map +1 -0
- package/dist/archive.d.ts +128 -0
- package/dist/archive.d.ts.map +1 -0
- package/dist/archive.js +268 -0
- package/dist/archive.js.map +1 -0
- package/dist/buffer.d.ts +572 -0
- package/dist/buffer.d.ts.map +1 -0
- package/dist/buffer.js +971 -0
- package/dist/buffer.js.map +1 -0
- package/dist/colorspace.d.ts +287 -0
- package/dist/colorspace.d.ts.map +1 -0
- package/dist/colorspace.js +542 -0
- package/dist/colorspace.js.map +1 -0
- package/dist/context.d.ts +184 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +320 -0
- package/dist/context.js.map +1 -0
- package/dist/cookie.d.ts +164 -0
- package/dist/cookie.d.ts.map +1 -0
- package/dist/cookie.js +306 -0
- package/dist/cookie.js.map +1 -0
- package/dist/device.d.ts +169 -0
- package/dist/device.d.ts.map +1 -0
- package/dist/device.js +350 -0
- package/dist/device.js.map +1 -0
- package/dist/display-list.d.ts +202 -0
- package/dist/display-list.d.ts.map +1 -0
- package/dist/display-list.js +410 -0
- package/dist/display-list.js.map +1 -0
- package/dist/document.d.ts +637 -0
- package/dist/document.d.ts.map +1 -0
- package/dist/document.js +902 -0
- package/dist/document.js.map +1 -0
- package/dist/easy.d.ts +423 -0
- package/dist/easy.d.ts.map +1 -0
- package/dist/easy.js +644 -0
- package/dist/easy.js.map +1 -0
- package/dist/enhanced.d.ts +226 -0
- package/dist/enhanced.d.ts.map +1 -0
- package/dist/enhanced.js +368 -0
- package/dist/enhanced.js.map +1 -0
- package/dist/filter.d.ts +51 -0
- package/dist/filter.d.ts.map +1 -0
- package/dist/filter.js +381 -0
- package/dist/filter.js.map +1 -0
- package/dist/font.d.ts +222 -0
- package/dist/font.d.ts.map +1 -0
- package/dist/font.js +381 -0
- package/dist/font.js.map +1 -0
- package/dist/form.d.ts +214 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +497 -0
- package/dist/form.js.map +1 -0
- package/dist/geometry.d.ts +469 -0
- package/dist/geometry.d.ts.map +1 -0
- package/dist/geometry.js +780 -0
- package/dist/geometry.js.map +1 -0
- package/dist/image.d.ts +172 -0
- package/dist/image.d.ts.map +1 -0
- package/dist/image.js +348 -0
- package/dist/image.js.map +1 -0
- package/dist/index.d.ts +171 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +339 -0
- package/dist/index.js.map +1 -0
- package/dist/link.d.ts +168 -0
- package/dist/link.d.ts.map +1 -0
- package/dist/link.js +343 -0
- package/dist/link.js.map +1 -0
- package/dist/micropdf.d.ts +40 -0
- package/dist/micropdf.d.ts.map +1 -0
- package/dist/micropdf.js +45 -0
- package/dist/micropdf.js.map +1 -0
- package/dist/nanopdf.d.ts +40 -0
- package/dist/nanopdf.d.ts.map +1 -0
- package/dist/nanopdf.js +45 -0
- package/dist/nanopdf.js.map +1 -0
- package/dist/native.d.ts +242 -0
- package/dist/native.d.ts.map +1 -0
- package/dist/native.js +509 -0
- package/dist/native.js.map +1 -0
- package/dist/output.d.ts +166 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +365 -0
- package/dist/output.js.map +1 -0
- package/dist/path.d.ts +420 -0
- package/dist/path.d.ts.map +1 -0
- package/dist/path.js +687 -0
- package/dist/path.js.map +1 -0
- package/dist/pdf/object.d.ts +489 -0
- package/dist/pdf/object.d.ts.map +1 -0
- package/dist/pdf/object.js +1045 -0
- package/dist/pdf/object.js.map +1 -0
- package/dist/pixmap.d.ts +315 -0
- package/dist/pixmap.d.ts.map +1 -0
- package/dist/pixmap.js +590 -0
- package/dist/pixmap.js.map +1 -0
- package/dist/profiler.d.ts +159 -0
- package/dist/profiler.d.ts.map +1 -0
- package/dist/profiler.js +380 -0
- package/dist/profiler.js.map +1 -0
- package/dist/render-options.d.ts +227 -0
- package/dist/render-options.d.ts.map +1 -0
- package/dist/render-options.js +130 -0
- package/dist/render-options.js.map +1 -0
- package/dist/resource-tracking.d.ts +332 -0
- package/dist/resource-tracking.d.ts.map +1 -0
- package/dist/resource-tracking.js +653 -0
- package/dist/resource-tracking.js.map +1 -0
- package/dist/simple.d.ts +276 -0
- package/dist/simple.d.ts.map +1 -0
- package/dist/simple.js +343 -0
- package/dist/simple.js.map +1 -0
- package/dist/stext.d.ts +290 -0
- package/dist/stext.d.ts.map +1 -0
- package/dist/stext.js +312 -0
- package/dist/stext.js.map +1 -0
- package/dist/stream.d.ts +174 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +476 -0
- package/dist/stream.js.map +1 -0
- package/dist/text.d.ts +337 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +454 -0
- package/dist/text.js.map +1 -0
- package/dist/typed-arrays.d.ts +127 -0
- package/dist/typed-arrays.d.ts.map +1 -0
- package/dist/typed-arrays.js +410 -0
- package/dist/typed-arrays.js.map +1 -0
- package/dist/types.d.ts +358 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +216 -0
- package/dist/types.js.map +1 -0
- package/native/annot.cc +557 -0
- package/native/buffer.cc +204 -0
- package/native/colorspace.cc +166 -0
- package/native/context.cc +84 -0
- package/native/cookie.cc +179 -0
- package/native/device.cc +179 -0
- package/native/display_list.cc +179 -0
- package/native/document.cc +268 -0
- package/native/enhanced.cc +70 -0
- package/native/font.cc +282 -0
- package/native/form.cc +523 -0
- package/native/geometry.cc +255 -0
- package/native/image.cc +216 -0
- package/native/include/micropdf/enhanced.h +38 -0
- package/native/include/micropdf/types.h +36 -0
- package/native/include/micropdf.h +106 -0
- package/native/include/mupdf-ffi.h +39 -0
- package/native/include/mupdf.h +11 -0
- package/native/include/mupdf_minimal.h +381 -0
- package/native/lib/linux-x64/libmicropdf.a +0 -0
- package/native/link.cc +234 -0
- package/native/micropdf.cc +71 -0
- package/native/output.cc +229 -0
- package/native/page.cc +572 -0
- package/native/path.cc +259 -0
- package/native/pixmap.cc +240 -0
- package/native/stext.cc +610 -0
- package/native/stream.cc +239 -0
- package/package.json +120 -0
- package/scripts/build-from-rust.js +97 -0
- package/scripts/install.js +184 -0
package/dist/stream.d.ts
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream - Buffered I/O abstraction
|
|
3
|
+
*
|
|
4
|
+
* This implementation mirrors the Rust `fitz::stream::Stream` for 100% API compatibility.
|
|
5
|
+
*/
|
|
6
|
+
import { Buffer } from './buffer.js';
|
|
7
|
+
import { SeekOrigin } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* A buffered stream for reading PDF data
|
|
10
|
+
*
|
|
11
|
+
* Mirrors the Rust `Stream` implementation.
|
|
12
|
+
*/
|
|
13
|
+
export declare class Stream {
|
|
14
|
+
private readonly source;
|
|
15
|
+
private readonly buffer;
|
|
16
|
+
private rp;
|
|
17
|
+
private wp;
|
|
18
|
+
private pos;
|
|
19
|
+
private isEof;
|
|
20
|
+
private bits;
|
|
21
|
+
private bitsAvail;
|
|
22
|
+
private readonly filename;
|
|
23
|
+
private constructor();
|
|
24
|
+
/**
|
|
25
|
+
* Open a stream from a file path (synchronous)
|
|
26
|
+
*/
|
|
27
|
+
static openFileSync(path: string): Stream;
|
|
28
|
+
/**
|
|
29
|
+
* Open a stream from a file path (asynchronous)
|
|
30
|
+
*/
|
|
31
|
+
static openFile(path: string): Promise<Stream>;
|
|
32
|
+
/**
|
|
33
|
+
* Open a stream from memory
|
|
34
|
+
*/
|
|
35
|
+
static openMemory(data: Uint8Array | globalThis.Buffer): Stream;
|
|
36
|
+
/**
|
|
37
|
+
* Open a stream from a Buffer
|
|
38
|
+
*/
|
|
39
|
+
static openBuffer(buffer: Buffer): Stream;
|
|
40
|
+
/**
|
|
41
|
+
* Get the current read position
|
|
42
|
+
*/
|
|
43
|
+
tell(): number;
|
|
44
|
+
/**
|
|
45
|
+
* Get the total length of the stream if known
|
|
46
|
+
*/
|
|
47
|
+
get length(): number | null;
|
|
48
|
+
/**
|
|
49
|
+
* Check if the stream is empty
|
|
50
|
+
*/
|
|
51
|
+
get isEmpty(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Check if we've reached EOF
|
|
54
|
+
*/
|
|
55
|
+
get eof(): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Get the filename if this is a file stream
|
|
58
|
+
*/
|
|
59
|
+
getFilename(): string | null;
|
|
60
|
+
/**
|
|
61
|
+
* Fill the internal buffer
|
|
62
|
+
*/
|
|
63
|
+
private fillBuffer;
|
|
64
|
+
/**
|
|
65
|
+
* Read a single byte
|
|
66
|
+
*/
|
|
67
|
+
readByte(): number | null;
|
|
68
|
+
/**
|
|
69
|
+
* Peek at the next byte without consuming it
|
|
70
|
+
*/
|
|
71
|
+
peekByte(): number | null;
|
|
72
|
+
/**
|
|
73
|
+
* Read bytes into a buffer
|
|
74
|
+
*/
|
|
75
|
+
read(buf: Uint8Array): number;
|
|
76
|
+
/**
|
|
77
|
+
* Read exactly the specified number of bytes
|
|
78
|
+
*/
|
|
79
|
+
readExact(buf: Uint8Array): void;
|
|
80
|
+
/**
|
|
81
|
+
* Read all remaining data into a Buffer
|
|
82
|
+
*/
|
|
83
|
+
readAll(_initialCapacity?: number): Buffer;
|
|
84
|
+
/**
|
|
85
|
+
* Read a line (up to and including newline)
|
|
86
|
+
*/
|
|
87
|
+
readLine(): Uint8Array | null;
|
|
88
|
+
/**
|
|
89
|
+
* Skip n bytes
|
|
90
|
+
*/
|
|
91
|
+
skip(n: number): number;
|
|
92
|
+
/**
|
|
93
|
+
* Seek to a position in the stream
|
|
94
|
+
*/
|
|
95
|
+
seek(offset: number, origin?: SeekOrigin): void;
|
|
96
|
+
/**
|
|
97
|
+
* Read a 16-bit unsigned integer (big-endian)
|
|
98
|
+
*/
|
|
99
|
+
readUInt16(): number;
|
|
100
|
+
/**
|
|
101
|
+
* Read a 24-bit unsigned integer (big-endian)
|
|
102
|
+
*/
|
|
103
|
+
readUInt24(): number;
|
|
104
|
+
/**
|
|
105
|
+
* Read a 32-bit unsigned integer (big-endian)
|
|
106
|
+
*/
|
|
107
|
+
readUInt32(): number;
|
|
108
|
+
/**
|
|
109
|
+
* Read a 16-bit signed integer (little-endian)
|
|
110
|
+
*/
|
|
111
|
+
readInt16LE(): number;
|
|
112
|
+
/**
|
|
113
|
+
* Read a 32-bit signed integer (little-endian)
|
|
114
|
+
*/
|
|
115
|
+
readInt32LE(): number;
|
|
116
|
+
/**
|
|
117
|
+
* Read a 16-bit unsigned integer (little-endian)
|
|
118
|
+
*/
|
|
119
|
+
readUInt16LE(): number;
|
|
120
|
+
/**
|
|
121
|
+
* Read a 32-bit unsigned integer (little-endian)
|
|
122
|
+
*/
|
|
123
|
+
readUInt32LE(): number;
|
|
124
|
+
/**
|
|
125
|
+
* Read n bits from the stream
|
|
126
|
+
*/
|
|
127
|
+
readBits(n: number): number;
|
|
128
|
+
/**
|
|
129
|
+
* Sync bits - discard any partial byte
|
|
130
|
+
*/
|
|
131
|
+
syncBits(): void;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Async stream for non-blocking I/O
|
|
135
|
+
*/
|
|
136
|
+
export declare class AsyncStream {
|
|
137
|
+
private readonly data;
|
|
138
|
+
private position;
|
|
139
|
+
private isEof;
|
|
140
|
+
private constructor();
|
|
141
|
+
/**
|
|
142
|
+
* Open a file asynchronously
|
|
143
|
+
*/
|
|
144
|
+
static openFile(path: string): Promise<AsyncStream>;
|
|
145
|
+
/**
|
|
146
|
+
* Open from memory
|
|
147
|
+
*/
|
|
148
|
+
static openMemory(data: Uint8Array | globalThis.Buffer): AsyncStream;
|
|
149
|
+
/**
|
|
150
|
+
* Read bytes asynchronously
|
|
151
|
+
*/
|
|
152
|
+
read(buf: Uint8Array): Promise<number>;
|
|
153
|
+
/**
|
|
154
|
+
* Read all data asynchronously
|
|
155
|
+
*/
|
|
156
|
+
readAll(): Promise<Buffer>;
|
|
157
|
+
/**
|
|
158
|
+
* Seek asynchronously
|
|
159
|
+
*/
|
|
160
|
+
seek(offset: number, origin?: SeekOrigin): Promise<number>;
|
|
161
|
+
/**
|
|
162
|
+
* Get current position
|
|
163
|
+
*/
|
|
164
|
+
tell(): number;
|
|
165
|
+
/**
|
|
166
|
+
* Check if EOF
|
|
167
|
+
*/
|
|
168
|
+
get eof(): boolean;
|
|
169
|
+
/**
|
|
170
|
+
* Get length
|
|
171
|
+
*/
|
|
172
|
+
get length(): number;
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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"}
|
package/dist/stream.js
ADDED
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream - Buffered I/O abstraction
|
|
3
|
+
*
|
|
4
|
+
* This implementation mirrors the Rust `fitz::stream::Stream` for 100% API compatibility.
|
|
5
|
+
*/
|
|
6
|
+
import { readFile, readFileSync } from 'node:fs';
|
|
7
|
+
import { promisify } from 'node:util';
|
|
8
|
+
import { Buffer } from './buffer.js';
|
|
9
|
+
import { MicroPDFError, SeekOrigin } from './types.js';
|
|
10
|
+
const readFileAsync = promisify(readFile);
|
|
11
|
+
/**
|
|
12
|
+
* Memory-based stream source
|
|
13
|
+
*/
|
|
14
|
+
class MemorySource {
|
|
15
|
+
data;
|
|
16
|
+
position;
|
|
17
|
+
constructor(data) {
|
|
18
|
+
this.data = data;
|
|
19
|
+
this.position = 0;
|
|
20
|
+
}
|
|
21
|
+
read(buffer) {
|
|
22
|
+
const remaining = this.data.length - this.position;
|
|
23
|
+
const toRead = Math.min(buffer.length, remaining);
|
|
24
|
+
buffer.set(this.data.subarray(this.position, this.position + toRead));
|
|
25
|
+
this.position += toRead;
|
|
26
|
+
return toRead;
|
|
27
|
+
}
|
|
28
|
+
seek(offset, origin) {
|
|
29
|
+
let newPos;
|
|
30
|
+
switch (origin) {
|
|
31
|
+
case SeekOrigin.Start:
|
|
32
|
+
newPos = offset;
|
|
33
|
+
break;
|
|
34
|
+
case SeekOrigin.Current:
|
|
35
|
+
newPos = this.position + offset;
|
|
36
|
+
break;
|
|
37
|
+
case SeekOrigin.End:
|
|
38
|
+
newPos = this.data.length + offset;
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
if (newPos < 0) {
|
|
42
|
+
throw MicroPDFError.argument('Seek before start');
|
|
43
|
+
}
|
|
44
|
+
this.position = Math.min(newPos, this.data.length);
|
|
45
|
+
return this.position;
|
|
46
|
+
}
|
|
47
|
+
tell() {
|
|
48
|
+
return this.position;
|
|
49
|
+
}
|
|
50
|
+
get length() {
|
|
51
|
+
return this.data.length;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const STREAM_BUFFER_SIZE = 8192;
|
|
55
|
+
/**
|
|
56
|
+
* A buffered stream for reading PDF data
|
|
57
|
+
*
|
|
58
|
+
* Mirrors the Rust `Stream` implementation.
|
|
59
|
+
*/
|
|
60
|
+
export class Stream {
|
|
61
|
+
source;
|
|
62
|
+
buffer;
|
|
63
|
+
rp; // Read pointer
|
|
64
|
+
wp; // Write pointer
|
|
65
|
+
pos; // Source position
|
|
66
|
+
isEof;
|
|
67
|
+
bits;
|
|
68
|
+
bitsAvail;
|
|
69
|
+
filename;
|
|
70
|
+
constructor(source, filename = null) {
|
|
71
|
+
this.source = source;
|
|
72
|
+
this.buffer = new Uint8Array(STREAM_BUFFER_SIZE);
|
|
73
|
+
this.rp = 0;
|
|
74
|
+
this.wp = 0;
|
|
75
|
+
this.pos = 0;
|
|
76
|
+
this.isEof = false;
|
|
77
|
+
this.bits = 0;
|
|
78
|
+
this.bitsAvail = 0;
|
|
79
|
+
this.filename = filename;
|
|
80
|
+
}
|
|
81
|
+
// ============================================================================
|
|
82
|
+
// Static Constructors
|
|
83
|
+
// ============================================================================
|
|
84
|
+
/**
|
|
85
|
+
* Open a stream from a file path (synchronous)
|
|
86
|
+
*/
|
|
87
|
+
static openFileSync(path) {
|
|
88
|
+
const data = readFileSync(path);
|
|
89
|
+
return new Stream(new MemorySource(new Uint8Array(data)), path);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Open a stream from a file path (asynchronous)
|
|
93
|
+
*/
|
|
94
|
+
static async openFile(path) {
|
|
95
|
+
const data = await readFileAsync(path);
|
|
96
|
+
return new Stream(new MemorySource(new Uint8Array(data)), path);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Open a stream from memory
|
|
100
|
+
*/
|
|
101
|
+
static openMemory(data) {
|
|
102
|
+
const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);
|
|
103
|
+
return new Stream(new MemorySource(bytes));
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Open a stream from a Buffer
|
|
107
|
+
*/
|
|
108
|
+
static openBuffer(buffer) {
|
|
109
|
+
return Stream.openMemory(buffer.toUint8Array());
|
|
110
|
+
}
|
|
111
|
+
// ============================================================================
|
|
112
|
+
// Properties
|
|
113
|
+
// ============================================================================
|
|
114
|
+
/**
|
|
115
|
+
* Get the current read position
|
|
116
|
+
*/
|
|
117
|
+
tell() {
|
|
118
|
+
return this.pos - (this.wp - this.rp);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get the total length of the stream if known
|
|
122
|
+
*/
|
|
123
|
+
get length() {
|
|
124
|
+
return this.source.length;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Check if the stream is empty
|
|
128
|
+
*/
|
|
129
|
+
get isEmpty() {
|
|
130
|
+
return this.source.length === 0;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Check if we've reached EOF
|
|
134
|
+
*/
|
|
135
|
+
get eof() {
|
|
136
|
+
return this.isEof && this.rp >= this.wp;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get the filename if this is a file stream
|
|
140
|
+
*/
|
|
141
|
+
getFilename() {
|
|
142
|
+
return this.filename;
|
|
143
|
+
}
|
|
144
|
+
// ============================================================================
|
|
145
|
+
// Buffer Management
|
|
146
|
+
// ============================================================================
|
|
147
|
+
/**
|
|
148
|
+
* Fill the internal buffer
|
|
149
|
+
*/
|
|
150
|
+
fillBuffer() {
|
|
151
|
+
if (this.isEof) {
|
|
152
|
+
return 0;
|
|
153
|
+
}
|
|
154
|
+
// Compact the buffer
|
|
155
|
+
if (this.rp > 0) {
|
|
156
|
+
if (this.rp < this.wp) {
|
|
157
|
+
this.buffer.copyWithin(0, this.rp, this.wp);
|
|
158
|
+
this.wp -= this.rp;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
this.wp = 0;
|
|
162
|
+
}
|
|
163
|
+
this.rp = 0;
|
|
164
|
+
}
|
|
165
|
+
// Read more data
|
|
166
|
+
const tempBuf = new Uint8Array(STREAM_BUFFER_SIZE - this.wp);
|
|
167
|
+
const n = this.source.read(tempBuf);
|
|
168
|
+
if (n === 0) {
|
|
169
|
+
this.isEof = true;
|
|
170
|
+
return 0;
|
|
171
|
+
}
|
|
172
|
+
this.buffer.set(tempBuf.subarray(0, n), this.wp);
|
|
173
|
+
this.wp += n;
|
|
174
|
+
this.pos += n;
|
|
175
|
+
return n;
|
|
176
|
+
}
|
|
177
|
+
// ============================================================================
|
|
178
|
+
// Read Methods
|
|
179
|
+
// ============================================================================
|
|
180
|
+
/**
|
|
181
|
+
* Read a single byte
|
|
182
|
+
*/
|
|
183
|
+
readByte() {
|
|
184
|
+
if (this.rp >= this.wp && this.fillBuffer() === 0) {
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
return this.buffer[this.rp++] ?? null;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Peek at the next byte without consuming it
|
|
191
|
+
*/
|
|
192
|
+
peekByte() {
|
|
193
|
+
if (this.rp >= this.wp && this.fillBuffer() === 0) {
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
return this.buffer[this.rp] ?? null;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Read bytes into a buffer
|
|
200
|
+
*/
|
|
201
|
+
read(buf) {
|
|
202
|
+
let total = 0;
|
|
203
|
+
while (total < buf.length) {
|
|
204
|
+
const buffered = this.wp - this.rp;
|
|
205
|
+
if (buffered > 0) {
|
|
206
|
+
const toCopy = Math.min(buffered, buf.length - total);
|
|
207
|
+
buf.set(this.buffer.subarray(this.rp, this.rp + toCopy), total);
|
|
208
|
+
this.rp += toCopy;
|
|
209
|
+
total += toCopy;
|
|
210
|
+
}
|
|
211
|
+
else if (this.fillBuffer() === 0) {
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return total;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Read exactly the specified number of bytes
|
|
219
|
+
*/
|
|
220
|
+
readExact(buf) {
|
|
221
|
+
if (this.read(buf) < buf.length) {
|
|
222
|
+
throw MicroPDFError.eof();
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Read all remaining data into a Buffer
|
|
227
|
+
*/
|
|
228
|
+
readAll(_initialCapacity = 0) {
|
|
229
|
+
const chunks = [];
|
|
230
|
+
while (true) {
|
|
231
|
+
const buffered = this.wp - this.rp;
|
|
232
|
+
if (buffered > 0) {
|
|
233
|
+
chunks.push(this.buffer.slice(this.rp, this.wp));
|
|
234
|
+
this.rp = this.wp;
|
|
235
|
+
}
|
|
236
|
+
if (this.fillBuffer() === 0) {
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// Concatenate all chunks
|
|
241
|
+
const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
|
|
242
|
+
const result = new Uint8Array(totalLength);
|
|
243
|
+
let offset = 0;
|
|
244
|
+
for (const chunk of chunks) {
|
|
245
|
+
result.set(chunk, offset);
|
|
246
|
+
offset += chunk.length;
|
|
247
|
+
}
|
|
248
|
+
return Buffer.fromUint8Array(result);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Read a line (up to and including newline)
|
|
252
|
+
*/
|
|
253
|
+
readLine() {
|
|
254
|
+
const line = [];
|
|
255
|
+
while (true) {
|
|
256
|
+
const byte = this.readByte();
|
|
257
|
+
if (byte === null) {
|
|
258
|
+
if (line.length === 0) {
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
line.push(byte);
|
|
264
|
+
if (byte === 0x0a) {
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return new Uint8Array(line);
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Skip n bytes
|
|
272
|
+
*/
|
|
273
|
+
skip(n) {
|
|
274
|
+
let skipped = 0;
|
|
275
|
+
while (n > 0) {
|
|
276
|
+
const buffered = this.wp - this.rp;
|
|
277
|
+
if (buffered > 0) {
|
|
278
|
+
const toSkip = Math.min(buffered, n);
|
|
279
|
+
this.rp += toSkip;
|
|
280
|
+
skipped += toSkip;
|
|
281
|
+
n -= toSkip;
|
|
282
|
+
}
|
|
283
|
+
else if (this.fillBuffer() === 0) {
|
|
284
|
+
break;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return skipped;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Seek to a position in the stream
|
|
291
|
+
*/
|
|
292
|
+
seek(offset, origin = SeekOrigin.Start) {
|
|
293
|
+
// Clear buffer and seek
|
|
294
|
+
this.rp = 0;
|
|
295
|
+
this.wp = 0;
|
|
296
|
+
this.isEof = false;
|
|
297
|
+
this.pos = this.source.seek(offset, origin);
|
|
298
|
+
}
|
|
299
|
+
// ============================================================================
|
|
300
|
+
// Integer Read Methods
|
|
301
|
+
// ============================================================================
|
|
302
|
+
/**
|
|
303
|
+
* Read a 16-bit unsigned integer (big-endian)
|
|
304
|
+
*/
|
|
305
|
+
readUInt16() {
|
|
306
|
+
const buf = new Uint8Array(2);
|
|
307
|
+
this.readExact(buf);
|
|
308
|
+
return ((buf[0] ?? 0) << 8) | (buf[1] ?? 0);
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Read a 24-bit unsigned integer (big-endian)
|
|
312
|
+
*/
|
|
313
|
+
readUInt24() {
|
|
314
|
+
const buf = new Uint8Array(3);
|
|
315
|
+
this.readExact(buf);
|
|
316
|
+
return ((buf[0] ?? 0) << 16) | ((buf[1] ?? 0) << 8) | (buf[2] ?? 0);
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Read a 32-bit unsigned integer (big-endian)
|
|
320
|
+
*/
|
|
321
|
+
readUInt32() {
|
|
322
|
+
const buf = new Uint8Array(4);
|
|
323
|
+
this.readExact(buf);
|
|
324
|
+
return ((((buf[0] ?? 0) << 24) | ((buf[1] ?? 0) << 16) | ((buf[2] ?? 0) << 8) | (buf[3] ?? 0)) >>> 0);
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Read a 16-bit signed integer (little-endian)
|
|
328
|
+
*/
|
|
329
|
+
readInt16LE() {
|
|
330
|
+
const buf = new Uint8Array(2);
|
|
331
|
+
this.readExact(buf);
|
|
332
|
+
const value = (buf[0] ?? 0) | ((buf[1] ?? 0) << 8);
|
|
333
|
+
return value > 0x7fff ? value - 0x10000 : value;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Read a 32-bit signed integer (little-endian)
|
|
337
|
+
*/
|
|
338
|
+
readInt32LE() {
|
|
339
|
+
const buf = new Uint8Array(4);
|
|
340
|
+
this.readExact(buf);
|
|
341
|
+
return (buf[0] ?? 0) | ((buf[1] ?? 0) << 8) | ((buf[2] ?? 0) << 16) | ((buf[3] ?? 0) << 24);
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Read a 16-bit unsigned integer (little-endian)
|
|
345
|
+
*/
|
|
346
|
+
readUInt16LE() {
|
|
347
|
+
const buf = new Uint8Array(2);
|
|
348
|
+
this.readExact(buf);
|
|
349
|
+
return (buf[0] ?? 0) | ((buf[1] ?? 0) << 8);
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Read a 32-bit unsigned integer (little-endian)
|
|
353
|
+
*/
|
|
354
|
+
readUInt32LE() {
|
|
355
|
+
const buf = new Uint8Array(4);
|
|
356
|
+
this.readExact(buf);
|
|
357
|
+
return (((buf[0] ?? 0) | ((buf[1] ?? 0) << 8) | ((buf[2] ?? 0) << 16) | ((buf[3] ?? 0) << 24)) >>> 0);
|
|
358
|
+
}
|
|
359
|
+
// ============================================================================
|
|
360
|
+
// Bit Read Methods
|
|
361
|
+
// ============================================================================
|
|
362
|
+
/**
|
|
363
|
+
* Read n bits from the stream
|
|
364
|
+
*/
|
|
365
|
+
readBits(n) {
|
|
366
|
+
while (this.bitsAvail < n) {
|
|
367
|
+
const byte = this.readByte();
|
|
368
|
+
if (byte === null) {
|
|
369
|
+
throw MicroPDFError.eof();
|
|
370
|
+
}
|
|
371
|
+
this.bits = (this.bits << 8) | byte;
|
|
372
|
+
this.bitsAvail += 8;
|
|
373
|
+
}
|
|
374
|
+
this.bitsAvail -= n;
|
|
375
|
+
const mask = (1 << n) - 1;
|
|
376
|
+
return (this.bits >> this.bitsAvail) & mask;
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Sync bits - discard any partial byte
|
|
380
|
+
*/
|
|
381
|
+
syncBits() {
|
|
382
|
+
this.bits = 0;
|
|
383
|
+
this.bitsAvail = 0;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Async stream for non-blocking I/O
|
|
388
|
+
*/
|
|
389
|
+
export class AsyncStream {
|
|
390
|
+
data;
|
|
391
|
+
position;
|
|
392
|
+
isEof;
|
|
393
|
+
constructor(data) {
|
|
394
|
+
this.data = data;
|
|
395
|
+
this.position = 0;
|
|
396
|
+
this.isEof = false;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Open a file asynchronously
|
|
400
|
+
*/
|
|
401
|
+
static async openFile(path) {
|
|
402
|
+
const data = await readFileAsync(path);
|
|
403
|
+
return new AsyncStream(new Uint8Array(data));
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Open from memory
|
|
407
|
+
*/
|
|
408
|
+
static openMemory(data) {
|
|
409
|
+
const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);
|
|
410
|
+
return new AsyncStream(bytes);
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Read bytes asynchronously
|
|
414
|
+
*/
|
|
415
|
+
async read(buf) {
|
|
416
|
+
const remaining = this.data.length - this.position;
|
|
417
|
+
const toRead = Math.min(buf.length, remaining);
|
|
418
|
+
buf.set(this.data.subarray(this.position, this.position + toRead));
|
|
419
|
+
this.position += toRead;
|
|
420
|
+
if (toRead === 0) {
|
|
421
|
+
this.isEof = true;
|
|
422
|
+
}
|
|
423
|
+
return toRead;
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Read all data asynchronously
|
|
427
|
+
*/
|
|
428
|
+
async readAll() {
|
|
429
|
+
const result = this.data.slice(this.position);
|
|
430
|
+
this.position = this.data.length;
|
|
431
|
+
this.isEof = true;
|
|
432
|
+
return Buffer.fromUint8Array(result);
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Seek asynchronously
|
|
436
|
+
*/
|
|
437
|
+
async seek(offset, origin = SeekOrigin.Start) {
|
|
438
|
+
let newPos;
|
|
439
|
+
switch (origin) {
|
|
440
|
+
case SeekOrigin.Start:
|
|
441
|
+
newPos = offset;
|
|
442
|
+
break;
|
|
443
|
+
case SeekOrigin.Current:
|
|
444
|
+
newPos = this.position + offset;
|
|
445
|
+
break;
|
|
446
|
+
case SeekOrigin.End:
|
|
447
|
+
newPos = this.data.length + offset;
|
|
448
|
+
break;
|
|
449
|
+
}
|
|
450
|
+
if (newPos < 0) {
|
|
451
|
+
throw MicroPDFError.argument('Seek before start');
|
|
452
|
+
}
|
|
453
|
+
this.position = Math.min(newPos, this.data.length);
|
|
454
|
+
this.isEof = false;
|
|
455
|
+
return this.position;
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Get current position
|
|
459
|
+
*/
|
|
460
|
+
tell() {
|
|
461
|
+
return this.position;
|
|
462
|
+
}
|
|
463
|
+
/**
|
|
464
|
+
* Check if EOF
|
|
465
|
+
*/
|
|
466
|
+
get eof() {
|
|
467
|
+
return this.isEof;
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Get length
|
|
471
|
+
*/
|
|
472
|
+
get length() {
|
|
473
|
+
return this.data.length;
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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"}
|