@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
@@ -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.BYTE:
7
- case TiffTagValueType.ASCII:
8
- case TiffTagValueType.SBYTE:
9
- case TiffTagValueType.UNDEFINED:
4
+ case TiffTagValueType.Uint8:
5
+ case TiffTagValueType.Ascii:
6
+ case TiffTagValueType.Int8:
7
+ case TiffTagValueType.Undefined:
10
8
  return 1;
11
- case TiffTagValueType.SHORT:
12
- case TiffTagValueType.SSHORT:
9
+ case TiffTagValueType.Uint16:
10
+ case TiffTagValueType.Int16:
13
11
  return 2;
14
- case TiffTagValueType.LONG:
15
- case TiffTagValueType.SLONG:
16
- case TiffTagValueType.FLOAT:
12
+ case TiffTagValueType.Uint32:
13
+ case TiffTagValueType.Int32:
14
+ case TiffTagValueType.Float32:
17
15
  return 4;
18
- case TiffTagValueType.RATIONAL:
19
- case TiffTagValueType.SRATIONAL:
20
- case TiffTagValueType.DOUBLE:
21
- case TiffTagValueType.LONG8:
22
- case TiffTagValueType.SLONG8:
23
- case TiffTagValueType.IFD8:
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
- const TiffTagValueReader = {
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"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=source.js.map
@@ -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"}
@@ -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,5 +7,4 @@
7
7
  *
8
8
  * @returns hex string eg 0x0015
9
9
  **/
10
- export declare function toHexString(num: number, padding?: number, prefix?: boolean): string;
11
- //# sourceMappingURL=util.hex.d.ts.map
10
+ export declare function toHex(num: number, padding?: number, prefix?: boolean): string;
@@ -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,11 +7,10 @@
7
7
  *
8
8
  * @returns hex string eg 0x0015
9
9
  **/
10
- export function toHexString(num, padding = 4, prefix = true) {
10
+ export function toHex(num, padding = 4, prefix = true) {
11
11
  const hex = num.toString(16).padStart(padding, '0');
12
- if (prefix) {
12
+ if (prefix)
13
13
  return '0x' + hex;
14
- }
15
14
  return hex;
16
15
  }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5oZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC91dGlsLmhleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7SUFRSTtBQUNKLE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBVyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLElBQUk7SUFDL0QsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELElBQUksTUFBTSxFQUFFO1FBQ1IsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDO0tBQ3JCO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb252ZXJ0IGEgbnVtYmVyIHRvIGEgZm9ybWF0ZWQgaGV4IHN0cmluZ1xuICpcbiAqIEBwYXJhbSBudW0gbnVtYmVyIHRvIGNvbnZlcnRcbiAqIEBwYXJhbSBwYWRkaW5nIG51bWJlciBvZiAwJ3MgdG8gcGFkIHRoZSBkaWdpdCB3aXRoXG4gKiBAcGFyYW0gcHJlZml4IHNob3VsZCBhIGAweGAgYmUgcHJlZml4ZWQgdG8gdGhlIHN0cmluZ1xuICpcbiAqIEByZXR1cm5zIGhleCBzdHJpbmcgZWcgMHgwMDE1XG4gKiovXG5leHBvcnQgZnVuY3Rpb24gdG9IZXhTdHJpbmcobnVtOiBudW1iZXIsIHBhZGRpbmcgPSA0LCBwcmVmaXggPSB0cnVlKTogc3RyaW5nIHtcbiAgICBjb25zdCBoZXggPSBudW0udG9TdHJpbmcoMTYpLnBhZFN0YXJ0KHBhZGRpbmcsICcwJyk7XG4gICAgaWYgKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gJzB4JyArIGhleDtcbiAgICB9XG4gICAgcmV0dXJuIGhleDtcbn1cbiJdfQ==
16
+ //# sourceMappingURL=util.hex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.hex.js","sourceRoot":"","sources":["../../src/util/util.hex.ts"],"names":[],"mappings":"AAAA;;;;;;;;IAQI;AACJ,MAAM,UAAU,KAAK,CAAC,GAAW,EAAE,OAAO,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAC3D,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACpD,IAAI,MAAM;QAAE,OAAO,IAAI,GAAG,GAAG,CAAC;IAC9B,OAAO,GAAG,CAAC;AACb,CAAC"}
package/build/vector.d.ts CHANGED
@@ -11,4 +11,3 @@ export interface BoundingBox extends Point, Size {
11
11
  export interface Vector extends Point {
12
12
  z: number;
13
13
  }
14
- //# sourceMappingURL=vector.d.ts.map
package/build/vector.js CHANGED
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ZlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTaXplIHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvaW50IHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvdW5kaW5nQm94IGV4dGVuZHMgUG9pbnQsIFNpemUge31cbmV4cG9ydCBpbnRlcmZhY2UgVmVjdG9yIGV4dGVuZHMgUG9pbnQge1xuICAgIHo6IG51bWJlcjtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=vector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector.js","sourceRoot":"","sources":["../src/vector.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,32 +1,27 @@
1
1
  {
2
- "name": "@cogeotiff/core",
3
- "version": "7.2.1",
4
- "repository": {
5
- "type": "git",
6
- "url": "https://github.com/blacha/cogeotiff.git",
7
- "directory": "packages/core"
8
- },
9
- "type": "module",
10
- "engines": {
11
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
12
- },
13
- "main": "./build/index.js",
14
- "types": "./build/index.d.ts",
15
- "author": "Blayne Chard",
16
- "license": "MIT",
17
- "scripts": {
18
- "test": "ospec --globs 'build/**/*.test.js'"
19
- },
20
- "dependencies": {
21
- "@chunkd/core": "^10.0.0",
22
- "ieee754": "^1.1.13"
23
- },
24
- "devDependencies": {
25
- "@types/node": "^18.0.0",
26
- "@types/ospec": "^4.0.3"
27
- },
28
- "publishConfig": {
29
- "access": "public"
30
- },
31
- "gitHead": "5a152b87c01d71617caab3a584d8396b646ef9a3"
2
+ "name": "@cogeotiff/core",
3
+ "version": "8.0.2",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "https://github.com/blacha/cogeotiff.git",
7
+ "directory": "packages/core"
8
+ },
9
+ "type": "module",
10
+ "engines": {
11
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
12
+ },
13
+ "main": "./build/index.js",
14
+ "types": "./build/index.d.ts",
15
+ "author": "Blayne Chard",
16
+ "license": "MIT",
17
+ "scripts": {
18
+ "test": "node --test"
19
+ },
20
+ "devDependencies": {
21
+ "@types/node": "^20.0.0"
22
+ },
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "gitHead": "5a80734a67c05c2e3b99e7f3124a51049c19cf85"
32
27
  }
@@ -1,19 +1,21 @@
1
- import { SourceMemory } from '@chunkd/core';
2
1
  import { readFile } from 'fs/promises';
3
2
  import { CogTiff } from '../cog.tiff.js';
3
+ import { SourceMemory } from './source.memory.js';
4
4
 
5
+ // console.log = console.trace;
5
6
  /** Read a tile from every image inside of a tiff 300 tiles read */
6
7
  async function main(): Promise<void> {
7
- const buf = await readFile(process.argv[process.argv.length - 1]);
8
- const source = new SourceMemory('buf', buf);
9
- for (let i = 0; i < 5_000; i++) {
10
- const tiff = new CogTiff(source);
11
- await tiff.init();
8
+ const buf = await readFile(process.argv[process.argv.length - 1]);
9
+ const source = new SourceMemory(buf);
10
+ for (let i = 0; i < 5_000; i++) {
11
+ performance.mark('cog:init');
12
+ const tiff = new CogTiff(source);
13
+ await tiff.init();
14
+ performance.mark('cog:init:done');
12
15
 
13
- // 6 images
14
- for (const img of tiff.images) await img.getTile(0, 0);
15
- await tiff.close();
16
- }
16
+ // 6 images
17
+ for (const img of tiff.images) await img.getTile(0, 0);
18
+ }
17
19
  }
18
20
 
19
21
  main();
@@ -0,0 +1,23 @@
1
+ import { readFile, stat } from 'fs/promises';
2
+ import { Source } from '../source.js';
3
+
4
+ export class TestFileSource implements Source {
5
+ url: URL;
6
+ data: Promise<Buffer>;
7
+
8
+ constructor(fileName: URL) {
9
+ this.url = fileName;
10
+ this.data = readFile(this.url);
11
+ }
12
+
13
+ async fetch(offset: number, length: number): Promise<ArrayBuffer> {
14
+ const fileData = await this.data;
15
+ return fileData.buffer.slice(fileData.byteOffset + offset, fileData.byteOffset + offset + length);
16
+ }
17
+
18
+ get size(): Promise<number> {
19
+ return Promise.resolve()
20
+ .then(() => stat(this.url))
21
+ .then((f) => f.size);
22
+ }
23
+ }
@@ -0,0 +1,23 @@
1
+ import { Source } from '../source.js';
2
+
3
+ export class SourceMemory implements Source {
4
+ url: URL;
5
+ data: ArrayBuffer;
6
+
7
+ static toArrayBuffer(buf: Buffer | Uint8Array | ArrayBuffer): ArrayBuffer {
8
+ if (buf instanceof ArrayBuffer) return buf;
9
+ if (buf.byteLength === buf.buffer.byteLength) return buf.buffer;
10
+ return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
11
+ }
12
+
13
+ constructor(bytes: Buffer | Uint8Array | ArrayBuffer) {
14
+ this.url = new URL('memory://fake-file');
15
+ this.data = SourceMemory.toArrayBuffer(bytes);
16
+ }
17
+
18
+ async fetch(offset: number, length?: number): Promise<ArrayBuffer> {
19
+ // console.log('Fetch', offset, length);
20
+ if (offset < 0) offset = this.data.byteLength + offset;
21
+ return this.data.slice(offset, length == null ? undefined : offset + length);
22
+ }
23
+ }