react-native-healthkit-bridge
Version:
A comprehensive React Native bridge for Apple HealthKit with TypeScript support, advanced authorization, and flexible data queries
711 lines (594 loc) • 30.4 kB
text/typescript
import { HealthKitIdentifiers } from './HealthKitIdentifiers';
import { HealthKitUnits } from './HealthKitUnits';
// Enums para identificadores do HealthKit
export enum QuantityTypeIdentifier {
// Activity & Fitness
StepCount = 'HKQuantityTypeIdentifierStepCount',
DistanceWalkingRunning = 'HKQuantityTypeIdentifierDistanceWalkingRunning',
DistanceCycling = 'HKQuantityTypeIdentifierDistanceCycling',
DistanceSwimming = 'HKQuantityTypeIdentifierDistanceSwimming',
ActiveEnergyBurned = 'HKQuantityTypeIdentifierActiveEnergyBurned',
BasalEnergyBurned = 'HKQuantityTypeIdentifierBasalEnergyBurned',
AppleExerciseTime = 'HKQuantityTypeIdentifierAppleExerciseTime',
FlightsClimbed = 'HKQuantityTypeIdentifierFlightsClimbed',
SwimmingStrokeCount = 'HKQuantityTypeIdentifierSwimmingStrokeCount',
ExerciseTime = 'HKQuantityTypeIdentifierExerciseTime',
StandTime = 'HKQuantityTypeIdentifierStandTime',
PushCount = 'HKQuantityTypeIdentifierPushCount',
DistanceWheelchair = 'HKQuantityTypeIdentifierDistanceWheelchair',
DistanceDownhillSnowSports = 'HKQuantityTypeIdentifierDistanceDownhillSnowSports',
// Heart
HeartRate = 'HKQuantityTypeIdentifierHeartRate',
RestingHeartRate = 'HKQuantityTypeIdentifierRestingHeartRate',
WalkingHeartRateAverage = 'HKQuantityTypeIdentifierWalkingHeartRateAverage',
HeartRateVariabilitySDNN = 'HKQuantityTypeIdentifierHeartRateVariabilitySDNN',
IrregularHeartRhythmEvent = 'HKQuantityTypeIdentifierIrregularHeartRhythmEvent',
HighHeartRateEvent = 'HKQuantityTypeIdentifierHighHeartRateEvent',
LowHeartRateEvent = 'HKQuantityTypeIdentifierLowHeartRateEvent',
// Body Measurements
Height = 'HKQuantityTypeIdentifierHeight',
BodyMass = 'HKQuantityTypeIdentifierBodyMass',
BodyFatPercentage = 'HKQuantityTypeIdentifierBodyFatPercentage',
LeanBodyMass = 'HKQuantityTypeIdentifierLeanBodyMass',
BodyTemperature = 'HKQuantityTypeIdentifierBodyTemperature',
WaistCircumference = 'HKQuantityTypeIdentifierWaistCircumference',
HipCircumference = 'HKQuantityTypeIdentifierHipCircumference',
HeadCircumference = 'HKQuantityTypeIdentifierHeadCircumference',
BodyMassIndex = 'HKQuantityTypeIdentifierBodyMassIndex',
// Vitals
BloodPressureSystolic = 'HKQuantityTypeIdentifierBloodPressureSystolic',
BloodPressureDiastolic = 'HKQuantityTypeIdentifierBloodPressureDiastolic',
OxygenSaturation = 'HKQuantityTypeIdentifierOxygenSaturation',
RespiratoryRate = 'HKQuantityTypeIdentifierRespiratoryRate',
PeripheralPerfusionIndex = 'HKQuantityTypeIdentifierPeripheralPerfusionIndex',
// Lab Results
BloodGlucose = 'HKQuantityTypeIdentifierBloodGlucose',
VO2Max = 'HKQuantityTypeIdentifierVO2Max',
BloodAlcoholContent = 'HKQuantityTypeIdentifierBloodAlcoholContent',
BloodTypeA = 'HKQuantityTypeIdentifierBloodTypeA',
BloodTypeB = 'HKQuantityTypeIdentifierBloodTypeB',
BloodTypeAB = 'HKQuantityTypeIdentifierBloodTypeAB',
BloodTypeO = 'HKQuantityTypeIdentifierBloodTypeO',
InsulinDelivery = 'HKQuantityTypeIdentifierInsulinDelivery',
NumberOfTimesFallen = 'HKQuantityTypeIdentifierNumberOfTimesFallen',
ElectrodermalActivity = 'HKQuantityTypeIdentifierElectrodermalActivity',
InhalerUsage = 'HKQuantityTypeIdentifierInhalerUsage',
// Nutrition
DietaryEnergy = 'HKQuantityTypeIdentifierDietaryEnergy',
DietaryFatTotal = 'HKQuantityTypeIdentifierDietaryFatTotal',
DietaryFatPolyunsaturated = 'HKQuantityTypeIdentifierDietaryFatPolyunsaturated',
DietaryFatMonounsaturated = 'HKQuantityTypeIdentifierDietaryFatMonounsaturated',
DietaryFatSaturated = 'HKQuantityTypeIdentifierDietaryFatSaturated',
DietaryCholesterol = 'HKQuantityTypeIdentifierDietaryCholesterol',
DietarySodium = 'HKQuantityTypeIdentifierDietarySodium',
DietaryCarbohydrates = 'HKQuantityTypeIdentifierDietaryCarbohydrates',
DietaryFiber = 'HKQuantityTypeIdentifierDietaryFiber',
DietarySugar = 'HKQuantityTypeIdentifierDietarySugar',
DietaryProtein = 'HKQuantityTypeIdentifierDietaryProtein',
DietaryVitaminA = 'HKQuantityTypeIdentifierDietaryVitaminA',
DietaryVitaminB6 = 'HKQuantityTypeIdentifierDietaryVitaminB6',
DietaryVitaminB12 = 'HKQuantityTypeIdentifierDietaryVitaminB12',
DietaryVitaminC = 'HKQuantityTypeIdentifierDietaryVitaminC',
DietaryVitaminD = 'HKQuantityTypeIdentifierDietaryVitaminD',
DietaryVitaminE = 'HKQuantityTypeIdentifierDietaryVitaminE',
DietaryVitaminK = 'HKQuantityTypeIdentifierDietaryVitaminK',
DietaryCalcium = 'HKQuantityTypeIdentifierDietaryCalcium',
DietaryIron = 'HKQuantityTypeIdentifierDietaryIron',
DietaryThiamin = 'HKQuantityTypeIdentifierDietaryThiamin',
DietaryRiboflavin = 'HKQuantityTypeIdentifierDietaryRiboflavin',
DietaryNiacin = 'HKQuantityTypeIdentifierDietaryNiacin',
DietaryFolate = 'HKQuantityTypeIdentifierDietaryFolate',
DietaryBiotin = 'HKQuantityTypeIdentifierDietaryBiotin',
DietaryPantothenicAcid = 'HKQuantityTypeIdentifierDietaryPantothenicAcid',
DietaryPhosphorus = 'HKQuantityTypeIdentifierDietaryPhosphorus',
DietaryIodine = 'HKQuantityTypeIdentifierDietaryIodine',
DietaryMagnesium = 'HKQuantityTypeIdentifierDietaryMagnesium',
DietaryZinc = 'HKQuantityTypeIdentifierDietaryZinc',
DietarySelenium = 'HKQuantityTypeIdentifierDietarySelenium',
DietaryCopper = 'HKQuantityTypeIdentifierDietaryCopper',
DietaryManganese = 'HKQuantityTypeIdentifierDietaryManganese',
DietaryChromium = 'HKQuantityTypeIdentifierDietaryChromium',
DietaryMolybdenum = 'HKQuantityTypeIdentifierDietaryMolybdenum',
DietaryChloride = 'HKQuantityTypeIdentifierDietaryChloride',
DietaryPotassium = 'HKQuantityTypeIdentifierDietaryPotassium',
DietaryCaffeine = 'HKQuantityTypeIdentifierDietaryCaffeine',
DietaryWater = 'HKQuantityTypeIdentifierDietaryWater',
// Mobility
WalkingSpeed = 'HKQuantityTypeIdentifierWalkingSpeed',
WalkingStepLength = 'HKQuantityTypeIdentifierWalkingStepLength',
WalkingAsymmetryPercentage = 'HKQuantityTypeIdentifierWalkingAsymmetryPercentage',
WalkingDoubleSupportPercentage = 'HKQuantityTypeIdentifierWalkingDoubleSupportPercentage',
StairAscentSpeed = 'HKQuantityTypeIdentifierStairAscentSpeed',
StairDescentSpeed = 'HKQuantityTypeIdentifierStairDescentSpeed',
SixMinuteWalkTestDistance = 'HKQuantityTypeIdentifierSixMinuteWalkTestDistance',
// Hearing
EnvironmentalAudioExposure = 'HKQuantityTypeIdentifierEnvironmentalAudioExposure',
HeadphoneAudioExposure = 'HKQuantityTypeIdentifierHeadphoneAudioExposure'
}
export enum CategoryTypeIdentifier {
// Activity
AppleStandHour = 'HKCategoryTypeIdentifierAppleStandHour',
AppleStandTime = 'HKCategoryTypeIdentifierAppleStandTime',
Caffeine = 'HKCategoryTypeIdentifierCaffeine',
WaterConsumed = 'HKCategoryTypeIdentifierWaterConsumed',
// Sleep
SleepAnalysis = 'HKCategoryTypeIdentifierSleepAnalysis',
// Mindfulness
MindfulSession = 'HKCategoryTypeIdentifierMindfulSession',
// Reproductive Health
MenstrualFlow = 'HKCategoryTypeIdentifierMenstrualFlow',
IntermenstrualBleeding = 'HKCategoryTypeIdentifierIntermenstrualBleeding',
SexualActivity = 'HKCategoryTypeIdentifierSexualActivity',
CervicalMucusQuality = 'HKCategoryTypeIdentifierCervicalMucusQuality',
OvulationTestResult = 'HKCategoryTypeIdentifierOvulationTestResult',
Pregnancy = 'HKCategoryTypeIdentifierPregnancy',
Lactation = 'HKCategoryTypeIdentifierLactation',
Contraceptive = 'HKCategoryTypeIdentifierContraceptive',
// Heart
HighHeartRateEvent = 'HKCategoryTypeIdentifierHighHeartRateEvent',
LowHeartRateEvent = 'HKCategoryTypeIdentifierLowHeartRateEvent',
IrregularHeartRhythmEvent = 'HKCategoryTypeIdentifierIrregularHeartRhythmEvent',
HeartRhythm = 'HKCategoryTypeIdentifierHeartRhythm',
// Hearing
AudioExposureEvent = 'HKCategoryTypeIdentifierAudioExposureEvent',
// Mobility
WalkingSteadiness = 'HKCategoryTypeIdentifierWalkingSteadiness',
StairAscentEvent = 'HKCategoryTypeIdentifierStairAscentEvent',
StairDescentEvent = 'HKCategoryTypeIdentifierStairDescentEvent',
// Other
ToothbrushingEvent = 'HKCategoryTypeIdentifierToothbrushingEvent',
HandwashingEvent = 'HKCategoryTypeIdentifierHandwashingEvent',
Dizziness = 'HKCategoryTypeIdentifierDizziness',
Headache = 'HKCategoryTypeIdentifierHeadache',
Acne = 'HKCategoryTypeIdentifierAcne',
AppetiteChanges = 'HKCategoryTypeIdentifierAppetiteChanges',
ChestTightnessOrPain = 'HKCategoryTypeIdentifierChestTightnessOrPain',
Chills = 'HKCategoryTypeIdentifierChills',
Constipation = 'HKCategoryTypeIdentifierConstipation',
Coughing = 'HKCategoryTypeIdentifierCoughing',
Diarrhea = 'HKCategoryTypeIdentifierDiarrhea',
DrySkin = 'HKCategoryTypeIdentifierDrySkin',
Fainting = 'HKCategoryTypeIdentifierFainting',
Fatigue = 'HKCategoryTypeIdentifierFatigue',
Fever = 'HKCategoryTypeIdentifierFever',
GeneralChestDiscomfort = 'HKCategoryTypeIdentifierGeneralChestDiscomfort',
HairLoss = 'HKCategoryTypeIdentifierHairLoss',
HotFlashes = 'HKCategoryTypeIdentifierHotFlashes',
LossOfSmell = 'HKCategoryTypeIdentifierLossOfSmell',
LossOfTaste = 'HKCategoryTypeIdentifierLossOfTaste',
LowerBackPain = 'HKCategoryTypeIdentifierLowerBackPain',
MemoryLapse = 'HKCategoryTypeIdentifierMemoryLapse',
MoodChanges = 'HKCategoryTypeIdentifierMoodChanges',
Nausea = 'HKCategoryTypeIdentifierNausea',
NightSweats = 'HKCategoryTypeIdentifierNightSweats',
PelvicPain = 'HKCategoryTypeIdentifierPelvicPain',
RapidPoundingOrFlutteringHeartbeat = 'HKCategoryTypeIdentifierRapidPoundingOrFlutteringHeartbeat',
RunnyNose = 'HKCategoryTypeIdentifierRunnyNose',
ShortnessOfBreath = 'HKCategoryTypeIdentifierShortnessOfBreath',
SinusCongestion = 'HKCategoryTypeIdentifierSinusCongestion',
SkippedHeartbeat = 'HKCategoryTypeIdentifierSkippedHeartbeat',
SleepChanges = 'HKCategoryTypeIdentifierSleepChanges',
SoreThroat = 'HKCategoryTypeIdentifierSoreThroat',
VaginalDryness = 'HKCategoryTypeIdentifierVaginalDryness',
Vomiting = 'HKCategoryTypeIdentifierVomiting',
Wheezing = 'HKCategoryTypeIdentifierWheezing'
}
export enum CharacteristicTypeIdentifier {
BiologicalSex = 'HKCharacteristicTypeIdentifierBiologicalSex',
DateOfBirth = 'HKCharacteristicTypeIdentifierDateOfBirth',
BloodType = 'HKCharacteristicTypeIdentifierBloodType',
FitzpatrickSkinType = 'HKCharacteristicTypeIdentifierFitzpatrickSkinType'
}
export enum WorkoutTypeIdentifier {
Workout = 'HKWorkoutTypeIdentifier'
}
// Enums para unidades do HealthKit
export enum HealthKitUnit {
// Count
count = 'count',
// Distance
meters = 'm',
kilometers = 'km',
millimeters = 'mm',
centimeters = 'cm',
feet = 'ft',
inches = 'in',
miles = 'mi',
// Energy
kilocalories = 'kcal',
calories = 'cal',
kilojoules = 'kJ',
// Time
seconds = 's',
minutes = 'min',
hours = 'hr',
// Heart rate
beatsPerMinute = 'bpm',
// Mass
kilograms = 'kg',
grams = 'g',
pounds = 'lb',
ounces = 'oz',
// Temperature
celsius = '°C',
fahrenheit = '°F',
// Pressure
millimetersOfMercury = 'mmHg',
// Blood glucose
milligramsPerDeciliter = 'mg/dL',
millimolesPerLiter = 'mmol/L',
// Percentage
percent = '%',
// Respiratory rate
breathsPerMinute = 'breaths/min',
// VO2 Max
millilitersPerKilogramPerMinute = 'mL/kg·min',
// Heart rate variability
milliseconds = 'ms',
// Volume
liters = 'L',
milliliters = 'mL',
fluidOunces = 'fl_oz',
cups = 'cup',
// Speed
metersPerSecond = 'm/s',
milesPerHour = 'mi/hr',
// Audio exposure
decibels = 'dB',
// Blood alcohol
gramsPerDeciliter = 'g/dL',
// Insulin
internationalUnits = 'IU',
// Electrodermal activity
siemens = 'S',
// Mobility
countPerMinute = 'count/min'
}
// Tipos para mapeamento de identificadores para unidades
export type QuantityTypeToUnit = {
// Activity & Fitness
[]: HealthKitUnit.count;
[]: HealthKitUnit.count;
[]: HealthKitUnit.count;
[]: HealthKitUnit.count;
[]: HealthKitUnit.count;
[]: HealthKitUnit.meters;
[]: HealthKitUnit.meters;
[]: HealthKitUnit.meters;
[]: HealthKitUnit.meters;
[]: HealthKitUnit.meters;
[]: HealthKitUnit.kilocalories;
[]: HealthKitUnit.kilocalories;
[]: HealthKitUnit.kilocalories;
[]: HealthKitUnit.minutes;
[]: HealthKitUnit.minutes;
[]: HealthKitUnit.minutes;
// Heart
[]: HealthKitUnit.beatsPerMinute;
[]: HealthKitUnit.beatsPerMinute;
[]: HealthKitUnit.beatsPerMinute;
[]: HealthKitUnit.milliseconds;
// Body Measurements
[]: HealthKitUnit.kilograms;
[]: HealthKitUnit.kilograms;
[]: HealthKitUnit.centimeters;
[]: HealthKitUnit.centimeters;
[]: HealthKitUnit.centimeters;
[]: HealthKitUnit.centimeters;
[]: HealthKitUnit.celsius;
[]: HealthKitUnit.millimetersOfMercury;
[]: HealthKitUnit.millimetersOfMercury;
[]: HealthKitUnit.milligramsPerDeciliter;
[]: HealthKitUnit.gramsPerDeciliter;
[]: HealthKitUnit.percent;
[]: HealthKitUnit.percent;
[]: HealthKitUnit.percent;
[]: HealthKitUnit.breathsPerMinute;
[]: HealthKitUnit.millilitersPerKilogramPerMinute;
[]: HealthKitUnit.internationalUnits;
[]: HealthKitUnit.siemens;
[]: HealthKitUnit.decibels;
[]: HealthKitUnit.decibels;
// Mobility
[]: HealthKitUnit.metersPerSecond;
[]: HealthKitUnit.centimeters;
[]: HealthKitUnit.percent;
[]: HealthKitUnit.percent;
[]: HealthKitUnit.metersPerSecond;
[]: HealthKitUnit.metersPerSecond;
[]: HealthKitUnit.meters;
// Nutrition - Mass
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
// Nutrition - Volume
[]: HealthKitUnit.liters;
// Nutrition - Minerals
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
// Nutrition - Vitamins
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
[]: HealthKitUnit.grams;
// Blood Types
[]: HealthKitUnit.count;
[]: HealthKitUnit.count;
[]: HealthKitUnit.count;
[]: HealthKitUnit.count;
// Other
[]: HealthKitUnit.count,
};
// Tipos para os dados retornados (compatíveis com o provider)
export interface HealthKitSample {
value: number;
startDate: string;
endDate: string;
uuid?: string;
sourceRevision?: any;
}
export interface HealthKitWorkout {
workoutActivityType: number;
duration: number;
startDate: string;
endDate: string;
uuid?: string;
sourceRevision?: any;
}
export interface AuthorizationStatus {
identifier: string;
status: string;
}
export interface HealthKitTypeInfo {
identifier: string;
name: string;
description: string;
category: string;
type: string;
}
// Interface para compatibilidade (versão atual)
export interface HealthKitBridgeAPICompat {
// Autorização
checkAvailability(): Promise<boolean>;
// 1. Autorização completa (leitura e escrita de todos os dados)
requestFullAuthorization(): Promise<boolean>;
// 2. Obter tipos disponíveis para seleção do usuário
getAvailableTypesForAuthorization(): Promise<HealthKitTypeInfo[]>;
// 3. Autorização de leitura específica
requestReadAuthorization(
readTypes: Array<QuantityTypeIdentifier | CategoryTypeIdentifier | CharacteristicTypeIdentifier>
): Promise<boolean>;
// 4. Autorização de escrita específica
requestWriteAuthorization(
writeTypes: Array<QuantityTypeIdentifier | CategoryTypeIdentifier>
): Promise<boolean>;
// 5. Autorização seletiva (leitura e escrita)
requestSelectiveAuthorization(
readTypes: Array<QuantityTypeIdentifier | CategoryTypeIdentifier | CharacteristicTypeIdentifier>,
writeTypes?: Array<QuantityTypeIdentifier | CategoryTypeIdentifier>
): Promise<boolean>;
// 6. Método legado mantido para compatibilidade
requestAuthorization(): Promise<boolean>;
getAuthorizationStatus(
identifiers: Array<QuantityTypeIdentifier | CategoryTypeIdentifier | CharacteristicTypeIdentifier>
): Promise<AuthorizationStatus[]>;
// 7. Verificação de disponibilidade de tipos
isTypeAvailable(identifiers: string[]): Promise<Record<string, boolean>>;
// 8. Verificação de permissão de leitura
canReadType(identifiers: string[]): Promise<Record<string, boolean>>;
// 9. Verificação de permissão de escrita
canWriteType(identifiers: string[]): Promise<Record<string, boolean>>;
// 10. Status detalhado de autorização
getDetailedAuthorizationStatus(identifiers: string[]): Promise<Array<{
identifier: string;
status: string;
canRead: boolean;
canWrite: boolean;
isAvailable: boolean;
}>>;
/**
* 🚀 NOVA FEATURE: Autorização Inteligente
* Verifica quais tipos não estão autorizados e solicita apenas os necessários
*/
requestSmartAuthorization(
requiredTypes: Array<QuantityTypeIdentifier | CategoryTypeIdentifier | CharacteristicTypeIdentifier>
): Promise<{
success: boolean;
authorizedTypes: string[];
deniedTypes: string[];
notDeterminedTypes: string[];
message: string;
}>;
/**
* 🚀 NOVA FEATURE: Verificar e Solicitar Autorização para Dados Específicos
* Verifica se um tipo específico está autorizado e solicita se necessário
*/
ensureDataTypeAuthorization(
dataType: QuantityTypeIdentifier | CategoryTypeIdentifier | CharacteristicTypeIdentifier
): Promise<{
isAuthorized: boolean;
wasRequested: boolean;
message: string;
}>;
// Consultas por dias
getQuantitySamplesForDays<T extends QuantityTypeIdentifier>(
identifier: T,
unit: string,
days: number
): Promise<HealthKitSample[]>;
getCategorySamplesForDays(
identifier: CategoryTypeIdentifier,
days: number
): Promise<HealthKitSample[]>;
getWorkoutsForDays(days: number): Promise<HealthKitWorkout[]>;
// Consultas por range
getQuantitySamplesForRange<T extends QuantityTypeIdentifier>(
identifier: T,
unit: string,
startDate: string,
endDate: string
): Promise<HealthKitSample[]>;
getCategorySamplesForRange(
identifier: CategoryTypeIdentifier,
startDate: string,
endDate: string
): Promise<HealthKitSample[]>;
// Informações de tipos
getAvailableTypes(): Promise<HealthKitTypeInfo[]>;
getTypeInfo(
identifier: QuantityTypeIdentifier | CategoryTypeIdentifier | CharacteristicTypeIdentifier
): Promise<HealthKitTypeInfo>;
}
// Funções helper para type safety
export function getQuantityUnit(
identifier: QuantityTypeIdentifier
): string {
const unitMap: Record<string, string> = {
// Activity & Fitness
[]: HealthKitUnit.count,
[]: HealthKitUnit.count,
[]: HealthKitUnit.count,
[]: HealthKitUnit.count,
[]: HealthKitUnit.count,
[]: HealthKitUnit.meters,
[]: HealthKitUnit.meters,
[]: HealthKitUnit.meters,
[]: HealthKitUnit.meters,
[]: HealthKitUnit.meters,
[]: HealthKitUnit.kilocalories,
[]: HealthKitUnit.kilocalories,
[]: HealthKitUnit.kilocalories,
[]: HealthKitUnit.minutes,
[]: HealthKitUnit.minutes,
[]: HealthKitUnit.minutes,
// Heart
[]: HealthKitUnit.beatsPerMinute,
[]: HealthKitUnit.beatsPerMinute,
[]: HealthKitUnit.beatsPerMinute,
[]: HealthKitUnit.milliseconds,
[]: HealthKitUnit.count,
[]: HealthKitUnit.count,
[]: HealthKitUnit.count,
// Body Measurements
[]: HealthKitUnit.kilograms,
[]: HealthKitUnit.kilograms,
[]: HealthKitUnit.centimeters,
[]: HealthKitUnit.centimeters,
[]: HealthKitUnit.centimeters,
[]: HealthKitUnit.centimeters,
[]: HealthKitUnit.celsius,
[]: HealthKitUnit.millimetersOfMercury,
[]: HealthKitUnit.millimetersOfMercury,
[]: HealthKitUnit.milligramsPerDeciliter,
[]: HealthKitUnit.gramsPerDeciliter,
[]: HealthKitUnit.percent,
[]: HealthKitUnit.percent,
[]: HealthKitUnit.percent,
[]: HealthKitUnit.breathsPerMinute,
[]: HealthKitUnit.millilitersPerKilogramPerMinute,
[]: HealthKitUnit.internationalUnits,
[]: HealthKitUnit.siemens,
[]: HealthKitUnit.decibels,
[]: HealthKitUnit.decibels,
// Mobility
[]: HealthKitUnit.metersPerSecond,
[]: HealthKitUnit.centimeters,
[]: HealthKitUnit.percent,
[]: HealthKitUnit.percent,
[]: HealthKitUnit.metersPerSecond,
[]: HealthKitUnit.metersPerSecond,
[]: HealthKitUnit.meters,
// Nutrition - Mass
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
// Nutrition - Volume
[]: HealthKitUnit.liters,
// Nutrition - Minerals
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
// Nutrition - Vitamins
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
[]: HealthKitUnit.grams,
// Blood Types
[]: HealthKitUnit.count,
[]: HealthKitUnit.count,
[]: HealthKitUnit.count,
[]: HealthKitUnit.count,
// Other
[]: HealthKitUnit.count,
};
return unitMap[identifier];
}
// Tipos utilitários
export type AllHealthKitIdentifiers = QuantityTypeIdentifier | CategoryTypeIdentifier | CharacteristicTypeIdentifier | WorkoutTypeIdentifier;
export type QuantityTypeIdentifiers = keyof typeof QuantityTypeIdentifier;
export type CategoryTypeIdentifiers = keyof typeof CategoryTypeIdentifier;
export type CharacteristicTypeIdentifiers = keyof typeof CharacteristicTypeIdentifier;
export type HealthKitUnits = keyof typeof HealthKitUnit;
// Constantes para facilitar o uso
export const HEALTHKIT_IDENTIFIERS = {
...QuantityTypeIdentifier,
...CategoryTypeIdentifier,
...CharacteristicTypeIdentifier,
...WorkoutTypeIdentifier
} as const;
export const HEALTHKIT_UNITS = HealthKitUnit;