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

visgl / loaders.gl / 25070233425

28 Apr 2026 06:20PM UTC coverage: 59.434% (+0.01%) from 59.423%
25070233425

push

github

web-flow
website: Add tabs for navigating between format docs (#3407)

11310 of 20887 branches covered (54.15%)

Branch coverage included in aggregate %.

89 of 136 new or added lines in 13 files covered. (65.44%)

1742 existing lines in 132 files now uncovered.

23500 of 37682 relevant lines covered (62.36%)

16296.63 hits per line

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

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

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

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

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

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

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

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

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

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

61
  decompressSync(input: ArrayBuffer): ArrayBuffer {
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

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

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

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