@cogeotiff/core 9.4.0 → 9.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## [9.5.0](https://github.com/blacha/cogeotiff/compare/core-v9.4.0...core-v9.5.0) (2026-03-25)
4
+
5
+
6
+ ### Features
7
+
8
+ * Improved type definitions for ModelPixelScale and ModelTransformation ([#1426](https://github.com/blacha/cogeotiff/issues/1426)) ([eaeb2d7](https://github.com/blacha/cogeotiff/commit/eaeb2d72cd8b0e61ac3c17a6b89c5a95c9b9bb22))
9
+ * more abort signals ([#1433](https://github.com/blacha/cogeotiff/issues/1433)) ([67d4506](https://github.com/blacha/cogeotiff/commit/67d450687a9b91f31e6b5191eb5d455650757e7e)), closes [#1430](https://github.com/blacha/cogeotiff/issues/1430)
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * handle falsy GdalNoData values like "0" ([#1450](https://github.com/blacha/cogeotiff/issues/1450)) ([68fdded](https://github.com/blacha/cogeotiff/commit/68fdded1b78adde0b926f6cf548bf17f1fec8319))
15
+
3
16
  ## [9.4.0](https://github.com/blacha/cogeotiff/compare/core-v9.3.0...core-v9.4.0) (2026-02-26)
4
17
 
5
18
 
@@ -5,6 +5,8 @@ import { TestFileSource } from '../__benchmark__/source.file.js';
5
5
  import { SourceMemory } from '../__benchmark__/source.memory.js';
6
6
  import { TiffMimeType } from '../const/tiff.mime.js';
7
7
  import { Photometric, TiffTag } from '../const/tiff.tag.id.js';
8
+ import { TiffTagValueType } from '../const/tiff.tag.value.js';
9
+ import { TiffImage } from '../tiff.image.js';
8
10
  import { Tiff } from '../tiff.js';
9
11
  import { ByteSize } from '../util/bytes.js';
10
12
  // 900913 properties.
@@ -175,3 +177,54 @@ describe('CogStrip', () => {
175
177
  assert.equal(stripB?.bytes.byteLength, 152);
176
178
  });
177
179
  });
180
+ describe('TiffImage.noData', () => {
181
+ /** Create a TiffImage with a specific GdalNoData tag value for testing */
182
+ function imageWithNoData(value) {
183
+ const tags = new Map();
184
+ tags.set(TiffTag.GdalNoData, {
185
+ id: TiffTag.GdalNoData,
186
+ name: 'GdalNoData',
187
+ tagOffset: 0,
188
+ count: 1,
189
+ dataType: TiffTagValueType.Ascii,
190
+ type: 'inline',
191
+ value,
192
+ });
193
+ return new TiffImage(null, 0, tags);
194
+ }
195
+ it('should return null when GdalNoData tag is absent', () => {
196
+ const img = new TiffImage(null, 0, new Map());
197
+ assert.equal(img.noData, null);
198
+ });
199
+ it('should parse a negative nodata value', () => {
200
+ const img = imageWithNoData('-9999');
201
+ assert.equal(img.noData, -9999);
202
+ });
203
+ it('should parse nodata value of "0" (falsy string)', () => {
204
+ const img = imageWithNoData('0');
205
+ assert.equal(img.noData, 0);
206
+ });
207
+ it('should parse a positive nodata value', () => {
208
+ const img = imageWithNoData('255');
209
+ assert.equal(img.noData, 255);
210
+ });
211
+ it('should parse a floating point nodata value', () => {
212
+ const img = imageWithNoData('-3.4028234663852886e+38');
213
+ assert.equal(img.noData, -3.4028234663852886e38);
214
+ });
215
+ it('should throw when lazy tag value is undefined (not yet fetched)', () => {
216
+ const tags = new Map();
217
+ tags.set(TiffTag.GdalNoData, {
218
+ id: TiffTag.GdalNoData,
219
+ name: 'GdalNoData',
220
+ tagOffset: 0,
221
+ count: 1,
222
+ dataType: TiffTagValueType.Ascii,
223
+ type: 'lazy',
224
+ dataOffset: 0,
225
+ value: undefined,
226
+ });
227
+ const img = new TiffImage(null, 0, tags);
228
+ assert.throws(() => img.noData, /GdalNoData tag is not loaded/);
229
+ });
230
+ });
@@ -410,9 +410,26 @@ export interface TiffTagType {
410
410
  [TiffTag.SampleFormat]: SampleFormat[];
411
411
  [TiffTag.GdalMetadata]: string;
412
412
  [TiffTag.GdalNoData]: string;
413
- [TiffTag.ModelPixelScale]: number[];
413
+ [TiffTag.ModelPixelScale]: [scaleX: number, scaleY: number, scaleZ: number];
414
414
  [TiffTag.ModelTiePoint]: number[];
415
- [TiffTag.ModelTransformation]: number[];
415
+ [TiffTag.ModelTransformation]: [
416
+ number,
417
+ number,
418
+ number,
419
+ number,
420
+ number,
421
+ number,
422
+ number,
423
+ number,
424
+ number,
425
+ number,
426
+ number,
427
+ number,
428
+ number,
429
+ number,
430
+ number,
431
+ number
432
+ ];
416
433
  [TiffTag.GeoKeyDirectory]: number[];
417
434
  [TiffTag.GeoDoubleParams]: number[];
418
435
  [TiffTag.GeoAsciiParams]: string;
@@ -1 +1 @@
1
- {"version":3,"file":"tiff.tag.id.d.ts","sourceRoot":"","sources":["../../src/const/tiff.tag.id.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tiff.tag.id.d.ts","sourceRoot":"","sources":["../../src/const/tiff.tag.id.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { TiffTagValueType } from '../const/tiff.tag.value.js';
2
- import type { Tiff } from '../tiff.js';
2
+ import type { Tiff, TiffFetchOptions } from '../tiff.js';
3
3
  import type { DataViewOffset } from './data.view.offset.js';
4
4
  import type { Tag, TagLazy, TagOffset } from './tiff.tag.js';
5
5
  /**
@@ -24,13 +24,13 @@ export declare function readTypedValue<T>(tiff: Tiff, bytes: DataView, offset: n
24
24
  */
25
25
  export declare function createTag(tiff: Tiff, view: DataViewOffset, offset: number): Tag<unknown>;
26
26
  /** Fetch the value from a {@link TagLazy} tag */
27
- export declare function fetchLazy<T>(tag: TagLazy<T>, tiff: Tiff): Promise<T>;
27
+ export declare function fetchLazy<T>(tag: TagLazy<T>, tiff: Tiff, options?: TiffFetchOptions): Promise<T>;
28
28
  /**
29
29
  * Fetch all the values from a {@link TagOffset}
30
30
  */
31
- export declare function fetchAllOffsets(tiff: Tiff, tag: TagOffset): Promise<TagOffset['value']>;
31
+ export declare function fetchAllOffsets(tiff: Tiff, tag: TagOffset, options?: TiffFetchOptions): Promise<TagOffset['value']>;
32
32
  export declare function setBytes(tag: TagOffset, view: DataViewOffset): void;
33
33
  /** Partially fetch the values of a {@link TagOffset} and return the value for the offset */
34
- export declare function getValueAt(tiff: Tiff, tag: TagOffset, index: number): Promise<number>;
34
+ export declare function getValueAt(tiff: Tiff, tag: TagOffset, index: number, options?: TiffFetchOptions): Promise<number>;
35
35
  export declare function getValueAtSync(tiff: Tiff, tag: TagOffset, index: number): number | null;
36
36
  //# sourceMappingURL=tiff.tag.factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tiff.tag.factory.d.ts","sourceRoot":"","sources":["../../src/read/tiff.tag.factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAoD7D;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,gBAAgB,GACrB,CAAC,GAAG,IAAI,CAkBV;AAgDD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAqDxF;AAED,iDAAiD;AACjD,wBAAsB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAQ1E;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAa7F;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAKnE;AAED,4FAA4F;AAC5F,wBAAsB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB3F;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUvF"}
1
+ {"version":3,"file":"tiff.tag.factory.d.ts","sourceRoot":"","sources":["../../src/read/tiff.tag.factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAoD7D;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,gBAAgB,GACrB,CAAC,GAAG,IAAI,CAkBV;AAgDD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAqDxF;AAED,iDAAiD;AACjD,wBAAsB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,CAQtG;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,SAAS,EACd,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAa7B;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAKnE;AAED,4FAA4F;AAC5F,wBAAsB,UAAU,CAC9B,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUvF"}
@@ -149,12 +149,12 @@ export function createTag(tiff, view, offset) {
149
149
  return { type: 'lazy', id: tagId, name: TiffTag[tagId], count: dataCount, dataOffset, dataType, tagOffset: offset };
150
150
  }
151
151
  /** Fetch the value from a {@link TagLazy} tag */
152
- export async function fetchLazy(tag, tiff) {
152
+ export async function fetchLazy(tag, tiff, options) {
153
153
  if (tag.value != null)
154
154
  return tag.value;
155
155
  const dataTypeSize = getTiffTagSize(tag.dataType);
156
156
  const dataLength = dataTypeSize * tag.count;
157
- const bytes = await tiff.source.fetch(tag.dataOffset, dataLength);
157
+ const bytes = await tiff.source.fetch(tag.dataOffset, dataLength, options);
158
158
  const view = new DataView(bytes);
159
159
  tag.value = readValue(tiff, tag.id, view, 0, tag.dataType, tag.count);
160
160
  return tag.value;
@@ -162,10 +162,10 @@ export async function fetchLazy(tag, tiff) {
162
162
  /**
163
163
  * Fetch all the values from a {@link TagOffset}
164
164
  */
165
- export async function fetchAllOffsets(tiff, tag) {
165
+ export async function fetchAllOffsets(tiff, tag, options) {
166
166
  const dataTypeSize = getTiffTagSize(tag.dataType);
167
167
  if (tag.view == null) {
168
- const bytes = await tiff.source.fetch(tag.dataOffset, dataTypeSize * tag.count);
168
+ const bytes = await tiff.source.fetch(tag.dataOffset, dataTypeSize * tag.count, options);
169
169
  tag.view = new DataView(bytes);
170
170
  tag.view.sourceOffset = tag.dataOffset;
171
171
  }
@@ -181,14 +181,14 @@ export function setBytes(tag, view) {
181
181
  tag.view.sourceOffset = tag.dataOffset;
182
182
  }
183
183
  /** Partially fetch the values of a {@link TagOffset} and return the value for the offset */
184
- export async function getValueAt(tiff, tag, index) {
184
+ export async function getValueAt(tiff, tag, index, options) {
185
185
  if (index > tag.count || index < 0)
186
186
  throw new Error('TagOffset: out of bounds :' + index);
187
187
  if (tag.value[index] != null)
188
188
  return tag.value[index];
189
189
  const dataTypeSize = getTiffTagSize(tag.dataType);
190
190
  if (tag.view == null) {
191
- const bytes = await tiff.source.fetch(tag.dataOffset + index * dataTypeSize, dataTypeSize);
191
+ const bytes = await tiff.source.fetch(tag.dataOffset + index * dataTypeSize, dataTypeSize, options);
192
192
  const view = new DataView(bytes);
193
193
  // Skip type conversion to array by using undefined tiff tag id
194
194
  const value = readValue(tiff, undefined, view, 0, tag.dataType, 1);
package/build/tiff.d.ts CHANGED
@@ -7,6 +7,9 @@ export interface TiffCreationOptions {
7
7
  /** When initializing the tiff, read data in blocks of this size (in KB) */
8
8
  defaultReadSize: number;
9
9
  }
10
+ export interface TiffFetchOptions {
11
+ signal?: AbortSignal;
12
+ }
10
13
  export declare class Tiff {
11
14
  /** Read 16KB blocks at a time */
12
15
  static DefaultReadSize: number;
@@ -30,14 +33,14 @@ export declare class Tiff {
30
33
  /** A Tiff constructed from a source will not be pre-initialized with {@link init}. */
31
34
  constructor(source: Source, options?: TiffCreationOptions);
32
35
  /** Create a tiff and initialize it by reading the tiff headers */
33
- static create(source: Source, options?: TiffCreationOptions): Promise<Tiff>;
36
+ static create(source: Source, options?: TiffCreationOptions & TiffFetchOptions): Promise<Tiff>;
34
37
  /**
35
38
  * Initialize the tiff loading in the header and all image headers.
36
39
  *
37
40
  * This is only required if the Tiff was created with the constructor, if you
38
41
  * used {@link create} this will have already been called.
39
42
  */
40
- init(): Promise<Tiff>;
43
+ init(options?: TiffFetchOptions): Promise<Tiff>;
41
44
  /**
42
45
  * Find a image which has a resolution similar to the provided resolution
43
46
  *
@@ -1 +1 @@
1
- {"version":3,"file":"tiff.d.ts","sourceRoot":"","sources":["../src/tiff.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAItD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,IAAI;IACf,iCAAiC;IACjC,MAAM,CAAC,eAAe,SAAa;IACnC,iCAAiC;IACjC,eAAe,SAAwB;IACvC,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,OAAO,cAAoB;IAC3B,0CAA0C;IAC1C,MAAM,EAAE,SAAS,EAAE,CAAM;IACzB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,4CAA4C;IAC5C,SAAS,EAAE,aAAa,CAAiB;IACzC,8CAA8C;IAC9C,cAAc,UAAS;IACvB,6BAA6B;IAC7B,aAAa,UAAS;IAEtB,OAAO,CAAC,YAAY,CAAC,CAAgB;IAErC,sFAAsF;gBAC1E,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,mBAA+D;IAKpG,kEAAkE;IAClE,MAAM,CAAC,MAAM,CACX,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAA+D,GACvE,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;;OAKG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrB;;;;OAIG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS;IAoBnD,qEAAqE;YACvD,UAAU;IAgExB;;;;;OAKG;IACH,OAAO,CAAC,OAAO;CAsBhB"}
1
+ {"version":3,"file":"tiff.d.ts","sourceRoot":"","sources":["../src/tiff.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAItD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,qBAAa,IAAI;IACf,iCAAiC;IACjC,MAAM,CAAC,eAAe,SAAa;IACnC,iCAAiC;IACjC,eAAe,SAAwB;IACvC,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,OAAO,cAAoB;IAC3B,0CAA0C;IAC1C,MAAM,EAAE,SAAS,EAAE,CAAM;IACzB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,4CAA4C;IAC5C,SAAS,EAAE,aAAa,CAAiB;IACzC,8CAA8C;IAC9C,cAAc,UAAS;IACvB,6BAA6B;IAC7B,aAAa,UAAS;IAEtB,OAAO,CAAC,YAAY,CAAC,CAAgB;IAErC,sFAAsF;gBAC1E,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,mBAA+D;IAKpG,kEAAkE;IAClE,MAAM,CAAC,MAAM,CACX,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAAmB,GAAG,gBAA4D,GAC1F,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;;OAKG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C;;;;OAIG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS;IAoBnD,qEAAqE;YACvD,UAAU;IAiExB;;;;;OAKG;IACH,OAAO,CAAC,OAAO;CAsBhB"}
@@ -2,7 +2,7 @@ import { TiffMimeType } from './const/tiff.mime.js';
2
2
  import type { TiffTagGeoType, TiffTagType } from './const/tiff.tag.id.js';
3
3
  import { Compression, TiffTag, TiffTagGeo } from './const/tiff.tag.id.js';
4
4
  import type { Tag, TagInline, TagOffset } from './read/tiff.tag.js';
5
- import type { Tiff } from './tiff.js';
5
+ import type { Tiff, TiffFetchOptions } from './tiff.js';
6
6
  import type { BoundingBox, Size } from './vector.js';
7
7
  /** Invalid EPSG code */
8
8
  export declare const InvalidProjectionCode = 32767;
@@ -49,7 +49,7 @@ export declare class TiffImage {
49
49
  *
50
50
  * @param loadGeoTags Whether to load the GeoKeyDirectory and unpack it
51
51
  */
52
- init(loadGeoTags?: boolean): Promise<void>;
52
+ init(loadGeoTags?: boolean, options?: TiffFetchOptions): Promise<void>;
53
53
  /**
54
54
  * Get the value of a TiffTag if it has been loaded, null otherwise.
55
55
  *
@@ -84,7 +84,7 @@ export declare class TiffImage {
84
84
  *
85
85
  * @param tag tag to fetch
86
86
  */
87
- fetch<T extends keyof TiffTagType>(tag: T): Promise<TiffTagType[T] | null>;
87
+ fetch<T extends keyof TiffTagType>(tag: T, options?: TiffFetchOptions): Promise<TiffTagType[T] | null>;
88
88
  /**
89
89
  * Get the associated TiffTagGeo
90
90
  *
@@ -192,16 +192,14 @@ export declare class TiffImage {
192
192
  *
193
193
  * @param index Strip index to read
194
194
  */
195
- getStrip(index: number): Promise<{
195
+ getStrip(index: number, options?: TiffFetchOptions): Promise<{
196
196
  mimeType: TiffMimeType;
197
197
  bytes: ArrayBuffer;
198
198
  } | null>;
199
199
  /** The jpeg header is stored in the IFD, read the JPEG header and adjust the byte array to include it */
200
200
  getJpegHeader(bytes: ArrayBuffer): ArrayBuffer;
201
201
  /** Read image bytes at the given offset */
202
- getBytes(offset: number, byteCount: number, options?: {
203
- signal?: AbortSignal;
204
- }): Promise<{
202
+ getBytes(offset: number, byteCount: number, options?: TiffFetchOptions): Promise<{
205
203
  mimeType: TiffMimeType;
206
204
  bytes: ArrayBuffer;
207
205
  compression: Compression;
@@ -214,9 +212,7 @@ export declare class TiffImage {
214
212
  * @param x Tile x offset
215
213
  * @param y Tile y offset
216
214
  */
217
- getTile(x: number, y: number, options?: {
218
- signal?: AbortSignal;
219
- }): Promise<{
215
+ getTile(x: number, y: number, options?: TiffFetchOptions): Promise<{
220
216
  mimeType: TiffMimeType;
221
217
  bytes: ArrayBuffer;
222
218
  compression: Compression;
@@ -232,7 +228,7 @@ export declare class TiffImage {
232
228
  *
233
229
  * @returns if the tile exists and has data
234
230
  */
235
- hasTile(x: number, y: number): Promise<boolean>;
231
+ hasTile(x: number, y: number, options?: TiffFetchOptions): Promise<boolean>;
236
232
  /**
237
233
  * Load the offset and byteCount of a tile
238
234
  *
@@ -241,7 +237,7 @@ export declare class TiffImage {
241
237
  * @param index index in the tile array
242
238
  * @returns Offset and byteCount for the tile
243
239
  */
244
- getTileSize(index: number): Promise<{
240
+ getTileSize(index: number, options?: TiffFetchOptions): Promise<{
245
241
  offset: number;
246
242
  imageSize: number;
247
243
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"tiff.image.d.ts","sourceRoot":"","sources":["../src/tiff.image.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tiff.image.d.ts","sourceRoot":"","sources":["../src/tiff.image.ts"],"names":[],"mappings":"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"}
@@ -42,14 +42,14 @@ export class TiffImage {
42
42
  *
43
43
  * @param loadGeoTags Whether to load the GeoKeyDirectory and unpack it
44
44
  */
45
- async init(loadGeoTags = true) {
45
+ async init(loadGeoTags = true, options) {
46
46
  const requiredTags = [];
47
47
  ImportantTags.forEach((tag) => {
48
- requiredTags.push(this.fetch(tag));
48
+ requiredTags.push(this.fetch(tag, options));
49
49
  });
50
50
  if (loadGeoTags) {
51
51
  ImportantGeoTags.forEach((tag) => {
52
- requiredTags.push(this.fetch(tag));
52
+ requiredTags.push(this.fetch(tag, options));
53
53
  });
54
54
  }
55
55
  await Promise.all(requiredTags);
@@ -100,18 +100,18 @@ export class TiffImage {
100
100
  *
101
101
  * @param tag tag to fetch
102
102
  */
103
- async fetch(tag) {
103
+ async fetch(tag, options) {
104
104
  const sourceTag = this.tags.get(tag);
105
105
  if (sourceTag == null)
106
106
  return null;
107
107
  if (sourceTag.type === 'inline')
108
108
  return sourceTag.value;
109
109
  if (sourceTag.type === 'lazy')
110
- return fetchLazy(sourceTag, this.tiff);
110
+ return fetchLazy(sourceTag, this.tiff, options);
111
111
  if (sourceTag.isLoaded)
112
112
  return sourceTag.value;
113
113
  if (sourceTag.type === 'offset')
114
- return fetchAllOffsets(this.tiff, sourceTag);
114
+ return fetchAllOffsets(this.tiff, sourceTag, options);
115
115
  throw new Error('Cannot fetch:' + tag);
116
116
  }
117
117
  /**
@@ -138,7 +138,7 @@ export class TiffImage {
138
138
  const tag = this.tags.get(TiffTag.GdalNoData);
139
139
  if (tag == null)
140
140
  return null;
141
- if (tag.value)
141
+ if (tag.value != null)
142
142
  return Number(tag.value);
143
143
  throw new Error('GdalNoData tag is not loaded');
144
144
  }
@@ -398,7 +398,7 @@ export class TiffImage {
398
398
  *
399
399
  * @param index Strip index to read
400
400
  */
401
- async getStrip(index) {
401
+ async getStrip(index, options) {
402
402
  if (this.isTiled())
403
403
  throw new Error('Cannot read stripes, tiff is tiled: ' + index);
404
404
  const byteCounts = this.tags.get(TiffTag.StripByteCounts);
@@ -406,10 +406,10 @@ export class TiffImage {
406
406
  if (index >= byteCounts.count)
407
407
  throw new Error('Cannot read strip, index out of bounds');
408
408
  const [byteCount, offset] = await Promise.all([
409
- getOffset(this.tiff, offsets, index),
410
- getOffset(this.tiff, byteCounts, index),
409
+ getOffset(this.tiff, offsets, index, options),
410
+ getOffset(this.tiff, byteCounts, index, options),
411
411
  ]);
412
- return this.getBytes(byteCount, offset);
412
+ return this.getBytes(byteCount, offset, options);
413
413
  }
414
414
  /** The jpeg header is stored in the IFD, read the JPEG header and adjust the byte array to include it */
415
415
  getJpegHeader(bytes) {
@@ -464,7 +464,7 @@ export class TiffImage {
464
464
  const totalTiles = nxTiles * nyTiles;
465
465
  if (idx >= totalTiles)
466
466
  throw new Error(`Tile index is outside of tile range: ${idx} >= ${totalTiles}`);
467
- const { offset, imageSize } = await this.getTileSize(idx);
467
+ const { offset, imageSize } = await this.getTileSize(idx, options);
468
468
  return this.getBytes(offset, imageSize, options);
469
469
  }
470
470
  /**
@@ -478,7 +478,7 @@ export class TiffImage {
478
478
  *
479
479
  * @returns if the tile exists and has data
480
480
  */
481
- async hasTile(x, y) {
481
+ async hasTile(x, y, options) {
482
482
  const tiles = this.tileSize;
483
483
  const size = this.size;
484
484
  if (tiles == null)
@@ -489,7 +489,7 @@ export class TiffImage {
489
489
  if (x >= nxTiles || y >= nyTiles)
490
490
  return false;
491
491
  const idx = y * nxTiles + x;
492
- const ret = await this.getTileSize(idx);
492
+ const ret = await this.getTileSize(idx, options);
493
493
  return ret.offset > 0;
494
494
  }
495
495
  /**
@@ -500,7 +500,7 @@ export class TiffImage {
500
500
  * @param index index in the tile array
501
501
  * @returns Offset and byteCount for the tile
502
502
  */
503
- async getTileSize(index) {
503
+ async getTileSize(index, options) {
504
504
  // If both the tile offset and tile byte counts are loaded,
505
505
  // we can get the offset and byte count synchronously without needing to fetch any additional data
506
506
  const byteCounts = this.tags.get(TiffTag.TileByteCounts);
@@ -512,29 +512,29 @@ export class TiffImage {
512
512
  // the few bytes leading up to the tile
513
513
  const leaderBytes = this.tiff.options?.tileLeaderByteSize;
514
514
  if (leaderBytes) {
515
- const offset = tileOffset ?? (await getOffset(this.tiff, this.tileOffset, index));
515
+ const offset = tileOffset ?? (await getOffset(this.tiff, this.tileOffset, index, options));
516
516
  // Sparse tiff no data found
517
517
  if (offset === 0)
518
518
  return { offset: 0, imageSize: 0 };
519
519
  // This fetch will generally load in the bytes needed for the image too
520
520
  // provided the image size is less than the size of a chunk
521
- const bytes = await this.tiff.source.fetch(offset - leaderBytes, leaderBytes);
521
+ const bytes = await this.tiff.source.fetch(offset - leaderBytes, leaderBytes, options);
522
522
  return { offset, imageSize: getUint(new DataView(bytes), 0, leaderBytes, this.tiff.isLittleEndian) };
523
523
  }
524
524
  if (byteCounts == null)
525
525
  throw new Error('No tile byte counts found');
526
526
  const [offset, imageSize] = await Promise.all([
527
- tileOffset ?? getOffset(this.tiff, this.tileOffset, index),
528
- tileSize ?? getOffset(this.tiff, byteCounts, index),
527
+ tileOffset ?? getOffset(this.tiff, this.tileOffset, index, options),
528
+ tileSize ?? getOffset(this.tiff, byteCounts, index, options),
529
529
  ]);
530
530
  return { offset, imageSize };
531
531
  }
532
532
  }
533
- function getOffset(tiff, x, index) {
533
+ function getOffset(tiff, x, index, options) {
534
534
  const val = getOffsetSync(tiff, x, index);
535
535
  if (val != null)
536
536
  return Promise.resolve(val);
537
- return getValueAt(tiff, x, index);
537
+ return getValueAt(tiff, x, index, options);
538
538
  }
539
539
  function getOffsetSync(tiff, x, index) {
540
540
  if (index < 0) {
package/build/tiff.js CHANGED
@@ -34,7 +34,7 @@ export class Tiff {
34
34
  }
35
35
  /** Create a tiff and initialize it by reading the tiff headers */
36
36
  static create(source, options = { defaultReadSize: Tiff.DefaultReadSize }) {
37
- return new Tiff(source, options).init();
37
+ return new Tiff(source, options).init(options);
38
38
  }
39
39
  /**
40
40
  * Initialize the tiff loading in the header and all image headers.
@@ -42,10 +42,12 @@ export class Tiff {
42
42
  * This is only required if the Tiff was created with the constructor, if you
43
43
  * used {@link create} this will have already been called.
44
44
  */
45
- init() {
45
+ init(options) {
46
+ if (this.isInitialized)
47
+ return Promise.resolve(this);
46
48
  if (this._initPromise)
47
49
  return this._initPromise;
48
- this._initPromise = this.readHeader();
50
+ this._initPromise = this.readHeader(options);
49
51
  return this._initPromise;
50
52
  }
51
53
  /**
@@ -71,11 +73,11 @@ export class Tiff {
71
73
  return firstImage;
72
74
  }
73
75
  /** Read the Starting header and all Image headers from the source */
74
- async readHeader() {
76
+ async readHeader(options) {
75
77
  if (this.isInitialized)
76
78
  return this;
77
79
  // limit the read to the size of the file if it is known, for small tiffs
78
- const bytes = new DataView(await this.source.fetch(0, getMaxLength(this.source, 0, this.defaultReadSize)));
80
+ const bytes = new DataView(await this.source.fetch(0, getMaxLength(this.source, 0, this.defaultReadSize), options));
79
81
  if (bytes.byteLength === 0)
80
82
  throw new Error('Unable to read empty tiff');
81
83
  bytes.sourceOffset = 0;
@@ -117,13 +119,13 @@ export class Tiff {
117
119
  // Ensure at least 1KB near at the IFD offset is ready for reading
118
120
  // TODO is 1KB enough, most IFD entries are in the order of 100-300 bytes
119
121
  if (!hasBytes(lastView, nextOffsetIfd, 1024)) {
120
- const bytes = await this.source.fetch(nextOffsetIfd, getMaxLength(this.source, nextOffsetIfd, this.defaultReadSize));
122
+ const bytes = await this.source.fetch(nextOffsetIfd, getMaxLength(this.source, nextOffsetIfd, this.defaultReadSize), options);
121
123
  lastView = new DataView(bytes);
122
124
  lastView.sourceOffset = nextOffsetIfd;
123
125
  }
124
126
  nextOffsetIfd = this.readIfd(nextOffsetIfd, lastView);
125
127
  }
126
- await Promise.all(this.images.map((i) => i.init()));
128
+ await Promise.all(this.images.map((i) => i.init(true, options)));
127
129
  this.isInitialized = true;
128
130
  return this;
129
131
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cogeotiff/core",
3
- "version": "9.4.0",
3
+ "version": "9.5.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/blacha/cogeotiff.git",
@@ -17,11 +17,12 @@
17
17
  "scripts": {
18
18
  "test": "node --test \"build/**/*.test.js\""
19
19
  },
20
+ "dependencies": {},
20
21
  "devDependencies": {
21
22
  "@types/node": "^20.0.0"
22
23
  },
23
24
  "publishConfig": {
24
25
  "access": "public"
25
26
  },
26
- "gitHead": "2cb33fbbd63f87fc2535282a4dd4426a449dd758"
27
+ "gitHead": "c489ebab2136a779a705bf1dedebbc250e17a747"
27
28
  }
@@ -7,6 +7,9 @@ import { TestFileSource } from '../__benchmark__/source.file.js';
7
7
  import { SourceMemory } from '../__benchmark__/source.memory.js';
8
8
  import { TiffMimeType } from '../const/tiff.mime.js';
9
9
  import { Photometric, TiffTag } from '../const/tiff.tag.id.js';
10
+ import { TiffTagValueType } from '../const/tiff.tag.value.js';
11
+ import type { Tag } from '../read/tiff.tag.js';
12
+ import { TiffImage } from '../tiff.image.js';
10
13
  import { Tiff } from '../tiff.js';
11
14
  import { ByteSize } from '../util/bytes.js';
12
15
 
@@ -214,3 +217,61 @@ describe('CogStrip', () => {
214
217
  assert.equal(stripB?.bytes.byteLength, 152);
215
218
  });
216
219
  });
220
+
221
+ describe('TiffImage.noData', () => {
222
+ /** Create a TiffImage with a specific GdalNoData tag value for testing */
223
+ function imageWithNoData(value: string): TiffImage {
224
+ const tags = new Map<TiffTag, Tag>();
225
+ tags.set(TiffTag.GdalNoData, {
226
+ id: TiffTag.GdalNoData,
227
+ name: 'GdalNoData',
228
+ tagOffset: 0,
229
+ count: 1,
230
+ dataType: TiffTagValueType.Ascii,
231
+ type: 'inline',
232
+ value,
233
+ });
234
+ return new TiffImage(null as unknown as Tiff, 0, tags);
235
+ }
236
+
237
+ it('should return null when GdalNoData tag is absent', () => {
238
+ const img = new TiffImage(null as unknown as Tiff, 0, new Map());
239
+ assert.equal(img.noData, null);
240
+ });
241
+
242
+ it('should parse a negative nodata value', () => {
243
+ const img = imageWithNoData('-9999');
244
+ assert.equal(img.noData, -9999);
245
+ });
246
+
247
+ it('should parse nodata value of "0" (falsy string)', () => {
248
+ const img = imageWithNoData('0');
249
+ assert.equal(img.noData, 0);
250
+ });
251
+
252
+ it('should parse a positive nodata value', () => {
253
+ const img = imageWithNoData('255');
254
+ assert.equal(img.noData, 255);
255
+ });
256
+
257
+ it('should parse a floating point nodata value', () => {
258
+ const img = imageWithNoData('-3.4028234663852886e+38');
259
+ assert.equal(img.noData, -3.4028234663852886e38);
260
+ });
261
+
262
+ it('should throw when lazy tag value is undefined (not yet fetched)', () => {
263
+ const tags = new Map<TiffTag, Tag>();
264
+ tags.set(TiffTag.GdalNoData, {
265
+ id: TiffTag.GdalNoData,
266
+ name: 'GdalNoData',
267
+ tagOffset: 0,
268
+ count: 1,
269
+ dataType: TiffTagValueType.Ascii,
270
+ type: 'lazy',
271
+ dataOffset: 0,
272
+ value: undefined,
273
+ });
274
+ const img = new TiffImage(null as unknown as Tiff, 0, tags);
275
+ assert.throws(() => img.noData, /GdalNoData tag is not loaded/);
276
+ });
277
+ });
@@ -456,9 +456,30 @@ export interface TiffTagType {
456
456
  [TiffTag.SampleFormat]: SampleFormat[];
457
457
  [TiffTag.GdalMetadata]: string;
458
458
  [TiffTag.GdalNoData]: string;
459
- [TiffTag.ModelPixelScale]: number[];
459
+ // Always [ScaleX, ScaleY, ScaleZ]
460
+ // https://web.archive.org/web/20240329145238/https://www.awaresystems.be/imaging/tiff/tifftags/modelpixelscaletag.html
461
+ [TiffTag.ModelPixelScale]: [scaleX: number, scaleY: number, scaleZ: number];
460
462
  [TiffTag.ModelTiePoint]: number[];
461
- [TiffTag.ModelTransformation]: number[];
463
+ // Always 16 numbers
464
+ // https://web.archive.org/web/20240329145255/https://www.awaresystems.be/imaging/tiff/tifftags/modeltransformationtag.html
465
+ [TiffTag.ModelTransformation]: [
466
+ number,
467
+ number,
468
+ number,
469
+ number,
470
+ number,
471
+ number,
472
+ number,
473
+ number,
474
+ number,
475
+ number,
476
+ number,
477
+ number,
478
+ number,
479
+ number,
480
+ number,
481
+ number,
482
+ ];
462
483
  [TiffTag.GeoKeyDirectory]: number[];
463
484
  [TiffTag.GeoDoubleParams]: number[];
464
485
  [TiffTag.GeoAsciiParams]: string;
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */
2
2
  import { TiffTag, TiffTagConvertArray } from '../const/tiff.tag.id.js';
3
3
  import { TiffTagValueType } from '../const/tiff.tag.value.js';
4
- import type { Tiff } from '../tiff.js';
4
+ import type { Tiff, TiffFetchOptions } from '../tiff.js';
5
5
  import { getUint, getUint64 } from '../util/bytes.js';
6
6
  import type { DataViewOffset } from './data.view.offset.js';
7
7
  import { hasBytes } from './data.view.offset.js';
@@ -205,11 +205,11 @@ export function createTag(tiff: Tiff, view: DataViewOffset, offset: number): Tag
205
205
  }
206
206
 
207
207
  /** Fetch the value from a {@link TagLazy} tag */
208
- export async function fetchLazy<T>(tag: TagLazy<T>, tiff: Tiff): Promise<T> {
208
+ export async function fetchLazy<T>(tag: TagLazy<T>, tiff: Tiff, options?: TiffFetchOptions): Promise<T> {
209
209
  if (tag.value != null) return tag.value;
210
210
  const dataTypeSize = getTiffTagSize(tag.dataType);
211
211
  const dataLength = dataTypeSize * tag.count;
212
- const bytes = await tiff.source.fetch(tag.dataOffset, dataLength);
212
+ const bytes = await tiff.source.fetch(tag.dataOffset, dataLength, options);
213
213
  const view = new DataView(bytes);
214
214
  tag.value = readValue(tiff, tag.id, view, 0, tag.dataType, tag.count);
215
215
  return tag.value as T;
@@ -218,11 +218,15 @@ export async function fetchLazy<T>(tag: TagLazy<T>, tiff: Tiff): Promise<T> {
218
218
  /**
219
219
  * Fetch all the values from a {@link TagOffset}
220
220
  */
221
- export async function fetchAllOffsets(tiff: Tiff, tag: TagOffset): Promise<TagOffset['value']> {
221
+ export async function fetchAllOffsets(
222
+ tiff: Tiff,
223
+ tag: TagOffset,
224
+ options?: TiffFetchOptions,
225
+ ): Promise<TagOffset['value']> {
222
226
  const dataTypeSize = getTiffTagSize(tag.dataType);
223
227
 
224
228
  if (tag.view == null) {
225
- const bytes = await tiff.source.fetch(tag.dataOffset, dataTypeSize * tag.count);
229
+ const bytes = await tiff.source.fetch(tag.dataOffset, dataTypeSize * tag.count, options);
226
230
  tag.view = new DataView(bytes) as DataViewOffset;
227
231
  tag.view.sourceOffset = tag.dataOffset;
228
232
  }
@@ -241,13 +245,18 @@ export function setBytes(tag: TagOffset, view: DataViewOffset): void {
241
245
  }
242
246
 
243
247
  /** Partially fetch the values of a {@link TagOffset} and return the value for the offset */
244
- export async function getValueAt(tiff: Tiff, tag: TagOffset, index: number): Promise<number> {
248
+ export async function getValueAt(
249
+ tiff: Tiff,
250
+ tag: TagOffset,
251
+ index: number,
252
+ options?: TiffFetchOptions,
253
+ ): Promise<number> {
245
254
  if (index > tag.count || index < 0) throw new Error('TagOffset: out of bounds :' + index);
246
255
  if (tag.value[index] != null) return tag.value[index];
247
256
  const dataTypeSize = getTiffTagSize(tag.dataType);
248
257
 
249
258
  if (tag.view == null) {
250
- const bytes = await tiff.source.fetch(tag.dataOffset + index * dataTypeSize, dataTypeSize);
259
+ const bytes = await tiff.source.fetch(tag.dataOffset + index * dataTypeSize, dataTypeSize, options);
251
260
  const view = new DataView(bytes);
252
261
  // Skip type conversion to array by using undefined tiff tag id
253
262
  const value = readValue(tiff, undefined, view, 0, tag.dataType, 1);
package/src/tiff.image.ts CHANGED
@@ -3,7 +3,7 @@ import type { TiffTagGeoType, TiffTagType } from './const/tiff.tag.id.js';
3
3
  import { Compression, ModelTypeCode, SubFileType, TiffTag, TiffTagGeo } from './const/tiff.tag.id.js';
4
4
  import { fetchAllOffsets, fetchLazy, getValueAt, getValueAtSync } from './read/tiff.tag.factory.js';
5
5
  import type { Tag, TagInline, TagOffset } from './read/tiff.tag.js';
6
- import type { Tiff } from './tiff.js';
6
+ import type { Tiff, TiffFetchOptions } from './tiff.js';
7
7
  import { getUint } from './util/bytes.js';
8
8
  import type { BoundingBox, Size } from './vector.js';
9
9
 
@@ -72,15 +72,15 @@ export class TiffImage {
72
72
  *
73
73
  * @param loadGeoTags Whether to load the GeoKeyDirectory and unpack it
74
74
  */
75
- async init(loadGeoTags = true): Promise<void> {
75
+ async init(loadGeoTags = true, options?: TiffFetchOptions): Promise<void> {
76
76
  const requiredTags: Promise<unknown>[] = [];
77
77
  ImportantTags.forEach((tag) => {
78
- requiredTags.push(this.fetch(tag));
78
+ requiredTags.push(this.fetch(tag, options));
79
79
  });
80
80
 
81
81
  if (loadGeoTags) {
82
82
  ImportantGeoTags.forEach((tag) => {
83
- requiredTags.push(this.fetch(tag));
83
+ requiredTags.push(this.fetch(tag, options));
84
84
  });
85
85
  }
86
86
 
@@ -132,13 +132,13 @@ export class TiffImage {
132
132
  *
133
133
  * @param tag tag to fetch
134
134
  */
135
- public async fetch<T extends keyof TiffTagType>(tag: T): Promise<TiffTagType[T] | null> {
135
+ public async fetch<T extends keyof TiffTagType>(tag: T, options?: TiffFetchOptions): Promise<TiffTagType[T] | null> {
136
136
  const sourceTag = this.tags.get(tag);
137
137
  if (sourceTag == null) return null;
138
138
  if (sourceTag.type === 'inline') return sourceTag.value as TiffTagType[T];
139
- if (sourceTag.type === 'lazy') return fetchLazy(sourceTag, this.tiff) as Promise<TiffTagType[T]>;
139
+ if (sourceTag.type === 'lazy') return fetchLazy(sourceTag, this.tiff, options) as Promise<TiffTagType[T]>;
140
140
  if (sourceTag.isLoaded) return sourceTag.value as TiffTagType[T];
141
- if (sourceTag.type === 'offset') return fetchAllOffsets(this.tiff, sourceTag) as Promise<TiffTagType[T]>;
141
+ if (sourceTag.type === 'offset') return fetchAllOffsets(this.tiff, sourceTag, options) as Promise<TiffTagType[T]>;
142
142
  throw new Error('Cannot fetch:' + tag);
143
143
  }
144
144
  /**
@@ -164,7 +164,7 @@ export class TiffImage {
164
164
  get noData(): number | null {
165
165
  const tag = this.tags.get(TiffTag.GdalNoData);
166
166
  if (tag == null) return null;
167
- if (tag.value) return Number(tag.value);
167
+ if (tag.value != null) return Number(tag.value);
168
168
  throw new Error('GdalNoData tag is not loaded');
169
169
  }
170
170
 
@@ -439,7 +439,10 @@ export class TiffImage {
439
439
  *
440
440
  * @param index Strip index to read
441
441
  */
442
- async getStrip(index: number): Promise<{ mimeType: TiffMimeType; bytes: ArrayBuffer } | null> {
442
+ async getStrip(
443
+ index: number,
444
+ options?: TiffFetchOptions,
445
+ ): Promise<{ mimeType: TiffMimeType; bytes: ArrayBuffer } | null> {
443
446
  if (this.isTiled()) throw new Error('Cannot read stripes, tiff is tiled: ' + index);
444
447
 
445
448
  const byteCounts = this.tags.get(TiffTag.StripByteCounts) as TagOffset;
@@ -448,10 +451,10 @@ export class TiffImage {
448
451
  if (index >= byteCounts.count) throw new Error('Cannot read strip, index out of bounds');
449
452
 
450
453
  const [byteCount, offset] = await Promise.all([
451
- getOffset(this.tiff, offsets, index),
452
- getOffset(this.tiff, byteCounts, index),
454
+ getOffset(this.tiff, offsets, index, options),
455
+ getOffset(this.tiff, byteCounts, index, options),
453
456
  ]);
454
- return this.getBytes(byteCount, offset);
457
+ return this.getBytes(byteCount, offset, options);
455
458
  }
456
459
 
457
460
  /** The jpeg header is stored in the IFD, read the JPEG header and adjust the byte array to include it */
@@ -476,7 +479,7 @@ export class TiffImage {
476
479
  async getBytes(
477
480
  offset: number,
478
481
  byteCount: number,
479
- options?: { signal?: AbortSignal },
482
+ options?: TiffFetchOptions,
480
483
  ): Promise<{ mimeType: TiffMimeType; bytes: ArrayBuffer; compression: Compression } | null> {
481
484
  if (byteCount === 0) return null;
482
485
 
@@ -504,7 +507,7 @@ export class TiffImage {
504
507
  async getTile(
505
508
  x: number,
506
509
  y: number,
507
- options?: { signal?: AbortSignal },
510
+ options?: TiffFetchOptions,
508
511
  ): Promise<{ mimeType: TiffMimeType; bytes: ArrayBuffer; compression: Compression } | null> {
509
512
  const size = this.size;
510
513
  const tiles = this.tileSize;
@@ -523,7 +526,7 @@ export class TiffImage {
523
526
  const totalTiles = nxTiles * nyTiles;
524
527
  if (idx >= totalTiles) throw new Error(`Tile index is outside of tile range: ${idx} >= ${totalTiles}`);
525
528
 
526
- const { offset, imageSize } = await this.getTileSize(idx);
529
+ const { offset, imageSize } = await this.getTileSize(idx, options);
527
530
 
528
531
  return this.getBytes(offset, imageSize, options);
529
532
  }
@@ -539,7 +542,7 @@ export class TiffImage {
539
542
  *
540
543
  * @returns if the tile exists and has data
541
544
  */
542
- async hasTile(x: number, y: number): Promise<boolean> {
545
+ async hasTile(x: number, y: number, options?: TiffFetchOptions): Promise<boolean> {
543
546
  const tiles = this.tileSize;
544
547
  const size = this.size;
545
548
 
@@ -550,7 +553,7 @@ export class TiffImage {
550
553
  const nxTiles = Math.ceil(size.width / tiles.width);
551
554
  if (x >= nxTiles || y >= nyTiles) return false;
552
555
  const idx = y * nxTiles + x;
553
- const ret = await this.getTileSize(idx);
556
+ const ret = await this.getTileSize(idx, options);
554
557
  return ret.offset > 0;
555
558
  }
556
559
 
@@ -562,7 +565,7 @@ export class TiffImage {
562
565
  * @param index index in the tile array
563
566
  * @returns Offset and byteCount for the tile
564
567
  */
565
- async getTileSize(index: number): Promise<{ offset: number; imageSize: number }> {
568
+ async getTileSize(index: number, options?: TiffFetchOptions): Promise<{ offset: number; imageSize: number }> {
566
569
  // If both the tile offset and tile byte counts are loaded,
567
570
  // we can get the offset and byte count synchronously without needing to fetch any additional data
568
571
  const byteCounts = this.tags.get(TiffTag.TileByteCounts) as TagOffset | TagInline<number[]>;
@@ -574,29 +577,34 @@ export class TiffImage {
574
577
  // the few bytes leading up to the tile
575
578
  const leaderBytes = this.tiff.options?.tileLeaderByteSize;
576
579
  if (leaderBytes) {
577
- const offset = tileOffset ?? (await getOffset(this.tiff, this.tileOffset, index));
580
+ const offset = tileOffset ?? (await getOffset(this.tiff, this.tileOffset, index, options));
578
581
  // Sparse tiff no data found
579
582
  if (offset === 0) return { offset: 0, imageSize: 0 };
580
583
 
581
584
  // This fetch will generally load in the bytes needed for the image too
582
585
  // provided the image size is less than the size of a chunk
583
- const bytes = await this.tiff.source.fetch(offset - leaderBytes, leaderBytes);
586
+ const bytes = await this.tiff.source.fetch(offset - leaderBytes, leaderBytes, options);
584
587
  return { offset, imageSize: getUint(new DataView(bytes), 0, leaderBytes, this.tiff.isLittleEndian) };
585
588
  }
586
589
 
587
590
  if (byteCounts == null) throw new Error('No tile byte counts found');
588
591
  const [offset, imageSize] = await Promise.all([
589
- tileOffset ?? getOffset(this.tiff, this.tileOffset, index),
590
- tileSize ?? getOffset(this.tiff, byteCounts, index),
592
+ tileOffset ?? getOffset(this.tiff, this.tileOffset, index, options),
593
+ tileSize ?? getOffset(this.tiff, byteCounts, index, options),
591
594
  ]);
592
595
  return { offset, imageSize };
593
596
  }
594
597
  }
595
598
 
596
- function getOffset(tiff: Tiff, x: TagOffset | TagInline<number[]>, index: number): number | Promise<number> {
599
+ function getOffset(
600
+ tiff: Tiff,
601
+ x: TagOffset | TagInline<number[]>,
602
+ index: number,
603
+ options?: TiffFetchOptions,
604
+ ): number | Promise<number> {
597
605
  const val = getOffsetSync(tiff, x, index);
598
606
  if (val != null) return Promise.resolve(val);
599
- return getValueAt(tiff, x as TagOffset, index);
607
+ return getValueAt(tiff, x as TagOffset, index, options);
600
608
  }
601
609
 
602
610
  function getOffsetSync(tiff: Tiff, x: TagOffset | TagInline<number[]>, index: number): number | null {
package/src/tiff.ts CHANGED
@@ -18,6 +18,10 @@ export interface TiffCreationOptions {
18
18
  defaultReadSize: number;
19
19
  }
20
20
 
21
+ export interface TiffFetchOptions {
22
+ signal?: AbortSignal;
23
+ }
24
+
21
25
  export class Tiff {
22
26
  /** Read 16KB blocks at a time */
23
27
  static DefaultReadSize = 16 * 1024;
@@ -49,9 +53,9 @@ export class Tiff {
49
53
  /** Create a tiff and initialize it by reading the tiff headers */
50
54
  static create(
51
55
  source: Source,
52
- options: TiffCreationOptions = { defaultReadSize: Tiff.DefaultReadSize },
56
+ options: TiffCreationOptions & TiffFetchOptions = { defaultReadSize: Tiff.DefaultReadSize },
53
57
  ): Promise<Tiff> {
54
- return new Tiff(source, options).init();
58
+ return new Tiff(source, options).init(options);
55
59
  }
56
60
 
57
61
  /**
@@ -60,9 +64,10 @@ export class Tiff {
60
64
  * This is only required if the Tiff was created with the constructor, if you
61
65
  * used {@link create} this will have already been called.
62
66
  */
63
- init(): Promise<Tiff> {
67
+ init(options?: TiffFetchOptions): Promise<Tiff> {
68
+ if (this.isInitialized) return Promise.resolve(this);
64
69
  if (this._initPromise) return this._initPromise;
65
- this._initPromise = this.readHeader();
70
+ this._initPromise = this.readHeader(options);
66
71
  return this._initPromise;
67
72
  }
68
73
 
@@ -92,11 +97,11 @@ export class Tiff {
92
97
  }
93
98
 
94
99
  /** Read the Starting header and all Image headers from the source */
95
- private async readHeader(): Promise<Tiff> {
100
+ private async readHeader(options?: TiffFetchOptions): Promise<Tiff> {
96
101
  if (this.isInitialized) return this;
97
102
  // limit the read to the size of the file if it is known, for small tiffs
98
103
  const bytes = new DataView(
99
- await this.source.fetch(0, getMaxLength(this.source, 0, this.defaultReadSize)),
104
+ await this.source.fetch(0, getMaxLength(this.source, 0, this.defaultReadSize), options),
100
105
  ) as DataViewOffset;
101
106
  if (bytes.byteLength === 0) throw new Error('Unable to read empty tiff');
102
107
 
@@ -144,6 +149,7 @@ export class Tiff {
144
149
  const bytes = await this.source.fetch(
145
150
  nextOffsetIfd,
146
151
  getMaxLength(this.source, nextOffsetIfd, this.defaultReadSize),
152
+ options,
147
153
  );
148
154
  lastView = new DataView(bytes) as DataViewOffset;
149
155
  lastView.sourceOffset = nextOffsetIfd;
@@ -151,7 +157,7 @@ export class Tiff {
151
157
  nextOffsetIfd = this.readIfd(nextOffsetIfd, lastView);
152
158
  }
153
159
 
154
- await Promise.all(this.images.map((i) => i.init()));
160
+ await Promise.all(this.images.map((i) => i.init(true, options)));
155
161
  this.isInitialized = true;
156
162
  return this;
157
163
  }