@gmod/bbi 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
- ## [2.0.2](https://github.com/GMOD/bbi-js/compare/v2.0.1...v2.0.2) (2022-07-18)
1
+ ## [2.0.3](https://github.com/GMOD/bbi-js/compare/v2.0.2...v2.0.3) (2022-10-10)
2
+
2
3
 
3
4
 
5
+ - Add BigInt64 polyfill for older safari
6
+
7
+ ## [2.0.2](https://github.com/GMOD/bbi-js/compare/v2.0.1...v2.0.2) (2022-07-18)
4
8
 
5
9
  - Make basesCovered a number instead of BigInt
6
10
 
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var pure_1 = require("./pure");
4
+ if (!('getBigInt64' in DataView)) {
5
+ DataView.prototype.getBigInt64 = function (byteOffset, littleEndian) {
6
+ return (0, pure_1.getBigInt64)(this, byteOffset, littleEndian);
7
+ };
8
+ }
9
+ if (!('getBigUint64' in DataView)) {
10
+ DataView.prototype.getBigUint64 = function (byteOffset, littleEndian) {
11
+ return (0, pure_1.getBigUint64)(this, byteOffset, littleEndian);
12
+ };
13
+ }
14
+ if (!('setBigInt64' in DataView)) {
15
+ DataView.prototype.setBigInt64 = function (byteOffset, value, littleEndian) {
16
+ (0, pure_1.setBigInt64)(this, byteOffset, value, littleEndian);
17
+ };
18
+ }
19
+ if (!('setBigUint64' in DataView)) {
20
+ DataView.prototype.setBigUint64 = function (byteOffset, value, littleEndian) {
21
+ (0, pure_1.setBigUint64)(this, byteOffset, value, littleEndian);
22
+ };
23
+ }
24
+ //# sourceMappingURL=polyfill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polyfill.js","sourceRoot":"","sources":["../../src/bigint-polyfill/polyfill.ts"],"names":[],"mappings":";;AAAA,+BAA6E;AAE7E,IAAI,CAAC,CAAC,aAAa,IAAI,QAAQ,CAAC,EAAE;IAChC,QAAQ,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,UAAU,EAAE,YAAY;QACjE,OAAO,IAAA,kBAAW,EAAC,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,CAAA;IACpD,CAAC,CAAA;CACF;AAED,IAAI,CAAC,CAAC,cAAc,IAAI,QAAQ,CAAC,EAAE;IACjC,QAAQ,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,UAAU,EAAE,YAAY;QAClE,OAAO,IAAA,mBAAY,EAAC,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,CAAA;IACrD,CAAC,CAAA;CACF;AAED,IAAI,CAAC,CAAC,aAAa,IAAI,QAAQ,CAAC,EAAE;IAChC,QAAQ,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,UAAU,EAAE,KAAK,EAAE,YAAY;QACxE,IAAA,kBAAW,EAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC,CAAA;IACpD,CAAC,CAAA;CACF;AAED,IAAI,CAAC,CAAC,cAAc,IAAI,QAAQ,CAAC,EAAE;IACjC,QAAQ,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,UAAU,EAAE,KAAK,EAAE,YAAY;QACzE,IAAA,mBAAY,EAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC,CAAA;IACrD,CAAC,CAAA;CACF"}
@@ -0,0 +1,4 @@
1
+ export declare function getBigInt64(dataView: DataView, byteOffset: number, littleEndian: boolean | undefined): bigint;
2
+ export declare function getBigUint64(dataView: DataView, byteOffset: number, littleEndian: boolean | undefined): bigint;
3
+ export declare function setBigInt64(dataView: DataView, byteOffset: number, value: bigint, littleEndian: boolean | undefined): void;
4
+ export declare function setBigUint64(dataView: DataView, byteOffset: number, value: bigint, littleEndian: boolean | undefined): void;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setBigUint64 = exports.setBigInt64 = exports.getBigUint64 = exports.getBigInt64 = void 0;
4
+ var BigInt32 = BigInt(32);
5
+ function getBigInt64(dataView, byteOffset, littleEndian) {
6
+ var littleEndianMask = Number(!!littleEndian);
7
+ var bigEndianMask = Number(!littleEndian);
8
+ return ((BigInt(dataView.getInt32(byteOffset, littleEndian) * bigEndianMask +
9
+ dataView.getInt32(byteOffset + 4, littleEndian) * littleEndianMask) <<
10
+ BigInt32) |
11
+ BigInt(dataView.getUint32(byteOffset, littleEndian) * littleEndianMask +
12
+ dataView.getUint32(byteOffset + 4, littleEndian) * bigEndianMask));
13
+ }
14
+ exports.getBigInt64 = getBigInt64;
15
+ function getBigUint64(dataView, byteOffset, littleEndian) {
16
+ var a = dataView.getUint32(byteOffset, littleEndian);
17
+ var b = dataView.getUint32(byteOffset + 4, littleEndian);
18
+ var littleEndianMask = Number(!!littleEndian);
19
+ var bigEndianMask = Number(!littleEndian);
20
+ // This branch-less optimization is 77x faster than normal ternary operator.
21
+ // and only 3% slower than native implementation
22
+ // https://jsbench.me/p8kyhg1eqv/1
23
+ return ((BigInt(a * bigEndianMask + b * littleEndianMask) << BigInt32) |
24
+ BigInt(a * littleEndianMask + b * bigEndianMask));
25
+ }
26
+ exports.getBigUint64 = getBigUint64;
27
+ function setBigInt64(dataView, byteOffset, value, littleEndian) {
28
+ var hi = Number(value >> BigInt32);
29
+ var lo = Number(value & BigInt(0xffffffff));
30
+ if (littleEndian) {
31
+ dataView.setInt32(byteOffset + 4, hi, littleEndian);
32
+ dataView.setUint32(byteOffset, lo, littleEndian);
33
+ }
34
+ else {
35
+ dataView.setInt32(byteOffset, hi, littleEndian);
36
+ dataView.setUint32(byteOffset + 4, lo, littleEndian);
37
+ }
38
+ }
39
+ exports.setBigInt64 = setBigInt64;
40
+ function setBigUint64(dataView, byteOffset, value, littleEndian) {
41
+ var hi = Number(value >> BigInt32);
42
+ var lo = Number(value & BigInt(0xffffffff));
43
+ if (littleEndian) {
44
+ dataView.setUint32(byteOffset + 4, hi, littleEndian);
45
+ dataView.setUint32(byteOffset, lo, littleEndian);
46
+ }
47
+ else {
48
+ dataView.setUint32(byteOffset, hi, littleEndian);
49
+ dataView.setUint32(byteOffset + 4, lo, littleEndian);
50
+ }
51
+ }
52
+ exports.setBigUint64 = setBigUint64;
53
+ //# sourceMappingURL=pure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pure.js","sourceRoot":"","sources":["../../src/bigint-polyfill/pure.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import './bigint-polyfill/polyfill';
1
2
  export { BigWig } from './bigwig';
