@loaders.gl/textures 3.3.0-alpha.5 → 3.3.0-alpha.7

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 (170) hide show
  1. package/dist/basis-nodejs-worker.js +1762 -2429
  2. package/dist/basis-worker.js +3 -3
  3. package/dist/compressed-texture-worker.js +3 -3
  4. package/dist/crunch-worker.js +2 -2
  5. package/dist/dist.min.js +7 -5
  6. package/dist/es5/basis-loader.js +4 -12
  7. package/dist/es5/basis-loader.js.map +1 -1
  8. package/dist/es5/bundle.js +0 -1
  9. package/dist/es5/bundle.js.map +1 -1
  10. package/dist/es5/compressed-texture-loader.js +8 -21
  11. package/dist/es5/compressed-texture-loader.js.map +1 -1
  12. package/dist/es5/compressed-texture-writer.js +1 -3
  13. package/dist/es5/compressed-texture-writer.js.map +1 -1
  14. package/dist/es5/crunch-loader.js +2 -2
  15. package/dist/es5/crunch-loader.js.map +1 -1
  16. package/dist/es5/index.js +22 -35
  17. package/dist/es5/index.js.map +1 -1
  18. package/dist/es5/ktx2-basis-writer-nodejs.js +0 -2
  19. package/dist/es5/ktx2-basis-writer-nodejs.js.map +1 -1
  20. package/dist/es5/ktx2-basis-writer.js +1 -3
  21. package/dist/es5/ktx2-basis-writer.js.map +1 -1
  22. package/dist/es5/lib/encoders/encode-ktx.js +0 -2
  23. package/dist/es5/lib/encoders/encode-ktx.js.map +1 -1
  24. package/dist/es5/lib/encoders/encode-ktx2-basis-texture.js +15 -26
  25. package/dist/es5/lib/encoders/encode-ktx2-basis-texture.js.map +1 -1
  26. package/dist/es5/lib/encoders/encode-texture.js +2 -9
  27. package/dist/es5/lib/encoders/encode-texture.js.map +1 -1
  28. package/dist/es5/lib/gl-extensions.js +8 -0
  29. package/dist/es5/lib/gl-extensions.js.map +1 -1
  30. package/dist/es5/lib/parsers/basis-module-loader.js +6 -46
  31. package/dist/es5/lib/parsers/basis-module-loader.js.map +1 -1
  32. package/dist/es5/lib/parsers/crunch-module-loader.js +0 -16
  33. package/dist/es5/lib/parsers/crunch-module-loader.js.map +1 -1
  34. package/dist/es5/lib/parsers/parse-basis.js +10 -53
  35. package/dist/es5/lib/parsers/parse-basis.js.map +1 -1
  36. package/dist/es5/lib/parsers/parse-compressed-texture.js +0 -7
  37. package/dist/es5/lib/parsers/parse-compressed-texture.js.map +1 -1
  38. package/dist/es5/lib/parsers/parse-crunch.js +4 -20
  39. package/dist/es5/lib/parsers/parse-crunch.js.map +1 -1
  40. package/dist/es5/lib/parsers/parse-dds.js +2 -8
  41. package/dist/es5/lib/parsers/parse-dds.js.map +1 -1
  42. package/dist/es5/lib/parsers/parse-ktx.js +15 -7
  43. package/dist/es5/lib/parsers/parse-ktx.js.map +1 -1
  44. package/dist/es5/lib/parsers/parse-npy.js +11 -18
  45. package/dist/es5/lib/parsers/parse-npy.js.map +1 -1
  46. package/dist/es5/lib/parsers/parse-pvr.js +0 -2
  47. package/dist/es5/lib/parsers/parse-pvr.js.map +1 -1
  48. package/dist/es5/lib/texture-api/async-deep-map.js +3 -32
  49. package/dist/es5/lib/texture-api/async-deep-map.js.map +1 -1
  50. package/dist/es5/lib/texture-api/deep-load.js +0 -14
  51. package/dist/es5/lib/texture-api/deep-load.js.map +1 -1
  52. package/dist/es5/lib/texture-api/generate-url.js +3 -10
  53. package/dist/es5/lib/texture-api/generate-url.js.map +1 -1
  54. package/dist/es5/lib/texture-api/load-image-array.js +7 -24
  55. package/dist/es5/lib/texture-api/load-image-array.js.map +1 -1
  56. package/dist/es5/lib/texture-api/load-image-cube.js +4 -27
  57. package/dist/es5/lib/texture-api/load-image-cube.js.map +1 -1
  58. package/dist/es5/lib/texture-api/load-image.js +8 -41
  59. package/dist/es5/lib/texture-api/load-image.js.map +1 -1
  60. package/dist/es5/lib/texture-api/texture-api-types.js.map +1 -1
  61. package/dist/es5/lib/utils/extract-mipmap-images.js +0 -7
  62. package/dist/es5/lib/utils/extract-mipmap-images.js.map +1 -1
  63. package/dist/es5/lib/utils/ktx-format-helper.js +0 -2
  64. package/dist/es5/lib/utils/ktx-format-helper.js.map +1 -1
  65. package/dist/es5/lib/utils/texture-formats.js +2 -9
  66. package/dist/es5/lib/utils/texture-formats.js.map +1 -1
  67. package/dist/es5/lib/utils/version.js +1 -1
  68. package/dist/es5/lib/utils/version.js.map +1 -1
  69. package/dist/es5/npy-loader.js +5 -16
  70. package/dist/es5/npy-loader.js.map +1 -1
  71. package/dist/es5/types.js.map +1 -1
  72. package/dist/es5/workers/basis-nodejs-worker.js +0 -3
  73. package/dist/es5/workers/basis-nodejs-worker.js.map +1 -1
  74. package/dist/es5/workers/basis-worker.js +0 -2
  75. package/dist/es5/workers/basis-worker.js.map +1 -1
  76. package/dist/es5/workers/compressed-texture-worker.js +0 -2
  77. package/dist/es5/workers/compressed-texture-worker.js.map +1 -1
  78. package/dist/es5/workers/crunch-worker.js +2 -11
  79. package/dist/es5/workers/crunch-worker.js.map +1 -1
  80. package/dist/es5/workers/ktx2-basis-writer-nodejs-worker.js +0 -15
  81. package/dist/es5/workers/ktx2-basis-writer-nodejs-worker.js.map +1 -1
  82. package/dist/es5/workers/ktx2-basis-writer-worker.js +0 -15
  83. package/dist/es5/workers/ktx2-basis-writer-worker.js.map +1 -1
  84. package/dist/es5/workers/npy-worker.js +0 -2
  85. package/dist/es5/workers/npy-worker.js.map +1 -1
  86. package/dist/esm/basis-loader.js +5 -1
  87. package/dist/esm/basis-loader.js.map +1 -1
  88. package/dist/esm/bundle.js +1 -1
  89. package/dist/esm/bundle.js.map +1 -1
  90. package/dist/esm/compressed-texture-loader.js +8 -3
  91. package/dist/esm/compressed-texture-loader.js.map +1 -1
  92. package/dist/esm/compressed-texture-writer.js +1 -0
  93. package/dist/esm/compressed-texture-writer.js.map +1 -1
  94. package/dist/esm/crunch-loader.js +2 -0
  95. package/dist/esm/crunch-loader.js.map +1 -1
  96. package/dist/esm/index.js +5 -0
  97. package/dist/esm/index.js.map +1 -1
  98. package/dist/esm/ktx2-basis-writer-nodejs.js +1 -0
  99. package/dist/esm/ktx2-basis-writer-nodejs.js.map +1 -1
  100. package/dist/esm/ktx2-basis-writer.js +2 -0
  101. package/dist/esm/ktx2-basis-writer.js.map +1 -1
  102. package/dist/esm/lib/encoders/encode-ktx.js.map +1 -1
  103. package/dist/esm/lib/encoders/encode-ktx2-basis-texture.js +3 -2
  104. package/dist/esm/lib/encoders/encode-ktx2-basis-texture.js.map +1 -1
  105. package/dist/esm/lib/encoders/encode-texture.js +2 -1
  106. package/dist/esm/lib/encoders/encode-texture.js.map +1 -1
  107. package/dist/esm/lib/gl-extensions.js +9 -0
  108. package/dist/esm/lib/gl-extensions.js.map +1 -1
  109. package/dist/esm/lib/parsers/basis-module-loader.js +7 -10
  110. package/dist/esm/lib/parsers/basis-module-loader.js.map +1 -1
  111. package/dist/esm/lib/parsers/crunch-module-loader.js +3 -3
  112. package/dist/esm/lib/parsers/crunch-module-loader.js.map +1 -1
  113. package/dist/esm/lib/parsers/parse-basis.js +6 -23
  114. package/dist/esm/lib/parsers/parse-basis.js.map +1 -1
  115. package/dist/esm/lib/parsers/parse-compressed-texture.js +1 -3
  116. package/dist/esm/lib/parsers/parse-compressed-texture.js.map +1 -1
  117. package/dist/esm/lib/parsers/parse-crunch.js +5 -10
  118. package/dist/esm/lib/parsers/parse-crunch.js.map +1 -1
  119. package/dist/esm/lib/parsers/parse-dds.js +4 -2
  120. package/dist/esm/lib/parsers/parse-dds.js.map +1 -1
  121. package/dist/esm/lib/parsers/parse-ktx.js +16 -2
  122. package/dist/esm/lib/parsers/parse-ktx.js.map +1 -1
  123. package/dist/esm/lib/parsers/parse-npy.js +11 -13
  124. package/dist/esm/lib/parsers/parse-npy.js.map +1 -1
  125. package/dist/esm/lib/parsers/parse-pvr.js +4 -0
  126. package/dist/esm/lib/parsers/parse-pvr.js.map +1 -1
  127. package/dist/esm/lib/texture-api/async-deep-map.js +6 -6
  128. package/dist/esm/lib/texture-api/async-deep-map.js.map +1 -1
  129. package/dist/esm/lib/texture-api/deep-load.js +1 -0
  130. package/dist/esm/lib/texture-api/deep-load.js.map +1 -1
  131. package/dist/esm/lib/texture-api/generate-url.js +4 -3
  132. package/dist/esm/lib/texture-api/generate-url.js.map +1 -1
  133. package/dist/esm/lib/texture-api/load-image-array.js +5 -4
  134. package/dist/esm/lib/texture-api/load-image-array.js.map +1 -1
  135. package/dist/esm/lib/texture-api/load-image-cube.js +7 -4
  136. package/dist/esm/lib/texture-api/load-image-cube.js.map +1 -1
  137. package/dist/esm/lib/texture-api/load-image.js +9 -7
  138. package/dist/esm/lib/texture-api/load-image.js.map +1 -1
  139. package/dist/esm/lib/texture-api/texture-api-types.js.map +1 -1
  140. package/dist/esm/lib/utils/extract-mipmap-images.js +1 -6
  141. package/dist/esm/lib/utils/extract-mipmap-images.js.map +1 -1
  142. package/dist/esm/lib/utils/ktx-format-helper.js +1 -0
  143. package/dist/esm/lib/utils/ktx-format-helper.js.map +1 -1
  144. package/dist/esm/lib/utils/texture-formats.js +2 -2
  145. package/dist/esm/lib/utils/texture-formats.js.map +1 -1
  146. package/dist/esm/lib/utils/version.js +2 -1
  147. package/dist/esm/lib/utils/version.js.map +1 -1
  148. package/dist/esm/npy-loader.js +6 -1
  149. package/dist/esm/npy-loader.js.map +1 -1
  150. package/dist/esm/types.js.map +1 -1
  151. package/dist/esm/workers/basis-nodejs-worker.js.map +1 -1
  152. package/dist/esm/workers/basis-worker.js.map +1 -1
  153. package/dist/esm/workers/compressed-texture-worker.js.map +1 -1
  154. package/dist/esm/workers/crunch-worker.js +3 -1
  155. package/dist/esm/workers/crunch-worker.js.map +1 -1
  156. package/dist/esm/workers/ktx2-basis-writer-nodejs-worker.js +0 -4
  157. package/dist/esm/workers/ktx2-basis-writer-nodejs-worker.js.map +1 -1
  158. package/dist/esm/workers/ktx2-basis-writer-worker.js +0 -4
  159. package/dist/esm/workers/ktx2-basis-writer-worker.js.map +1 -1
  160. package/dist/esm/workers/npy-worker.js.map +1 -1
  161. package/dist/ktx2-basis-writer-nodejs-worker.js +1762 -2429
  162. package/dist/ktx2-basis-writer-worker.js +3 -3
  163. package/dist/lib/parsers/parse-npy.d.ts +1 -1
  164. package/dist/lib/parsers/parse-npy.d.ts.map +1 -1
  165. package/dist/lib/parsers/parse-npy.js +7 -7
  166. package/dist/npy-loader.d.ts +2 -2
  167. package/dist/npy-loader.d.ts.map +1 -1
  168. package/dist/npy-worker.js +8 -6
  169. package/package.json +7 -7
  170. package/src/lib/parsers/parse-npy.ts +20 -9
