From 4b5302b926f237e4aabd1cdfdf2057f2d83fdb45 Mon Sep 17 00:00:00 2001 From: Marius Lindvall Date: Tue, 16 Dec 2025 00:17:52 +0100 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=A4=96=20Merge=20PR=20#74179=20Add=20?= =?UTF-8?q?types=20for=20s2-geometry=20by=20@bilde2910?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- types/s2-geometry/.npmignore | 5 + types/s2-geometry/index.d.ts | 80 +++++++++++++++ types/s2-geometry/package.json | 17 ++++ types/s2-geometry/s2-geometry-tests.ts | 133 +++++++++++++++++++++++++ types/s2-geometry/tsconfig.json | 19 ++++ 5 files changed, 254 insertions(+) create mode 100644 types/s2-geometry/.npmignore create mode 100644 types/s2-geometry/index.d.ts create mode 100644 types/s2-geometry/package.json create mode 100644 types/s2-geometry/s2-geometry-tests.ts create mode 100644 types/s2-geometry/tsconfig.json diff --git a/types/s2-geometry/.npmignore b/types/s2-geometry/.npmignore new file mode 100644 index 00000000000000..93e307400a5456 --- /dev/null +++ b/types/s2-geometry/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.d.ts +!**/*.d.cts +!**/*.d.mts +!**/*.d.*.ts diff --git a/types/s2-geometry/index.d.ts b/types/s2-geometry/index.d.ts new file mode 100644 index 00000000000000..39a3cf60f8972b --- /dev/null +++ b/types/s2-geometry/index.d.ts @@ -0,0 +1,80 @@ +export namespace S2 { + function LatLngToXYZ(latLng: S2.L.LatLng): [number, number, number]; + function XYZToLatLng(xyz: readonly [number, number, number]): S2.L.LatLng; + function XYZToFaceUV(xyz: readonly [number, number, number]): [number, [number, number]]; + function FaceUVToXYZ(face: number, uv: readonly [number, number]): [number, number, number]; + function STToUV(st: readonly [number, number]): [number, number]; + function UVToST(uv: readonly [number, number]): [number, number]; + function STToIJ(st: readonly [number, number], order: number): [number, number]; + function IJToST(ij: readonly [number, number], order: number, offsets: readonly [number, number]): [number, number]; + function latLngToNeighborKeys(lat: number, lng: number, level: number): [string, string, string, string]; + const FACE_BITS: number; + const MAX_LEVEL: number; + const POS_BITS: number; + function facePosLevelToId(faceN: number, posS: string, levelN?: number): string; + function fromFacePosLevel(faceN: number, posS: string, levelN?: number): string; + + function keyToId(key: string): string; + function toId(key: string): string; + function toCellId(key: string): string; + function fromKey(key: string): string; + + function idToKey(idS: string): string; + function toKey(idS: string): string; + function fromId(idS: string): string; + function fromCellId(idS: string): string; + function toHilbertQuadkey(idS: string): string; + + function keyToLatLng(key: string): S2.L.LatLng; + function idToLatLng(id: string): S2.L.LatLng; + function latLngToKey(lat: number, lng: number, level: number): string; + function latLngToQuadkey(lat: number, lng: number, level: number): string; + function stepKey(key: string, num: number): string; + function prevKey(key: string): string; + function nextKey(key: string): string; + + interface S2Cell { + face: number; + ij: [number, number]; + level: number; + toString(): string; + getLatLng(): S2.L.LatLng; + getCornerLatLngs(): [S2.L.LatLng, S2.L.LatLng, S2.L.LatLng, S2.L.LatLng]; + getFaceAndQuads(): [number, number[]]; + toHilbertQuadkey(): string; + getNeighbors(): [S2Cell, S2Cell, S2Cell, S2Cell]; + } +} + +export namespace S2.L { + function LatLng(rawLat: number, rawLng: number, noWrap?: boolean): LatLng; + interface LatLng { + lat: number; + lng: number; + } +} + +export namespace S2.L.LatLng { + const DEG_TO_RAD: number; + const RAD_TO_DEG: number; +} + +export namespace S2.S2Cell { + function FromHilbertQuadKey(hilbertQuadkey: string): S2.S2Cell; + function FromLatLng(latLng: S2.L.LatLng, level: number): S2.S2Cell; + function FromFaceIJ(face: number, ij: readonly [number, number], level: number): S2.S2Cell; + function latLngToNeighborKeys(lat: number, lng: number, level: number): [string, string, string, string]; + function facePosLevelToId(faceN: number, posS: string, levelN?: number): string; + + function keyToId(key: string): string; + + function toHilbertQuadkey(idS: string): string; + function toKey(idS: string): string; + function idToKey(idS: string): string; + + function keyToLatLng(key: string): S2.L.LatLng; + function idToLatLng(id: string): S2.L.LatLng; + function latLngToKey(lat: number, lng: number, level: number): string; + function prevKey(key: string): string; + function nextKey(key: string): string; +} diff --git a/types/s2-geometry/package.json b/types/s2-geometry/package.json new file mode 100644 index 00000000000000..d147651e2e0300 --- /dev/null +++ b/types/s2-geometry/package.json @@ -0,0 +1,17 @@ +{ + "private": true, + "name": "@types/s2-geometry", + "version": "1.2.9999", + "projects": [ + "https://git.coolaj86.com/coolaj86/s2-geometry.js#readme" + ], + "devDependencies": { + "@types/s2-geometry": "workspace:." + }, + "owners": [ + { + "name": "Marius Lindvall", + "githubUsername": "bilde2910" + } + ] +} diff --git a/types/s2-geometry/s2-geometry-tests.ts b/types/s2-geometry/s2-geometry-tests.ts new file mode 100644 index 00000000000000..1431e1c5995137 --- /dev/null +++ b/types/s2-geometry/s2-geometry-tests.ts @@ -0,0 +1,133 @@ +import { S2 } from "s2-geometry"; + +// $ExpectType LatLng +const ll = S2.L.LatLng(37.819737, -122.478562); +// { lat: 37.819737, lng: -122.478562 } + +// $ExpectType [number, number, number] +const xyz = S2.LatLngToXYZ(ll); +// [ -0.42418720312180813, -0.6663906343183068, 0.6131792064319718 ] + +// $ExpectType LatLng +S2.XYZToLatLng(xyz); +// { lat: 37.819737, lng: -122.478562 } + +// $ExpectType [number, [number, number]] +const [face, uv] = S2.XYZToFaceUV(xyz); +// [ 4, [ -0.9201497963116357, -0.6365443649365452 ] ] + +// $ExpectType [number, number, number] +S2.FaceUVToXYZ(face, uv); +// [ -0.6365443649365452, -1, 0.9201497963116357 ] + +// $ExpectType [number, number] +const st = S2.UVToST(uv); +// [ 0.030406091585901684, 0.14711766714135244 ] + +// $ExpectType [number, number] +S2.STToUV(st); +// [ -0.9201497963116357, -0.6365443649365452 ] + +// $ExpectType [number, number] +const ij = S2.STToIJ(st, 10); +// [ 31, 150 ] + +// $ExpectType [number, number] +S2.IJToST(ij, 10, [0, 0]); +// [ 0.0302734375, 0.146484375 ] + +// $ExpectType S2Cell +S2.S2Cell.FromHilbertQuadKey('4/0010023002'); +// { face: 4, ij: [ 30, 150 ], level: 10 } + +// $ExpectType S2Cell +const cell = S2.S2Cell.FromLatLng(ll, 10); +// { face: 4, ij: [ 31, 150 ], level: 10 } + +// $ExpectType S2Cell +S2.S2Cell.FromFaceIJ(face, ij, 10); +// { face: 4, ij: [ 31, 150 ], level: 10 } + +// $ExpectType string +const quadkey = cell.toHilbertQuadkey(); +// '4/0010023003' + +// $ExpectType [string, string, string, string] +S2.latLngToNeighborKeys(ll.lat, ll.lng, 10); +// $ExpectType [string, string, string, string] +S2.S2Cell.latLngToNeighborKeys(ll.lat, ll.lng, 10); +// [ '4/0010023002', '4/0010023010', '4/0010132332', '4/0010023000' ] + +// $ExpectType string +S2.facePosLevelToId(4, '0010023003', 10); +// $ExpectType string +S2.fromFacePosLevel(4, '0010023003', 10); +// $ExpectType string +S2.S2Cell.facePosLevelToId(4, '0010023003', 10); +// '9260956642827042816' + +// $ExpectType string +const id = S2.keyToId(quadkey); +// $ExpectType string +S2.toId(quadkey); +// $ExpectType string +S2.toCellId(quadkey); +// $ExpectType string +S2.fromKey(quadkey); +// $ExpectType string +S2.S2Cell.keyToId(quadkey); +// '9260956642827042816' + +// $ExpectType string +S2.idToKey(id); +// $ExpectType string +S2.toKey(id); +// $ExpectType string +S2.fromCellId(id); +// $ExpectType string +S2.fromId(id); +// $ExpectType string +S2.toHilbertQuadkey(id); +// $ExpectType string +S2.S2Cell.idToKey(id); +// $ExpectType string +S2.S2Cell.toKey(id); +// $ExpectType string +S2.S2Cell.toHilbertQuadkey(id); +// '4/0010023003' + +// $ExpectType LatLng +S2.keyToLatLng(quadkey); +// $ExpectType LatLng +S2.S2Cell.keyToLatLng(quadkey); +// { lat: 37.7878524048216, lng: -122.49200878539423 } + +// $ExpectType LatLng +S2.idToLatLng(id); +// $ExpectType LatLng +S2.S2Cell.idToLatLng(id); +// { lat: 37.7878524048216, lng: -122.49200878539423 } + +// $ExpectType string +S2.latLngToKey(ll.lat, ll.lng, 10); +// $ExpectType string +S2.latLngToQuadkey(ll.lat, ll.lng, 10); +// $ExpectType string +S2.S2Cell.latLngToKey(ll.lat, ll.lng, 10); +// '4/0010023003' + +// $ExpectType string +S2.prevKey(quadkey); +// $ExpectType string +S2.S2Cell.prevKey(quadkey); +// '4/0010023002' + +// $ExpectType string +S2.nextKey(quadkey); +// $ExpectType string +S2.S2Cell.nextKey(quadkey); +// '4/0010023010' + +// $ExpectType string +S2.stepKey(quadkey, 10); +// '4/0010023031' diff --git a/types/s2-geometry/tsconfig.json b/types/s2-geometry/tsconfig.json new file mode 100644 index 00000000000000..6ef9a67a850692 --- /dev/null +++ b/types/s2-geometry/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "module": "node16", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "s2-geometry-tests.ts" + ] +} From 596664a4aac8b7f11828cabaf019350ab2c31dda Mon Sep 17 00:00:00 2001 From: TypeScript Bot Date: Mon, 15 Dec 2025 23:18:36 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=A4=96=20dprint=20fmt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- types/s2-geometry/s2-geometry-tests.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/types/s2-geometry/s2-geometry-tests.ts b/types/s2-geometry/s2-geometry-tests.ts index 1431e1c5995137..1882a38d387b15 100644 --- a/types/s2-geometry/s2-geometry-tests.ts +++ b/types/s2-geometry/s2-geometry-tests.ts @@ -37,7 +37,7 @@ S2.IJToST(ij, 10, [0, 0]); // [ 0.0302734375, 0.146484375 ] // $ExpectType S2Cell -S2.S2Cell.FromHilbertQuadKey('4/0010023002'); +S2.S2Cell.FromHilbertQuadKey("4/0010023002"); // { face: 4, ij: [ 30, 150 ], level: 10 } // $ExpectType S2Cell @@ -59,11 +59,11 @@ S2.S2Cell.latLngToNeighborKeys(ll.lat, ll.lng, 10); // [ '4/0010023002', '4/0010023010', '4/0010132332', '4/0010023000' ] // $ExpectType string -S2.facePosLevelToId(4, '0010023003', 10); +S2.facePosLevelToId(4, "0010023003", 10); // $ExpectType string -S2.fromFacePosLevel(4, '0010023003', 10); +S2.fromFacePosLevel(4, "0010023003", 10); // $ExpectType string -S2.S2Cell.facePosLevelToId(4, '0010023003', 10); +S2.S2Cell.facePosLevelToId(4, "0010023003", 10); // '9260956642827042816' // $ExpectType string