@cogeotiff/core 7.2.0 → 8.0.1
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 +3 -500
- package/README.md +28 -10
- package/build/__benchmark__/cog.read.benchmark.d.ts +0 -1
- package/build/__benchmark__/cog.read.benchmark.js +6 -4
- package/build/__benchmark__/cog.read.benchmark.js.map +1 -0
- package/build/__benchmark__/source.file.d.ts +9 -0
- package/build/__benchmark__/source.file.js +29 -0
- package/build/__benchmark__/source.file.js.map +1 -0
- package/build/__benchmark__/source.memory.d.ts +9 -0
- package/build/__benchmark__/source.memory.js +32 -0
- package/build/__benchmark__/source.memory.js.map +1 -0
- package/build/__test__/cog.image.test.d.ts +1 -2
- package/build/__test__/cog.image.test.js +82 -90
- package/build/__test__/cog.image.test.js.map +1 -0
- package/build/__test__/cog.read.test.d.ts +1 -2
- package/build/__test__/cog.read.test.js +37 -55
- package/build/__test__/cog.read.test.js.map +1 -0
- package/build/__test__/example.d.ts +1 -0
- package/build/__test__/example.js +27 -0
- package/build/__test__/example.js.map +1 -0
- package/build/cog.tiff.d.ts +22 -28
- package/build/cog.tiff.image.d.ts +16 -28
- package/build/cog.tiff.image.js +147 -101
- package/build/cog.tiff.image.js.map +1 -0
- package/build/cog.tiff.js +141 -97
- package/build/cog.tiff.js.map +1 -0
- package/build/const/index.d.ts +1 -2
- package/build/const/index.js +2 -2
- package/build/const/index.js.map +1 -0
- package/build/const/tiff.endian.d.ts +0 -1
- package/build/const/tiff.endian.js +1 -1
- package/build/const/tiff.endian.js.map +1 -0
- package/build/const/tiff.mime.d.ts +10 -11
- package/build/const/tiff.mime.js +22 -22
- package/build/const/tiff.mime.js.map +1 -0
- package/build/const/tiff.tag.id.d.ts +5 -5
- package/build/const/tiff.tag.id.js +155 -154
- package/build/const/tiff.tag.id.js.map +1 -0
- package/build/const/tiff.tag.value.d.ts +15 -16
- package/build/const/tiff.tag.value.js +16 -16
- package/build/const/tiff.tag.value.js.map +1 -0
- package/build/const/tiff.version.d.ts +0 -1
- package/build/const/tiff.version.js +1 -1
- package/build/const/tiff.version.js.map +1 -0
- package/build/index.d.ts +11 -6
- package/build/index.js +9 -5
- package/build/index.js.map +1 -0
- package/build/read/data.view.offset.d.ts +15 -0
- package/build/read/data.view.offset.js +19 -0
- package/build/read/data.view.offset.js.map +1 -0
- package/build/read/tiff.gdal.d.ts +9 -12
- package/build/read/tiff.gdal.js +22 -17
- package/build/read/tiff.gdal.js.map +1 -0
- package/build/read/tiff.ifd.config.d.ts +6 -4
- package/build/read/tiff.ifd.config.js +2 -2
- package/build/read/tiff.ifd.config.js.map +1 -0
- package/build/read/tiff.tag.d.ts +37 -20
- package/build/read/tiff.tag.factory.d.ts +16 -0
- package/build/read/tiff.tag.factory.js +130 -0
- package/build/read/tiff.tag.factory.js.map +1 -0
- package/build/read/tiff.tag.js +2 -37
- package/build/read/tiff.tag.js.map +1 -0
- package/build/read/tiff.value.reader.d.ts +2 -6
- package/build/read/tiff.value.reader.js +16 -54
- package/build/read/tiff.value.reader.js.map +1 -0
- package/build/source.d.ts +5 -0
- package/build/source.js +2 -0
- package/build/source.js.map +1 -0
- package/build/util/bytes.d.ts +17 -0
- package/build/util/bytes.js +42 -0
- package/build/util/bytes.js.map +1 -0
- package/build/util/util.hex.d.ts +2 -3
- package/build/util/util.hex.js +4 -5
- package/build/util/util.hex.js.map +1 -0
- package/build/vector.d.ts +0 -1
- package/build/vector.js +1 -1
- package/build/vector.js.map +1 -0
- package/package.json +25 -30
- package/src/__benchmark__/cog.read.benchmark.ts +12 -10
- package/src/__benchmark__/source.file.ts +23 -0
- package/src/__benchmark__/source.memory.ts +23 -0
- package/src/__test__/cog.image.test.ts +188 -197
- package/src/__test__/cog.read.test.ts +50 -72
- package/src/__test__/example.ts +31 -0
- package/src/cog.tiff.image.ts +456 -448
- package/src/cog.tiff.ts +143 -146
- package/src/const/index.ts +1 -1
- package/src/const/tiff.endian.ts +2 -2
- package/src/const/tiff.mime.ts +21 -21
- package/src/const/tiff.tag.id.ts +159 -158
- package/src/const/tiff.tag.value.ts +16 -16
- package/src/const/tiff.version.ts +11 -11
- package/src/index.ts +11 -5
- package/src/read/data.view.offset.ts +23 -0
- package/src/read/tiff.gdal.ts +61 -63
- package/src/read/tiff.ifd.config.ts +35 -31
- package/src/read/tiff.tag.factory.ts +163 -0
- package/src/read/tiff.tag.ts +38 -39
- package/src/read/tiff.value.reader.ts +25 -73
- package/src/source.ts +5 -0
- package/src/util/bytes.ts +44 -0
- package/src/util/util.hex.ts +5 -7
- package/src/vector.ts +5 -5
- package/tsconfig.json +8 -10
- package/build/__benchmark__/cog.read.benchmark.d.ts.map +0 -1
- package/build/__test__/cog.image.test.d.ts.map +0 -1
- package/build/__test__/cog.read.test.d.ts.map +0 -1
- package/build/cog.tiff.d.ts.map +0 -1
- package/build/cog.tiff.image.d.ts.map +0 -1
- package/build/const/index.d.ts.map +0 -1
- package/build/const/tiff.endian.d.ts.map +0 -1
- package/build/const/tiff.mime.d.ts.map +0 -1
- package/build/const/tiff.tag.id.d.ts.map +0 -1
- package/build/const/tiff.tag.value.d.ts.map +0 -1
- package/build/const/tiff.version.d.ts.map +0 -1
- package/build/index.d.ts.map +0 -1
- package/build/read/tag/__test__/tag.test.d.ts +0 -2
- package/build/read/tag/__test__/tag.test.d.ts.map +0 -1
- package/build/read/tag/__test__/tag.test.js +0 -23
- package/build/read/tag/tiff.tag.base.d.ts +0 -55
- package/build/read/tag/tiff.tag.base.d.ts.map +0 -1
- package/build/read/tag/tiff.tag.base.js +0 -79
- package/build/read/tag/tiff.tag.lazy.d.ts +0 -7
- package/build/read/tag/tiff.tag.lazy.d.ts.map +0 -1
- package/build/read/tag/tiff.tag.lazy.js +0 -18
- package/build/read/tag/tiff.tag.offset.d.ts +0 -21
- package/build/read/tag/tiff.tag.offset.d.ts.map +0 -1
- package/build/read/tag/tiff.tag.offset.js +0 -54
- package/build/read/tag/tiff.tag.static.d.ts +0 -8
- package/build/read/tag/tiff.tag.static.d.ts.map +0 -1
- package/build/read/tag/tiff.tag.static.js +0 -17
- package/build/read/tiff.gdal.d.ts.map +0 -1
- package/build/read/tiff.ifd.config.d.ts.map +0 -1
- package/build/read/tiff.tag.d.ts.map +0 -1
- package/build/read/tiff.value.reader.d.ts.map +0 -1
- package/build/source/cog.source.view.d.ts +0 -33
- package/build/source/cog.source.view.d.ts.map +0 -1
- package/build/source/cog.source.view.js +0 -65
- package/build/util/util.hex.d.ts.map +0 -1
- package/build/vector.d.ts.map +0 -1
- package/src/@types/ieee754.d.ts +0 -18
- package/src/read/tag/__test__/tag.test.ts +0 -27
- package/src/read/tag/tiff.tag.base.ts +0 -126
- package/src/read/tag/tiff.tag.lazy.ts +0 -17
- package/src/read/tag/tiff.tag.offset.ts +0 -61
- package/src/read/tag/tiff.tag.static.ts +0 -15
- package/src/source/cog.source.view.ts +0 -77
package/build/read/tiff.gdal.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { ByteSize } from '
|
|
1
|
+
import { ByteSize } from '../util/bytes.js';
|
|
2
2
|
export var GhostOption;
|
|
3
3
|
(function (GhostOption) {
|
|
4
|
-
GhostOption["
|
|
5
|
-
GhostOption["
|
|
6
|
-
GhostOption["
|
|
7
|
-
GhostOption["
|
|
8
|
-
GhostOption["
|
|
9
|
-
GhostOption["
|
|
10
|
-
GhostOption["
|
|
4
|
+
GhostOption["GdalStructuralMetadataSize"] = "GDAL_STRUCTURAL_METADATA_SIZE";
|
|
5
|
+
GhostOption["Layout"] = "LAYOUT";
|
|
6
|
+
GhostOption["BlockOrder"] = "BLOCK_ORDER";
|
|
7
|
+
GhostOption["BlockLeader"] = "BLOCK_LEADER";
|
|
8
|
+
GhostOption["BlockTrailer"] = "BLOCK_TRAILER";
|
|
9
|
+
GhostOption["KnownIncompatibleEdition"] = "KNOWN_INCOMPATIBLE_EDITION";
|
|
10
|
+
GhostOption["MaskInterleavedWithImagery"] = "MASK_INTERLEAVED_WITH_IMAGERY";
|
|
11
11
|
})(GhostOption || (GhostOption = {}));
|
|
12
12
|
export var GhostOptionTileOrder;
|
|
13
13
|
(function (GhostOptionTileOrder) {
|
|
@@ -23,7 +23,12 @@ export var GhostOptionTileLeader;
|
|
|
23
23
|
*/
|
|
24
24
|
export class CogTifGhostOptions {
|
|
25
25
|
constructor() {
|
|
26
|
-
this
|
|
26
|
+
Object.defineProperty(this, "options", {
|
|
27
|
+
enumerable: true,
|
|
28
|
+
configurable: true,
|
|
29
|
+
writable: true,
|
|
30
|
+
value: new Map()
|
|
31
|
+
});
|
|
27
32
|
}
|
|
28
33
|
/**
|
|
29
34
|
* Has GDAL optimized this tif
|
|
@@ -31,24 +36,24 @@ export class CogTifGhostOptions {
|
|
|
31
36
|
get isCogOptimized() {
|
|
32
37
|
if (this.isBroken)
|
|
33
38
|
return false;
|
|
34
|
-
return this.options.get(GhostOption.
|
|
39
|
+
return this.options.get(GhostOption.Layout) === 'IFDS_BEFORE_DATA';
|
|
35
40
|
}
|
|
36
41
|
/**
|
|
37
42
|
* Has GDAL determined this tif is now broken
|
|
38
43
|
*/
|
|
39
44
|
get isBroken() {
|
|
40
|
-
return this.options.get(GhostOption.
|
|
45
|
+
return this.options.get(GhostOption.KnownIncompatibleEdition) === 'YES';
|
|
41
46
|
}
|
|
42
47
|
/**
|
|
43
48
|
* Load the ghost options from a source
|
|
44
49
|
* @param bytes the ghost header bytes
|
|
45
50
|
*/
|
|
46
|
-
process(bytes) {
|
|
51
|
+
process(bytes, offset, ghostSize) {
|
|
47
52
|
let key = '';
|
|
48
53
|
let value = '';
|
|
49
54
|
let setValue = false;
|
|
50
|
-
for (let i = 0; i <
|
|
51
|
-
const charCode = bytes
|
|
55
|
+
for (let i = 0; i < ghostSize; i++) {
|
|
56
|
+
const charCode = bytes.getUint8(offset + i);
|
|
52
57
|
if (charCode === 0)
|
|
53
58
|
break;
|
|
54
59
|
const char = String.fromCharCode(charCode);
|
|
@@ -73,7 +78,7 @@ export class CogTifGhostOptions {
|
|
|
73
78
|
* If the tile leader is set, how many bytes are allocated to the tile size
|
|
74
79
|
*/
|
|
75
80
|
get tileLeaderByteSize() {
|
|
76
|
-
switch (this.options.get(GhostOption.
|
|
81
|
+
switch (this.options.get(GhostOption.BlockLeader)) {
|
|
77
82
|
case GhostOptionTileLeader.uint32:
|
|
78
83
|
return ByteSize.UInt32;
|
|
79
84
|
default:
|
|
@@ -81,7 +86,7 @@ export class CogTifGhostOptions {
|
|
|
81
86
|
}
|
|
82
87
|
}
|
|
83
88
|
get isMaskInterleaved() {
|
|
84
|
-
return this.options.get(GhostOption.
|
|
89
|
+
return this.options.get(GhostOption.MaskInterleavedWithImagery) === 'YES';
|
|
85
90
|
}
|
|
86
91
|
}
|
|
87
|
-
//# sourceMappingURL=
|
|
92
|
+
//# sourceMappingURL=tiff.gdal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiff.gdal.js","sourceRoot":"","sources":["../../src/read/tiff.gdal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,CAAN,IAAY,WAQX;AARD,WAAY,WAAW;IACrB,2EAA4D,CAAA;IAC5D,gCAAiB,CAAA;IACjB,yCAA0B,CAAA;IAC1B,2CAA4B,CAAA;IAC5B,6CAA8B,CAAA;IAC9B,sEAAuD,CAAA;IACvD,2EAA4D,CAAA;AAC9D,CAAC,EARW,WAAW,KAAX,WAAW,QAQtB;AAED,MAAM,CAAN,IAAY,oBAEX;AAFD,WAAY,oBAAoB;IAC9B,8CAAsB,CAAA;AACxB,CAAC,EAFW,oBAAoB,KAApB,oBAAoB,QAE/B;AAED,MAAM,CAAN,IAAY,qBAEX;AAFD,WAAY,qBAAqB;IAC/B,iDAAwB,CAAA;AAC1B,CAAC,EAFW,qBAAqB,KAArB,qBAAqB,QAEhC;AAED;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAA/B;QACE;;;;mBAA+B,IAAI,GAAG,EAAE;WAAC;IA2D3C,CAAC;IAzDC;;OAEG;IACH,IAAI,cAAc;QAChB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,kBAAkB,CAAC;IACrE,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,wBAAwB,CAAC,KAAK,KAAK,CAAC;IAC1E,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,KAAe,EAAE,MAAc,EAAE,SAAiB;QACxD,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;YAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC5C,IAAI,QAAQ,KAAK,CAAC;gBAAE,MAAM;YAE1B,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,IAAI,KAAK,IAAI,EAAE;gBACjB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC3C,GAAG,GAAG,EAAE,CAAC;gBACT,KAAK,GAAG,EAAE,CAAC;gBACX,QAAQ,GAAG,KAAK,CAAC;aAClB;iBAAM,IAAI,IAAI,KAAK,GAAG,EAAE;gBACvB,QAAQ,GAAG,IAAI,CAAC;aACjB;iBAAM;gBACL,IAAI,QAAQ;oBAAE,KAAK,IAAI,IAAI,CAAC;;oBACvB,GAAG,IAAI,IAAI,CAAC;aAClB;SACF;IACH,CAAC;IAED;;OAEG;IACH,IAAI,kBAAkB;QACpB,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE;YACjD,KAAK,qBAAqB,CAAC,MAAM;gBAC/B,OAAO,QAAQ,CAAC,MAAM,CAAC;YACzB;gBACE,OAAO,IAAI,CAAC;SACf;IACH,CAAC;IAED,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,0BAA0B,CAAC,KAAK,KAAK,CAAC;IAC5E,CAAC;CACF"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import { ByteSize } from '@chunkd/core';
|
|
2
1
|
import { TiffVersion } from '../const/tiff.version.js';
|
|
3
2
|
export declare const TagTiffConfig: TiffIfdConfig;
|
|
4
3
|
export declare const TagTiffBigConfig: TiffIfdConfig;
|
|
5
4
|
export interface TiffIfdConfig {
|
|
5
|
+
/** Tiff type */
|
|
6
6
|
version: TiffVersion;
|
|
7
|
-
pointer
|
|
8
|
-
|
|
7
|
+
/** Number of bytes a pointer uses */
|
|
8
|
+
pointer: number;
|
|
9
|
+
/** Number of bytes a offset uses */
|
|
10
|
+
offset: number;
|
|
11
|
+
/** Number of bytes the IFD tag contains */
|
|
9
12
|
ifd: number;
|
|
10
13
|
}
|
|
11
14
|
export declare const TiffIfdEntry: {
|
|
12
15
|
43: TiffIfdConfig;
|
|
13
16
|
42: TiffIfdConfig;
|
|
14
17
|
};
|
|
15
|
-
//# sourceMappingURL=tiff.ifd.config.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ByteSize } from '
|
|
1
|
+
import { ByteSize } from '../util/bytes.js';
|
|
2
2
|
import { TiffVersion } from '../const/tiff.version.js';
|
|
3
3
|
export const TagTiffConfig = {
|
|
4
4
|
version: TiffVersion.Tiff,
|
|
@@ -32,4 +32,4 @@ export const TiffIfdEntry = {
|
|
|
32
32
|
[TiffVersion.BigTiff]: TagTiffBigConfig,
|
|
33
33
|
[TiffVersion.Tiff]: TagTiffConfig,
|
|
34
34
|
};
|
|
35
|
-
//# sourceMappingURL=
|
|
35
|
+
//# sourceMappingURL=tiff.ifd.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiff.ifd.config.js","sourceRoot":"","sources":["../../src/read/tiff.ifd.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,OAAO,EAAE,WAAW,CAAC,IAAI;IACzB,OAAO,EAAE,QAAQ,CAAC,MAAM;IACxB,MAAM,EAAE,QAAQ,CAAC,MAAM;IACvB;;;;;;OAMG;IACH,GAAG,EAAE,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM;CAC7D,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAkB;IAC7C,OAAO,EAAE,WAAW,CAAC,OAAO;IAC5B,4BAA4B;IAC5B,OAAO,EAAE,QAAQ,CAAC,MAAM;IACxB,sBAAsB;IACtB,MAAM,EAAE,QAAQ,CAAC,MAAM;IAEvB;;;;;;OAMG;IACH,GAAG,EAAE,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM;CAC7D,CAAC;AAaF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,gBAAgB;IACvC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,aAAa;CAClC,CAAC"}
|
package/build/read/tiff.tag.d.ts
CHANGED
|
@@ -1,20 +1,37 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
import { TagId } from '../const/tiff.tag.id.js';
|
|
2
|
+
import { TiffTagValueType } from '../const/tiff.tag.value.js';
|
|
3
|
+
import { DataViewOffset } from './data.view.offset.js';
|
|
4
|
+
export type Tag<T = unknown> = TagLazy<T> | TagInline<T> | TagOffset;
|
|
5
|
+
export interface TagBase {
|
|
6
|
+
/** Id of the Tag */
|
|
7
|
+
id: TagId;
|
|
8
|
+
/** Offset in bytes to where this tag was read from */
|
|
9
|
+
tagOffset: number;
|
|
10
|
+
/** Number of values */
|
|
11
|
+
count: number;
|
|
12
|
+
/** Tiff Tag Datatype @see {TiffTagValueType} */
|
|
13
|
+
dataType: TiffTagValueType;
|
|
14
|
+
}
|
|
15
|
+
export interface TagLazy<T> extends TagBase {
|
|
16
|
+
type: 'lazy';
|
|
17
|
+
/** Value if loaded undefined otherwise */
|
|
18
|
+
value?: T;
|
|
19
|
+
/** Where in the file the value is read from */
|
|
20
|
+
dataOffset: number;
|
|
21
|
+
}
|
|
22
|
+
/** Tiff tag that's value is inside the IFD and is already read */
|
|
23
|
+
export interface TagInline<T> extends TagBase {
|
|
24
|
+
type: 'inline';
|
|
25
|
+
value: T;
|
|
26
|
+
}
|
|
27
|
+
export interface TagOffset extends TagBase {
|
|
28
|
+
type: 'offset';
|
|
29
|
+
/** Values of the offest's this is a sparse array unless @see {isLoaded} is true */
|
|
30
|
+
value: number[];
|
|
31
|
+
/** has all the values been read */
|
|
32
|
+
isLoaded?: boolean;
|
|
33
|
+
/** Raw buffer of the values for lazy decoding, Reading 1000s of uint64s can take quite a while */
|
|
34
|
+
view?: DataViewOffset;
|
|
35
|
+
/** Where in the file the value is read from */
|
|
36
|
+
dataOffset: number;
|
|
37
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CogTiff } from '../cog.tiff.js';
|
|
2
|
+
import { DataViewOffset } from './data.view.offset.js';
|
|
3
|
+
import { Tag, TagLazy, TagOffset } from './tiff.tag.js';
|
|
4
|
+
/**
|
|
5
|
+
* Determine if all the data for the tiff tag is loaded in and use that to create the specific CogTiffTag
|
|
6
|
+
*
|
|
7
|
+
* @see {Tag}
|
|
8
|
+
*
|
|
9
|
+
* @param tiff
|
|
10
|
+
* @param view Bytes to read from
|
|
11
|
+
* @param offset Offset in the dataview to read a tag
|
|
12
|
+
*/
|
|
13
|
+
export declare function createTag(tiff: CogTiff, view: DataViewOffset, offset: number): Tag<unknown>;
|
|
14
|
+
export declare function fetchLazy<T>(tag: TagLazy<T>, tiff: CogTiff): Promise<T>;
|
|
15
|
+
export declare function setBytes(tag: TagOffset, view: DataViewOffset): void;
|
|
16
|
+
export declare function getValueAt(tiff: CogTiff, tag: TagOffset, index: number): Promise<number>;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { TagId } from '../const/tiff.tag.id.js';
|
|
2
|
+
import { TiffTagValueType } from '../const/tiff.tag.value.js';
|
|
3
|
+
import { getUint, getUint64 } from '../util/bytes.js';
|
|
4
|
+
import { hasBytes } from './data.view.offset.js';
|
|
5
|
+
import { getTiffTagSize } from './tiff.value.reader.js';
|
|
6
|
+
function readTagValue(fieldType, bytes, offset, isLittleEndian) {
|
|
7
|
+
switch (fieldType) {
|
|
8
|
+
case TiffTagValueType.Ascii:
|
|
9
|
+
return String.fromCharCode(bytes.getUint8(offset));
|
|
10
|
+
case TiffTagValueType.Undefined:
|
|
11
|
+
case TiffTagValueType.Uint8:
|
|
12
|
+
return bytes.getUint8(offset);
|
|
13
|
+
case TiffTagValueType.Int8:
|
|
14
|
+
return bytes.getInt8(offset);
|
|
15
|
+
case TiffTagValueType.Uint16:
|
|
16
|
+
return bytes.getUint16(offset, isLittleEndian);
|
|
17
|
+
case TiffTagValueType.Int16:
|
|
18
|
+
return bytes.getInt16(offset, isLittleEndian);
|
|
19
|
+
case TiffTagValueType.Uint32:
|
|
20
|
+
return bytes.getUint32(offset, isLittleEndian);
|
|
21
|
+
case TiffTagValueType.Int32:
|
|
22
|
+
return bytes.getInt32(offset, isLittleEndian);
|
|
23
|
+
case TiffTagValueType.Rational:
|
|
24
|
+
return [bytes.getUint32(offset, isLittleEndian), bytes.getUint32(offset + 4, isLittleEndian)];
|
|
25
|
+
case TiffTagValueType.SignedRational:
|
|
26
|
+
return [bytes.getInt32(offset, isLittleEndian), bytes.getInt32(offset + 4, isLittleEndian)];
|
|
27
|
+
case TiffTagValueType.Float64:
|
|
28
|
+
return bytes.getFloat64(offset, isLittleEndian);
|
|
29
|
+
case TiffTagValueType.Uint64:
|
|
30
|
+
return getUint64(bytes, offset, isLittleEndian);
|
|
31
|
+
default:
|
|
32
|
+
throw new Error(`Unknown read type "${fieldType}" "${TiffTagValueType[fieldType]}"`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function readValue(tiff, bytes, offset, type, count) {
|
|
36
|
+
const typeSize = getTiffTagSize(type);
|
|
37
|
+
const dataLength = count * typeSize;
|
|
38
|
+
if (count === 1)
|
|
39
|
+
return readTagValue(type, bytes, offset, tiff.isLittleEndian);
|
|
40
|
+
switch (type) {
|
|
41
|
+
case TiffTagValueType.Ascii:
|
|
42
|
+
return String.fromCharCode.apply(null, new Uint8Array(bytes.buffer.slice(bytes.byteOffset + offset, bytes.byteOffset + offset + dataLength - 1)));
|
|
43
|
+
}
|
|
44
|
+
const output = [];
|
|
45
|
+
for (let i = 0; i < dataLength; i += typeSize) {
|
|
46
|
+
output.push(readTagValue(type, bytes, offset + i, tiff.isLittleEndian));
|
|
47
|
+
}
|
|
48
|
+
return output;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Determine if all the data for the tiff tag is loaded in and use that to create the specific CogTiffTag
|
|
52
|
+
*
|
|
53
|
+
* @see {Tag}
|
|
54
|
+
*
|
|
55
|
+
* @param tiff
|
|
56
|
+
* @param view Bytes to read from
|
|
57
|
+
* @param offset Offset in the dataview to read a tag
|
|
58
|
+
*/
|
|
59
|
+
export function createTag(tiff, view, offset) {
|
|
60
|
+
const tagId = view.getUint16(offset + 0, tiff.isLittleEndian);
|
|
61
|
+
const dataType = view.getUint16(offset + 2, tiff.isLittleEndian);
|
|
62
|
+
const dataCount = getUint(view, offset + 4, tiff.ifdConfig.pointer, tiff.isLittleEndian);
|
|
63
|
+
const dataTypeSize = getTiffTagSize(dataType);
|
|
64
|
+
const dataLength = dataTypeSize * dataCount;
|
|
65
|
+
// Tag value is inline read the value
|
|
66
|
+
if (dataLength <= tiff.ifdConfig.pointer) {
|
|
67
|
+
const value = readValue(tiff, view, offset + 4 + tiff.ifdConfig.pointer, dataType, dataCount);
|
|
68
|
+
return { type: 'inline', id: tagId, count: dataCount, value, dataType, tagOffset: offset };
|
|
69
|
+
}
|
|
70
|
+
const dataOffset = getUint(view, offset + 4 + tiff.ifdConfig.pointer, tiff.ifdConfig.pointer, tiff.isLittleEndian);
|
|
71
|
+
switch (tagId) {
|
|
72
|
+
case TagId.TileOffsets:
|
|
73
|
+
case TagId.TileByteCounts:
|
|
74
|
+
case TagId.StripByteCounts:
|
|
75
|
+
case TagId.StripOffsets:
|
|
76
|
+
const tag = {
|
|
77
|
+
type: 'offset',
|
|
78
|
+
id: tagId,
|
|
79
|
+
count: dataCount,
|
|
80
|
+
dataType,
|
|
81
|
+
dataOffset,
|
|
82
|
+
value: [],
|
|
83
|
+
tagOffset: offset,
|
|
84
|
+
};
|
|
85
|
+
// Some offsets are quite long and don't need to read them often, so only read the tags we are interested in when we need to
|
|
86
|
+
if (tagId === TagId.TileOffsets && hasBytes(view, dataOffset, dataLength))
|
|
87
|
+
setBytes(tag, view);
|
|
88
|
+
return tag;
|
|
89
|
+
}
|
|
90
|
+
// If we already have the bytes in the view read them in
|
|
91
|
+
if (hasBytes(view, dataOffset, dataLength)) {
|
|
92
|
+
const value = readValue(tiff, view, dataOffset - view.sourceOffset, dataType, dataCount);
|
|
93
|
+
return { type: 'inline', id: tagId, count: dataCount, value, dataType, tagOffset: offset };
|
|
94
|
+
}
|
|
95
|
+
return { type: 'lazy', id: tagId, count: dataCount, dataOffset, dataType, tagOffset: offset };
|
|
96
|
+
}
|
|
97
|
+
export async function fetchLazy(tag, tiff) {
|
|
98
|
+
if (tag.value != null)
|
|
99
|
+
return tag.value;
|
|
100
|
+
const dataTypeSize = getTiffTagSize(tag.dataType);
|
|
101
|
+
const dataLength = dataTypeSize * tag.count;
|
|
102
|
+
const bytes = await tiff.source.fetch(tag.dataOffset, dataLength);
|
|
103
|
+
const view = new DataView(bytes);
|
|
104
|
+
tag.value = readValue(tiff, view, 0, tag.dataType, tag.count);
|
|
105
|
+
return tag.value;
|
|
106
|
+
}
|
|
107
|
+
export function setBytes(tag, view) {
|
|
108
|
+
const dataTypeSize = getTiffTagSize(tag.dataType);
|
|
109
|
+
const startBytes = view.byteOffset + tag.dataOffset - view.sourceOffset;
|
|
110
|
+
tag.view = new DataView(view.buffer.slice(startBytes, startBytes + dataTypeSize * tag.count));
|
|
111
|
+
tag.view.sourceOffset = tag.dataOffset;
|
|
112
|
+
}
|
|
113
|
+
export async function getValueAt(tiff, tag, index) {
|
|
114
|
+
if (index > tag.count || index < 0)
|
|
115
|
+
throw new Error('TagOffset: out of bounds :' + index);
|
|
116
|
+
if (tag.value[index] != null)
|
|
117
|
+
return tag.value[index];
|
|
118
|
+
const dataTypeSize = getTiffTagSize(tag.dataType);
|
|
119
|
+
if (tag.view == null) {
|
|
120
|
+
const bytes = await tiff.source.fetch(tag.dataOffset + index * dataTypeSize, dataTypeSize);
|
|
121
|
+
const view = new DataView(bytes);
|
|
122
|
+
const value = readValue(tiff, view, 0, tag.dataType, 1);
|
|
123
|
+
tag.value[index] = value;
|
|
124
|
+
return value;
|
|
125
|
+
}
|
|
126
|
+
const value = readValue(tiff, tag.view, index * dataTypeSize, tag.dataType, 1);
|
|
127
|
+
tag.value[index] = value;
|
|
128
|
+
return value;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=tiff.tag.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiff.tag.factory.js","sourceRoot":"","sources":["../../src/read/tiff.tag.factory.ts"],"names":[],"mappings":"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"}
|
package/build/read/tiff.tag.js
CHANGED
|
@@ -1,37 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { CogTiffTagOffset } from './tag/tiff.tag.offset.js';
|
|
4
|
-
import { CogTifTagStatic } from './tag/tiff.tag.static.js';
|
|
5
|
-
export const CogTiffTag = {
|
|
6
|
-
/**
|
|
7
|
-
* Determine if all the data for the tiff tag is loaded in and use that to create the specific CogTiffTag
|
|
8
|
-
*
|
|
9
|
-
* @see CogTiffTagBase
|
|
10
|
-
*
|
|
11
|
-
* @param source
|
|
12
|
-
* @param offset
|
|
13
|
-
*/
|
|
14
|
-
create(tiff, offset) {
|
|
15
|
-
const tagId = tiff.source.getUint16(offset);
|
|
16
|
-
if (tagId === TiffTag.TileOffsets ||
|
|
17
|
-
tagId === TiffTag.TileByteCounts ||
|
|
18
|
-
tagId === TiffTag.StripByteCounts ||
|
|
19
|
-
tagId === TiffTag.StripOffsets) {
|
|
20
|
-
return new CogTiffTagOffset(tagId, tiff, offset);
|
|
21
|
-
}
|
|
22
|
-
const staticTag = new CogTifTagStatic(tagId, tiff, offset);
|
|
23
|
-
if (staticTag.hasBytes)
|
|
24
|
-
return staticTag;
|
|
25
|
-
return new CogTiffTagLazy(tagId, tiff, offset);
|
|
26
|
-
},
|
|
27
|
-
isStatic(tiffTag) {
|
|
28
|
-
return tiffTag instanceof CogTifTagStatic;
|
|
29
|
-
},
|
|
30
|
-
isLazy(tiffTag) {
|
|
31
|
-
return tiffTag instanceof CogTiffTagLazy;
|
|
32
|
-
},
|
|
33
|
-
isOffsetArray(tiffTag) {
|
|
34
|
-
return tiffTag instanceof CogTiffTagOffset;
|
|
35
|
-
},
|
|
36
|
-
};
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlmZi50YWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVhZC90aWZmLnRhZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUc7SUFDdEI7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxJQUFhLEVBQUUsTUFBYztRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUNJLEtBQUssS0FBSyxPQUFPLENBQUMsV0FBVztZQUM3QixLQUFLLEtBQUssT0FBTyxDQUFDLGNBQWM7WUFDaEMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxlQUFlO1lBQ2pDLEtBQUssS0FBSyxPQUFPLENBQUMsWUFBWSxFQUNoQztZQUNFLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzRCxJQUFJLFNBQVMsQ0FBQyxRQUFRO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFekMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxRQUFRLENBQUksT0FBMEI7UUFDbEMsT0FBTyxPQUFPLFlBQVksZUFBZSxDQUFDO0lBQzlDLENBQUM7SUFDRCxNQUFNLENBQUksT0FBMEI7UUFDaEMsT0FBTyxPQUFPLFlBQVksY0FBYyxDQUFDO0lBQzdDLENBQUM7SUFDRCxhQUFhLENBQUMsT0FBdUI7UUFDakMsT0FBTyxPQUFPLFlBQVksZ0JBQWdCLENBQUM7SUFDL0MsQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2dUaWZmIH0gZnJvbSAnLi4vY29nLnRpZmYuanMnO1xuaW1wb3J0IHsgVGlmZlRhZyB9IGZyb20gJy4uL2NvbnN0L3RpZmYudGFnLmlkLmpzJztcbmltcG9ydCB7IENvZ1RpZmZUYWdCYXNlIH0gZnJvbSAnLi90YWcvdGlmZi50YWcuYmFzZS5qcyc7XG5pbXBvcnQgeyBDb2dUaWZmVGFnTGF6eSB9IGZyb20gJy4vdGFnL3RpZmYudGFnLmxhenkuanMnO1xuaW1wb3J0IHsgQ29nVGlmZlRhZ09mZnNldCB9IGZyb20gJy4vdGFnL3RpZmYudGFnLm9mZnNldC5qcyc7XG5pbXBvcnQgeyBDb2dUaWZUYWdTdGF0aWMgfSBmcm9tICcuL3RhZy90aWZmLnRhZy5zdGF0aWMuanMnO1xuXG5leHBvcnQgY29uc3QgQ29nVGlmZlRhZyA9IHtcbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgaWYgYWxsIHRoZSBkYXRhIGZvciB0aGUgdGlmZiB0YWcgaXMgbG9hZGVkIGluIGFuZCB1c2UgdGhhdCB0byBjcmVhdGUgdGhlIHNwZWNpZmljIENvZ1RpZmZUYWdcbiAgICAgKlxuICAgICAqIEBzZWUgQ29nVGlmZlRhZ0Jhc2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzb3VyY2VcbiAgICAgKiBAcGFyYW0gb2Zmc2V0XG4gICAgICovXG4gICAgY3JlYXRlKHRpZmY6IENvZ1RpZmYsIG9mZnNldDogbnVtYmVyKTogQ29nVGlmZlRhZ0Jhc2U8dW5rbm93bj4ge1xuICAgICAgICBjb25zdCB0YWdJZCA9IHRpZmYuc291cmNlLmdldFVpbnQxNihvZmZzZXQpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0YWdJZCA9PT0gVGlmZlRhZy5UaWxlT2Zmc2V0cyB8fFxuICAgICAgICAgICAgdGFnSWQgPT09IFRpZmZUYWcuVGlsZUJ5dGVDb3VudHMgfHxcbiAgICAgICAgICAgIHRhZ0lkID09PSBUaWZmVGFnLlN0cmlwQnl0ZUNvdW50cyB8fFxuICAgICAgICAgICAgdGFnSWQgPT09IFRpZmZUYWcuU3RyaXBPZmZzZXRzXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2dUaWZmVGFnT2Zmc2V0KHRhZ0lkLCB0aWZmLCBvZmZzZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhdGljVGFnID0gbmV3IENvZ1RpZlRhZ1N0YXRpYyh0YWdJZCwgdGlmZiwgb2Zmc2V0KTtcbiAgICAgICAgaWYgKHN0YXRpY1RhZy5oYXNCeXRlcykgcmV0dXJuIHN0YXRpY1RhZztcblxuICAgICAgICByZXR1cm4gbmV3IENvZ1RpZmZUYWdMYXp5KHRhZ0lkLCB0aWZmLCBvZmZzZXQpO1xuICAgIH0sXG5cbiAgICBpc1N0YXRpYzxUPih0aWZmVGFnOiBDb2dUaWZmVGFnQmFzZTxUPik6IHRpZmZUYWcgaXMgQ29nVGlmVGFnU3RhdGljPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRpZmZUYWcgaW5zdGFuY2VvZiBDb2dUaWZUYWdTdGF0aWM7XG4gICAgfSxcbiAgICBpc0xhenk8VD4odGlmZlRhZzogQ29nVGlmZlRhZ0Jhc2U8VD4pOiB0aWZmVGFnIGlzIENvZ1RpZmZUYWdMYXp5PFQ+IHtcbiAgICAgICAgcmV0dXJuIHRpZmZUYWcgaW5zdGFuY2VvZiBDb2dUaWZmVGFnTGF6eTtcbiAgICB9LFxuICAgIGlzT2Zmc2V0QXJyYXkodGlmZlRhZzogQ29nVGlmZlRhZ0Jhc2UpOiB0aWZmVGFnIGlzIENvZ1RpZmZUYWdPZmZzZXQge1xuICAgICAgICByZXR1cm4gdGlmZlRhZyBpbnN0YW5jZW9mIENvZ1RpZmZUYWdPZmZzZXQ7XG4gICAgfSxcbn07XG4iXX0=
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=tiff.tag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiff.tag.js","sourceRoot":"","sources":["../../src/read/tiff.tag.ts"],"names":[],"mappings":""}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ByteSize } from '../util/bytes.js';
|
|
2
2
|
import { TiffTagValueType } from '../const/tiff.tag.value.js';
|
|
3
|
-
export declare function getTiffTagSize(fieldType: TiffTagValueType):
|
|
4
|
-
export declare type TiffTagValueRational = [number, number];
|
|
5
|
-
export declare type TiffTagValueReaderFunc = (view: ChunkSource, offset: number) => number | TiffTagValueRational | string;
|
|
6
|
-
export declare function getTiffTagValueReader(fieldType: TiffTagValueType): TiffTagValueReaderFunc;
|
|
7
|
-
//# sourceMappingURL=tiff.value.reader.d.ts.map
|
|
3
|
+
export declare function getTiffTagSize(fieldType: TiffTagValueType): ByteSize;
|
|
@@ -1,65 +1,27 @@
|
|
|
1
|
-
import { ByteSize } from '@chunkd/core';
|
|
2
1
|
import { TiffTagValueType } from '../const/tiff.tag.value.js';
|
|
3
|
-
import * as ieee754 from 'ieee754';
|
|
4
2
|
export function getTiffTagSize(fieldType) {
|
|
5
3
|
switch (fieldType) {
|
|
6
|
-
case TiffTagValueType.
|
|
7
|
-
case TiffTagValueType.
|
|
8
|
-
case TiffTagValueType.
|
|
9
|
-
case TiffTagValueType.
|
|
4
|
+
case TiffTagValueType.Uint8:
|
|
5
|
+
case TiffTagValueType.Ascii:
|
|
6
|
+
case TiffTagValueType.Int8:
|
|
7
|
+
case TiffTagValueType.Undefined:
|
|
10
8
|
return 1;
|
|
11
|
-
case TiffTagValueType.
|
|
12
|
-
case TiffTagValueType.
|
|
9
|
+
case TiffTagValueType.Uint16:
|
|
10
|
+
case TiffTagValueType.Int16:
|
|
13
11
|
return 2;
|
|
14
|
-
case TiffTagValueType.
|
|
15
|
-
case TiffTagValueType.
|
|
16
|
-
case TiffTagValueType.
|
|
12
|
+
case TiffTagValueType.Uint32:
|
|
13
|
+
case TiffTagValueType.Int32:
|
|
14
|
+
case TiffTagValueType.Float32:
|
|
17
15
|
return 4;
|
|
18
|
-
case TiffTagValueType.
|
|
19
|
-
case TiffTagValueType.
|
|
20
|
-
case TiffTagValueType.
|
|
21
|
-
case TiffTagValueType.
|
|
22
|
-
case TiffTagValueType.
|
|
23
|
-
case TiffTagValueType.
|
|
16
|
+
case TiffTagValueType.Rational:
|
|
17
|
+
case TiffTagValueType.SignedRational:
|
|
18
|
+
case TiffTagValueType.Float64:
|
|
19
|
+
case TiffTagValueType.Uint64:
|
|
20
|
+
case TiffTagValueType.Int64:
|
|
21
|
+
case TiffTagValueType.Ifd8:
|
|
24
22
|
return 8;
|
|
25
23
|
default:
|
|
26
24
|
throw new Error(`Invalid fieldType ${fieldType}`);
|
|
27
25
|
}
|
|
28
26
|
}
|
|
29
|
-
|
|
30
|
-
char: (s, offset) => String.fromCharCode(s.getUint8(offset)),
|
|
31
|
-
uint8: (s, offset) => s.getUint8(offset),
|
|
32
|
-
uint16: (s, offset) => s.getUint16(offset),
|
|
33
|
-
uint32: (s, offset) => s.getUint32(offset),
|
|
34
|
-
uint64: (s, offset) => s.getUint64(offset),
|
|
35
|
-
double: (s, offset) => {
|
|
36
|
-
return ieee754.read(s.bytes(offset, ByteSize.Double), 0, s.isLittleEndian, 52, 8);
|
|
37
|
-
},
|
|
38
|
-
rational: (s, offset) => [s.getUint32(offset), s.getUint32(offset + 4)],
|
|
39
|
-
};
|
|
40
|
-
export function getTiffTagValueReader(fieldType) {
|
|
41
|
-
switch (fieldType) {
|
|
42
|
-
case TiffTagValueType.ASCII:
|
|
43
|
-
return TiffTagValueReader.char;
|
|
44
|
-
case TiffTagValueType.BYTE:
|
|
45
|
-
case TiffTagValueType.UNDEFINED:
|
|
46
|
-
case TiffTagValueType.SBYTE:
|
|
47
|
-
return TiffTagValueReader.uint8;
|
|
48
|
-
case TiffTagValueType.SHORT:
|
|
49
|
-
case TiffTagValueType.SSHORT:
|
|
50
|
-
return TiffTagValueReader.uint16;
|
|
51
|
-
case TiffTagValueType.LONG:
|
|
52
|
-
case TiffTagValueType.SLONG:
|
|
53
|
-
return TiffTagValueReader.uint32;
|
|
54
|
-
case TiffTagValueType.RATIONAL:
|
|
55
|
-
case TiffTagValueType.SRATIONAL:
|
|
56
|
-
return TiffTagValueReader.rational;
|
|
57
|
-
case TiffTagValueType.DOUBLE:
|
|
58
|
-
return TiffTagValueReader.double;
|
|
59
|
-
case TiffTagValueType.LONG8:
|
|
60
|
-
return TiffTagValueReader.uint64;
|
|
61
|
-
default:
|
|
62
|
-
throw new Error(`Unknown read type "${fieldType}" "${TiffTagValueType[fieldType]}"`);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlmZi52YWx1ZS5yZWFkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVhZC90aWZmLnZhbHVlLnJlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFlLE1BQU0sY0FBYyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sS0FBSyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBRW5DLE1BQU0sVUFBVSxjQUFjLENBQUMsU0FBMkI7SUFDdEQsUUFBUSxTQUFTLEVBQUU7UUFDZixLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQztRQUMzQixLQUFLLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUM1QixLQUFLLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUM1QixLQUFLLGdCQUFnQixDQUFDLFNBQVM7WUFDM0IsT0FBTyxDQUFDLENBQUM7UUFDYixLQUFLLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUM1QixLQUFLLGdCQUFnQixDQUFDLE1BQU07WUFDeEIsT0FBTyxDQUFDLENBQUM7UUFDYixLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQztRQUMzQixLQUFLLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUM1QixLQUFLLGdCQUFnQixDQUFDLEtBQUs7WUFDdkIsT0FBTyxDQUFDLENBQUM7UUFDYixLQUFLLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztRQUMvQixLQUFLLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztRQUNoQyxLQUFLLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztRQUM3QixLQUFLLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUM1QixLQUFLLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztRQUM3QixLQUFLLGdCQUFnQixDQUFDLElBQUk7WUFDdEIsT0FBTyxDQUFDLENBQUM7UUFDYjtZQUNJLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLFNBQVMsRUFBRSxDQUFDLENBQUM7S0FDekQ7QUFDTCxDQUFDO0FBS0QsTUFBTSxrQkFBa0IsR0FBOEM7SUFDbEUsSUFBSSxFQUFFLENBQUMsQ0FBYyxFQUFFLE1BQWMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pGLEtBQUssRUFBRSxDQUFDLENBQWMsRUFBRSxNQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQzdELE1BQU0sRUFBRSxDQUFDLENBQWMsRUFBRSxNQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQy9ELE1BQU0sRUFBRSxDQUFDLENBQWMsRUFBRSxNQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQy9ELE1BQU0sRUFBRSxDQUFDLENBQWMsRUFBRSxNQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQy9ELE1BQU0sRUFBRSxDQUFDLENBQWMsRUFBRSxNQUFjLEVBQUUsRUFBRTtRQUN2QyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBQ0QsUUFBUSxFQUFFLENBQUMsQ0FBYyxFQUFFLE1BQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQy9GLENBQUM7QUFDRixNQUFNLFVBQVUscUJBQXFCLENBQUMsU0FBMkI7SUFDN0QsUUFBUSxTQUFTLEVBQUU7UUFDZixLQUFLLGdCQUFnQixDQUFDLEtBQUs7WUFDdkIsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7UUFFbkMsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7UUFDM0IsS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7UUFDaEMsS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLO1lBQ3ZCLE9BQU8sa0JBQWtCLENBQUMsS0FBSyxDQUFDO1FBRXBDLEtBQUssZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1FBQzVCLEtBQUssZ0JBQWdCLENBQUMsTUFBTTtZQUN4QixPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztRQUVyQyxLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQztRQUMzQixLQUFLLGdCQUFnQixDQUFDLEtBQUs7WUFDdkIsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7UUFFckMsS0FBSyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7UUFDL0IsS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTO1lBQzNCLE9BQU8sa0JBQWtCLENBQUMsUUFBUSxDQUFDO1FBRXZDLEtBQUssZ0JBQWdCLENBQUMsTUFBTTtZQUN4QixPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztRQUVyQyxLQUFLLGdCQUFnQixDQUFDLEtBQUs7WUFDdkIsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7UUFFckM7WUFDSSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixTQUFTLE1BQU0sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzVGO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ5dGVTaXplLCBDaHVua1NvdXJjZSB9IGZyb20gJ0BjaHVua2QvY29yZSc7XG5pbXBvcnQgeyBUaWZmVGFnVmFsdWVUeXBlIH0gZnJvbSAnLi4vY29uc3QvdGlmZi50YWcudmFsdWUuanMnO1xuaW1wb3J0ICogYXMgaWVlZTc1NCBmcm9tICdpZWVlNzU0JztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpZmZUYWdTaXplKGZpZWxkVHlwZTogVGlmZlRhZ1ZhbHVlVHlwZSk6IG51bWJlciB7XG4gICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgICAgY2FzZSBUaWZmVGFnVmFsdWVUeXBlLkJZVEU6XG4gICAgICAgIGNhc2UgVGlmZlRhZ1ZhbHVlVHlwZS5BU0NJSTpcbiAgICAgICAgY2FzZSBUaWZmVGFnVmFsdWVUeXBlLlNCWVRFOlxuICAgICAgICBjYXNlIFRpZmZUYWdWYWx1ZVR5cGUuVU5ERUZJTkVEOlxuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIGNhc2UgVGlmZlRhZ1ZhbHVlVHlwZS5TSE9SVDpcbiAgICAgICAgY2FzZSBUaWZmVGFnVmFsdWVUeXBlLlNTSE9SVDpcbiAgICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICBjYXNlIFRpZmZUYWdWYWx1ZVR5cGUuTE9ORzpcbiAgICAgICAgY2FzZSBUaWZmVGFnVmFsdWVUeXBlLlNMT05HOlxuICAgICAgICBjYXNlIFRpZmZUYWdWYWx1ZVR5cGUuRkxPQVQ6XG4gICAgICAgICAgICByZXR1cm4gNDtcbiAgICAgICAgY2FzZSBUaWZmVGFnVmFsdWVUeXBlLlJBVElPTkFMOlxuICAgICAgICBjYXNlIFRpZmZUYWdWYWx1ZVR5cGUuU1JBVElPTkFMOlxuICAgICAgICBjYXNlIFRpZmZUYWdWYWx1ZVR5cGUuRE9VQkxFOlxuICAgICAgICBjYXNlIFRpZmZUYWdWYWx1ZVR5cGUuTE9ORzg6XG4gICAgICAgIGNhc2UgVGlmZlRhZ1ZhbHVlVHlwZS5TTE9ORzg6XG4gICAgICAgIGNhc2UgVGlmZlRhZ1ZhbHVlVHlwZS5JRkQ4OlxuICAgICAgICAgICAgcmV0dXJuIDg7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZmllbGRUeXBlICR7ZmllbGRUeXBlfWApO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgVGlmZlRhZ1ZhbHVlUmF0aW9uYWwgPSBbbnVtYmVyLCBudW1iZXJdO1xuZXhwb3J0IHR5cGUgVGlmZlRhZ1ZhbHVlUmVhZGVyRnVuYyA9ICh2aWV3OiBDaHVua1NvdXJjZSwgb2Zmc2V0OiBudW1iZXIpID0+IG51bWJlciB8IFRpZmZUYWdWYWx1ZVJhdGlvbmFsIHwgc3RyaW5nO1xuXG5jb25zdCBUaWZmVGFnVmFsdWVSZWFkZXI6IHsgW2tleTogc3RyaW5nXTogVGlmZlRhZ1ZhbHVlUmVhZGVyRnVuYyB9ID0ge1xuICAgIGNoYXI6IChzOiBDaHVua1NvdXJjZSwgb2Zmc2V0OiBudW1iZXIpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUocy5nZXRVaW50OChvZmZzZXQpKSxcbiAgICB1aW50ODogKHM6IENodW5rU291cmNlLCBvZmZzZXQ6IG51bWJlcikgPT4gcy5nZXRVaW50OChvZmZzZXQpLFxuICAgIHVpbnQxNjogKHM6IENodW5rU291cmNlLCBvZmZzZXQ6IG51bWJlcikgPT4gcy5nZXRVaW50MTYob2Zmc2V0KSxcbiAgICB1aW50MzI6IChzOiBDaHVua1NvdXJjZSwgb2Zmc2V0OiBudW1iZXIpID0+IHMuZ2V0VWludDMyKG9mZnNldCksXG4gICAgdWludDY0OiAoczogQ2h1bmtTb3VyY2UsIG9mZnNldDogbnVtYmVyKSA9PiBzLmdldFVpbnQ2NChvZmZzZXQpLFxuICAgIGRvdWJsZTogKHM6IENodW5rU291cmNlLCBvZmZzZXQ6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gaWVlZTc1NC5yZWFkKHMuYnl0ZXMob2Zmc2V0LCBCeXRlU2l6ZS5Eb3VibGUpLCAwLCBzLmlzTGl0dGxlRW5kaWFuLCA1MiwgOCk7XG4gICAgfSxcbiAgICByYXRpb25hbDogKHM6IENodW5rU291cmNlLCBvZmZzZXQ6IG51bWJlcikgPT4gW3MuZ2V0VWludDMyKG9mZnNldCksIHMuZ2V0VWludDMyKG9mZnNldCArIDQpXSxcbn07XG5leHBvcnQgZnVuY3Rpb24gZ2V0VGlmZlRhZ1ZhbHVlUmVhZGVyKGZpZWxkVHlwZTogVGlmZlRhZ1ZhbHVlVHlwZSk6IFRpZmZUYWdWYWx1ZVJlYWRlckZ1bmMge1xuICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7XG4gICAgICAgIGNhc2UgVGlmZlRhZ1ZhbHVlVHlwZS5BU0NJSTpcbiAgICAgICAgICAgIHJldHVybiBUaWZmVGFnVmFsdWVSZWFkZXIuY2hhcjtcblxuICAgICAgICBjYXNlIFRpZmZUYWdWYWx1ZVR5cGUuQllURTpcbiAgICAgICAgY2FzZSBUaWZmVGFnVmFsdWVUeXBlLlVOREVGSU5FRDpcbiAgICAgICAgY2FzZSBUaWZmVGFnVmFsdWVUeXBlLlNCWVRFOlxuICAgICAgICAgICAgcmV0dXJuIFRpZmZUYWdWYWx1ZVJlYWRlci51aW50ODtcblxuICAgICAgICBjYXNlIFRpZmZUYWdWYWx1ZVR5cGUuU0hPUlQ6XG4gICAgICAgIGNhc2UgVGlmZlRhZ1ZhbHVlVHlwZS5TU0hPUlQ6XG4gICAgICAgICAgICByZXR1cm4gVGlmZlRhZ1ZhbHVlUmVhZGVyLnVpbnQxNjtcblxuICAgICAgICBjYXNlIFRpZmZUYWdWYWx1ZVR5cGUuTE9ORzpcbiAgICAgICAgY2FzZSBUaWZmVGFnVmFsdWVUeXBlLlNMT05HOlxuICAgICAgICAgICAgcmV0dXJuIFRpZmZUYWdWYWx1ZVJlYWRlci51aW50MzI7XG5cbiAgICAgICAgY2FzZSBUaWZmVGFnVmFsdWVUeXBlLlJBVElPTkFMOlxuICAgICAgICBjYXNlIFRpZmZUYWdWYWx1ZVR5cGUuU1JBVElPTkFMOlxuICAgICAgICAgICAgcmV0dXJuIFRpZmZUYWdWYWx1ZVJlYWRlci5yYXRpb25hbDtcblxuICAgICAgICBjYXNlIFRpZmZUYWdWYWx1ZVR5cGUuRE9VQkxFOlxuICAgICAgICAgICAgcmV0dXJuIFRpZmZUYWdWYWx1ZVJlYWRlci5kb3VibGU7XG5cbiAgICAgICAgY2FzZSBUaWZmVGFnVmFsdWVUeXBlLkxPTkc4OlxuICAgICAgICAgICAgcmV0dXJuIFRpZmZUYWdWYWx1ZVJlYWRlci51aW50NjQ7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZWFkIHR5cGUgXCIke2ZpZWxkVHlwZX1cIiBcIiR7VGlmZlRhZ1ZhbHVlVHlwZVtmaWVsZFR5cGVdfVwiYCk7XG4gICAgfVxufVxuIl19
|
|
27
|
+
//# sourceMappingURL=tiff.value.reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiff.value.reader.js","sourceRoot":"","sources":["../../src/read/tiff.value.reader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,MAAM,UAAU,cAAc,CAAC,SAA2B;IACxD,QAAQ,SAAS,EAAE;QACjB,KAAK,gBAAgB,CAAC,KAAK,CAAC;QAC5B,KAAK,gBAAgB,CAAC,KAAK,CAAC;QAC5B,KAAK,gBAAgB,CAAC,IAAI,CAAC;QAC3B,KAAK,gBAAgB,CAAC,SAAS;YAC7B,OAAO,CAAC,CAAC;QACX,KAAK,gBAAgB,CAAC,MAAM,CAAC;QAC7B,KAAK,gBAAgB,CAAC,KAAK;YACzB,OAAO,CAAC,CAAC;QACX,KAAK,gBAAgB,CAAC,MAAM,CAAC;QAC7B,KAAK,gBAAgB,CAAC,KAAK,CAAC;QAC5B,KAAK,gBAAgB,CAAC,OAAO;YAC3B,OAAO,CAAC,CAAC;QACX,KAAK,gBAAgB,CAAC,QAAQ,CAAC;QAC/B,KAAK,gBAAgB,CAAC,cAAc,CAAC;QACrC,KAAK,gBAAgB,CAAC,OAAO,CAAC;QAC9B,KAAK,gBAAgB,CAAC,MAAM,CAAC;QAC7B,KAAK,gBAAgB,CAAC,KAAK,CAAC;QAC5B,KAAK,gBAAgB,CAAC,IAAI;YACxB,OAAO,CAAC,CAAC;QACX;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,SAAS,EAAE,CAAC,CAAC;KACrD;AACH,CAAC"}
|
package/build/source.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare enum ByteSize {
|
|
2
|
+
Double = 8,
|
|
3
|
+
Float32 = 4,
|
|
4
|
+
UInt64 = 8,
|
|
5
|
+
UInt32 = 4,
|
|
6
|
+
UInt16 = 2,
|
|
7
|
+
UInt8 = 1
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Read a uint64 at the offset
|
|
11
|
+
*
|
|
12
|
+
* This is not precise for large numbers
|
|
13
|
+
* @see {DataView.getBigUint64}
|
|
14
|
+
* @param offset offset to read
|
|
15
|
+
*/
|
|
16
|
+
export declare function getUint64(view: DataView, offset: number, isLittleEndian: boolean): number;
|
|
17
|
+
export declare function getUint(view: DataView, offset: number, bs: ByteSize, isLittleEndian: boolean): number;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export var ByteSize;
|
|
2
|
+
(function (ByteSize) {
|
|
3
|
+
ByteSize[ByteSize["Double"] = 8] = "Double";
|
|
4
|
+
ByteSize[ByteSize["Float32"] = 4] = "Float32";
|
|
5
|
+
ByteSize[ByteSize["UInt64"] = 8] = "UInt64";
|
|
6
|
+
ByteSize[ByteSize["UInt32"] = 4] = "UInt32";
|
|
7
|
+
ByteSize[ByteSize["UInt16"] = 2] = "UInt16";
|
|
8
|
+
ByteSize[ByteSize["UInt8"] = 1] = "UInt8";
|
|
9
|
+
})(ByteSize || (ByteSize = {}));
|
|
10
|
+
/** Shifting `<< 32` does not work in javascript */
|
|
11
|
+
const POW_32 = 2 ** 32;
|
|
12
|
+
/**
|
|
13
|
+
* Read a uint64 at the offset
|
|
14
|
+
*
|
|
15
|
+
* This is not precise for large numbers
|
|
16
|
+
* @see {DataView.getBigUint64}
|
|
17
|
+
* @param offset offset to read
|
|
18
|
+
*/
|
|
19
|
+
export function getUint64(view, offset, isLittleEndian) {
|
|
20
|
+
// split 64-bit number into two 32-bit (4-byte) parts
|
|
21
|
+
const left = view.getUint32(offset, isLittleEndian);
|
|
22
|
+
const right = view.getUint32(offset + 4, isLittleEndian);
|
|
23
|
+
// combine the two 32-bit values
|
|
24
|
+
const combined = isLittleEndian ? left + POW_32 * right : POW_32 * left + right;
|
|
25
|
+
if (!Number.isSafeInteger(combined)) {
|
|
26
|
+
throw new Error(combined + ' exceeds MAX_SAFE_INTEGER. Precision may is lost');
|
|
27
|
+
}
|
|
28
|
+
return combined;
|
|
29
|
+
}
|
|
30
|
+
export function getUint(view, offset, bs, isLittleEndian) {
|
|
31
|
+
switch (bs) {
|
|
32
|
+
case ByteSize.UInt8:
|
|
33
|
+
return view.getUint8(offset);
|
|
34
|
+
case ByteSize.UInt16:
|
|
35
|
+
return view.getUint16(offset, isLittleEndian);
|
|
36
|
+
case ByteSize.UInt32:
|
|
37
|
+
return view.getUint32(offset, isLittleEndian);
|
|
38
|
+
case ByteSize.UInt64:
|
|
39
|
+
return getUint64(view, offset, isLittleEndian);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=bytes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../src/util/bytes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,2CAAU,CAAA;IACV,6CAAW,CAAA;IACX,2CAAU,CAAA;IACV,2CAAU,CAAA;IACV,2CAAU,CAAA;IACV,yCAAS,CAAA;AACX,CAAC,EAPW,QAAQ,KAAR,QAAQ,QAOnB;AACD,mDAAmD;AACnD,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;AACvB;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAc,EAAE,MAAc,EAAE,cAAuB;IAC/E,qDAAqD;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;IAEzD,gCAAgC;IAChC,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;IAEhF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;QACnC,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,kDAAkD,CAAC,CAAC;KAChF;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAc,EAAE,MAAc,EAAE,EAAY,EAAE,cAAuB;IAC3F,QAAQ,EAAE,EAAE;QACV,KAAK,QAAQ,CAAC,KAAK;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,KAAK,QAAQ,CAAC,MAAM;YAClB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAChD,KAAK,QAAQ,CAAC,MAAM;YAClB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAChD,KAAK,QAAQ,CAAC,MAAM;YAClB,OAAO,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;KAClD;AACH,CAAC"}
|
package/build/util/util.hex.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Convert a number to a
|
|
2
|
+
* Convert a number to a formatted hex string
|
|
3
3
|
*
|
|
4
4
|
* @param num number to convert
|
|
5
5
|
* @param padding number of 0's to pad the digit with
|
|
@@ -7,5 +7,4 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @returns hex string eg 0x0015
|
|
9
9
|
**/
|
|
10
|
-
export declare function
|
|
11
|
-
//# sourceMappingURL=util.hex.d.ts.map
|
|
10
|
+
export declare function toHex(num: number, padding?: number, prefix?: boolean): string;
|