UNPKG

digipinjs

Version:

A comprehensive TypeScript library for encoding and decoding Indian geographic coordinates into DIGIPIN format (Indian Postal Digital PIN system). Features CLI tools, caching, batch processing, and Express middleware for seamless integration.

68 lines (67 loc) 2.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setReverseGeocodeResolver = setReverseGeocodeResolver; exports.clearReverseGeocodeResolver = clearReverseGeocodeResolver; exports.reverseGeocode = reverseGeocode; exports.reverseGeocodeAsync = reverseGeocodeAsync; const core_1 = require("./core"); const util_1 = require("./util"); let registeredResolver; function isPromise(value) { return (!!value && typeof value === 'object' && typeof value.then === 'function'); } function setReverseGeocodeResolver(resolver) { registeredResolver = resolver; } function clearReverseGeocodeResolver() { registeredResolver = undefined; } function buildFallbackResult(pin) { const coords = (0, core_1.getLatLngFromDigiPin)(pin); return { pin, latitude: coords.latitude, longitude: coords.longitude, }; } function reverseGeocode(pin, options = {}) { const normalized = (0, util_1.normalizeDigiPin)(pin); const resolver = options.resolver ?? registeredResolver; const fallbackToDecode = options.fallbackToDecode ?? true; if (resolver) { const result = resolver(normalized); if (isPromise(result)) { throw new TypeError('Reverse geocode resolver returned a Promise. Use reverseGeocodeAsync instead.'); } if (result) { return result; } } if (!fallbackToDecode) { throw new Error('No reverse geocode result available for the provided DIGIPIN'); } return buildFallbackResult(normalized); } async function reverseGeocodeAsync(pin, options = {}) { const normalized = (0, util_1.normalizeDigiPin)(pin); const resolver = options.resolver ?? registeredResolver; const fallbackToDecode = options.fallbackToDecode ?? true; if (resolver) { const result = resolver(normalized); if (isPromise(result)) { const resolved = await result; if (resolved) { return resolved; } } else if (result) { return result; } } if (!fallbackToDecode) { throw new Error('No reverse geocode result available for the provided DIGIPIN'); } return buildFallbackResult(normalized); }