@kingstinct/react-native-healthkit 12.1.2 → 12.2.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 (266) hide show
  1. package/ios/CategoryTypeModule.swift +49 -97
  2. package/ios/CharacteristicTypeModule.swift +77 -63
  3. package/ios/CoreModule.swift +324 -280
  4. package/ios/CorrelationTypeModule.swift +192 -144
  5. package/ios/ElectrocardiogramModule.swift +185 -194
  6. package/ios/HeartbeatSeriesModule.swift +123 -171
  7. package/ios/Helpers.swift +312 -571
  8. package/ios/MedicationModule.swift +259 -0
  9. package/ios/PredicateHelpers.swift +334 -0
  10. package/ios/QuantityTypeModule.swift +297 -378
  11. package/ios/Serializers.swift +273 -210
  12. package/ios/SourceProxy.swift +2 -2
  13. package/ios/StateOfMindModule.swift +179 -125
  14. package/ios/WorkoutProxy.swift +235 -112
  15. package/ios/WorkoutsModule.swift +214 -262
  16. package/lib/commonjs/healthkit.ios.js +22 -2
  17. package/lib/commonjs/healthkit.js +35 -5
  18. package/lib/commonjs/hooks/useStatisticsForQuantity.js +1 -1
  19. package/lib/commonjs/hooks/useSubscribeToCategorySamples.js +20 -0
  20. package/lib/commonjs/modules.js +2 -1
  21. package/lib/commonjs/specs/MedicationModule.nitro.js +27 -0
  22. package/lib/commonjs/types/Constants.js +2 -1
  23. package/lib/commonjs/types/QuantityType.js +8 -1
  24. package/lib/commonjs/types/QueryOptions.js +18 -0
  25. package/lib/commonjs/types/WeatherCondition.js +32 -32
  26. package/lib/commonjs/types/Workouts.js +1 -50
  27. package/lib/commonjs/utils/getCategorySampleById.js +1 -1
  28. package/lib/commonjs/utils/getQuantitySampleById.js +1 -1
  29. package/lib/commonjs/utils/getWorkoutById.js +1 -1
  30. package/lib/commonjs/utils/subscribeToCategorySamples.js +29 -0
  31. package/lib/commonjs/utils/subscribeToQuantitySamples.js +8 -25
  32. package/lib/module/healthkit.ios.js +20 -2
  33. package/lib/module/healthkit.js +32 -2
  34. package/lib/module/hooks/useStatisticsForQuantity.js +1 -1
  35. package/lib/module/hooks/useSubscribeToCategorySamples.js +17 -0
  36. package/lib/module/modules.js +1 -0
  37. package/lib/module/specs/MedicationModule.nitro.js +26 -0
  38. package/lib/module/types/Constants.js +1 -0
  39. package/lib/module/types/QuantityType.js +7 -0
  40. package/lib/module/types/QueryOptions.js +17 -1
  41. package/lib/module/types/WeatherCondition.js +31 -31
  42. package/lib/module/types/Workouts.js +0 -49
  43. package/lib/module/utils/getCategorySampleById.js +1 -1
  44. package/lib/module/utils/getQuantitySampleById.js +1 -1
  45. package/lib/module/utils/getWorkoutById.js +1 -1
  46. package/lib/module/utils/subscribeToCategorySamples.js +26 -0
  47. package/lib/module/utils/subscribeToQuantitySamples.js +8 -25
  48. package/lib/typescript/healthkit.d.ts +18 -9
  49. package/lib/typescript/healthkit.ios.d.ts +33 -15
  50. package/lib/typescript/hooks/useSubscribeToCategorySamples.d.ts +3 -0
  51. package/lib/typescript/modules.d.ts +2 -0
  52. package/lib/typescript/specs/CategoryTypeModule.nitro.d.ts +2 -2
  53. package/lib/typescript/specs/CoreModule.nitro.d.ts +2 -1
  54. package/lib/typescript/specs/CorrelationTypeModule.nitro.d.ts +4 -2
  55. package/lib/typescript/specs/ElectrocardiogramModule.nitro.d.ts +1 -1
  56. package/lib/typescript/specs/HeartbeatSeriesModule.nitro.d.ts +1 -1
  57. package/lib/typescript/specs/MedicationModule.nitro.d.ts +56 -0
  58. package/lib/typescript/specs/QuantityTypeModule.nitro.d.ts +4 -4
  59. package/lib/typescript/specs/StateOfMindModule.nitro.d.ts +4 -3
  60. package/lib/typescript/types/CategoryType.d.ts +10 -20
  61. package/lib/typescript/types/Constants.d.ts +1 -0
  62. package/lib/typescript/types/CorrelationType.d.ts +8 -10
  63. package/lib/typescript/types/ElectrocardiogramSample.d.ts +2 -12
  64. package/lib/typescript/types/HeartbeatSeries.d.ts +2 -14
  65. package/lib/typescript/types/QuantitySample.d.ts +2 -8
  66. package/lib/typescript/types/QuantityType.d.ts +7 -8
  67. package/lib/typescript/types/QuantityTypeIdentifier.d.ts +23 -23
  68. package/lib/typescript/types/QueryOptions.d.ts +43 -28
  69. package/lib/typescript/types/Shared.d.ts +52 -7
  70. package/lib/typescript/types/StateOfMind.d.ts +7 -10
  71. package/lib/typescript/types/Subscriptions.d.ts +12 -3
  72. package/lib/typescript/types/WeatherCondition.d.ts +1 -1
  73. package/lib/typescript/types/Workouts.d.ts +28 -81
  74. package/lib/typescript/utils/subscribeToCategorySamples.d.ts +5 -0
  75. package/nitrogen/generated/ios/ReactNativeHealthkit-Swift-Cxx-Bridge.cpp +57 -0
  76. package/nitrogen/generated/ios/ReactNativeHealthkit-Swift-Cxx-Bridge.hpp +592 -389
  77. package/nitrogen/generated/ios/ReactNativeHealthkit-Swift-Cxx-Umbrella.hpp +65 -30
  78. package/nitrogen/generated/ios/ReactNativeHealthkitAutolinking.mm +8 -0
  79. package/nitrogen/generated/ios/ReactNativeHealthkitAutolinking.swift +15 -0
  80. package/nitrogen/generated/ios/c++/HybridCategoryTypeModuleSpecSwift.hpp +32 -26
  81. package/nitrogen/generated/ios/c++/HybridCoreModuleSpecSwift.hpp +36 -37
  82. package/nitrogen/generated/ios/c++/HybridCorrelationTypeModuleSpecSwift.hpp +55 -2
  83. package/nitrogen/generated/ios/c++/HybridElectrocardiogramModuleSpecSwift.hpp +36 -30
  84. package/nitrogen/generated/ios/c++/HybridHeartbeatSeriesModuleSpecSwift.hpp +35 -29
  85. package/nitrogen/generated/ios/c++/HybridMedicationModuleSpecSwift.cpp +11 -0
  86. package/nitrogen/generated/ios/c++/HybridMedicationModuleSpecSwift.hpp +181 -0
  87. package/nitrogen/generated/ios/c++/HybridQuantityTypeModuleSpecSwift.hpp +48 -42
  88. package/nitrogen/generated/ios/c++/HybridStateOfMindModuleSpecSwift.hpp +59 -36
  89. package/nitrogen/generated/ios/c++/HybridWorkoutProxySpecSwift.hpp +150 -29
  90. package/nitrogen/generated/ios/c++/HybridWorkoutsModuleSpecSwift.hpp +13 -28
  91. package/nitrogen/generated/ios/swift/AggregationStyle.swift +48 -0
  92. package/nitrogen/generated/ios/swift/CategorySample.swift +571 -24
  93. package/nitrogen/generated/ios/swift/ComparisonPredicateOperator.swift +2 -2
  94. package/nitrogen/generated/ios/swift/CorrelationSample.swift +640 -17
  95. package/nitrogen/generated/ios/swift/{PredicateWithStartAndEnd.swift → DateFilter.swift} +5 -5
  96. package/nitrogen/generated/ios/swift/ECGQueryOptionsWithAnchor.swift +11 -91
  97. package/nitrogen/generated/ios/swift/ECGQueryOptionsWithSortOrder.swift +11 -91
  98. package/nitrogen/generated/ios/swift/ElectrocardiogramSample.swift +570 -72
  99. package/nitrogen/generated/ios/swift/FilterForSamples.swift +349 -12
  100. package/nitrogen/generated/ios/swift/FilterForSamplesBase.swift +234 -0
  101. package/nitrogen/generated/ios/swift/FilterForWorkouts.swift +366 -0
  102. package/nitrogen/generated/ios/swift/FilterForWorkoutsBase.swift +240 -0
  103. package/nitrogen/generated/ios/swift/Func_void_MedicationDoseEventsWithAnchorResponse.swift +47 -0
  104. package/nitrogen/generated/ios/swift/Func_void_QueryCorrelationSamplesWithAnchorResponse.swift +47 -0
  105. package/nitrogen/generated/ios/swift/Func_void_StateOfMindSamplesWithAnchorResponse.swift +47 -0
  106. package/nitrogen/generated/ios/swift/Func_void_std__vector_MedicationDoseEvent_.swift +47 -0
  107. package/nitrogen/generated/ios/swift/Func_void_std__vector_UserAnnotatedMedication_.swift +47 -0
  108. package/nitrogen/generated/ios/swift/GeneralForm.swift +104 -0
  109. package/nitrogen/generated/ios/swift/HeartRateMotionContext.swift +44 -0
  110. package/nitrogen/generated/ios/swift/HeartbeatSeriesSample.swift +565 -37
  111. package/nitrogen/generated/ios/swift/HybridCategoryTypeModuleSpec.swift +1 -1
  112. package/nitrogen/generated/ios/swift/HybridCategoryTypeModuleSpec_cxx.swift +2 -2
  113. package/nitrogen/generated/ios/swift/HybridCoreModuleSpec.swift +2 -1
  114. package/nitrogen/generated/ios/swift/HybridCoreModuleSpec_cxx.swift +19 -31
  115. package/nitrogen/generated/ios/swift/HybridCorrelationTypeModuleSpec.swift +2 -1
  116. package/nitrogen/generated/ios/swift/HybridCorrelationTypeModuleSpec_cxx.swift +21 -2
  117. package/nitrogen/generated/ios/swift/HybridElectrocardiogramModuleSpec.swift +1 -1
  118. package/nitrogen/generated/ios/swift/HybridElectrocardiogramModuleSpec_cxx.swift +2 -2
  119. package/nitrogen/generated/ios/swift/HybridHeartbeatSeriesModuleSpec.swift +1 -1
  120. package/nitrogen/generated/ios/swift/HybridHeartbeatSeriesModuleSpec_cxx.swift +2 -2
  121. package/nitrogen/generated/ios/swift/HybridMedicationModuleSpec.swift +60 -0
  122. package/nitrogen/generated/ios/swift/HybridMedicationModuleSpec_cxx.swift +208 -0
  123. package/nitrogen/generated/ios/swift/HybridQuantityTypeModuleSpec.swift +2 -2
  124. package/nitrogen/generated/ios/swift/HybridQuantityTypeModuleSpec_cxx.swift +9 -43
  125. package/nitrogen/generated/ios/swift/HybridStateOfMindModuleSpec.swift +2 -1
  126. package/nitrogen/generated/ios/swift/HybridStateOfMindModuleSpec_cxx.swift +21 -2
  127. package/nitrogen/generated/ios/swift/HybridWorkoutProxySpec.swift +34 -6
  128. package/nitrogen/generated/ios/swift/HybridWorkoutProxySpec_cxx.swift +376 -36
  129. package/nitrogen/generated/ios/swift/InsulinDeliveryReason.swift +40 -0
  130. package/nitrogen/generated/ios/swift/MedicationConcept.swift +80 -0
  131. package/nitrogen/generated/ios/swift/MedicationDoseEvent.swift +781 -0
  132. package/nitrogen/generated/ios/swift/MedicationDoseEventLogStatus.swift +56 -0
  133. package/nitrogen/generated/ios/swift/MedicationDoseEventScheduleType.swift +40 -0
  134. package/nitrogen/generated/ios/swift/MedicationDoseEventsWithAnchorResponse.swift +81 -0
  135. package/nitrogen/generated/ios/swift/ObjectTypeIdentifier.swift +16 -16
  136. package/nitrogen/generated/ios/swift/PredicateWithMetadataKey.swift +7 -7
  137. package/nitrogen/generated/ios/swift/QuantitySample.swift +574 -27
  138. package/nitrogen/generated/ios/swift/QuantityTypeIdentifier.swift +16 -16
  139. package/nitrogen/generated/ios/swift/QueryCorrelationSamplesWithAnchorResponse.swift +81 -0
  140. package/nitrogen/generated/ios/swift/QueryOptionsWithAnchor.swift +11 -91
  141. package/nitrogen/generated/ios/swift/QueryOptionsWithAnchorAndUnit.swift +11 -91
  142. package/nitrogen/generated/ios/swift/QueryOptionsWithSortOrder.swift +11 -91
  143. package/nitrogen/generated/ios/swift/QueryOptionsWithSortOrderAndUnit.swift +11 -91
  144. package/nitrogen/generated/ios/swift/RelatedCoding.swift +76 -0
  145. package/nitrogen/generated/ios/swift/SampleType.swift +68 -0
  146. package/nitrogen/generated/ios/swift/SampleTypeIdentifier.swift +16 -16
  147. package/nitrogen/generated/ios/swift/SampleTypeIdentifierWriteable.swift +0 -16
  148. package/nitrogen/generated/ios/swift/StateOfMindSample.swift +586 -58
  149. package/nitrogen/generated/ios/swift/StateOfMindSamplesWithAnchorResponse.swift +81 -0
  150. package/nitrogen/generated/ios/swift/StatisticsQueryOptions.swift +7 -75
  151. package/nitrogen/generated/ios/swift/UserAnnotatedMedication.swift +87 -0
  152. package/nitrogen/generated/ios/swift/WeatherCondition.swift +144 -0
  153. package/nitrogen/generated/ios/swift/WorkoutQueryOptions.swift +11 -105
  154. package/nitrogen/generated/ios/swift/WorkoutQueryOptionsWithAnchor.swift +11 -105
  155. package/nitrogen/generated/ios/swift/WorkoutSample.swift +751 -78
  156. package/nitrogen/generated/shared/c++/AggregationStyle.hpp +64 -0
  157. package/nitrogen/generated/shared/c++/CategorySample.hpp +126 -23
  158. package/nitrogen/generated/shared/c++/CorrelationSample.hpp +134 -12
  159. package/nitrogen/generated/shared/c++/{PredicateWithStartAndEnd.hpp → DateFilter.hpp} +10 -10
  160. package/nitrogen/generated/shared/c++/ECGQueryOptionsWithAnchor.hpp +12 -31
  161. package/nitrogen/generated/shared/c++/ECGQueryOptionsWithSortOrder.hpp +12 -31
  162. package/nitrogen/generated/shared/c++/ElectrocardiogramSample.hpp +135 -36
  163. package/nitrogen/generated/shared/c++/FilterForSamples.hpp +124 -0
  164. package/nitrogen/generated/shared/c++/FilterForSamplesBase.hpp +109 -0
  165. package/nitrogen/generated/shared/c++/FilterForWorkouts.hpp +131 -0
  166. package/nitrogen/generated/shared/c++/FilterForWorkoutsBase.hpp +116 -0
  167. package/nitrogen/generated/shared/c++/GeneralForm.hpp +140 -0
  168. package/nitrogen/generated/shared/c++/HeartRateMotionContext.hpp +67 -0
  169. package/nitrogen/generated/shared/c++/HeartbeatSeriesSample.hpp +131 -28
  170. package/nitrogen/generated/shared/c++/HybridCategoryTypeModuleSpec.hpp +1 -2
  171. package/nitrogen/generated/shared/c++/HybridCoreModuleSpec.cpp +1 -0
  172. package/nitrogen/generated/shared/c++/HybridCoreModuleSpec.hpp +10 -28
  173. package/nitrogen/generated/shared/c++/HybridCorrelationTypeModuleSpec.cpp +1 -0
  174. package/nitrogen/generated/shared/c++/HybridCorrelationTypeModuleSpec.hpp +11 -1
  175. package/nitrogen/generated/shared/c++/HybridElectrocardiogramModuleSpec.hpp +1 -2
  176. package/nitrogen/generated/shared/c++/HybridHeartbeatSeriesModuleSpec.hpp +1 -2
  177. package/nitrogen/generated/shared/c++/HybridMedicationModuleSpec.cpp +24 -0
  178. package/nitrogen/generated/shared/c++/HybridMedicationModuleSpec.hpp +80 -0
  179. package/nitrogen/generated/shared/c++/HybridQuantityTypeModuleSpec.cpp +1 -1
  180. package/nitrogen/generated/shared/c++/HybridQuantityTypeModuleSpec.hpp +6 -25
  181. package/nitrogen/generated/shared/c++/HybridStateOfMindModuleSpec.cpp +1 -0
  182. package/nitrogen/generated/shared/c++/HybridStateOfMindModuleSpec.hpp +9 -2
  183. package/nitrogen/generated/shared/c++/HybridWorkoutProxySpec.cpp +33 -5
  184. package/nitrogen/generated/shared/c++/HybridWorkoutProxySpec.hpp +56 -16
  185. package/nitrogen/generated/shared/c++/InsulinDeliveryReason.hpp +62 -0
  186. package/nitrogen/generated/shared/c++/MedicationConcept.hpp +93 -0
  187. package/nitrogen/generated/shared/c++/MedicationDoseEvent.hpp +240 -0
  188. package/nitrogen/generated/shared/c++/MedicationDoseEventLogStatus.hpp +66 -0
  189. package/nitrogen/generated/shared/c++/MedicationDoseEventScheduleType.hpp +62 -0
  190. package/nitrogen/generated/shared/c++/MedicationDoseEventsWithAnchorResponse.hpp +89 -0
  191. package/nitrogen/generated/shared/c++/ObjectTypeIdentifier.hpp +105 -105
  192. package/nitrogen/generated/shared/c++/PredicateWithMetadataKey.hpp +8 -8
  193. package/nitrogen/generated/shared/c++/QuantitySample.hpp +130 -27
  194. package/nitrogen/generated/shared/c++/QuantityTypeIdentifier.hpp +105 -105
  195. package/nitrogen/generated/shared/c++/QueryCorrelationSamplesWithAnchorResponse.hpp +89 -0
  196. package/nitrogen/generated/shared/c++/QueryOptionsWithAnchor.hpp +12 -31
  197. package/nitrogen/generated/shared/c++/QueryOptionsWithAnchorAndUnit.hpp +12 -31
  198. package/nitrogen/generated/shared/c++/QueryOptionsWithSortOrder.hpp +12 -31
  199. package/nitrogen/generated/shared/c++/QueryOptionsWithSortOrderAndUnit.hpp +12 -31
  200. package/nitrogen/generated/shared/c++/RelatedCoding.hpp +84 -0
  201. package/nitrogen/generated/shared/c++/SampleType.hpp +87 -0
  202. package/nitrogen/generated/shared/c++/SampleTypeIdentifier.hpp +105 -105
  203. package/nitrogen/generated/shared/c++/SampleTypeIdentifierWriteable.hpp +105 -121
  204. package/nitrogen/generated/shared/c++/StateOfMindSample.hpp +139 -36
  205. package/nitrogen/generated/shared/c++/StateOfMindSamplesWithAnchorResponse.hpp +89 -0
  206. package/nitrogen/generated/shared/c++/StatisticsQueryOptions.hpp +8 -27
  207. package/nitrogen/generated/shared/c++/UserAnnotatedMedication.hpp +90 -0
  208. package/nitrogen/generated/shared/c++/WeatherCondition.hpp +88 -0
  209. package/nitrogen/generated/shared/c++/WorkoutQueryOptions.hpp +12 -37
  210. package/nitrogen/generated/shared/c++/WorkoutQueryOptionsWithAnchor.hpp +12 -37
  211. package/nitrogen/generated/shared/c++/WorkoutSample.hpp +159 -35
  212. package/package.json +1 -1
  213. package/src/healthkit.ios.ts +30 -0
  214. package/src/healthkit.ts +68 -3
  215. package/src/hooks/useStatisticsForQuantity.ts +1 -1
  216. package/src/hooks/useSubscribeToCategorySamples.ts +31 -0
  217. package/src/modules.ts +4 -0
  218. package/src/specs/CategoryTypeModule.nitro.ts +2 -2
  219. package/src/specs/CoreModule.nitro.ts +3 -0
  220. package/src/specs/CorrelationTypeModule.nitro.ts +11 -3
  221. package/src/specs/ElectrocardiogramModule.nitro.ts +1 -1
  222. package/src/specs/HeartbeatSeriesModule.nitro.ts +1 -1
  223. package/src/specs/MedicationModule.nitro.ts +140 -0
  224. package/src/specs/QuantityTypeModule.nitro.ts +4 -7
  225. package/src/specs/StateOfMindModule.nitro.ts +10 -2
  226. package/src/types/CategoryType.ts +15 -22
  227. package/src/types/Constants.ts +3 -0
  228. package/src/types/CorrelationType.ts +10 -15
  229. package/src/types/ElectrocardiogramSample.ts +2 -14
  230. package/src/types/HeartbeatSeries.ts +2 -15
  231. package/src/types/QuantitySample.ts +2 -8
  232. package/src/types/QuantityType.ts +8 -17
  233. package/src/types/QuantityTypeIdentifier.ts +25 -25
  234. package/src/types/QueryOptions.ts +54 -43
  235. package/src/types/Shared.ts +74 -17
  236. package/src/types/StateOfMind.ts +8 -10
  237. package/src/types/Subscriptions.ts +19 -3
  238. package/src/types/WeatherCondition.ts +1 -1
  239. package/src/types/Workouts.ts +28 -91
  240. package/src/utils/getCategorySampleById.ts +1 -1
  241. package/src/utils/getQuantitySampleById.ts +1 -1
  242. package/src/utils/getWorkoutById.ts +1 -2
  243. package/src/utils/subscribeToCategorySamples.ts +38 -0
  244. package/src/utils/subscribeToQuantitySamples.ts +12 -37
  245. package/nitrogen/generated/ios/swift/FilterForSamplesAnd.swift +0 -94
  246. package/nitrogen/generated/ios/swift/FilterForSamplesOr.swift +0 -94
  247. package/nitrogen/generated/ios/swift/PredicateForSamples.swift +0 -21
  248. package/nitrogen/generated/ios/swift/PredicateForWorkouts.swift +0 -23
  249. package/nitrogen/generated/ios/swift/PredicateForWorkoutsAnd.swift +0 -108
  250. package/nitrogen/generated/ios/swift/PredicateForWorkoutsOr.swift +0 -108
  251. package/nitrogen/generated/ios/swift/PredicateFromWorkout.swift +0 -45
  252. package/nitrogen/generated/ios/swift/PredicateWithMetadataOperator.swift +0 -48
  253. package/nitrogen/generated/ios/swift/PredicateWithUUID.swift +0 -35
  254. package/nitrogen/generated/ios/swift/PredicateWithUUIDs.swift +0 -47
  255. package/nitrogen/generated/ios/swift/Variant_PredicateWithUUID_PredicateWithUUIDs_PredicateWithMetadataKey_PredicateWithStartAndEnd_PredicateFromWorkout_FilterForSamplesAnd_FilterForSamplesOr.swift +0 -23
  256. package/nitrogen/generated/ios/swift/Variant_PredicateWithUUID_PredicateWithUUIDs_PredicateWithMetadataKey_PredicateWithStartAndEnd_PredicateFromWorkout_WorkoutActivityTypePredicate_WorkoutDurationPredicate_PredicateForWorkoutsOr_PredicateForWorkoutsAnd.swift +0 -25
  257. package/nitrogen/generated/ios/swift/WorkoutActivityTypePredicate.swift +0 -35
  258. package/nitrogen/generated/shared/c++/FilterForSamplesAnd.hpp +0 -90
  259. package/nitrogen/generated/shared/c++/FilterForSamplesOr.hpp +0 -90
  260. package/nitrogen/generated/shared/c++/PredicateForWorkoutsAnd.hpp +0 -96
  261. package/nitrogen/generated/shared/c++/PredicateForWorkoutsOr.hpp +0 -96
  262. package/nitrogen/generated/shared/c++/PredicateFromWorkout.hpp +0 -77
  263. package/nitrogen/generated/shared/c++/PredicateWithMetadataOperator.hpp +0 -84
  264. package/nitrogen/generated/shared/c++/PredicateWithUUID.hpp +0 -75
  265. package/nitrogen/generated/shared/c++/PredicateWithUUIDs.hpp +0 -76
  266. package/nitrogen/generated/shared/c++/WorkoutActivityTypePredicate.hpp +0 -76
