@kingstinct/react-native-healthkit 8.5.0 → 8.7.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 (64) hide show
  1. package/ios/Helpers.swift +145 -0
  2. package/ios/ReactNativeHealthkit.m +19 -0
  3. package/ios/ReactNativeHealthkit.swift +219 -25
  4. package/lib/commonjs/hooks/useHealthkitAuthorization.test.js +1 -2
  5. package/lib/commonjs/hooks/useHealthkitAuthorization.test.js.map +1 -1
  6. package/lib/commonjs/hooks/useIsHealthDataAvailable.test.js +1 -2
  7. package/lib/commonjs/hooks/useIsHealthDataAvailable.test.js.map +1 -1
  8. package/lib/commonjs/index.ios.js +29 -3
  9. package/lib/commonjs/index.ios.js.map +1 -1
  10. package/lib/commonjs/index.js +1 -2
  11. package/lib/commonjs/index.js.map +1 -1
  12. package/lib/commonjs/index.native.js +10 -1
  13. package/lib/commonjs/index.native.js.map +1 -1
  14. package/lib/commonjs/index.web.js +1 -2
  15. package/lib/commonjs/index.web.js.map +1 -1
  16. package/lib/commonjs/native-types.js +727 -5
  17. package/lib/commonjs/native-types.js.map +1 -1
  18. package/lib/commonjs/test-setup.js +4 -1
  19. package/lib/commonjs/test-setup.js.map +1 -1
  20. package/lib/commonjs/utils/deleteWorkoutSample.js +11 -0
  21. package/lib/commonjs/utils/deleteWorkoutSample.js.map +1 -0
  22. package/lib/commonjs/utils/deserializeCategorySample.test.js +1 -2
  23. package/lib/commonjs/utils/deserializeCategorySample.test.js.map +1 -1
  24. package/lib/commonjs/utils/getPreferredUnitsTyped.js +1 -2
  25. package/lib/commonjs/utils/getPreferredUnitsTyped.js.map +1 -1
  26. package/lib/commonjs/utils/saveStateOfMindSample.js +17 -0
  27. package/lib/commonjs/utils/saveStateOfMindSample.js.map +1 -0
  28. package/lib/commonjs/utils/subscribeToChanges.js +1 -2
  29. package/lib/commonjs/utils/subscribeToChanges.js.map +1 -1
  30. package/lib/commonjs/utils/workoutSessionMirroringStartHandler.js +17 -0
  31. package/lib/commonjs/utils/workoutSessionMirroringStartHandler.js.map +1 -0
  32. package/lib/module/index.ios.js +7 -1
  33. package/lib/module/index.ios.js.map +1 -1
  34. package/lib/module/index.native.js +7 -1
  35. package/lib/module/index.native.js.map +1 -1
  36. package/lib/module/native-types.js +727 -4
  37. package/lib/module/native-types.js.map +1 -1
  38. package/lib/module/test-setup.js +4 -1
  39. package/lib/module/test-setup.js.map +1 -1
  40. package/lib/module/utils/deleteWorkoutSample.js +4 -0
  41. package/lib/module/utils/deleteWorkoutSample.js.map +1 -0
  42. package/lib/module/utils/saveStateOfMindSample.js +10 -0
  43. package/lib/module/utils/saveStateOfMindSample.js.map +1 -0
  44. package/lib/module/utils/subscribeToChanges.js.map +1 -1
  45. package/lib/module/utils/workoutSessionMirroringStartHandler.js +11 -0
  46. package/lib/module/utils/workoutSessionMirroringStartHandler.js.map +1 -0
  47. package/lib/typescript/src/index.ios.d.ts +14 -8
  48. package/lib/typescript/src/index.native.d.ts +2 -2
  49. package/lib/typescript/src/native-types.d.ts +177 -135
  50. package/lib/typescript/src/utils/deleteWorkoutSample.d.ts +3 -0
  51. package/lib/typescript/src/utils/ensureUnit.d.ts +1 -1
  52. package/lib/typescript/src/utils/queryStateOfMindSamples.d.ts +4 -4
  53. package/lib/typescript/src/utils/queryStatisticsForQuantity.d.ts +1 -1
  54. package/lib/typescript/src/utils/saveStateOfMindSample.d.ts +11 -0
  55. package/lib/typescript/src/utils/workoutSessionMirroringStartHandler.d.ts +8 -0
  56. package/package.json +19 -19
  57. package/src/index.ios.tsx +9 -0
  58. package/src/index.native.tsx +9 -0
  59. package/src/native-types.ts +61 -3
  60. package/src/test-setup.ts +3 -0
  61. package/src/utils/deleteWorkoutSample.ts +7 -0
  62. package/src/utils/saveStateOfMindSample.ts +38 -0
  63. package/src/utils/subscribeToChanges.ts +1 -1
  64. package/src/utils/workoutSessionMirroringStartHandler.ts +11 -0
package/ios/Helpers.swift CHANGED
@@ -71,6 +71,14 @@ func sampleTypeFromString(typeIdentifier: String) -> HKSampleType? {
71
71
  }
72
72
  }
73
73
 
74
+ #if compiler(>=6)
75
+ if #available(iOS 18, *) {
76
+ if typeIdentifier == HKStateOfMindTypeIdentifier {
77
+ return HKObjectType.stateOfMindType()
78
+ }
79
+ }
80
+ #endif
81
+
74
82
  if typeIdentifier == HKWorkoutTypeIdentifier {
75
83
  return HKSampleType.workoutType()
76
84
  }
