bireader 1.0.14 → 1.0.15

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # bireader
2
2
 
3
- A simple binary reader and writer that keeps track of your position to quickly create file structures. Includes shared naming conventions and multiple programmable calling for easy data conversions to do low level parsing. Accepts `Uint8Array` or `Buffer`.
3
+ A feature rich binary reader and writer that keeps track of your position to quickly create file structures. Includes shared naming conventions, programmable inputs and advanced math for easy data conversions to do low level parsing. Accepts `Uint8Array` or `Buffer`.
4
4
 
5
5
  Supported data types are:
6
6
 
@@ -167,36 +167,12 @@ function parse_webp(data){
167
167
  return header
168
168
  }
169
169
 
170
- function rite_webp(size, magic, ver, heigth, width){
171
- const data = new Uint8Array(size)
172
- const bw = new biwriter(data)
173
- bw.writeString(magic, {length:4})
174
- const unsigned = true
175
- header.ver = bw.uint8(ver)
176
- if(header.ver == 10){
177
- bw.bit16() //reserved
178
- bw.uint32be(heigth)
179
- bw.quadbe(width)
180
- } else if(header.ver < 9) {
181
- bw.fskip(2) //reserved
182
- bw.uint16le(size)
183
- const bitsize = header.magic == "foo" ? 16 : 32
184
- const byteOffset = 0
185
- const bitOffset = 0
186
- bw.bit(heigth, bitsize, byteOffset, bitOffset0, unsigned)
187
- bw.int64le(width, byteOffset, unsigned)
188
- } else {
189
- throw new Error('Unknown version of ' + ver)
190
- }
191
- const header = bw.crop(0,size)
192
- bw.finished()
193
- return header
194
- }
170
+ TODO // write example
195
171
  ```
196
172
 
197
173
  ## Common Functions
198
174
 
199
- Common functions for setup and movement shared by both (unless indicated).
175
+ Common functions for setup, movement, manipulation and math shared by both.
200
176
 
201
177
  <table>
202
178
  <thead>
@@ -207,35 +183,99 @@ Common functions for setup and movement shared by both (unless indicated).
207
183
  </tr>
208
184
  </thead>
209
185
  <tbody>
186
+ <tr>
187
+ <th align="center" colspan="4"><i>Setup</i></th>
188
+ <tr>
210
189
  <tr>
211
190
  <td>Name</td>
212
- <td>new bireader(<b>data</b>, 1, 0, "big")</td>
213
- <td align="center" rowspan="2"><b>Buffer or Uint8Array</b>, byte offset, bit offset, endian</td>
191
+ <td>new bireader(<b>data</b>, byteOffset, bitOffset, endianess, strict)</td>
192
+ <td align="center" rowspan="2"><b>Buffer or Uint8Array</b>, byte offset (default 0), bit offset (default 0), endian big or little (default little), strict mode true to restrict extending initially supplied data (default true for reader, false for writer)</td>
214
193
  <td rowspan="2">new Constructor</td>
215
194
  </tr>
216
195
  <tr>
217
196
  <td>Name</td>
218
- <td>new biwriter(<b>data</b>, 0, 8, "little")</td>
197
+ <td>new biwriter(<b>data</b>, byteOffset, bitOffset, endianess, strict)</td>
219
198
  </tr>
220
199
  <tr>
221
200
  <td>Name</td>
222
- <td>endianness(<b>str</b>)</td>
201
+ <td>endianness(<b>bigOrLittle</b>)</td>
223
202
  <td align="center" rowspan="2"><b>big</b> or <b>little</b> (default little)</td>
224
203
  <td rowspan="2">Can be changed at any time.</td>
225
204
  </tr>
226
205
  <tr>
227
206
  <td>Presets</td>
228
- <td>bigEndian()<br>big()<br>be()<br>littleEndian()<br>little()<br>le()</td>
207
+ <td>bigEndian(), big(), be()<br>littleEndian(), little(), le()</td>
208
+ </tr>
209
+ <tr>
210
+ <td>Name</td>
211
+ <td>tell()</td>
212
+ <td align="center" rowspan="2">none</td>
213
+ <td rowspan="2">Gets current byte position in bytes</td>
214
+ </tr>
215
+ <tr>
216
+ <td>Aliases</td>
217
+ <td>getOffset()<br>saveOffset()</td>
218
+ </tr>
219
+ <tr>
220
+ <td>Name</td>
221
+ <td>get() </td>
222
+ <td align="center" rowspan="2">none</td>
223
+ <td rowspan="2">Returns supplied data.</td>
224
+ </tr>
225
+ <tr>
226
+ <td>Aliases</td>
227
+ <td>return()<br>data</td>
228
+ </tr>
229
+ <tr>
230
+ <td>Name</td>
231
+ <td>hexdump({length, startByte, supressUnicode})</td>
232
+ <td align="center">Length of dump, Byte to start the dump, Supress unicode character preview for cleaner columns</td>
233
+ <td >Console logs data. Defaults to current position and 192 bytes in length. Will trigger on error unless turned off (see below)</td>
229
234
  </tr>
235
+ <tr>
236
+ <td>Name</td>
237
+ <td>errorDumpOff()</td>
238
+ <td align="center" >None</td>
239
+ <td >Does not hexdump on error (default true)</td>
240
+ </tr>
241
+ <tr>
242
+ <td>Name</td>
243
+ <td>errorDumpOn()</td>
244
+ <td align="center" >None</td>
245
+ <td >While hexdump on error (default true)</td>
246
+ </tr>
247
+ <tr>
248
+ <td>Name</td>
249
+ <td>unrestrict()</td>
250
+ <td align="center">none</td>
251
+ <td>Sets strict mode to false, will extend array if data is outside of max size (default true for reader, false for writer)</td>
252
+ </tr>
253
+ <tr>
254
+ <td>Name</td>
255
+ <td>restrict()</td>
256
+ <td align="center">none</td>
257
+ <td>Sets strict mode to true, won't extend array if data is outside of max size (default true for reader, false for writer)</td>
258
+ </tr>
259
+ <tr>
260
+ <td>Name</td>
261
+ <td>end()</td>
262
+ <td align="center" rowspan="2">none</td>
263
+ <td rowspan="2">Removes supplied data.</td>
264
+ </tr>
265
+ <tr>
266
+ <td>Aliases</td>
267
+ <td>close()<br>done()<br>finished()</td>
268
+ </tr>
269
+ <th align="center" colspan="4"><i>Movement</i></th>
230
270
  <tr>
231
271
  <td>Name</td>
232
272
  <td>skip(<b>bytes</b>, bits)</td>
233
- <td align="center" rowspan="2"><b>bytes to skip from current position</b>, bits to skip</td>
273
+ <td align="center" rowspan="2"><b>bytes to skip from current byte position</b>, bits to skip</td>
234
274
  <td rowspan="2">Use negative to go back.<br><b>Note:</b> Remaining bits are dropped when returning to a byte read.</td>
235
275
  </tr>
236
276
  <tr>
237
- <td>Aliases</td>
238
- <td>fskip(<b>bytes</b>, bits)</td>
277
+ <td>Alias</td>
278
+ <td>jump(<b>bytes</b>, bits)</td>
239
279
  </tr>
240
280
  <tr>
241
281
  <td>Name</td>
@@ -245,98 +285,152 @@ Common functions for setup and movement shared by both (unless indicated).
245
285
  </tr>
246
286
  <tr>
247
287
  <td>Aliases</td>
248
- <td>seek(<b>byte</b>, bit)<br>fseek(<b>byte</b>, bit)<br>pointer(<b>byte</b>, bit)<br>warp(<b>byte</b>, bit)<br>fsetpos(<b>byte</b>, bit)</td>
288
+ <td>seek(<b>byte</b>, bit)<br>pointer(<b>byte</b>, bit)<br>warp(<b>byte</b>, bit)</td>
249
289
  </tr>
250
290
  <tr>
251
291
  <td>Name</td>
252
292
  <td>rewind()</td>
253
293
  <td align="center" rowspan="2">none</td>
254
- <td rowspan="2">Moves current read position to start of data.</td>
294
+ <td rowspan="2">Moves current byte position to start of data.</td>
255
295
  </tr>
256
296
  <tr>
257
- <td>Aliases</td>
258
- <td>gotostart()<br>tostart()</td>
297
+ <td>Alias</td>
298
+ <td>gotostart()</td>
259
299
  </tr>
300
+ <th align="center" colspan="4"><i>Manipulation</i></th>
260
301
  <tr>
261
302
  <td>Name</td>
262
- <td>ftell()</td>
263
- <td align="center" rowspan="2">none</td>
264
- <td rowspan="2">Gets current read position in bytes</td>
303
+ <td>delete(startOffset, endOffset, consume)</td>
304
+ <td align="center" rowspan="2">start byte of data (default 0), end byte of data (default current byte position), move byte position to after data read (default false)</td>
305
+ <td rowspan="2">Removes and returns data. <br><b>Note:</b> Errors on strict mode</td>
265
306
  </tr>
266
307
  <tr>
267
- <td>Aliases</td>
268
- <td>tell()<br>fgetpos()</td>
308
+ <td>Alias</td>
309
+ <td>clip(startOffset, endOffset, consume)</td>
269
310
  </tr>
270
311
  <tr>
271
312
  <td>Name</td>
272
- <td>unrestrict()</td>
273
- <td align="center">none</td>
274
- <td><b>biwriter only:</b> Will extend array if data is written outside of max size (default on)</td>
313
+ <td>crop(<b>length</b>, consume)</td>
314
+ <td align="center" rowspan="2"><b>Number of bytes to read and remove</b>, move byte position to after data read (default false)</td>
315
+ <td rowspan="2">Removes and returns data from current byte position for length of data</b>.<br><b>Note:</b> Errors on strict mode</td>
275
316
  </tr>
276
317
  <tr>
277
- <td>Name</td>
278
- <td>restrict()</td>
279
- <td align="center">none</td>
280
- <td><b>biwriter only:</b> Won't extend array if data is written outside of max size (default off)</td>
318
+ <td>Alias</td>
319
+ <td>drop(<b>length</b>, consume)</td>
281
320
  </tr>
282
321
  <tr>
283
322
  <td>Name</td>
284
- <td>crop(startOffset, endOffset)</td>
285
- <td align="center" rowspan="2">start byte of data, end byte of data</td>
286
- <td rowspan="2">Returns data truncated. defaults to 0 and current read / write position. <br><b>Note:</b> Does not affect supplied data or current read position.</td>
323
+ <td>lift(startByte, endByte, consume, fillValue)</td>
324
+ <td align="center" rowspan="2"><b>Start of byte read (default current byte position), end of byte read (default end of data)</b>, move current byte position to end of byte read (default false), value to fill bytes (will <b>NOT</b> fill on default)</td>
325
+ <td rowspan="2">Returns data from supplied byte positions. <br><b>Note:</b> Only moves current byte position if consume is true. Only fills data if value is supplied</td>
287
326
  </tr>
288
327
  <tr>
289
328
  <td>Aliases</td>
290
- <td>clip(startOffset, endOffset)<br>truncate(startOffset, endOffset)<br>slice(startOffset, endOffset)</td>
329
+ <td>fill(startByte, endByte, consume, fillValue)</td>
291
330
  </tr>
292
- <tr>
331
+ <tr>
293
332
  <td>Name</td>
294
333
  <td>extract(<b>length</b>, consume)</td>
295
- <td align="center" rowspan="2"><b>length of data from current position</b>, consume length and move offset (default false)</td>
296
- <td rowspan="2">Returns data from current read position to supplied length. <br><b>Note:</b> Does not affect supplied data. Only moves current read position if consume is true.</td>
334
+ <td align="center" rowspan="2"><b>Number of bytes to read</b>, move byte position to after data read (default false)</td>
335
+ <td rowspan="2">Returns data from current byte position for length of data</b>.</td>
297
336
  </tr>
298
337
  <tr>
299
338
  <td>Aliases</td>
300
- <td>wrap(<b>length</b>, consume)<br>lift(<b>length</b>, consume)</td>
339
+ <td>slice(<b>length</b>, consume)<br>wrap(<b>length</b>, consume)</td>
301
340
  </tr>
302
341
  <tr>
303
342
  <td>Name</td>
304
- <td>get() </td>
305
- <td align="center" rowspan="2">none</td>
306
- <td rowspan="2">Returns supplied data.</td>
343
+ <td>insert(<b>data</b>, consume, offset)</td>
344
+ <td align="center" rowspan="2"><b>New data to insert</b>, move byte position to after data read (default false), offset to insert (default current read position)</td>
345
+ <td rowspan="2"><b>Note:</b> Data type must match supplied data. Errors on strict mode</td>
307
346
  </tr>
308
347
  <tr>
309
348
  <td>Aliases</td>
310
- <td>return()<br>data</td>
349
+ <td>place(<b>data</b>, consume)</td>
311
350
  </tr>
312
351
  <tr>
313
352
  <td>Name</td>
314
- <td>end()</td>
315
- <td align="center" rowspan="2">none</td>
316
- <td rowspan="2">Removes supplied data.</td>
353
+ <td>unshift(<b>data</b>, consume)</td>
354
+ <td align="center" rowspan="2"><b>New data to insert</b>, move byte position to after data read (default false)</td>
355
+ <td rowspan="2">Adds new data to start of supplied data<br><b>Note:</b> Data type must match supplied data. Errors on strict mode</td>
317
356
  </tr>
318
357
  <tr>
319
358
  <td>Aliases</td>
320
- <td>close()<br>done()<br>finished()</td>
359
+ <td>prepend(<b>data</b>, consume)</td>
321
360
  </tr>
322
361
  <tr>
323
- <td>Name</td>
324
- <td>hexdump({length, startByte, supressUnicode})</td>
325
- <td align="center">Length of dump, Byte to start the dump, Supress unicode character preview for cleaner columns</td>
326
- <td >Console logs data. Defaults to current position and 192 bytes in length. Will trigger on error unless turned off (see below)</td>
362
+ <td>Name</td>
363
+ <td>push(<b>length</b>, consume)</td>
364
+ <td align="center" rowspan="2"><b>Number</b>, move byte position to after data read (default false)</td>
365
+ <td rowspan="2">Adds new data to end of supplied data<br><b>Note:</b> Data type must match supplied data. Errors on strict mode</td>
366
+ </tr>
367
+ <tr>
368
+ <td>Aliases</td>
369
+ <td>append(<b>data</b>, consume)</td>
327
370
  </tr>
371
+ <th align="center" colspan="4"><i>Math</i></th>
328
372
  <tr>
329
- <td>Name</td>
330
- <td>errorDumpOff()</td>
331
- <td align="center" >None</td>
332
- <td >Turns hexdump off on error (default true)</td>
373
+ <td>Name</td>
374
+ <td>XOR(<b>xorKey</b>, startOffset, endOffset, consume)
375
+ <td align="center"><b>Byte value, string, Uint8Array or Buffer</b>, byte position to start (default current position), byte position to end (default end of data), move byte position to after operation (default false)</td>
376
+ <td >XOR data</td>
333
377
  </tr>
334
378
  <tr>
335
- <td>Name</td>
336
- <td>errorDumpOn()</td>
337
- <td align="center" rowspan="2">None</td>
338
- <td rowspan="2">Turns hexdump on on error (default true)</td>
379
+ <td>Name</td>
380
+ <td>XORThis(<b>xorKey</b>, length, consume)
381
+ <td align="center"><b>Byte value, string, Uint8Array or Buffer</b>, length of bytes starting at current byte (repeats when longer, default 1 byte for byte value, string length or end of data for string, array length or end of data for Uint8Array or Buffer), byte position to end (default end of data), move byte position to after operation (default false)</td>
382
+ <td>XOR data</td>
383
+ </tr>
384
+ <tr>
385
+ <td>Name</td>
386
+ <td>OR(<b>orKey</b>, startOffset, endOffset, consume)
387
+ <td align="center"><b>Byte value, string, Uint8Array or Buffer</b>, byte position to start (default current position), byte position to end (default end of data), move byte position to after operation (default false)</td>
388
+ <td >OR data</td>
389
+ </tr>
390
+ <tr>
391
+ <td>Name</td>
392
+ <td>ORThis(<b>orKey</b>, length, consume)
393
+ <td align="center"><b>Byte value, string, Uint8Array or Buffer</b>, length of bytes starting at current byte (repeats when longer, default 1 byte for byte value, string length or end of data for string, array length or end of data for Uint8Array or Buffer), byte position to end (default end of data), move byte position to after operation (default false)</td>
394
+ <td>OR data</td>
395
+ </tr>
396
+ <tr>
397
+ <td>Name</td>
398
+ <td>AND(<b>andKey</b>, startOffset, endOffset, consume)
399
+ <td align="center"><b>Byte value, string, Uint8Array or Buffer</b>, byte position to start (default current position), byte position to end (default end of data), move byte position to after operation (default false)</td>
400
+ <td >AND data</td>
401
+ </tr>
402
+ <tr>
403
+ <td>Name</td>
404
+ <td>ANDThis(<b>andKey</b>, length, consume)
405
+ <td align="center"><b>Byte value, string, Uint8Array or Buffer</b>, length of bytes starting at current byte (repeats when longer, default 1 byte for byte value, string length or end of data for string, array length or end of data for Uint8Array or Buffer), byte position to end (default end of data), move byte position to after operation (default false)</td>
406
+ <td>AND data</td>
407
+ </tr>
408
+ <tr>
409
+ <td>Name</td>
410
+ <td>LSHIFT(<b>value</b>, startOffset, endOffset, consume)
411
+ <td align="center"><b>Value</b>, byte position to start (default current position), byte position to end (default end of data), move byte position to after operation (default false)</td>
412
+ <td >Left shift data (per byte)</td>
413
+ </tr>
414
+ <tr>
415
+ <td>Name</td>
416
+ <td>LSHIFTThis(<b>value</b>, length, consume)
417
+ <td align="center"><b>Value</b>, length of bytes starting at current byte (default 1), byte position to end (default end of data), move byte position to after operation (default false)</td>
418
+ <td>Left shift data (per byte)</td>
419
+ </tr>
420
+ <tr>
421
+ <td>Name</td>
422
+ <td>RSHIFT(<b>value</b>, startOffset, endOffset, consume)
423
+ <td align="center"><b>Value</b>, byte position to start (default current position), byte position to end (default end of data), move byte position to after operation (default false)</td>
424
+ <td >Right shift data (per byte)</td>
425
+ </tr>
426
+ <tr>
427
+ <td>Name</td>
428
+ <td>RSHIFTThis(<b>value</b>, length, consume)
429
+ <td align="center"><b>Value</b>, length of bytes starting at current byte (default 1), byte position to end (default end of data), move byte position to after operation (default false)</td>
430
+ <td>Right shift data (per byte)</td>
339
431
  </tr>
432
+
433
+
340
434
  </tbody>
341
435
  </table>
342
436
 
@@ -344,7 +438,7 @@ Common functions for setup and movement shared by both (unless indicated).
344
438
 
345
439
  Parse value as a bit field. There are 32 functions from bit1 to bit32 and can be signed or unsigned (with a ``u`` at the start) and in little or big endian order (``be`` or ``le`` at the end).
346
440
 
347
- **Note:** Remaining bits are dropped when returning to a byte read. Example, after using ``bit4()`` then ``ubyte()``, the read locations drops the remaining 4 bits after ``bit4()`` when reading ``ubyte()``.
441
+ **Note:** Remaining bits are dropped when returning to a byte read. Example, after using ``bit4()`` then ``ubyte()``, the read locations drops the remaining 4 bits after ``bit4()`` when reading ``ubyte()``. Also any bit reading under 8 will always be unsigned.
348
442
 
349
443
  <table>
350
444
  <thead>