@kingstinct/react-native-healthkit 13.4.0 → 14.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 (189) hide show
  1. package/ReactNativeHealthkit.podspec +1 -0
  2. package/app.plugin.ts +40 -2
  3. package/ios/BackgroundDeliveryManager.swift +196 -0
  4. package/ios/CategoryTypeModule.swift +1 -1
  5. package/ios/CoreModule.swift +24 -0
  6. package/ios/CorrelationTypeModule.swift +2 -35
  7. package/ios/ElectrocardiogramModule.swift +2 -34
  8. package/ios/HeartbeatSeriesModule.swift +2 -34
  9. package/ios/MedicationModule.swift +3 -35
  10. package/ios/PredicateHelpers.swift +2 -2
  11. package/ios/QuantityTypeModule.swift +11 -11
  12. package/ios/Serializers.swift +58 -90
  13. package/ios/StateOfMindModule.swift +2 -34
  14. package/ios/WorkoutProxy.swift +3 -149
  15. package/ios/generated/HealthkitGenerated.swift +52 -0
  16. package/lib/commonjs/generated/healthkit.generated.js +745 -0
  17. package/lib/commonjs/healthkit.ios.js +51 -17
  18. package/lib/commonjs/healthkit.js +120 -34
  19. package/lib/commonjs/specs/QuantityTypeModule.nitro.js +1 -0
  20. package/lib/commonjs/type-tests/generated-typing.js +2 -0
  21. package/lib/commonjs/types/CategoryType.js +19 -99
  22. package/lib/commonjs/types/Medication.js +2 -0
  23. package/lib/commonjs/types/MetadataEnums.js +17 -0
  24. package/lib/commonjs/types/QuantityType.js +4 -15
  25. package/lib/commonjs/types/WeatherCondition.js +2 -32
  26. package/lib/commonjs/types/Workouts.js +3 -98
  27. package/lib/commonjs/types/index.js +2 -0
  28. package/lib/module/generated/healthkit.generated.js +742 -0
  29. package/lib/module/healthkit.ios.js +49 -15
  30. package/lib/module/healthkit.js +94 -20
  31. package/lib/module/specs/QuantityTypeModule.nitro.js +1 -0
  32. package/lib/module/type-tests/generated-typing.js +1 -0
  33. package/lib/module/types/CategoryType.js +2 -98
  34. package/lib/module/types/Medication.js +1 -0
  35. package/lib/module/types/MetadataEnums.js +1 -0
  36. package/lib/module/types/QuantityType.js +2 -14
  37. package/lib/module/types/WeatherCondition.js +1 -32
  38. package/lib/module/types/Workouts.js +2 -98
  39. package/lib/module/types/index.js +2 -0
  40. package/lib/typescript/generated/healthkit.generated.d.ts +1006 -0
  41. package/lib/typescript/healthkit.d.ts +39 -36
  42. package/lib/typescript/healthkit.ios.d.ts +64 -53
  43. package/lib/typescript/hooks/useMostRecentQuantitySample.d.ts +3 -2
  44. package/lib/typescript/hooks/useMostRecentWorkout.d.ts +2 -2
  45. package/lib/typescript/hooks/useQuantitySampleById.d.ts +5 -4
  46. package/lib/typescript/hooks/useStatisticsForQuantity.d.ts +2 -2
  47. package/lib/typescript/hooks/useSubscribeToQuantitySamples.d.ts +1 -1
  48. package/lib/typescript/modules.d.ts +2 -2
  49. package/lib/typescript/specs/CategoryTypeModule.nitro.d.ts +3 -3
  50. package/lib/typescript/specs/CoreModule.nitro.d.ts +15 -0
  51. package/lib/typescript/specs/QuantityTypeModule.nitro.d.ts +20 -9
  52. package/lib/typescript/type-tests/generated-typing.d.ts +1 -0
  53. package/lib/typescript/types/CategoryType.d.ts +10 -104
  54. package/lib/typescript/types/CategoryTypeIdentifier.d.ts +1 -61
  55. package/lib/typescript/types/CorrelationType.d.ts +8 -2
  56. package/lib/typescript/types/ElectrocardiogramSample.d.ts +8 -1
  57. package/lib/typescript/types/HeartbeatSeries.d.ts +8 -1
  58. package/lib/typescript/types/InterfaceVerification.d.ts +14 -1
  59. package/lib/typescript/types/Medication.d.ts +10 -0
  60. package/lib/typescript/types/MetadataEnums.d.ts +1 -0
  61. package/lib/typescript/types/QuantitySample.d.ts +9 -1
  62. package/lib/typescript/types/QuantityType.d.ts +14 -18
  63. package/lib/typescript/types/QuantityTypeIdentifier.d.ts +1 -671
  64. package/lib/typescript/types/QueryOptions.d.ts +8 -4
  65. package/lib/typescript/types/Shared.d.ts +12 -41
  66. package/lib/typescript/types/StateOfMind.d.ts +8 -1
  67. package/lib/typescript/types/Subscriptions.d.ts +11 -11
  68. package/lib/typescript/types/WeatherCondition.d.ts +1 -30
  69. package/lib/typescript/types/Workouts.d.ts +18 -104
  70. package/lib/typescript/types/index.d.ts +2 -0
  71. package/lib/typescript/utils/getMostRecentQuantitySample.d.ts +2 -1
  72. package/lib/typescript/utils/getMostRecentWorkout.d.ts +2 -1
  73. package/lib/typescript/utils/getPreferredUnit.d.ts +2 -1
  74. package/lib/typescript/utils/getQuantitySampleById.d.ts +2 -1
  75. package/lib/typescript/utils/subscribeToQuantitySamples.d.ts +1 -1
  76. package/nitrogen/generated/ios/ReactNativeHealthkit-Swift-Cxx-Bridge.hpp +55 -109
  77. package/nitrogen/generated/ios/ReactNativeHealthkit-Swift-Cxx-Umbrella.hpp +12 -18
  78. package/nitrogen/generated/ios/c++/HybridCategoryTypeModuleSpecSwift.hpp +5 -14
  79. package/nitrogen/generated/ios/c++/HybridCoreModuleSpecSwift.hpp +18 -2
  80. package/nitrogen/generated/ios/c++/HybridCorrelationTypeModuleSpecSwift.hpp +1 -13
  81. package/nitrogen/generated/ios/c++/HybridElectrocardiogramModuleSpecSwift.hpp +1 -13
  82. package/nitrogen/generated/ios/c++/HybridHeartbeatSeriesModuleSpecSwift.hpp +2 -14
  83. package/nitrogen/generated/ios/c++/HybridMedicationModuleSpecSwift.hpp +1 -13
  84. package/nitrogen/generated/ios/c++/HybridQuantityTypeModuleSpecSwift.hpp +19 -28
  85. package/nitrogen/generated/ios/c++/HybridStateOfMindModuleSpecSwift.hpp +2 -14
  86. package/nitrogen/generated/ios/c++/HybridWorkoutProxySpecSwift.hpp +2 -115
  87. package/nitrogen/generated/ios/swift/CategorySample.swift +4 -329
  88. package/nitrogen/generated/ios/swift/CategoryTypeIdentifier.swift +112 -108
  89. package/nitrogen/generated/ios/swift/CategoryTypeIdentifierWriteable.swift +292 -0
  90. package/nitrogen/generated/ios/swift/CorrelationSample.swift +4 -347
  91. package/nitrogen/generated/ios/swift/ElectrocardiogramSample.swift +4 -329
  92. package/nitrogen/generated/ios/swift/FilterForWorkouts.swift +30 -30
  93. package/nitrogen/generated/ios/swift/FilterForWorkoutsBase.swift +30 -30
  94. package/nitrogen/generated/ios/swift/GeneralForm.swift +4 -4
  95. package/nitrogen/generated/ios/swift/HeartbeatSeriesSample.swift +4 -329
  96. package/nitrogen/generated/ios/swift/HybridCategoryTypeModuleSpec.swift +1 -1
  97. package/nitrogen/generated/ios/swift/HybridCategoryTypeModuleSpec_cxx.swift +1 -1
  98. package/nitrogen/generated/ios/swift/HybridCoreModuleSpec.swift +2 -0
  99. package/nitrogen/generated/ios/swift/HybridCoreModuleSpec_cxx.swift +38 -0
  100. package/nitrogen/generated/ios/swift/HybridQuantityTypeModuleSpec.swift +6 -6
  101. package/nitrogen/generated/ios/swift/HybridQuantityTypeModuleSpec_cxx.swift +6 -6
  102. package/nitrogen/generated/ios/swift/HybridWorkoutProxySpec.swift +1 -27
  103. package/nitrogen/generated/ios/swift/HybridWorkoutProxySpec_cxx.swift +2 -340
  104. package/nitrogen/generated/ios/swift/MedicationDoseEvent.swift +4 -329
  105. package/nitrogen/generated/ios/swift/ObjectTypeIdentifier.swift +492 -492
  106. package/nitrogen/generated/ios/swift/QuantitySample.swift +4 -329
  107. package/nitrogen/generated/ios/swift/QuantityTypeIdentifier.swift +380 -384
  108. package/nitrogen/generated/ios/swift/QuantityTypeIdentifierWriteable.swift +372 -376
  109. package/nitrogen/generated/ios/swift/{QueryOptionsWithAnchorAndUnit.swift → QueryOptionsWithAnchorAndStringUnit.swift} +5 -5
  110. package/nitrogen/generated/ios/swift/{QueryOptionsWithSortOrderAndUnit.swift → QueryOptionsWithSortOrderAndStringUnit.swift} +5 -5
  111. package/nitrogen/generated/ios/swift/QueryStatisticsResponseFromSingleSource.swift +37 -37
  112. package/nitrogen/generated/ios/swift/SampleTypeIdentifier.swift +492 -492
  113. package/nitrogen/generated/ios/swift/SampleTypeIdentifierWriteable.swift +482 -486
  114. package/nitrogen/generated/ios/swift/StateOfMindSample.swift +4 -329
  115. package/nitrogen/generated/ios/swift/{StatisticsQueryOptions.swift → StatisticsQueryOptionsWithStringUnit.swift} +5 -5
  116. package/nitrogen/generated/ios/swift/WorkoutSample.swift +4 -402
  117. package/nitrogen/generated/shared/c++/CategorySample.hpp +8 -100
  118. package/nitrogen/generated/shared/c++/CategoryTypeIdentifier.hpp +153 -149
  119. package/nitrogen/generated/shared/c++/CategoryTypeIdentifierWriteable.hpp +328 -0
  120. package/nitrogen/generated/shared/c++/CorrelationSample.hpp +9 -105
  121. package/nitrogen/generated/shared/c++/ElectrocardiogramSample.hpp +7 -99
  122. package/nitrogen/generated/shared/c++/FilterForWorkouts.hpp +13 -13
  123. package/nitrogen/generated/shared/c++/FilterForWorkoutsBase.hpp +13 -13
  124. package/nitrogen/generated/shared/c++/GeneralForm.hpp +7 -7
  125. package/nitrogen/generated/shared/c++/HeartbeatSeriesSample.hpp +8 -100
  126. package/nitrogen/generated/shared/c++/HybridCategoryTypeModuleSpec.hpp +5 -2
  127. package/nitrogen/generated/shared/c++/HybridCoreModuleSpec.cpp +2 -0
  128. package/nitrogen/generated/shared/c++/HybridCoreModuleSpec.hpp +4 -2
  129. package/nitrogen/generated/shared/c++/HybridQuantityTypeModuleSpec.hpp +15 -15
  130. package/nitrogen/generated/shared/c++/HybridWorkoutProxySpec.cpp +1 -27
  131. package/nitrogen/generated/shared/c++/HybridWorkoutProxySpec.hpp +2 -37
  132. package/nitrogen/generated/shared/c++/MedicationDoseEvent.hpp +7 -99
  133. package/nitrogen/generated/shared/c++/ObjectTypeIdentifier.hpp +565 -565
  134. package/nitrogen/generated/shared/c++/QuantitySample.hpp +8 -100
  135. package/nitrogen/generated/shared/c++/QuantityTypeIdentifier.hpp +407 -411
  136. package/nitrogen/generated/shared/c++/QuantityTypeIdentifierWriteable.hpp +398 -402
  137. package/nitrogen/generated/shared/c++/{QueryOptionsWithAnchorAndUnit.hpp → QueryOptionsWithAnchorAndStringUnit.hpp} +11 -11
  138. package/nitrogen/generated/shared/c++/{QueryOptionsWithSortOrderAndUnit.hpp → QueryOptionsWithSortOrderAndStringUnit.hpp} +11 -11
  139. package/nitrogen/generated/shared/c++/QueryStatisticsResponseFromSingleSource.hpp +12 -12
  140. package/nitrogen/generated/shared/c++/SampleTypeIdentifier.hpp +559 -559
  141. package/nitrogen/generated/shared/c++/SampleTypeIdentifierWriteable.hpp +541 -545
  142. package/nitrogen/generated/shared/c++/StateOfMindSample.hpp +8 -100
  143. package/nitrogen/generated/shared/c++/{StatisticsQueryOptions.hpp → StatisticsQueryOptionsWithStringUnit.hpp} +11 -11
  144. package/nitrogen/generated/shared/c++/WorkoutSample.hpp +7 -120
  145. package/package.json +5 -2
  146. package/src/generated/healthkit-schema.json +3680 -0
  147. package/src/generated/healthkit.generated.ts +1307 -0
  148. package/src/healthkit.ios.ts +225 -19
  149. package/src/healthkit.ts +181 -55
  150. package/src/hooks/useMostRecentQuantitySample.ts +6 -5
  151. package/src/hooks/useMostRecentWorkout.ts +2 -2
  152. package/src/hooks/useQuantitySampleById.ts +6 -5
  153. package/src/hooks/useStatisticsForQuantity.ts +2 -1
  154. package/src/hooks/useSubscribeToQuantitySamples.ts +1 -1
  155. package/src/modules.ts +7 -2
  156. package/src/specs/CategoryTypeModule.nitro.ts +8 -5
  157. package/src/specs/CoreModule.nitro.ts +20 -0
  158. package/src/specs/QuantityTypeModule.nitro.ts +81 -7
  159. package/src/test-setup.ts +2 -0
  160. package/src/type-tests/generated-typing.ts +133 -0
  161. package/src/types/CategoryType.ts +52 -148
  162. package/src/types/CategoryTypeIdentifier.ts +5 -134
  163. package/src/types/CorrelationType.ts +13 -3
  164. package/src/types/ElectrocardiogramSample.ts +13 -1
  165. package/src/types/HeartbeatSeries.ts +13 -1
  166. package/src/types/InterfaceVerification.ts +38 -1
  167. package/src/types/Medication.ts +19 -0
  168. package/src/types/MetadataEnums.ts +15 -0
  169. package/src/types/QuantitySample.ts +14 -2
  170. package/src/types/QuantityType.ts +22 -122
  171. package/src/types/QuantityTypeIdentifier.ts +5 -772
  172. package/src/types/QueryOptions.ts +11 -4
  173. package/src/types/Shared.ts +22 -49
  174. package/src/types/StateOfMind.ts +13 -1
  175. package/src/types/Subscriptions.ts +19 -13
  176. package/src/types/WeatherCondition.ts +1 -31
  177. package/src/types/Workouts.ts +44 -108
  178. package/src/types/index.ts +2 -0
  179. package/src/utils/getMostRecentQuantitySample.ts +4 -3
  180. package/src/utils/getMostRecentWorkout.ts +5 -2
  181. package/src/utils/getPreferredUnit.ts +5 -4
  182. package/src/utils/getQuantitySampleById.ts +4 -3
  183. package/src/utils/subscribeToQuantitySamples.ts +5 -3
  184. package/nitrogen/generated/ios/swift/HeartRateMotionContext.swift +0 -44
  185. package/nitrogen/generated/ios/swift/InsulinDeliveryReason.swift +0 -40
  186. package/nitrogen/generated/ios/swift/WeatherCondition.swift +0 -144
  187. package/nitrogen/generated/shared/c++/HeartRateMotionContext.hpp +0 -67
  188. package/nitrogen/generated/shared/c++/InsulinDeliveryReason.hpp +0 -62
  189. package/nitrogen/generated/shared/c++/WeatherCondition.hpp +0 -88
