@gmod/cram 1.6.3 → 1.7.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 (255) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/craiIndex.d.ts +19 -12
  3. package/dist/craiIndex.js +63 -123
  4. package/dist/craiIndex.js.map +1 -1
  5. package/dist/cram-bundle.js +2 -17
  6. package/dist/cram-bundle.js.LICENSE.txt +17 -0
  7. package/dist/cramFile/codecs/_base.d.ts +26 -5
  8. package/dist/cramFile/codecs/_base.js +3 -39
  9. package/dist/cramFile/codecs/_base.js.map +1 -1
  10. package/dist/cramFile/codecs/beta.d.ts +7 -3
  11. package/dist/cramFile/codecs/beta.js +13 -31
  12. package/dist/cramFile/codecs/beta.js.map +1 -1
  13. package/dist/cramFile/codecs/byteArrayLength.d.ts +13 -7
  14. package/dist/cramFile/codecs/byteArrayLength.js +22 -41
  15. package/dist/cramFile/codecs/byteArrayLength.js.map +1 -1
  16. package/dist/cramFile/codecs/byteArrayStop.d.ts +9 -5
  17. package/dist/cramFile/codecs/byteArrayStop.js +25 -46
  18. package/dist/cramFile/codecs/byteArrayStop.js.map +1 -1
  19. package/dist/cramFile/codecs/dataSeriesTypes.d.ts +4 -0
  20. package/dist/cramFile/codecs/dataSeriesTypes.js +3 -0
  21. package/dist/cramFile/codecs/dataSeriesTypes.js.map +1 -0
  22. package/dist/cramFile/codecs/external.d.ts +10 -6
  23. package/dist/cramFile/codecs/external.js +26 -44
  24. package/dist/cramFile/codecs/external.js.map +1 -1
  25. package/dist/cramFile/codecs/gamma.d.ts +7 -3
  26. package/dist/cramFile/codecs/gamma.js +16 -34
  27. package/dist/cramFile/codecs/gamma.js.map +1 -1
  28. package/dist/cramFile/codecs/getBits.d.ts +7 -0
  29. package/dist/cramFile/codecs/getBits.js +26 -0
  30. package/dist/cramFile/codecs/getBits.js.map +1 -0
  31. package/dist/cramFile/codecs/huffman.d.ts +17 -13
  32. package/dist/cramFile/codecs/huffman.js +76 -85
  33. package/dist/cramFile/codecs/huffman.js.map +1 -1
  34. package/dist/cramFile/codecs/index.d.ts +4 -2
  35. package/dist/cramFile/codecs/index.js +12 -13
  36. package/dist/cramFile/codecs/index.js.map +1 -1
  37. package/dist/cramFile/codecs/subexp.d.ts +7 -3
  38. package/dist/cramFile/codecs/subexp.js +19 -36
  39. package/dist/cramFile/codecs/subexp.js.map +1 -1
  40. package/dist/cramFile/constants.d.ts +35 -35
  41. package/dist/cramFile/constants.js +1 -1
  42. package/dist/cramFile/constants.js.map +1 -1
  43. package/dist/cramFile/container/compressionScheme.d.ts +57 -11
  44. package/dist/cramFile/container/compressionScheme.js +37 -32
  45. package/dist/cramFile/container/compressionScheme.js.map +1 -1
  46. package/dist/cramFile/container/index.d.ts +23 -9
  47. package/dist/cramFile/container/index.js +74 -144
  48. package/dist/cramFile/container/index.js.map +1 -1
  49. package/dist/cramFile/encoding.d.ts +78 -0
  50. package/dist/cramFile/encoding.js +3 -0
  51. package/dist/cramFile/encoding.js.map +1 -0
  52. package/dist/cramFile/file.d.ts +91 -41
  53. package/dist/cramFile/file.js +234 -368
  54. package/dist/cramFile/file.js.map +1 -1
  55. package/dist/cramFile/filehandle.d.ts +2 -0
  56. package/dist/cramFile/filehandle.js +3 -0
  57. package/dist/cramFile/filehandle.js.map +1 -0
  58. package/dist/cramFile/index.d.ts +1 -1
  59. package/dist/cramFile/index.js +1 -1
  60. package/dist/cramFile/index.js.map +1 -1
  61. package/dist/cramFile/record.d.ts +61 -17
  62. package/dist/cramFile/record.js +153 -77
  63. package/dist/cramFile/record.js.map +1 -1
  64. package/dist/cramFile/sectionParsers.d.ts +99 -8
  65. package/dist/cramFile/sectionParsers.js +70 -80
  66. package/dist/cramFile/sectionParsers.js.map +1 -1
  67. package/dist/cramFile/slice/decodeRecord.d.ts +30 -2
  68. package/dist/cramFile/slice/decodeRecord.js +148 -118
  69. package/dist/cramFile/slice/decodeRecord.js.map +1 -1
  70. package/dist/cramFile/slice/index.d.ts +21 -14
  71. package/dist/cramFile/slice/index.js +286 -381
  72. package/dist/cramFile/slice/index.js.map +1 -1
  73. package/dist/cramFile/util.d.ts +11 -5
  74. package/dist/cramFile/util.js +19 -97
  75. package/dist/cramFile/util.js.map +1 -1
  76. package/dist/errors.d.ts +5 -10
  77. package/dist/errors.js +11 -62
  78. package/dist/errors.js.map +1 -1
  79. package/dist/index.d.ts +3 -3
  80. package/dist/index.js +3 -3
  81. package/dist/index.js.map +1 -1
  82. package/dist/indexedCramFile.d.ts +37 -12
  83. package/dist/indexedCramFile.js +114 -154
  84. package/dist/indexedCramFile.js.map +1 -1
  85. package/dist/io/index.d.ts +5 -5
  86. package/dist/io/index.js +9 -9
  87. package/dist/io/index.js.map +1 -1
  88. package/dist/rans/constants.js +3 -3
  89. package/dist/rans/constants.js.map +1 -1
  90. package/dist/rans/d04.js +15 -15
  91. package/dist/rans/d04.js.map +1 -1
  92. package/dist/rans/d14.js +21 -21
  93. package/dist/rans/d14.js.map +1 -1
  94. package/dist/rans/decoding.js +27 -30
  95. package/dist/rans/decoding.js.map +1 -1
  96. package/dist/rans/frequencies.js +11 -11
  97. package/dist/rans/frequencies.js.map +1 -1
  98. package/dist/rans/index.js +46 -49
  99. package/dist/rans/index.js.map +1 -1
  100. package/dist/sam.d.ts +8 -1
  101. package/dist/sam.js +7 -7
  102. package/dist/sam.js.map +1 -1
  103. package/dist/typescript.d.ts +3 -0
  104. package/dist/typescript.js +11 -0
  105. package/dist/typescript.js.map +1 -0
  106. package/dist/unzip-pako.js +1 -1
  107. package/dist/unzip-pako.js.map +1 -1
  108. package/dist/unzip.js +1 -1
  109. package/dist/unzip.js.map +1 -1
  110. package/errors.js +11 -62
  111. package/esm/craiIndex.d.ts +19 -12
  112. package/esm/craiIndex.js +8 -24
  113. package/esm/craiIndex.js.map +1 -1
  114. package/esm/cramFile/codecs/_base.d.ts +26 -5
  115. package/esm/cramFile/codecs/_base.js +1 -35
  116. package/esm/cramFile/codecs/_base.js.map +1 -1
  117. package/esm/cramFile/codecs/beta.d.ts +7 -3
  118. package/esm/cramFile/codecs/beta.js +4 -3
  119. package/esm/cramFile/codecs/beta.js.map +1 -1
  120. package/esm/cramFile/codecs/byteArrayLength.d.ts +13 -7
  121. package/esm/cramFile/codecs/byteArrayLength.js +1 -1
  122. package/esm/cramFile/codecs/byteArrayLength.js.map +1 -1
  123. package/esm/cramFile/codecs/byteArrayStop.d.ts +9 -5
  124. package/esm/cramFile/codecs/byteArrayStop.js +7 -9
  125. package/esm/cramFile/codecs/byteArrayStop.js.map +1 -1
  126. package/esm/cramFile/codecs/dataSeriesTypes.d.ts +4 -0
  127. package/esm/cramFile/codecs/dataSeriesTypes.js +2 -0
  128. package/esm/cramFile/codecs/dataSeriesTypes.js.map +1 -0
  129. package/esm/cramFile/codecs/external.d.ts +10 -6
  130. package/esm/cramFile/codecs/external.js +4 -3
  131. package/esm/cramFile/codecs/external.js.map +1 -1
  132. package/esm/cramFile/codecs/gamma.d.ts +7 -3
  133. package/esm/cramFile/codecs/gamma.js +5 -4
  134. package/esm/cramFile/codecs/gamma.js.map +1 -1
  135. package/esm/cramFile/codecs/getBits.d.ts +7 -0
  136. package/esm/cramFile/codecs/getBits.js +21 -0
  137. package/esm/cramFile/codecs/getBits.js.map +1 -0
  138. package/esm/cramFile/codecs/huffman.d.ts +17 -13
  139. package/esm/cramFile/codecs/huffman.js +22 -9
  140. package/esm/cramFile/codecs/huffman.js.map +1 -1
  141. package/esm/cramFile/codecs/index.d.ts +4 -2
  142. package/esm/cramFile/codecs/index.js +1 -1
  143. package/esm/cramFile/codecs/index.js.map +1 -1
  144. package/esm/cramFile/codecs/subexp.d.ts +7 -3
  145. package/esm/cramFile/codecs/subexp.js +7 -5
  146. package/esm/cramFile/codecs/subexp.js.map +1 -1
  147. package/esm/cramFile/constants.d.ts +35 -35
  148. package/esm/cramFile/constants.js.map +1 -1
  149. package/esm/cramFile/container/compressionScheme.d.ts +57 -11
  150. package/esm/cramFile/container/compressionScheme.js +15 -8
  151. package/esm/cramFile/container/compressionScheme.js.map +1 -1
  152. package/esm/cramFile/container/index.d.ts +23 -9
  153. package/esm/cramFile/container/index.js +11 -9
  154. package/esm/cramFile/container/index.js.map +1 -1
  155. package/esm/cramFile/encoding.d.ts +78 -0
  156. package/esm/cramFile/encoding.js +2 -0
  157. package/esm/cramFile/encoding.js.map +1 -0
  158. package/esm/cramFile/file.d.ts +91 -41
  159. package/esm/cramFile/file.js +59 -47
  160. package/esm/cramFile/file.js.map +1 -1
  161. package/esm/cramFile/filehandle.d.ts +2 -0
  162. package/esm/cramFile/filehandle.js +2 -0
  163. package/esm/cramFile/filehandle.js.map +1 -0
  164. package/esm/cramFile/index.d.ts +1 -1
  165. package/esm/cramFile/index.js.map +1 -1
  166. package/esm/cramFile/record.d.ts +61 -17
  167. package/esm/cramFile/record.js +83 -5
  168. package/esm/cramFile/record.js.map +1 -1
  169. package/esm/cramFile/sectionParsers.d.ts +99 -8
  170. package/esm/cramFile/sectionParsers.js +7 -17
  171. package/esm/cramFile/sectionParsers.js.map +1 -1
  172. package/esm/cramFile/slice/decodeRecord.d.ts +30 -2
  173. package/esm/cramFile/slice/decodeRecord.js +102 -70
  174. package/esm/cramFile/slice/decodeRecord.js.map +1 -1
  175. package/esm/cramFile/slice/index.d.ts +21 -14
  176. package/esm/cramFile/slice/index.js +77 -38
  177. package/esm/cramFile/slice/index.js.map +1 -1
  178. package/esm/cramFile/util.d.ts +11 -5
  179. package/esm/cramFile/util.js +11 -82
  180. package/esm/cramFile/util.js.map +1 -1
  181. package/esm/errors.d.ts +5 -10
  182. package/esm/errors.js +0 -5
  183. package/esm/errors.js.map +1 -1
  184. package/esm/index.d.ts +3 -3
  185. package/esm/index.js.map +1 -1
  186. package/esm/indexedCramFile.d.ts +37 -12
  187. package/esm/indexedCramFile.js +19 -8
  188. package/esm/indexedCramFile.js.map +1 -1
  189. package/esm/io/index.d.ts +5 -5
  190. package/esm/io/index.js +3 -3
  191. package/esm/io/index.js.map +1 -1
  192. package/esm/sam.d.ts +8 -1
  193. package/esm/sam.js.map +1 -1
  194. package/esm/typescript.d.ts +3 -0
  195. package/esm/typescript.js +7 -0
  196. package/esm/typescript.js.map +1 -0
  197. package/package.json +18 -11
  198. package/src/{craiIndex.js → craiIndex.ts} +37 -31
  199. package/src/cramFile/codecs/_base.ts +45 -0
  200. package/src/cramFile/codecs/beta.ts +34 -0
  201. package/src/cramFile/codecs/{byteArrayLength.js → byteArrayLength.ts} +27 -5
  202. package/src/cramFile/codecs/{byteArrayStop.js → byteArrayStop.ts} +25 -12
  203. package/src/cramFile/codecs/dataSeriesTypes.ts +39 -0
  204. package/src/cramFile/codecs/{external.js → external.ts} +28 -12
  205. package/src/cramFile/codecs/gamma.ts +42 -0
  206. package/src/cramFile/codecs/getBits.ts +28 -0
  207. package/src/cramFile/codecs/{huffman.js → huffman.ts} +48 -15
  208. package/src/cramFile/codecs/{index.js → index.ts} +9 -3
  209. package/src/cramFile/codecs/subexp.ts +45 -0
  210. package/src/cramFile/{constants.js → constants.ts} +0 -0
  211. package/src/cramFile/container/{compressionScheme.js → compressionScheme.ts} +50 -18
  212. package/src/cramFile/container/{index.js → index.ts} +13 -13
  213. package/src/cramFile/encoding.ts +98 -0
  214. package/src/cramFile/{file.js → file.ts} +136 -62
  215. package/src/cramFile/filehandle.ts +3 -0
  216. package/src/cramFile/{index.js → index.ts} +0 -0
  217. package/src/cramFile/{record.js → record.ts} +185 -14
  218. package/src/cramFile/{sectionParsers.js → sectionParsers.ts} +148 -20
  219. package/src/cramFile/slice/{decodeRecord.js → decodeRecord.ts} +158 -105
  220. package/src/cramFile/slice/{index.js → index.ts} +138 -63
  221. package/src/cramFile/{util.js → util.ts} +28 -17
  222. package/src/{errors.js → errors.ts} +0 -5
  223. package/src/{index.js → index.ts} +0 -0
  224. package/src/{indexedCramFile.js → indexedCramFile.ts} +79 -19
  225. package/src/io/{index.js → index.ts} +10 -5
  226. package/src/{sam.js → sam.ts} +7 -2
  227. package/src/typescript.ts +17 -0
  228. package/src/typings/binary-parser.d.ts +44 -0
  229. package/src/typings/bzip2.d.ts +7 -0
  230. package/src/typings/htscodecs.d.ts +6 -0
  231. package/dist/io/bufferCache.d.ts +0 -12
  232. package/dist/io/bufferCache.js +0 -112
  233. package/dist/io/bufferCache.js.map +0 -1
  234. package/dist/io/localFile.d.ts +0 -10
  235. package/dist/io/localFile.js +0 -108
  236. package/dist/io/localFile.js.map +0 -1
  237. package/dist/io/remoteFile.d.ts +0 -16
  238. package/dist/io/remoteFile.js +0 -143
  239. package/dist/io/remoteFile.js.map +0 -1
  240. package/esm/io/bufferCache.d.ts +0 -12
  241. package/esm/io/bufferCache.js +0 -54
  242. package/esm/io/bufferCache.js.map +0 -1
  243. package/esm/io/localFile.d.ts +0 -10
  244. package/esm/io/localFile.js +0 -31
  245. package/esm/io/localFile.js.map +0 -1
  246. package/esm/io/remoteFile.d.ts +0 -16
  247. package/esm/io/remoteFile.js +0 -64
  248. package/esm/io/remoteFile.js.map +0 -1
  249. package/src/cramFile/codecs/_base.js +0 -49
  250. package/src/cramFile/codecs/beta.js +0 -23
  251. package/src/cramFile/codecs/gamma.js +0 -30
  252. package/src/cramFile/codecs/subexp.js +0 -32
  253. package/src/io/bufferCache.js +0 -66
  254. package/src/io/localFile.js +0 -35
  255. package/src/io/remoteFile.js +0 -71