2
3
  export { BigBed } from './bigbed';
3
4
  export { Feature, Header, RequestOptions } from './bbi';
package/dist/index.js CHANGED
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BigBed = exports.BigWig = void 0;
4
+ // from https://github.com/yume-chan/ya-webadb/blob/main/libraries/dataview-bigint-polyfill
5
+ // license:MIT
6
+ // needed for browsers including safari 14
7
+ require("./bigint-polyfill/polyfill");
4
8
  var bigwig_1 = require("./bigwig");
5
9
  Object.defineProperty(exports, "BigWig", { enumerable: true, get: function () { return bigwig_1.BigWig; } });
6
10
  var bigbed_1 = require("./bigbed");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAiC;AAAxB,gGAAA,MAAM,OAAA;AACf,mCAAiC;AAAxB,gGAAA,MAAM,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2FAA2F;AAC3F,cAAc;AACd,0CAA0C;AAC1C,sCAAmC;AACnC,mCAAiC;AAAxB,gGAAA,MAAM,OAAA;AACf,mCAAiC;AAAxB,gGAAA,MAAM,OAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ import { getBigInt64, getBigUint64, setBigInt64, setBigUint64 } from './pure';
2
+ if (!('getBigInt64' in DataView)) {
3
+ DataView.prototype.getBigInt64 = function (byteOffset, littleEndian) {
4
+ return getBigInt64(this, byteOffset, littleEndian);
5
+ };
6
+ }
7
+ if (!('getBigUint64' in DataView)) {
8
+ DataView.prototype.getBigUint64 = function (byteOffset, littleEndian) {
9
+ return getBigUint64(this, byteOffset, littleEndian);
10
+ };
11
+ }
12
+ if (!('setBigInt64' in DataView)) {
13
+ DataView.prototype.setBigInt64 = function (byteOffset, value, littleEndian) {
14
+ setBigInt64(this, byteOffset, value, littleEndian);
15
+ };
16
+ }
17
+ if (!('setBigUint64' in DataView)) {
18
+ DataView.prototype.setBigUint64 = function (byteOffset, value, littleEndian) {
19
+ setBigUint64(this, byteOffset, value, littleEndian);
20
+ };
21
+ }
22
+ //# sourceMappingURL=polyfill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polyfill.js","sourceRoot":"","sources":["../../src/bigint-polyfill/polyfill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAE7E,IAAI,CAAC,CAAC,aAAa,IAAI,QAAQ,CAAC,EAAE;IAChC,QAAQ,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,UAAU,EAAE,YAAY;QACjE,OAAO,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,CAAA;IACpD,CAAC,CAAA;CACF;AAED,IAAI,CAAC,CAAC,cAAc,IAAI,QAAQ,CAAC,EAAE;IACjC,QAAQ,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,UAAU,EAAE,YAAY;QAClE,OAAO,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,CAAA;IACrD,CAAC,CAAA;CACF;AAED,IAAI,CAAC,CAAC,aAAa,IAAI,QAAQ,CAAC,EAAE;IAChC,QAAQ,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,UAAU,EAAE,KAAK,EAAE,YAAY;QACxE,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC,CAAA;IACpD,CAAC,CAAA;CACF;AAED,IAAI,CAAC,CAAC,cAAc,IAAI,QAAQ,CAAC,EAAE;IACjC,QAAQ,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,UAAU,EAAE,KAAK,EAAE,YAAY;QACzE,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC,CAAA;IACrD,CAAC,CAAA;CACF"}
@@ -0,0 +1,4 @@
1
+ export declare function getBigInt64(dataView: DataView, byteOffset: number, littleEndian: boolean | undefined): bigint;
2
+ export declare function getBigUint64(dataView: DataView, byteOffset: number, littleEndian: boolean | undefined): bigint;
3
+ export declare function setBigInt64(dataView: DataView, byteOffset: number, value: bigint, littleEndian: boolean | undefined): void;
4
+ export declare function setBigUint64(dataView: DataView, byteOffset: number, value: bigint, littleEndian: boolean | undefined): void;
@@ -0,0 +1,46 @@
1
+ const BigInt32 = BigInt(32);
2
+ export function getBigInt64(dataView, byteOffset, littleEndian) {
3
+ const littleEndianMask = Number(!!littleEndian);
4
+ const bigEndianMask = Number(!littleEndian);
5
+ return ((BigInt(dataView.getInt32(byteOffset, littleEndian) * bigEndianMask +
6
+ dataView.getInt32(byteOffset + 4, littleEndian) * littleEndianMask) <<
7
+ BigInt32) |
8
+ BigInt(dataView.getUint32(byteOffset, littleEndian) * littleEndianMask +
9
+ dataView.getUint32(byteOffset + 4, littleEndian) * bigEndianMask));
10
+ }
11
+ export function getBigUint64(dataView, byteOffset, littleEndian) {
12
+ const a = dataView.getUint32(byteOffset, littleEndian);
13
+ const b = dataView.getUint32(byteOffset + 4, littleEndian);
14
+ const littleEndianMask = Number(!!littleEndian);
15
+ const bigEndianMask = Number(!littleEndian);
16
+ // This branch-less optimization is 77x faster than normal ternary operator.
17
+ // and only 3% slower than native implementation
18
+ // https://jsbench.me/p8kyhg1eqv/1
19
+ return ((BigInt(a * bigEndianMask + b * littleEndianMask) << BigInt32) |
20
+ BigInt(a * littleEndianMask + b * bigEndianMask));
21
+ }
22
+ export function setBigInt64(dataView, byteOffset, value, littleEndian) {
23
+ const hi = Number(value >> BigInt32);
24
+ const lo = Number(value & BigInt(0xffffffff));
25
+ if (littleEndian) {
26
+ dataView.setInt32(byteOffset + 4, hi, littleEndian);
27
+ dataView.setUint32(byteOffset, lo, littleEndian);
28
+ }
29
+ else {
30
+ dataView.setInt32(byteOffset, hi, littleEndian);
31
+ dataView.setUint32(byteOffset + 4, lo, littleEndian);
32
+ }
33
+ }
34
+ export function setBigUint64(dataView, byteOffset, value, littleEndian) {
35
+ const hi = Number(value >> BigInt32);
36
+ const lo = Number(value & BigInt(0xffffffff));
37
+ if (littleEndian) {
38
+ dataView.setUint32(byteOffset + 4, hi, littleEndian);
39
+ dataView.setUint32(byteOffset, lo, littleEndian);
40
+ }
41
+ else {
42
+ dataView.setUint32(byteOffset, hi, littleEndian);
43
+ dataView.setUint32(byteOffset + 4, lo, littleEndian);
44
+ }
45
+ }
46
+ //# sourceMappingURL=pure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pure.js","sourceRoot":"","sources":["../../src/bigint-polyfill/pure.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;AAE3B,MAAM,UAAU,WAAW,CACzB,QAAkB,EAClB,UAAkB,EAClB,YAAiC;IAEjC,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,CAAA;IAE3C,OAAO,CACL,CAAC,MAAM,CACL,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,aAAa;QACzD,QAAQ,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,EAAE,YAAY,CAAC,GAAG,gBAAgB,CACrE;QACC,QAAQ,CAAC;QACX,MAAM,CACJ,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,gBAAgB;YAC7D,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,YAAY,CAAC,GAAG,aAAa,CACnE,CACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,QAAkB,EAClB,UAAkB,EAClB,YAAiC;IAEjC,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IACtD,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,YAAY,CAAC,CAAA;IAE1D,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,CAAA;IAE3C,4EAA4E;IAC5E,gDAAgD;IAChD,kCAAkC;IAClC,OAAO,CACL,CAAC,MAAM,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,GAAG,gBAAgB,CAAC,IAAI,QAAQ,CAAC;QAC9D,MAAM,CAAC,CAAC,GAAG,gBAAgB,GAAG,CAAC,GAAG,aAAa,CAAC,CACjD,CAAA;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,QAAkB,EAClB,UAAkB,EAClB,KAAa,EACb,YAAiC;IAEjC,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAA;IACpC,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAA;IAE7C,IAAI,YAAY,EAAE;QAChB,QAAQ,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,CAAA;QACnD,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,EAAE,YAAY,CAAC,CAAA;KACjD;SAAM;QACL,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,EAAE,YAAY,CAAC,CAAA;QAC/C,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,CAAA;KACrD;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,QAAkB,EAClB,UAAkB,EAClB,KAAa,EACb,YAAiC;IAEjC,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAA;IACpC,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAA;IAE7C,IAAI,YAAY,EAAE;QAChB,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,CAAA;QACpD,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,EAAE,YAAY,CAAC,CAAA;KACjD;SAAM;QACL,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,EAAE,YAAY,CAAC,CAAA;QAChD,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,CAAA;KACrD;AACH,CAAC"}
package/esm/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import './bigint-polyfill/polyfill';
1
2
  export { BigWig } from './bigwig';
