@cogeotiff/core 7.2.1 → 8.0.2

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 (147) hide show
  1. package/CHANGELOG.md +5 -502
  2. package/README.md +23 -11
  3. package/build/__benchmark__/cog.read.benchmark.d.ts +0 -1
  4. package/build/__benchmark__/cog.read.benchmark.js +6 -4
  5. package/build/__benchmark__/cog.read.benchmark.js.map +1 -0
  6. package/build/__benchmark__/source.file.d.ts +9 -0
  7. package/build/__benchmark__/source.file.js +29 -0
  8. package/build/__benchmark__/source.file.js.map +1 -0
  9. package/build/__benchmark__/source.memory.d.ts +9 -0
  10. package/build/__benchmark__/source.memory.js +32 -0
  11. package/build/__benchmark__/source.memory.js.map +1 -0
  12. package/build/__test__/cog.image.test.d.ts +1 -2
  13. package/build/__test__/cog.image.test.js +82 -90
  14. package/build/__test__/cog.image.test.js.map +1 -0
  15. package/build/__test__/cog.read.test.d.ts +1 -2
  16. package/build/__test__/cog.read.test.js +37 -55
  17. package/build/__test__/cog.read.test.js.map +1 -0
  18. package/build/__test__/example.d.ts +1 -0
  19. package/build/__test__/example.js +27 -0
  20. package/build/__test__/example.js.map +1 -0
  21. package/build/cog.tiff.d.ts +22 -28
  22. package/build/cog.tiff.image.d.ts +11 -23
  23. package/build/cog.tiff.image.js +108 -62
  24. package/build/cog.tiff.image.js.map +1 -0
  25. package/build/cog.tiff.js +141 -97
  26. package/build/cog.tiff.js.map +1 -0
  27. package/build/const/index.d.ts +1 -2
  28. package/build/const/index.js +2 -2
  29. package/build/const/index.js.map +1 -0
  30. package/build/const/tiff.endian.d.ts +0 -1
  31. package/build/const/tiff.endian.js +1 -1
  32. package/build/const/tiff.endian.js.map +1 -0
  33. package/build/const/tiff.mime.d.ts +10 -11
  34. package/build/const/tiff.mime.js +22 -22
  35. package/build/const/tiff.mime.js.map +1 -0
  36. package/build/const/tiff.tag.id.d.ts +3 -3
  37. package/build/const/tiff.tag.id.js +4 -3
  38. package/build/const/tiff.tag.id.js.map +1 -0
  39. package/build/const/tiff.tag.value.d.ts +15 -16
  40. package/build/const/tiff.tag.value.js +16 -16
  41. package/build/const/tiff.tag.value.js.map +1 -0
  42. package/build/const/tiff.version.d.ts +0 -1
  43. package/build/const/tiff.version.js +1 -1
  44. package/build/const/tiff.version.js.map +1 -0
  45. package/build/index.d.ts +11 -6
  46. package/build/index.js +9 -5
  47. package/build/index.js.map +1 -0
  48. package/build/read/data.view.offset.d.ts +15 -0
  49. package/build/read/data.view.offset.js +19 -0
  50. package/build/read/data.view.offset.js.map +1 -0
  51. package/build/read/tiff.gdal.d.ts +9 -12
  52. package/build/read/tiff.gdal.js +22 -17
  53. package/build/read/tiff.gdal.js.map +1 -0
  54. package/build/read/tiff.ifd.config.d.ts +6 -4
  55. package/build/read/tiff.ifd.config.js +2 -2
  56. package/build/read/tiff.ifd.config.js.map +1 -0
  57. package/build/read/tiff.tag.d.ts +40 -20
  58. package/build/read/tiff.tag.factory.d.ts +16 -0
  59. package/build/read/tiff.tag.factory.js +130 -0
  60. package/build/read/tiff.tag.factory.js.map +1 -0
  61. package/build/read/tiff.tag.js +2 -37
  62. package/build/read/tiff.tag.js.map +1 -0
  63. package/build/read/tiff.value.reader.d.ts +2 -6
  64. package/build/read/tiff.value.reader.js +16 -54
  65. package/build/read/tiff.value.reader.js.map +1 -0
  66. package/build/source.d.ts +5 -0
  67. package/build/source.js +2 -0
  68. package/build/source.js.map +1 -0
  69. package/build/util/bytes.d.ts +17 -0
  70. package/build/util/bytes.js +42 -0
  71. package/build/util/bytes.js.map +1 -0
  72. package/build/util/util.hex.d.ts +2 -3
  73. package/build/util/util.hex.js +4 -5
  74. package/build/util/util.hex.js.map +1 -0
  75. package/build/vector.d.ts +0 -1
  76. package/build/vector.js +1 -1
  77. package/build/vector.js.map +1 -0
  78. package/package.json +25 -30
  79. package/src/__benchmark__/cog.read.benchmark.ts +12 -10
  80. package/src/__benchmark__/source.file.ts +23 -0
  81. package/src/__benchmark__/source.memory.ts +23 -0
  82. package/src/__test__/cog.image.test.ts +188 -197
  83. package/src/__test__/cog.read.test.ts +50 -72
  84. package/src/__test__/example.ts +31 -0
  85. package/src/cog.tiff.image.ts +456 -447
  86. package/src/cog.tiff.ts +142 -145
  87. package/src/const/index.ts +1 -1
  88. package/src/const/tiff.endian.ts +2 -2
  89. package/src/const/tiff.mime.ts +21 -21
  90. package/src/const/tiff.tag.id.ts +157 -156
  91. package/src/const/tiff.tag.value.ts +16 -16
  92. package/src/const/tiff.version.ts +11 -11
  93. package/src/index.ts +11 -5
  94. package/src/read/data.view.offset.ts +23 -0
  95. package/src/read/tiff.gdal.ts +61 -63
  96. package/src/read/tiff.ifd.config.ts +35 -31
  97. package/src/read/tiff.tag.factory.ts +163 -0
  98. package/src/read/tiff.tag.ts +40 -38
  99. package/src/read/tiff.value.reader.ts +25 -73
  100. package/src/source.ts +5 -0
  101. package/src/util/bytes.ts +44 -0
  102. package/src/util/util.hex.ts +5 -7
  103. package/src/vector.ts +5 -5
  104. package/tsconfig.json +8 -8
  105. package/build/__benchmark__/cog.read.benchmark.d.ts.map +0 -1
  106. package/build/__test__/cog.image.test.d.ts.map +0 -1
  107. package/build/__test__/cog.read.test.d.ts.map +0 -1
  108. package/build/cog.tiff.d.ts.map +0 -1
  109. package/build/cog.tiff.image.d.ts.map +0 -1
  110. package/build/const/index.d.ts.map +0 -1
  111. package/build/const/tiff.endian.d.ts.map +0 -1
  112. package/build/const/tiff.mime.d.ts.map +0 -1
  113. package/build/const/tiff.tag.id.d.ts.map +0 -1
  114. package/build/const/tiff.tag.value.d.ts.map +0 -1
  115. package/build/const/tiff.version.d.ts.map +0 -1
  116. package/build/index.d.ts.map +0 -1
  117. package/build/read/tag/__test__/tag.test.d.ts +0 -2
  118. package/build/read/tag/__test__/tag.test.d.ts.map +0 -1
  119. package/build/read/tag/__test__/tag.test.js +0 -23
  120. package/build/read/tag/tiff.tag.base.d.ts +0 -55
  121. package/build/read/tag/tiff.tag.base.d.ts.map +0 -1
  122. package/build/read/tag/tiff.tag.base.js +0 -79
  123. package/build/read/tag/tiff.tag.lazy.d.ts +0 -7
  124. package/build/read/tag/tiff.tag.lazy.d.ts.map +0 -1
  125. package/build/read/tag/tiff.tag.lazy.js +0 -18
  126. package/build/read/tag/tiff.tag.offset.d.ts +0 -21
  127. package/build/read/tag/tiff.tag.offset.d.ts.map +0 -1
  128. package/build/read/tag/tiff.tag.offset.js +0 -54
  129. package/build/read/tag/tiff.tag.static.d.ts +0 -8
  130. package/build/read/tag/tiff.tag.static.d.ts.map +0 -1
  131. package/build/read/tag/tiff.tag.static.js +0 -17
  132. package/build/read/tiff.gdal.d.ts.map +0 -1
  133. package/build/read/tiff.ifd.config.d.ts.map +0 -1
  134. package/build/read/tiff.tag.d.ts.map +0 -1
  135. package/build/read/tiff.value.reader.d.ts.map +0 -1
  136. package/build/source/cog.source.view.d.ts +0 -33
  137. package/build/source/cog.source.view.d.ts.map +0 -1
  138. package/build/source/cog.source.view.js +0 -65
  139. package/build/util/util.hex.d.ts.map +0 -1
  140. package/build/vector.d.ts.map +0 -1
  141. package/src/@types/ieee754.d.ts +0 -18
  142. package/src/read/tag/__test__/tag.test.ts +0 -27
  143. package/src/read/tag/tiff.tag.base.ts +0 -126
  144. package/src/read/tag/tiff.tag.lazy.ts +0 -17
  145. package/src/read/tag/tiff.tag.offset.ts +0 -61
  146. package/src/read/tag/tiff.tag.static.ts +0 -15
  147. package/src/source/cog.source.view.ts +0 -77