@@ -1,63 +1,113 @@
1
+ /// <reference types="node" />
2
+ import QuickLRU from 'quick-lru';
3
+ import { BlockHeader, CompressionMethod } from './sectionParsers';
4
+ import CramContainer from './container';
5
+ import { Parser } from '@gmod/binary-parser';
6
+ import CramRecord from './record';
7
+ import { Filehandle } from './filehandle';
8
+ export declare type CramFileSource = {
9
+ filehandle?: Filehandle;
10
+ url?: string;
11
+ path?: string;
12
+ };
13
+ export declare type SeqFetch = (seqId: number, start: number, end: number) => Promise<string>;
14
+ export declare type CramFileArgs = CramFileSource & {
15
+ checkSequenceMD5: boolean;
16
+ cacheSize?: number;
17
+ seqFetch: SeqFetch;
18
+ };
19
+ export declare type CramFileBlock = BlockHeader & {
20
+ _endPosition: number;
21
+ contentPosition: number;
22
+ _size: number;
23
+ content: Buffer;
24
+ crc32?: number;
25
+ };
1
26
  export default class CramFile {
2
- /**
3
- * @param {object} args
4
- * @param {object} [args.filehandle] - a filehandle that implements the stat() and
5
- * read() methods of the Node filehandle API https://nodejs.org/api/fs.html#fs_class_filehandle
6
- * @param {object} [args.path] - path to the cram file
7
- * @param {object} [args.url] - url for the cram file. also supports file:// urls for local files
8
- * @param {function} [args.seqFetch] - a function with signature
9
- * `(seqId, startCoordinate, endCoordinate)` that returns a promise for a string of sequence bases
10
- * @param {number} [args.cacheSize] optional maximum number of CRAM records to cache. default 20,000
11
- * @param {boolean} [args.checkSequenceMD5] - default true. if false, disables verifying the MD5
12
- * checksum of the reference sequence underlying a slice. In some applications, this check can cause an inconvenient amount (many megabases) of sequences to be fetched.
13
- */
14
- constructor(args: {
15
- filehandle?: object | undefined;
16
- path?: object | undefined;
17
- url?: object | undefined;
18
- seqFetch?: Function | undefined;
19
- cacheSize?: number | undefined;
20
- checkSequenceMD5?: boolean | undefined;
21
- });
22
- file: any;
27
+ private file;
23
28
  validateChecksums: boolean;
24
- fetchReferenceSequenceCallback: Function | undefined;
29
+ fetchReferenceSequenceCallback: SeqFetch;
25
30
  options: {
26
31
  checkSequenceMD5: boolean;
27
32
  cacheSize: number;
28
33
  };
29
- featureCache: any;
30
- toString(): any;
31
- read(buffer: any, offset: any, length: any, position: any): any;
32
- stat(): any;
34
+ featureCache: QuickLRU<string, Promise<CramRecord[]>>;
35
+ private header;
36
+ constructor(args: CramFileArgs);
37
+ read(buffer: Buffer, offset: number, length: number, position: number): Promise<{
38
+ bytesRead: number;
39
+ buffer: Buffer;
40
+ }>;
41
+ stat(): Promise<import("generic-filehandle").Stats>;
33
42
  getDefinition(): Promise<any>;
34
- getSamHeader(): Promise<any[]>;
35
- header: any;
36
- getHeaderText(): Promise<any>;
43
+ getSamHeader(): Promise<import("../sam").HeaderDataItem[]>;
44
+ getHeaderText(): Promise<string | undefined>;
37
45
  getSectionParsers(): Promise<{
38
46
  cramFileDefinition: {
39
- parser: any;
47
+ parser: Parser<{
48
+ magic: string;
49
+ majorVersion: number;
50
+ minorVersion: number;
51
+ fileId: string;
52
+ }>;
53
+ maxLength: number;
54
+ };
55
+ cramContainerHeader1: {
56
+ parser: Parser<{
57
+ length: number;
58
+ refSeqId: number;
59
+ refSeqStart: number;
60
+ alignmentSpan: number;
61
+ numRecords: number;
62
+ recordCounter: number;
63
+ numBases: number;
64
+ numBlocks: number;
65
+ numLandmarks: number;
66
+ }>;
40
67
  maxLength: number;
41
68
  };
69
+ cramContainerHeader2: {
70
+ parser: Parser<{
71
+ numLandmarks: number;
72
+ landmarks: number[];
73
+ crc32: number;
74
+ }>;
75
+ maxLength: (x: number) => number;
76
+ };
42
77
  cramBlockHeader: {
43
- parser: any;
78
+ parser: Parser<BlockHeader>;
44
79
  maxLength: number;
45
80
  };
46
81
  cramBlockCrc32: {
47
- parser: any;
82
+ parser: Parser<{
83
+ crc32: number;
84
+ }>;
48
85
  maxLength: number;
49
86
  };
87
+ cramCompressionHeader: {
88
+ parser: Parser<import("./sectionParsers").CramCompressionHeader>;
89
+ };
90
+ cramMappedSliceHeader: {
91
+ parser: Parser<import("./sectionParsers").MappedSliceHeader>;
92
+ maxLength: (numContentIds: number) => number;
93
+ };
94
+ cramUnmappedSliceHeader: {
95
+ parser: Parser<import("./sectionParsers").UnmappedSliceHeader>;
96
+ maxLength: (numContentIds: number) => number;
97
+ };
50
98
  }>;
51
- getContainerById(containerNumber: any): Promise<CramContainer | undefined>;
52
- checkCrc32(position: any, length: any, recordedCrc32: any, description: any): Promise<void>;
99
+ getContainerById(containerNumber: number): Promise<CramContainer | undefined>;
100
+ checkCrc32(position: number, length: number, recordedCrc32: number, description: string): Promise<void>;
53
101
  /**
54
102
  * @returns {Promise[number]} the number of containers in the file
55
103
  */
56
- containerCount(): any;
57
- getContainerAtPosition(position: any): CramContainer;
58
- readBlockHeader(position: any): Promise<any>;
59
- _parseSection(section: any, position: any, size: any, preReadBuffer: any): Promise<any>;
60
- _uncompress(compressionMethod: any, inputBuffer: any, outputBuffer: any): void;
61
- readBlock(position: any): Promise<any>;
104
+ containerCount(): Promise<number | undefined>;
105
+ getContainerAtPosition(position: number): CramContainer;
106
+ readBlockHeader(position: number): Promise<import("./util").ParsedItem<BlockHeader> | undefined>;
107
+ _parseSection<T>(section: {
108
+ parser: Parser<T>;
109
+ maxLength: number;
110
+ }, position: number, size?: number, preReadBuffer?: undefined): Promise<import("./util").ParsedItem<T> | undefined>;
111
+ _uncompress(compressionMethod: CompressionMethod, inputBuffer: Buffer, outputBuffer: Buffer): void;
112
+ readBlock(position: number): Promise<CramFileBlock | undefined>;
62
113
  }