@@ -1,159 +1,207 @@
1
1
  import HealthKit
2
2
  import NitroModules
3
3
 
4
- class CorrelationTypeModule: HybridCorrelationTypeModuleSpec {
5
- func saveCorrelationSample(
6
- typeIdentifier: CorrelationTypeIdentifier,
7
- samples: [SampleForSaving],
8
- start: Date,
9
- end: Date,
10
- metadata: AnyMap
11
- ) throws -> Promise<Bool> {
12
- let correlationType = try initializeCorrelationType(typeIdentifier.stringValue)
13
-
14
- var initializedSamples = Set<HKSample>()
15
-
16
- for sample in samples {
17
- switch sample {
18
- case .second(let quantitySample):
19
- let quantityTypeId = HKQuantityTypeIdentifier(rawValue: quantitySample.quantityType.stringValue)
20
- guard let quantityType = HKSampleType.quantityType(forIdentifier: quantityTypeId) else {
21
- continue
22
- }
23
-
24
- let unit = HKUnit(from: quantitySample.unit)
25
- let quantity = HKQuantity(unit: unit, doubleValue: quantitySample.quantity)
26
- let hkQuantitySample = HKQuantitySample(
27
- type: quantityType,
28
- quantity: quantity,
29
- start: start,
30
- end: end,
31
- metadata: anyMapToDictionary(quantitySample.metadata)
32
- )
33
- initializedSamples.insert(hkQuantitySample)
34
-
35
- case .first(let categorySample):
36
- let categoryType = try initializeCategoryType(categorySample.categoryType.stringValue)
37
-
38
- let hkCategorySample = HKCategorySample(
39
- type: categoryType,
40
- value: Int(categorySample.value),
41
- start: categorySample.start,
42
- end: categorySample.end,
43
- metadata: anyMapToDictionary(categorySample.metadata)
44
- )
45
- initializedSamples.insert(hkCategorySample)
46
- }
47
- }
4
+ func serializeCorrelationSample(correlation: HKCorrelation, unitMap: [HKQuantityType: HKUnit])
5
+ -> CorrelationSample {
6
+ let objects = correlation.objects.compactMap { object -> CorrelationObject? in
7
+ if let quantitySample = object as? HKQuantitySample,
8
+ let unit = unitMap[quantitySample.quantityType] {
9
+ do {
10
+ let quantitySample = try serializeQuantitySample(
11
+ sample: quantitySample,
12
+ unit: unit
13
+ )
14
+ return CorrelationObject.second(quantitySample)
15
+ } catch {
16
+ warnWithPrefix("serializeCorrelationSample: \(error.localizedDescription)")
17
+ }
18
+ } else if let categorySample = object as? HKCategorySample {
19
+ return CorrelationObject.first(serializeCategorySample(sample: categorySample))
20
+ }
21
+ return nil
22
+ }
23
+
24
+ return CorrelationSample(
25
+ correlationType: CorrelationTypeIdentifier(fromString: correlation.correlationType.identifier)!,
26
+ objects: objects,
27
+ metadataFoodType: correlation.metadata?[HKMetadataKeyFoodType] as? String,
28
+ sampleType: serializeSampleType(correlation.sampleType),
29
+ startDate: correlation.startDate,
30
+ endDate: correlation.endDate,
31
+ hasUndeterminedDuration: correlation.hasUndeterminedDuration,
32
+
33
+ metadataWeatherCondition: serializeWeatherCondition(
34
+ correlation.metadata?[HKMetadataKeyWeatherCondition] as? HKWeatherCondition),
35
+ metadataWeatherHumidity: serializeUnknownQuantityTyped(
36
+ quantity: correlation.metadata?[HKMetadataKeyWeatherHumidity] as? HKQuantity),
37
+ metadataWeatherTemperature: serializeUnknownQuantityTyped(
38
+ quantity: correlation.metadata?[HKMetadataKeyWeatherTemperature] as? HKQuantity),
39
+ metadataInsulinDeliveryReason: serializeInsulinDeliveryReason(
40
+ correlation.metadata?[HKMetadataKeyInsulinDeliveryReason] as? HKInsulinDeliveryReason),
41
+ metadataHeartRateMotionContext: serializeHeartRateMotionContext(
42
+ correlation.metadata?[HKMetadataKeyHeartRateMotionContext] as? HKHeartRateMotionContext),
43
+
44
+ uuid: correlation.uuid.uuidString,
45
+ sourceRevision: serializeSourceRevision(correlation.sourceRevision),
46
+ device: serializeDevice(hkDevice: correlation.device),
47
+ metadata: serializeMetadata(correlation.metadata),
48
+
49
+ metadataExternalUUID: correlation.metadata?[HKMetadataKeyExternalUUID] as? String,
50
+ metadataTimeZone: correlation.metadata?[HKMetadataKeyTimeZone] as? String,
51
+ metadataWasUserEntered: correlation.metadata?[HKMetadataKeyWasUserEntered] as? Bool,
52
+ metadataDeviceSerialNumber: correlation.metadata?[HKMetadataKeyDeviceSerialNumber] as? String,
53
+ metadataUdiDeviceIdentifier: correlation.metadata?[HKMetadataKeyUDIDeviceIdentifier] as? String,
54
+ metadataUdiProductionIdentifier: correlation.metadata?[HKMetadataKeyUDIProductionIdentifier]
55
+ as? String,
56
+ metadataDigitalSignature: correlation.metadata?[HKMetadataKeyDigitalSignature] as? String,
57
+ metadataDeviceName: correlation.metadata?[HKMetadataKeyDeviceName] as? String,
58
+ metadataDeviceManufacturerName: correlation.metadata?[HKMetadataKeyDeviceManufacturerName]
59
+ as? String,
60
+ metadataSyncIdentifier: correlation.metadata?[HKMetadataKeySyncIdentifier] as? String,
61
+ metadataSyncVersion: correlation.metadata?[HKMetadataKeySyncVersion] as? Double,
62
+ metadataWasTakenInLab: correlation.metadata?[HKMetadataKeyWasTakenInLab] as? Bool,
63
+ metadataReferenceRangeLowerLimit: correlation.metadata?[HKMetadataKeyReferenceRangeLowerLimit]
64
+ as? Double,
65
+ metadataReferenceRangeUpperLimit: correlation.metadata?[HKMetadataKeyReferenceRangeUpperLimit]
66
+ as? Double,
67
+ metadataAlgorithmVersion: correlation.metadata?[HKMetadataKeyAlgorithmVersion] as? Double
68
+ )
69
+ }
48
70
 
49
- if initializedSamples.isEmpty {
50
- throw RuntimeError.error(withMessage: "[react-native-healthkit] No valid samples to create correlation sample")
71
+ func getUnitMap(correlations: [HKCorrelation]) async throws -> [HKQuantityType: HKUnit] {
72
+ // Collect all quantity types to get preferred units
73
+ var quantityTypes = Set<HKQuantityType>()
74
+ for correlation in correlations {
75
+ for object in correlation.objects {
76
+ if let quantitySample = object as? HKQuantitySample {
77
+ quantityTypes.insert(quantitySample.quantityType)
78
+ }
79
+ }
80
+ }
81
+
82
+ let unitMap = try await getPreferredUnitsInternal(quantityTypes: Array(quantityTypes))
83
+
84
+ return unitMap
85
+ }
86
+
87
+ class CorrelationTypeModule: HybridCorrelationTypeModuleSpec {
88
+ func queryCorrelationSamplesWithAnchor(
89
+ typeIdentifier: CorrelationTypeIdentifier, options: QueryOptionsWithAnchor
90
+ ) -> Promise<QueryCorrelationSamplesWithAnchorResponse> {
91
+ return Promise.async {
92
+ let predicate = createPredicateForSamples(options.filter)
93
+ let correlationType = try initializeCorrelationType(typeIdentifier.stringValue)
94
+
95
+ let response = try await sampleAnchoredQueryAsync(
96
+ sampleType: correlationType,
97
+ limit: options.limit,
98
+ queryAnchor: options.anchor,
99
+ predicate: predicate
100
+ )
101
+
102
+ let correlationSamples = response.samples.compactMap { sample in
103
+ return sample as? HKCorrelation
51
104
  }
52
105
 
53
- let correlation = HKCorrelation(
54
- type: correlationType,
106
+ let unitMap = try await getUnitMap(correlations: correlationSamples)
107
+
108
+ return QueryCorrelationSamplesWithAnchorResponse(
109
+ correlations: correlationSamples.map { sample in
110
+ return serializeCorrelationSample(correlation: sample, unitMap: unitMap)
111
+ },
112
+ deletedSamples: response.deletedSamples,
113
+ newAnchor: response.newAnchor
114
+ )
115
+
116
+ }
117
+ }
118
+
119
+ func saveCorrelationSample(
120
+ typeIdentifier: CorrelationTypeIdentifier,
121
+ samples: [SampleForSaving],
122
+ start: Date,
123
+ end: Date,
124
+ metadata: AnyMap
125
+ ) -> Promise<Bool> {
126
+ return Promise.async {
127
+ let correlationType = try initializeCorrelationType(typeIdentifier.stringValue)
128
+
129
+ var initializedSamples = Set<HKSample>()
130
+
131
+ for sample in samples {
132
+ switch sample {
133
+ case .second(let quantitySample):
134
+ let quantityTypeId = HKQuantityTypeIdentifier(
135
+ rawValue: quantitySample.quantityType.stringValue)
136
+ guard let quantityType = HKSampleType.quantityType(forIdentifier: quantityTypeId) else {
137
+ continue
138
+ }
139
+
140
+ let unit = HKUnit(from: quantitySample.unit)
141
+ let quantity = HKQuantity(unit: unit, doubleValue: quantitySample.quantity)
142
+ let hkQuantitySample = HKQuantitySample(
143
+ type: quantityType,
144
+ quantity: quantity,
55
145
  start: start,
56
146
  end: end,
57
- objects: initializedSamples,
58
- metadata: anyMapToDictionary(metadata)
59
- )
147
+ metadata: anyMapToDictionary(quantitySample.metadata)
148
+ )
149
+ initializedSamples.insert(hkQuantitySample)
150
+
151
+ case .first(let categorySample):
152
+ let categoryType = try initializeCategoryType(categorySample.categoryType.stringValue)
60
153
 
61
- return Promise.async {
62
- try await withCheckedThrowingContinuation { continuation in
63
- store.save(correlation) { (success: Bool, error: Error?) in
64
- if let error = error {
65
- continuation.resume(throwing: error)
66
- } else {
67
- continuation.resume(returning: success)
68
- }
69
- }
70
- }
154
+ let hkCategorySample = HKCategorySample(
155
+ type: categoryType,
156
+ value: Int(categorySample.value),
157
+ start: categorySample.start,
158
+ end: categorySample.end,
159
+ metadata: anyMapToDictionary(categorySample.metadata)
160
+ )
161
+ initializedSamples.insert(hkCategorySample)
71
162
  }
163
+ }
164
+
165
+ if initializedSamples.isEmpty {
166
+ throw runtimeErrorWithPrefix("No valid samples to create correlation sample")
167
+ }
168
+
169
+ let correlation = HKCorrelation(
170
+ type: correlationType,
171
+ start: start,
172
+ end: end,
173
+ objects: initializedSamples,
174
+ metadata: anyMapToDictionary(metadata)
175
+ )
176
+
177
+ return try await saveAsync(sample: correlation)
72
178
  }
179
+ }
73
180
 
74
- func queryCorrelationSamples(
75
- typeIdentifier: CorrelationTypeIdentifier,
76
- from: Date,
77
- to: Date
78
- ) throws -> Promise<[CorrelationSample]> {
79
- let correlationType = try initializeCorrelationType(typeIdentifier.stringValue)
80
- let predicate = try createPredicate(
81
- filter: Variant_PredicateWithUUID_PredicateWithUUIDs_PredicateWithMetadataKey_PredicateWithStartAndEnd_PredicateFromWorkout_FilterForSamplesAnd_FilterForSamplesOr.fourth(
82
- PredicateWithStartAndEnd(
83
- startDate: from,
84
- endDate: to,
85
- strictEndDate: true,
86
- strictStartDate: true
87
- )
88
- )
89
- )
181
+ func queryCorrelationSamples(
182
+ typeIdentifier: CorrelationTypeIdentifier, options: QueryOptionsWithSortOrder
183
+ ) -> Promise<[CorrelationSample]> {
184
+ return Promise.async {
185
+ let correlationType = try initializeCorrelationType(typeIdentifier.stringValue)
90
186
 
91
- return Promise.async {
92
- try await withCheckedThrowingContinuation { continuation in
93
- let query = HKCorrelationQuery(
94
- type: correlationType,
95
- predicate: predicate,
96
- samplePredicates: nil
97
- ) { (_: HKCorrelationQuery, correlations: [HKCorrelation]?, error: Error?) in
98
- if let error = error {
99
- continuation.resume(throwing: error)
100
- return
101
- }
102
-
103
- guard let correlations = correlations, !correlations.isEmpty else {
104
- continuation.resume(returning: [])
105
- return
106
- }
107
-
108
- // Collect all quantity types to get preferred units
109
- var quantityTypes = Set<HKQuantityType>()
110
- for correlation in correlations {
111
- for object in correlation.objects {
112
- if let quantitySample = object as? HKQuantitySample {
113
- quantityTypes.insert(quantitySample.quantityType)
114
- }
115
- }
116
- }
117
-
118
- store.preferredUnits(for: quantityTypes) { (unitMap: [HKQuantityType: HKUnit], error: Error?) in
119
- if let error = error {
120
- continuation.resume(throwing: error)
121
- return
122
- }
123
-
124
- let serializedCorrelations = correlations.map { correlation -> CorrelationSample in
125
- let objects = correlation.objects.compactMap { object -> CorrelationObject? in
126
- if let quantitySample = object as? HKQuantitySample,
127
- let unit = unitMap[quantitySample.quantityType] {
128
- do {
129
- let quantitySample = try serializeQuantitySample(sample: quantitySample, unit: unit)
130
- return CorrelationObject.second(quantitySample)
131
- } catch {
132
- print(error.localizedDescription)
133
- }
134
-
135
- } else if let categorySample = object as? HKCategorySample {
136
- return CorrelationObject.first(serializeCategorySample(sample: categorySample))
137
- }
138
- return nil
139
- }
140
-
141
- return CorrelationSample(
142
- uuid: correlation.uuid.uuidString,
143
- correlationType: CorrelationTypeIdentifier(fromString: correlation.correlationType.identifier)!,
144
- objects: objects,
145
- metadata: serializeMetadata(correlation.metadata),
146
- startDate: correlation.startDate,
147
- endDate: correlation.endDate
148
- )
149
- }
150
-
151
- continuation.resume(returning: serializedCorrelations)
152
- }
153
- }
154
-
155
- store.execute(query)
156
- }
157
- }
187
+ let samples = try await sampleQueryAsync(
188
+ sampleType: correlationType,
189
+ limit: options.limit,
190
+ predicate: createPredicateForSamples(options.filter),
191
+ sortDescriptors: getSortDescriptors(ascending: options.ascending)
192
+ )
193
+
194
+ let correlationSamples = samples.compactMap({ sample in
195
+ return sample as? HKCorrelation
196
+ })
197
+
198
+ let unitMap = try await getUnitMap(correlations: correlationSamples)
199
+
200
+ return correlationSamples.map { correlation in
201
+ let serialized = serializeCorrelationSample(correlation: correlation, unitMap: unitMap)
202
+
203
+ return serialized
204
+ }
158
205
  }
206
+ }
159
207
  }