@@ -0,0 +1,163 @@
1
+ import { CogTiff } from '../cog.tiff.js';
2
+ import { TiffTag } from '../const/tiff.tag.id.js';
3
+ import { TiffTagValueType } from '../const/tiff.tag.value.js';
4
+ import { getUint, getUint64 } from '../util/bytes.js';
5
+ import { DataViewOffset, hasBytes } from './data.view.offset.js';
6
+ import { Tag, TagLazy, TagOffset } from './tiff.tag.js';
7
+ import { getTiffTagSize } from './tiff.value.reader.js';
8
+
9
+ function readTagValue(
10
+ fieldType: TiffTagValueType,
11
+ bytes: DataView,
12
+ offset: number,
13
+ isLittleEndian: boolean,
14
+ ): number | number[] | string | bigint {
15
+ switch (fieldType) {
16
+ case TiffTagValueType.Ascii:
17
+ return String.fromCharCode(bytes.getUint8(offset));
18
+
19
+ case TiffTagValueType.Undefined:
20
+ case TiffTagValueType.Uint8:
21
+ return bytes.getUint8(offset);
22
+
23
+ case TiffTagValueType.Int8:
24
+ return bytes.getInt8(offset);
25
+
26
+ case TiffTagValueType.Uint16:
27
+ return bytes.getUint16(offset, isLittleEndian);
28
+
29
+ case TiffTagValueType.Int16:
30
+ return bytes.getInt16(offset, isLittleEndian);
31
+
32
+ case TiffTagValueType.Uint32:
33
+ return bytes.getUint32(offset, isLittleEndian);
34
+
35
+ case TiffTagValueType.Int32:
36
+ return bytes.getInt32(offset, isLittleEndian);
37
+
38
+ case TiffTagValueType.Rational:
39
+ return [bytes.getUint32(offset, isLittleEndian), bytes.getUint32(offset + 4, isLittleEndian)];
40
+
41
+ case TiffTagValueType.SignedRational:
42
+ return [bytes.getInt32(offset, isLittleEndian), bytes.getInt32(offset + 4, isLittleEndian)];
43
+
44
+ case TiffTagValueType.Float64:
45
+ return bytes.getFloat64(offset, isLittleEndian);
46
+
47
+ case TiffTagValueType.Uint64:
48
+ return getUint64(bytes, offset, isLittleEndian);
49
+ default:
50
+ throw new Error(`Unknown read type "${fieldType}" "${TiffTagValueType[fieldType]}"`);
51
+ }
52
+ }
53
+
54
+ function readValue<T>(tiff: CogTiff, bytes: DataView, offset: number, type: number, count: number): T {
55
+ const typeSize = getTiffTagSize(type);
56
+ const dataLength = count * typeSize;
57
+
58
+ if (count === 1) return readTagValue(type, bytes, offset, tiff.isLittleEndian) as unknown as T;
59
+
60
+ switch (type) {
61
+ case TiffTagValueType.Ascii:
62
+ return String.fromCharCode.apply(
63
+ null,
64
+ new Uint8Array(
65
+ bytes.buffer.slice(bytes.byteOffset + offset, bytes.byteOffset + offset + dataLength - 1),
66
+ ) as unknown as number[],
67
+ ) as unknown as T;
68
+ }
69
+
70
+ const output = [];
71
+ for (let i = 0; i < dataLength; i += typeSize) {
72
+ output.push(readTagValue(type, bytes, offset + i, tiff.isLittleEndian));
73
+ }
74
+
75
+ return output as unknown as T;
76
+ }
77
+
78
+ /**
79
+ * Determine if all the data for the tiff tag is loaded in and use that to create the specific CogTiffTag
80
+ *
81
+ * @see {Tag}
82
+ *
83
+ * @param tiff
84
+ * @param view Bytes to read from
85
+ * @param offset Offset in the dataview to read a tag
86
+ */
87
+ export function createTag(tiff: CogTiff, view: DataViewOffset, offset: number): Tag<unknown> {
88
+ const tagId = view.getUint16(offset + 0, tiff.isLittleEndian);
89
+
90
+ const dataType = view.getUint16(offset + 2, tiff.isLittleEndian) as TiffTagValueType;
91
+ const dataCount = getUint(view, offset + 4, tiff.ifdConfig.pointer, tiff.isLittleEndian);
92
+ const dataTypeSize = getTiffTagSize(dataType);
93
+ const dataLength = dataTypeSize * dataCount;
94
+
95
+ // Tag value is inline read the value
96
+ if (dataLength <= tiff.ifdConfig.pointer) {
97
+ const value = readValue(tiff, view, offset + 4 + tiff.ifdConfig.pointer, dataType, dataCount);
98
+ return { type: 'inline', id: tagId, count: dataCount, value, dataType, tagOffset: offset };
99
+ }
100
+
101
+ const dataOffset = getUint(view, offset + 4 + tiff.ifdConfig.pointer, tiff.ifdConfig.pointer, tiff.isLittleEndian);
102
+ switch (tagId) {
103
+ case TiffTag.TileOffsets:
104
+ case TiffTag.TileByteCounts:
105
+ case TiffTag.StripByteCounts:
106
+ case TiffTag.StripOffsets:
107
+ const tag: TagOffset = {
108
+ type: 'offset',
109
+ id: tagId,
110
+ count: dataCount,
111
+ dataType,
112
+ dataOffset,
113
+ value: [],
114
+ tagOffset: offset,
115
+ };
116
+ // 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
117
+ if (tagId === TiffTag.TileOffsets && hasBytes(view, dataOffset, dataLength)) setBytes(tag, view);
118
+ return tag;
119
+ }
120
+
121
+ // If we already have the bytes in the view read them in
122
+ if (hasBytes(view, dataOffset, dataLength)) {
123
+ const value = readValue(tiff, view, dataOffset - view.sourceOffset, dataType, dataCount);
124
+ return { type: 'inline', id: tagId, count: dataCount, value, dataType, tagOffset: offset };
125
+ }
126
+
127
+ return { type: 'lazy', id: tagId, count: dataCount, dataOffset, dataType, tagOffset: offset };
128
+ }
129
+
130
+ export async function fetchLazy<T>(tag: TagLazy<T>, tiff: CogTiff): Promise<T> {
131
+ if (tag.value != null) return tag.value;
132
+ const dataTypeSize = getTiffTagSize(tag.dataType);
133
+ const dataLength = dataTypeSize * tag.count;
134
+ const bytes = await tiff.source.fetch(tag.dataOffset, dataLength);
135
+ const view = new DataView(bytes);
136
+ tag.value = readValue(tiff, view, 0, tag.dataType, tag.count);
137
+ return tag.value as T;
138
+ }
139
+
140
+ export function setBytes(tag: TagOffset, view: DataViewOffset): void {
141
+ const dataTypeSize = getTiffTagSize(tag.dataType);
142
+ const startBytes = view.byteOffset + tag.dataOffset - view.sourceOffset;
143
+ tag.view = new DataView(view.buffer.slice(startBytes, startBytes + dataTypeSize * tag.count)) as DataViewOffset;
144
+ tag.view.sourceOffset = tag.dataOffset;
145
+ }
146
+
147
+ export async function getValueAt(tiff: CogTiff, tag: TagOffset, index: number): Promise<number> {
148
+ if (index > tag.count || index < 0) throw new Error('TagOffset: out of bounds :' + index);
149
+ if (tag.value[index] != null) return tag.value[index];
150
+ const dataTypeSize = getTiffTagSize(tag.dataType);
151
+
152
+ if (tag.view == null) {
153
+ const bytes = await tiff.source.fetch(tag.dataOffset + index * dataTypeSize, dataTypeSize);
154
+ const view = new DataView(bytes);
155
+ const value = readValue(tiff, view, 0, tag.dataType, 1) as number;
156
+ tag.value[index] = value;
157
+ return value;
158
+ }
159
+
160
+ const value = readValue(tiff, tag.view, index * dataTypeSize, tag.dataType, 1) as number;
161
+ tag.value[index] = value;
162
+ return value;
163
+ }
@@ -1,43 +1,45 @@
1
- import { CogTiff } from '../cog.tiff.js';
2
1
  import { TiffTag } from '../const/tiff.tag.id.js';