63
- import CramContainer from "./container";
@@ -1,7 +1,7 @@
1
1
  import { unzip } from '../unzip';
2
2
  import crc32 from 'buffer-crc32';
3
- import LRU from 'quick-lru';
4
- import { CramUnimplementedError, CramMalformedError } from '../errors';
3
+ import QuickLRU from 'quick-lru';
4
+ import { CramMalformedError, CramUnimplementedError } from '../errors';
5
5
  import ransuncompress from '../rans';
6
6
  import { cramFileDefinition as cramFileDefinitionParser, getSectionParsers, } from './sectionParsers';
7
7
  import htscodecs from '@jkbonfield/htscodecs';
@@ -11,8 +11,8 @@ import { parseItem, tinyMemoize } from './util';
11
11
  import { parseHeaderText } from '../sam';
12
12
  //source:https://abdulapopoola.com/2019/01/20/check-endianness-with-javascript/
13
13
  function getEndianness() {
14
- let uInt32 = new Uint32Array([0x11223344]);
15
- let uInt8 = new Uint8Array(uInt32.buffer);
14
+ const uInt32 = new Uint32Array([0x11223344]);
15
+ const uInt8 = new Uint8Array(uInt32.buffer);
16
16
  if (uInt8[0] === 0x44) {
17
17
  return 0; //little-endian
18
18
  }
@@ -24,46 +24,36 @@ function getEndianness() {
24
24
  }
25
25
  }
