UNPKG

universal-geocoder

Version:

Universal geocoding abstraction server-side and client-side with multiple built-in providers

79 lines (64 loc) 2.04 kB
import { GeocodeQuery, GeocodeQueryObject } from "query"; interface GoogleMapsComponent { name: string; value: string; } export interface GoogleMapsGeocodeQueryObject extends GeocodeQueryObject { readonly countryCodes?: string[]; readonly components?: GoogleMapsComponent[]; readonly channel?: string; } export default class GoogleMapsGeocodeQuery extends GeocodeQuery { private readonly countryCodes?: string[]; private readonly components?: GoogleMapsComponent[]; private readonly channel?: string; protected constructor({ countryCodes, components, channel, ...geocodeQueryObject }: GoogleMapsGeocodeQueryObject) { super(geocodeQueryObject); if (countryCodes && countryCodes.length !== 1) { throw new Error( 'The "countryCodes" parameter must have only one country code top-level domain.' ); } this.countryCodes = countryCodes; this.components = components; this.channel = channel; } public static create( object: GoogleMapsGeocodeQueryObject ): GoogleMapsGeocodeQuery { return new this(object); } public toObject(): GoogleMapsGeocodeQueryObject { return { ...super.toObject(), countryCodes: this.countryCodes, components: this.components, channel: this.channel, }; } public withCountryCodes(countryCodes: string[]): GoogleMapsGeocodeQuery { return new GoogleMapsGeocodeQuery({ ...this.toObject(), countryCodes }); } public getCountryCodes(): undefined | string[] { return this.countryCodes; } public withComponents( components: GoogleMapsComponent[] ): GoogleMapsGeocodeQuery { return new GoogleMapsGeocodeQuery({ ...this.toObject(), components }); } public getComponents(): undefined | GoogleMapsComponent[] { return this.components; } public withChannel(channel: string): GoogleMapsGeocodeQuery { return new GoogleMapsGeocodeQuery({ ...this.toObject(), channel }); } public getChannel(): undefined | string { return this.channel; } }