3
- import { CogTiffTagBase } from './tag/tiff.tag.base.js';
4
- import { CogTiffTagLazy } from './tag/tiff.tag.lazy.js';
5
- import { CogTiffTagOffset } from './tag/tiff.tag.offset.js';
6
- import { CogTifTagStatic } from './tag/tiff.tag.static.js';
2
+ import { TiffTagValueType } from '../const/tiff.tag.value.js';
3
+ import { DataViewOffset } from './data.view.offset.js';
7
4
 
8
- export const CogTiffTag = {
9
- /**
10
- * Determine if all the data for the tiff tag is loaded in and use that to create the specific CogTiffTag
11
- *
12
- * @see CogTiffTagBase
13
- *
14
- * @param source
15
- * @param offset
16
- */
17
- create(tiff: CogTiff, offset: number): CogTiffTagBase<unknown> {
18
- const tagId = tiff.source.getUint16(offset);
19
- if (
20
- tagId === TiffTag.TileOffsets ||
21
- tagId === TiffTag.TileByteCounts ||
22
- tagId === TiffTag.StripByteCounts ||
23
- tagId === TiffTag.StripOffsets
24
- ) {
25
- return new CogTiffTagOffset(tagId, tiff, offset);
26
- }
5
+ /** Tiff tag interfaces */
6
+ export type Tag<T = unknown> = TagLazy<T> | TagInline<T> | TagOffset;
27
7
 
28
- const staticTag = new CogTifTagStatic(tagId, tiff, offset);
29
- if (staticTag.hasBytes) return staticTag;
8
+ export interface TagBase {
9
+ /** Id of the Tag */
10
+ id: TiffTag;
11
+ /** Offset in bytes to where this tag was read from */
12
+ tagOffset: number;
13
+ /** Number of values */
14
+ count: number;
15
+ /** Tiff Tag Datatype @see {TiffTagValueType} */
16
+ dataType: TiffTagValueType;
17
+ }
30
18
 
31
- return new CogTiffTagLazy(tagId, tiff, offset);
32
- },
19
+ /** Tiff tag value is not inline and will be loaded later when requested */
20
+ export interface TagLazy<T> extends TagBase {
21
+ type: 'lazy';
22
+ /** Value if loaded undefined otherwise */
23
+ value?: T;
24
+ /** Where in the file the value is read from */
25
+ dataOffset: number;
26
+ }
33
27
 
34
- isStatic<T>(tiffTag: CogTiffTagBase<T>): tiffTag is CogTifTagStatic<T> {
35
- return tiffTag instanceof CogTifTagStatic;
36
- },
37
- isLazy<T>(tiffTag: CogTiffTagBase<T>): tiffTag is CogTiffTagLazy<T> {
38
- return tiffTag instanceof CogTiffTagLazy;
39
- },
40
- isOffsetArray(tiffTag: CogTiffTagBase): tiffTag is CogTiffTagOffset {
41
- return tiffTag instanceof CogTiffTagOffset;
42
- },
43
- };
28
+ /** Tiff tag that's value is inside the IFD and is already read */
29
+ export interface TagInline<T> extends TagBase {
30
+ type: 'inline';
31
+ value: T;
32
+ }
33
+
34
+ /** Tiff tag that is a list of offsets this can be partially read */
35
+ export interface TagOffset extends TagBase {
36
+ type: 'offset';
37
+ /** Values of the offest's this is a sparse array unless @see {isLoaded} is true */
38
+ value: number[];
39
+ /** has all the values been read */
40
+ isLoaded?: boolean;
41
+ /** Raw buffer of the values for lazy decoding, Reading 1000s of uint64s can take quite a while */
42
+ view?: DataViewOffset;
43
+ /** Where in the file the value is read from */
44
+ dataOffset: number;
45
+ }
@@ -1,76 +1,28 @@
1
- import { ByteSize, ChunkSource } from '@chunkd/core';
1
+ import { ByteSize } from '../util/bytes.js';
2
2
  import { TiffTagValueType } from '../const/tiff.tag.value.js';