26
26
  export default class CramFile {
27
- /**
28
- * @param {object} args
29
- * @param {object} [args.filehandle] - a filehandle that implements the stat() and
30
- * read() methods of the Node filehandle API https://nodejs.org/api/fs.html#fs_class_filehandle
31
- * @param {object} [args.path] - path to the cram file
32
- * @param {object} [args.url] - url for the cram file. also supports file:// urls for local files
33
- * @param {function} [args.seqFetch] - a function with signature
34
- * `(seqId, startCoordinate, endCoordinate)` that returns a promise for a string of sequence bases
35
- * @param {number} [args.cacheSize] optional maximum number of CRAM records to cache. default 20,000
36
- * @param {boolean} [args.checkSequenceMD5] - default true. if false, disables verifying the MD5
37
- * checksum of the reference sequence underlying a slice. In some applications, this check can cause an inconvenient amount (many megabases) of sequences to be fetched.
38
- */
39
27
  constructor(args) {
28
+ var _a;
40
29
  this.file = open(args.url, args.path, args.filehandle);
41
30
  this.validateChecksums = true;
42
31
  this.fetchReferenceSequenceCallback = args.seqFetch;
43
32
  this.options = {
44
- checkSequenceMD5: args.checkSequenceMD5 !== false,
45
- cacheSize: args.cacheSize !== undefined ? args.cacheSize : 20000,
33
+ checkSequenceMD5: args.checkSequenceMD5,
34
+ cacheSize: (_a = args.cacheSize) !== null && _a !== void 0 ? _a : 20000,
46
35
  };
47
36
  // cache of features in a slice, keyed by the
48
37
  // slice offset. caches all of the features in a slice, or none.
49
38
  // the cache is actually used by the slice object, it's just
50
39
  // kept here at the level of the file
51
- this.featureCache = new LRU({
40
+ this.featureCache = new QuickLRU({
52
41
  maxSize: this.options.cacheSize,
53
42
  });
54
43
  if (getEndianness() > 0) {
55
44
  throw new Error('Detected big-endian machine, may be unable to run');
56
45
  }
57
46
  }
58
- toString() {
59
- if (this.file.filename) {
60
- return this.file.filename;
61
- }
62
- if (this.file.url) {
63
- return this.file.url;
64
- }
65
- return '(cram file)';
66
- }
47
+ // toString() {
48
+ // if (this.file.filename) {
49
+ // return this.file.filename
50
+ // }
51
+ // if (this.file.url) {
52
+ // return this.file.url
53
+ // }
54
+ //
55
+ // return '(cram file)'
56
+ // }
67
57
  // can just read this object like a filehandle
68
58
  read(buffer, offset, length, position) {
69
59
  return this.file.read(buffer, offset, length, position);
@@ -76,7 +66,8 @@ export default class CramFile {
76
66
  async getDefinition() {
77
67
  const headbytes = Buffer.allocUnsafe(cramFileDefinitionParser.maxLength);
78
68
  await this.file.read(headbytes, 0, cramFileDefinitionParser.maxLength, 0);
79
- const definition = cramFileDefinitionParser.parser.parse(headbytes).result;
69
+ const definition = cramFileDefinitionParser.parser.parse(headbytes)
70
+ .result;
80
71
  if (definition.majorVersion !== 2 && definition.majorVersion !== 3) {
81
72
  throw new CramUnimplementedError(`CRAM version ${definition.majorVersion} not supported`);
82
73
  }
@@ -88,7 +79,11 @@ export default class CramFile {
88
79
  if (!firstContainer) {
89
80
  throw new CramMalformedError('file contains no containers');
90
81
  }
91
- const { content } = await firstContainer.getFirstBlock();
82
+ const firstBlock = await firstContainer.getFirstBlock();
83
+ if (firstBlock === undefined) {
84
+ return parseHeaderText('');
85
+ }
86
+ const content = firstBlock.content;
92
87
  // find the end of the trailing zeros in the header text
93
88
  const headerLength = content.readInt32LE(0);
94
89
  const textStart = 4;
@@ -134,6 +129,9 @@ export default class CramFile {
134
129
  position = currentHeader._endPosition;
135
130
  for (let j = 0; j < currentHeader.numBlocks; j += 1) {
136
131
  const block = await this.readBlock(position);
132
+ if (block === undefined) {
133
+ return undefined;
134
+ }
137
135
  position = block._endPosition;
138
136
  }
139
137
  }
@@ -173,6 +171,9 @@ export default class CramFile {
173
171
  position = currentHeader._endPosition;
174
172
  for (let j = 0; j < currentHeader.numBlocks; j += 1) {
175
173
  const block = await this.readBlock(position);
174
+ if (block === undefined) {
175
+ return undefined;
176
+ }
176
177
  position = block._endPosition;
177
178
  }
178
179
  }
@@ -198,7 +199,7 @@ export default class CramFile {
198
199
  await this.file.read(buffer, 0, cramBlockHeader.maxLength, position);
199
200
  return parseItem(buffer, cramBlockHeader.parser, 0, position);
200
201
  }
201
- async _parseSection(section, position, size = section.maxLength, preReadBuffer) {
202
+ async _parseSection(section, position, size = section.maxLength, preReadBuffer = undefined) {
202
203
  let buffer;
203
204
  if (preReadBuffer) {
204
205
  buffer = preReadBuffer;
@@ -223,11 +224,12 @@ export default class CramFile {
223
224
  result.copy(outputBuffer);
224
225
  }
225
226
  else if (compressionMethod === 'bzip2') {
226
- var bits = bzip2.array(inputBuffer);
227
- var size = bzip2.header(bits);
228
- var j = 0;
227
+ const bits = bzip2.array(inputBuffer);
228
+ let size = bzip2.header(bits);
229
+ let j = 0;
230
+ let chunk;
229
231
  do {
230
- var chunk = bzip2.decompress(bits, size);
232
+ chunk = bzip2.decompress(bits, size);
231
233
  if (chunk != -1) {
232
234
  Buffer.from(chunk).copy(outputBuffer, j);
233
235
  j += chunk.length;
@@ -259,26 +261,36 @@ export default class CramFile {
259
261
  async readBlock(position) {
260
262
  const { majorVersion } = await this.getDefinition();
261
263
  const sectionParsers = await this.getSectionParsers();
262
- const block = await this.readBlockHeader(position);
263
- const blockContentPosition = block._endPosition;
264
- block.contentPosition = block._endPosition;
265
- const uncompressedData = Buffer.allocUnsafe(block.uncompressedSize);
266
- if (block.compressionMethod !== 'raw') {
267
- const compressedData = Buffer.allocUnsafe(block.compressedSize);
268
- await this.read(compressedData, 0, block.compressedSize, blockContentPosition);
269
- this._uncompress(block.compressionMethod, compressedData, uncompressedData);
264
+ const blockHeader = await this.readBlockHeader(position);
265
+ if (blockHeader === undefined) {
266
+ return undefined;
267
+ }
268
+ const blockContentPosition = blockHeader._endPosition;
269
+ const uncompressedData = Buffer.allocUnsafe(blockHeader.uncompressedSize);
270
+ const block = {
271
+ ...blockHeader,
272
+ _endPosition: blockContentPosition,
273
+ contentPosition: blockContentPosition,
274
+ content: uncompressedData,
275
+ };
276
+ if (blockHeader.compressionMethod !== 'raw') {
277
+ const compressedData = Buffer.allocUnsafe(blockHeader.compressedSize);
278
+ await this.read(compressedData, 0, blockHeader.compressedSize, blockContentPosition);
279
+ this._uncompress(blockHeader.compressionMethod, compressedData, uncompressedData);
270
280
  }
271
281
  else {
272
- await this.read(uncompressedData, 0, block.uncompressedSize, blockContentPosition);
282
+ await this.read(uncompressedData, 0, blockHeader.uncompressedSize, blockContentPosition);
273
283
  }
274
- block.content = uncompressedData;
275
284
  if (majorVersion >= 3) {
276
285
  // parse the crc32
277
- const crc = await this._parseSection(sectionParsers.cramBlockCrc32, blockContentPosition + block.compressedSize);
286
+ const crc = await this._parseSection(sectionParsers.cramBlockCrc32, blockContentPosition + blockHeader.compressedSize);
287
+ if (crc === undefined) {
288
+ return undefined;
289
+ }
278
290
  block.crc32 = crc.crc32;
279
291
  // check the block data crc32
280
292
  if (this.validateChecksums) {
281
- await this.checkCrc32(position, block._size + block.compressedSize, block.crc32, 'block data');
293
+ await this.checkCrc32(position, blockHeader._size + blockHeader.compressedSize, crc.crc32, 'block data');
282
294
  }
283
295
  // make the endposition and size reflect the whole block
284
296
  block._endPosition = crc._endPosition;
@@ -1 +1 @@
1
- {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/cramFile/file.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/cramFile/file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { GenericFilehandle } from 'generic-filehandle';
2
+ export { GenericFilehandle as Filehandle };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=filehandle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filehandle.js","sourceRoot":"","sources":["../../src/cramFile/filehandle.ts"],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
+ import CramFile from './file';
1
2
  export default CramFile;
2
- import CramFile from "./file";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cramFile/index.js"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,QAAQ,CAAA;AAE7B,eAAe,QAAQ,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cramFile/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,QAAQ,CAAA;AAE7B,eAAe,QAAQ,CAAA"}
@@ -1,8 +1,63 @@
1
+ import CramContainerCompressionScheme from './container/compressionScheme';
2
+ import decodeRecord from './slice/decodeRecord';
3
+ export declare type RefRegion = {
4
+ start: number;
5
+ end: number;
6
+ seq: string;
7
+ };
8
+ export declare type ReadFeature = {
9
+ code: string;
10
+ pos: number;
11
+ refPos: number;
12
+ data: any;
13
+ ref?: string;
14
+ sub?: string;
15
+ };
16
+ export declare type MateRecord = {
17
+ readName?: string;
18
+ sequenceId: number;
19
+ alignmentStart: number;
20
+ flags?: number;
21
+ uniqueId?: number;
22
+ };
23
+ export declare const BamFlags: readonly [readonly [1, "Paired"], readonly [2, "ProperlyPaired"], readonly [4, "SegmentUnmapped"], readonly [8, "MateUnmapped"], readonly [16, "ReverseComplemented"], readonly [32, "MateReverseComplemented"], readonly [64, "Read1"], readonly [128, "Read2"], readonly [256, "Secondary"], readonly [512, "FailedQc"], readonly [1024, "Duplicate"], readonly [2048, "Supplementary"]];
24
+ export declare const CramFlags: readonly [readonly [1, "PreservingQualityScores"], readonly [2, "Detached"], readonly [4, "WithMateDownstream"], readonly [8, "DecodeSequenceAsStar"]];
25
+ export declare const MateFlags: readonly [readonly [1, "OnNegativeStrand"], readonly [2, "Unmapped"]];
26
+ declare type FlagsDecoder<Type> = {
27
+ [Property in Type as `is${Capitalize<string & Property>}`]: (flags: number) => boolean;
28
+ };
29
+ declare type FlagsEncoder<Type> = {
30
+ [Property in Type as `set${Capitalize<string & Property>}`]: (flags: number) => number;
31
+ };
32
+ export declare const BamFlagsDecoder: FlagsDecoder<"Paired" | "ProperlyPaired" | "SegmentUnmapped" | "MateUnmapped" | "ReverseComplemented" | "MateReverseComplemented" | "Read1" | "Read2" | "Secondary" | "FailedQc" | "Duplicate" | "Supplementary"> & FlagsEncoder<"Paired" | "ProperlyPaired" | "SegmentUnmapped" | "MateUnmapped" | "ReverseComplemented" | "MateReverseComplemented" | "Read1" | "Read2" | "Secondary" | "FailedQc" | "Duplicate" | "Supplementary">;
33
+ export declare const CramFlagsDecoder: FlagsDecoder<"PreservingQualityScores" | "Detached" | "WithMateDownstream" | "DecodeSequenceAsStar"> & FlagsEncoder<"PreservingQualityScores" | "Detached" | "WithMateDownstream" | "DecodeSequenceAsStar">;
34
+ export declare const MateFlagsDecoder: FlagsDecoder<"OnNegativeStrand" | "Unmapped"> & FlagsEncoder<"OnNegativeStrand" | "Unmapped">;
1
35
  /**
2
36
  * Class of each CRAM record returned by this API.
3
37
  */
4
38
  export default class CramRecord {
5
- tags: {};
39
+ tags: Record<string, string>;
40
+ flags: number;
41
+ cramFlags: number;
42
+ readBases?: string | null;
43
+ _refRegion?: RefRegion;
44
+ readFeatures?: ReadFeature[];
45
+ alignmentStart: number;
46
+ lengthOnRef: number | undefined;
47
+ readLength: number;
48
+ templateLength?: number;
49
+ templateSize?: number;
50
+ readName?: string;
51
+ mateRecordNumber?: number;
52
+ mate?: MateRecord;
53
+ uniqueId: number;
54
+ sequenceId: number;
55
+ readGroupId: number;
56
+ mappingQuality: number | undefined;
57
+ qualityScores: number[] | null | undefined;
58
+ constructor({ flags, cramFlags, readLength, mappingQuality, lengthOnRef, qualityScores, mateRecordNumber, readBases, readFeatures, mateToUse, readGroupId, readName, sequenceId, uniqueId, templateSize, alignmentStart, tags, }: ReturnType<typeof decodeRecord> & {
59
+ uniqueId: number;
60
+ });
6
61
  /**
7
62
  * @returns {boolean} true if the read is paired, regardless of whether both segments are mapped
8
63
  */
@@ -43,13 +98,12 @@ export default class CramRecord {
43
98
  * Get the original sequence of this read.
44
99
  * @returns {String} sequence basepairs
45
100
  */
46
- getReadBases(): string;
47
- readBases: any;
101
+ getReadBases(): string | null | undefined;
48
102
  /**
49
103
  * Get the pair orientation of a paired read. Adapted from igv.js
50
104
  * @returns {String} of paired orientatin
51
105
  */
52
- getPairOrientation(): string;
106
+ getPairOrientation(): string | null;
53
107
  /**
54
108
  * Annotates this feature with the given reference sequence basepair
55
109
  * information. This will add a `sub` and a `ref` item to base
@@ -63,17 +117,7 @@ export default class CramRecord {
63
117
  * @param {CramContainerCompressionScheme} compressionScheme
64
118
  * @returns {undefined} nothing
65
119
  */
66
- addReferenceSequence(refRegion: {
67
- start: number;
68
- end: number;
69
- seq: string;
70
- }, compressionScheme: CramContainerCompressionScheme): undefined;
71
- _refRegion: {
72
- start: number;
73
- end: number;
74
- seq: string;
75
- } | undefined;
76
- toJSON(): {
77
- readBases: string;
78
- };
120
+ addReferenceSequence(refRegion: RefRegion, compressionScheme: CramContainerCompressionScheme): void;
121
+ toJSON(): any;
79
122
  }
123
+ export {};
@@ -2,10 +2,10 @@ import Constants from './constants';
2
2
  function decodeReadSequence(cramRecord, refRegion) {
3
3
  // if it has no length, it has no sequence
4
4
  if (!cramRecord.lengthOnRef && !cramRecord.readLength) {
5
- return undefined;
5
+ return null;
6
6
  }
7
7
  if (cramRecord.isUnknownBases()) {
8
- return undefined;
8
+ return null;
9
9
  }
10
10
  // remember: all coordinates are 1-based closed
11
11
  const regionSeqOffset = cramRecord.alignmentStart - refRegion.start;
@@ -122,12 +122,84 @@ function decodeBaseSubstitution(cramRecord, refRegion, compressionScheme, readFe
122
122
  readFeature.sub = base;
123
123
  }
124
124
  }
125
+ export const BamFlags = [
126
+ [0x1, 'Paired'],
127
+ [0x2, 'ProperlyPaired'],
128
+ [0x4, 'SegmentUnmapped'],
129
+ [0x8, 'MateUnmapped'],
130
+ [0x10, 'ReverseComplemented'],
131
+ // the mate is mapped to the reverse strand
132
+ [0x20, 'MateReverseComplemented'],
133
+ // this is read1
134
+ [0x40, 'Read1'],
135
+ // this is read2
136
+ [0x80, 'Read2'],
137
+ // not primary alignment
138
+ [0x100, 'Secondary'],
139
+ // QC failure
140
+ [0x200, 'FailedQc'],
141
+ // optical or PCR duplicate
142
+ [0x400, 'Duplicate'],
143
+ // supplementary alignment
144
+ [0x800, 'Supplementary'],
145
+ ];
146
+ export const CramFlags = [
147
+ [0x1, 'PreservingQualityScores'],
148
+ [0x2, 'Detached'],
149
+ [0x4, 'WithMateDownstream'],
150
+ [0x8, 'DecodeSequenceAsStar'],
151
+ ];
152
+ export const MateFlags = [
153
+ [0x1, 'OnNegativeStrand'],
154
+ [0x2, 'Unmapped'],
155
+ ];
156
+ function makeFlagsHelper(x) {
157
+ const r = {};
158
+ for (const [code, name] of x) {
159
+ r['is' + name] = (flags) => !!(flags & code);
160
+ r['set' + name] = (flags) => flags | code;
161
+ }
162
+ return r;
163
+ }
164
+ export const BamFlagsDecoder = makeFlagsHelper(BamFlags);
165
+ export const CramFlagsDecoder = makeFlagsHelper(CramFlags);
166
+ export const MateFlagsDecoder = makeFlagsHelper(MateFlags);
125
167
  /**
126
168
  * Class of each CRAM record returned by this API.
127
169
  */
128
170
  export default class CramRecord {
129
- constructor() {
130
- this.tags = {};
171
+ constructor({ flags, cramFlags, readLength, mappingQuality, lengthOnRef, qualityScores, mateRecordNumber, readBases, readFeatures, mateToUse, readGroupId, readName, sequenceId, uniqueId, templateSize, alignmentStart, tags, }) {
172
+ this.flags = flags;
173
+ this.cramFlags = cramFlags;
174
+ this.readLength = readLength;
175
+ this.mappingQuality = mappingQuality;
176
+ this.lengthOnRef = lengthOnRef;
177
+ this.qualityScores = qualityScores;
178
+ if (readBases) {
179
+ this.readBases = readBases;
180
+ }
181
+ this.readGroupId = readGroupId;
182
+ this.readName = readName;
183
+ this.sequenceId = sequenceId;
184
+ this.uniqueId = uniqueId;
185
+ this.templateSize = templateSize;
186
+ this.alignmentStart = alignmentStart;
187
+ this.tags = tags;
188
+ // backwards compatibility
189
+ if (readFeatures) {
190
+ this.readFeatures = readFeatures;
191
+ }
192
+ if (mateToUse) {
193
+ this.mate = {
194
+ flags: mateToUse.mateFlags,
195
+ readName: mateToUse.mateReadName,
196
+ sequenceId: mateToUse.mateSequenceId,
197
+ alignmentStart: mateToUse.mateAlignmentStart,
198
+ };
199
+ }
200
+ if (mateRecordNumber) {
201
+ this.mateRecordNumber = mateRecordNumber;
202
+ }
131
203
  }
132
204
  /**
133
205
  * @returns {boolean} true if the read is paired, regardless of whether both segments are mapped
@@ -203,7 +275,10 @@ export default class CramRecord {
203
275
  */
204
276
  getReadBases() {
205
277
  if (!this.readBases && this._refRegion) {
206
- this.readBases = decodeReadSequence(this, this._refRegion);
278
+ const decoded = decodeReadSequence(this, this._refRegion);
279
+ if (decoded) {
280
+ this.readBases = decoded;
281
+ }
207
282
  }
208
283
  return this.readBases;
209
284
  }
@@ -231,6 +306,9 @@ export default class CramRecord {
231
306
  }
232
307
  const tmp = [];
233
308
  let isize = this.templateLength || this.templateSize;
309
+ if (isize === undefined) {
310
+ throw new Error('One of templateSize and templateLength must be set');
311
+ }
234
312
  if (this.alignmentStart > this.mate.alignmentStart && isize > 0) {
235
313
  isize = -isize;
236
314
  }