@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
@@ -32,33 +32,15 @@ func getWorkoutRoutesInternal(
32
32
  workout: HKWorkout
33
33
  ) async throws -> [HKWorkoutRoute]? {
34
34
  let workoutPredicate = HKQuery.predicateForObjects(from: workout)
35
- let samples = try await withCheckedThrowingContinuation {
36
- (continuation: CheckedContinuation<[HKSample], Error>) in
37
- let query = HKAnchoredObjectQuery(
38
- type: HKSeriesType.workoutRoute(),
39
- predicate: workoutPredicate,
40
- anchor: nil,
41
- limit: HKObjectQueryNoLimit
42
- ) {
43
- (_, samples, _, _, error) in
44
-
45
- if let hasError = error {
46
- return continuation.resume(throwing: hasError)
47
-
48
- }
49
-
50
- guard let samples = samples else {
51
- return continuation.resume(
52
- throwing: RuntimeError.error(withMessage: "Empty response")
53
- )
54
- }
55
35
 
56
- continuation.resume(returning: samples)
57
- }
58
- store.execute(query)
59
- }
36
+ let response = try await sampleAnchoredQueryAsync(
37
+ sampleType: HKSeriesType.workoutRoute(),
38
+ limit: Double(HKObjectQueryNoLimit),
39
+ queryAnchor: nil,
40
+ predicate: workoutPredicate
41
+ )
60
42
 
61
- guard let routes = samples as? [HKWorkoutRoute] else {
43
+ guard let routes = response.samples as? [HKWorkoutRoute] else {
62
44
  return nil
63
45
  }
64
46
 
@@ -82,7 +64,7 @@ func getRouteLocations(
82
64
 
83
65
  guard let currentLocationBatch = locationsOrNil else {
84
66
  return continuation.resume(
85
- throwing: RuntimeError.error(withMessage: "Empty response")
67
+ throwing: runtimeErrorWithPrefix("Unexpected empty response")
86
68
  )
87
69
  }
88
70
 
@@ -131,7 +113,7 @@ func getSerializedWorkoutLocations(
131
113
 
132
114
  var allRoutes: [WorkoutRoute] = []
133
115
  guard let _routes = routes else {
134
- throw RuntimeError.error(withMessage: "Unexpected empty response")
116
+ throw runtimeErrorWithPrefix("Unexpected empty response")
135
117
  }
136
118
  for route in _routes {
137
119
  let routeMetadata = serializeMetadata(
@@ -153,12 +135,14 @@ func getSerializedWorkoutLocations(
153
135
  allRoutes.append(
154
136
  WorkoutRoute(
155
137
  locations: routeLocations,
156
- HKMetadataKeySyncIdentifier: routeMetadata.isString(key: "HKMetadataKeySyncIdentifier") ? routeMetadata.getString(
157
- key: "HKMetadataKeySyncIdentifier"
158
- ) : nil,
159
- HKMetadataKeySyncVersion: routeMetadata.isDouble(key: "HKMetadataKeySyncVersion") ? routeMetadata.getDouble(
160
- key: "HKMetadataKeySyncVersion"
161
- ) : nil
138
+ HKMetadataKeySyncIdentifier: routeMetadata.isString(key: "HKMetadataKeySyncIdentifier")
139
+ ? routeMetadata.getString(
140
+ key: "HKMetadataKeySyncIdentifier"
141
+ ) : nil,
142
+ HKMetadataKeySyncVersion: routeMetadata.isDouble(key: "HKMetadataKeySyncVersion")
143
+ ? routeMetadata.getDouble(
144
+ key: "HKMetadataKeySyncVersion"
145
+ ) : nil
162
146
  )
163
147
  )
164
148
  }
@@ -168,34 +152,33 @@ func getSerializedWorkoutLocations(
168
152
  func saveWorkoutRouteInternal(
169
153
  workout: HKWorkout,
170
154
  locations: [LocationForSaving]
171
- ) -> Promise<Bool> {
172
- return Promise.async {
173
- try await withCheckedThrowingContinuation { continuation in
174
- Task {
175
- do {
176
- // create CLLocations and return if locations are empty
177
- let clLocations = mapLocations(from: locations)
178
- let routeBuilder = HKWorkoutRouteBuilder(
179
- healthStore: store,
180
- device: nil
181
- )
182
- try await routeBuilder.insertRouteData(clLocations)
183
- try await routeBuilder.finishRoute(with: workout, metadata: nil)
155
+ ) async throws -> Bool {
156
+ try await withCheckedThrowingContinuation { continuation in
157
+ Task {
158
+ do {
159
+ // create CLLocations and return if locations are empty
160
+ let clLocations = mapLocations(from: locations)
161
+ let routeBuilder = HKWorkoutRouteBuilder(
162
+ healthStore: store,
163
+ device: nil
164
+ )
165
+ try await routeBuilder.insertRouteData(clLocations)
166
+ try await routeBuilder.finishRoute(with: workout, metadata: nil)
184
167
 
185
- return continuation.resume(returning: true)
186
- } catch {
187
- return continuation.resume(throwing: error)
188
- }
168
+ return continuation.resume(returning: true)
169
+ } catch {
170
+ return continuation.resume(throwing: error)
189
171
  }
190
-
191
172
  }
173
+
192
174
  }
193
175
  }
194
176
 
195
177
  class WorkoutProxy: HybridWorkoutProxySpec {
196
-
197
178
  // Return a Promise instead of directly returning the value; wrap async logic.
198
- func getStatistic(quantityType: QuantityTypeIdentifier, unitOverride: String?) throws -> Promise<QueryStatisticsResponse?> {
179
+ func getStatistic(quantityType: QuantityTypeIdentifier, unitOverride: String?) throws -> Promise<
180
+ QueryStatisticsResponse?
181
+ > {
199
182
  return Promise.async {
200
183
  if #available(iOS 16.0, *) {
201
184
  let type = try initializeQuantityType(quantityType.stringValue)
@@ -208,7 +191,7 @@ class WorkoutProxy: HybridWorkoutProxySpec {
208
191
  }
209
192
  }
210
193
 
211
- func getAllStatistics() throws -> Promise<[String: QueryStatisticsResponse]> {
194
+ func getAllStatistics() -> Promise<[String: QueryStatisticsResponse]> {
212
195
  return Promise.async {
213
196
  var result: [String: QueryStatisticsResponse] = [:]
214
197
  if #available(iOS 16.0, *) {
@@ -225,34 +208,58 @@ class WorkoutProxy: HybridWorkoutProxySpec {
225
208
 
226
209
  func toJSON(key: String?) throws -> WorkoutSample {
227
210
  if let key = key, !key.isEmpty {
228
- print("WorkoutProxy does not support toJSON with key: \(key)")
211
+ warnWithPrefix("WorkoutProxy does not support toJSON with key: \(key)")
229
212
  }
230
213
 
231
214
  return WorkoutSample(
232
- uuid: self.uuid,
233
- device: self.device,
234
215
  workoutActivityType: self.workoutActivityType,
235
216
  duration: self.duration,
217
+ events: self.events,
218
+ activities: self.activities,
219
+ metadataAverageMETs: self.metadataAverageMETs,
220
+ metadataElevationAscended: self.metadataElevationAscended,
221
+ metadataElevationDescended: self.metadataElevationDescended,
222
+ metadataIndoorWorkout: self.metadataIndoorWorkout,
223
+ metadataAverageSpeed: self.metadataAverageSpeed,
224
+ metadataMaximumSpeed: self.metadataMaximumSpeed,
225
+ sampleType: self.sampleType,
236
226
  startDate: self.startDate,
237
227
  endDate: self.endDate,
238
- metadata: self.metadata,
228
+ hasUndeterminedDuration: self.hasUndeterminedDuration,
229
+ metadataWeatherCondition: self.metadataWeatherCondition,
230
+ metadataWeatherHumidity: self.metadataWeatherHumidity,
231
+ metadataWeatherTemperature: self.metadataWeatherTemperature,
232
+ metadataInsulinDeliveryReason: self.metadataInsulinDeliveryReason,
233
+ metadataHeartRateMotionContext: self.metadataHeartRateMotionContext,
234
+ uuid: self.uuid,
239
235
  sourceRevision: self.sourceRevision,
240
- events: self.events,
241
- activities: self.activities
236
+ device: self.device,
237
+ metadata: self.metadata,
238
+ metadataExternalUUID: self.metadataExternalUUID,
239
+ metadataTimeZone: self.metadataTimeZone,
240
+ metadataWasUserEntered: self.metadataWasUserEntered,
241
+ metadataDeviceSerialNumber: self.metadataDeviceSerialNumber,
242
+ metadataUdiDeviceIdentifier: self.metadataUdiDeviceIdentifier,
243
+ metadataUdiProductionIdentifier: self.metadataUdiProductionIdentifier,
244
+ metadataDigitalSignature: self.metadataDigitalSignature,
245
+ metadataDeviceName: self.metadataDeviceName,
246
+ metadataDeviceManufacturerName: self.metadataDeviceManufacturerName,
247
+ metadataSyncIdentifier: self.metadataSyncIdentifier,
248
+ metadataSyncVersion: self.metadataSyncVersion,
249
+ metadataWasTakenInLab: self.metadataWasTakenInLab,
250
+ metadataReferenceRangeLowerLimit: self.metadataReferenceRangeLowerLimit,
251
+ metadataReferenceRangeUpperLimit: self.metadataReferenceRangeUpperLimit,
252
+ metadataAlgorithmVersion: self.metadataAlgorithmVersion
242
253
  )
243
254
  }
244
255
 
245
256
  var workoutPredicate: NSPredicate {
246
- get {
247
- let predicate = HKQuery.predicateForObjects(from: self.workout)
248
- return predicate
249
- }
257
+ let predicate = HKQuery.predicateForObjects(from: self.workout)
258
+ return predicate
250
259
  }
251
260
 
252
261
  var uuid: String {
253
- get {
254
- return workout.uuid.uuidString
255
- }
262
+ return workout.uuid.uuidString
256
263
  }
257
264
 
258
265
  var device: Device? {
@@ -272,30 +279,28 @@ class WorkoutProxy: HybridWorkoutProxySpec {
272
279
  }
273
280
 
274
281
  var workoutActivityType: WorkoutActivityType {
275
- get {
276
- if let activityType = WorkoutActivityType.init(
277
- rawValue: Int32(workout.workoutActivityType.rawValue)
278
- ) {
279
- return activityType
280
- }
282
+ if let activityType = WorkoutActivityType.init(
283
+ rawValue: Int32(workout.workoutActivityType.rawValue)
284
+ ) {
285
+ return activityType
286
+ }
281
287
 
282
- print("Unknown workout activity type: \(workout.workoutActivityType.rawValue), falling back to 'other'")
288
+ warnWithPrefix(
289
+ "Unknown workoutActivityType with rawValue: \(workout.workoutActivityType.rawValue), falling back to 'other'"
290
+ )
283
291
 
284
- return WorkoutActivityType.other
285
- }
292
+ return WorkoutActivityType.other
286
293
  }
287
294
 
288
295
  var duration: Quantity {
289
- get {
290
- let quantity = HKQuantity(unit: .second(), doubleValue: workout.duration)
296
+ let quantity = HKQuantity(unit: .second(), doubleValue: workout.duration)
291
297
 
292
- let duration = serializeQuantityTyped(
293
- unit: .second(),
294
- quantity: quantity
295
- )
298
+ let duration = serializeQuantityTyped(
299
+ unit: .second(),
300
+ quantity: quantity
301
+ )
296
302
 
297
- return duration
298
- }
303
+ return duration
299
304
  }
300
305
 
301
306
  var totalDistance: Quantity? {
@@ -309,21 +314,17 @@ class WorkoutProxy: HybridWorkoutProxySpec {
309
314
  }
310
315
 
311
316
  var totalEnergyBurned: Quantity? {
312
- get {
313
- return serializeQuantityTyped(
314
- unit: HKUnit.kilocalorie(),
315
- quantityNullable: workout.totalEnergyBurned
316
- )
317
- }
317
+ return serializeQuantityTyped(
318
+ unit: HKUnit.kilocalorie(),
319
+ quantityNullable: workout.totalEnergyBurned
320
+ )
318
321
  }
319
322
 
320
323
  var totalSwimmingStrokeCount: Quantity? {
321
- get {
322
324
  return serializeQuantityTyped(
323
325
  unit: .count(),
324
326
  quantityNullable: workout.totalSwimmingStrokeCount
325
327
  )
326
- }
327
328
 
328
329
  }
329
330
 
@@ -340,27 +341,148 @@ class WorkoutProxy: HybridWorkoutProxySpec {
340
341
  }
341
342
 
342
343
  var startDate: Date {
343
- get {
344
- return workout.startDate
345
- }
344
+ return workout.startDate
346
345
  }
347
346
 
348
347
  var endDate: Date {
349
- get {
350
- return workout.endDate
351
- }
348
+ return workout.endDate
352
349
  }
353
350
 
354
- var metadata: AnyMap? {
355
- get {
356
- return serializeMetadata(workout.metadata)
357
- }
351
+ var metadata: AnyMap {
352
+ return serializeMetadata(workout.metadata)
358
353
  }
359
354
 
360
- var sourceRevision: SourceRevision? {
361
- get {
362
- return serializeSourceRevision(workout.sourceRevision)
355
+ var sourceRevision: SourceRevision {
356
+ return serializeSourceRevision(workout.sourceRevision)
357
+ }
358
+
359
+ // BaseSample properties
360
+ var sampleType: SampleType {
361
+ return serializeSampleType(workout.sampleType)
362
+ }
363
+
364
+ var hasUndeterminedDuration: Bool {
365
+ return workout.hasUndeterminedDuration
366
+ }
367
+
368
+ // Weather metadata
369
+ var metadataWeatherCondition: WeatherCondition? {
370
+ return serializeWeatherCondition(
371
+ workout.metadata?[HKMetadataKeyWeatherCondition] as? HKWeatherCondition)
372
+ }
373
+
374
+ var metadataWeatherHumidity: Quantity? {
375
+ return serializeUnknownQuantityTyped(
376
+ quantity: workout.metadata?[HKMetadataKeyWeatherHumidity] as? HKQuantity)
377
+ }
378
+
379
+ var metadataWeatherTemperature: Quantity? {
380
+ return serializeUnknownQuantityTyped(
381
+ quantity: workout.metadata?[HKMetadataKeyWeatherTemperature] as? HKQuantity)
382
+ }
383
+
384
+ var metadataInsulinDeliveryReason: InsulinDeliveryReason? {
385
+ return serializeInsulinDeliveryReason(
386
+ workout.metadata?[HKMetadataKeyInsulinDeliveryReason] as? HKInsulinDeliveryReason)
387
+ }
388
+
389
+ var metadataHeartRateMotionContext: HeartRateMotionContext? {
390
+ return serializeHeartRateMotionContext(
391
+ workout.metadata?[HKMetadataKeyHeartRateMotionContext] as? HKHeartRateMotionContext)
392
+ }
393
+
394
+ // Workout-specific metadata
395
+ var metadataAverageMETs: Quantity? {
396
+ return serializeUnknownQuantityTyped(
397
+ quantity: workout.metadata?[HKMetadataKeyAverageMETs] as? HKQuantity)
398
+ }
399
+
400
+ var metadataElevationAscended: Quantity? {
401
+ return serializeUnknownQuantityTyped(
402
+ quantity: workout.metadata?[HKMetadataKeyElevationAscended] as? HKQuantity)
403
+ }
404
+
405
+ var metadataElevationDescended: Quantity? {
406
+ if #available(iOS 18.0, *) {
407
+ return serializeUnknownQuantityTyped(
408
+ quantity: workout.metadata?[HKMetadataKeyElevationDescended] as? HKQuantity)
363
409
  }
410
+ return nil
411
+ }
412
+
413
+ var metadataIndoorWorkout: Bool? {
414
+ return workout.metadata?[HKMetadataKeyIndoorWorkout] as? Bool
415
+ }
416
+
417
+ var metadataAverageSpeed: Quantity? {
418
+ return serializeUnknownQuantityTyped(
419
+ quantity: workout.metadata?[HKMetadataKeyAverageSpeed] as? HKQuantity)
420
+ }
421
+
422
+ var metadataMaximumSpeed: Quantity? {
423
+ return serializeUnknownQuantityTyped(
424
+ quantity: workout.metadata?[HKMetadataKeyMaximumSpeed] as? HKQuantity)
425
+ }
426
+
427
+ // BaseObject metadata
428
+ var metadataExternalUUID: String? {
429
+ return workout.metadata?[HKMetadataKeyExternalUUID] as? String
430
+ }
431
+
432
+ var metadataTimeZone: String? {
433
+ return workout.metadata?[HKMetadataKeyTimeZone] as? String
434
+ }
435
+
436
+ var metadataWasUserEntered: Bool? {
437
+ return workout.metadata?[HKMetadataKeyWasUserEntered] as? Bool
438
+ }
439
+
440
+ var metadataDeviceSerialNumber: String? {
441
+ return workout.metadata?[HKMetadataKeyDeviceSerialNumber] as? String
442
+ }
443
+
444
+ var metadataUdiDeviceIdentifier: String? {
445
+ return workout.metadata?[HKMetadataKeyUDIDeviceIdentifier] as? String
446
+ }
447
+
448
+ var metadataUdiProductionIdentifier: String? {
449
+ return workout.metadata?[HKMetadataKeyUDIProductionIdentifier] as? String
450
+ }
451
+
452
+ var metadataDigitalSignature: String? {
453
+ return workout.metadata?[HKMetadataKeyDigitalSignature] as? String
454
+ }
455
+
456
+ var metadataDeviceName: String? {
457
+ return workout.metadata?[HKMetadataKeyDeviceName] as? String
458
+ }
459
+
460
+ var metadataDeviceManufacturerName: String? {
461
+ return workout.metadata?[HKMetadataKeyDeviceManufacturerName] as? String
462
+ }
463
+
464
+ var metadataSyncIdentifier: String? {
465
+ return workout.metadata?[HKMetadataKeySyncIdentifier] as? String
466
+ }
467
+
468
+ var metadataSyncVersion: Double? {
469
+ return workout.metadata?[HKMetadataKeySyncVersion] as? Double
470
+ }
471
+
472
+ var metadataWasTakenInLab: Bool? {
473
+ return workout.metadata?[HKMetadataKeyWasTakenInLab] as? Bool
474
+ }
475
+
476
+ var metadataReferenceRangeLowerLimit: Double? {
477
+ return workout.metadata?[HKMetadataKeyReferenceRangeLowerLimit] as? Double
478
+ }
479
+
480
+ var metadataReferenceRangeUpperLimit: Double? {
481
+ return workout.metadata?[HKMetadataKeyReferenceRangeUpperLimit] as? Double
482
+ }
483
+
484
+ var metadataAlgorithmVersion: Double? {
485
+ return workout.metadata?[HKMetadataKeyAlgorithmVersion] as? Double
364
486
  }
365
487
 
366
488
  var events: [WorkoutEvent]? {
@@ -375,7 +497,7 @@ class WorkoutProxy: HybridWorkoutProxySpec {
375
497
  endDate: event.dateInterval.end
376
498
  )
377
499
  }
378
- print(
500
+ warnWithPrefix(
379
501
  "Failed to initialize WorkoutEventType with rawValue: \(event.type.rawValue)"
380
502
  )
381
503
  return nil
@@ -411,18 +533,19 @@ class WorkoutProxy: HybridWorkoutProxySpec {
411
533
  if #available(iOS 17.0.0, *) {
412
534
  return try await getWorkoutPlanInternal(workout: self.workout)
413
535
  } else {
414
- throw RuntimeError.error(
415
- withMessage: "Workout plans are only available on iOS 17.0 or later"
416
- )
536
+ warnWithPrefix("Workout plans are only available on iOS 17.0 or later")
537
+ return nil
417
538
  }
418
539
  }
419
540
  }
420
541
 
421
- func saveWorkoutRoute(locations: [LocationForSaving]) throws -> Promise<Bool> {
422
- return saveWorkoutRouteInternal(workout: self.workout, locations: locations)
542
+ func saveWorkoutRoute(locations: [LocationForSaving]) -> Promise<Bool> {
543
+ return Promise.async {
544
+ return try await saveWorkoutRouteInternal(workout: self.workout, locations: locations)
545
+ }
423
546
  }
424
547
 
425
- func getWorkoutRoutes() throws -> Promise<[WorkoutRoute]> {
548
+ func getWorkoutRoutes() -> Promise<[WorkoutRoute]> {
426
549
  return Promise.async {
427
550
  return try await getSerializedWorkoutLocations(workout: self.workout)
428
551
  }