@@ -247,3 +255,140 @@ func parseWorkoutConfiguration(_ dict: NSDictionary) -> HKWorkoutConfiguration {
247
255
 
248
256
  return configuration
249
257
  }
258
+
259
+ #if compiler(>=6)
260
+ @available(iOS 18.0, *)
261
+ extension HKStateOfMind.Kind: @retroactive CaseIterable, @retroactive CustomStringConvertible {
262
+ public var description: String {
263
+ switch self {
264
+ case .dailyMood: "Daily mood"
265
+ case .momentaryEmotion: "Momentary Emotion"
266
+ @unknown default: "Unknown"
267
+ }
268
+ }
269
+
270
+ public static var allCases: [HKStateOfMind.Kind] {
271
+ [.dailyMood, .momentaryEmotion]
272
+ }
273
+
274
+ static func convertToStateOfMindKind(int: Int) -> HKStateOfMind.Kind {
275
+ // default to .dailyMood if we receive an int out of bounds
276
+ return HKStateOfMind.Kind(rawValue: int) ?? .dailyMood
277
+ }
278
+ }
279
+ #endif
280
+
281
+ #if compiler(>=6)
282
+ @available(iOS 18.0, *)
283
+ extension HKStateOfMind.Label: @retroactive CaseIterable, @retroactive CustomStringConvertible {
284
+ public var description: String {
285
+ switch self {
286
+ case .amazed: "Amazed"
287
+ case .amused: "Amused"
288
+ case .angry: "Angry"
289
+ case .anxious: "Anxious"
290
+ case .ashamed: "Ashamed"
291
+ case .brave: "Brave"
292
+ case .calm: "Calm"
293
+ case .content: "Content"
294
+ case .disappointed: "Disappointed"
295
+ case .discouraged: "Discouraged"
296
+ case .disgusted: "Disgusted"
297
+ case .embarrassed: "Embarrassed"
298
+ case .excited: "Excited"
299
+ case .frustrated: "Frustrated"
300
+ case .grateful: "Grateful"
301
+ case .guilty: "Guilty"
302
+ case .happy: "Happy"
303
+ case .hopeless: "Hopeless"
304
+ case .irritated: "Irritated"
305
+ case .jealous: "Jealous"
306
+ case .joyful: "Joyful"
307
+ case .lonely: "Lonely"
308
+ case .passionate: "Passionate"
309
+ case .peaceful: "Peaceful"
310
+ case .proud: "Proud"
311
+ case .relieved: "Relieved"
312
+ case .sad: "Sad"
313
+ case .scared: "Scared"
314
+ case .stressed: "Stressed"
315
+ case .surprised: "Surprised"
316
+ case .worried: "Worried"
317
+ case .annoyed: "Annoyed"
318
+ case .confident: "Confident"
319
+ case .drained: "Drained"
320
+ case .hopeful: "Hopeful"
321
+ case .indifferent: "Indifferent"
322
+ case .overwhelmed: "Overwhelmed"
323
+ case .satisfied: "Satisfied"
324
+ @unknown default: "Unknown"
325
+ }
326
+ }
327
+
328
+ public static var allCases: [HKStateOfMind.Label] {
329
+ [
330
+ .amazed, .amused, .angry, .anxious, .ashamed,
331
+ .brave, .calm, .content, .disappointed, .discouraged,
332
+ .disgusted, .embarrassed, .excited, .frustrated, .grateful,
333
+ .guilty, .happy, .hopeless, .irritated, .jealous,
334
+ .joyful, .lonely, .passionate, .peaceful, .proud,
335
+ .relieved, .sad, .scared, .stressed, .surprised,
336
+ .worried, .annoyed, .confident, .drained, .hopeful,
337
+ .indifferent, .overwhelmed, .satisfied
338
+ ]
339
+ }
340
+
341
+ static func convertToStateOfMindLabels(intArray: [Int]) -> [HKStateOfMind.Label] {
342
+ return intArray.compactMap { index in
343
+ // if any int are out of bounds return nil instead of crashing
344
+ guard index >= 0 && index < HKStateOfMind.Label.allCases.count else { return nil }
345
+ return HKStateOfMind.Label(rawValue: index)
346
+ }
347
+ }
348
+ }
349
+ #endif
350
+
351
+ #if compiler(>=6)
352
+ @available(iOS 18.0, *)
353
+ extension HKStateOfMind.Association: @retroactive CaseIterable, @retroactive CustomStringConvertible {
354
+ public var description: String {
355
+ switch self {
356
+ case .community: "Community"
357
+ case .currentEvents: "Current Events"
358
+ case .dating: "Dating"
359
+ case .education: "Education"
360
+ case .family: "Family"
361
+ case .fitness: "Fitness"
362
+ case .friends: "Friends"
363
+ case .health: "Health"
364
+ case .hobbies: "Hobbies"
365
+ case .identity: "Identity"
366
+ case .money: "Money"
367
+ case .partner: "Partner"
368
+ case .selfCare: "Self Care"
369
+ case .spirituality: "Spirituality"
370
+ case .tasks: "Tasks"
371
+ case .travel: "Travel"
372
+ case .work: "Work"
373
+ case .weather: "Weather"
374
+ @unknown default: "Unknown"
375
+ }
376
+ }
377
+
378
+ public static var allCases: [HKStateOfMind.Association] {
379
+ [
380
+ .community, .currentEvents, .dating, .education, .family,
381
+ .fitness, .friends, .health, .hobbies, .identity,
382
+ .money, .partner, .selfCare, .spirituality, .tasks,
383
+ .travel, .work, .weather
384
+ ]
385
+ }
386
+
387
+ static func convertToStateOfMindAssociations(intArray: [Int]) -> [HKStateOfMind.Association] {
388
+ return intArray.compactMap { index in
389
+ guard index >= 0 && index < HKStateOfMind.Association.allCases.count else { return nil }
390
+ return HKStateOfMind.Association(rawValue: index)
391
+ }
392
+ }
393
+ }
394
+ #endif
@@ -75,6 +75,11 @@ RCT_EXTERN_METHOD(deleteSamples:(NSString)typeIdentifier
75
75
  reject:(RCTPromiseRejectBlock)reject
76
76
  )
