@gmod/cram 3.0.7 → 4.0.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 (268) hide show
  1. package/dist/craiIndex.js +70 -87
  2. package/dist/craiIndex.js.map +1 -1
  3. package/dist/cram-bundle.js +1 -1
  4. package/dist/cramFile/codecs/_base.d.ts +1 -1
  5. package/dist/cramFile/codecs/beta.d.ts +2 -2
  6. package/dist/cramFile/codecs/beta.js +1 -1
  7. package/dist/cramFile/codecs/beta.js.map +1 -1
  8. package/dist/cramFile/codecs/byteArrayLength.d.ts +2 -2
  9. package/dist/cramFile/codecs/byteArrayStop.d.ts +4 -4
  10. package/dist/cramFile/codecs/byteArrayStop.js +1 -1
  11. package/dist/cramFile/codecs/byteArrayStop.js.map +1 -1
  12. package/dist/cramFile/codecs/external.d.ts +1 -1
  13. package/dist/cramFile/codecs/external.js +1 -1
  14. package/dist/cramFile/codecs/external.js.map +1 -1
  15. package/dist/cramFile/codecs/gamma.d.ts +1 -1
  16. package/dist/cramFile/codecs/gamma.js +1 -1
  17. package/dist/cramFile/codecs/gamma.js.map +1 -1
  18. package/dist/cramFile/codecs/getBits.d.ts +1 -1
  19. package/dist/cramFile/codecs/getBits.js.map +1 -1
  20. package/dist/cramFile/codecs/huffman.d.ts +1 -1
  21. package/dist/cramFile/codecs/huffman.js +1 -1
  22. package/dist/cramFile/codecs/huffman.js.map +1 -1
  23. package/dist/cramFile/codecs/index.d.ts +1 -1
  24. package/dist/cramFile/codecs/index.js +5 -5
  25. package/dist/cramFile/codecs/index.js.map +1 -1
  26. package/dist/cramFile/codecs/subexp.d.ts +2 -2
  27. package/dist/cramFile/codecs/subexp.js +1 -1
  28. package/dist/cramFile/codecs/subexp.js.map +1 -1
  29. package/dist/cramFile/container/compressionScheme.d.ts +2 -2
  30. package/dist/cramFile/container/compressionScheme.js +1 -1
  31. package/dist/cramFile/container/compressionScheme.js.map +1 -1
  32. package/dist/cramFile/container/index.d.ts +1 -2
  33. package/dist/cramFile/container/index.js +62 -79
  34. package/dist/cramFile/container/index.js.map +1 -1
  35. package/dist/cramFile/file.d.ts +9 -13
  36. package/dist/cramFile/file.js +218 -247
  37. package/dist/cramFile/file.js.map +1 -1
  38. package/dist/cramFile/record.js +2 -2
  39. package/dist/cramFile/record.js.map +1 -1
  40. package/dist/cramFile/sectionParsers.d.ts +16 -16
  41. package/dist/cramFile/sectionParsers.js +12 -9
  42. package/dist/cramFile/sectionParsers.js.map +1 -1
  43. package/dist/cramFile/slice/decodeRecord.d.ts +3 -3
  44. package/dist/cramFile/slice/decodeRecord.js +11 -11
  45. package/dist/cramFile/slice/decodeRecord.js.map +1 -1
  46. package/dist/cramFile/slice/index.d.ts +2 -2
  47. package/dist/cramFile/slice/index.js +241 -262
  48. package/dist/cramFile/slice/index.js.map +1 -1
  49. package/dist/cramFile/util.d.ts +4 -2
  50. package/dist/cramFile/util.js +29 -6
  51. package/dist/cramFile/util.js.map +1 -1
  52. package/dist/htscodecs/arith_gen.d.ts +9 -17
  53. package/dist/htscodecs/arith_gen.js +32 -272
  54. package/dist/htscodecs/arith_gen.js.map +1 -1
  55. package/dist/htscodecs/fqzcomp.d.ts +1 -2
  56. package/dist/htscodecs/fqzcomp.js +2 -421
  57. package/dist/htscodecs/fqzcomp.js.map +1 -1
  58. package/dist/htscodecs/index.d.ts +5 -5
  59. package/dist/htscodecs/index.js +10 -10
  60. package/dist/htscodecs/index.js.map +1 -1
  61. package/dist/htscodecs/iostream.d.ts +2 -1
  62. package/dist/htscodecs/iostream.js +3 -2
  63. package/dist/htscodecs/iostream.js.map +1 -1
  64. package/dist/htscodecs/rans.d.ts +1 -2
  65. package/dist/htscodecs/rans.js +3 -270
  66. package/dist/htscodecs/rans.js.map +1 -1
  67. package/dist/htscodecs/rans4x16.d.ts +0 -1
  68. package/dist/htscodecs/rans4x16.js +6 -497
  69. package/dist/htscodecs/rans4x16.js.map +1 -1
  70. package/dist/htscodecs/tok3.js +17 -1
  71. package/dist/htscodecs/tok3.js.map +1 -1
  72. package/dist/index.d.ts +1 -1
  73. package/dist/index.js +2 -2
  74. package/dist/index.js.map +1 -1
  75. package/dist/indexedCramFile.d.ts +4 -4
  76. package/dist/indexedCramFile.js +97 -108
  77. package/dist/indexedCramFile.js.map +1 -1
  78. package/dist/io/index.d.ts +2 -2
  79. package/dist/io/index.js +6 -6
  80. package/dist/io/index.js.map +1 -1
  81. package/dist/rans/constants.d.ts +1 -1
  82. package/dist/rans/constants.js +1 -1
  83. package/dist/rans/constants.js.map +1 -1
  84. package/dist/rans/d04.js.map +1 -1
  85. package/dist/rans/decoding.js.map +1 -1
  86. package/dist/rans/frequencies.js.map +1 -1
  87. package/dist/rans/index.js +5 -5
  88. package/dist/rans/index.js.map +1 -1
  89. package/dist/unzip.d.ts +1 -1
  90. package/dist/unzip.js +5 -3
  91. package/dist/unzip.js.map +1 -1
  92. package/esm/craiIndex.js +10 -12
  93. package/esm/craiIndex.js.map +1 -1
  94. package/esm/cramFile/codecs/_base.d.ts +1 -1
  95. package/esm/cramFile/codecs/beta.d.ts +2 -2
  96. package/esm/cramFile/codecs/beta.js +1 -1
  97. package/esm/cramFile/codecs/beta.js.map +1 -1
  98. package/esm/cramFile/codecs/byteArrayLength.d.ts +2 -2
  99. package/esm/cramFile/codecs/byteArrayStop.d.ts +4 -4
  100. package/esm/cramFile/codecs/byteArrayStop.js +1 -1
  101. package/esm/cramFile/codecs/byteArrayStop.js.map +1 -1
  102. package/esm/cramFile/codecs/external.d.ts +1 -1
  103. package/esm/cramFile/codecs/external.js +1 -1
  104. package/esm/cramFile/codecs/external.js.map +1 -1
  105. package/esm/cramFile/codecs/gamma.d.ts +1 -1
  106. package/esm/cramFile/codecs/gamma.js +1 -1
  107. package/esm/cramFile/codecs/gamma.js.map +1 -1
  108. package/esm/cramFile/codecs/getBits.d.ts +1 -1
  109. package/esm/cramFile/codecs/getBits.js.map +1 -1
  110. package/esm/cramFile/codecs/huffman.d.ts +1 -1
  111. package/esm/cramFile/codecs/huffman.js +1 -1
  112. package/esm/cramFile/codecs/huffman.js.map +1 -1
  113. package/esm/cramFile/codecs/index.d.ts +1 -1
  114. package/esm/cramFile/codecs/index.js +5 -5
  115. package/esm/cramFile/codecs/index.js.map +1 -1
  116. package/esm/cramFile/codecs/subexp.d.ts +2 -2
  117. package/esm/cramFile/codecs/subexp.js +1 -1
  118. package/esm/cramFile/codecs/subexp.js.map +1 -1
  119. package/esm/cramFile/container/compressionScheme.d.ts +2 -2
  120. package/esm/cramFile/container/compressionScheme.js +1 -1
  121. package/esm/cramFile/container/compressionScheme.js.map +1 -1
  122. package/esm/cramFile/container/index.d.ts +1 -2
  123. package/esm/cramFile/container/index.js +4 -7
  124. package/esm/cramFile/container/index.js.map +1 -1
  125. package/esm/cramFile/file.d.ts +9 -13
  126. package/esm/cramFile/file.js +47 -52
  127. package/esm/cramFile/file.js.map +1 -1
  128. package/esm/cramFile/record.js +2 -2
  129. package/esm/cramFile/record.js.map +1 -1
  130. package/esm/cramFile/sectionParsers.d.ts +16 -16
  131. package/esm/cramFile/sectionParsers.js +7 -7
  132. package/esm/cramFile/sectionParsers.js.map +1 -1
  133. package/esm/cramFile/slice/decodeRecord.d.ts +3 -3
  134. package/esm/cramFile/slice/decodeRecord.js +11 -11
  135. package/esm/cramFile/slice/decodeRecord.js.map +1 -1
  136. package/esm/cramFile/slice/index.d.ts +2 -2
  137. package/esm/cramFile/slice/index.js +7 -6
  138. package/esm/cramFile/slice/index.js.map +1 -1
  139. package/esm/cramFile/util.d.ts +4 -2
  140. package/esm/cramFile/util.js +19 -2
  141. package/esm/cramFile/util.js.map +1 -1
  142. package/esm/htscodecs/arith_gen.d.ts +9 -17
  143. package/esm/htscodecs/arith_gen.js +32 -272
  144. package/esm/htscodecs/arith_gen.js.map +1 -1
  145. package/esm/htscodecs/fqzcomp.d.ts +1 -2
  146. package/esm/htscodecs/fqzcomp.js +2 -421
  147. package/esm/htscodecs/fqzcomp.js.map +1 -1
  148. package/esm/htscodecs/index.d.ts +5 -5
  149. package/esm/htscodecs/index.js +10 -10
  150. package/esm/htscodecs/index.js.map +1 -1
  151. package/esm/htscodecs/iostream.d.ts +2 -1
  152. package/esm/htscodecs/iostream.js +3 -2
  153. package/esm/htscodecs/iostream.js.map +1 -1
  154. package/esm/htscodecs/rans.d.ts +1 -2
  155. package/esm/htscodecs/rans.js +3 -270
  156. package/esm/htscodecs/rans.js.map +1 -1
  157. package/esm/htscodecs/rans4x16.d.ts +0 -1
  158. package/esm/htscodecs/rans4x16.js +6 -497
  159. package/esm/htscodecs/rans4x16.js.map +1 -1
  160. package/esm/htscodecs/tok3.js +17 -1
  161. package/esm/htscodecs/tok3.js.map +1 -1
  162. package/esm/index.d.ts +1 -1
  163. package/esm/index.js +1 -1
  164. package/esm/index.js.map +1 -1
  165. package/esm/indexedCramFile.d.ts +4 -4
  166. package/esm/indexedCramFile.js +10 -10
  167. package/esm/indexedCramFile.js.map +1 -1
  168. package/esm/io/index.d.ts +2 -2
  169. package/esm/io/index.js +1 -1
  170. package/esm/io/index.js.map +1 -1
  171. package/esm/rans/constants.d.ts +1 -1
  172. package/esm/rans/constants.js +1 -1
  173. package/esm/rans/constants.js.map +1 -1
  174. package/esm/rans/d04.js.map +1 -1
  175. package/esm/rans/decoding.js.map +1 -1
  176. package/esm/rans/frequencies.js.map +1 -1
  177. package/esm/rans/index.js +5 -5
  178. package/esm/rans/index.js.map +1 -1
  179. package/esm/unzip.d.ts +1 -1
  180. package/esm/unzip.js +4 -1
  181. package/esm/unzip.js.map +1 -1
  182. package/package.json +7 -9
  183. package/src/craiIndex.ts +17 -16
  184. package/src/cramFile/codecs/_base.ts +1 -1
  185. package/src/cramFile/codecs/beta.ts +3 -3
  186. package/src/cramFile/codecs/byteArrayLength.ts +1 -1
  187. package/src/cramFile/codecs/byteArrayStop.ts +3 -4
  188. package/src/cramFile/codecs/external.ts +3 -3
  189. package/src/cramFile/codecs/gamma.ts +2 -2
  190. package/src/cramFile/codecs/getBits.ts +1 -1
  191. package/src/cramFile/codecs/huffman.ts +2 -3
  192. package/src/cramFile/codecs/index.ts +7 -8
  193. package/src/cramFile/codecs/subexp.ts +3 -3
  194. package/src/cramFile/container/compressionScheme.ts +3 -3
  195. package/src/cramFile/container/index.ts +7 -10
  196. package/src/cramFile/file.ts +71 -77
  197. package/src/cramFile/record.ts +3 -3
  198. package/src/cramFile/sectionParsers.ts +27 -22
  199. package/src/cramFile/slice/decodeRecord.ts +17 -17
  200. package/src/cramFile/slice/index.ts +8 -9
  201. package/src/cramFile/util.ts +24 -5
  202. package/src/htscodecs/arith_gen.js +33 -296
  203. package/src/htscodecs/fqzcomp.js +2 -476
  204. package/src/htscodecs/index.js +9 -11
  205. package/src/htscodecs/iostream.js +3 -2
  206. package/src/htscodecs/rans.js +3 -315
  207. package/src/htscodecs/rans4x16.js +6 -557
  208. package/src/htscodecs/tok3.js +18 -1
  209. package/src/index.ts +1 -1
  210. package/src/indexedCramFile.ts +6 -5
  211. package/src/io/index.ts +5 -4
  212. package/src/rans/constants.ts +1 -1
  213. package/src/rans/d04.ts +0 -1
  214. package/src/rans/decoding.ts +0 -1
  215. package/src/rans/frequencies.ts +0 -1
  216. package/src/rans/index.ts +5 -7
  217. package/src/unzip.ts +5 -1
  218. package/dist/cramFile/filehandle.d.ts +0 -1
  219. package/dist/cramFile/filehandle.js +0 -3
  220. package/dist/cramFile/filehandle.js.map +0 -1
  221. package/dist/htscodecs/main_arith_gen.d.ts +0 -1
  222. package/dist/htscodecs/main_arith_gen.js +0 -86
  223. package/dist/htscodecs/main_arith_gen.js.map +0 -1
  224. package/dist/htscodecs/main_fqzcomp.d.ts +0 -1
  225. package/dist/htscodecs/main_fqzcomp.js +0 -112
  226. package/dist/htscodecs/main_fqzcomp.js.map +0 -1
  227. package/dist/htscodecs/main_rans.d.ts +0 -1
  228. package/dist/htscodecs/main_rans.js +0 -83
  229. package/dist/htscodecs/main_rans.js.map +0 -1
  230. package/dist/htscodecs/main_rans4x16.d.ts +0 -1
  231. package/dist/htscodecs/main_rans4x16.js +0 -82
  232. package/dist/htscodecs/main_rans4x16.js.map +0 -1
  233. package/dist/htscodecs/main_tok3.d.ts +0 -1
  234. package/dist/htscodecs/main_tok3.js +0 -84
  235. package/dist/htscodecs/main_tok3.js.map +0 -1
  236. package/dist/unzip-pako.d.ts +0 -2
  237. package/dist/unzip-pako.js +0 -9
  238. package/dist/unzip-pako.js.map +0 -1
  239. package/esm/cramFile/filehandle.d.ts +0 -1
  240. package/esm/cramFile/filehandle.js +0 -2
  241. package/esm/cramFile/filehandle.js.map +0 -1
  242. package/esm/htscodecs/main_arith_gen.d.ts +0 -1
  243. package/esm/htscodecs/main_arith_gen.js +0 -86
  244. package/esm/htscodecs/main_arith_gen.js.map +0 -1
  245. package/esm/htscodecs/main_fqzcomp.d.ts +0 -1
  246. package/esm/htscodecs/main_fqzcomp.js +0 -112
  247. package/esm/htscodecs/main_fqzcomp.js.map +0 -1
  248. package/esm/htscodecs/main_rans.d.ts +0 -1
  249. package/esm/htscodecs/main_rans.js +0 -83
  250. package/esm/htscodecs/main_rans.js.map +0 -1
  251. package/esm/htscodecs/main_rans4x16.d.ts +0 -1
  252. package/esm/htscodecs/main_rans4x16.js +0 -82
  253. package/esm/htscodecs/main_rans4x16.js.map +0 -1
  254. package/esm/htscodecs/main_tok3.d.ts +0 -1
  255. package/esm/htscodecs/main_tok3.js +0 -84
  256. package/esm/htscodecs/main_tok3.js.map +0 -1
  257. package/esm/unzip-pako.d.ts +0 -2
  258. package/esm/unzip-pako.js +0 -6
  259. package/esm/unzip-pako.js.map +0 -1
  260. package/src/cramFile/filehandle.ts +0 -1
  261. package/src/htscodecs/Makefile +0 -142
  262. package/src/htscodecs/README.md +0 -64
  263. package/src/htscodecs/main_arith_gen.js +0 -96
  264. package/src/htscodecs/main_fqzcomp.js +0 -113
  265. package/src/htscodecs/main_rans.js +0 -88
  266. package/src/htscodecs/main_rans4x16.js +0 -87
  267. package/src/htscodecs/main_tok3.js +0 -86
  268. package/src/unzip-pako.ts +0 -6