3
- import * as ieee754 from 'ieee754';
4
3
 
5
- export function getTiffTagSize(fieldType: TiffTagValueType): number {
6
- switch (fieldType) {
7
- case TiffTagValueType.BYTE:
8
- case TiffTagValueType.ASCII:
9
- case TiffTagValueType.SBYTE:
10
- case TiffTagValueType.UNDEFINED:
11
- return 1;
12
- case TiffTagValueType.SHORT:
13
- case TiffTagValueType.SSHORT:
14
- return 2;
15
- case TiffTagValueType.LONG:
16
- case TiffTagValueType.SLONG:
17
- case TiffTagValueType.FLOAT:
18
- return 4;
19
- case TiffTagValueType.RATIONAL:
20
- case TiffTagValueType.SRATIONAL:
21
- case TiffTagValueType.DOUBLE:
22
- case TiffTagValueType.LONG8:
23
- case TiffTagValueType.SLONG8:
24
- case TiffTagValueType.IFD8:
25
- return 8;
26
- default:
27
- throw new Error(`Invalid fieldType ${fieldType}`);
28
- }
29
- }
30
-
31
- export type TiffTagValueRational = [number, number];
32
- export type TiffTagValueReaderFunc = (view: ChunkSource, offset: number) => number | TiffTagValueRational | string;
33
-
34
- const TiffTagValueReader: { [key: string]: TiffTagValueReaderFunc } = {
35
- char: (s: ChunkSource, offset: number) => String.fromCharCode(s.getUint8(offset)),
36
- uint8: (s: ChunkSource, offset: number) => s.getUint8(offset),
37
- uint16: (s: ChunkSource, offset: number) => s.getUint16(offset),
38
- uint32: (s: ChunkSource, offset: number) => s.getUint32(offset),
39
- uint64: (s: ChunkSource, offset: number) => s.getUint64(offset),
40
- double: (s: ChunkSource, offset: number) => {
41
- return ieee754.read(s.bytes(offset, ByteSize.Double), 0, s.isLittleEndian, 52, 8);
42
- },
43
- rational: (s: ChunkSource, offset: number) => [s.getUint32(offset), s.getUint32(offset + 4)],
44
- };
45
- export function getTiffTagValueReader(fieldType: TiffTagValueType): TiffTagValueReaderFunc {
46
- switch (fieldType) {
47
- case TiffTagValueType.ASCII:
48
- return TiffTagValueReader.char;
49
-
50
- case TiffTagValueType.BYTE:
51
- case TiffTagValueType.UNDEFINED:
52
- case TiffTagValueType.SBYTE:
53
- return TiffTagValueReader.uint8;
54
-
55
- case TiffTagValueType.SHORT:
56
- case TiffTagValueType.SSHORT:
57
- return TiffTagValueReader.uint16;
58
-
59
- case TiffTagValueType.LONG:
60
- case TiffTagValueType.SLONG:
61
- return TiffTagValueReader.uint32;
62
-
63
- case TiffTagValueType.RATIONAL:
64
- case TiffTagValueType.SRATIONAL:
65
- return TiffTagValueReader.rational;
66
-
67
- case TiffTagValueType.DOUBLE:
68
- return TiffTagValueReader.double;
69
-
70
- case TiffTagValueType.LONG8:
71
- return TiffTagValueReader.uint64;
72
-
73
- default:
74
- throw new Error(`Unknown read type "${fieldType}" "${TiffTagValueType[fieldType]}"`);
75
- }
4
+ export function getTiffTagSize(fieldType: TiffTagValueType): ByteSize {
5
+ switch (fieldType) {
6
+ case TiffTagValueType.Uint8:
7
+ case TiffTagValueType.Ascii:
8
+ case TiffTagValueType.Int8:
9
+ case TiffTagValueType.Undefined:
10
+ return 1;
11
+ case TiffTagValueType.Uint16:
12
+ case TiffTagValueType.Int16:
13
+ return 2;
14
+ case TiffTagValueType.Uint32:
15
+ case TiffTagValueType.Int32:
16
+ case TiffTagValueType.Float32:
17
+ return 4;
18
+ case TiffTagValueType.Rational:
19
+ case TiffTagValueType.SignedRational:
20
+ case TiffTagValueType.Float64:
21
+ case TiffTagValueType.Uint64:
22
+ case TiffTagValueType.Int64:
23
+ case TiffTagValueType.Ifd8:
24
+ return 8;
25
+ default:
26
+ throw new Error(`Invalid fieldType ${fieldType}`);
27
+ }
76
28
  }
package/src/source.ts ADDED
@@ -0,0 +1,5 @@
1
+ export interface Source {
2
+ url: URL;
3
+ /** Fetch bytes from a source */
4
+ fetch(offset: number, length?: number): Promise<ArrayBuffer>;
5
+ }
@@ -0,0 +1,44 @@
1
+ export enum ByteSize {
2
+ Double = 8,
3
+ Float32 = 4,
4
+ UInt64 = 8,
5
+ UInt32 = 4,
6
+ UInt16 = 2,
7
+ UInt8 = 1,
8
+ }
9
+ /** Shifting `<< 32` does not work in javascript */
10
+ const POW_32 = 2 ** 32;
11
+ /**
12
+ * Read a uint64 at the offset
13
+ *
14
+ * This is not precise for large numbers
15
+ * @see {DataView.getBigUint64}
16
+ * @param offset offset to read
17
+ */
18
+ export function getUint64(view: DataView, offset: number, isLittleEndian: boolean): number {
19
+ // split 64-bit number into two 32-bit (4-byte) parts
20
+ const left = view.getUint32(offset, isLittleEndian);
21
+ const right = view.getUint32(offset + 4, isLittleEndian);
22
+
23
+ // combine the two 32-bit values
24
+ const combined = isLittleEndian ? left + POW_32 * right : POW_32 * left + right;
25
+
26
+ if (!Number.isSafeInteger(combined)) {
27
+ throw new Error(combined + ' exceeds MAX_SAFE_INTEGER. Precision may is lost');
28
+ }
29
+
30
+ return combined;
31
+ }
32
+
33
+ export function getUint(view: DataView, offset: number, bs: ByteSize, isLittleEndian: boolean): number {
34
+ switch (bs) {
35
+ case ByteSize.UInt8:
36
+ return view.getUint8(offset);
37
+ case ByteSize.UInt16:
38
+ return view.getUint16(offset, isLittleEndian);
39
+ case ByteSize.UInt32:
40
+ return view.getUint32(offset, isLittleEndian);
41
+ case ByteSize.UInt64:
42
+ return getUint64(view, offset, isLittleEndian);
43
+ }
44
+ }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Convert a number to a formated hex string
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,10 +7,8 @@
7
7
  *
8
8
  * @returns hex string eg 0x0015
9
9
  **/
10
- export function toHexString(num: number, padding = 4, prefix = true): string {
11
- const hex = num.toString(16).padStart(padding, '0');
12
- if (prefix) {
13
- return '0x' + hex;
14
- }
15
- return hex;
10
+ export function toHex(num: number, padding = 4, prefix = true): string {
11
+ const hex = num.toString(16).padStart(padding, '0');
12
+ if (prefix) return '0x' + hex;
13
+ return hex;
16
14
  }
package/src/vector.ts CHANGED
@@ -1,14 +1,14 @@
1
1
  export interface Size {
2
- width: number;
3
- height: number;
2
+ width: number;
3
+ height: number;
4
4
  }
5
5
 
6
6
  export interface Point {
7
- x: number;
8
- y: number;
7
+ x: number;
8
+ y: number;
9
9
  }
10
10
 
11
11
  export interface BoundingBox extends Point, Size {}
12
12
  export interface Vector extends Point {
13
- z: number;
13
+ z: number;
14
14
  }
package/tsconfig.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
- "extends": "../../tsconfig.base.json",
3
- "compilerOptions": {
4
- "rootDir": "./src",
5
- "outDir": "./build",
6
- "lib": ["es2018", "dom"]
7
- },
8
- "include": ["src/**/*"],
9
- "references": [{ "path": "../fetchable" }]
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "rootDir": "./src",
5
+ "outDir": "./build",
6
+ "lib": ["es2018", "dom"]
7
+ },
8
+ "include": ["src"],
9
+ "references": []
10
10
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"cog.read.benchmark.d.ts","sourceRoot":"","sources":["../../src/__benchmark__/cog.read.benchmark.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cog.image.test.d.ts","sourceRoot":"","sources":["../../src/__test__/cog.image.test.ts"],"names":[],"mappings":"AAIA,OAAO,gCAAgC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cog.read.test.d.ts","sourceRoot":"","sources":["../../src/__test__/cog.read.test.ts"],"names":[],"mappings":"AAEA,OAAO,gCAAgC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cog.tiff.d.ts","sourceRoot":"","sources":["../src/cog.tiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAmC,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAK3F,qBAAa,OAAO;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,cAAoB;IAC3B,MAAM,EAAE,YAAY,EAAE,CAAM;IAC5B,OAAO,qBAA4B;IAEnC,OAAO,CAAC,MAAM,CAAkB;IAChC,SAAS,EAAE,aAAa,CAAiB;gBAE7B,MAAM,EAAE,WAAW;IAK/B,sCAAsC;IACtC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpD,6BAA6B;IAC7B,aAAa,UAAS;IAEtB,YAAY,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC;;;;OAIG;IACH,IAAI,CAAC,WAAW,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;YAM7B,MAAM;YAWN,QAAQ;IA4BtB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY;IAIjC;;;;OAIG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY;IAoBtD;;;;;;;;OAQG;IACG,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC;YAQ7F,UAAU;YAOV,OAAO;IAsBrB,gDAAgD;IAC1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cog.tiff.image.d.ts","sourceRoot":"","sources":["../src/cog.tiff.image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAmB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAwB;AACxB,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,oCAAoC;IACpC,CAAC,EAAE,MAAM,CAAC;IACV,oCAAoC;IACpC,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,YAAY;IACrB,qDAAqD;IACrD,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAEnC,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAC;IAEX,GAAG,EAAE,OAAO,CAAC;IAEb,sCAAsC;IACtC,OAAO,CAAC,aAAa,CAAS;IAC9B,iDAAiD;IACjD,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,CAAa;gBAE1C,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC;IAMxE;;;;OAIG;IACG,IAAI,CAAC,WAAW,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB9C;;OAEG;IACH,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,CAAC,GAAG,IAAI;IAMhC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCtC;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS;IAKtD;;;OAGG;IACU,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAOtD;;;;OAIG;IACH,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAiBrC;IAED,6FAA6F;IAC7F,IAAI,YAAY,IAAI,OAAO,CAO1B;IAED;;;;OAIG;IACH,IAAI,UAAU,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAqBzC;IAED;;;;OAIG;IACH,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAgB3C;IAED;;;;;;OAMG;IACH,IAAI,WAAW,IAAI,YAAY,GAAG,IAAI,CAMrC;IAED;;;;OAIG;IACH,IAAI,IAAI,IAAI,MAAM,GAAG,IAAI,CAIxB;IAED;;;;OAIG;IACH,IAAI,IAAI,IAAI,IAAI,CAKf;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,EAAE,CAEtB;IAED;;OAEG;IACI,OAAO,IAAI,OAAO;IAIzB;;OAEG;IACH,IAAI,QAAQ,IAAI,oBAAoB,CAKnC;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,sBAAsB,CAMtC;IAED;;;;;;OAMG;IACH,IAAI,UAAU,IAAI,gBAAgB,CAIjC;IAED;;;;;;OAMG;IACH,IAAI,UAAU,IAAI,MAAM,CAIvB;IAED;;;;;OAKG;cACa,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW7D,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW;IAShD;;;;OAIG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC;IAY5F,yGAAyG;IACzG,OAAO,CAAC,aAAa;IAcrB,2CAA2C;YAC7B,QAAQ;IAiBtB;;;;;;;OAOG;IACG,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC;IAwBlG;;;;;;;;OAQG;IACG,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;cAerC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAsB7F"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/const/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tiff.endian.d.ts","sourceRoot":"","sources":["../../src/const/tiff.endian.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,oBAAY,UAAU;IAClB,GAAG,QAAS;IACZ,MAAM,QAAS;CAClB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tiff.mime.d.ts","sourceRoot":"","sources":["../../src/const/tiff.mime.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,YAAY;IACpB,IAAI,6BAA6B;IACjC,IAAI,eAAe;IACnB,GAAG,cAAc;IACjB,MAAM,iBAAiB;IACvB,IAAI,eAAe;IACnB,IAAI,qBAAqB;IACzB,GAAG,oBAAoB;IACvB,OAAO,wBAAwB;IAC/B,KAAK,qBAAqB;IAC1B,IAAI,uBAAuB;CAC9B;AAED,eAAO,MAAM,eAAe,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;CAY1D,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tiff.tag.id.d.ts","sourceRoot":"","sources":["../../src/const/tiff.tag.id.ts"],"names":[],"mappings":"AACA,oBAAY,OAAO;IAEf,MAAM,MAAS;IACf,aAAa,MAAS;IACtB,UAAU,MAAS;IACnB,SAAS,MAAS;IAClB,QAAQ,MAAS;IACjB,WAAW,MAAS;IACpB,SAAS,QAAS;IAClB,QAAQ,MAAS;IACjB,YAAY,MAAS;IACrB,SAAS,MAAS;IAClB,cAAc,MAAS;IACvB,WAAW,MAAS;IACpB,iBAAiB,MAAS;IAC1B,gBAAgB,MAAS;IACzB,YAAY,MAAS;IACrB,gBAAgB,MAAS;IACzB,WAAW,MAAS;IACpB,UAAU,MAAS;IACnB,IAAI,MAAS;IACb,cAAc,MAAS;IACvB,cAAc,MAAS;IACvB,KAAK,MAAS;IACd,cAAc,MAAS;IACvB,WAAW,MAAS;IACpB,yBAAyB,MAAS;IAClC,mBAAmB,MAAS;IAC5B,cAAc,MAAS;IACvB,YAAY,MAAS;IACrB,eAAe,MAAS;IACxB,QAAQ,MAAS;IACjB,eAAe,MAAS;IACxB,YAAY,MAAS;IACrB,WAAW,MAAS;IACpB,aAAa,MAAS;IACtB,WAAW,MAAS;IACpB,WAAW,MAAS;IAGpB,WAAW,MAAS;IACpB,YAAY,MAAS;IACrB,QAAQ,MAAS;IACjB,sBAAsB,MAAS;IAC/B,MAAM,MAAS;IACf,iBAAiB,MAAS;IAC1B,YAAY,MAAS;IACrB,QAAQ,MAAS;IACjB,aAAa,MAAS;IACtB,OAAO,MAAS;IAChB,UAAU,MAAS;IACnB,QAAQ,MAAS;IACjB,UAAU,MAAS;IACnB,SAAS,MAAS;IAClB,qBAAqB,MAAS;IAC9B,mBAAmB,MAAS;IAC5B,YAAY,MAAS;IACrB,eAAe,MAAS;IACxB,eAAe,MAAS;IACxB,cAAc,MAAS;IACvB,OAAO,MAAS;IAChB,SAAS,MAAS;IAClB,SAAS,MAAS;IAClB,cAAc,MAAS;IACvB,UAAU,MAAS;IACnB,WAAW,MAAS;IACpB,SAAS,MAAS;IAClB,gBAAgB,MAAS;IACzB,UAAU,MAAS;IACnB,cAAc,MAAS;IACvB,SAAS,MAAS;IAClB,iBAAiB,MAAS;IAC1B,gBAAgB,MAAS;IACzB,gBAAgB,MAAS;IACzB,cAAc,MAAS;IACvB,SAAS,MAAS;IAGlB,aAAa,QAAS;IACtB,UAAU,QAAS;IACnB,iBAAiB,QAAS;IAC1B,gBAAgB,QAAS;IACzB,OAAO,QAAS;IAChB,WAAW,QAAS;IACpB,YAAY,QAAS;IACrB,UAAU,QAAS;IACnB,KAAK,QAAS;IACd,eAAe,QAAS;IACxB,OAAO,QAAS;IAChB,aAAa,QAAS;IACtB,WAAW,QAAS;IACpB,SAAS,QAAS;IAClB,iBAAiB,QAAS;IAC1B,WAAW,QAAS;IAGpB,IAAI,QAAS;IAGb,UAAU,QAAS;IAGnB,GAAG,MAAS;IAGZ,aAAa,QAAS;IACtB,WAAW,QAAS;IAGpB,SAAS,QAAS;IAGlB,eAAe,QAAS;IACxB,aAAa,QAAS;IACtB,mBAAmB,QAAS;IAC5B,eAAe,QAAS;IACxB,eAAe,QAAS;IACxB,cAAc,QAAS;CAC1B;AAED,oBAAY,UAAU;IAClB,iBAAiB,OAAO;IACxB,kBAAkB,OAAO;IACzB,gBAAgB,OAAO;IACvB,oBAAoB,OAAO;IAC3B,kBAAkB,OAAO;IACzB,uBAAuB,OAAO;IAC9B,uBAAuB,OAAO;IAC9B,qBAAqB,OAAO;IAC5B,wBAAwB,OAAO;IAC/B,sBAAsB,OAAO;IAC7B,yBAAyB,OAAO;IAChC,mBAAmB,OAAO;IAC1B,uBAAuB,OAAO;IAC9B,uBAAuB,OAAO;IAC9B,uBAAuB,OAAO;IAC9B,sBAAsB,OAAO;IAC7B,2BAA2B,OAAO;IAClC,iBAAiB,OAAO;IACxB,qBAAqB,OAAO;IAC5B,iBAAiB,OAAO;IACxB,gBAAgB,OAAO;IACvB,oBAAoB,OAAO;IAC3B,qBAAqB,OAAO;IAC5B,wBAAwB,OAAO;IAC/B,sBAAsB,OAAO;IAC7B,sBAAsB,OAAO;IAC7B,uBAAuB,OAAO;IAC9B,sBAAsB,OAAO;IAC7B,sBAAsB,OAAO;IAC7B,uBAAuB,OAAO;IAC9B,yBAAyB,OAAO;IAChC,wBAAwB,OAAO;IAC/B,4BAA4B,OAAO;IACnC,6BAA6B,OAAO;IACpC,oBAAoB,OAAO;IAC3B,mBAAmB,OAAO;IAC1B,uBAAuB,OAAO;IAC9B,wBAAwB,OAAO;IAC/B,0BAA0B,OAAO;IACjC,uBAAuB,OAAO;IAC9B,sBAAsB,OAAO;IAC7B,8BAA8B,OAAO;IACrC,4BAA4B,OAAO;IACnC,oBAAoB,OAAO;IAC3B,sBAAsB,OAAO;IAC7B,mBAAmB,OAAO;IAC1B,mBAAmB,OAAO;CAC7B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tiff.tag.value.d.ts","sourceRoot":"","sources":["../../src/const/tiff.tag.value.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IACxB,IAAI,IAAS;IACb,KAAK,IAAS;IACd,KAAK,IAAS;IACd,IAAI,IAAS;IACb,QAAQ,IAAS;IACjB,KAAK,IAAS;IACd,SAAS,IAAS;IAClB,MAAM,IAAS;IACf,KAAK,IAAS;IACd,SAAS,KAAS;IAClB,KAAK,KAAS;IACd,MAAM,KAAS;IAEf,KAAK,KAAS;IACd,MAAM,KAAS;IACf,IAAI,KAAS;CAChB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tiff.version.d.ts","sourceRoot":"","sources":["../../src/const/tiff.version.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,WAAW;IACnB;;;;QAII;IACJ,OAAO,KAAK;IACZ;;;OAGG;IACH,IAAI,KAAK;CACZ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=tag.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tag.test.d.ts","sourceRoot":"","sources":["../../../../src/read/tag/__test__/tag.test.ts"],"names":[],"mappings":""}
@@ -1,23 +0,0 @@
1
- import { TestFileChunkSource } from '@chunkd/core/build/__test__/chunk.source.fake.js';
2
- import o from 'ospec';
3
- import * as path from 'path';
4
- import { fileURLToPath } from 'url';
5
- import { CogTiff } from '../../../cog.tiff.js';
6
- import { CogTiffTagLazy } from '../tiff.tag.lazy.js';
7
- o.spec('TiffTag', () => {
8
- const dirName = fileURLToPath(import.meta.url);
9
- const cogSourceFile = new TestFileChunkSource(path.join(dirName, '../../../../../data/rgba8_tiled.tiff'));
10
- o.beforeEach(() => {
11
- cogSourceFile.chunks.clear();
12
- });
13
- o('should load lazy tags', async () => {
14
- const tiff = new CogTiff(cogSourceFile);
15
- await cogSourceFile.loadBytes(3680, 8);
16
- const lazy = new CogTiffTagLazy(339, tiff, 3680);
17
- o(lazy.value).equals(null);
18
- const res = await lazy.fetch();
19
- o(res).deepEquals([18761, 43, 8, 0]);
20
- o(lazy.value).deepEquals(res);
21
- });
22
- });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmVhZC90YWcvX190ZXN0X18vdGFnLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkYsT0FBTyxDQUFDLE1BQU0sT0FBTyxDQUFDO0FBQ3RCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDcEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7SUFDbkIsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxzQ0FBc0MsQ0FBQyxDQUFDLENBQUM7SUFFMUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDYixhQUFhLENBQUMsTUFBZ0MsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1RCxDQUFDLENBQUMsQ0FBQztJQUVILENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV4QyxNQUFNLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3RGaWxlQ2h1bmtTb3VyY2UgfSBmcm9tICdAY2h1bmtkL2NvcmUvYnVpbGQvX190ZXN0X18vY2h1bmsuc291cmNlLmZha2UuanMnO1xuaW1wb3J0IG8gZnJvbSAnb3NwZWMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgQ29nVGlmZiB9IGZyb20gJy4uLy4uLy4uL2NvZy50aWZmLmpzJztcbmltcG9ydCB7IENvZ1RpZmZUYWdMYXp5IH0gZnJvbSAnLi4vdGlmZi50YWcubGF6eS5qcyc7XG5cbm8uc3BlYygnVGlmZlRhZycsICgpID0+IHtcbiAgICBjb25zdCBkaXJOYW1lID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xuICAgIGNvbnN0IGNvZ1NvdXJjZUZpbGUgPSBuZXcgVGVzdEZpbGVDaHVua1NvdXJjZShwYXRoLmpvaW4oZGlyTmFtZSwgJy4uLy4uLy4uLy4uLy4uL2RhdGEvcmdiYThfdGlsZWQudGlmZicpKTtcblxuICAgIG8uYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIChjb2dTb3VyY2VGaWxlLmNodW5rcyBhcyBNYXA8dW5rbm93biwgdW5rbm93bj4pLmNsZWFyKCk7XG4gICAgfSk7XG5cbiAgICBvKCdzaG91bGQgbG9hZCBsYXp5IHRhZ3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRpZmYgPSBuZXcgQ29nVGlmZihjb2dTb3VyY2VGaWxlKTtcblxuICAgICAgICBhd2FpdCBjb2dTb3VyY2VGaWxlLmxvYWRCeXRlcygzNjgwLCA4KTtcbiAgICAgICAgY29uc3QgbGF6eSA9IG5ldyBDb2dUaWZmVGFnTGF6eSgzMzksIHRpZmYsIDM2ODApO1xuICAgICAgICBvKGxhenkudmFsdWUpLmVxdWFscyhudWxsKTtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBsYXp5LmZldGNoKCk7XG4gICAgICAgIG8ocmVzKS5kZWVwRXF1YWxzKFsxODc2MSwgNDMsIDgsIDBdKTtcbiAgICAgICAgbyhsYXp5LnZhbHVlKS5kZWVwRXF1YWxzKHJlcyk7XG4gICAgfSk7XG59KTtcbiJdfQ==
@@ -1,55 +0,0 @@
1
- import { CogTiff } from '../../cog.tiff.js';
2
- export declare abstract class CogTiffTagBase<T = unknown> {
3
- /**
4
- * Value of the tiff tag, may be null if the value has not been read
5
- */
6
- abstract value: T | null;
7
- /** Raw offset for where in the tif this tag starts */
8
- private byteOffset;
9
- /** Name of the tag */
10
- name: string;
11
- /** TifTagId @see TiffTag */
12
- id: number;
13
- /** Type of data inside the record @see this.dataTypeName */
14
- dataType: number;
15
- /** Number of records inside the tag */
16
- dataCount: number;
17
- tiff: CogTiff;
18
- constructor(id: number, tiff: CogTiff, offset: number);
19
- /**
20
- * Have the bytes for the tag been loaded, or is a fetch required to read the tag
21
- */
22
- get hasBytes(): boolean;
23
- /**
24
- * is the tag ready to be read
25
- */
26
- get isReady(): boolean;
27
- /**
28
- * Get the size of the data type
29
- *
30
- * @remarks
31
- * This is only the size of one instance of the data @see this.dataLength for total byte size
32
- *
33
- */
34
- dataTypeSize: number;
35
- /**
36
- * Get a human readable name for a datatype
37
- *
38
- */
39
- get dataTypeName(): string;
40
- /**
41
- * Get the number of bytes used for the all of the data
42
- */
43
- dataLength: number;
44
- /** absolute offset of the Tag value */
45
- get valuePointer(): number;
46
- /** Size of the IFD (bytes) */
47
- get size(): number;
48
- /** Is the value of this tag inline, or is it a pointer to the real value */
49
- get isValueInline(): boolean;
50
- /** Read the value in from the byte array */
51
- readValue(): T;
52
- /** Get a human(ish) friendly output for the tags */
53
- toJSON(): Record<string, unknown>;
54
- }
55
- //# sourceMappingURL=tiff.tag.base.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tiff.tag.base.d.ts","sourceRoot":"","sources":["../../../src/read/tag/tiff.tag.base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAK5C,8BAAsB,cAAc,CAAC,CAAC,GAAG,OAAO;IAC5C;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAEzB,sDAAsD;IACtD,OAAO,CAAC,UAAU,CAAS;IAE3B,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IAEb,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAC;IAEX,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IAEjB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAElB,IAAI,EAAE,OAAO,CAAC;gBAEF,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAYrD;;OAEG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;;;OAMG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB,uCAAuC;IACvC,IAAI,YAAY,IAAI,MAAM,CAIzB;IAED,8BAA8B;IAC9B,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,4EAA4E;IAC5E,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED,4CAA4C;IAC5C,SAAS,IAAI,CAAC;IAoBd,oDAAoD;IACpD,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAUpC"}