77
77
 
78
+ RCT_EXTERN_METHOD(deleteWorkoutSample:(NSString)uuid
79
+ resolve:(RCTPromiseResolveBlock)resolve
80
+ reject:(RCTPromiseRejectBlock)reject
81
+ )
82
+
78
83
  RCT_EXTERN_METHOD(subscribeToObserverQuery:(NSString)typeIdentifier
79
84
  resolve:(RCTPromiseResolveBlock)resolve
80
85
  reject:(RCTPromiseRejectBlock)reject
@@ -88,6 +93,16 @@ RCT_EXTERN_METHOD(saveCategorySample:(NSString)typeIdentifier
88
93
  resolve:(RCTPromiseResolveBlock)resolve
89
94
  reject:(RCTPromiseRejectBlock)reject
90
95
  )
96
+ RCT_EXTERN_METHOD(saveStateOfMindSample:(NSDate)date
97
+ kind:(NSInteger)kind
98
+ valence:(double)valence
99
+ labels:(NSArray)labels
100
+ associations:(NSArray)associations
101
+ metadata:(NSDictionary)metadata
102
+ resolve:(RCTPromiseResolveBlock)resolve
103
+ reject:(RCTPromiseRejectBlock)reject
104
+ )
105
+
91
106
 
92
107
  RCT_EXTERN_METHOD(queryWorkoutSamplesWithAnchor:(NSString)energyUnitString
93
108
  distanceUnitString:(NSString)distanceUnitString
@@ -253,4 +268,8 @@ RCT_EXTERN_METHOD(queryStateOfMindSamples:(NSDate)from
253
268
  resolve:(RCTPromiseResolveBlock)resolve
254
269
  reject:(RCTPromiseRejectBlock)reject)
255
270
 
271
+ RCT_EXTERN_METHOD(workoutSessionMirroringStartHandler:(RCTPromiseResolveBlock)resolve
272
+ reject:(RCTPromiseRejectBlock)reject
273
+ )
274
+
256
275
  @end
@@ -13,6 +13,15 @@ class ReactNativeHealthkit: RCTEventEmitter {
13
13
  var _dateFormatter: ISO8601DateFormatter
14
14
  var _hasListeners = false
15
15
 
16
+ #if os(iOS)
17
+ @available(iOS 17.0, *)
18
+ var _workoutSession: HKWorkoutSession? {
19
+ get { return __session as? HKWorkoutSession }
20
+ set { __session = newValue }
21
+ }
22
+ private var __session: Any?
23
+ #endif
24
+
16
25
  override init() {
17
26
  self._runningQueries = [String: HKQuery]()
18
27
  self._dateFormatter = ISO8601DateFormatter()
@@ -335,6 +344,30 @@ class ReactNativeHealthkit: RCTEventEmitter {
335
344
  }
336
345
  }
337
346
 
347
+ @objc(deleteWorkoutSample:resolve:reject:)
348
+ func deleteWorkoutSample(
349
+ uuid: String,
350
+ resolve: @escaping RCTPromiseResolveBlock,
351
+ reject: @escaping RCTPromiseRejectBlock
352
+ ) {
353
+ guard let store = _store else {
354
+ return reject(INIT_ERROR, INIT_ERROR_MESSAGE, nil)
355
+ }
356
+
357
+ guard let workoutUUID = UUID.init(uuidString: uuid) else {
358
+ return reject(TYPE_IDENTIFIER_ERROR, "Failed to initialize UUID from string", nil)
359
+ }
360
+
361
+ let samplePredicate = HKQuery.predicateForObject(with: workoutUUID)
362
+
363
+ store.deleteObjects(of: HKObjectType.workoutType(), predicate: samplePredicate) { (success: Bool, _: Int, error: Error?) in
364
+ guard let err = error else {
365
+ return resolve(success)
366
+ }
367
+ reject(GENERIC_ERROR, err.localizedDescription, error)
368
+ }
369
+ }
370
+
338
371
  @objc(saveCorrelationSample:samples:start:end:metadata:resolve:reject:)
339
372
  func saveCorrelationSample(
340
373
  typeIdentifier: String,
@@ -646,6 +679,52 @@ class ReactNativeHealthkit: RCTEventEmitter {
646
679
  }
647
680
  }
648
681
 
682
+ @objc(saveStateOfMindSample:kind:valence:labels:associations:metadata:resolve:reject:)
683
+ func saveStateOfMindSample(
684
+ _ date: Date,
685
+ kind: Int,
686
+ valence: Double, // non-integer number, ie 0.5
687
+ labels: [Int],
688
+ associations: [Int],
689
+ metadata: NSDictionary,
690
+ resolve: @escaping RCTPromiseResolveBlock,
691
+ reject: @escaping RCTPromiseRejectBlock
692
+ ) {
693
+ guard let store = _store else {
694
+ return reject(INIT_ERROR, INIT_ERROR_MESSAGE, nil)
695
+ }
696
+
697
+ #if compiler(>=6)
698
+ if #available(iOS 18.0, *) {
699
+
700
+ // ensures valence does not exceed -1.0 and 1.0
701
+ let safeValence = max(-1.0, min(1.0, valence))
702
+
703
+ let sample = HKStateOfMind(
704
+ date: date,
705
+ kind: HKStateOfMind.Kind.convertToStateOfMindKind(int: kind),
706
+ valence: safeValence,
707
+ labels: HKStateOfMind.Label.convertToStateOfMindLabels(intArray: labels),
708
+ associations: HKStateOfMind.Association.convertToStateOfMindAssociations(intArray: associations),
709
+ metadata: metadata as? [String: Any]
710
+ )
711
+
712
+ store.save(sample) { (success: Bool, error: Error?) in
713
+ guard let err = error else {
714
+ return resolve(success)
715
+ }
716
+ reject(GENERIC_ERROR, err.localizedDescription, error)
717
+ }
718
+
719
+ } else {
720
+ reject("STATE_OF_MIND_ERROR", "State of Mind features require iOS 18.0 or later", nil)
721
+ }
722
+ #else
723
+ reject(
724
+ "STATE_OF_MIND_ERROR", "State of Mind features require Xcode 16 or later to compile", nil)
725
+ #endif
726
+ }
727
+
649
728
  @objc(saveCategorySample:value:start:end:metadata:resolve:reject:)
650
729
  func saveCategorySample(
651
730
  typeIdentifier: String,
@@ -683,7 +762,13 @@ class ReactNativeHealthkit: RCTEventEmitter {
683
762
  }
684
763
 
685
764
  override func supportedEvents() -> [String]! {
686
- return ["onChange"]
765
+ return [
766
+ "onChange",
767
+ "onRemoteWorkoutStateChange",
768
+ "onRemoteWorkoutError",
769
+ "onRemoteWorkoutDataReceived",
770
+ "onRemoteWorkoutEventReceived"
771
+ ]
687
772
  }
688
773
 
689
774
  @objc(enableBackgroundDelivery:updateFrequency:resolve:reject:)
@@ -779,7 +864,7 @@ class ReactNativeHealthkit: RCTEventEmitter {
779
864
  ) {
780
865
  if error == nil {
781
866
  DispatchQueue.main.async {
782
- if self.bridge != nil && self.bridge.isValid {
867
+ if self._hasListeners {
783
868
  self.sendEvent(
784
869
  withName: "onChange",
785
870
  body: [
@@ -2138,29 +2223,6 @@ class ReactNativeHealthkit: RCTEventEmitter {
2138
2223
  }
2139
2224
  }
2140
2225
 
2141
- @available(iOS 17.0.0, *)
2142
- @objc(startWatchAppWithWorkoutConfiguration:resolve:reject:)
2143
- func startWatchAppWithWorkoutConfiguration(
2144
- _ workoutConfiguration: NSDictionary,
2145
- resolve: @escaping RCTPromiseResolveBlock,
2146
- reject: @escaping RCTPromiseRejectBlock
2147
- ) {
2148
- guard let store = _store else {
2149
- return reject(INIT_ERROR, INIT_ERROR_MESSAGE, nil)
2150
- }
2151
-
2152
- let configuration = parseWorkoutConfiguration(workoutConfiguration)
2153
-
2154
- store.startWatchApp(with: configuration) { success, error in
2155
- if let error {
2156
- reject(INIT_ERROR, INIT_ERROR_MESSAGE, error)
2157
- return
2158
- }
2159
-
2160
- resolve(success)
2161
- }
2162
- }
2163
-
2164
2226
  @objc(queryStateOfMindSamples:to:limit:ascending:resolve:reject:)
2165
2227
  func queryStateOfMindSamples(
2166
2228
  from: Date,
@@ -2253,4 +2315,136 @@ class ReactNativeHealthkit: RCTEventEmitter {
2253
2315
  "STATE_OF_MIND_ERROR", "State of Mind features require Xcode 16 or later to compile", nil)
2254
2316
  #endif
2255
2317
  }
2318
+
2319
+ @available(iOS 17.0.0, *)
2320
+ @objc(startWatchAppWithWorkoutConfiguration:resolve:reject:)
2321
+ func startWatchAppWithWorkoutConfiguration(
2322
+ _ workoutConfiguration: NSDictionary,
2323
+ resolve: @escaping RCTPromiseResolveBlock,
2324
+ reject: @escaping RCTPromiseRejectBlock
2325
+ ) {
2326
+ guard let store = _store else {
2327
+ return reject(INIT_ERROR, INIT_ERROR_MESSAGE, nil)
2328
+ }
2329
+
2330
+ let configuration = parseWorkoutConfiguration(workoutConfiguration)
2331
+
2332
+ store.startWatchApp(with: configuration) { success, error in
2333
+ if let error {
2334
+ reject(GENERIC_ERROR, error.localizedDescription, error)
2335
+ return
2336
+ }
2337
+
2338
+ resolve(success)
2339
+ }
2340
+ }
2341
+
2342
+ @available(iOS 17.0.0, *)
2343
+ @objc(workoutSessionMirroringStartHandler:reject:)
2344
+ func workoutSessionMirroringStartHandler(
2345
+ resolve: @escaping RCTPromiseResolveBlock,
2346
+ reject: @escaping RCTPromiseRejectBlock
2347
+ ) {
2348
+ guard let store = _store else {
2349
+ return reject(INIT_ERROR, INIT_ERROR_MESSAGE, nil)
2350
+ }
2351
+
2352
+ store.workoutSessionMirroringStartHandler = { [weak self] mirroringSession in
2353
+ self?._workoutSession = mirroringSession
2354
+ self?._workoutSession?.delegate = self
2355
+ }
2356
+
2357
+ resolve(true)
2358
+ }
2359
+
2360
+ }
2361
+
2362
+ // MARK: - HKWorkoutSessionDelegate
2363
+
2364
+ extension ReactNativeHealthkit: HKWorkoutSessionDelegate {
2365
+
2366
+ @available(iOS 17.0.0, *)
2367
+ func workoutSession(
2368
+ _ workoutSession: HKWorkoutSession,
2369
+ didChangeTo toState: HKWorkoutSessionState,
2370
+ from fromState: HKWorkoutSessionState,
2371
+ date: Date
2372
+ ) {
2373
+ Task { @MainActor [weak self] in
2374
+ guard let self = self else { return }
2375
+
2376
+ if self._hasListeners {
2377
+ self.sendEvent(withName: "onRemoteWorkoutStateChange", body: [
2378
+ "toState": toState.rawValue,
2379
+ "fromState": fromState.rawValue,
2380
+ "date": self._dateFormatter.string(from: date)
2381
+ ])
2382
+ }
2383
+ }
2384
+ }
2385
+
2386
+ @available(iOS 17.0.0, *)
2387
+ func workoutSession(_ workoutSession: HKWorkoutSession, didFailWithError error: any Error) {
2388
+ Task { @MainActor [weak self] in
2389
+ guard let self = self else { return }
2390
+
2391
+ if self._hasListeners {
2392
+ self.sendEvent(
2393
+ withName: "onRemoteWorkoutError",
2394
+ body: ["error": error.localizedDescription]
2395
+ )
2396
+ }
2397
+ }
2398
+ }
2399
+
2400
+ @available(iOS 17.0.0, *)
2401
+ func workoutSession(
2402
+ _ workoutSession: HKWorkoutSession,
2403
+ didReceiveDataFromRemoteWorkoutSession data: [Data]
2404
+ ) {
2405
+ Task { [weak self] in
2406
+ guard let self = self else { return }
2407
+
2408
+ do {
2409
+ let serializedData = try data.compactMap { dataItem -> [String: Any]? in
2410
+ guard let json = try? JSONSerialization.jsonObject(with: dataItem) as? [String: Any] else {
2411
+ return nil
2412
+ }
2413
+ return json
2414
+ }
2415
+
2416
+ await MainActor.run { [weak self] in
2417
+ guard let self = self else { return }
2418
+
2419
+ if self._hasListeners {
2420
+ self.sendEvent(
2421
+ withName: "onRemoteWorkoutDataReceived",
2422
+ body: ["data": serializedData]
2423
+ )
2424
+ }
2425
+ }
2426
+ } catch {
2427
+ await MainActor.run { [weak self] in
2428
+ guard let self = self else { return }
2429
+
2430
+ if self._hasListeners {
2431
+ self.sendEvent(
2432
+ withName: "onRemoteWorkoutError",
2433
+ body: ["error": error.localizedDescription]
2434
+ )
2435
+ }
2436
+ }
2437
+ }
2438
+ }
2439
+ }
2440
+
2441
+ @available(iOS 17.0, *)
2442
+ func workoutSession(_ workoutSession: HKWorkoutSession, didGenerate event: HKWorkoutEvent) {
2443
+ if self._hasListeners {
2444
+ self.sendEvent(
2445
+ withName: "onRemoteWorkoutEventReceived",
2446
+ body: ["type": event.type.rawValue]
2447
+ )
2448
+ }
2449
+ }
2256
2450
  }
@@ -3,8 +3,7 @@
3
3
  var _reactNative = require("@testing-library/react-native");
4
4
  var _testUtils = _interopRequireDefault(require("../test-utils"));
5
5
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
6
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
7
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
6
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
8
7
  describe('useHealthkitAuthorization', () => {
9
8
  let NativeTypes;
10
9
  let useHealthkitAuthorization;
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_testUtils","_interopRequireDefault","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","_interopRequireWildcard","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","describe","NativeTypes","useHealthkitAuthorization","beforeAll","Promise","resolve","then","test","HKAuthorizationRequestStatus","HKCategoryTypeIdentifier","Native","jest","spyOn","mockReturnValue","shouldRequest","result","renderHook","abdominalCramps","waitForNextUpdate","expect","current","toBe","spy","unnecessary","retVal","act"],"sources":["useHealthkitAuthorization.test.ts"],"sourcesContent":["import { renderHook, act } from '@testing-library/react-native'\n\nimport waitForNextUpdate from '../test-utils'\n\ndescribe('useHealthkitAuthorization', () => {\n let NativeTypes: typeof import('../native-types')\n let useHealthkitAuthorization: typeof import('./useHealthkitAuthorization').default\n beforeAll(async () => {\n NativeTypes = await import('../native-types')\n useHealthkitAuthorization = (await import('./useHealthkitAuthorization')).default\n })\n\n test('should return shouldRequest', async () => {\n const { HKAuthorizationRequestStatus, HKCategoryTypeIdentifier, default: Native } = NativeTypes\n\n jest.spyOn(Native, 'getRequestStatusForAuthorization').mockReturnValue(Promise.resolve(HKAuthorizationRequestStatus.shouldRequest))\n\n const { result } = renderHook(() => useHealthkitAuthorization([HKCategoryTypeIdentifier.abdominalCramps]))\n\n await waitForNextUpdate()\n\n expect(result.current[0]).toBe(HKAuthorizationRequestStatus.shouldRequest)\n })\n\n test('should request permissions', async () => {\n const { HKAuthorizationRequestStatus, HKCategoryTypeIdentifier, default: Native } = NativeTypes\n\n const spy = jest.spyOn(Native, 'getRequestStatusForAuthorization').mockReturnValue(Promise.resolve(HKAuthorizationRequestStatus.shouldRequest))\n jest.spyOn(Native, 'requestAuthorization').mockReturnValue(Promise.resolve(true))\n\n const { result } = renderHook(() => useHealthkitAuthorization([HKCategoryTypeIdentifier.abdominalCramps]))\n\n await waitForNextUpdate()\n\n spy.mockReturnValue(Promise.resolve(HKAuthorizationRequestStatus.unnecessary))\n\n let retVal: typeof HKAuthorizationRequestStatus | undefined\n await act(async () => {\n const r = await result.current[1]() as unknown as typeof HKAuthorizationRequestStatus\n retVal = r\n })\n\n expect(result.current[0]).toBe(HKAuthorizationRequestStatus.unnecessary)\n expect(retVal).toBe(HKAuthorizationRequestStatus.unnecessary)\n })\n\n test('should return unnecessary', async () => {\n const { HKAuthorizationRequestStatus, HKCategoryTypeIdentifier, default: Native } = NativeTypes\n\n jest.spyOn(Native, 'getRequestStatusForAuthorization').mockReturnValue(Promise.resolve(HKAuthorizationRequestStatus.unnecessary))\n\n const { result } = renderHook(() => useHealthkitAuthorization([HKCategoryTypeIdentifier.abdominalCramps]))\n\n await waitForNextUpdate()\n\n expect(result.current[0]).toBe(HKAuthorizationRequestStatus.unnecessary)\n })\n\n test('should return null before initalizing', async () => {\n const { HKCategoryTypeIdentifier } = NativeTypes\n\n const { result } = renderHook(() => useHealthkitAuthorization([HKCategoryTypeIdentifier.abdominalCramps]))\n\n expect(result.current[0]).toBe(null)\n\n await waitForNextUpdate()\n })\n})\n"],"mappings":";;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAC,sBAAA,CAAAF,OAAA;AAA6C,SAAAE,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,yBAAAH,CAAA,6BAAAI,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAD,wBAAA,YAAAA,CAAAH,CAAA,WAAAA,CAAA,GAAAM,CAAA,GAAAD,CAAA,KAAAL,CAAA;AAAA,SAAAO,wBAAAP,CAAA,EAAAK,CAAA,SAAAA,CAAA,IAAAL,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAE,OAAA,EAAAF,CAAA,QAAAM,CAAA,GAAAH,wBAAA,CAAAE,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAE,GAAA,CAAAR,CAAA,UAAAM,CAAA,CAAAG,GAAA,CAAAT,CAAA,OAAAU,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAhB,CAAA,oBAAAgB,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAlB,CAAA,EAAAgB,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAf,CAAA,EAAAgB,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAhB,CAAA,CAAAgB,CAAA,YAAAN,CAAA,CAAAR,OAAA,GAAAF,CAAA,EAAAM,CAAA,IAAAA,CAAA,CAAAc,GAAA,CAAApB,CAAA,EAAAU,CAAA,GAAAA,CAAA;AAE7CW,QAAQ,CAAC,2BAA2B,EAAE,MAAM;EAC1C,IAAIC,WAA6C;EACjD,IAAIC,yBAA+E;EACnFC,SAAS,CAAC,YAAY;IACpBF,WAAW,GAAG,MAAAG,OAAA,CAAAC,OAAA,GAAAC,IAAA,OAAApB,uBAAA,CAAAV,OAAA,CAAa,iBAAiB,GAAC;IAC7C0B,yBAAyB,GAAG,CAAC,MAAAE,OAAA,CAAAC,OAAA,GAAAC,IAAA,OAAApB,uBAAA,CAAAV,OAAA,CAAa,6BAA6B,GAAC,EAAEK,OAAO;EACnF,CAAC,CAAC;EAEF0B,IAAI,CAAC,6BAA6B,EAAE,YAAY;IAC9C,MAAM;MAAEC,4BAA4B;MAAEC,wBAAwB;MAAE5B,OAAO,EAAE6B;IAAO,CAAC,GAAGT,WAAW;IAE/FU,IAAI,CAACC,KAAK,CAACF,MAAM,EAAE,kCAAkC,CAAC,CAACG,eAAe,CAACT,OAAO,CAACC,OAAO,CAACG,4BAA4B,CAACM,aAAa,CAAC,CAAC;IAEnI,MAAM;MAAEC;IAAO,CAAC,GAAG,IAAAC,uBAAU,EAAC,MAAMd,yBAAyB,CAAC,CAACO,wBAAwB,CAACQ,eAAe,CAAC,CAAC,CAAC;IAE1G,MAAM,IAAAC,kBAAiB,EAAC,CAAC;IAEzBC,MAAM,CAACJ,MAAM,CAACK,OAAO,CAAC,CAAC,CAAC,CAAC,CAACC,IAAI,CAACb,4BAA4B,CAACM,aAAa,CAAC;EAC5E,CAAC,CAAC;EAEFP,IAAI,CAAC,4BAA4B,EAAE,YAAY;IAC7C,MAAM;MAAEC,4BAA4B;MAAEC,wBAAwB;MAAE5B,OAAO,EAAE6B;IAAO,CAAC,GAAGT,WAAW;IAE/F,MAAMqB,GAAG,GAAGX,IAAI,CAACC,KAAK,CAACF,MAAM,EAAE,kCAAkC,CAAC,CAACG,eAAe,CAACT,OAAO,CAACC,OAAO,CAACG,4BAA4B,CAACM,aAAa,CAAC,CAAC;IAC/IH,IAAI,CAACC,KAAK,CAACF,MAAM,EAAE,sBAAsB,CAAC,CAACG,eAAe,CAACT,OAAO,CAACC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjF,MAAM;MAAEU;IAAO,CAAC,GAAG,IAAAC,uBAAU,EAAC,MAAMd,yBAAyB,CAAC,CAACO,wBAAwB,CAACQ,eAAe,CAAC,CAAC,CAAC;IAE1G,MAAM,IAAAC,kBAAiB,EAAC,CAAC;IAEzBI,GAAG,CAACT,eAAe,CAACT,OAAO,CAACC,OAAO,CAACG,4BAA4B,CAACe,WAAW,CAAC,CAAC;IAE9E,IAAIC,MAAuD;IAC3D,MAAM,IAAAC,gBAAG,EAAC,YAAY;MACpB,MAAMzC,CAAC,GAAG,MAAM+B,MAAM,CAACK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAmD;MACrFI,MAAM,GAAGxC,CAAC;IACZ,CAAC,CAAC;IAEFmC,MAAM,CAACJ,MAAM,CAACK,OAAO,CAAC,CAAC,CAAC,CAAC,CAACC,IAAI,CAACb,4BAA4B,CAACe,WAAW,CAAC;IACxEJ,MAAM,CAACK,MAAM,CAAC,CAACH,IAAI,CAACb,4BAA4B,CAACe,WAAW,CAAC;EAC/D,CAAC,CAAC;EAEFhB,IAAI,CAAC,2BAA2B,EAAE,YAAY;IAC5C,MAAM;MAAEC,4BAA4B;MAAEC,wBAAwB;MAAE5B,OAAO,EAAE6B;IAAO,CAAC,GAAGT,WAAW;IAE/FU,IAAI,CAACC,KAAK,CAACF,MAAM,EAAE,kCAAkC,CAAC,CAACG,eAAe,CAACT,OAAO,CAACC,OAAO,CAACG,4BAA4B,CAACe,WAAW,CAAC,CAAC;IAEjI,MAAM;MAAER;IAAO,CAAC,GAAG,IAAAC,uBAAU,EAAC,MAAMd,yBAAyB,CAAC,CAACO,wBAAwB,CAACQ,eAAe,CAAC,CAAC,CAAC;IAE1G,MAAM,IAAAC,kBAAiB,EAAC,CAAC;IAEzBC,MAAM,CAACJ,MAAM,CAACK,OAAO,CAAC,CAAC,CAAC,CAAC,CAACC,IAAI,CAACb,4BAA4B,CAACe,WAAW,CAAC;EAC1E,CAAC,CAAC;EAEFhB,IAAI,CAAC,uCAAuC,EAAE,YAAY;IACxD,MAAM;MAAEE;IAAyB,CAAC,GAAGR,WAAW;IAEhD,MAAM;MAAEc;IAAO,CAAC,GAAG,IAAAC,uBAAU,EAAC,MAAMd,yBAAyB,CAAC,CAACO,wBAAwB,CAACQ,eAAe,CAAC,CAAC,CAAC;IAE1GE,MAAM,CAACJ,MAAM,CAACK,OAAO,CAAC,CAAC,CAAC,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IAEpC,MAAM,IAAAH,kBAAiB,EAAC,CAAC;EAC3B,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_testUtils","_interopRequireDefault","e","__esModule","default","_interopRequireWildcard","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","describe","NativeTypes","useHealthkitAuthorization","beforeAll","Promise","resolve","then","test","HKAuthorizationRequestStatus","HKCategoryTypeIdentifier","Native","jest","spyOn","mockReturnValue","shouldRequest","result","renderHook","abdominalCramps","waitForNextUpdate","expect","current","toBe","spy","unnecessary","retVal","act"],"sources":["useHealthkitAuthorization.test.ts"],"sourcesContent":["import { renderHook, act } from '@testing-library/react-native'\n\nimport waitForNextUpdate from '../test-utils'\n\ndescribe('useHealthkitAuthorization', () => {\n let NativeTypes: typeof import('../native-types')\n let useHealthkitAuthorization: typeof import('./useHealthkitAuthorization').default\n beforeAll(async () => {\n NativeTypes = await import('../native-types')\n useHealthkitAuthorization = (await import('./useHealthkitAuthorization')).default\n })\n\n test('should return shouldRequest', async () => {\n const { HKAuthorizationRequestStatus, HKCategoryTypeIdentifier, default: Native } = NativeTypes\n\n jest.spyOn(Native, 'getRequestStatusForAuthorization').mockReturnValue(Promise.resolve(HKAuthorizationRequestStatus.shouldRequest))\n\n const { result } = renderHook(() => useHealthkitAuthorization([HKCategoryTypeIdentifier.abdominalCramps]))\n\n await waitForNextUpdate()\n\n expect(result.current[0]).toBe(HKAuthorizationRequestStatus.shouldRequest)\n })\n\n test('should request permissions', async () => {\n const { HKAuthorizationRequestStatus, HKCategoryTypeIdentifier, default: Native } = NativeTypes\n\n const spy = jest.spyOn(Native, 'getRequestStatusForAuthorization').mockReturnValue(Promise.resolve(HKAuthorizationRequestStatus.shouldRequest))\n jest.spyOn(Native, 'requestAuthorization').mockReturnValue(Promise.resolve(true))\n\n const { result } = renderHook(() => useHealthkitAuthorization([HKCategoryTypeIdentifier.abdominalCramps]))\n\n await waitForNextUpdate()\n\n spy.mockReturnValue(Promise.resolve(HKAuthorizationRequestStatus.unnecessary))\n\n let retVal: typeof HKAuthorizationRequestStatus | undefined\n await act(async () => {\n const r = await result.current[1]() as unknown as typeof HKAuthorizationRequestStatus\n retVal = r\n })\n\n expect(result.current[0]).toBe(HKAuthorizationRequestStatus.unnecessary)\n expect(retVal).toBe(HKAuthorizationRequestStatus.unnecessary)\n })\n\n test('should return unnecessary', async () => {\n const { HKAuthorizationRequestStatus, HKCategoryTypeIdentifier, default: Native } = NativeTypes\n\n jest.spyOn(Native, 'getRequestStatusForAuthorization').mockReturnValue(Promise.resolve(HKAuthorizationRequestStatus.unnecessary))\n\n const { result } = renderHook(() => useHealthkitAuthorization([HKCategoryTypeIdentifier.abdominalCramps]))\n\n await waitForNextUpdate()\n\n expect(result.current[0]).toBe(HKAuthorizationRequestStatus.unnecessary)\n })\n\n test('should return null before initalizing', async () => {\n const { HKCategoryTypeIdentifier } = NativeTypes\n\n const { result } = renderHook(() => useHealthkitAuthorization([HKCategoryTypeIdentifier.abdominalCramps]))\n\n expect(result.current[0]).toBe(null)\n\n await waitForNextUpdate()\n })\n})\n"],"mappings":"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","ignoreList":[]}
@@ -3,8 +3,7 @@
3
3
  var _reactNative = require("@testing-library/react-native");
4
4
  var _testUtils = _interopRequireDefault(require("../test-utils"));
5
5
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
6
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
7
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
6
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
8
7
  describe('useIsHealthDataAvailable', () => {
9
8
  test('should return false', async () => {
10
9
  const useIsHealthDataAvailable = (await Promise.resolve().then(() => _interopRequireWildcard(require('./useIsHealthDataAvailable')))).default;
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_testUtils","_interopRequireDefault","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","_interopRequireWildcard","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","describe","test","useIsHealthDataAvailable","Promise","resolve","then","Native","jest","spyOn","mockReturnValue","result","renderHook","waitForNextUpdate","expect","current","toBe"],"sources":["useIsHealthDataAvailable.test.ts"],"sourcesContent":["import { renderHook } from '@testing-library/react-native'\n\nimport waitForNextUpdate from '../test-utils'\n\ndescribe('useIsHealthDataAvailable', () => {\n test('should return false', async () => {\n const useIsHealthDataAvailable = (await import('./useIsHealthDataAvailable')).default\n const { default: Native } = await import('../native-types')\n jest.spyOn(Native, 'isHealthDataAvailable').mockReturnValue(Promise.resolve(false))\n\n const { result } = renderHook(useIsHealthDataAvailable)\n\n await waitForNextUpdate()\n\n expect(result.current).toBe(false)\n })\n\n test('should return true', async () => {\n const useIsHealthDataAvailable = (await import('./useIsHealthDataAvailable')).default\n const { default: Native } = await import('../native-types')\n jest.spyOn(Native, 'isHealthDataAvailable').mockReturnValue(Promise.resolve(true))\n\n const { result } = renderHook(useIsHealthDataAvailable)\n\n await waitForNextUpdate()\n\n expect(result.current).toBe(true)\n })\n\n test('should return null before initalizing', async () => {\n const useIsHealthDataAvailable = (await import('./useIsHealthDataAvailable')).default\n const { result } = renderHook(useIsHealthDataAvailable)\n\n expect(result.current).toBe(null)\n\n await waitForNextUpdate()\n })\n})\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_testUtils","_interopRequireDefault","e","__esModule","default","_interopRequireWildcard","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","describe","test","useIsHealthDataAvailable","Promise","resolve","then","Native","jest","spyOn","mockReturnValue","result","renderHook","waitForNextUpdate","expect","current","toBe"],"sources":["useIsHealthDataAvailable.test.ts"],"sourcesContent":["import { renderHook } from '@testing-library/react-native'\n\nimport waitForNextUpdate from '../test-utils'\n\ndescribe('useIsHealthDataAvailable', () => {\n test('should return false', async () => {\n const useIsHealthDataAvailable = (await import('./useIsHealthDataAvailable')).default\n const { default: Native } = await import('../native-types')\n jest.spyOn(Native, 'isHealthDataAvailable').mockReturnValue(Promise.resolve(false))\n\n const { result } = renderHook(useIsHealthDataAvailable)\n\n await waitForNextUpdate()\n\n expect(result.current).toBe(false)\n })\n\n test('should return true', async () => {\n const useIsHealthDataAvailable = (await import('./useIsHealthDataAvailable')).default\n const { default: Native } = await import('../native-types')\n jest.spyOn(Native, 'isHealthDataAvailable').mockReturnValue(Promise.resolve(true))\n\n const { result } = renderHook(useIsHealthDataAvailable)\n\n await waitForNextUpdate()\n\n expect(result.current).toBe(true)\n })\n\n test('should return null before initalizing', async () => {\n const useIsHealthDataAvailable = (await import('./useIsHealthDataAvailable')).default\n const { result } = renderHook(useIsHealthDataAvailable)\n\n expect(result.current).toBe(null)\n\n await waitForNextUpdate()\n })\n})\n"],"mappings":"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","ignoreList":[]}