@gmod/cram 4.0.3 → 4.0.5

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 (132) hide show
  1. package/README.md +53 -51
  2. package/dist/cram-bundle.js +1 -1
  3. package/dist/cramFile/codecs/_base.d.ts +1 -1
  4. package/dist/cramFile/codecs/byteArrayLength.js +3 -2
  5. package/dist/cramFile/codecs/byteArrayLength.js.map +1 -1
  6. package/dist/cramFile/codecs/external.d.ts +1 -1
  7. package/dist/cramFile/codecs/external.js +1 -4
  8. package/dist/cramFile/codecs/external.js.map +1 -1
  9. package/dist/cramFile/container/index.d.ts +16 -34
  10. package/dist/cramFile/container/index.js +5 -20
  11. package/dist/cramFile/container/index.js.map +1 -1
  12. package/dist/cramFile/file.d.ts +8 -6
  13. package/dist/cramFile/file.js +80 -82
  14. package/dist/cramFile/file.js.map +1 -1
  15. package/dist/cramFile/record.js.map +1 -1
  16. package/dist/cramFile/sectionParsers.js +3 -2
  17. package/dist/cramFile/sectionParsers.js.map +1 -1
  18. package/dist/cramFile/slice/decodeRecord.d.ts +2 -2
  19. package/dist/cramFile/slice/decodeRecord.js +10 -7
  20. package/dist/cramFile/slice/decodeRecord.js.map +1 -1
  21. package/dist/cramFile/slice/index.js +14 -16
  22. package/dist/cramFile/slice/index.js.map +1 -1
  23. package/dist/cramFile/util.d.ts +5 -2
  24. package/dist/cramFile/util.js +75 -79
  25. package/dist/cramFile/util.js.map +1 -1
  26. package/dist/htscodecs/arith_gen.d.ts +5 -7
  27. package/dist/htscodecs/arith_gen.js +122 -105
  28. package/dist/htscodecs/arith_gen.js.map +1 -1
  29. package/dist/htscodecs/arith_sh.d.ts +1 -8
  30. package/dist/htscodecs/arith_sh.js +16 -10
  31. package/dist/htscodecs/arith_sh.js.map +1 -1
  32. package/dist/htscodecs/byte_model.d.ts +1 -6
  33. package/dist/htscodecs/byte_model.js +25 -17
  34. package/dist/htscodecs/byte_model.js.map +1 -1
  35. package/dist/htscodecs/fqzcomp.d.ts +1 -1
  36. package/dist/htscodecs/fqzcomp.js +98 -77
  37. package/dist/htscodecs/fqzcomp.js.map +1 -1
  38. package/dist/htscodecs/index.d.ts +5 -5
  39. package/dist/htscodecs/index.js +53 -16
  40. package/dist/htscodecs/index.js.map +1 -1
  41. package/dist/htscodecs/iostream.d.ts +9 -20
  42. package/dist/htscodecs/iostream.js +21 -116
  43. package/dist/htscodecs/iostream.js.map +1 -1
  44. package/dist/htscodecs/rans.d.ts +1 -1
  45. package/dist/htscodecs/rans.js +65 -54
  46. package/dist/htscodecs/rans.js.map +1 -1
  47. package/dist/htscodecs/rans4x16.d.ts +1 -1
  48. package/dist/htscodecs/rans4x16.js +151 -111
  49. package/dist/htscodecs/rans4x16.js.map +1 -1
  50. package/dist/htscodecs/tok3.d.ts +1 -2
  51. package/dist/htscodecs/tok3.js +82 -239
  52. package/dist/htscodecs/tok3.js.map +1 -1
  53. package/dist/util.d.ts +1 -0
  54. package/dist/util.js +20 -0
  55. package/dist/util.js.map +1 -0
  56. package/esm/cramFile/codecs/_base.d.ts +1 -1
  57. package/esm/cramFile/codecs/byteArrayLength.js +3 -2
  58. package/esm/cramFile/codecs/byteArrayLength.js.map +1 -1
  59. package/esm/cramFile/codecs/external.d.ts +1 -1
  60. package/esm/cramFile/codecs/external.js +2 -5
  61. package/esm/cramFile/codecs/external.js.map +1 -1
  62. package/esm/cramFile/container/index.d.ts +16 -34
  63. package/esm/cramFile/container/index.js +5 -20
  64. package/esm/cramFile/container/index.js.map +1 -1
  65. package/esm/cramFile/file.d.ts +8 -6
  66. package/esm/cramFile/file.js +40 -75
  67. package/esm/cramFile/file.js.map +1 -1
  68. package/esm/cramFile/record.js.map +1 -1
  69. package/esm/cramFile/sectionParsers.js +3 -2
  70. package/esm/cramFile/sectionParsers.js.map +1 -1
  71. package/esm/cramFile/slice/decodeRecord.d.ts +2 -2
  72. package/esm/cramFile/slice/decodeRecord.js +10 -7
  73. package/esm/cramFile/slice/decodeRecord.js.map +1 -1
  74. package/esm/cramFile/slice/index.js +14 -16
  75. package/esm/cramFile/slice/index.js.map +1 -1
  76. package/esm/cramFile/util.d.ts +5 -2
  77. package/esm/cramFile/util.js +74 -77
  78. package/esm/cramFile/util.js.map +1 -1
  79. package/esm/htscodecs/arith_gen.d.ts +5 -7
  80. package/esm/htscodecs/arith_gen.js +108 -97
  81. package/esm/htscodecs/arith_gen.js.map +1 -1
  82. package/esm/htscodecs/arith_sh.d.ts +1 -8
  83. package/esm/htscodecs/arith_sh.js +14 -11
  84. package/esm/htscodecs/arith_sh.js.map +1 -1
  85. package/esm/htscodecs/byte_model.d.ts +1 -6
  86. package/esm/htscodecs/byte_model.js +23 -18
  87. package/esm/htscodecs/byte_model.js.map +1 -1
  88. package/esm/htscodecs/fqzcomp.d.ts +1 -1
  89. package/esm/htscodecs/fqzcomp.js +91 -76
  90. package/esm/htscodecs/fqzcomp.js.map +1 -1
  91. package/esm/htscodecs/index.d.ts +5 -5
  92. package/esm/htscodecs/index.js +14 -20
  93. package/esm/htscodecs/index.js.map +1 -1
  94. package/esm/htscodecs/iostream.d.ts +9 -20
  95. package/esm/htscodecs/iostream.js +19 -117
  96. package/esm/htscodecs/iostream.js.map +1 -1
  97. package/esm/htscodecs/rans.d.ts +1 -1
  98. package/esm/htscodecs/rans.js +61 -56
  99. package/esm/htscodecs/rans.js.map +1 -1
  100. package/esm/htscodecs/rans4x16.d.ts +1 -1
  101. package/esm/htscodecs/rans4x16.js +143 -109
  102. package/esm/htscodecs/rans4x16.js.map +1 -1
  103. package/esm/htscodecs/tok3.d.ts +1 -2
  104. package/esm/htscodecs/tok3.js +41 -237
  105. package/esm/htscodecs/tok3.js.map +1 -1
  106. package/esm/util.d.ts +1 -0
  107. package/esm/util.js +17 -0
  108. package/esm/util.js.map +1 -0
  109. package/package.json +3 -6
  110. package/src/cramFile/codecs/_base.ts +1 -1
  111. package/src/cramFile/codecs/byteArrayLength.ts +4 -12
  112. package/src/cramFile/codecs/external.ts +3 -7
  113. package/src/cramFile/container/index.ts +5 -24
  114. package/src/cramFile/file.ts +44 -79
  115. package/src/cramFile/record.ts +1 -1
  116. package/src/cramFile/sectionParsers.ts +5 -2
  117. package/src/cramFile/slice/decodeRecord.ts +29 -28
  118. package/src/cramFile/slice/index.ts +25 -31
  119. package/src/cramFile/util.ts +107 -106
  120. package/src/htscodecs/{arith_gen.js → arith_gen.ts} +133 -95
  121. package/src/htscodecs/{arith_sh.js → arith_sh.ts} +17 -9
  122. package/src/htscodecs/{byte_model.js → byte_model.ts} +26 -16
  123. package/src/htscodecs/{fqzcomp.js → fqzcomp.ts} +108 -74
  124. package/src/htscodecs/{index.js → index.ts} +14 -20
  125. package/src/htscodecs/iostream.ts +159 -0
  126. package/src/htscodecs/{rans.js → rans.ts} +73 -56
  127. package/src/htscodecs/{rans4x16.js → rans4x16.ts} +180 -111
  128. package/src/htscodecs/tok3.ts +197 -0
  129. package/src/util.ts +16 -0
  130. package/errors.js +0 -27
  131. package/src/htscodecs/iostream.js +0 -257
  132. package/src/htscodecs/tok3.js +0 -413
