@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.
Files changed (170) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +985 -0
  3. package/binding.gyp +73 -0
  4. package/dist/annot.d.ts +458 -0
  5. package/dist/annot.d.ts.map +1 -0
  6. package/dist/annot.js +697 -0
  7. package/dist/annot.js.map +1 -0
  8. package/dist/archive.d.ts +128 -0
  9. package/dist/archive.d.ts.map +1 -0
  10. package/dist/archive.js +268 -0
  11. package/dist/archive.js.map +1 -0
  12. package/dist/buffer.d.ts +572 -0
  13. package/dist/buffer.d.ts.map +1 -0
  14. package/dist/buffer.js +971 -0
  15. package/dist/buffer.js.map +1 -0
  16. package/dist/colorspace.d.ts +287 -0
  17. package/dist/colorspace.d.ts.map +1 -0
  18. package/dist/colorspace.js +542 -0
  19. package/dist/colorspace.js.map +1 -0
  20. package/dist/context.d.ts +184 -0
  21. package/dist/context.d.ts.map +1 -0
  22. package/dist/context.js +320 -0
  23. package/dist/context.js.map +1 -0
  24. package/dist/cookie.d.ts +164 -0
  25. package/dist/cookie.d.ts.map +1 -0
  26. package/dist/cookie.js +306 -0
  27. package/dist/cookie.js.map +1 -0
  28. package/dist/device.d.ts +169 -0
  29. package/dist/device.d.ts.map +1 -0
  30. package/dist/device.js +350 -0
  31. package/dist/device.js.map +1 -0
  32. package/dist/display-list.d.ts +202 -0
  33. package/dist/display-list.d.ts.map +1 -0
  34. package/dist/display-list.js +410 -0
  35. package/dist/display-list.js.map +1 -0
  36. package/dist/document.d.ts +637 -0
  37. package/dist/document.d.ts.map +1 -0
  38. package/dist/document.js +902 -0
  39. package/dist/document.js.map +1 -0
  40. package/dist/easy.d.ts +423 -0
  41. package/dist/easy.d.ts.map +1 -0
  42. package/dist/easy.js +644 -0
  43. package/dist/easy.js.map +1 -0
  44. package/dist/enhanced.d.ts +226 -0
  45. package/dist/enhanced.d.ts.map +1 -0
  46. package/dist/enhanced.js +368 -0
  47. package/dist/enhanced.js.map +1 -0
  48. package/dist/filter.d.ts +51 -0
  49. package/dist/filter.d.ts.map +1 -0
  50. package/dist/filter.js +381 -0
  51. package/dist/filter.js.map +1 -0
  52. package/dist/font.d.ts +222 -0
  53. package/dist/font.d.ts.map +1 -0
  54. package/dist/font.js +381 -0
  55. package/dist/font.js.map +1 -0
  56. package/dist/form.d.ts +214 -0
  57. package/dist/form.d.ts.map +1 -0
  58. package/dist/form.js +497 -0
  59. package/dist/form.js.map +1 -0
  60. package/dist/geometry.d.ts +469 -0
  61. package/dist/geometry.d.ts.map +1 -0
  62. package/dist/geometry.js +780 -0
  63. package/dist/geometry.js.map +1 -0
  64. package/dist/image.d.ts +172 -0
  65. package/dist/image.d.ts.map +1 -0
  66. package/dist/image.js +348 -0
  67. package/dist/image.js.map +1 -0
  68. package/dist/index.d.ts +171 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +339 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/link.d.ts +168 -0
  73. package/dist/link.d.ts.map +1 -0
  74. package/dist/link.js +343 -0
  75. package/dist/link.js.map +1 -0
  76. package/dist/micropdf.d.ts +40 -0
  77. package/dist/micropdf.d.ts.map +1 -0
  78. package/dist/micropdf.js +45 -0
  79. package/dist/micropdf.js.map +1 -0
  80. package/dist/nanopdf.d.ts +40 -0
  81. package/dist/nanopdf.d.ts.map +1 -0
  82. package/dist/nanopdf.js +45 -0
  83. package/dist/nanopdf.js.map +1 -0
  84. package/dist/native.d.ts +242 -0
  85. package/dist/native.d.ts.map +1 -0
  86. package/dist/native.js +509 -0
  87. package/dist/native.js.map +1 -0
  88. package/dist/output.d.ts +166 -0
  89. package/dist/output.d.ts.map +1 -0
  90. package/dist/output.js +365 -0
  91. package/dist/output.js.map +1 -0
  92. package/dist/path.d.ts +420 -0
  93. package/dist/path.d.ts.map +1 -0
  94. package/dist/path.js +687 -0
  95. package/dist/path.js.map +1 -0
  96. package/dist/pdf/object.d.ts +489 -0
  97. package/dist/pdf/object.d.ts.map +1 -0
  98. package/dist/pdf/object.js +1045 -0
  99. package/dist/pdf/object.js.map +1 -0
  100. package/dist/pixmap.d.ts +315 -0
  101. package/dist/pixmap.d.ts.map +1 -0
  102. package/dist/pixmap.js +590 -0
  103. package/dist/pixmap.js.map +1 -0
  104. package/dist/profiler.d.ts +159 -0
  105. package/dist/profiler.d.ts.map +1 -0
  106. package/dist/profiler.js +380 -0
  107. package/dist/profiler.js.map +1 -0
  108. package/dist/render-options.d.ts +227 -0
  109. package/dist/render-options.d.ts.map +1 -0
  110. package/dist/render-options.js +130 -0
  111. package/dist/render-options.js.map +1 -0
  112. package/dist/resource-tracking.d.ts +332 -0
  113. package/dist/resource-tracking.d.ts.map +1 -0
  114. package/dist/resource-tracking.js +653 -0
  115. package/dist/resource-tracking.js.map +1 -0
  116. package/dist/simple.d.ts +276 -0
  117. package/dist/simple.d.ts.map +1 -0
  118. package/dist/simple.js +343 -0
  119. package/dist/simple.js.map +1 -0
  120. package/dist/stext.d.ts +290 -0
  121. package/dist/stext.d.ts.map +1 -0
  122. package/dist/stext.js +312 -0
  123. package/dist/stext.js.map +1 -0
  124. package/dist/stream.d.ts +174 -0
  125. package/dist/stream.d.ts.map +1 -0
  126. package/dist/stream.js +476 -0
  127. package/dist/stream.js.map +1 -0
  128. package/dist/text.d.ts +337 -0
  129. package/dist/text.d.ts.map +1 -0
  130. package/dist/text.js +454 -0
  131. package/dist/text.js.map +1 -0
  132. package/dist/typed-arrays.d.ts +127 -0
  133. package/dist/typed-arrays.d.ts.map +1 -0
  134. package/dist/typed-arrays.js +410 -0
  135. package/dist/typed-arrays.js.map +1 -0
  136. package/dist/types.d.ts +358 -0
  137. package/dist/types.d.ts.map +1 -0
  138. package/dist/types.js +216 -0
  139. package/dist/types.js.map +1 -0
  140. package/native/annot.cc +557 -0
  141. package/native/buffer.cc +204 -0
  142. package/native/colorspace.cc +166 -0
  143. package/native/context.cc +84 -0
  144. package/native/cookie.cc +179 -0
  145. package/native/device.cc +179 -0
  146. package/native/display_list.cc +179 -0
  147. package/native/document.cc +268 -0
  148. package/native/enhanced.cc +70 -0
  149. package/native/font.cc +282 -0
  150. package/native/form.cc +523 -0
  151. package/native/geometry.cc +255 -0
  152. package/native/image.cc +216 -0
  153. package/native/include/micropdf/enhanced.h +38 -0
  154. package/native/include/micropdf/types.h +36 -0
  155. package/native/include/micropdf.h +106 -0
  156. package/native/include/mupdf-ffi.h +39 -0
  157. package/native/include/mupdf.h +11 -0
  158. package/native/include/mupdf_minimal.h +381 -0
  159. package/native/lib/linux-x64/libmicropdf.a +0 -0
  160. package/native/link.cc +234 -0
  161. package/native/micropdf.cc +71 -0
  162. package/native/output.cc +229 -0
  163. package/native/page.cc +572 -0
  164. package/native/path.cc +259 -0
  165. package/native/pixmap.cc +240 -0
  166. package/native/stext.cc +610 -0
  167. package/native/stream.cc +239 -0
  168. package/package.json +120 -0
  169. package/scripts/build-from-rust.js +97 -0
  170. package/scripts/install.js +184 -0
@@ -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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"}