UNPKG

cordova-plugin-health

Version:

A plugin that abstracts fitness and health repositories like Apple HealthKit or Google Health Connect

139 lines (115 loc) 4.27 kB
function HealthKit () { } var matches = function (object, typeOrClass) { return (typeof typeOrClass === 'string') ? typeof object === typeOrClass : object instanceof typeOrClass; }; var rounds = function (object, prop) { var val = object[prop]; if (!matches(val, Date)) return; object[prop] = Math.round(val.getTime() / 1000); }; var hasValidDates = function (object) { if (!matches(object.startDate, Date)) { throw new TypeError("startDate must be a JavaScript Date Object"); } if (!matches(object.endDate, Date)) { throw new TypeError("endDate must be a JavaScript Date Object"); } rounds(object, 'startDate'); rounds(object, 'endDate'); return object; }; var getChecker = function (options) { return function paramChecker (type) { var value = options[type]; if (type === 'startDate' || type === 'endDate') { if (!matches(value, Date)) throw new TypeError(type + ' must be a JavaScript Date'); } else if (type === 'samples') { if (!Array.isArray(value)) throw new TypeError(type + ' must be a JavaScript Array'); } else { if (!value) throw new TypeError('Missing required paramter ' + type); } }; }; // Supports: // define('type'); // define('type', fn); // define('type', obj); // define('type', obj, fn) var define = function (methodName, params, fn) { if (params == null) params = {}; if (typeof params === 'function') { fn = params; params = {}; } if (!fn) fn = Function.prototype; var isEmpty = !!(params && params.noArgs); var checks = params.required || []; if (!Array.isArray(checks)) checks = [checks]; if (isEmpty) { HealthKit.prototype[methodName] = function (callback, onError) { cordova.exec(callback, onError, 'HealthKit', methodName, []); }; } else { HealthKit.prototype[methodName] = function (options, callback, onError) { if (!options) options = {}; try { checks.forEach(getChecker(options)); fn(options); } catch (error) { onError(error.message); } var args = options ? [options] : []; cordova.exec(callback, onError, 'HealthKit', methodName, args); }; }; }; define('available', { noArgs: true }); define('checkAuthStatus'); define('requestAuthorization'); define('readDateOfBirth', { noArgs: true }); define('readGender', { noArgs: true }); define('readFitzpatrickSkinType', { noArgs: true }); define('findWorkouts'); define('queryWorkoutRoutes'); define('queryHeartRateDuringWorkout'); define('delete'); define('readWeight'); define('readHeight'); define('readBloodType', { noArgs: true }); define('saveWeight', function (options) { if (options.date == null) options.date = new Date(); if (typeof options.date === 'object') rounds(options, 'date'); }); define('saveHeight', function (options) { if (options.date == null) options.date = new Date(); if (typeof options.date === 'object') rounds(options, 'date'); }); define('saveWorkout', { required: 'startDate' }, function (options) { var hasEnd = matches(options.endDate, Date); var hasDuration = options.duration && options.duration > 0; rounds(options, 'startDate'); if (!hasEnd && !hasDuration) { throw new TypeError("endDate must be JavaScript Date Object, or the duration must be set"); } if (hasEnd) rounds(options, 'endDate'); }); define('monitorSampleType', { required: 'sampleType' }); define('querySampleType', { required: 'sampleType' }, hasValidDates); define('querySampleTypeAggregated', { required: 'sampleType' }, hasValidDates); define('deleteSamples', { required: 'sampleType' }, hasValidDates); define('queryCorrelationType', { required: 'correlationType' }, hasValidDates); define('saveSample', { required: 'sampleType' }, hasValidDates); define('saveCorrelation', { required: ['correlationType', 'samples'] }, function (options) { hasValidDates(options); options.objects = options.samples.map(hasValidDates); }); define('sumQuantityType', { required: ['sampleType'] }, hasValidDates); define('openHealthSettings', { noArgs: true }); HealthKit.install = function () { if (!window.plugins) window.plugins = {}; window.plugins.healthkit = new HealthKit(); return window.plugins.healthkit; }; cordova.addConstructor(HealthKit.install);