• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

visgl / loaders.gl / 20382848403

19 Dec 2025 09:20PM UTC coverage: 35.219% (+0.1%) from 35.095%
20382848403

push

github

web-flow
feat: Upgrade to handle ArrayBufferLike (#3271)

1190 of 2002 branches covered (59.44%)

Branch coverage included in aggregate %.

157 of 269 new or added lines in 41 files covered. (58.36%)

3 existing lines in 3 files now uncovered.

37536 of 107957 relevant lines covered (34.77%)

0.79 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

67.2
/modules/loader-utils/src/lib/binary-utils/memory-conversion-utils.ts
1
// loaders.gl
1✔
2
// SPDX-License-Identifier: MIT
1✔
3
// Copyright (c) vis.gl contributors
1✔
4

1✔
5
import {isSharedArrayBuffer} from '../javascript-utils/is-type';
1✔
6
import * as node from '../node/buffer';
1✔
7

1✔
8
/**
1✔
9
 * Check for Node.js `Buffer` (without triggering bundler to include Buffer polyfill on browser)
1✔
10
 */
1✔
11
export function isBuffer(value: any): value is Buffer {
1✔
12
  return value && typeof value === 'object' && value.isBuffer;
11✔
13
}
11✔
14

1✔
15
/**
1✔
16
 * Converts to Node.js `Buffer` (without triggering bundler to include Buffer polyfill on browser)
1✔
17
 * @todo better data type
1✔
18
 */
1✔
19
export function toBuffer(data: unknown): Buffer {
1✔
NEW
20
  return node.toBuffer ? node.toBuffer(data as any) : (data as Buffer);
×
UNCOV
21
}
×
22

1✔
23
/**
1✔
24
 * Convert an object to an array buffer. Handles SharedArrayBuffers.
1✔
25
 */
1✔
26
export function toArrayBuffer(
1✔
27
  data: Buffer | ArrayBufferLike | ArrayBufferView | string | Blob
11✔
28
): ArrayBuffer {
11✔
29
  // Note: Should be called first, Buffers can trigger other detections below
11✔
30
  if (isBuffer(data)) {
11!
31
    return node.toArrayBuffer(data);
×
32
  }
×
33

11✔
34
  if (data instanceof ArrayBuffer) {
11✔
35
    return data;
1✔
36
  }
1✔
37

10✔
38
  if (isSharedArrayBuffer(data)) {
11!
NEW
39
    return copyToArrayBuffer(data);
×
NEW
40
  }
✔
41

10✔
42
  // Node Buffers look like Uint8Arrays (Check isBuffer first)
10✔
43
  if (ArrayBuffer.isView(data)) {
11✔
44
    // TODO - ArrayBufferLike type mess
8✔
45
    const buffer = data.buffer as ArrayBuffer;
8✔
46
    if (data.byteOffset === 0 && data.byteLength === data.buffer.byteLength) {
8✔
47
      return buffer;
8✔
48
    }
8!
NEW
49
    return buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
×
50
  }
✔
51

2✔
52
  if (typeof data === 'string') {
11✔
53
    const text = data;
1✔
54
    const uint8Array = new TextEncoder().encode(text);
1✔
55
    return uint8Array.buffer;
1✔
56
  }
1✔
57

1✔
58
  // HACK to support Blob polyfill
1✔
59
  if (data && typeof data === 'object' && (data as any)._toArrayBuffer) {
11!
60
    return (data as any)._toArrayBuffer();
×
61
  }
✔
62

1✔
63
  throw new Error('toArrayBuffer');
1✔
64
}
1✔
65

1✔
66
/** Ensure that SharedArrayBuffers are copied into ArrayBuffers */
1✔
67
export function ensureArrayBuffer(bufferSource: ArrayBufferLike | ArrayBufferView): ArrayBuffer {
1✔
68
  if (bufferSource instanceof ArrayBuffer) {
3!
NEW
69
    return bufferSource;
×
NEW
70
  }
×
71

3✔
72
  if (isSharedArrayBuffer(bufferSource)) {
3!
NEW
73
    return copyToArrayBuffer(bufferSource);
×
NEW
74
  }
×
75

3✔
76
  const {buffer, byteOffset, byteLength} = bufferSource;
3✔
77
  if (buffer instanceof ArrayBuffer && byteOffset === 0 && byteLength === buffer.byteLength) {
3✔
78
    return buffer;
3✔
79
  }
3!
NEW
80
  return copyToArrayBuffer(buffer, byteOffset, byteLength);
×
NEW
81
}
×
82

1✔
83
/** Copies an ArrayBuffer or a section of an ArrayBuffer to a new ArrayBuffer, handles SharedArrayBuffers */
1✔
84
export function copyToArrayBuffer(
1✔
NEW
85
  buffer: ArrayBufferLike,
×
NEW
86
  byteOffset = 0,
×
NEW
87
  byteLength = buffer.byteLength - byteOffset
×
NEW
88
): ArrayBuffer {
×
NEW
89
  const view = new Uint8Array(buffer, byteOffset, byteLength);
×
NEW
90
  const copy = new Uint8Array(view.length);
×
NEW
91
  copy.set(view);
×
NEW
92
  return copy.buffer;
×
NEW
93
}
×
94

1✔
95
/** Convert an object to an ArrayBufferView, handles SharedArrayBuffers */
1✔
96
export function toArrayBufferView(
1✔
NEW
97
  data: ArrayBufferLike | ArrayBufferView
×
NEW
98
): ArrayBuffer | ArrayBufferView {
×
NEW
99
  if (ArrayBuffer.isView(data)) {
×
NEW
100
    return data;
×
NEW
101
  }
×
NEW
102

×
NEW
103
  // Create a view to support ArrayBufferLike sources such as SharedArrayBuffer
×
NEW
104
  return new Uint8Array(data);
×
NEW
105
}
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc