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

visgl / loaders.gl / 24153816851

08 Apr 2026 07:17PM UTC coverage: 53.247% (-12.1%) from 65.319%
24153816851

push

github

web-flow
chore: Move from tape to vitest (#3351)

8651 of 17291 branches covered (50.03%)

Branch coverage included in aggregate %.

7 of 7 new or added lines in 1 file covered. (100.0%)

2031 existing lines in 296 files now uncovered.

17563 of 31940 relevant lines covered (54.99%)

5279.54 hits per line

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

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

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

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

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

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

34
  if (data instanceof ArrayBuffer) {
623✔
35
    return data;
23✔
36
  }
37

38
  if (isSharedArrayBuffer(data)) {
600!
39
    return copyToArrayBuffer(data);
×
40
  }
41

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

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

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

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

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

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

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

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

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

103
  // Create a view to support ArrayBufferLike sources such as SharedArrayBuffer
104
  return new Uint8Array(data);
401✔
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