Skip to content

Commit 45eaa9e

Browse files
authored
Merge branch 'main' into dependabot/npm_and_yarn/vite-7.1.11
2 parents ffa6268 + ccc4376 commit 45eaa9e

File tree

5 files changed

+62
-31
lines changed

5 files changed

+62
-31
lines changed

index.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import Pbf from 'pbf';
2-
import {type GeoJSONOptions, type Feature, GeoJSONWrapper} from './lib/geojson_wrapper';
2+
import {type Feature, GEOJSON_TILE_LAYER_NAME, type GeoJSONOptions, GeoJSONWrapper} from "./lib/geojson_wrapper";
33
import geojsonvt from 'geojson-vt';
4-
import {type VectorTileLayer, type VectorTile, VectorTileFeature} from '@mapbox/vector-tile';
4+
import type {VectorTileFeatureLike, VectorTileLike, VectorTileLayerLike} from './lib/types';
55

66
interface Context {
77
keys: string[];
88
values: (string | boolean | number)[];
99
keycache: Record<string, number>;
1010
valuecache: Record<string, number>;
11-
feature?: VectorTileFeature;
11+
feature?: VectorTileFeatureLike;
1212
}
1313

1414
/**
@@ -17,7 +17,7 @@ interface Context {
1717
* @param tile
1818
* @return uncompressed, pbf-serialized tile data
1919
*/
20-
export function fromVectorTileJs(tile: VectorTile): Uint8Array {
20+
export function fromVectorTileJs(tile: VectorTileLike): Uint8Array {
2121
const out = new Pbf();
2222
writeTile(tile, out);
2323
return out.finish();
@@ -31,7 +31,7 @@ export function fromVectorTileJs(tile: VectorTile): Uint8Array {
3131
* @return uncompressed, pbf-serialized tile data
3232
*/
3333
export function fromGeojsonVt(layers: geojsonvt.Tile[], options?: GeoJSONOptions): Uint8Array {
34-
const l: Record<string, VectorTileLayer> = {};
34+
const l: Record<string, VectorTileLayerLike> = {};
3535
// eslint-disable-next-line @typescript-eslint/no-for-in-array
3636
for (const k in layers) {
3737
l[k] = new GeoJSONWrapper(layers[k].features, options);
@@ -42,13 +42,13 @@ export function fromGeojsonVt(layers: geojsonvt.Tile[], options?: GeoJSONOptions
4242
return fromVectorTileJs({ layers: l });
4343
}
4444

45-
function writeTile(tile: VectorTile, pbf: Pbf) {
45+
function writeTile(tile: VectorTileLike, pbf: Pbf) {
4646
for (const key in tile.layers) {
4747
pbf.writeMessage(3, writeLayer, tile.layers[key]);
4848
}
4949
}
5050

51-
function writeLayer(layer: VectorTileLayer, pbf: Pbf) {
51+
function writeLayer(layer: VectorTileLayerLike, pbf: Pbf) {
5252
pbf.writeVarintField(15, layer.version || 1);
5353
pbf.writeStringField(1, layer.name || '');
5454
pbf.writeVarintField(5, layer.extent || 4096);
@@ -128,7 +128,7 @@ function zigzag(num: number) {
128128
return (num << 1) ^ (num >> 31);
129129
}
130130

131-
function writeGeometry(feature: VectorTileFeature, pbf: Pbf) {
131+
function writeGeometry(feature: VectorTileFeatureLike, pbf: Pbf) {
132132
const geometry = feature.loadGeometry();
133133
const type = feature.type;
134134
let x = 0;
@@ -179,5 +179,9 @@ function writeValue(value: string | boolean | number, pbf: Pbf) {
179179
export {
180180
GeoJSONWrapper,
181181
GeoJSONOptions,
182-
Feature
183-
}
182+
Feature,
183+
GEOJSON_TILE_LAYER_NAME,
184+
VectorTileFeatureLike,
185+
VectorTileLike,
186+
VectorTileLayerLike,
187+
};

lib/geojson_wrapper.ts

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
import Point from '@mapbox/point-geometry';
2-
import {VectorTileFeature, VectorTileLayer, type VectorTile} from '@mapbox/vector-tile';
32
import type {TileFeature, AnyProps} from 'supercluster';
43
import {type Feature as GeoJSONVTFeature, Geometry} from 'geojson-vt';
5-
import Pbf from 'pbf';
4+
import type {
5+
VectorTileFeatureLike,
6+
VectorTileLayerLike,
7+
VectorTileLike,
8+
} from "./types";
9+
10+
export { VectorTileFeatureLike, VectorTileLayerLike, VectorTileLike };
611

712
export type Feature = TileFeature<AnyProps, AnyProps> | GeoJSONVTFeature;
813

@@ -11,14 +16,18 @@ export interface GeoJSONOptions {
1116
extent: number;
1217
}
1318

14-
class FeatureWrapper extends VectorTileFeature {
19+
class FeatureWrapper implements VectorTileFeatureLike {
1520
feature: Feature;
21+
type: VectorTileFeatureLike['type'];
22+
properties: VectorTileFeatureLike['properties'];
23+
id: VectorTileFeatureLike['id'];
24+
extent: VectorTileFeatureLike['extent'];
1625

1726
constructor(feature: Feature, extent: number) {
18-
super(new Pbf(), 0, extent, [], []);
1927
this.feature = feature;
2028
this.type = feature.type;
2129
this.properties = feature.tags ? feature.tags : {};
30+
this.extent = extent;
2231

2332
// If the feature has a top-level `id` property, copy it over, but only
2433
// if it can be coerced to an integer, because this wrapper is used for
@@ -50,25 +59,26 @@ class FeatureWrapper extends VectorTileFeature {
5059
}
5160
}
5261

53-
export class GeoJSONWrapper extends VectorTileLayer implements VectorTile {
54-
layers: Record<string, VectorTileLayer>;
55-
name: string;
56-
extent: number;
57-
length: number;
58-
version: number;
62+
export const GEOJSON_TILE_LAYER_NAME = "_geojsonTileLayer";
63+
64+
export class GeoJSONWrapper implements VectorTileLayerLike {
65+
layers: Record<string, VectorTileLayerLike>;
5966
features: Feature[];
67+
version: VectorTileLayerLike['version'];
68+
name: VectorTileLayerLike['name'];
69+
extent: VectorTileLayerLike['extent'];
70+
length: VectorTileLayerLike['length'];
6071

6172
constructor(features: Feature[], options?: GeoJSONOptions) {
62-
super(new Pbf());
63-
this.layers = {'_geojsonTileLayer': this};
64-
this.name = '_geojsonTileLayer';
73+
this.layers = { [GEOJSON_TILE_LAYER_NAME]: this };
74+
this.name = GEOJSON_TILE_LAYER_NAME;
6575
this.version = options ? options.version : 1;
6676
this.extent = options ? options.extent : 4096;
6777
this.length = features.length;
6878
this.features = features;
6979
}
7080

71-
feature(i: number): VectorTileFeature {
81+
feature(i: number): VectorTileFeatureLike {
7282
return new FeatureWrapper(this.features[i], this.extent);
7383
}
7484
}

lib/types.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import type Point from '@mapbox/point-geometry';
2+
3+
export interface VectorTileFeatureLike {
4+
type: 0 | 1 | 2 | 3;
5+
properties: Record<string, number | string | boolean>;
6+
id: number | undefined;
7+
extent: number;
8+
loadGeometry(): Point[][];
9+
}
10+
11+
export interface VectorTileLayerLike {
12+
version: number;
13+
name: string;
14+
extent: number;
15+
length: number;
16+
feature(i: number): VectorTileFeatureLike;
17+
}
18+
19+
export interface VectorTileLike {
20+
layers: Record<string, VectorTileLayerLike>;
21+
}

test/geojson_wrapper-test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {describe, test, expect} from 'vitest';
2-
import {GeoJSONWrapper} from '../index.ts';
2+
import {GeoJSONWrapper} from '../index';
33

44
describe('geojsonwrapper', () => {
55
test('linestring', () => {

tsconfig.json

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,5 @@
1212
"moduleResolution": "bundler",
1313
"declarationDir": "dist/"
1414
},
15-
"files": [
16-
"index.ts",
17-
"lib/geojson_wrapper.ts",
18-
"rollup.config.ts"
19-
]
20-
}
15+
"include": ["**/*.ts"]
16+
}

0 commit comments

Comments
 (0)