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

visgl / loaders.gl / 20352515932

18 Dec 2025 09:56PM UTC coverage: 35.115% (-28.4%) from 63.485%
20352515932

push

github

web-flow
feat(loader-utils): Export is-type helpers (#3258)

1188 of 1998 branches covered (59.46%)

Branch coverage included in aggregate %.

147 of 211 new or added lines in 13 files covered. (69.67%)

30011 existing lines in 424 files now uncovered.

37457 of 108056 relevant lines covered (34.66%)

0.79 hits per line

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

34.78
/modules/gis/src/lib/binary-geometry-api/transform-coordinates.ts
1
import type {BinaryFeatureCollection, BinaryGeometry, Feature} from '@loaders.gl/schema';
1✔
2

1✔
3
type TransformCoordinate = (coord: number[]) => number[];
1✔
4

1✔
5
/**
1✔
6
 * Apply transformation to every coordinate of binary features
1✔
7
 * @param  binaryFeatures binary features
1✔
8
 * @param  transformCoordinate Function to call on each coordinate
1✔
9
 * @return Transformed binary features
1✔
10
 */
1✔
11
export function transformBinaryCoords(
1✔
UNCOV
12
  binaryFeatures: BinaryFeatureCollection,
×
UNCOV
13
  transformCoordinate: TransformCoordinate
×
UNCOV
14
): BinaryFeatureCollection {
×
UNCOV
15
  if (binaryFeatures.points) {
×
UNCOV
16
    transformBinaryGeometryPositions(binaryFeatures.points, transformCoordinate);
×
UNCOV
17
  }
×
UNCOV
18
  if (binaryFeatures.lines) {
×
19
    transformBinaryGeometryPositions(binaryFeatures.lines, transformCoordinate);
×
20
  }
×
UNCOV
21
  if (binaryFeatures.polygons) {
×
22
    transformBinaryGeometryPositions(binaryFeatures.polygons, transformCoordinate);
×
23
  }
×
UNCOV
24
  return binaryFeatures;
×
UNCOV
25
}
×
26

1✔
27
/** Transform one binary geometry */
1✔
UNCOV
28
function transformBinaryGeometryPositions(binaryGeometry: BinaryGeometry, fn: TransformCoordinate) {
×
UNCOV
29
  const {positions} = binaryGeometry;
×
UNCOV
30
  for (let i = 0; i < positions.value.length; i += positions.size) {
×
UNCOV
31
    // @ts-ignore inclusion of bigint causes problems
×
UNCOV
32
    const coord: Array<number> = Array.from(positions.value.subarray(i, i + positions.size));
×
UNCOV
33
    const transformedCoord = fn(coord);
×
UNCOV
34
    // @ts-ignore typescript typing for .set seems to require bigint?
×
UNCOV
35
    positions.value.set(transformedCoord, i);
×
UNCOV
36
  }
×
UNCOV
37
}
×
38

1✔
39
/**
1✔
40
 * Apply transformation to every coordinate of GeoJSON features
1✔
41
 * @param  features Array of GeoJSON features
1✔
42
 * @param  fn       Function to call on each coordinate
1✔
43
 * @return          Transformed GeoJSON features
1✔
44
 */
1✔
45
export function transformGeoJsonCoords(
1✔
UNCOV
46
  features: Feature[],
×
UNCOV
47
  fn: (coord: number[]) => number[]
×
UNCOV
48
): Feature[] {
×
UNCOV
49
  for (const feature of features) {
×
UNCOV
50
    // @ts-ignore
×
UNCOV
51
    feature.geometry.coordinates = coordMap(feature.geometry.coordinates, fn);
×
UNCOV
52
  }
×
UNCOV
53
  return features;
×
UNCOV
54
}
×
55

1✔
UNCOV
56
function coordMap(array: unknown, fn: (coord: number[]) => number[]): unknown[] {
×
UNCOV
57
  if (isCoord(array)) {
×
UNCOV
58
    return fn(array as number[]);
×
UNCOV
59
  }
×
UNCOV
60

×
UNCOV
61
  return (array as unknown[]).map((item) => {
×
UNCOV
62
    return coordMap(item, fn);
×
UNCOV
63
  });
×
UNCOV
64
}
×
65

1✔
UNCOV
66
function isCoord(array: unknown) {
×
UNCOV
67
  return Array.isArray(array) && Number.isFinite(array[0]) && Number.isFinite(array[1]);
×
UNCOV
68
}
×
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