@@ -75,94 +75,6 @@ function RansRenorm(src, R) {
75
75
  return R
76
76
  }
77
77
 
78
- // RanEnc* is for encoder
79
- function RansEncInit() {
80
- return 1 << 15
81
- }
82
-
83
- function RansEncFlush(R, dst) {
84
- dst.WriteByteNeg((R >> 24) & 0xff)
85
- dst.WriteByteNeg((R >> 16) & 0xff)
86
- dst.WriteByteNeg((R >> 8) & 0xff)
87
- dst.WriteByteNeg((R >> 0) & 0xff)
88
- }
89
-
90
- function RansEncRenorm(R, dst, freq, scale_bits) {
91
- //var R_max = (((1 << 15) >> scale_bits) << 16) * freq;
92
- var R_max = (1 << (31 - scale_bits)) * freq
93
-
94
- while (R >= R_max) {
95
- dst.WriteByteNeg((R >> 8) & 0xff)
96
- dst.WriteByteNeg(R & 0xff)
97
- R >>= 16
98
- }
99
- return R
100
- }
101
-
102
- // Puts a symbol with frequency freq, cumulative freq start
103
- // and total freq 1<<scale_bits.
104
- //
105
- // Note with static probabilities, /freq and %freq could be
106
- // precomputed via multiplies and shifts.
107
- function RansEncPut(R, dst, start, freq, scale_bits) {
108
- var scale = 1 << scale_bits
109
- R = RansEncRenorm(R, dst, freq, scale_bits)
110
- R = (Math.floor(R / freq) << scale_bits) + (R % freq) + start
111
- return R
112
- }
113
-
114
- //----------------------------------------------------------------------
115
- // Run length encoding
116
- function EncodeRLE(src, N) {
117
- // Step 1: find which symbols benefit from RLE
118
- var L = new Array(256)
119
- for (var i = 0; i < 256; i++) L[i] = 0
120
-
121
- var last = -1
122
- for (var i = 0; i < src.length; i++) {
123
- L[src[i]] += src[i] == last ? 1 : -1
124
- last = src[i]
125
- }
126
-
127
- var nrle = 0
128
- for (var i = 0; i < 256; i++) if (L[i] > 0) nrle++
129
-
130
- if (!nrle) {
131
- // Format cannot cope with zero RLE symbols, so pick one!
132
- nrle = 1
133
- L[0] = 1
134
- }
135
-
136
- // Start meta-data as list of symbols to RLE
137
- var meta = new IOStream('', 0, nrle + 1 + src.length)
138
- meta.WriteByte(nrle)
139
- for (var i = 0; i < 256; i++) if (L[i] > 0) meta.WriteByte(i)
140
-
141
- // Step 2: Now apply RLE itself
142
- var data = new Buffer.allocUnsafe(src.length)
143
- var dpos = 0
144
- for (var i = 0; i < src.length; i++) {
145
- data[dpos++] = src[i]
146
- if (L[src[i]] > 0) {
147
- last = src[i]
148
- var run = 0
149
- while (i + run + 1 < src.length && src[i + run + 1] == last) run++
150
- meta.WriteUint7(run)
151
- i += run
152
- }
153
- }
154
-
155
- // Compress the meta-data
156
- var cmeta = RansEncode0(meta.buf.slice(0, meta.pos), N)
157
- var hdr = new IOStream('', 0, 16)
158
- hdr.WriteUint7(meta.pos * 2) // Uncompressed meta-data length + compressed-bit-flag(0)
159
- hdr.WriteUint7(dpos) // Length of RLE encoded data
160
- hdr.WriteUint7(cmeta.length) // Compressed meta-data length
161
- var meta = Buffer.concat([hdr.buf.slice(0, hdr.pos), cmeta])
162
-
163
- return [meta, data.slice(0, dpos)]
164
- }
165
-
166
78
  function DecodeRLEMeta(src, N) {
167
79
  var u_meta_len = src.ReadUint7()
168
80
  var rle_len = src.ReadUint7()
@@ -189,7 +101,7 @@ function DecodeRLEMeta(src, N) {
189
101
  function DecodeRLE(buf, L, rle_meta, len) {
190
102
  var src = new IOStream(buf)
191
103
 
192
- var out = new Buffer.allocUnsafe(len)
104
+ var out = new Uint8Array(len)
193
105
 
194
106
  // Expand up buf+meta to out; i = buf index, j = out index
195
107
  var j = 0
@@ -206,70 +118,6 @@ function DecodeRLE(buf, L, rle_meta, len) {
206
118
  return out
207
119
  }
208
120
 
209
- //----------------------------------------------------------------------
210
- // Bit packing
211
-
212
- function EncodePack(src) {
213
- // Step 1: identify number of distinct symbols
214
- var F = new Array(256)
215
- for (var i = 0; i < 256; i++) F[i] = 0
216
-
217
- for (var i = 0; i < src.length; i++) F[src[i]]++
218
-
219
- var P = new Array(256)
220
- var nsym = 0
221
- for (var i = 0; i < 256; i++) if (F[i] > 0) P[i] = nsym++
222
-
223
- if (nsym > 16) {
224
- //console.error("Too many symbols to pack:",nsym)
225
- return
226
- }
227
-
228
- // Pack data
229
- if (nsym <= 1) {
230
- // Constant
231
- var data = new Buffer.allocUnsafe(0)
232
- } else if (nsym <= 2) {
233
- // 1 bit per value
234
- var data = new Buffer.allocUnsafe(Math.ceil(src.length / 8))
235
- var j = -1
236
- for (i = 0; i < src.length; i++) {
237
- if (i % 8 == 0) data[++j] = 0
238
- data[j] += P[src[i]] << i % 8
239
- }
240
- } else if (nsym <= 4) {
241
- // 2 bits per value
242
- var data = new Buffer.allocUnsafe(Math.ceil(src.length / 4))
243
- var j = -1
244
- for (i = 0; i < src.length; i++) {
245
- if (i % 4 == 0) data[++j] = 0
246
- data[j] += P[src[i]] << ((i % 4) * 2)
247
- }
248
- } else {
249
- // 4 bits per value
250
- var data = new Buffer.allocUnsafe(Math.ceil(src.length / 2))
251
- var j = -1
252
- for (i = 0; i < src.length; i++) {
253
- if (i % 2 == 0) data[++j] = 0
254
- data[j] += P[src[i]] << ((i % 2) * 4)
255
- }
256
- }
257
-
258
- // Produce pack meta-data
259
- var meta = new IOStream('', 0, nsym + 5)
260
- meta.WriteByte(nsym)
261
- var j = 0
262
- for (var i = 0; i < 256; i++) {
263
- if (F[i] > 0) {
264
- F[i] = j++
265
- meta.WriteByte(i)
266
- }
267
- }
268
- meta.WriteUint7(data.length)
269
-
270
- return [meta.buf.slice(0, meta.pos), data]
271
- }
272
-
273
121
  // Pack meta data is the number and value of distinct symbols plus
274
122
  // the length of the packed byte stream.
275
123
  function DecodePackMeta(src) {
@@ -286,7 +134,7 @@ function DecodePackMeta(src) {
286
134
  // Extract bits from src producing output of length len.
287
135
  // Nsym is number of distinct symbols used.
288
136
  function DecodePack(data, P, nsym, len) {
289
- var out = new Buffer.allocUnsafe(len)
137
+ var out = new Uint8Array(len)
290
138
  var j = 0
291
139
 
292
140
  // Constant value
@@ -327,52 +175,6 @@ function DecodePack(data, P, nsym, len) {
327
175
  return out
328
176
  }
329
177
 
330
- //----------------------------------------------------------------------
331
- // 4 way interleaving.
332
- // This is simply 4 rANS streams interleaved to form bytes 0,4,8...,
333
- // 1,5,9..., 2,6,10... and 3,7,11...
334
- //
335
- // It works well when the distributions differ for each of the 4 bytes,
336
- // for example when compressing a series of 32-bit integers.
337
- //
338
- // Maybe make this more general purpose of X* where we specify the stripe
339
- // size instead of fixing it at 4?
340
- function RansEncodeStripe(hdr, src, N) {
341
- if (N == 0) N = 4 // old default
342
-
343
- // Split into multiple streams
344
- var part = new Array(N)
345
- var ulen = new Array(N)
346
- for (var s = 0; s < N; s++) {
347
- ulen[s] = Math.floor(src.length / N) + (src.length % N > s)
348
- part[s] = new Array(ulen[s])
349
- }
350
-
351
- for (var x = 0, i = 0; i < src.length; i += N, x++) {
352
- for (var j = 0; j < N; j++) if (x < part[j].length) part[j][x] = src[i + j]
353
- }
354
-
355
- // Compress each part
356
- var comp = new Array(N)
357
- var total = 0
358
- for (var s = 0; s < N; s++) {
359
- // Example: try O0 and O1 and choose best
360
- var comp0 = encode(part[s], 0)
361
- var comp1 = encode(part[s], 1)
362
- comp[s] = comp1.length < comp0.length ? comp1 : comp0
363
- total += comp[s].length
364
- }
365
-
366
- // Serialise
367
- var out = new IOStream('', 0, total + 5 * N + 1)
368
- out.WriteByte(N)
369
- for (var s = 0; s < N; s++) out.WriteUint7(comp[s].length)
370
-
371
- for (var s = 0; s < N; s++) out.WriteData(comp[s], comp[s].length)
372
-
373
- return out.buf.slice(0, out.buf.pos)
374
- }
375
-
376
178
  function RansDecodeStripe(src, len) {
377
179
  var N = src.ReadByte()
378
180
 
@@ -389,7 +191,7 @@ function RansDecodeStripe(src, len) {
389
191
  }
390
192
 
391
193
  // Transpose
392
- var out = new Buffer.allocUnsafe(len)
194
+ var out = new Uint8Array(len)
393
195
  for (var j = 0; j < N; j++) {
394
196
  for (var i = 0; i < ulen[j]; i++) {
395
197
  out[i * N + j] = T[j][i]
@@ -449,48 +251,6 @@ function RansDecodeStream(stream, n_out) {
449
251
  return buf
450
252
  }
451
253
 
452
- function encode(src, format) {
453
- var hdr = new IOStream('', 0, 10)
454
- hdr.WriteByte(format)
455
-
456
- var order = format & 1
457
- var x32 = format & 4
458
- var stripe = format & 8
459
- var nosz = format & 16
460
- var cat = format & 32
461
- var rle = format & 64
462
- var pack = format & 128
463
-
464
- var Nway = x32 ? 32 : 4 // interleaving amount
465
- var N = format >> 8 // stripe size
466
-
467
- if (!nosz) hdr.WriteUint7(src.length)
468
-
469
- if (stripe)
470
- return Buffer.concat([
471
- hdr.buf.slice(0, hdr.pos),
472
- RansEncodeStripe(hdr, src, N),
473
- ])
474
-
475
- var pack_meta = new Buffer.alloc(0)
476
- if (pack) [pack_meta, src] = EncodePack(src)
477
-
478
- var rle_meta = new Buffer.alloc(0)
479
- if (rle) [rle_meta, src] = EncodeRLE(src, Nway)
480
-
481
- if (src.length < 4 && order == 1) {
482
- // Protect against short order-1 data due to RLE/Pack
483
- order = 0
484
- hdr.buf[0] &= ~1
485
- }
486
-
487
- if (cat) var comp = src
488
- else if (order == 0) var comp = RansEncode0(src, Nway)
489
- else var comp = RansEncode1(src, Nway)
490
-
491
- return Buffer.concat([hdr.buf.slice(0, hdr.pos), pack_meta, rle_meta, comp])
492
- }
493
-
494
254
  //----------------------------------------------------------------------
495
255
  // Order-0 decoder
496
256
 
@@ -552,7 +312,7 @@ function RansDecode0(src, nbytes, N) {
552
312
  for (var i = 0; i < N; i++) R[i] = src.ReadUint32()
553
313
 
554
314
  // Main decode loop
555
- var output = new Buffer.allocUnsafe(nbytes)
315
+ var output = new Uint8Array(nbytes)
556
316
  for (var i = 0; i < nbytes; i++) {
557
317
  var ix = i & (N - 1) // equiv to i%N as N is power of 2
558
318
  var f = RansGetCumulativeFreq(R[ix], 12)
@@ -567,57 +327,6 @@ function RansDecode0(src, nbytes, N) {
567
327
  return output
568
328
  }
569
329
 
570
- //----------------------------------------------------------------------
571
- // Order-0 encoder
572
-
573
- function BuildFrequencies0(src, F) {
574
- for (var i = 0; i < 256; i++) F[i] = 0
575
-
576
- for (var i = 0; i < src.length; i++) F[src[i]]++
577
- }
578
-
579
- function NormaliseFrequencies0(F, bits) {
580
- // Compute total
581
- var tot = 0
582
- for (var i = 0; i < 256; i++) tot += F[i]
583
-
584
- // Scale total of frequencies to max
585
- const max = 1 << bits
586
- var scale = max / tot
587
- do {
588
- var max_val = 0
589
- var max_idx = 0
590
- var renorm = 0
591
- tot = 0
592
- for (var i = 0; i < 256; i++) {
593
- if (F[i] == 0) continue
594
-
595
- if (max_val < F[i]) {
596
- max_val = F[i]
597
- max_idx = i
598
- }
599
-
600
- F[i] = Math.floor(F[i] * scale)
601
- if (F[i] == 0) F[i] = 1
602
-
603
- tot += F[i]
604
- }
605
-
606
- // Adjust new tot to ensure it matches.
607
- if (tot < max) {
608
- // Too low, boost the most common symbol
609
- F[max_idx] += max - tot
610
- } else if (tot - max < F[max_idx] / 2 && F[max_idx] > 2) {
611
- // Too high, reduce the common symbol
612
- F[max_idx] -= tot - max
613
- } else if (tot != max) {
614
- // Much too high, fudge scale and try again.
615
- scale = max / tot
616
- renorm = 1
617
- }
618
- } while (renorm)
619
- }
620
-
621
330
  function NormaliseFrequencies0_Shift(F, bits) {
622
331
  // Compute total and number of bits to shift by
623
332
  var tot = 0
@@ -634,85 +343,6 @@ function NormaliseFrequencies0_Shift(F, bits) {
634
343
  // Scale total of frequencies to (1<<bits)
635
344
  for (var i = 0; i < 256; i++) F[i] <<= shift
636
345
  }
637
-
638
- function WriteAlphabet(out, F) {
639
- var rle = 0
640
- for (var i = 0; i < 256; i++) {
641
- if (!F[i]) continue
642
-
643
- if (rle > 0) rle--
644
- else {
645
- out.WriteByte(i)
646
-
647
- if (i > 0 && F[i - 1] > 0) {
648
- // We've encoded two symbol frequencies in a row.
649
- // How many more are there? Store that count so
650
- // we can avoid writing consecutive symbols.
651
- for (rle = i + 1; rle < 256 && F[rle]; rle++);
652
- rle -= i + 1
653
-
654
- out.WriteByte(rle)
655
- }
656
- }
657
- }
658
- out.WriteByte(0)
659
- }
660
-
661
- function WriteFrequencies0(out, F) {
662
- WriteAlphabet(out, F)
663
-
664
- for (var i = 0; i < 256; i++) {
665
- if (F[i]) out.WriteUint7(F[i])
666
- }
667
- }
668
-
669
- function RansEncode0(src, N) {
670
- const nbytes = src.length
671
- var output = new IOStream('', 0, 257 * 3 + 9)
672
-
673
- // Compute frequencies
674
- var F = new Array(256)
675
- BuildFrequencies0(src, F)
676
- var bit_size = Math.ceil(Math.log2(nbytes))
677
- if (bit_size > 12) bit_size = 12
678
- NormaliseFrequencies0(F, bit_size)
679
- WriteFrequencies0(output, F)
680
- NormaliseFrequencies0(F, 12)
681
-
682
- // Compute cumulative frequencies
683
- var C = new Array(256)
684
- C[0] = 0
685
- for (var i = 1; i < 256; i++) C[i] = C[i - 1] + F[i - 1]
686
-
687
- // Initialise rANS state
688
- var R = new Array(N)
689
- for (var i = 0; i < N; i++) R[i] = RansEncInit()
690
-
691
- // Allow expansion room if trying to compress random data.
692
- var rans_out = new IOStream(
693
- '',
694
- (nbytes * 1.05 + 100) >> 0,
695
- (nbytes * 1.05 + 100) >> 0,
696
- )
697
-
698
- // Main encode loop
699
- for (var i = nbytes - 1; i >= 0; i--)
700
- R[i % N] = RansEncPut(R[i % N], rans_out, C[src[i]], F[src[i]], 12)
701
-
702
- for (var i = N - 1; i >= 0; i--) RansEncFlush(R[i], rans_out)
703
-
704
- // Stitch blocks together into final output buffer
705
- //console.error("pos=",rans_out.pos, " len=",rans_out.length)
706
- //console.error(rans_out.buf.slice(rans_out.pos, rans_out.length))
707
- return Buffer.concat(
708
- [
709
- output.buf.slice(0, output.pos),
710
- rans_out.buf.slice(rans_out.pos, rans_out.length),
711
- ],
712
- output.pos + rans_out.length - rans_out.pos,
713
- )
714
- }
715
-
716
346
  //----------------------------------------------------------------------
717
347
  // Order-1 decoder
718
348
 
@@ -787,7 +417,7 @@ function RansDecode1(src, nbytes, N) {
787
417
  }
788
418
 
789
419
  // Main decode loop
790
- var output = new Buffer.allocUnsafe(nbytes)
420
+ var output = new Uint8Array(nbytes)
791
421
  var nbytesx = Math.floor(nbytes / N)
792
422
  for (var i = 0; i < nbytesx; i++) {
793
423
  for (var j = 0; j < N; j++) {
@@ -819,185 +449,4 @@ function RansDecode1(src, nbytes, N) {
819
449
  return output
820
450
  }
821
451
 
822
- //----------------------------------------------------------------------
823
- // Order-1 encoder
824
-
825
- function BuildFrequencies1(src, F, F0, N) {
826
- for (var i = 0; i < 256; i++) {
827
- F0[i] = 0
828
- for (var j = 0; j < 256; j++) F[i][j] = 0
829
- }
830
-
831
- var last = 0
832
- for (var i = 0; i < src.length; i++) {
833
- F0[last]++
834
- F[last][src[i]]++
835
- last = src[i]
836
- }
837
- F0[last]++
838
-
839
- // Also accept we'll be starting at N points, not just byte 0
840
- for (var i = 1; i < N; i++) F[0][src[i * Math.floor(src.length / N)]]++
841
- F0[0] += N - 1
842
- }
843
-
844
- function NormaliseFrequencies1(F, F0, shift) {
845
- for (var i = 0; i < 256; i++) {
846
- if (!F0[i]) continue
847
-
848
- var bit_size = Math.ceil(Math.log2(F0[i]))
849
- if (bit_size > shift) bit_size = shift
850
-
851
- NormaliseFrequencies0(F[i], bit_size)
852
- }
853
- }
854
-
855
- function NormaliseFrequencies1_Shift(F, F0, shift) {
856
- for (var i = 0; i < 256; i++)
857
- if (F0[i]) NormaliseFrequencies0_Shift(F[i], shift)
858
- }
859
-
860
- function WriteFrequencies1(out, F, F0) {
861
- WriteAlphabet(out, F0)
862
-
863
- for (var i = 0; i < 256; i++) {
864
- if (!F0[i]) continue
865
-
866
- var run = 0
867
- for (var j = 0; j < 256; j++) {
868
- if (!F0[j]) continue
869
-
870
- if (run) {
871
- run--
872
- } else {
873
- out.WriteUint7(F[i][j])
874
-
875
- if (!F[i][j]) {
876
- // Count how many more zero-freqs we have
877
- for (var k = j + 1; k < 256; k++) {
878
- if (!F0[k]) continue
879
-
880
- if (F[i][k] == 0) run++
881
- else break
882
- }
883
- out.WriteByte(run)
884
- }
885
- }
886
- }
887
- }
888
- }
889
-
890
- function RansEncode1(src, N) {
891
- const nbytes = src.length
892
- var output = new IOStream('', 0, 257 * 257 * 3 + 9)
893
-
894
- // Compute frequencies
895
- var F0 = new Array(256)
896
- var F = new Array(256)
897
- var C = new Array(256)
898
- for (var i = 0; i < 256; i++) {
899
- F[i] = new Array(256)
900
- C[i] = new Array(256)
901
- }
902
-
903
- // Frequency precision
904
- var shift = 12
905
-
906
- BuildFrequencies1(src, F, F0, N)
907
- NormaliseFrequencies1(F, F0, shift)
908
-
909
- // Store frequencies, possibly compressed
910
- var freq = new IOStream('', 0, 257 * 257 * 3 + 9)
911
-
912
- WriteFrequencies1(freq, F, F0)
913
-
914
- var cfreq = RansEncode0(freq.buf.slice(0, freq.pos), 4)
915
- if (cfreq.length < freq.pos) {
916
- output.WriteByte(1 | (shift << 4))
917
- output.WriteUint7(freq.pos)
918
- output.WriteUint7(cfreq.length)
919
- output.WriteData(cfreq, cfreq.length)
920
- } else {
921
- output.WriteByte(0 | (shift << 4))
922
- output.WriteData(freq.buf, freq.pos)
923
- }
924
-
925
- // Normalise and compute cumulative frequencies
926
- NormaliseFrequencies1_Shift(F, F0, shift)
927
- for (var i = 0; i < 256; i++) {
928
- if (!F0[i]) continue
929
-
930
- C[i][0] = 0
931
- for (var j = 1; j < 256; j++) C[i][j] = C[i][j - 1] + F[i][j - 1]
932
- }
933
-
934
- // Initialise rANS state
935
- var R = new Array(N)
936
- var L = new Array(N)
937
- for (var j = 0; j < N; j++) {
938
- R[j] = RansEncInit()
939
- L[j] = 0
940
- }
941
- var rans_out = new IOStream(
942
- '',
943
- (nbytes * 1.05 + 100) >> 0,
944
- (nbytes * 1.05 + 100) >> 0,
945
- )
946
-
947
- // We have N rans codecs running in parallel on its own 1/Nth of buffer
948
- var nbytesx = Math.floor(nbytes / N)
949
- var idx = new Array(N)
950
- var last = new Array(N)
951
- for (var j = 0; j < N; j++) {
952
- idx[j] = (j + 1) * nbytesx - 2
953
- last[j] = src[idx[j] + 1]
954
- }
955
-
956
- // Deal with the remainder if not a multiple of N
957
- last[N - 1] = src[nbytes - 1]
958
- for (var i = nbytes - 2; i > N * nbytesx - 2; i--) {
959
- R[N - 1] = RansEncPut(
960
- R[N - 1],
961
- rans_out,
962
- C[src[i]][last[N - 1]],
963
- F[src[i]][last[N - 1]],
964
- shift,
965
- )
966
- last[N - 1] = src[i]
967
- }
968
-
969
- // Main encode loop
970
- var s = new Array(N)
971
- while (idx[0] >= 0) {
972
- // Separate loop as a speed optimisation
973
- for (var j = N - 1; j >= 0; j--) s[j] = src[idx[j]]
974
- for (var j = N - 1; j >= 0; j--) {
975
- R[j] = RansEncPut(
976
- R[j],
977
- rans_out,
978
- C[s[j]][last[j]],
979
- F[s[j]][last[j]],
980
- shift,
981
- )
982
- last[j] = s[j]
983
- idx[j]--
984
- }
985
- }
986
-
987
- for (var j = N - 1; j >= 0; j--) {
988
- R[j] = RansEncPut(R[j], rans_out, C[0][last[j]], F[0][last[j]], shift)
989
- }
990
-
991
- for (var i = N - 1; i >= 0; i--) RansEncFlush(R[i], rans_out)
992
-
993
- // Stitch blocks together into final output buffer
994
- return Buffer.concat(
995
- [
996
- output.buf.slice(0, output.pos),
997
- rans_out.buf.slice(rans_out.pos, rans_out.length),
998
- ],
999
- output.pos + rans_out.length - rans_out.pos,
1000
- )
1001
- }
1002
-
1003
- module.exports = { decode, encode }
452
+ module.exports = { decode }
@@ -41,6 +41,23 @@ const IOStream = require('./iostream')
41
41
  const rans = require('./rans4x16')
42
42
  const arith_gen = require('./arith_gen')
43
43
 
44
+ function sum(array) {
45
+ let sum = 0
46
+ for (const entry of array) {
47
+ sum += entry.length
48
+ }
49
+ return sum
50
+ }
51
+ function concatUint8Array(args) {
52
+ const mergedArray = new Uint8Array(sum(args))
53
+ let offset = 0
54
+ for (const entry of args) {
55
+ mergedArray.set(entry, offset)
56
+ offset += entry.length
57
+ }
58
+ return mergedArray
59
+ }
60
+
44
61
  var arith = new arith_gen()
45
62
 
46
63
  const TOK_TYPE = 0
@@ -77,7 +94,7 @@ function DecodeTokenByteStreams(src, in_size, use_arith, nnames) {
77
94
 
78
95
  if (type != TOK_TYPE && tok_new) {
79
96
  var M = new Array(nnames - 1).fill(TOK_MATCH)
80
- B[t][TOK_TYPE] = new IOStream(Buffer.from([type].concat(M)))
97
+ B[t][TOK_TYPE] = new IOStream(concatUint8Array([new Uint8Array(type), M]))
81
98
  }
82
99
 
83
100
  if (tok_dup) {
package/src/index.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { default as CramFile, CramRecord } from './cramFile'
1
+ export { CramRecord, default as CramFile } from './cramFile'
2
2
  export { default as CraiIndex } from './craiIndex'
3
3
  export { default as IndexedCramFile } from './indexedCramFile'
@@ -1,12 +1,13 @@
1
- import { CramUnimplementedError } from './errors'
1
+ import { Slice } from './craiIndex'
2
2
  import CramFile from './cramFile'
3
- import CramRecord from './cramFile/record'
4
3
  import { SeqFetch } from './cramFile/file'
5
- import { Filehandle } from './cramFile/filehandle'
6
- import { Slice } from './craiIndex'
4
+ import CramRecord from './cramFile/record'
5
+ import { CramUnimplementedError } from './errors'
6
+
7
+ import type { GenericFilehandle } from 'generic-filehandle2'
7
8
 
8
9
  export interface CramFileSource {
9
- cramFilehandle?: Filehandle
10
+ cramFilehandle?: GenericFilehandle
10
11
  cramUrl?: string
11
12
  cramPath?: string
12
13
  }
package/src/io/index.ts CHANGED
@@ -1,11 +1,12 @@
1
- import { Filehandle } from '../cramFile/filehandle'
2
- import { LocalFile, RemoteFile } from 'generic-filehandle'
1
+ import { LocalFile, RemoteFile } from 'generic-filehandle2'
2
+
3
+ import type { GenericFilehandle } from 'generic-filehandle2'
3
4
 
4
5
  function open(
5
6
  maybeUrl?: string,
6
7
  maybePath?: string,
7
- maybeFilehandle?: Filehandle,
8
- ): Filehandle {
8
+ maybeFilehandle?: GenericFilehandle,
9
+ ): GenericFilehandle {
9
10
  if (maybeFilehandle) {
10
11
  return maybeFilehandle
11
12
  }