2
3
  export { BigBed } from './bigbed';
3
4
  export { Feature, Header, RequestOptions } from './bbi';
package/esm/index.js CHANGED
@@ -1,3 +1,7 @@
1
+ // from https://github.com/yume-chan/ya-webadb/blob/main/libraries/dataview-bigint-polyfill
2
+ // license:MIT
3
+ // needed for browsers including safari 14
4
+ import './bigint-polyfill/polyfill';
1
5
  export { BigWig } from './bigwig';
2
6
  export { BigBed } from './bigbed';
3
7
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,cAAc;AACd,0CAA0C;AAC1C,OAAO,4BAA4B,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gmod/bbi",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "Parser for BigWig/BigBed files",
5
5
  "license": "MIT",
6
6
  "repository": "GMOD/bbi-js",
@@ -0,0 +1,25 @@
1
+ import { getBigInt64, getBigUint64, setBigInt64, setBigUint64 } from './pure'
2
+
3
+ if (!('getBigInt64' in DataView)) {
4
+ DataView.prototype.getBigInt64 = function (byteOffset, littleEndian) {
5
+ return getBigInt64(this, byteOffset, littleEndian)
6
+ }
7
+ }
8
+
9
+ if (!('getBigUint64' in DataView)) {
10
+ DataView.prototype.getBigUint64 = function (byteOffset, littleEndian) {
11
+ return getBigUint64(this, byteOffset, littleEndian)
12
+ }
13
+ }
14
+
15
+ if (!('setBigInt64' in DataView)) {
16
+ DataView.prototype.setBigInt64 = function (byteOffset, value, littleEndian) {
17
+ setBigInt64(this, byteOffset, value, littleEndian)
18
+ }
19
+ }
20
+
21
+ if (!('setBigUint64' in DataView)) {
22
+ DataView.prototype.setBigUint64 = function (byteOffset, value, littleEndian) {
23
+ setBigUint64(this, byteOffset, value, littleEndian)
24
+ }
25
+ }
@@ -0,0 +1,78 @@
1
+ const BigInt32 = BigInt(32)
2
+
3
+ export function getBigInt64(
4
+ dataView: DataView,
5
+ byteOffset: number,
6
+ littleEndian: boolean | undefined,
7
+ ): bigint {
8
+ const littleEndianMask = Number(!!littleEndian)
9
+ const bigEndianMask = Number(!littleEndian)
10
+
11
+ return (
12
+ (BigInt(
13
+ dataView.getInt32(byteOffset, littleEndian) * bigEndianMask +
14
+ dataView.getInt32(byteOffset + 4, littleEndian) * littleEndianMask,
15
+ ) <<
16
+ BigInt32) |
17
+ BigInt(
18
+ dataView.getUint32(byteOffset, littleEndian) * littleEndianMask +
19
+ dataView.getUint32(byteOffset + 4, littleEndian) * bigEndianMask,
20
+ )
21
+ )
22
+ }
23
+
24
+ export function getBigUint64(
25
+ dataView: DataView,
26
+ byteOffset: number,
27
+ littleEndian: boolean | undefined,
28
+ ): bigint {
29
+ const a = dataView.getUint32(byteOffset, littleEndian)
30
+ const b = dataView.getUint32(byteOffset + 4, littleEndian)
31
+
32
+ const littleEndianMask = Number(!!littleEndian)
33
+ const bigEndianMask = Number(!littleEndian)
34
+
35
+ // This branch-less optimization is 77x faster than normal ternary operator.
36
+ // and only 3% slower than native implementation
37
+ // https://jsbench.me/p8kyhg1eqv/1
38
+ return (
39
+ (BigInt(a * bigEndianMask + b * littleEndianMask) << BigInt32) |
40
+ BigInt(a * littleEndianMask + b * bigEndianMask)
41
+ )
42
+ }
43
+
44
+ export function setBigInt64(
45
+ dataView: DataView,
46
+ byteOffset: number,
47
+ value: bigint,
48
+ littleEndian: boolean | undefined,
49
+ ) {
50
+ const hi = Number(value >> BigInt32)
51
+ const lo = Number(value & BigInt(0xffffffff))
52
+
53
+ if (littleEndian) {
54
+ dataView.setInt32(byteOffset + 4, hi, littleEndian)
55
+ dataView.setUint32(byteOffset, lo, littleEndian)
56
+ } else {
57
+ dataView.setInt32(byteOffset, hi, littleEndian)
58
+ dataView.setUint32(byteOffset + 4, lo, littleEndian)
59
+ }
60
+ }
61
+
62
+ export function setBigUint64(
63
+ dataView: DataView,
64
+ byteOffset: number,
65
+ value: bigint,
66
+ littleEndian: boolean | undefined,
67
+ ) {
68
+ const hi = Number(value >> BigInt32)
69
+ const lo = Number(value & BigInt(0xffffffff))
70
+
71
+ if (littleEndian) {
72
+ dataView.setUint32(byteOffset + 4, hi, littleEndian)
73
+ dataView.setUint32(byteOffset, lo, littleEndian)
74
+ } else {
75
+ dataView.setUint32(byteOffset, hi, littleEndian)
76
+ dataView.setUint32(byteOffset + 4, lo, littleEndian)
77
+ }
78
+ }
package/src/index.ts CHANGED
@@ -1,3 +1,7 @@
1
+ // from https://github.com/yume-chan/ya-webadb/blob/main/libraries/dataview-bigint-polyfill
2
+ // license:MIT
3
+ // needed for browsers including safari 14
4
+ import './bigint-polyfill/polyfill'
1
5
  export { BigWig } from './bigwig'
2
6
  export { BigBed } from './bigbed'
3
7
  export { Feature, Header, RequestOptions } from './bbi'