• 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

49.43
/modules/compression/src/lib/zstd-compression.ts
1
// loaders.gl
1✔
2
// SPDX-License-Identifier: MIT
1✔
3
// Copyright (c) vis.gl contributors
1✔
4

1✔
5
// ZSTD
1✔
6
import type {CompressionOptions} from './compression';
1✔
7
import {Compression} from './compression';
1✔
8
import {
1✔
9
  registerJSModules,
1✔
10
  checkJSModule,
1✔
11
  getJSModule,
1✔
12
  getJSModuleOrNull,
1✔
13
  ensureArrayBuffer
1✔
14
} from '@loaders.gl/loader-utils';
1✔
15

1✔
16
// import {ZstdCodec} from 'zstd-codec'; // https://bundlephobia.com/package/zstd-codec
1✔
17

1✔
18
const CHUNK_SIZE = 1000000; // Tested value
1✔
19

1✔
20
let zstdPromise: Promise<any>;
1✔
21
let zstd;
1✔
22

1✔
23
/**
1✔
24
 * Zstandard compression / decompression
1✔
25
 */
1✔
26
export class ZstdCompression extends Compression {
1✔
27
  readonly name: string = 'zstd';
1!
28
  readonly extensions = [];
×
29
  readonly contentEncodings = [];
×
30
  readonly isSupported = true;
×
31
  readonly options: CompressionOptions;
×
32

1✔
33
  /**
1✔
34
   * zstd-codec is an injectable dependency due to big size
1✔
35
   * @param options
1✔
36
   */
1✔
37
  constructor(options: CompressionOptions) {
1✔
38
    super(options);
×
39
    this.options = options;
×
40
    registerJSModules(options?.modules);
×
41
  }
×
42

1✔
43
  async preload(modules: Record<string, any> = {}): Promise<void> {
1✔
44
    registerJSModules(modules);
×
45
    checkJSModule('zstd-codec', this.name);
×
46
    const ZstdCodec = getJSModuleOrNull('zstd-codec');
×
47
    // eslint-disable-next-line  @typescript-eslint/no-misused-promises
×
48
    if (!zstdPromise && ZstdCodec) {
×
49
      zstdPromise = new Promise((resolve) => ZstdCodec.run((zstd) => resolve(zstd)));
×
50
      zstd = await zstdPromise;
×
51
    }
×
52
  }
×
53

1✔
54
  compressSync(input: ArrayBuffer): ArrayBuffer {
1✔
55
    getJSModule('zstd-codec', this.name);
×
56
    const simpleZstd = new zstd.Simple();
×
57
    const inputArray = new Uint8Array(input);
×
58
    return simpleZstd.compress(inputArray).buffer;
×
59
  }
×
60

1✔
61
  decompressSync(input: ArrayBuffer): ArrayBuffer {
1✔
62
    getJSModule('zstd-codec', this.name);
×
63
    const simpleZstd = new zstd.Simple();
×
64
    // var ddict = new zstd.Dict.Decompression(dictData);
×
65
    // var jsonBytes = simpleZstd.decompressUsingDict(jsonZstData, ddict);
×
66
    const inputArray = new Uint8Array(input);
×
67
    return simpleZstd.decompress(inputArray).buffer;
×
68
  }
×
69

1✔
70
  async decompress(input: ArrayBuffer, size?: number): Promise<ArrayBuffer> {
1✔
71
    await this.preload();
×
72
    const simpleZstd = new zstd.Streaming();
×
73
    const inputArray = new Uint8Array(input);
×
74

×
NEW
75
    const chunks: Uint8Array[] = [];
×
76
    for (let i = 0; i <= inputArray.length; i += CHUNK_SIZE) {
×
NEW
77
      const chunkView = inputArray.subarray(i, i + CHUNK_SIZE);
×
NEW
78
      const chunkArrayBuffer = ensureArrayBuffer(chunkView);
×
NEW
79
      chunks.push(new Uint8Array(chunkArrayBuffer));
×
80
    }
×
81

×
82
    const decompressResult = await simpleZstd.decompressChunks(chunks);
×
83
    return decompressResult.buffer;
×
84
  }
×
85
}
1✔
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