@kingstinct/react-native-healthkit 4.3.0 → 4.4.2

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.
@@ -507,7 +507,7 @@ class ReactNativeHealthkit: RCTEventEmitter {
507
507
  }
508
508
 
509
509
  @objc(saveCategorySample:value:start:end:metadata:resolve:reject:)
510
- func saveCategorySample(typeIdentifier: String, value: Int, start: Date, end: Date, metadata: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock){
510
+ func saveCategorySample(typeIdentifier: String, value: Double, start: Date, end: Date, metadata: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock){
511
511
  guard let store = _store else {
512
512
  return reject(INIT_ERROR, INIT_ERROR_MESSAGE, nil);
513
513
  }
@@ -518,7 +518,7 @@ class ReactNativeHealthkit: RCTEventEmitter {
518
518
  return reject(TYPE_IDENTIFIER_ERROR, typeIdentifier, nil);
519
519
  }
520
520
 
521
- let sample = HKCategorySample.init(type: type, value: value, start: start, end: end, metadata: metadata as? Dictionary<String, Any>)
521
+ let sample = HKCategorySample.init(type: type, value: Int(value), start: start, end: end, metadata: metadata as? Dictionary<String, Any>)
522
522
 
523
523
  store.save(sample) { (success: Bool, error: Error?) in
524
524
  guard let err = error else {
@@ -68,22 +68,16 @@ function deserializeWorkout(sample) {
68
68
  };
69
69
  }
70
70
 
71
- const deserializCategorySample = sample => {
72
- return { ...sample,
73
- startDate: new Date(sample.startDate),
74
- endDate: new Date(sample.endDate)
75
- };
76
- };
71
+ const deserializCategorySample = sample => ({ ...sample,
72
+ startDate: new Date(sample.startDate),
73
+ endDate: new Date(sample.endDate)
74
+ });
77
75
 
78
- const serializeDate = date => {
79
- return date ? date.toISOString() : new Date(0).toISOString();
80
- };
76
+ const serializeDate = date => date ? date.toISOString() : new Date(0).toISOString();
81
77
 
82
78
  const prepareOptions = options => {
83
- var _options$ascending;
84
-
85
79
  const limit = !options.limit || options.limit === Infinity ? 0 : options.limit;
86
- const ascending = (_options$ascending = options.ascending) !== null && _options$ascending !== void 0 ? _options$ascending : limit === 0;
80
+ const ascending = options.ascending ?? limit === 0;
87
81
  const from = serializeDate(options.from);
88
82
  const to = serializeDate(options.to);
89
83
  return {
@@ -101,6 +95,36 @@ const queryQuantitySamples = async (identifier, options) => {
101
95
  return quantitySamples.map(deserializeSample);
102
96
  };
103
97
 
98
+ async function getPreferredUnitsTyped(options) {
99
+ let energyUnit = options === null || options === void 0 ? void 0 : options.energyUnit;
100
+ let distanceUnit = options === null || options === void 0 ? void 0 : options.distanceUnit;
101
+
102
+ if (!energyUnit || !distanceUnit) {
103
+ const units = await _nativeTypes.default.getPreferredUnits([_nativeTypes.HKQuantityTypeIdentifier.distanceWalkingRunning, _nativeTypes.HKQuantityTypeIdentifier.activeEnergyBurned]);
104
+
105
+ if (!energyUnit) {
106
+ energyUnit = units[_nativeTypes.HKQuantityTypeIdentifier.distanceWalkingRunning];
107
+ }
108
+
109
+ if (!distanceUnit) {
110
+ distanceUnit = units[_nativeTypes.HKQuantityTypeIdentifier.activeEnergyBurned];
111
+ }
112
+ }
113
+
114
+ if (!energyUnit) {
115
+ energyUnit = _nativeTypes.HKUnit.Kilocalories;
116
+ }
117
+
118
+ if (!distanceUnit) {
119
+ distanceUnit = _nativeTypes.HKUnit.Meters;
120
+ }
121
+
122
+ return {
123
+ energyUnit,
124
+ distanceUnit
125
+ };
126
+ }
127
+
104
128
  const subscribeToChanges = async (identifier, callback) => {
105
129
  const subscription = _nativeTypes.EventEmitter.addListener('onChange', _ref => {
106
130
  let {
@@ -112,11 +136,11 @@ const subscribeToChanges = async (identifier, callback) => {
112
136
  }
113
137
  });
114
138
 
115
- const queryId = await _nativeTypes.default.subscribeToObserverQuery(identifier).catch(error => {
139
+ const queryId = await _nativeTypes.default.subscribeToObserverQuery(identifier).catch(async error => {
116
140
  subscription.remove();
117
141
  return Promise.reject(error);
118
142
  });
119
- return () => {
143
+ return async () => {
120
144
  subscription.remove();
121
145
  return _nativeTypes.default.unsubscribeQuery(queryId);
122
146
  };
@@ -125,7 +149,7 @@ const subscribeToChanges = async (identifier, callback) => {
125
149
  const getMostRecentQuantitySample = async (identifier, unit) => {
126
150
  const samples = await queryQuantitySamples(identifier, {
127
151
  limit: 1,
128
- unit: unit
152
+ unit
129
153
  });
130
154
  return samples[0];
131
155
  };
@@ -140,17 +164,20 @@ function useMostRecentWorkout(options) {
140
164
  energyUnit,
141
165
  distanceUnit
142
166
  } = await getPreferredUnitsTyped(options);
143
- cancelSubscription = await subscribeToChanges('HKWorkoutTypeIdentifier', () => {
144
- getMostRecentWorkout({
167
+ cancelSubscription = await subscribeToChanges('HKWorkoutTypeIdentifier', async () => {
168
+ const w = await getMostRecentWorkout({
145
169
  energyUnit,
146
170
  distanceUnit
147
- }).then(setWorkout);
171
+ });
172
+ setWorkout(w);
148
173
  });
149
174
  };
150
175
 
151
- init();
176
+ void init();
152
177
  return () => {
153
- cancelSubscription && cancelSubscription();
178
+ var _cancelSubscription;
179
+
180
+ void ((_cancelSubscription = cancelSubscription) === null || _cancelSubscription === void 0 ? void 0 : _cancelSubscription());
154
181
  };
155
182
  }, [options]);
156
183
  return workout;
@@ -164,15 +191,6 @@ const getMostRecentCategorySample = async identifier => {
164
191
  return samples[0];
165
192
  };
166
193
 
167
- function useMostRecentCategorySample(identifier) {
168
- const [category, setCategory] = (0, _react.useState)(null);
169
- const updater = (0, _react.useCallback)(() => {
170
- getMostRecentCategorySample(identifier).then(setCategory);
171
- }, [identifier]);
172
- useSubscribeToChanges(identifier, updater);
173
- return category;
174
- }
175
-
176
194
  function useSubscribeToChanges(identifier, onChange) {
177
195
  (0, _react.useEffect)(() => {
178
196
  let cancelSubscription;
@@ -181,13 +199,26 @@ function useSubscribeToChanges(identifier, onChange) {
181
199
  cancelSubscription = await subscribeToChanges(identifier, onChange);
182
200
  };
183
201
 
184
- init();
202
+ void init();
185
203
  return () => {
186
- cancelSubscription && cancelSubscription();
204
+ var _cancelSubscription2;
205
+
206
+ void ((_cancelSubscription2 = cancelSubscription) === null || _cancelSubscription2 === void 0 ? void 0 : _cancelSubscription2());
187
207
  };
188
208
  }, [identifier, onChange]);
189
209
  }
190
210
 
211
+ useSubscribeToChanges(_nativeTypes.HKCategoryTypeIdentifier.appleStandHour, () => {});
212
+
213
+ function useMostRecentCategorySample(identifier) {
214
+ const [category, setCategory] = (0, _react.useState)(null);
215
+ const updater = (0, _react.useCallback)(() => {
216
+ void getMostRecentCategorySample(identifier).then(setCategory);
217
+ }, [identifier]);
218
+ useSubscribeToChanges(identifier, updater);
219
+ return category;
220
+ }
221
+
191
222
  function useMostRecentQuantitySample(identifier, unit) {
192
223
  const [lastSample, setLastSample] = (0, _react.useState)(null);
193
224
  (0, _react.useEffect)(() => {
@@ -195,22 +226,23 @@ function useMostRecentQuantitySample(identifier, unit) {
195
226
 
196
227
  const init = async () => {
197
228
  const actualUnit = await ensureUnit(identifier, unit);
198
- cancelSubscription = await subscribeToChanges(identifier, () => {
199
- getMostRecentQuantitySample(identifier, actualUnit).then(value => {
200
- setLastSample(value);
201
- });
229
+ cancelSubscription = await subscribeToChanges(identifier, async () => {
230
+ const value = await getMostRecentQuantitySample(identifier, actualUnit);
231
+ setLastSample(value);
202
232
  });
203
233
  };
204
234
 
205
- init();
235
+ void init();
206
236
  return () => {
207
- cancelSubscription && cancelSubscription();
237
+ var _cancelSubscription3;
238
+
239
+ void ((_cancelSubscription3 = cancelSubscription) === null || _cancelSubscription3 === void 0 ? void 0 : _cancelSubscription3());
208
240
  };
209
241
  }, [identifier, unit]);
210
242
  return lastSample;
211
243
  }
212
244
 
213
- const saveQuantitySample = (identifier, unit, value, options) => {
245
+ const saveQuantitySample = async (identifier, unit, value, options) => {
214
246
  const start = (options === null || options === void 0 ? void 0 : options.start) || (options === null || options === void 0 ? void 0 : options.end) || new Date();
215
247
  const end = (options === null || options === void 0 ? void 0 : options.end) || (options === null || options === void 0 ? void 0 : options.start) || new Date();
216
248
  const metadata = (options === null || options === void 0 ? void 0 : options.metadata) || {};
@@ -235,18 +267,14 @@ const queryStatisticsForQuantity = async (identifier, options, from, to, unit) =
235
267
  return response;
236
268
  };
237
269
 
238
- const requestAuthorization = function (read) {
270
+ const requestAuthorization = async function (read) {
239
271
  let write = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
240
- const readPermissions = read.reduce((obj, cur) => {
241
- return { ...obj,
242
- [cur]: true
243
- };
244
- }, {});
245
- const writePermissions = write.reduce((obj, cur) => {
246
- return { ...obj,
247
- [cur]: true
248
- };
249
- }, {});
272
+ const readPermissions = read.reduce((obj, cur) => ({ ...obj,
273
+ [cur]: true
274
+ }), {});
275
+ const writePermissions = write.reduce((obj, cur) => ({ ...obj,
276
+ [cur]: true
277
+ }), {});
250
278
  return _nativeTypes.default.requestAuthorization(writePermissions, readPermissions);
251
279
  };
252
280
 
@@ -255,18 +283,14 @@ const getDateOfBirth = async () => {
255
283
  return new Date(dateOfBirth);
256
284
  };
257
285
 
258
- const getRequestStatusForAuthorization = function (read) {
286
+ const getRequestStatusForAuthorization = async function (read) {
259
287
  let write = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
260
- const readPermissions = read.reduce((obj, cur) => {
261
- return { ...obj,
262
- [cur]: true
263
- };
264
- }, {});
265
- const writePermissions = write.reduce((obj, cur) => {
266
- return { ...obj,
267
- [cur]: true
268
- };
269
- }, {});
288
+ const readPermissions = read.reduce((obj, cur) => ({ ...obj,
289
+ [cur]: true
290
+ }), {});
291
+ const writePermissions = write.reduce((obj, cur) => ({ ...obj,
292
+ [cur]: true
293
+ }), {});
270
294
  return _nativeTypes.default.getRequestStatusForAuthorization(writePermissions, readPermissions);
271
295
  };
272
296
 
@@ -276,36 +300,6 @@ const queryCategorySamples = async (identifier, options) => {
276
300
  return results.map(deserializCategorySample);
277
301
  };
278
302
 
279
- async function getPreferredUnitsTyped(options) {
280
- let energyUnit = options === null || options === void 0 ? void 0 : options.energyUnit;
281
- let distanceUnit = options === null || options === void 0 ? void 0 : options.distanceUnit;
282
-
283
- if (!energyUnit || !distanceUnit) {
284
- const units = await _nativeTypes.default.getPreferredUnits([_nativeTypes.HKQuantityTypeIdentifier.distanceWalkingRunning, _nativeTypes.HKQuantityTypeIdentifier.activeEnergyBurned]);
285
-
286
- if (!energyUnit) {
287
- energyUnit = units[_nativeTypes.HKQuantityTypeIdentifier.distanceWalkingRunning];
288
- }
289
-
290
- if (!distanceUnit) {
291
- distanceUnit = units[_nativeTypes.HKQuantityTypeIdentifier.activeEnergyBurned];
292
- }
293
- }
294
-
295
- if (!energyUnit) {
296
- energyUnit = _nativeTypes.HKUnit.Kilocalories;
297
- }
298
-
299
- if (!distanceUnit) {
300
- distanceUnit = _nativeTypes.HKUnit.Meters;
301
- }
302
-
303
- return {
304
- energyUnit,
305
- distanceUnit
306
- };
307
- }
308
-
309
303
  const queryWorkouts = async options => {
310
304
  const {
311
305
  energyUnit,
@@ -326,7 +320,7 @@ const getMostRecentWorkout = async options => {
326
320
  return workouts[0];
327
321
  };
328
322
 
329
- function saveCategorySample(identifier, value, options) {
323
+ async function saveCategorySample(identifier, value, options) {
330
324
  const start = (options === null || options === void 0 ? void 0 : options.start) || (options === null || options === void 0 ? void 0 : options.end) || new Date();
331
325
  const end = (options === null || options === void 0 ? void 0 : options.end) || (options === null || options === void 0 ? void 0 : options.start) || new Date();
332
326
  const metadata = (options === null || options === void 0 ? void 0 : options.metadata) || {};
@@ -338,13 +332,12 @@ const getPreferredUnits = async identifiers => {
338
332
  return identifiers.map(i => units[i]);
339
333
  };
340
334
 
341
- const buildUnitWithPrefix = (prefix, unit) => {
342
- return `${prefix}${unit}`;
343
- };
335
+ const buildUnitWithPrefix = (prefix, unit) => `${prefix}${unit}`;
344
336
 
345
337
  function deserializeCorrelation(s) {
346
338
  return { ...s,
347
339
  objects: s.objects.map(o => {
340
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
348
341
  // @ts-ignore
349
342
  if (o.quantity !== undefined) {
350
343
  return deserializeSample(o);
@@ -373,29 +366,27 @@ const saveCorrelationSample = async (typeIdentifier, samples, options) => {
373
366
  return _nativeTypes.default.saveCorrelationSample(typeIdentifier, samples, start, end, ensureMetadata(options === null || options === void 0 ? void 0 : options.metadata));
374
367
  };
375
368
 
376
- const saveWorkoutSample = (typeIdentifier, quantities, _start, options) => {
369
+ const saveWorkoutSample = async (typeIdentifier, quantities, _start, options) => {
377
370
  const start = _start.toISOString();
378
371
 
379
372
  const end = ((options === null || options === void 0 ? void 0 : options.end) || new Date()).toISOString();
380
373
  return _nativeTypes.default.saveWorkoutSample(typeIdentifier, quantities, start, end, ensureMetadata(options === null || options === void 0 ? void 0 : options.metadata));
381
374
  };
382
375
 
383
- const getWorkoutRoutes = workoutUUID => {
384
- return _nativeTypes.default.getWorkoutRoutes(workoutUUID);
385
- };
376
+ const getWorkoutRoutes = async workoutUUID => _nativeTypes.default.getWorkoutRoutes(workoutUUID);
386
377
 
387
378
  const Healthkit = {
388
- authorizationStatusFor: _nativeTypes.default.authorizationStatusFor,
389
- isHealthDataAvailable: _nativeTypes.default.isHealthDataAvailable,
379
+ authorizationStatusFor: _nativeTypes.default.authorizationStatusFor.bind(_nativeTypes.default),
380
+ isHealthDataAvailable: _nativeTypes.default.isHealthDataAvailable.bind(_nativeTypes.default),
390
381
  buildUnitWithPrefix,
391
382
  disableAllBackgroundDelivery: _nativeTypes.default.disableAllBackgroundDelivery,
392
383
  disableBackgroundDelivery: _nativeTypes.default.disableBackgroundDelivery,
393
384
  enableBackgroundDelivery: _nativeTypes.default.enableBackgroundDelivery,
394
385
  // simple convenience getters
395
- getBiologicalSex: _nativeTypes.default.getBiologicalSex,
396
- getFitzpatrickSkinType: _nativeTypes.default.getFitzpatrickSkinType,
386
+ getBiologicalSex: _nativeTypes.default.getBiologicalSex.bind(_nativeTypes.default),
387
+ getFitzpatrickSkinType: _nativeTypes.default.getFitzpatrickSkinType.bind(_nativeTypes.default),
397
388
  getWheelchairUse: _nativeTypes.default.getWheelchairUse,
398
- getBloodType: _nativeTypes.default.getBloodType,
389
+ getBloodType: _nativeTypes.default.getBloodType.bind(_nativeTypes.default),
399
390
  getDateOfBirth,
400
391
  getMostRecentQuantitySample,
401
392
  getMostRecentCategorySample,
@@ -422,7 +413,35 @@ const Healthkit = {
422
413
  useMostRecentCategorySample,
423
414
  useMostRecentQuantitySample,
424
415
  useMostRecentWorkout,
425
- useSubscribeToChanges
416
+ useSubscribeToChanges,
417
+ useIsHealthDataAvailable: () => {
418
+ const [isAvailable, setIsAvailable] = (0, _react.useState)(null);
419
+ (0, _react.useEffect)(() => {
420
+ const init = async () => {
421
+ const res = await _nativeTypes.default.isHealthDataAvailable();
422
+ setIsAvailable(res);
423
+ };
424
+
425
+ void init();
426
+ }, []);
427
+ return isAvailable;
428
+ },
429
+ useHealthkitAuthorization: (read, write) => {
430
+ const [status, setStatus] = (0, _react.useState)(null);
431
+ const refreshAuthStatus = (0, _react.useCallback)(async () => {
432
+ const auth = await getRequestStatusForAuthorization(read, write);
433
+ setStatus(auth);
434
+ return auth;
435
+ }, []);
436
+ const request = (0, _react.useCallback)(async () => {
437
+ await requestAuthorization(read, write);
438
+ return refreshAuthStatus();
439
+ }, []);
440
+ (0, _react.useEffect)(() => {
441
+ void refreshAuthStatus();
442
+ }, []);
443
+ return [status, request];
444
+ }
426
445
  };
427
446
  var _default = Healthkit;
428
447
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"names":["getPreferredUnit","type","unit","getPreferredUnits","ensureUnit","providedUnit","Native","deserializeSample","sample","startDate","Date","endDate","deserializeWorkout","deserializCategorySample","serializeDate","date","toISOString","prepareOptions","options","limit","Infinity","ascending","from","to","queryQuantitySamples","identifier","opts","quantitySamples","map","subscribeToChanges","callback","subscription","EventEmitter","addListener","typeIdentifier","queryId","subscribeToObserverQuery","catch","error","remove","Promise","reject","unsubscribeQuery","getMostRecentQuantitySample","samples","useMostRecentWorkout","workout","setWorkout","useState","useEffect","cancelSubscription","init","energyUnit","distanceUnit","getPreferredUnitsTyped","getMostRecentWorkout","then","getMostRecentCategorySample","queryCategorySamples","useMostRecentCategorySample","category","setCategory","updater","useCallback","useSubscribeToChanges","onChange","useMostRecentQuantitySample","lastSample","setLastSample","actualUnit","value","saveQuantitySample","start","end","metadata","queryStatisticsForQuantity","toDate","mostRecentQuantityDateInterval","rawResponse","response","requestAuthorization","read","write","readPermissions","reduce","obj","cur","writePermissions","getDateOfBirth","dateOfBirth","getRequestStatusForAuthorization","results","units","HKQuantityTypeIdentifier","distanceWalkingRunning","activeEnergyBurned","HKUnit","Kilocalories","Meters","queryWorkouts","workouts","queryWorkoutSamples","saveCategorySample","identifiers","i","buildUnitWithPrefix","prefix","deserializeCorrelation","s","objects","o","quantity","undefined","ensureMetadata","queryCorrelationSamples","correlations","saveCorrelationSample","saveWorkoutSample","quantities","_start","getWorkoutRoutes","workoutUUID","Healthkit","authorizationStatusFor","isHealthDataAvailable","disableAllBackgroundDelivery","disableBackgroundDelivery","enableBackgroundDelivery","getBiologicalSex","getFitzpatrickSkinType","getWheelchairUse","getBloodType"],"sources":["index.ios.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport Native, {\n EventEmitter,\n HKCategorySampleRaw,\n HKCategoryTypeIdentifier,\n HKCategoryValueForIdentifier,\n HKCharacteristicTypeIdentifier,\n HKCorrelationRaw,\n HKCorrelationTypeIdentifier,\n HKQuantitySampleRaw,\n HKQuantityTypeIdentifier,\n HKSampleTypeIdentifier,\n HKUnit,\n HKUnitSI,\n HKUnitSIPrefix,\n HKWorkoutRaw,\n MetadataMapperForCategoryIdentifier,\n} from './native-types';\nimport type {\n GenericQueryOptions,\n GetMostRecentCategorySampleFn,\n GetMostRecentQuantitySampleFn,\n GetMostRecentWorkoutFn,\n GetPreferredUnitFn,\n GetPreferredUnitsFn,\n GetWorkoutRoutesFn,\n HKCategorySample,\n HKCorrelation,\n HKQuantitySample,\n HKWorkout,\n QueryCategorySamplesFn,\n QueryCorrelationSamplesFn,\n QueryQuantitySamplesFn,\n QueryStatisticsForQuantityFn,\n QueryWorkoutsFn,\n ReactNativeHealthkit,\n SaveCorrelationSampleFn,\n SaveQuantitySampleFn,\n SaveWorkoutSampleFn,\n SubscribeToChangesFn,\n} from './types';\n\nconst getPreferredUnit: GetPreferredUnitFn = async (type) => {\n const [unit] = await getPreferredUnits([type]);\n return unit;\n};\n\nconst ensureUnit = async <TUnit extends HKUnit>(\n type: HKQuantityTypeIdentifier,\n providedUnit?: TUnit\n) => {\n if (providedUnit) {\n return providedUnit;\n }\n const unit = await Native.getPreferredUnits([type]);\n return unit[type] as TUnit;\n};\n\nfunction deserializeSample<\n TIdentifier extends HKQuantityTypeIdentifier,\n TUnit extends HKUnit\n>(\n sample: HKQuantitySampleRaw<TIdentifier, TUnit>\n): HKQuantitySample<TIdentifier, TUnit> {\n return {\n ...sample,\n startDate: new Date(sample.startDate),\n endDate: new Date(sample.endDate),\n };\n}\n\nfunction deserializeWorkout<TEnergy extends HKUnit, TDistance extends HKUnit>(\n sample: HKWorkoutRaw<TEnergy, TDistance>\n): HKWorkout<TEnergy, TDistance> {\n return {\n ...sample,\n startDate: new Date(sample.startDate),\n endDate: new Date(sample.endDate),\n };\n}\n\nconst deserializCategorySample = <T extends HKCategoryTypeIdentifier>(\n sample: HKCategorySampleRaw<T>\n): HKCategorySample<T> => {\n return {\n ...sample,\n startDate: new Date(sample.startDate),\n endDate: new Date(sample.endDate),\n };\n};\n\nconst serializeDate = (date?: Date | null): string => {\n return date ? date.toISOString() : new Date(0).toISOString();\n};\n\nconst prepareOptions = (options: GenericQueryOptions) => {\n const limit =\n !options.limit || options.limit === Infinity ? 0 : options.limit;\n const ascending = options.ascending ?? limit === 0;\n const from = serializeDate(options.from);\n const to = serializeDate(options.to);\n return { limit, ascending, from, to };\n};\n\nconst queryQuantitySamples: QueryQuantitySamplesFn = async (\n identifier,\n options\n) => {\n const unit = await ensureUnit(identifier, options.unit);\n const opts = prepareOptions(options);\n\n const quantitySamples = await Native.queryQuantitySamples(\n identifier,\n unit,\n opts.from,\n opts.to,\n opts.limit,\n opts.ascending\n );\n\n return quantitySamples.map(deserializeSample);\n};\n\nconst subscribeToChanges: SubscribeToChangesFn = async (\n identifier,\n callback\n) => {\n const subscription = EventEmitter.addListener(\n 'onChange',\n ({ typeIdentifier }) => {\n if (typeIdentifier === identifier) {\n callback();\n }\n }\n );\n\n const queryId = await Native.subscribeToObserverQuery(identifier).catch(\n (error) => {\n subscription.remove();\n return Promise.reject(error);\n }\n );\n\n return () => {\n subscription.remove();\n return Native.unsubscribeQuery(queryId);\n };\n};\n\nconst getMostRecentQuantitySample: GetMostRecentQuantitySampleFn = async (\n identifier,\n unit\n) => {\n const samples = await queryQuantitySamples(identifier, {\n limit: 1,\n unit: unit,\n });\n return samples[0];\n};\n\nfunction useMostRecentWorkout<\n TEnergy extends HKUnit,\n TDistance extends HKUnit\n>(options?: { energyUnit?: TEnergy; distanceUnit?: TDistance }) {\n const [workout, setWorkout] = useState<HKWorkout<TEnergy, TDistance> | null>(\n null\n );\n useEffect(() => {\n let cancelSubscription: (() => Promise<boolean>) | undefined;\n\n const init = async () => {\n const { energyUnit, distanceUnit } = await getPreferredUnitsTyped(\n options\n );\n\n cancelSubscription = await subscribeToChanges(\n 'HKWorkoutTypeIdentifier',\n () => {\n getMostRecentWorkout({ energyUnit, distanceUnit }).then(setWorkout);\n }\n );\n };\n init();\n return () => {\n cancelSubscription && cancelSubscription();\n };\n }, [options]);\n return workout;\n}\n\nconst getMostRecentCategorySample: GetMostRecentCategorySampleFn = async (\n identifier\n) => {\n const samples = await queryCategorySamples(identifier, {\n limit: 1,\n ascending: false,\n });\n\n return samples[0];\n};\n\nfunction useMostRecentCategorySample<\n TCategory extends HKCategoryTypeIdentifier\n>(identifier: TCategory) {\n const [category, setCategory] = useState<HKCategorySample<TCategory> | null>(\n null\n );\n const updater = useCallback(() => {\n getMostRecentCategorySample(identifier).then(setCategory);\n }, [identifier]);\n\n useSubscribeToChanges(identifier, updater);\n\n return category;\n}\n\nfunction useSubscribeToChanges<TIdentifier extends HKSampleTypeIdentifier>(\n identifier: TIdentifier,\n onChange: () => void\n): void {\n useEffect(() => {\n let cancelSubscription: (() => Promise<boolean>) | undefined;\n\n const init = async () => {\n cancelSubscription = await subscribeToChanges(identifier, onChange);\n };\n init();\n\n return () => {\n cancelSubscription && cancelSubscription();\n };\n }, [identifier, onChange]);\n}\n\nfunction useMostRecentQuantitySample<\n TIdentifier extends HKQuantityTypeIdentifier,\n TUnit extends HKUnit = HKUnit\n>(identifier: TIdentifier, unit?: TUnit) {\n const [lastSample, setLastSample] = useState<HKQuantitySample<\n TIdentifier,\n TUnit\n > | null>(null);\n\n useEffect(() => {\n let cancelSubscription: (() => Promise<boolean>) | undefined;\n\n const init = async () => {\n const actualUnit = await ensureUnit(identifier, unit);\n\n cancelSubscription = await subscribeToChanges(identifier, () => {\n getMostRecentQuantitySample(identifier, actualUnit).then((value) => {\n setLastSample(value);\n });\n });\n };\n init();\n\n return () => {\n cancelSubscription && cancelSubscription();\n };\n }, [identifier, unit]);\n\n return lastSample;\n}\n\nconst saveQuantitySample: SaveQuantitySampleFn = (\n identifier,\n unit,\n value,\n options\n) => {\n const start = options?.start || options?.end || new Date();\n const end = options?.end || options?.start || new Date();\n const metadata = options?.metadata || {};\n\n return Native.saveQuantitySample(\n identifier,\n unit,\n value,\n start.toISOString(),\n end.toISOString(),\n metadata\n );\n};\n\nconst queryStatisticsForQuantity: QueryStatisticsForQuantityFn = async (\n identifier,\n options,\n from,\n to,\n unit\n) => {\n const actualUnit = await ensureUnit(identifier, unit);\n const toDate = to || new Date();\n const { mostRecentQuantityDateInterval, ...rawResponse } =\n await Native.queryStatisticsForQuantity(\n identifier,\n actualUnit,\n from.toISOString(),\n toDate.toISOString(),\n options\n );\n\n const response = {\n ...rawResponse,\n ...(mostRecentQuantityDateInterval\n ? {\n mostRecentQuantityDateInterval: {\n from: new Date(mostRecentQuantityDateInterval.from),\n to: new Date(mostRecentQuantityDateInterval.to),\n },\n }\n : {}),\n };\n\n return response;\n};\n\nconst requestAuthorization = (\n read: (HKCharacteristicTypeIdentifier | HKSampleTypeIdentifier)[],\n write: HKSampleTypeIdentifier[] = []\n): Promise<boolean> => {\n const readPermissions = read.reduce((obj, cur) => {\n return { ...obj, [cur]: true };\n }, {});\n\n const writePermissions = write.reduce((obj, cur) => {\n return { ...obj, [cur]: true };\n }, {});\n\n return Native.requestAuthorization(writePermissions, readPermissions);\n};\n\nconst getDateOfBirth = async () => {\n const dateOfBirth = await Native.getDateOfBirth();\n return new Date(dateOfBirth);\n};\n\nconst getRequestStatusForAuthorization = (\n read: (HKCharacteristicTypeIdentifier | HKSampleTypeIdentifier)[],\n write: HKSampleTypeIdentifier[] = []\n) => {\n const readPermissions = read.reduce((obj, cur) => {\n return { ...obj, [cur]: true };\n }, {});\n\n const writePermissions = write.reduce((obj, cur) => {\n return { ...obj, [cur]: true };\n }, {});\n\n return Native.getRequestStatusForAuthorization(\n writePermissions,\n readPermissions\n );\n};\n\nconst queryCategorySamples: QueryCategorySamplesFn = async (\n identifier,\n options\n) => {\n const opts = prepareOptions(options);\n const results = await Native.queryCategorySamples(\n identifier,\n opts.from,\n opts.to,\n opts.limit,\n opts.ascending\n );\n\n return results.map(deserializCategorySample);\n};\n\nasync function getPreferredUnitsTyped<\n TEnergy extends HKUnit,\n TDistance extends HKUnit\n>(options?: { energyUnit?: TEnergy; distanceUnit?: TDistance }) {\n let energyUnit = options?.energyUnit;\n let distanceUnit = options?.distanceUnit;\n if (!energyUnit || !distanceUnit) {\n const units = await Native.getPreferredUnits([\n HKQuantityTypeIdentifier.distanceWalkingRunning,\n HKQuantityTypeIdentifier.activeEnergyBurned,\n ]);\n if (!energyUnit) {\n energyUnit = units[HKQuantityTypeIdentifier.distanceWalkingRunning] as\n | TEnergy\n | undefined;\n }\n if (!distanceUnit) {\n distanceUnit = units[HKQuantityTypeIdentifier.activeEnergyBurned] as\n | TDistance\n | undefined;\n }\n }\n if (!energyUnit) {\n energyUnit = HKUnit.Kilocalories as TEnergy;\n }\n if (!distanceUnit) {\n distanceUnit = HKUnit.Meters as TDistance;\n }\n return { energyUnit, distanceUnit };\n}\n\nconst queryWorkouts: QueryWorkoutsFn = async (options) => {\n const { energyUnit, distanceUnit } = await getPreferredUnitsTyped(options);\n const opts = prepareOptions(options);\n\n const workouts = await Native.queryWorkoutSamples(\n energyUnit,\n distanceUnit,\n opts.from,\n opts.to,\n opts.limit,\n opts.ascending\n );\n\n return workouts.map(deserializeWorkout);\n};\n\nconst getMostRecentWorkout: GetMostRecentWorkoutFn = async (options) => {\n const workouts = await queryWorkouts({\n limit: 1,\n ascending: false,\n energyUnit: options?.energyUnit,\n distanceUnit: options?.distanceUnit,\n });\n\n return workouts[0];\n};\n\nfunction saveCategorySample<T extends HKCategoryTypeIdentifier>(\n identifier: T,\n value: HKCategoryValueForIdentifier<T>,\n options?: {\n start?: Date;\n end?: Date;\n metadata?: MetadataMapperForCategoryIdentifier<T>;\n }\n) {\n const start = options?.start || options?.end || new Date();\n const end = options?.end || options?.start || new Date();\n const metadata = options?.metadata || {};\n\n return Native.saveCategorySample(\n identifier,\n value,\n start.toISOString(),\n end.toISOString(),\n metadata || {}\n );\n}\n\nconst getPreferredUnits: GetPreferredUnitsFn = async (identifiers) => {\n const units = await Native.getPreferredUnits(identifiers);\n return identifiers.map((i) => units[i]);\n};\n\nconst buildUnitWithPrefix = (prefix: HKUnitSIPrefix, unit: HKUnitSI) => {\n return `${prefix}${unit}` as HKUnit;\n};\n\nfunction deserializeCorrelation<\n TIdentifier extends HKCorrelationTypeIdentifier\n>(s: HKCorrelationRaw<TIdentifier>): HKCorrelation<TIdentifier> {\n return {\n ...s,\n objects: s.objects.map((o) => {\n // @ts-ignore\n if (o.quantity !== undefined) {\n return deserializeSample(o as HKQuantitySampleRaw);\n }\n\n return deserializCategorySample(o as HKCategorySampleRaw);\n }),\n endDate: new Date(s.endDate),\n startDate: new Date(s.startDate),\n };\n}\n\nfunction ensureMetadata<TMetadata>(metadata?: TMetadata) {\n return metadata || ({} as TMetadata);\n}\n\nconst queryCorrelationSamples: QueryCorrelationSamplesFn = async (\n typeIdentifier,\n options\n) => {\n const opts = prepareOptions(options);\n const correlations = await Native.queryCorrelationSamples(\n typeIdentifier,\n opts.from,\n opts.to\n );\n\n return correlations.map(deserializeCorrelation);\n};\n\nconst saveCorrelationSample: SaveCorrelationSampleFn = async (\n typeIdentifier,\n samples,\n options\n) => {\n const start = (options?.start || new Date()).toISOString();\n const end = (options?.end || new Date()).toISOString();\n\n return Native.saveCorrelationSample(\n typeIdentifier,\n samples,\n start,\n end,\n ensureMetadata(options?.metadata)\n );\n};\n\nconst saveWorkoutSample: SaveWorkoutSampleFn = (\n typeIdentifier,\n quantities,\n _start,\n options\n) => {\n const start = _start.toISOString();\n const end = (options?.end || new Date()).toISOString();\n\n return Native.saveWorkoutSample(\n typeIdentifier,\n quantities,\n start,\n end,\n ensureMetadata(options?.metadata)\n );\n};\n\nconst getWorkoutRoutes: GetWorkoutRoutesFn = (workoutUUID: string) => {\n return Native.getWorkoutRoutes(workoutUUID);\n};\n\nconst Healthkit: ReactNativeHealthkit = {\n authorizationStatusFor: Native.authorizationStatusFor,\n\n isHealthDataAvailable: Native.isHealthDataAvailable,\n\n buildUnitWithPrefix,\n\n disableAllBackgroundDelivery: Native.disableAllBackgroundDelivery,\n disableBackgroundDelivery: Native.disableBackgroundDelivery,\n enableBackgroundDelivery: Native.enableBackgroundDelivery,\n\n // simple convenience getters\n getBiologicalSex: Native.getBiologicalSex,\n getFitzpatrickSkinType: Native.getFitzpatrickSkinType,\n getWheelchairUse: Native.getWheelchairUse,\n getBloodType: Native.getBloodType,\n getDateOfBirth,\n\n getMostRecentQuantitySample,\n getMostRecentCategorySample,\n getMostRecentWorkout,\n\n getPreferredUnit,\n getPreferredUnits,\n getRequestStatusForAuthorization,\n\n getWorkoutRoutes,\n\n // query methods\n queryCategorySamples,\n queryCorrelationSamples,\n queryQuantitySamples,\n queryStatisticsForQuantity,\n queryWorkouts,\n\n requestAuthorization,\n\n // save methods\n saveCategorySample,\n saveCorrelationSample,\n saveQuantitySample,\n saveWorkoutSample,\n\n // subscriptions\n subscribeToChanges,\n\n // hooks\n useMostRecentCategorySample,\n\n useMostRecentQuantitySample,\n useMostRecentWorkout,\n\n useSubscribeToChanges,\n};\n\nexport * from './native-types';\nexport * from './types';\n\nexport default Healthkit;\n"],"mappings":"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"}
1
+ {"version":3,"names":["getPreferredUnit","type","unit","getPreferredUnits","ensureUnit","providedUnit","Native","deserializeSample","sample","startDate","Date","endDate","deserializeWorkout","deserializCategorySample","serializeDate","date","toISOString","prepareOptions","options","limit","Infinity","ascending","from","to","queryQuantitySamples","identifier","opts","quantitySamples","map","getPreferredUnitsTyped","energyUnit","distanceUnit","units","HKQuantityTypeIdentifier","distanceWalkingRunning","activeEnergyBurned","HKUnit","Kilocalories","Meters","subscribeToChanges","callback","subscription","EventEmitter","addListener","typeIdentifier","queryId","subscribeToObserverQuery","catch","error","remove","Promise","reject","unsubscribeQuery","getMostRecentQuantitySample","samples","useMostRecentWorkout","workout","setWorkout","useState","useEffect","cancelSubscription","init","w","getMostRecentWorkout","getMostRecentCategorySample","queryCategorySamples","useSubscribeToChanges","onChange","HKCategoryTypeIdentifier","appleStandHour","useMostRecentCategorySample","category","setCategory","updater","useCallback","then","useMostRecentQuantitySample","lastSample","setLastSample","actualUnit","value","saveQuantitySample","start","end","metadata","queryStatisticsForQuantity","toDate","mostRecentQuantityDateInterval","rawResponse","response","requestAuthorization","read","write","readPermissions","reduce","obj","cur","writePermissions","getDateOfBirth","dateOfBirth","getRequestStatusForAuthorization","results","queryWorkouts","workouts","queryWorkoutSamples","saveCategorySample","identifiers","i","buildUnitWithPrefix","prefix","deserializeCorrelation","s","objects","o","quantity","undefined","ensureMetadata","queryCorrelationSamples","correlations","saveCorrelationSample","saveWorkoutSample","quantities","_start","getWorkoutRoutes","workoutUUID","Healthkit","authorizationStatusFor","bind","isHealthDataAvailable","disableAllBackgroundDelivery","disableBackgroundDelivery","enableBackgroundDelivery","getBiologicalSex","getFitzpatrickSkinType","getWheelchairUse","getBloodType","useIsHealthDataAvailable","isAvailable","setIsAvailable","res","useHealthkitAuthorization","status","setStatus","refreshAuthStatus","auth","request"],"sources":["index.ios.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react'\n\nimport Native, {\n EventEmitter,\n HKQuantityTypeIdentifier,\n HKUnit,\n HKCategoryTypeIdentifier,\n} from './native-types'\n\nimport type {\n HealthkitReadAuthorization,\n HealthkitWriteAuthorization,\n HKAuthorizationRequestStatus,\n HKCategorySampleRaw,\n HKCategoryValueForIdentifier,\n HKCorrelationRaw,\n HKCorrelationTypeIdentifier,\n HKQuantitySampleRaw,\n HKUnitSI,\n HKUnitSIPrefix,\n HKWorkoutRaw,\n MetadataMapperForCategoryIdentifier,\n ReadPermissions,\n SampleTypeIdentifier,\n WritePermissions,\n} from './native-types'\nimport type {\n GenericQueryOptions,\n GetMostRecentCategorySampleFn,\n GetMostRecentQuantitySampleFn,\n GetMostRecentWorkoutFn,\n GetPreferredUnitFn,\n GetPreferredUnitsFn,\n GetWorkoutRoutesFn,\n HKCategorySample,\n HKCorrelation,\n HKQuantitySample,\n HKWorkout,\n QueryCategorySamplesFn,\n QueryCorrelationSamplesFn,\n QueryQuantitySamplesFn,\n QueryStatisticsForQuantityFn,\n QueryWorkoutsFn,\n ReactNativeHealthkit,\n SaveCorrelationSampleFn,\n SaveQuantitySampleFn,\n SaveWorkoutSampleFn,\n SubscribeToChangesFn,\n} from './types'\n\nconst getPreferredUnit: GetPreferredUnitFn = async (type) => {\n const [unit] = await getPreferredUnits([type])\n return unit\n}\n\nconst ensureUnit = async <TUnit extends HKUnit>(\n type: HKQuantityTypeIdentifier,\n providedUnit?: TUnit,\n) => {\n if (providedUnit) {\n return providedUnit\n }\n const unit = await Native.getPreferredUnits([type])\n return unit[type] as TUnit\n}\n\nfunction deserializeSample<\n TIdentifier extends HKQuantityTypeIdentifier,\n TUnit extends HKUnit\n>(\n sample: HKQuantitySampleRaw<TIdentifier, TUnit>,\n): HKQuantitySample<TIdentifier, TUnit> {\n return {\n ...sample,\n startDate: new Date(sample.startDate),\n endDate: new Date(sample.endDate),\n }\n}\n\nfunction deserializeWorkout<TEnergy extends HKUnit, TDistance extends HKUnit>(\n sample: HKWorkoutRaw<TEnergy, TDistance>,\n): HKWorkout<TEnergy, TDistance> {\n return {\n ...sample,\n startDate: new Date(sample.startDate),\n endDate: new Date(sample.endDate),\n }\n}\n\nconst deserializCategorySample = <T extends HKCategoryTypeIdentifier>(\n sample: HKCategorySampleRaw<T>,\n): HKCategorySample<T> => ({\n ...sample,\n startDate: new Date(sample.startDate),\n endDate: new Date(sample.endDate),\n})\n\nconst serializeDate = (date?: Date | null): string => (date ? date.toISOString() : new Date(0).toISOString())\n\nconst prepareOptions = (options: GenericQueryOptions) => {\n const limit = !options.limit || options.limit === Infinity ? 0 : options.limit\n const ascending = options.ascending ?? limit === 0\n const from = serializeDate(options.from)\n const to = serializeDate(options.to)\n return {\n limit, ascending, from, to,\n }\n}\n\nconst queryQuantitySamples: QueryQuantitySamplesFn = async (\n identifier,\n options,\n) => {\n const unit = await ensureUnit(identifier, options.unit)\n const opts = prepareOptions(options)\n\n const quantitySamples = await Native.queryQuantitySamples(\n identifier,\n unit,\n opts.from,\n opts.to,\n opts.limit,\n opts.ascending,\n )\n\n return quantitySamples.map(deserializeSample)\n}\n\nasync function getPreferredUnitsTyped<\n TEnergy extends HKUnit,\n TDistance extends HKUnit\n>(options?: { readonly energyUnit?: TEnergy; readonly distanceUnit?: TDistance }) {\n let energyUnit = options?.energyUnit\n let distanceUnit = options?.distanceUnit\n if (!energyUnit || !distanceUnit) {\n const units = await Native.getPreferredUnits([\n HKQuantityTypeIdentifier.distanceWalkingRunning,\n HKQuantityTypeIdentifier.activeEnergyBurned,\n ])\n if (!energyUnit) {\n energyUnit = units[HKQuantityTypeIdentifier.distanceWalkingRunning] as\n | TEnergy\n | undefined\n }\n if (!distanceUnit) {\n distanceUnit = units[HKQuantityTypeIdentifier.activeEnergyBurned] as\n | TDistance\n | undefined\n }\n }\n if (!energyUnit) {\n energyUnit = HKUnit.Kilocalories as TEnergy\n }\n if (!distanceUnit) {\n distanceUnit = HKUnit.Meters as TDistance\n }\n return { energyUnit, distanceUnit }\n}\n\nconst subscribeToChanges: SubscribeToChangesFn = async (\n identifier,\n callback,\n) => {\n const subscription = EventEmitter.addListener(\n 'onChange',\n ({ typeIdentifier }) => {\n if (typeIdentifier === identifier) {\n callback()\n }\n },\n )\n\n const queryId = await Native.subscribeToObserverQuery(identifier).catch(\n async (error) => {\n subscription.remove()\n return Promise.reject(error)\n },\n )\n\n return async () => {\n subscription.remove()\n return Native.unsubscribeQuery(queryId)\n }\n}\n\nconst getMostRecentQuantitySample: GetMostRecentQuantitySampleFn = async (\n identifier,\n unit,\n) => {\n const samples = await queryQuantitySamples(identifier, {\n limit: 1,\n unit,\n })\n return samples[0]\n}\n\nfunction useMostRecentWorkout<\n TEnergy extends HKUnit,\n TDistance extends HKUnit\n>(options?: { readonly energyUnit?: TEnergy; readonly distanceUnit?: TDistance }) {\n const [workout, setWorkout] = useState<HKWorkout<TEnergy, TDistance> | null>(\n null,\n )\n useEffect(() => {\n let cancelSubscription: (() => Promise<boolean>) | undefined\n\n const init = async () => {\n const { energyUnit, distanceUnit } = await getPreferredUnitsTyped(\n options,\n )\n\n cancelSubscription = await subscribeToChanges(\n 'HKWorkoutTypeIdentifier',\n async () => {\n const w = await getMostRecentWorkout({ energyUnit, distanceUnit })\n setWorkout(w)\n },\n )\n }\n void init()\n return () => {\n void cancelSubscription?.()\n }\n }, [options])\n return workout\n}\n\nconst getMostRecentCategorySample: GetMostRecentCategorySampleFn = async (\n identifier,\n) => {\n const samples = await queryCategorySamples(identifier, {\n limit: 1,\n ascending: false,\n })\n\n return samples[0]\n}\n\nfunction useSubscribeToChanges<TIdentifier extends SampleTypeIdentifier>(\n identifier: TIdentifier,\n onChange: () => void,\n): void {\n useEffect(() => {\n let cancelSubscription: (() => Promise<boolean>) | undefined\n\n const init = async () => {\n cancelSubscription = await subscribeToChanges(identifier, onChange)\n }\n void init()\n\n return () => {\n void cancelSubscription?.()\n }\n }, [identifier, onChange])\n}\n\nuseSubscribeToChanges(HKCategoryTypeIdentifier.appleStandHour, () => {})\n\nfunction useMostRecentCategorySample<\n TCategory extends HKCategoryTypeIdentifier\n>(identifier: TCategory) {\n const [category, setCategory] = useState<HKCategorySample<TCategory> | null>(\n null,\n )\n const updater = useCallback(() => {\n void getMostRecentCategorySample(identifier).then(setCategory)\n }, [identifier])\n\n useSubscribeToChanges(identifier, updater)\n\n return category\n}\n\nfunction useMostRecentQuantitySample<\n TIdentifier extends HKQuantityTypeIdentifier,\n TUnit extends HKUnit = HKUnit\n>(identifier: TIdentifier, unit?: TUnit) {\n const [lastSample, setLastSample] = useState<HKQuantitySample<\n TIdentifier,\n TUnit\n > | null>(null)\n\n useEffect(() => {\n let cancelSubscription: (() => Promise<boolean>) | undefined\n\n const init = async () => {\n const actualUnit = await ensureUnit(identifier, unit)\n\n cancelSubscription = await subscribeToChanges(identifier, async () => {\n const value = await getMostRecentQuantitySample(identifier, actualUnit)\n setLastSample(value)\n })\n }\n void init()\n\n return () => {\n void cancelSubscription?.()\n }\n }, [identifier, unit])\n\n return lastSample\n}\n\nconst saveQuantitySample: SaveQuantitySampleFn = async (\n identifier,\n unit,\n value,\n options,\n) => {\n const start = options?.start || options?.end || new Date()\n const end = options?.end || options?.start || new Date()\n const metadata = options?.metadata || {}\n\n return Native.saveQuantitySample(\n identifier,\n unit,\n value,\n start.toISOString(),\n end.toISOString(),\n metadata,\n )\n}\n\nconst queryStatisticsForQuantity: QueryStatisticsForQuantityFn = async (\n identifier,\n options,\n from,\n to,\n unit,\n) => {\n const actualUnit = await ensureUnit(identifier, unit)\n const toDate = to || new Date()\n const { mostRecentQuantityDateInterval, ...rawResponse } = await Native.queryStatisticsForQuantity(\n identifier,\n actualUnit,\n from.toISOString(),\n toDate.toISOString(),\n options,\n )\n\n const response = {\n ...rawResponse,\n ...(mostRecentQuantityDateInterval\n ? {\n mostRecentQuantityDateInterval: {\n from: new Date(mostRecentQuantityDateInterval.from),\n to: new Date(mostRecentQuantityDateInterval.to),\n },\n }\n : {}),\n }\n\n return response\n}\n\nconst requestAuthorization = async (\n read: readonly HealthkitReadAuthorization[],\n write: readonly HealthkitWriteAuthorization[] = [],\n): Promise<boolean> => {\n const readPermissions = read.reduce((obj, cur) => ({ ...obj, [cur]: true }), {} as ReadPermissions)\n\n const writePermissions = write.reduce((obj, cur) => ({ ...obj, [cur]: true }), {} as WritePermissions)\n\n return Native.requestAuthorization(writePermissions, readPermissions)\n}\n\nconst getDateOfBirth = async () => {\n const dateOfBirth = await Native.getDateOfBirth()\n return new Date(dateOfBirth)\n}\n\nconst getRequestStatusForAuthorization = async (\n read: readonly HealthkitReadAuthorization[],\n write: readonly HealthkitWriteAuthorization[] = [],\n) => {\n const readPermissions = read.reduce((obj, cur) => ({ ...obj, [cur]: true }), {} as ReadPermissions)\n\n const writePermissions = write.reduce((obj, cur) => ({ ...obj, [cur]: true }), {} as WritePermissions)\n\n return Native.getRequestStatusForAuthorization(\n writePermissions,\n readPermissions,\n )\n}\n\nconst queryCategorySamples: QueryCategorySamplesFn = async (\n identifier,\n options,\n) => {\n const opts = prepareOptions(options)\n const results = await Native.queryCategorySamples(\n identifier,\n opts.from,\n opts.to,\n opts.limit,\n opts.ascending,\n )\n\n return results.map(deserializCategorySample)\n}\n\nconst queryWorkouts: QueryWorkoutsFn = async (options) => {\n const { energyUnit, distanceUnit } = await getPreferredUnitsTyped(options)\n const opts = prepareOptions(options)\n\n const workouts = await Native.queryWorkoutSamples(\n energyUnit,\n distanceUnit,\n opts.from,\n opts.to,\n opts.limit,\n opts.ascending,\n )\n\n return workouts.map(deserializeWorkout)\n}\n\nconst getMostRecentWorkout: GetMostRecentWorkoutFn = async (options) => {\n const workouts = await queryWorkouts({\n limit: 1,\n ascending: false,\n energyUnit: options?.energyUnit,\n distanceUnit: options?.distanceUnit,\n })\n\n return workouts[0]\n}\n\nasync function saveCategorySample<T extends HKCategoryTypeIdentifier>(\n identifier: T,\n value: HKCategoryValueForIdentifier<T>,\n options?: {\n readonly start?: Date;\n readonly end?: Date;\n readonly metadata?: MetadataMapperForCategoryIdentifier<T>;\n },\n) {\n const start = options?.start || options?.end || new Date()\n const end = options?.end || options?.start || new Date()\n const metadata = options?.metadata || {}\n\n return Native.saveCategorySample(\n identifier,\n value,\n start.toISOString(),\n end.toISOString(),\n metadata || {},\n )\n}\n\nconst getPreferredUnits: GetPreferredUnitsFn = async (identifiers) => {\n const units = await Native.getPreferredUnits(identifiers)\n return identifiers.map((i) => units[i])\n}\n\nconst buildUnitWithPrefix = (prefix: HKUnitSIPrefix, unit: HKUnitSI) => `${prefix}${unit}` as HKUnit\n\nfunction deserializeCorrelation<\n TIdentifier extends HKCorrelationTypeIdentifier\n>(s: HKCorrelationRaw<TIdentifier>): HKCorrelation<TIdentifier> {\n return {\n ...s,\n objects: s.objects.map((o) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (o.quantity !== undefined) {\n return deserializeSample(o as HKQuantitySampleRaw)\n }\n\n return deserializCategorySample(o as HKCategorySampleRaw)\n }),\n endDate: new Date(s.endDate),\n startDate: new Date(s.startDate),\n }\n}\n\nfunction ensureMetadata<TMetadata>(metadata?: TMetadata) {\n return metadata || ({} as TMetadata)\n}\n\nconst queryCorrelationSamples: QueryCorrelationSamplesFn = async (\n typeIdentifier,\n options,\n) => {\n const opts = prepareOptions(options)\n const correlations = await Native.queryCorrelationSamples(\n typeIdentifier,\n opts.from,\n opts.to,\n )\n\n return correlations.map(deserializeCorrelation)\n}\n\nconst saveCorrelationSample: SaveCorrelationSampleFn = async (\n typeIdentifier,\n samples,\n options,\n) => {\n const start = (options?.start || new Date()).toISOString()\n const end = (options?.end || new Date()).toISOString()\n\n return Native.saveCorrelationSample(\n typeIdentifier,\n samples,\n start,\n end,\n ensureMetadata(options?.metadata),\n )\n}\n\nconst saveWorkoutSample: SaveWorkoutSampleFn = async (\n typeIdentifier,\n quantities,\n _start,\n options,\n) => {\n const start = _start.toISOString()\n const end = (options?.end || new Date()).toISOString()\n\n return Native.saveWorkoutSample(\n typeIdentifier,\n quantities,\n start,\n end,\n ensureMetadata(options?.metadata),\n )\n}\n\nconst getWorkoutRoutes: GetWorkoutRoutesFn = async (workoutUUID: string) => Native.getWorkoutRoutes(workoutUUID)\n\nconst Healthkit: ReactNativeHealthkit = {\n authorizationStatusFor: Native.authorizationStatusFor.bind(Native),\n\n isHealthDataAvailable: Native.isHealthDataAvailable.bind(Native),\n\n buildUnitWithPrefix,\n\n disableAllBackgroundDelivery: Native.disableAllBackgroundDelivery,\n disableBackgroundDelivery: Native.disableBackgroundDelivery,\n enableBackgroundDelivery: Native.enableBackgroundDelivery,\n\n // simple convenience getters\n getBiologicalSex: Native.getBiologicalSex.bind(Native),\n getFitzpatrickSkinType: Native.getFitzpatrickSkinType.bind(Native),\n getWheelchairUse: Native.getWheelchairUse,\n getBloodType: Native.getBloodType.bind(Native),\n getDateOfBirth,\n\n getMostRecentQuantitySample,\n getMostRecentCategorySample,\n getMostRecentWorkout,\n\n getPreferredUnit,\n getPreferredUnits,\n getRequestStatusForAuthorization,\n\n getWorkoutRoutes,\n\n // query methods\n queryCategorySamples,\n queryCorrelationSamples,\n queryQuantitySamples,\n queryStatisticsForQuantity,\n queryWorkouts,\n\n requestAuthorization,\n\n // save methods\n saveCategorySample,\n saveCorrelationSample,\n saveQuantitySample,\n saveWorkoutSample,\n\n // subscriptions\n subscribeToChanges,\n\n // hooks\n useMostRecentCategorySample,\n\n useMostRecentQuantitySample,\n useMostRecentWorkout,\n\n useSubscribeToChanges,\n\n useIsHealthDataAvailable: () => {\n const [isAvailable, setIsAvailable] = useState<boolean | null>(null)\n useEffect(() => {\n const init = async () => {\n const res = await Native.isHealthDataAvailable()\n setIsAvailable(res)\n }\n void init()\n }, [])\n return isAvailable\n },\n useHealthkitAuthorization: (read, write) => {\n const [status, setStatus] = useState<HKAuthorizationRequestStatus | null>(null)\n const refreshAuthStatus = useCallback(async () => {\n const auth = await getRequestStatusForAuthorization(read, write)\n setStatus(auth)\n return auth\n }, [])\n\n const request = useCallback(async () => {\n await requestAuthorization(read, write)\n return refreshAuthStatus()\n }, [])\n\n useEffect(() => {\n void refreshAuthStatus()\n }, [])\n\n return [status, request]\n },\n}\n\nexport * from './native-types'\nexport * from './types'\n\nexport default Healthkit\n"],"mappings":"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"}
@@ -35,46 +35,59 @@ Object.keys(_types).forEach(function (key) {
35
35
  }
36
36
  });
37
37
  });
38
- const notAvailableError = 'Platform "' + _reactNative.Platform.OS + '" not supported, use isHealthDataAvailable to check for availability before using it';
38
+ const notAvailableError = `[@kingstinct/react-native-healthkit] Platform "${_reactNative.Platform.OS}" not supported`;
39
39
 
40
- const UnavailableFn = () => {
41
- throw new Error(notAvailableError);
42
- };
40
+ function UnavailableFn(retVal) {
41
+ return () => {
42
+ console.warn(notAvailableError);
43
+ return retVal;
44
+ };
45
+ }
43
46
 
44
47
  const Healthkit = {
45
- authorizationStatusFor: UnavailableFn,
46
- buildUnitWithPrefix: UnavailableFn,
47
- disableAllBackgroundDelivery: UnavailableFn,
48
- disableBackgroundDelivery: UnavailableFn,
49
- enableBackgroundDelivery: UnavailableFn,
50
- getBiologicalSex: UnavailableFn,
51
- getBloodType: UnavailableFn,
52
- getDateOfBirth: UnavailableFn,
53
- getFitzpatrickSkinType: UnavailableFn,
54
- getMostRecentCategorySample: UnavailableFn,
55
- getMostRecentQuantitySample: UnavailableFn,
56
- getMostRecentWorkout: UnavailableFn,
57
- getPreferredUnit: UnavailableFn,
58
- getPreferredUnits: UnavailableFn,
59
- getRequestStatusForAuthorization: UnavailableFn,
60
- getWheelchairUse: UnavailableFn,
61
- getWorkoutRoutes: UnavailableFn,
62
- isHealthDataAvailable: () => Promise.resolve(false),
63
- queryCategorySamples: UnavailableFn,
64
- queryCorrelationSamples: UnavailableFn,
65
- queryQuantitySamples: UnavailableFn,
66
- queryStatisticsForQuantity: UnavailableFn,
67
- queryWorkouts: UnavailableFn,
68
- requestAuthorization: UnavailableFn,
69
- saveCategorySample: UnavailableFn,
70
- saveCorrelationSample: UnavailableFn,
71
- saveQuantitySample: UnavailableFn,
72
- saveWorkoutSample: UnavailableFn,
73
- subscribeToChanges: UnavailableFn,
74
- useMostRecentCategorySample: UnavailableFn,
75
- useMostRecentQuantitySample: UnavailableFn,
76
- useMostRecentWorkout: UnavailableFn,
77
- useSubscribeToChanges: UnavailableFn
48
+ authorizationStatusFor: UnavailableFn(Promise.resolve(false)),
49
+ buildUnitWithPrefix: UnavailableFn(_nativeTypes.HKUnit.Atmospheres),
50
+ disableAllBackgroundDelivery: UnavailableFn(Promise.resolve(false)),
51
+ disableBackgroundDelivery: UnavailableFn(Promise.resolve(false)),
52
+ enableBackgroundDelivery: UnavailableFn(Promise.resolve(false)),
53
+ getBiologicalSex: UnavailableFn(Promise.resolve(_nativeTypes.HKBiologicalSex.notSet)),
54
+ getBloodType: UnavailableFn(Promise.resolve(_nativeTypes.HKBloodType.notSet)),
55
+ getDateOfBirth: UnavailableFn(Promise.resolve(new Date(0))),
56
+ getFitzpatrickSkinType: UnavailableFn(Promise.resolve(_nativeTypes.HKFitzpatrickSkinType.notSet)),
57
+ getMostRecentCategorySample: UnavailableFn(Promise.resolve(null)),
58
+ getMostRecentQuantitySample: UnavailableFn(Promise.resolve(null)),
59
+ getMostRecentWorkout: UnavailableFn(Promise.resolve(null)),
60
+ getPreferredUnit: UnavailableFn(Promise.resolve(_nativeTypes.HKUnit.Atmospheres)),
61
+ getPreferredUnits: UnavailableFn(Promise.resolve([])),
62
+ getRequestStatusForAuthorization: UnavailableFn(Promise.resolve(_nativeTypes.HKAuthorizationRequestStatus.unknown)),
63
+ getWheelchairUse: UnavailableFn(Promise.resolve(_nativeTypes.HKWheelchairUse.notSet)),
64
+ getWorkoutRoutes: UnavailableFn(Promise.resolve([])),
65
+ isHealthDataAvailable: async () => Promise.resolve(false),
66
+ queryCategorySamples: UnavailableFn(Promise.resolve([])),
67
+ queryCorrelationSamples: UnavailableFn(Promise.resolve([])),
68
+ queryQuantitySamples: UnavailableFn(Promise.resolve([])),
69
+ queryStatisticsForQuantity: UnavailableFn(Promise.resolve({
70
+ averageQuantity: undefined,
71
+ maximumQuantity: undefined,
72
+ minimumQuantity: undefined,
73
+ sumQuantity: undefined,
74
+ mostRecentQuantity: undefined,
75
+ mostRecentQuantityDateInterval: undefined,
76
+ duration: undefined
77
+ })),
78
+ queryWorkouts: UnavailableFn(Promise.resolve([])),
79
+ requestAuthorization: UnavailableFn(Promise.resolve(false)),
80
+ saveCategorySample: UnavailableFn(Promise.resolve(false)),
81
+ saveCorrelationSample: UnavailableFn(Promise.resolve(false)),
82
+ saveQuantitySample: UnavailableFn(Promise.resolve(false)),
83
+ saveWorkoutSample: UnavailableFn(Promise.resolve(false)),
84
+ subscribeToChanges: UnavailableFn(Promise.resolve(async () => Promise.resolve(false))),
85
+ useMostRecentCategorySample: UnavailableFn(null),
86
+ useMostRecentQuantitySample: UnavailableFn(null),
87
+ useMostRecentWorkout: UnavailableFn(null),
88
+ useSubscribeToChanges: UnavailableFn([null, () => null]),
89
+ useHealthkitAuthorization: UnavailableFn([null, async () => Promise.resolve(null)]),
90
+ useIsHealthDataAvailable: UnavailableFn(false)
78
91
  };
79
92
  var _default = Healthkit;
80
93
  exports.default = _default;