@@ -28,7 +28,7 @@
28
28
  });
29
29
 
30
30
  // ../worker-utils/src/lib/env-utils/version.ts
31
- var VERSION = true ? "3.3.0-alpha.5" : DEFAULT_VERSION;
31
+ var VERSION = true ? "3.3.0-alpha.7" : DEFAULT_VERSION;
32
32
  if (false) {
33
33
  console.error("loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.");
34
34
  }
@@ -237,10 +237,10 @@
237
237
  }
238
238
 
239
239
  // src/lib/utils/version.ts
240
- var VERSION3 = true ? "3.3.0-alpha.5" : "beta";
240
+ var VERSION3 = true ? "3.3.0-alpha.7" : "beta";
241
241
 
242
242
  // src/lib/parsers/basis-module-loader.ts
243
- var VERSION4 = true ? "3.3.0-alpha.5" : "beta";
243
+ var VERSION4 = true ? "3.3.0-alpha.7" : "beta";
244
244
  var BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION4}/dist/libs/basis_encoder.wasm`;
245
245
  var BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION4}/dist/libs/basis_encoder.js`;
246
246
  var loadBasisEncoderPromise;
@@ -3,7 +3,7 @@ declare type NumpyHeader = {
3
3
  shape: number[];
4
4
  };