@@ -1,7 +1,10 @@
1
- import Long from 'long'
2
1
  import md5 from 'md5'
3
2
 
4
- import { CramBufferOverrunError } from './codecs/getBits'
3
+ export const TWO_PWR_16_DBL = 1 << 16
4
+ export const TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL
5
+ export const TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL
6
+ export const TWO_PWR_24_DBL = 1 << 24
7
+ export const TWO_PWR_56_DBL = TWO_PWR_24_DBL * TWO_PWR_32_DBL
5
8
 
6
9
  export function itf8Size(v: number) {
7
10
  if (!(v & ~0x7f)) {
@@ -23,124 +26,144 @@ export function parseItf8(buffer: Uint8Array, initialOffset: number) {
23
26
  let offset = initialOffset
24
27
  const countFlags = buffer[offset]!
25
28
  let result: number
29
+
30
+ // Single byte value (0xxxxxxx)
26
31
  if (countFlags < 0x80) {
27
32
  result = countFlags
28
- offset = offset + 1
29
- } else if (countFlags < 0xc0) {
30
- result = ((countFlags << 8) | buffer[offset + 1]!) & 0x3fff
31
- offset = offset + 2
32
- } else if (countFlags < 0xe0) {
33
+ offset += 1
34
+ }
35
+ // Two byte value (10xxxxxx)
36
+ else if (countFlags < 0xc0) {
37
+ result = ((countFlags & 0x3f) << 8) | buffer[offset + 1]!
38
+ offset += 2
39
+ }
40
+ // Three byte value (110xxxxx)
41
+ else if (countFlags < 0xe0) {
33
42
  result =
34
- ((countFlags << 16) | (buffer[offset + 1]! << 8) | buffer[offset + 2]!) &
35
- 0x1fffff
36
- offset = offset + 3
37
- } else if (countFlags < 0xf0) {
43
+ ((countFlags & 0x1f) << 16) |
44
+ (buffer[offset + 1]! << 8) |
45
+ buffer[offset + 2]!
46
+ offset += 3
47
+ }
48
+ // Four byte value (1110xxxx)
49
+ else if (countFlags < 0xf0) {
38
50
  result =
39
- ((countFlags << 24) |
40
- (buffer[offset + 1]! << 16) |
41
- (buffer[offset + 2]! << 8) |
42
- buffer[offset + 3]!) &
43
- 0x0fffffff
44
- offset = offset + 4
45
- } else {
51
+ ((countFlags & 0x0f) << 24) |
52
+ (buffer[offset + 1]! << 16) |
53
+ (buffer[offset + 2]! << 8) |
54
+ buffer[offset + 3]!
55
+ offset += 4
56
+ }
57
+ // Five byte value (11110xxx)
58
+ else {
46
59
  result =
47
60
  ((countFlags & 0x0f) << 28) |
48
61
  (buffer[offset + 1]! << 20) |
49
62
  (buffer[offset + 2]! << 12) |
50
63
  (buffer[offset + 3]! << 4) |
51
64
  (buffer[offset + 4]! & 0x0f)
52
- // x=((0xff & 0x0f)<<28) | (0xff<<20) | (0xff<<12) | (0xff<<4) | (0x0f & 0x0f);
53
- // TODO *val_p = uv < 0x80000000UL ? uv : -((int32_t) (0xffffffffUL - uv)) - 1;
54
- offset = offset + 5
55
- }
56
- if (offset > buffer.length) {
57
- throw new CramBufferOverrunError(
58
- 'Attempted to read beyond end of buffer; this file seems truncated.',
59
- )
65
+ offset += 5
60
66
  }
67
+
61
68
  return [result, offset - initialOffset] as const
62
69
  }
63
70
 
64
71
  export function parseLtf8(buffer: Uint8Array, initialOffset: number) {
65
- const dataView = new DataView(buffer.buffer)
66
72
  let offset = initialOffset
67
73
  const countFlags = buffer[offset]!
68
- let n: number | Long
74
+ let value: number
75
+
76
+ // Single byte value < 0x80
69
77
  if (countFlags < 0x80) {
70
- n = countFlags
78
+ value = countFlags
71
79
  offset += 1
72
- } else if (countFlags < 0xc0) {
73
- n = ((buffer[offset]! << 8) | buffer[offset + 1]!) & 0x3fff
80
+ }
81
+ // Two byte value < 0xC0
82
+ else if (countFlags < 0xc0) {
83
+ value = ((countFlags << 8) | buffer[offset + 1]!) & 0x3fff
74
84
  offset += 2
75
- } else if (countFlags < 0xe0) {
76
- n =
77
- ((buffer[offset]! << 16) |
78
- (buffer[offset + 1]! << 8) |
79
- buffer[offset + 2]!) &
80
- 0x1fffff
81
- n = ((countFlags & 63) << 16) | dataView.getUint16(offset + 1, true)
85
+ }
86
+ // Three byte value < 0xE0
87
+ else if (countFlags < 0xe0) {
88
+ value =
89
+ ((countFlags & 0x3f) << 16) |
90
+ (buffer[offset + 1]! << 8) |
91
+ buffer[offset + 2]!
82
92
  offset += 3
83
- } else if (countFlags < 0xf0) {
84
- n =
85
- ((buffer[offset]! << 24) |
86
- (buffer[offset + 1]! << 16) |
87
- (buffer[offset + 2]! << 8) |
88
- buffer[offset + 3]!) &
89
- 0x0fffffff
93
+ }
94
+ // Four byte value < 0xF0
95
+ else if (countFlags < 0xf0) {
96
+ value =
97
+ ((countFlags & 0x1f) << 24) |
98
+ (buffer[offset + 1]! << 16) |
99
+ (buffer[offset + 2]! << 8) |
100
+ buffer[offset + 3]!
90
101
  offset += 4
91
- } else if (countFlags < 0xf8) {
92
- n =
93
- ((buffer[offset]! & 15) * 2 ** 32 + (buffer[offset + 1]! << 24)) |
94
- ((buffer[offset + 2]! << 16) |
102
+ }
103
+ // Five byte value < 0xF8
104
+ else if (countFlags < 0xf8) {
105
+ value =
106
+ (buffer[offset]! & 0x0f) * TWO_PWR_32_DBL +
107
+ ((buffer[offset + 1]! << 24) |
108
+ (buffer[offset + 2]! << 16) |
95
109
  (buffer[offset + 3]! << 8) |
96
110
  buffer[offset + 4]!)
97
- // TODO *val_p = uv < 0x80000000UL ? uv : -((int32_t) (0xffffffffUL - uv)) - 1;
98
111
  offset += 5
99
- } else if (countFlags < 0xfc) {
100
- n =
101
- ((((buffer[offset]! & 7) << 8) | buffer[offset + 1]!) * 2 ** 32 +
102
- (buffer[offset + 2]! << 24)) |
103
- ((buffer[offset + 3]! << 16) |
112
+ }
113
+ // Six byte value < 0xFC
114
+ else if (countFlags < 0xfc) {
115
+ value =
116
+ (((buffer[offset]! & 0x07) << 8) | buffer[offset + 1]!) * TWO_PWR_32_DBL +
117
+ ((buffer[offset + 2]! << 24) |
118
+ (buffer[offset + 3]! << 16) |
104
119
  (buffer[offset + 4]! << 8) |
105
120
  buffer[offset + 5]!)
106
121
  offset += 6
107
- } else if (countFlags < 0xfe) {
108
- n =
109
- ((((buffer[offset]! & 3) << 16) |
122
+ }
123
+ // Seven byte value < 0xFE
124
+ else if (countFlags < 0xfe) {
125
+ value =
126
+ (((buffer[offset]! & 0x03) << 16) |
110
127
  (buffer[offset + 1]! << 8) |
111
128
  buffer[offset + 2]!) *
112
- 2 ** 32 +
113
- (buffer[offset + 3]! << 24)) |
114
- ((buffer[offset + 4]! << 16) |
129
+ TWO_PWR_32_DBL +
130
+ ((buffer[offset + 3]! << 24) |
131
+ (buffer[offset + 4]! << 16) |
115
132
  (buffer[offset + 5]! << 8) |
116
133
  buffer[offset + 6]!)
117
134
  offset += 7
118
- } else if (countFlags < 0xff) {
119
- n = Long.fromBytesBE(
120
- buffer.slice(offset + 1, offset + 8) as unknown as number[],
121
- )
122
- if (
123
- n.greaterThan(Number.MAX_SAFE_INTEGER) ||
124
- n.lessThan(Number.MIN_SAFE_INTEGER)
125
- ) {
126
- throw new Error('integer overflow')
127
- }
128
- n = n.toNumber()
135
+ }
136
+ // Eight byte value < 0xFF
137
+ else if (countFlags < 0xff) {
138
+ value =
139
+ ((buffer[offset + 1]! << 24) |
140
+ (buffer[offset + 2]! << 16) |
141
+ (buffer[offset + 3]! << 8) |
142
+ buffer[offset + 4]!) *
143
+ TWO_PWR_32_DBL +
144
+ ((buffer[offset + 5]! << 24) |
145
+ (buffer[offset + 6]! << 16) |
146
+ (buffer[offset + 7]! << 8) |
147
+ buffer[offset + 8]!)
129
148
  offset += 8
130
- } else {
131
- n = Long.fromBytesBE(
132
- buffer.slice(offset + 1, offset + 9) as unknown as number[],
133
- )
134
- if (
135
- n.greaterThan(Number.MAX_SAFE_INTEGER) ||
136
- n.lessThan(Number.MIN_SAFE_INTEGER)
137
- ) {
138
- throw new Error('integer overflow')
139
- }
140
- n = n.toNumber()
149
+ }
150
+ // Nine byte value
151
+ else {
152
+ value =
153
+ buffer[offset + 1]! * TWO_PWR_56_DBL +
154
+ ((buffer[offset + 2]! << 24) |
155
+ (buffer[offset + 3]! << 16) |
156
+ (buffer[offset + 4]! << 8) |
157
+ buffer[offset + 5]!) *
158
+ TWO_PWR_32_DBL +
159
+ ((buffer[offset + 6]! << 24) |
160
+ (buffer[offset + 7]! << 16) |
161
+ (buffer[offset + 8]! << 8) |
162
+ buffer[offset + 9]!)
141
163
  offset += 9
142
164
  }
143
- return [n, offset - initialOffset] as const
165
+
166
+ return [value, offset - initialOffset] as const
144
167
  }
145
168
 
146
169
  export function parseItem<T>(
@@ -156,11 +179,6 @@ export function parseItem<T>(
156
179
  _size: offset - startBufferPosition,
157
180
  }
158
181
  }
159
-
160
- // this would be nice as a decorator, but i'm a little worried about babel
161
- // support for it going away or changing. memoizes a method in the stupidest
162
- // possible way, with no regard for the arguments. actually, this only works
163
- // on methods that take no arguments
164
182
  export function tinyMemoize(_class: any, methodName: any) {
165
183
  const method = _class.prototype[methodName]
166
184
  const memoAttrName = `_memo_${methodName}`
@@ -179,20 +197,3 @@ export function tinyMemoize(_class: any, methodName: any) {
179
197
  export function sequenceMD5(seq: string) {
180
198
  return md5(seq.toUpperCase().replaceAll(/[^\u0021-\u007e]/g, ''))
181
199
  }
182
-
183
- export function sum(array: Uint8Array[]) {
184
- let sum = 0
185
- for (const entry of array) {
186
- sum += entry.length
187
- }
188
- return sum
189
- }
190
- export function concatUint8Array(args: Uint8Array[]) {
191
- const mergedArray = new Uint8Array(sum(args))
192
- let offset = 0
193
- for (const entry of args) {
194
- mergedArray.set(entry, offset)
195
- offset += entry.length
196
- }
197
- return mergedArray
198
- }
@@ -1,3 +1,6 @@
1
+ /* eslint-disable no-var */
2
+ // @ts-nocheck
3
+
1
4
  /*
2
5
  * Copyright (c) 2019,2020 Genome Research Ltd.
3
6
  * Author(s): James Bonfield
@@ -31,27 +34,12 @@
31
34
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
35
  */
33
36
 
34
- const RangeCoder = require('./arith_sh')
35
- const IOStream = require('./iostream')
36
- const ByteModel = require('./byte_model')
37
- const bzip2 = require('bzip2')
37
+ import bzip2 from 'bzip2'
38
38
 
39
- function sum(array) {
40
- let sum = 0
41
- for (const entry of array) {
42
- sum += entry.length
43
- }
44
- return sum
45
- }
46
- function concatUint8Array(args) {
47
- const mergedArray = new Uint8Array(sum(args))
48
- let offset = 0
49
- for (const entry of args) {
50
- mergedArray.set(entry, offset)
51
- offset += entry.length
52
- }
53
- return mergedArray
54
- }
39
+ import RangeCoder from './arith_sh'
40
+ import ByteModel from './byte_model'
41
+ import IOStream from './iostream'
42
+ import { concatUint8Array } from '../util'
55
43
 
56
44
  const ARITH_ORDER = 1
57
45
  const ARITH_EXT = 4
@@ -61,21 +49,26 @@ const ARITH_CAT = 32
61
49
  const ARITH_RLE = 64
62
50
  const ARITH_PACK = 128
63
51
 
64
- module.exports = class RangeCoderGen {
65
- decode(src) {
52
+ export default class RangeCoderGen {
53
+ stream: IOStream
54
+ decode(src: Uint8Array) {
66
55
  this.stream = new IOStream(src)
67
56
  return this.decodeStream(this.stream)
68
57
  }
69
58
 
70
- decodeStream(stream, n_out = 0) {
71
- var flags = this.stream.ReadByte()
72
- if (!(flags & ARITH_NOSIZE)) n_out = this.stream.ReadUint7()
73
- var e_len = n_out
59
+ decodeStream(stream: IOStream, n_out = 0) {
60
+ const flags = this.stream.ReadByte()
61
+ if (!(flags & ARITH_NOSIZE)) {
62
+ n_out = this.stream.ReadUint7()
63
+ }
64
+ let e_len = n_out
74
65
 
75
- var order = flags & ARITH_ORDER
66
+ const order = flags & ARITH_ORDER
76
67
 
77
68
  // 4-way recursion
78
- if (flags & ARITH_STRIPE) return this.decodeStripe(this.stream, n_out)
69
+ if (flags & ARITH_STRIPE) {
70
+ return this.decodeStripe(this.stream, n_out)
71
+ }
79
72
 
80
73
  // Meta data
81
74
  if (flags & ARITH_PACK) {
@@ -84,7 +77,9 @@ module.exports = class RangeCoderGen {
84
77
  }
85
78
 
86
79
  // NOP, useful for tiny blocks
87
- if (flags & ARITH_CAT) var data = this.decodeCat(this.stream, e_len)
80
+ if (flags & ARITH_CAT) {
81
+ var data = this.decodeCat(this.stream, e_len)
82
+ }
88
83
  // Entropy decode
89
84
  else if (flags & ARITH_EXT) {
90
85
  var data = this.decodeExt(this.stream, e_len)
@@ -99,46 +94,55 @@ module.exports = class RangeCoderGen {
99
94
  }
100
95
 
101
96
  // Transforms
102
- if (flags & ARITH_PACK) data = this.decodePack(data, P, n_out)
97
+ if (flags & ARITH_PACK) {
98
+ data = this.decodePack(data, P, n_out)
99
+ }
103
100
 
104
101
  return data
105
102
  }
106
103
 
107
- //----------------------------------------------------------------------
104
+ // ----------------------------------------------------------------------
108
105
  // Order-0 codec
109
106
  decode0(stream, n_out) {
110
- var output = new Uint8Array(n_out)
107
+ const output = new Uint8Array(n_out)
111
108
 
112
- var max_sym = stream.ReadByte()
113
- if (max_sym == 0) max_sym = 256
109
+ let max_sym = stream.ReadByte()
110
+ if (max_sym == 0) {
111
+ max_sym = 256
112
+ }
114
113
 
115
- var byte_model = new ByteModel(max_sym)
114
+ const byte_model = new ByteModel(max_sym)
116
115
 
117
- var rc = new RangeCoder(stream)
116
+ const rc = new RangeCoder(stream)
118
117
  rc.RangeStartDecode(stream)
119
118
 
120
- for (var i = 0; i < n_out; i++)
119
+ for (let i = 0; i < n_out; i++) {
121
120
  output[i] = byte_model.ModelDecode(stream, rc)
121
+ }
122
122
 
123
123
  return output
124
124
  }
125
125
 
126
- //----------------------------------------------------------------------
126
+ // ----------------------------------------------------------------------
127
127
  // Order-1 codec
128
128
 
129
129
  decode1(stream, n_out) {
130
- var output = new Uint8Array(n_out)
130
+ const output = new Uint8Array(n_out)
131
131
 
132
- var max_sym = stream.ReadByte()
133
- if (max_sym == 0) max_sym = 256
132
+ let max_sym = stream.ReadByte()
133
+ if (max_sym == 0) {
134
+ max_sym = 256
135
+ }
134
136
 
135
- var byte_model = new Array(max_sym)
136
- for (var i = 0; i < max_sym; i++) byte_model[i] = new ByteModel(max_sym)
137
+ const byte_model = new Array(max_sym)
138
+ for (var i = 0; i < max_sym; i++) {
139
+ byte_model[i] = new ByteModel(max_sym)
140
+ }
137
141
 
138
- var rc = new RangeCoder(stream)
142
+ const rc = new RangeCoder(stream)
139
143
  rc.RangeStartDecode(stream)
140
144
 
141
- var last = 0
145
+ let last = 0
142
146
  for (var i = 0; i < n_out; i++) {
143
147
  output[i] = byte_model[last].ModelDecode(stream, rc)
144
148
  last = output[i]
@@ -147,7 +151,7 @@ module.exports = class RangeCoderGen {
147
151
  return output
148
152
  }
149
153
 
150
- //----------------------------------------------------------------------
154
+ // ----------------------------------------------------------------------
151
155
  // External codec
152
156
  decodeExt(stream, n_out) {
153
157
  const bits = bzip2.array(stream.buf.slice(stream.pos))
@@ -164,114 +168,138 @@ module.exports = class RangeCoderGen {
164
168
  return concatUint8Array(chunks)
165
169
  }
166
170
 
167
- //----------------------------------------------------------------------
171
+ // ----------------------------------------------------------------------
168
172
  // Order-0 RLE codec
169
173
  decodeRLE0(stream, n_out) {
170
- var output = new Uint8Array(n_out)
174
+ const output = new Uint8Array(n_out)
171
175
 
172
- var max_sym = stream.ReadByte()
173
- if (max_sym == 0) max_sym = 256
176
+ let max_sym = stream.ReadByte()
177
+ if (max_sym == 0) {
178
+ max_sym = 256
179
+ }
174
180
 
175
- var model_lit = new ByteModel(max_sym)
176
- var model_run = new Array(258)
177
- for (var i = 0; i <= 257; i++) model_run[i] = new ByteModel(4)
181
+ const model_lit = new ByteModel(max_sym)
182
+ const model_run = new Array(258)
183
+ for (var i = 0; i <= 257; i++) {
184
+ model_run[i] = new ByteModel(4)
185
+ }
178
186
 
179
- var rc = new RangeCoder(stream)
187
+ const rc = new RangeCoder(stream)
180
188
  rc.RangeStartDecode(stream)
181
189
 
182
190
  var i = 0
183
191
  while (i < n_out) {
184
192
  output[i] = model_lit.ModelDecode(stream, rc)
185
- var part = model_run[output[i]].ModelDecode(stream, rc)
186
- var run = part
187
- var rctx = 256
193
+ let part = model_run[output[i]].ModelDecode(stream, rc)
194
+ let run = part
195
+ let rctx = 256
188
196
  while (part == 3) {
189
197
  part = model_run[rctx].ModelDecode(stream, rc)
190
198
  rctx = 257
191
199
  run += part
192
200
  }
193
- for (var j = 1; j <= run; j++) output[i + j] = output[i]
201
+ for (let j = 1; j <= run; j++) {
202
+ output[i + j] = output[i]
203
+ }
194
204
  i += run + 1
195
205
  }
196
206
 
197
207
  return output
198
208
  }
199
209
 
200
- //----------------------------------------------------------------------
210
+ // ----------------------------------------------------------------------
201
211
  // Order-1 RLE codec
202
212
 
203
213
  decodeRLE1(stream, n_out) {
204
- var output = new Uint8Array(n_out)
214
+ const output = new Uint8Array(n_out)
205
215
 
206
- var max_sym = stream.ReadByte()
207
- if (max_sym == 0) max_sym = 256
216
+ let max_sym = stream.ReadByte()
217
+ if (max_sym == 0) {
218
+ max_sym = 256
219
+ }
208
220
 
209
- var model_lit = new Array(max_sym)
210
- for (var i = 0; i < max_sym; i++) model_lit[i] = new ByteModel(max_sym)
221
+ const model_lit = new Array(max_sym)
222
+ for (var i = 0; i < max_sym; i++) {
223
+ model_lit[i] = new ByteModel(max_sym)
224
+ }
211
225
 
212
- var model_run = new Array(258)
213
- for (var i = 0; i <= 257; i++) model_run[i] = new ByteModel(4)
226
+ const model_run = new Array(258)
227
+ for (var i = 0; i <= 257; i++) {
228
+ model_run[i] = new ByteModel(4)
229
+ }
214
230
 
215
- var rc = new RangeCoder(stream)
231
+ const rc = new RangeCoder(stream)
216
232
  rc.RangeStartDecode(stream)
217
233
 
218
- var last = 0
234
+ let last = 0
219
235
  var i = 0
220
236
  while (i < n_out) {
221
237
  output[i] = model_lit[last].ModelDecode(stream, rc)
222
238
  last = output[i]
223
- var part = model_run[output[i]].ModelDecode(stream, rc)
224
- var run = part
225
- var rctx = 256
239
+ let part = model_run[output[i]].ModelDecode(stream, rc)
240
+ let run = part
241
+ let rctx = 256
226
242
  while (part == 3) {
227
243
  part = model_run[rctx].ModelDecode(stream, rc)
228
244
  rctx = 257
229
245
  run += part
230
246
  }
231
- for (var j = 1; j <= run; j++) output[i + j] = output[i]
247
+ for (let j = 1; j <= run; j++) {
248
+ output[i + j] = output[i]
249
+ }
232
250
  i += run + 1
233
251
  }
234
252
 
235
253
  return output
236
254
  }
237
255
 
238
- //----------------------------------------------------------------------
256
+ // ----------------------------------------------------------------------
239
257
  // Pack method
240
258
  decodePackMeta(stream) {
241
259
  this.nsym = stream.ReadByte()
242
260
 
243
- var M = new Array(this.nsym)
244
- for (var i = 0; i < this.nsym; i++) M[i] = stream.ReadByte()
261
+ const M = new Array(this.nsym)
262
+ for (let i = 0; i < this.nsym; i++) {
263
+ M[i] = stream.ReadByte()
264
+ }
245
265
 
246
- var e_len = stream.ReadUint7() // Could be derived data from nsym and n_out
266
+ const e_len = stream.ReadUint7() // Could be derived data from nsym and n_out
247
267
 
248
268
  return [M, e_len]
249
269
  }
250
270
 
251
271
  decodePack(data, M, len) {
252
- var out = new Uint8Array(len)
272
+ const out = new Uint8Array(len)
253
273
 
254
274
  if (this.nsym <= 1) {
255
275
  // Constant value
256
- for (var i = 0; i < len; i++) out[i] = M[0]
276
+ for (var i = 0; i < len; i++) {
277
+ out[i] = M[0]
278
+ }
257
279
  } else if (this.nsym <= 2) {
258
280
  // 1 bit per value
259
281
  for (var i = 0, j = 0; i < len; i++) {
260
- if (i % 8 == 0) var v = data[j++]
282
+ if (i % 8 == 0) {
283
+ var v = data[j++]
284
+ }
261
285
  out[i] = M[v & 1]
262
286
  v >>= 1
263
287
  }
264
288
  } else if (this.nsym <= 4) {
265
289
  // 2 bits per value
266
290
  for (var i = 0, j = 0; i < len; i++) {
267
- if (i % 4 == 0) var v = data[j++]
291
+ if (i % 4 == 0) {
292
+ var v = data[j++]
293
+ }
268
294
  out[i] = M[v & 3]
269
295
  v >>= 2
270
296
  }
271
297
  } else if (this.nsym <= 16) {
272
298
  // 4 bits per value
273
299
  for (var i = 0, j = 0; i < len; i++) {
274
- if (i % 2 == 0) var v = data[j++]
300
+ if (i % 2 == 0) {
301
+ var v = data[j++]
302
+ }
275
303
  out[i] = M[v & 15]
276
304
  v >>= 4
277
305
  }
@@ -285,14 +313,20 @@ module.exports = class RangeCoderGen {
285
313
 
286
314
  // Compute M array and return meta-data stream
287
315
  packMeta(src) {
288
- var stream = new IOStream('', 0, 1024)
316
+ const stream = new IOStream('', 0, 1024)
289
317
 
290
318
  // Count symbols
291
- var M = new Array(256)
292
- for (var i = 0; i < src.length; i++) M[src[i]] = 1
319
+ const M = new Array(256)
320
+ for (var i = 0; i < src.length; i++) {
321
+ M[src[i]] = 1
322
+ }
293
323
 
294
324
  // Write Map
295
- for (var nsym = 0, i = 0; i < 256; i++) if (M[i]) M[i] = ++nsym // map to 1..N
325
+ for (var nsym = 0, i = 0; i < 256; i++) {
326
+ if (M[i]) {
327
+ M[i] = ++nsym
328
+ }
329
+ } // map to 1..N
296
330
  stream.WriteByte(nsym)
297
331
 
298
332
  // FIXME: add check for nsym > 16?
@@ -308,24 +342,26 @@ module.exports = class RangeCoderGen {
308
342
  }
309
343
 
310
344
  decodeStripe(stream, len) {
311
- var N = stream.ReadByte()
345
+ const N = stream.ReadByte()
312
346
 
313
347
  // Retrieve lengths
314
- var clen = new Array(N)
315
- var ulen = new Array(N)
316
- for (var j = 0; j < N; j++) clen[j] = stream.ReadUint7()
348
+ const clen = new Array(N)
349
+ const ulen = new Array(N)
350
+ for (var j = 0; j < N; j++) {
351
+ clen[j] = stream.ReadUint7()
352
+ }
317
353
 
318
354
  // Decode streams
319
- var T = new Array(N)
355
+ const T = new Array(N)
320
356
  for (var j = 0; j < N; j++) {
321
357
  ulen[j] = Math.floor(len / N) + (len % N > j)
322
358
  T[j] = this.decodeStream(stream, ulen[j])
323
359
  }
324
360
 
325
361
  // Transpose
326
- var out = new Uint8Array(len)
362
+ const out = new Uint8Array(len)
327
363
  for (var j = 0; j < N; j++) {
328
- for (var i = 0; i < ulen[j]; i++) {
364
+ for (let i = 0; i < ulen[j]; i++) {
329
365
  out[i * N + j] = T[j][i]
330
366
  }
331
367
  }
@@ -333,11 +369,13 @@ module.exports = class RangeCoderGen {
333
369
  return out
334
370
  }
335
371
 
336
- //----------------------------------------------------------------------
372
+ // ----------------------------------------------------------------------
337
373
  // Cat method
338
374
  decodeCat(stream, len) {
339
- var out = new Uint8Array(len)
340
- for (var i = 0; i < len; i++) out[i] = stream.ReadByte()
375
+ const out = new Uint8Array(len)
376
+ for (let i = 0; i < len; i++) {
377
+ out[i] = stream.ReadByte()
378
+ }
341
379
 
342
380
  return out
343
381
  }