@@ -3,6 +3,7 @@ import { QuantityTypes } from '../modules'
3
3
  import type {
4
4
  QueryStatisticsResponse,
5
5
  StatisticsOptions,
6
+ UnitForIdentifier,
6
7
  } from '../types/QuantityType'
7
8
  import type { QuantityTypeIdentifier } from '../types/QuantityTypeIdentifier'
8
9
  import useSubscribeToChanges from './useSubscribeToChanges'
@@ -14,7 +15,7 @@ export function useStatisticsForQuantity<
14
15
  options: readonly StatisticsOptions[],
15
16
  from: Date,
16
17
  to?: Date,
17
- unit?: string,
18
+ unit?: UnitForIdentifier<TIdentifier>,
18
19
  ) {
19
20
  const [result, setResult] = useState<QueryStatisticsResponse | null>(null)
20
21
 
@@ -9,7 +9,7 @@ export function useSubscribeToQuantitySamples<
9
9
  TIdentifier extends QuantityTypeIdentifier,
10
10
  >(
11
11
  identifier: TIdentifier,
12
- onChange: (args: OnQuantitySamplesCallback) => void,
12
+ onChange: (args: OnQuantitySamplesCallback<TIdentifier>) => void,
13
13
  ): void {
14
14
  const onChangeRef = useRef(onChange)
15
15
 
package/src/modules.ts CHANGED
@@ -9,7 +9,10 @@ import type { CorrelationTypeModule } from './specs/CorrelationTypeModule.nitro'
9
9
  import type { ElectrocardiogramModule } from './specs/ElectrocardiogramModule.nitro'
10
10
  import type { HeartbeatSeriesModule } from './specs/HeartbeatSeriesModule.nitro'
11
11
  import type { MedicationModule } from './specs/MedicationModule.nitro'
12
- import type { QuantityTypeModule } from './specs/QuantityTypeModule.nitro'
12
+ import type {
13
+ QuantityTypeModule,
14
+ QuantityTypeModuleTyped,
15
+ } from './specs/QuantityTypeModule.nitro'
13
16
  import type { StateOfMindModule } from './specs/StateOfMindModule.nitro'
14
17
  import type { WorkoutsModule } from './specs/WorkoutsModule.nitro'
15
18
 
@@ -27,7 +30,9 @@ export const Characteristics =
27
30
  )
28
31
 
29
32
  export const QuantityTypes =
30
- NitroModules.createHybridObject<QuantityTypeModule>('QuantityTypeModule')
33
+ NitroModules.createHybridObject<QuantityTypeModule>(
34
+ 'QuantityTypeModule',
35
+ ) as QuantityTypeModuleTyped
31
36
 
32
37
  export const CategoryTypes =
33
38
  NitroModules.createHybridObject<CategoryTypeModule>(
@@ -8,7 +8,10 @@ import type {
8
8
  CategoryValueForIdentifier,
9
9
  MetadataForCategoryIdentifier,
10
10
  } from '../types/CategoryType'
11
- import type { CategoryTypeIdentifier } from '../types/CategoryTypeIdentifier'
11
+ import type {
12
+ CategoryTypeIdentifier,
13
+ CategoryTypeIdentifierWriteable,
14
+ } from '../types/CategoryTypeIdentifier'
12
15
  import type { InterfaceAssertion } from '../types/InterfaceVerification'
13
16
  import type {
14
17
  QueryOptionsWithAnchor,
@@ -17,7 +20,7 @@ import type {
17
20
 
18
21
  export interface CategoryTypeModule extends HybridObject<{ ios: 'swift' }> {
19
22
  saveCategorySample(
20
- identifier: CategoryTypeIdentifier,
23
+ identifier: CategoryTypeIdentifierWriteable,
21
24
  value: CategoryValueForIdentifier,
22
25
  startDate: Date,
23
26
  endDate: Date,
@@ -44,13 +47,13 @@ const _interfaceVerification: InterfaceAssertion<
44
47
  > = true
45
48
 
46
49
  export interface CategoryTypeModuleTyped {
47
- saveCategorySample<T extends CategoryTypeIdentifier>(
50
+ saveCategorySample<T extends CategoryTypeIdentifierWriteable>(
48
51
  identifier: T,
49
- value: CategoryValueForIdentifier,
52
+ value: CategoryValueForIdentifier<T>,
50
53
  startDate: Date,
51
54
  endDate: Date,
52
55
  metadata?: MetadataForCategoryIdentifier<T>,
53
- ): Promise<CategorySample | undefined>
56
+ ): Promise<CategorySampleTyped<T> | undefined>
54
57
 
55
58
  queryCategorySamples<T extends CategoryTypeIdentifier>(
56
59
  identifier: T,
@@ -40,6 +40,26 @@ export interface CoreModule extends HybridObject<{ ios: 'swift' }> {
40
40
  */
41
41
  disableAllBackgroundDelivery(): Promise<boolean>
42
42
 
43
+ /**
44
+ * Configure background delivery types that will be registered natively in
45
+ * AppDelegate.didFinishLaunchingWithOptions — surviving app termination.
46
+ * Types and frequency are persisted to UserDefaults so they're available
47
+ * before the JS bridge boots on subsequent cold launches.
48
+ *
49
+ * Requires the Expo config plugin with `background: true` (default) or
50
+ * manual AppDelegate setup: `BackgroundDeliveryManager.shared.setupBackgroundObservers()`
51
+ */
52
+ configureBackgroundTypes(
53
+ typeIdentifiers: string[],
54
+ updateFrequency: UpdateFrequency,
55
+ ): Promise<boolean>
56
+
57
+ /**
58
+ * Clear persisted background delivery configuration and stop all observer queries.
59
+ * After calling this, the app will no longer register observers on cold launch.
60
+ */
61
+ clearBackgroundTypes(): Promise<boolean>
62
+
43
63
  /**
44
64
  * @see {@link https://developer.apple.com/documentation/healthkit/hkhealthstore/1614180-ishealthdataavailable Apple Docs }
45
65
  */
@@ -1,20 +1,30 @@
1
1
  import type { AnyMap, HybridObject } from 'react-native-nitro-modules'
2
- import type { QuantitySample } from '../types/QuantitySample'
2
+ import type { InterfaceAssertion } from '../types/InterfaceVerification'
3
+ import type {
4
+ MetadataForQuantityIdentifier,
5
+ QuantitySample,
6
+ QuantitySampleTyped,
7
+ } from '../types/QuantitySample'
3
8
  import type {
4
9
  AggregationStyle,
5
10
  IntervalComponents,
6
11
  QuantitySamplesWithAnchorResponse,
12
+ QuantitySamplesWithAnchorResponseTyped,
7
13
  QueryStatisticsResponse,
8
14
  QueryStatisticsResponseFromSingleSource,
9
15
  StatisticsOptions,
10
16
  StatisticsQueryOptions,
17
+ StatisticsQueryOptionsWithStringUnit,
18
+ UnitForIdentifier,
11
19
  } from '../types/QuantityType'
12
20
  import type {
13
21
  QuantityTypeIdentifier,
14
22
  QuantityTypeIdentifierWriteable,
15
23
  } from '../types/QuantityTypeIdentifier'
16
24
  import type {
25
+ QueryOptionsWithAnchorAndStringUnit,
17
26
  QueryOptionsWithAnchorAndUnit,
27
+ QueryOptionsWithSortOrderAndStringUnit,
18
28
  QueryOptionsWithSortOrderAndUnit,
19
29
  } from '../types/QueryOptions'
20
30
 
@@ -37,13 +47,13 @@ export interface QuantityTypeModule extends HybridObject<{ ios: 'swift' }> {
37
47
 
38
48
  queryQuantitySamples(
39
49
  identifier: QuantityTypeIdentifier,
40
- options: QueryOptionsWithSortOrderAndUnit,
50
+ options: QueryOptionsWithSortOrderAndStringUnit,
41
51
  ): Promise<readonly QuantitySample[]>
42
52
 
43
53
  queryStatisticsForQuantity(
44
54
  identifier: QuantityTypeIdentifier,
45
55
  statistics: readonly StatisticsOptions[],
46
- options?: StatisticsQueryOptions,
56
+ options?: StatisticsQueryOptionsWithStringUnit,
47
57
  ): Promise<QueryStatisticsResponse>
48
58
 
49
59
  queryStatisticsCollectionForQuantity(
@@ -51,13 +61,13 @@ export interface QuantityTypeModule extends HybridObject<{ ios: 'swift' }> {
51
61
  statistics: readonly StatisticsOptions[],
52
62
  anchorDate: Date,
53
63
  intervalComponents: IntervalComponents,
54
- options?: StatisticsQueryOptions,
64
+ options?: StatisticsQueryOptionsWithStringUnit,
55
65
  ): Promise<readonly QueryStatisticsResponse[]>
56
66
 
57
67
  queryStatisticsForQuantitySeparateBySource(
58
68
  identifier: QuantityTypeIdentifier,
59
69
  statistics: readonly StatisticsOptions[],
60
- options?: StatisticsQueryOptions,
70
+ options?: StatisticsQueryOptionsWithStringUnit,
61
71
  ): Promise<QueryStatisticsResponseFromSingleSource[]>
62
72
 
63
73
  queryStatisticsCollectionForQuantitySeparateBySource(
@@ -65,11 +75,75 @@ export interface QuantityTypeModule extends HybridObject<{ ios: 'swift' }> {
65
75
  statistics: readonly StatisticsOptions[],
66
76
  anchorDate: Date,
67
77
  intervalComponents: IntervalComponents,
68
- options?: StatisticsQueryOptions,
78
+ options?: StatisticsQueryOptionsWithStringUnit,
69
79
  ): Promise<readonly QueryStatisticsResponseFromSingleSource[]>
70
80
 
71
81
  queryQuantitySamplesWithAnchor(
72
82
  identifier: QuantityTypeIdentifier,
73
- options: QueryOptionsWithAnchorAndUnit,
83
+ options: QueryOptionsWithAnchorAndStringUnit,
74
84
  ): Promise<QuantitySamplesWithAnchorResponse>
75
85
  }
86
+
87
+ const _interfaceVerification: InterfaceAssertion<
88
+ QuantityTypeModule,
89
+ QuantityTypeModuleTyped,
90
+ keyof HybridObject<{ ios: 'swift' }>
91
+ > = true
92
+
93
+ export interface QuantityTypeModuleTyped {
94
+ isQuantityCompatibleWithUnit<T extends QuantityTypeIdentifier>(
95
+ identifier: T,
96
+ unit: UnitForIdentifier<T>,
97
+ ): boolean
98
+
99
+ aggregationStyle(identifier: QuantityTypeIdentifier): AggregationStyle
100
+
101
+ saveQuantitySample<T extends QuantityTypeIdentifierWriteable>(
102
+ identifier: T,
103
+ unit: UnitForIdentifier<T>,
104
+ value: number,
105
+ start: Date,
106
+ end: Date,
107
+ metadata?: MetadataForQuantityIdentifier<T>,
108
+ ): Promise<QuantitySampleTyped<T> | undefined>
109
+
110
+ queryQuantitySamples<T extends QuantityTypeIdentifier>(
111
+ identifier: T,
112
+ options: QueryOptionsWithSortOrderAndUnit<UnitForIdentifier<T>>,
113
+ ): Promise<readonly QuantitySampleTyped<T>[]>
114
+
115
+ queryStatisticsForQuantity<T extends QuantityTypeIdentifier>(
116
+ identifier: T,
117
+ statistics: readonly StatisticsOptions[],
118
+ options?: StatisticsQueryOptions<UnitForIdentifier<T>>,
119
+ ): Promise<QueryStatisticsResponse>
120
+
121
+ queryStatisticsCollectionForQuantity<T extends QuantityTypeIdentifier>(
122
+ identifier: T,
123
+ statistics: readonly StatisticsOptions[],
124
+ anchorDate: Date,
125
+ intervalComponents: IntervalComponents,
126
+ options?: StatisticsQueryOptions<UnitForIdentifier<T>>,
127
+ ): Promise<readonly QueryStatisticsResponse[]>
128
+
129
+ queryStatisticsForQuantitySeparateBySource<T extends QuantityTypeIdentifier>(
130
+ identifier: T,
131
+ statistics: readonly StatisticsOptions[],
132
+ options?: StatisticsQueryOptions<UnitForIdentifier<T>>,
133
+ ): Promise<QueryStatisticsResponseFromSingleSource[]>
134
+
135
+ queryStatisticsCollectionForQuantitySeparateBySource<
136
+ T extends QuantityTypeIdentifier,
137
+ >(
138
+ identifier: T,
139
+ statistics: readonly StatisticsOptions[],
140
+ anchorDate: Date,
141
+ intervalComponents: IntervalComponents,
142
+ options?: StatisticsQueryOptions<UnitForIdentifier<T>>,
143
+ ): Promise<readonly QueryStatisticsResponseFromSingleSource[]>
144
+
145
+ queryQuantitySamplesWithAnchor<T extends QuantityTypeIdentifier>(
146
+ identifier: T,
147
+ options: QueryOptionsWithAnchorAndUnit<UnitForIdentifier<T>>,
148
+ ): Promise<QuantitySamplesWithAnchorResponseTyped<T>>
149
+ }
package/src/test-setup.ts CHANGED
@@ -14,6 +14,8 @@ const mockModule = {
14
14
  disableAllBackgroundDelivery: jest.fn(),
15
15
  disableBackgroundDelivery: jest.fn(),
16
16
  enableBackgroundDelivery: jest.fn(),
17
+ configureBackgroundTypes: jest.fn(),
18
+ clearBackgroundTypes: jest.fn(),
17
19
  queryCategorySamplesWithAnchor: jest.fn(),
18
20
  queryQuantitySamplesWithAnchor: jest.fn(),
19
21
  getBiologicalSex: jest.fn(),
@@ -0,0 +1,133 @@
1
+ import type {
2
+ BloodGlucoseUnit,
3
+ CategorySampleTyped,
4
+ CategoryTypeIdentifier,
5
+ CategoryTypeIdentifierWriteable,
6
+ CategoryValueForIdentifier,
7
+ CategoryValueSleepAnalysis,
8
+ CorrelationSampleTyped,
9
+ HeartRateMotionContext,
10
+ Quantity,
11
+ QuantitySampleTyped,
12
+ QueryOptionsWithAnchorAndUnit,
13
+ QueryOptionsWithSortOrderAndUnit,
14
+ StateOfMindSampleTyped,
15
+ StatisticsQueryOptions,
16
+ SwimmingStrokeStyle,
17
+ WorkoutEventTyped,
18
+ WorkoutSampleTyped,
19
+ } from '../types'
20
+
21
+ type Equal<A, B> =
22
+ (<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2
23
+ ? true
24
+ : false
25
+
26
+ type Assert<T extends true> = T
27
+
28
+ type _sleepAnalysisValuesAreTyped = Assert<
29
+ Equal<
30
+ CategoryValueForIdentifier<'HKCategoryTypeIdentifierSleepAnalysis'>,
31
+ CategoryValueSleepAnalysis
32
+ >
33
+ >
34
+
35
+ type _newCategoryIdentifierFromSdkIsPresent = Assert<
36
+ 'HKCategoryTypeIdentifierHypertensionEvent' extends CategoryTypeIdentifier
37
+ ? true
38
+ : false
39
+ >
40
+
41
+ type _heartRateMetadataNarrowsToEnum = Assert<
42
+ Equal<
43
+ QuantitySampleTyped<'HKQuantityTypeIdentifierHeartRate'>['metadata']['HKHeartRateMotionContext'],
44
+ HeartRateMotionContext | undefined
45
+ >
46
+ >
47
+
48
+ type _categoryMetadataIncludesKnownSampleFields = Assert<
49
+ Equal<
50
+ CategorySampleTyped<'HKCategoryTypeIdentifierSleepAnalysis'>['metadata']['HKWasUserEntered'],
51
+ boolean | undefined
52
+ >
53
+ >
54
+
55
+ type _heartRateEventMetadataIsTypedOnMetadata = Assert<
56
+ Equal<
57
+ QuantitySampleTyped<'HKQuantityTypeIdentifierHeartRate'>['metadata']['HKAppleDeviceCalibrated'],
58
+ boolean | undefined
59
+ >
60
+ >
61
+
62
+ type _quantityMetadataIncludesEstimateDate = Assert<
63
+ Equal<
64
+ QuantitySampleTyped<'HKQuantityTypeIdentifierVO2Max'>['metadata']['HKDateOfEarliestDataUsedForEstimate'],
65
+ string | undefined
66
+ >
67
+ >
68
+
69
+ type _heartRateEventThresholdMetadataIsTyped = Assert<
70
+ Equal<
71
+ CategorySampleTyped<'HKCategoryTypeIdentifierHighHeartRateEvent'>['metadata']['HKHeartRateEventThreshold'],
72
+ Quantity | undefined
73
+ >
74
+ >
75
+
76
+ type _bloodGlucoseUnitNarrows = Assert<
77
+ Equal<
78
+ QuantitySampleTyped<'HKQuantityTypeIdentifierBloodGlucose'>['unit'],
79
+ BloodGlucoseUnit
80
+ >
81
+ >
82
+
83
+ type _quantityQueryOptionsUnitNarrows = Assert<
84
+ Equal<
85
+ QueryOptionsWithSortOrderAndUnit<BloodGlucoseUnit>['unit'],
86
+ BloodGlucoseUnit | undefined
87
+ >
88
+ >
89
+
90
+ type _quantityAnchorQueryOptionsUnitNarrows = Assert<
91
+ Equal<
92
+ QueryOptionsWithAnchorAndUnit<BloodGlucoseUnit>['unit'],
93
+ BloodGlucoseUnit | undefined
94
+ >
95
+ >
96
+
97
+ type _quantityStatisticsOptionsUnitNarrows = Assert<
98
+ Equal<
99
+ StatisticsQueryOptions<BloodGlucoseUnit>['unit'],
100
+ BloodGlucoseUnit | undefined
101
+ >
102
+ >
103
+
104
+ type _categorySaveIdentifierIsWriteableOnly = Assert<
105
+ 'HKCategoryTypeIdentifierHighHeartRateEvent' extends CategoryTypeIdentifierWriteable
106
+ ? false
107
+ : true
108
+ >
109
+
110
+ type _stateOfMindMetadataIsTyped = Assert<
111
+ Equal<
112
+ StateOfMindSampleTyped['metadata']['HKWasUserEntered'],
113
+ boolean | undefined
114
+ >
115
+ >
116
+
117
+ type _correlationMetadataIsTyped = Assert<
118
+ Equal<CorrelationSampleTyped['metadata']['HKFoodType'], string | undefined>
119
+ >
120
+
121
+ type _workoutMetadataIsTypedOnMetadata = Assert<
122
+ Equal<
123
+ WorkoutSampleTyped['metadata']['HKWorkoutBrandName'],
124
+ string | undefined
125
+ >
126
+ >
127
+
128
+ type _workoutEventMetadataIsTypedOnMetadata = Assert<
129
+ Equal<
130
+ NonNullable<WorkoutEventTyped['metadata']>['HKSwimmingStrokeStyle'],
131
+ SwimmingStrokeStyle | undefined
132
+ >
133
+ >
@@ -1,26 +1,62 @@
1
1
  import type { AnyMap } from 'react-native-nitro-modules'
2
+ import type {
3
+ CategoryTypedMetadataForIdentifierGenerated,
4
+ CategoryValueForIdentifierGenerated,
5
+ } from '../generated/healthkit.generated'
6
+ import {
7
+ CategoryValueAppetiteChanges,
8
+ CategoryValueAppleStandHour,
9
+ CategoryValueAppleWalkingSteadinessEvent,
10
+ CategoryValueCervicalMucusQuality,
11
+ CategoryValueContraceptive,
12
+ CategoryValueEnvironmentalAudioExposureEvent,
13
+ CategoryValueHeadphoneAudioExposureEvent,
14
+ CategoryValueLowCardioFitnessEvent,
15
+ CategoryValueMenstrualFlow,
16
+ CategoryValue as CategoryValueNotApplicable,
17
+ CategoryValueOvulationTestResult,
18
+ CategoryValuePregnancyTestResult,
19
+ CategoryValuePresence,
20
+ CategoryValueProgesteroneTestResult,
21
+ CategoryValueSeverity,
22
+ CategoryValueSleepAnalysis,
23
+ CategoryValueVaginalBleeding,
24
+ } from '../generated/healthkit.generated'
2
25
  import type { CategoryTypeIdentifier } from './CategoryTypeIdentifier'
3
26
  import type { BaseSample, DeletedSample, GenericMetadata } from './Shared'
4
27
  import type { SourceRevision } from './Source'
5
28
 
29
+ export {
30
+ CategoryValueAppetiteChanges,
31
+ CategoryValueAppleStandHour,
32
+ CategoryValueAppleWalkingSteadinessEvent,
33
+ CategoryValueCervicalMucusQuality,
34
+ CategoryValueContraceptive,
35
+ CategoryValueEnvironmentalAudioExposureEvent,
36
+ CategoryValueHeadphoneAudioExposureEvent,
37
+ CategoryValueLowCardioFitnessEvent,
38
+ CategoryValueMenstrualFlow,
39
+ CategoryValueNotApplicable,
40
+ CategoryValueOvulationTestResult,
41
+ CategoryValuePregnancyTestResult,
42
+ CategoryValuePresence,
43
+ CategoryValueProgesteroneTestResult,
44
+ CategoryValueSeverity,
45
+ CategoryValueSleepAnalysis,
46
+ CategoryValueVaginalBleeding,
47
+ }
48
+
6
49
  export type CategoryTypePresenceIdentifier =
7
50
  | 'HKCategoryTypeIdentifierAppetiteChanges'
8
51
  | 'HKCategoryTypeIdentifierSleepChanges'
9
52
 
10
53
  export type CategoryTypeValueNotApplicableIdentifier =
11
54
  | 'HKCategoryTypeIdentifierHighHeartRateEvent'
55
+ | 'HKCategoryTypeIdentifierHypertensionEvent'
12
56
  | 'HKCategoryTypeIdentifierIntermenstrualBleeding'
13
57
  | 'HKCategoryTypeIdentifierMindfulSession'
14
58
  | 'HKCategoryTypeIdentifierSexualActivity'
15
-
16
- /**
17
- * @see {@link https://developer.apple.com/documentation/healthkit/hkcategoryvaluepregnancytestresult Apple Docs }
18
- */
19
- enum CategoryValuePregnancyTestResult {
20
- positive = 2,
21
- negative = 1,
22
- indeterminate = 3,
23
- }
59
+ | 'HKCategoryTypeIdentifierSleepApneaEvent'
24
60
 
25
61
  export type CategoryTypeSeverityIdentifier =
26
62
  | 'HKCategoryTypeIdentifierAbdominalCramps'
@@ -47,7 +83,6 @@ export type CategoryTypeSeverityIdentifier =
47
83
  | 'HKCategoryTypeIdentifierLossOfTaste'
48
84
  | 'HKCategoryTypeIdentifierLowerBackPain'
49
85
  | 'HKCategoryTypeIdentifierMemoryLapse'
50
- | 'HKCategoryTypeIdentifierMoodChanges'
51
86
  | 'HKCategoryTypeIdentifierNausea'
52
87
  | 'HKCategoryTypeIdentifierNightSweats'
53
88
  | 'HKCategoryTypeIdentifierPelvicPain'
@@ -61,109 +96,10 @@ export type CategoryTypeSeverityIdentifier =
61
96
  | 'HKCategoryTypeIdentifierVomiting'
62
97
  | 'HKCategoryTypeIdentifierWheezing'
63
98
 
64
- /**
65
- * @see {@link https://developer.apple.com/documentation/healthkit/hkcategoryvaluecervicalmucusquality Apple Docs }
66
- */
67
- export enum CategoryValueCervicalMucusQuality {
68
- dry = 1,
69
- sticky = 2,
70
- creamy = 3,
71
- watery = 4,
72
- eggWhite = 5,
73
- }
74
-
75
- /**
76
- * @see {@link https://developer.apple.com/documentation/healthkit/hkcategoryvaluemenstrualflow Apple Docs }
77
- */
78
- export enum CategoryValueMenstrualFlow {
79
- unspecified = 1,
80
- none = 5,
81
- light = 2,
82
- medium = 3,
83
- heavy = 4,
84
- }
85
-
86
- /**
87
- * @see {@link https://developer.apple.com/documentation/healthkit/hkcategoryvalueovulationtestresult Apple Docs }
88
- */
89
- export enum CategoryValueOvulationTestResult {
90
- negative = 1,
91
- luteinizingHormoneSurge = 2,
92
- indeterminate = 3,
93
- estrogenSurge = 4,
94
- }
95
-
96
- /**
97
- * @see {@link https://developer.apple.com/documentation/healthkit/hkcategoryvaluesleepanalysis Apple Docs }
98
- */
99
- export enum CategoryValueSleepAnalysis {
100
- inBed = 0,
101
- asleepUnspecified = 1,
102
- awake = 2,
103
- asleepCore = 3,
104
- asleepDeep = 4,
105
- asleepREM = 5,
106
- }
107
-
108
- /**
109
- * @see {@link https://developer.apple.com/documentation/healthkit/hkcategoryvalueappetitechanges Apple Docs}
110
- */
111
- export enum CategoryValueAppetiteChanges {
112
- decreased = 2,
113
- increased = 3,
114
- noChange = 1,
115
- unspecified = 0,
116
- }
117
-
118
- /**
119
- * @see {@link https://developer.apple.com/documentation/healthkit/hkcategoryvaluepresence Apple Docs}
120
- */
121
- export enum CategoryValuePresence {
122
- notPresent = 1,
123
- present = 0,
124
- }
125
-
126
- /**
127
- * @see {@link https://developer.apple.com/documentation/healthkit/hkcategoryvalueseverity Apple Docs }
128
- */
129
- export enum CategoryValueSeverity {
130
- notPresent = 1,
131
- mild = 2,
132
- moderate = 3,
133
- severe = 4,
134
- unspecified = 0,
135
- }
136
-
137
- /**
138
- * @see {@link https://developer.apple.com/documentation/healthkit/hkcategoryvalue/notapplicable Apple Docs }
139
- */
140
- export enum CategoryValueNotApplicable {
141
- notApplicable = 0,
142
- }
143
-
144
- export enum CategoryValueLowCardioFitnessEvent {
145
- lowFitness = 1,
146
- }
147
-
148
- /**
149
- * @see {@link https://developer.apple.com/documentation/healthkit/hkcategoryvalue Apple Docs }
150
- */
151
99
  export type CategoryValue =
152
- | CategoryValueAppetiteChanges
153
- | CategoryValueCervicalMucusQuality
154
- | CategoryValueLowCardioFitnessEvent
155
- | CategoryValueMenstrualFlow
156
- | CategoryValueOvulationTestResult
157
- | CategoryValuePresence
158
- | CategoryValueSeverity
159
- | CategoryValueSleepAnalysis
100
+ | CategoryValueForIdentifierGenerated<CategoryTypeIdentifier>
160
101
  | number
161
102
 
162
- export enum CategoryValueAppleStandHour {
163
- stood = 0,
164
- idle = 1,
165
- }
166
-
167
103
  export interface CategorySampleForSaving {
168
104
  readonly start: Date
169
105
  readonly end: Date
@@ -194,49 +130,17 @@ export interface CategorySamplesWithAnchorResponseTyped<
194
130
 
195
131
  export type MetadataForCategoryIdentifier<
196
132
  T extends CategoryTypeIdentifier = CategoryTypeIdentifier,
197
- > = T extends 'HKCategoryTypeIdentifierSexualActivity'
198
- ? GenericMetadata & {
199
- readonly HKSexualActivityProtectionUsed?: boolean
200
- }
201
- : T extends 'HKCategoryTypeIdentifierMenstrualFlow'
202
- ? GenericMetadata & {
203
- readonly HKMenstrualCycleStart?: boolean
204
- }
205
- : GenericMetadata
133
+ > = GenericMetadata & CategoryTypedMetadataForIdentifierGenerated<T>
206
134
 
207
- export interface CategorySampleTyped<T extends CategoryTypeIdentifier>
208
- extends Omit<BaseSample, 'metadata'> {
135
+ export type CategorySampleTyped<T extends CategoryTypeIdentifier> = Omit<
136
+ CategorySample,
137
+ 'categoryType' | 'value' | 'metadata'
138
+ > & {
209
139
  readonly categoryType: T
210
140
  readonly value: CategoryValueForIdentifier<T>
211
-
212
141
  readonly metadata: MetadataForCategoryIdentifier<T>
213
-
214
- readonly metadataSexualActivityProtectionUsed?: boolean
215
- readonly metadataMenstrualCycleStart?: boolean
216
142
  }
217
143
 
218
144
  export type CategoryValueForIdentifier<
219
145
  T extends CategoryTypeIdentifier = CategoryTypeIdentifier,
220
- > = T extends 'HKCategoryTypeIdentifierCervicalMucusQuality'
221
- ? CategoryValueCervicalMucusQuality
222
- : T extends 'CategoryTypeIdentifierMenstrualFlow'
223
- ? CategoryValueMenstrualFlow
224
- : T extends 'HKCategoryTypeIdentifierOvulationTestResult'
225
- ? CategoryValueOvulationTestResult
226
- : T extends 'HKCategoryTypeIdentifierSleepAnalysis'
227
- ? CategoryValueSleepAnalysis
228
- : T extends CategoryTypeValueNotApplicableIdentifier
229
- ? CategoryValueNotApplicable
230
- : T extends CategoryTypeSeverityIdentifier
231
- ? CategoryValueSeverity
232
- : T extends CategoryTypePresenceIdentifier
233
- ? CategoryValuePresence
234
- : T extends 'HKCategoryTypeIdentifierLowCardioFitnessEvent'
235
- ? CategoryValueLowCardioFitnessEvent
236
- : T extends 'HKCategoryTypeIdentifierPregnancyTestResult'
237
- ? CategoryValuePregnancyTestResult
238
- : T extends 'HKCategoryTypeIdentifierPregnancyTestResult'
239
- ? CategoryValuePregnancyTestResult
240
- : T extends 'HKCategoryTypeIdentifierAppleStandHour'
241
- ? CategoryValueAppleStandHour
242
- : number
146
+ > = CategoryValueForIdentifierGenerated<T>