5
5
  export declare function parseNPY(arrayBuffer: ArrayBuffer, options?: unknown): {
6
- data: any;
6
+ data: Uint8Array | Uint32Array | Int32Array | Int8Array | Int16Array | Uint16Array | Float32Array | Float64Array;
7
7
  header: NumpyHeader;
8
8
  } | null;
9
9
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"parse-npy.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-npy.ts"],"names":[],"mappings":"AAEA,aAAK,WAAW,GAAG;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAC,CAAC;AA6BpD,wBAAgB,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO;;;SA+BnE"}
1
+ {"version":3,"file":"parse-npy.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-npy.ts"],"names":[],"mappings":"AAEA,aAAK,WAAW,GAAG;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAC,CAAC;AAwCpD,wBAAgB,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO;;;SA+BnE"}
@@ -35,17 +35,17 @@ function parseNPY(arrayBuffer, options) {
35
35
  const numpyType = header.descr;
36
36
  const ArrayType = DTYPES[numpyType.slice(1, 3)];
37
37
  if (!ArrayType) {
38
- // eslint-disable-next-line no-console, no-undef
39
- console.warn(`Decoding of npy dtype not implemented: ${numpyType}`);
40
- return null;
38
+ throw new Error(`Unimplemented type ${numpyType}`);
41
39
  }
42
40
  const nArrayElements = header.shape?.reduce((a, b) => a * b);
43
41
  const arrayByteLength = nArrayElements * ArrayType.BYTES_PER_ELEMENT;
42
+ if (arrayBuffer.byteLength < headerEndOffset + arrayByteLength) {
43
+ throw new Error('Buffer overflow');
44
+ }
44
45
  const data = new ArrayType(arrayBuffer.slice(headerEndOffset, headerEndOffset + arrayByteLength));
45
46
  // Swap endianness if needed
46
47
  if ((numpyType[0] === '>' && LITTLE_ENDIAN_OS) || (numpyType[0] === '<' && !LITTLE_ENDIAN_OS)) {
47
- // eslint-disable-next-line no-console, no-undef
48
- console.warn('Data is wrong endianness, byte swapping not yet implemented.');
48
+ throw new Error('Incorrect endianness');
49
49
  }
50
50
  return {
51
51
  data,
@@ -65,11 +65,11 @@ function parseHeader(view) {
65
65
  let offset = 8;
66
66
  let headerLength;
67
67
  if (majorVersion >= 2) {
68
- headerLength = view.getUint32(8, true);
68
+ headerLength = view.getUint32(offset, true);
69
69
  offset += 4;
70
70
  }
71
71
  else {
72
- headerLength = view.getUint16(8, true);
72
+ headerLength = view.getUint16(offset, true);
73
73
  offset += 2;
74
74
  }
75
75
  const encoding = majorVersion <= 2 ? 'latin1' : 'utf-8';
@@ -21,8 +21,8 @@ export declare const NPYWorkerLoader: {
21
21
  */
22
22
  export declare const NPYLoader: {
23
23
  parseSync: typeof parseNPY;
24
- parse: (arrayBuffer: ArrayBuffer, options?: LoaderOptions | undefined) => Promise<{
25
- data: any;
24
+ parse: (arrayBuffer: ArrayBuffer, options?: LoaderOptions) => Promise<{
25
+ data: Uint8Array | Uint32Array | Int32Array | Int8Array | Int16Array | Uint16Array | Float32Array | Float64Array;
26
26
  header: {
27
27
  descr: string;
28
28
  shape: number[];
@@ -1 +1 @@
1
- {"version":3,"file":"npy-loader.d.ts","sourceRoot":"","sources":["../src/npy-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAEtF,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AAKjD;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;CAY3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS;;yBAGO,WAAW;;;;;;;;;;;;;;;;;;CACvC,CAAC;AAGF,eAAO,MAAM,yBAAyB,EAAE,MAAwB,CAAC;AACjE,eAAO,MAAM,mBAAmB,EAAE,gBAA4B,CAAC"}
1
+ {"version":3,"file":"npy-loader.d.ts","sourceRoot":"","sources":["../src/npy-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAEtF,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AAKjD;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;CAY3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS;;yBAGO,WAAW,YAAY,aAAa;;;;;;;;;;;;;;;;;;CAChE,CAAC;AAGF,eAAO,MAAM,yBAAyB,EAAE,MAAwB,CAAC;AACjE,eAAO,MAAM,mBAAmB,EAAE,gBAA4B,CAAC"}
@@ -1,6 +1,6 @@
1
1
  (() => {
2
2
  // src/lib/utils/version.ts
3
- var VERSION = true ? "3.3.0-alpha.5" : "beta";
3
+ var VERSION = true ? "3.3.0-alpha.7" : "beta";
4
4
 
5
5
  // src/lib/parsers/parse-npy.ts
6
6
  function systemIsLittleEndian() {
@@ -28,14 +28,16 @@
28
28
  const numpyType = header.descr;
29
29
  const ArrayType = DTYPES[numpyType.slice(1, 3)];
30
30
  if (!ArrayType) {
31
- console.warn(`Decoding of npy dtype not implemented: ${numpyType}`);
32
- return null;
31
+ throw new Error(`Unimplemented type ${numpyType}`);
33
32
  }
34
33
  const nArrayElements = header.shape?.reduce((a, b) => a * b);
35
34
  const arrayByteLength = nArrayElements * ArrayType.BYTES_PER_ELEMENT;
35
+ if (arrayBuffer.byteLength < headerEndOffset + arrayByteLength) {
36
+ throw new Error("Buffer overflow");
37
+ }
36
38
  const data = new ArrayType(arrayBuffer.slice(headerEndOffset, headerEndOffset + arrayByteLength));
37
39
  if (numpyType[0] === ">" && LITTLE_ENDIAN_OS || numpyType[0] === "<" && !LITTLE_ENDIAN_OS) {
38
- console.warn("Data is wrong endianness, byte swapping not yet implemented.");
40
+ throw new Error("Incorrect endianness");
39
41
  }
40
42
  return {
41
43
  data,
@@ -47,10 +49,10 @@
47
49
  let offset = 8;
48
50
  let headerLength;
49
51
  if (majorVersion >= 2) {
50
- headerLength = view.getUint32(8, true);
52
+ headerLength = view.getUint32(offset, true);
51
53
  offset += 4;
52
54
  } else {
53
- headerLength = view.getUint16(8, true);
55
+ headerLength = view.getUint16(offset, true);
54
56
  offset += 2;
55
57
  }
56
58
  const encoding = majorVersion <= 2 ? "latin1" : "utf-8";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/textures",
3
- "version": "3.3.0-alpha.5",
3
+ "version": "3.3.0-alpha.7",
4
4
  "description": "Framework-independent loaders for compressed and super compressed (basis) textures ",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -45,15 +45,15 @@
45
45
  "build-ktx2-basis-writer-nodejs-worker": "esbuild src/workers/ktx2-basis-writer-nodejs-worker.ts --platform=node --target=esnext,node12 --bundle --outfile=dist/ktx2-basis-writer-nodejs-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
46
46
  },
47
47
  "dependencies": {
48
- "@loaders.gl/images": "3.3.0-alpha.5",
49
- "@loaders.gl/loader-utils": "3.3.0-alpha.5",
50
- "@loaders.gl/schema": "3.3.0-alpha.5",
51
- "@loaders.gl/worker-utils": "3.3.0-alpha.5",
48
+ "@loaders.gl/images": "3.3.0-alpha.7",
49
+ "@loaders.gl/loader-utils": "3.3.0-alpha.7",
50
+ "@loaders.gl/schema": "3.3.0-alpha.7",
51
+ "@loaders.gl/worker-utils": "3.3.0-alpha.7",
52
52
  "ktx-parse": "^0.0.4",
53
53
  "texture-compressor": "^1.0.2"
54
54
  },
55
55
  "devDependencies": {
56
- "@loaders.gl/polyfills": "3.3.0-alpha.5"
56
+ "@loaders.gl/polyfills": "3.3.0-alpha.7"
57
57
  },
58
- "gitHead": "d2df3bead97710c45fd2974cd51ecd7d5f7f5ea4"
58
+ "gitHead": "29b08f3519c50984e84bf4234e607cab7c7d1c3e"
59
59
  }
@@ -1,6 +1,17 @@
1
1
  // import type {TextureLevel} from '@loaders.gl/schema';
2
2
 
3
3
  type NumpyHeader = {descr: string; shape: number[]};
4
+ type TypedArrayConstructor =
5
+ | typeof Int8Array
6
+ | typeof Uint8Array
7
+ | typeof Int16Array
8
+ | typeof Uint16Array
9
+ | typeof Int32Array
10
+ | typeof Uint32Array
11
+ | typeof Int32Array
12
+ | typeof Uint32Array
13
+ | typeof Float32Array
14
+ | typeof Float64Array;
4
15
 
5
16
  function systemIsLittleEndian() {
6
17
  const a = new Uint32Array([0x12345678]);
@@ -18,7 +29,7 @@ const LITTLE_ENDIAN_OS = systemIsLittleEndian();
18
29
  //
19
30
  // Here I only include the second and third characters, and check endianness
20
31
  // separately
21
- const DTYPES: Record<string, any> = {
32
+ const DTYPES: Record<string, TypedArrayConstructor> = {
22
33
  u1: Uint8Array,
23
34
  i1: Int8Array,
24
35
  u2: Uint16Array,
@@ -40,20 +51,20 @@ export function parseNPY(arrayBuffer: ArrayBuffer, options?: unknown) {
40
51
  const numpyType = header.descr;
41
52
  const ArrayType = DTYPES[numpyType.slice(1, 3)];
42
53
  if (!ArrayType) {
43
- // eslint-disable-next-line no-console, no-undef
44
- console.warn(`Decoding of npy dtype not implemented: ${numpyType}`);
45
- return null;
54
+ throw new Error(`Unimplemented type ${numpyType}`);
46
55
  }
47
56
 
48
57
  const nArrayElements = header.shape?.reduce((a: number, b: number): number => a * b);
49
58
  const arrayByteLength = nArrayElements * ArrayType.BYTES_PER_ELEMENT;
50
59
 
60
+ if (arrayBuffer.byteLength < headerEndOffset + arrayByteLength) {
61
+ throw new Error('Buffer overflow');
62
+ }
51
63
  const data = new ArrayType(arrayBuffer.slice(headerEndOffset, headerEndOffset + arrayByteLength));
52
64
 
53
65
  // Swap endianness if needed
54
66
  if ((numpyType[0] === '>' && LITTLE_ENDIAN_OS) || (numpyType[0] === '<' && !LITTLE_ENDIAN_OS)) {
55
- // eslint-disable-next-line no-console, no-undef
56
- console.warn('Data is wrong endianness, byte swapping not yet implemented.');
67
+ throw new Error('Incorrect endianness');
57
68
  }
58
69
 
59
70
  return {
@@ -73,12 +84,12 @@ function parseHeader(view: DataView): {header: NumpyHeader; headerEndOffset: num
73
84
  // const minorVersion = view.getUint8(7);
74
85
 
75
86
  let offset = 8;
76
- let headerLength;
87
+ let headerLength: number;
77
88
  if (majorVersion >= 2) {
78
- headerLength = view.getUint32(8, true);
89
+ headerLength = view.getUint32(offset, true);
79
90
  offset += 4;
80
91
  } else {
81
- headerLength = view.getUint16(8, true);
92
+ headerLength = view.getUint16(offset, true);
82
93
  offset += 2;
83
94
  }
84
95