@inoxialabs/react-native-nitro-location-geocoder 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/NitroLocationGeocoder.podspec +28 -28
  2. package/README.md +118 -78
  3. package/android/CMakeLists.txt +25 -25
  4. package/android/build.gradle +129 -129
  5. package/android/fix-prefab.gradle +44 -44
  6. package/android/gradle.properties +5 -5
  7. package/android/src/main/AndroidManifest.xml +2 -2
  8. package/android/src/main/cpp/cpp-adapter.cpp +6 -6
  9. package/android/src/main/java/com/margelo/nitro/locationgeocoder/HybridLocationGeocoder.kt +85 -57
  10. package/android/src/main/java/com/margelo/nitro/locationgeocoder/NitroLocationGeocoderPackage.kt +18 -18
  11. package/ios/Bridge.h +1 -1
  12. package/ios/HybridLocationGeocoder.swift +62 -19
  13. package/nitro.json +24 -24
  14. package/nitrogen/generated/.gitattributes +1 -1
  15. package/nitrogen/generated/android/NitroLocationGeocoder+autolinking.cmake +81 -81
  16. package/nitrogen/generated/android/NitroLocationGeocoder+autolinking.gradle +27 -27
  17. package/nitrogen/generated/android/NitroLocationGeocoderOnLoad.cpp +54 -54
  18. package/nitrogen/generated/android/NitroLocationGeocoderOnLoad.hpp +34 -34
  19. package/nitrogen/generated/android/c++/JHybridLocationGeocoderSpec.cpp +69 -69
  20. package/nitrogen/generated/android/c++/JHybridLocationGeocoderSpec.hpp +63 -63
  21. package/nitrogen/generated/android/c++/JLocationGeocoderResult.hpp +77 -77
  22. package/nitrogen/generated/android/kotlin/com/margelo/nitro/locationgeocoder/HybridLocationGeocoderSpec.kt +55 -55
  23. package/nitrogen/generated/android/kotlin/com/margelo/nitro/locationgeocoder/LocationGeocoderResult.kt +53 -53
  24. package/nitrogen/generated/android/kotlin/com/margelo/nitro/locationgeocoder/NitroLocationGeocoderOnLoad.kt +35 -35
  25. package/nitrogen/generated/ios/NitroLocationGeocoder+autolinking.rb +60 -60
  26. package/nitrogen/generated/ios/NitroLocationGeocoder-Swift-Cxx-Bridge.cpp +49 -49
  27. package/nitrogen/generated/ios/NitroLocationGeocoder-Swift-Cxx-Bridge.hpp +114 -114
  28. package/nitrogen/generated/ios/NitroLocationGeocoder-Swift-Cxx-Umbrella.hpp +48 -48
  29. package/nitrogen/generated/ios/NitroLocationGeocoderAutolinking.mm +33 -33
  30. package/nitrogen/generated/ios/NitroLocationGeocoderAutolinking.swift +26 -26
  31. package/nitrogen/generated/ios/c++/HybridLocationGeocoderSpecSwift.cpp +11 -11
  32. package/nitrogen/generated/ios/c++/HybridLocationGeocoderSpecSwift.hpp +85 -85
  33. package/nitrogen/generated/ios/swift/Func_void_LocationGeocoderResult.swift +46 -46
  34. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -46
  35. package/nitrogen/generated/ios/swift/HybridLocationGeocoderSpec.swift +55 -55
  36. package/nitrogen/generated/ios/swift/HybridLocationGeocoderSpec_cxx.swift +145 -145
  37. package/nitrogen/generated/ios/swift/LocationGeocoderResult.swift +54 -54
  38. package/nitrogen/generated/shared/c++/HybridLocationGeocoderSpec.cpp +21 -21
  39. package/nitrogen/generated/shared/c++/HybridLocationGeocoderSpec.hpp +65 -65
  40. package/nitrogen/generated/shared/c++/LocationGeocoderResult.hpp +103 -103
  41. package/package.json +65 -65
  42. package/react-native.config.js +8 -8
  43. package/src/index.ts +39 -7
  44. package/src/specs/LocationGeocoder.nitro.ts +14 -14
