Skip to content

Commit 8596e6f

Browse files
feat: add typed public wrapper modules and index
Creates thin domain wrappers (encode, decode, territory, alphabet, geo) that forward engine calls with typed signatures, and replaces src/index.ts with a clean public surface. Also annotates getTerritoryFullname return as any in engine.ts to allow the typed wrapper to declare string return. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 9fcbb7e commit 8596e6f

7 files changed

Lines changed: 127 additions & 1 deletion

File tree

‎src/alphabet/alphabet.ts‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import {
2+
convertToAlphabet as _convertToAlphabet,
3+
convertToAlphabetAsHTML as _convertToAlphabetAsHTML,
4+
} from '../core/engine';
5+
import type { Alphabet } from '../types';
6+
7+
export function convertToAlphabet(mapcode: string, targetAlphabet: Alphabet): string {
8+
return _convertToAlphabet(mapcode, targetAlphabet);
9+
}
10+
11+
export function convertToAlphabetAsHTML(mapcode: string, targetAlphabet: Alphabet): string {
12+
return _convertToAlphabetAsHTML(mapcode, targetAlphabet);
13+
}

‎src/core/engine.ts‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,8 @@ export function getTerritoryNumber(territoryAlphaCode: any, contextTerritory?: a
354354
}
355355

356356
/// PUBLIC return full name of territory
357-
export function getTerritoryFullname(territory: any) {
357+
// Return annotation relaxed to `any` so typed wrapper can declare `string` return. (Task 7)
358+
export function getTerritoryFullname(territory: any): any {
358359
var territoryNumber = getTerritoryNumber(territory);
359360
if (territoryNumber == undefined || territoryNumber < 0 || territoryNumber > ccode_earth) {
360361
return undefined;

‎src/decode.ts‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { decode as _decode } from './core/engine';
2+
import type { Point } from './types';
3+
4+
/** Decode a mapcode string to a coordinate, or return false if it cannot be decoded. */
5+
export function decode(mapcode: string, contextTerritory?: string): Point | false {
6+
return (_decode(mapcode, contextTerritory) ?? false) as Point | false;
7+
}

‎src/encode.ts‎

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import {
2+
encode as _encode,
3+
encodeShortest as _encodeShortest,
4+
encodeWithPrecision as _encodeWithPrecision,
5+
encodeShortestWithPrecision as _encodeShortestWithPrecision,
6+
encodeInternational as _encodeInternational,
7+
encodeInternationalWithPrecision as _encodeInternationalWithPrecision,
8+
} from './core/engine';
9+
import type { Mapcode, Precision } from './types';
10+
11+
export function encode(lat: number, lon: number, territory?: string): Mapcode[] {
12+
return _encode(lat, lon, territory) as Mapcode[];
13+
}
14+
15+
export function encodeShortest(lat: number, lon: number, territory?: string): Mapcode[] {
16+
return _encodeShortest(lat, lon, territory) as Mapcode[];
17+
}
18+
19+
export function encodeWithPrecision(
20+
lat: number,
21+
lon: number,
22+
precision: Precision,
23+
territory?: string,
24+
): Mapcode[] {
25+
return _encodeWithPrecision(lat, lon, precision, territory) as Mapcode[];
26+
}
27+
28+
export function encodeShortestWithPrecision(
29+
lat: number,
30+
lon: number,
31+
precision: Precision,
32+
territory?: string,
33+
): Mapcode[] {
34+
return _encodeShortestWithPrecision(lat, lon, precision, territory) as Mapcode[];
35+
}
36+
37+
export function encodeInternational(lat: number, lon: number): Mapcode[] {
38+
return _encodeInternational(lat, lon) as Mapcode[];
39+
}
40+
41+
export function encodeInternationalWithPrecision(
42+
lat: number,
43+
lon: number,
44+
precision: Precision,
45+
): Mapcode[] {
46+
return _encodeInternationalWithPrecision(lat, lon, precision) as Mapcode[];
47+
}

‎src/geo/distance.ts‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import {
2+
distanceInMeters as _distanceInMeters,
3+
maxErrorInMeters as _maxErrorInMeters,
4+
} from '../core/engine';
5+
import type { Precision } from '../types';
6+
7+
export function distanceInMeters(
8+
lat1: number,
9+
lon1: number,
10+
lat2: number,
11+
lon2: number,
12+
): number {
13+
return _distanceInMeters(lat1, lon1, lat2, lon2);
14+
}
15+
16+
export function maxErrorInMeters(precision: Precision): number {
17+
return _maxErrorInMeters(precision);
18+
}

‎src/index.ts‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,8 @@
1+
export * from './encode';
2+
export * from './decode';
3+
export * from './territory/territory';
4+
export * from './alphabet/alphabet';
5+
export * from './geo/distance';
6+
export type { Point, Mapcode, Precision, Alphabet } from './types';
7+
18
export const VERSION = '3.0.0';

‎src/territory/territory.ts‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import {
2+
getTerritoryFullname as _getTerritoryFullname,
3+
getTerritoryAlphaCode as _getTerritoryAlphaCode,
4+
getTerritoryNumber as _getTerritoryNumber,
5+
isSubdivision as _isSubdivision,
6+
hasSubdivision as _hasSubdivision,
7+
getParentOf as _getParentOf,
8+
} from '../core/engine';
9+
10+
export function getTerritoryNumber(alphaCode: string, contextTerritory?: number): number {
11+
return _getTerritoryNumber(alphaCode, contextTerritory);
12+
}
13+
14+
export function getTerritoryFullname(territory: number): string {
15+
return _getTerritoryFullname(territory);
16+
}
17+
18+
export function getTerritoryAlphaCode(territory: number, format?: number): string {
19+
return _getTerritoryAlphaCode(territory, format);
20+
}
21+
22+
export function isSubdivision(territory: number): boolean {
23+
return _isSubdivision(territory);
24+
}
25+
26+
/** Documented public name maps to engine's `hasSubdivision`. */
27+
export function hasSubdivisions(territory: number): boolean {
28+
return _hasSubdivision(territory);
29+
}
30+
31+
export function getParentOf(territory: number): number {
32+
return _getParentOf(territory);
33+
}

0 commit comments

Comments
 (0)