package/src/index.ts CHANGED
@@ -1,21 +1,53 @@
1
- import { NitroModules } from 'react-native-nitro-modules';
1
+ import { NitroModules } from 'react-native-nitro-modules';
2
2
  import type { LocationGeocoder, LocationGeocoderResult } from './specs/LocationGeocoder.nitro';
3
3
 
4
+ const KNOWN_ERROR_MESSAGES = [
5
+ 'GEOCODER_FAILED',
6
+ 'GEOCODER_TIMEOUT',
7
+ 'INVALID_COORDINATES',
8
+ 'NO_RESULTS',
9
+ 'UNAVAILABLE',
10
+ ] as const;
11
+
4
12
  const createGeocoder = (): LocationGeocoder => {
5
13
  return NitroModules.createHybridObject<LocationGeocoder>('LocationGeocoder');
6
14
  };
7
15
 
8
16
  const Geocoder = createGeocoder();
9
17
 
18
+ const isValidLatitude = (latitude: number): boolean =>
19
+ Number.isFinite(latitude) && latitude >= -90 && latitude <= 90;
20
+
21
+ const isValidLongitude = (longitude: number): boolean =>
22
+ Number.isFinite(longitude) && longitude >= -180 && longitude <= 180;
23
+
24
+ const normalizeGeocoderError = (error: unknown): Error => {
25
+ const message = error instanceof Error
26
+ ? error.message
27
+ : String((error as { message?: unknown } | null)?.message ?? error ?? '');
28
+
29
+ if (KNOWN_ERROR_MESSAGES.some((known) => message.startsWith(known))) {
30
+ return error instanceof Error ? error : new Error(message);
31
+ }
32
+
33
+ return new Error(`GEOCODER_FAILED${message ? `: ${message}` : ''}`);
34
+ };
35
+
10
36
  export const reverseGeocode = (
11
37
  latitude: number,
12
38
  longitude: number,
13
39
  locale: string,
14
40
  ): Promise<LocationGeocoderResult> => {
15
- return Geocoder.reverseGeocode(latitude, longitude, locale);
16
- };
41
+ if (!isValidLatitude(latitude) || !isValidLongitude(longitude)) {
42
+ return Promise.reject(new Error('INVALID_COORDINATES'));
43
+ }
17
44
 
18
- export { Geocoder };
19
- export type { LocationGeocoder, LocationGeocoderResult };
20
-
21
- export default Geocoder;
45
+ return Geocoder.reverseGeocode(latitude, longitude, locale).catch((error: unknown) => {
46
+ throw normalizeGeocoderError(error);
47
+ });
48
+ };
49
+
50
+ export { Geocoder };
51
+ export type { LocationGeocoder, LocationGeocoderResult };
52
+
53
+ export default Geocoder;
@@ -1,14 +1,14 @@
1
- import type { HybridObject } from 'react-native-nitro-modules';
2
-
3
- export interface LocationGeocoderResult {
4
- countryCode: string;
5
- country: string;
6
- locality: string;
7
- administrativeArea: string;
8
- subAdministrativeArea: string;
9
- subLocality: string;
10
- }
11
-
12
- export interface LocationGeocoder extends HybridObject<{ ios: 'swift'; android: 'kotlin' }> {
13
- reverseGeocode(latitude: number, longitude: number, locale: string): Promise<LocationGeocoderResult>;
14
- }
1
+ import type { HybridObject } from 'react-native-nitro-modules';
2
+
3
+ export interface LocationGeocoderResult {
4
+ countryCode: string;
5
+ country: string;
6
+ locality: string;
7
+ administrativeArea: string;
8
+ subAdministrativeArea: string;
9
+ subLocality: string;
10
+ }
11
+
12
+ export interface LocationGeocoder extends HybridObject<{ ios: 'swift'; android: 'kotlin' }> {
13
+ reverseGeocode(latitude: number, longitude: number, locale: string): Promise<LocationGeocoderResult>;
14
+ }