fit-file-parser 2.2.5 → 2.3.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.
package/dist/fit.js CHANGED
@@ -3103,7 +3103,7 @@ export const FIT = {
3103
3103
  },
3104
3104
  1: {
3105
3105
  field: 'device_type',
3106
- type: 'antplus_device_type',
3106
+ type: 'uint8',
3107
3107
  scale: null,
3108
3108
  offset: 0,
3109
3109
  units: '',
@@ -4187,6 +4187,93 @@ export const FIT = {
4187
4187
  },
4188
4188
  0: { field: 'enabled', type: 'byte', scale: null, offset: 0, units: '' },
4189
4189
  },
4190
+ 140: {
4191
+ name: 'activity_metrics',
4192
+ 1: {
4193
+ field: 'new_max_heart_rate',
4194
+ type: 'uint8',
4195
+ scale: null,
4196
+ offset: 0,
4197
+ units: 'bpm',
4198
+ },
4199
+ 4: {
4200
+ field: 'aerobic_training_effect',
4201
+ type: 'uint8',
4202
+ scale: 10,
4203
+ offset: 0,
4204
+ units: '',
4205
+ },
4206
+ 7: {
4207
+ field: 'vo2_max',
4208
+ type: 'uint32',
4209
+ scale: 65536 / 3.5,
4210
+ offset: 0,
4211
+ units: 'ml/kg/min',
4212
+ },
4213
+ 9: {
4214
+ field: 'recovery_time',
4215
+ type: 'uint16',
4216
+ scale: null,
4217
+ offset: 0,
4218
+ units: 'min',
4219
+ },
4220
+ 11: {
4221
+ field: 'sport',
4222
+ type: 'sport',
4223
+ scale: null,
4224
+ offset: 0,
4225
+ units: '',
4226
+ },
4227
+ 20: {
4228
+ field: 'anaerobic_training_effect',
4229
+ type: 'uint8',
4230
+ scale: 10,
4231
+ offset: 0,
4232
+ units: '',
4233
+ },
4234
+ 29: {
4235
+ field: 'first_vo2_max',
4236
+ type: 'uint32',
4237
+ scale: 65536 / 3.5,
4238
+ offset: 0,
4239
+ units: 'ml/kg/min',
4240
+ },
4241
+ 41: {
4242
+ field: 'primary_benefit',
4243
+ type: 'uint8',
4244
+ scale: null,
4245
+ offset: 0,
4246
+ units: '',
4247
+ },
4248
+ 60: {
4249
+ field: 'total_ascent',
4250
+ type: 'uint16',
4251
+ scale: null,
4252
+ offset: 0,
4253
+ units: 'm',
4254
+ },
4255
+ 61: {
4256
+ field: 'total_descent',
4257
+ type: 'uint16',
4258
+ scale: null,
4259
+ offset: 0,
4260
+ units: 'm',
4261
+ },
4262
+ 62: {
4263
+ field: 'avg_power',
4264
+ type: 'uint16',
4265
+ scale: null,
4266
+ offset: 0,
4267
+ units: 'watts',
4268
+ },
4269
+ 63: {
4270
+ field: 'avg_heart_rate',
4271
+ type: 'uint8',
4272
+ scale: null,
4273
+ offset: 0,
4274
+ units: 'bpm',
4275
+ },
4276
+ },
4190
4277
  206: {
4191
4278
  name: 'field_description',
4192
4279
  0: {
@@ -4702,11 +4789,11 @@ export const FIT = {
4702
4789
  units: 's',
4703
4790
  },
4704
4791
  5: {
4705
- field: 'hr_zone_high_boundary_deprecated',
4706
- type: 'uint8_array',
4707
- scale: null,
4792
+ field: 'time_in_power_zone',
4793
+ type: 'uint32_array',
4794
+ scale: 1000,
4708
4795
  offset: 0,
4709
- units: '',
4796
+ units: 's',
4710
4797
  },
4711
4798
  6: {
4712
4799
  field: 'hr_zone_high_boundary',
@@ -4730,11 +4817,11 @@ export const FIT = {
4730
4817
  units: 'watts',
4731
4818
  },
4732
4819
  9: {
4733
- field: 'hr_calc_type',
4734
- type: 'hr_zone_calc',
4820
+ field: 'power_zone_high_boundary',
4821
+ type: 'uint16_array',
4735
4822
  scale: null,
4736
4823
  offset: 0,
4737
- units: '',
4824
+ units: 'watts',
4738
4825
  },
4739
4826
  10: {
4740
4827
  field: 'max_heart_rate_deprecated',
@@ -4852,6 +4939,7 @@ export const FIT = {
4852
4939
  129: 'weather_alert',
4853
4940
  131: 'cadence_zone',
4854
4941
  132: 'hr',
4942
+ 140: 'activity_metrics',
4855
4943
  142: 'segment_lap',
4856
4944
  145: 'memo_glob',
4857
4945
  148: 'segment_id',
@@ -5975,7 +6063,6 @@ export const FIT = {
5975
6063
  65534: 'connect',
5976
6064
  },
5977
6065
  antplus_device_type: {
5978
- 0: 0,
5979
6066
  1: 'antfs',
5980
6067
  11: 'bike_power',
5981
6068
  12: 'environment_sensor_legacy',
@@ -5989,10 +6076,12 @@ export const FIT = {
5989
6076
  26: 'racquet',
5990
6077
  27: 'control_hub',
5991
6078
  31: 'muscle_oxygen',
6079
+ 34: 'shifting',
5992
6080
  35: 'bike_light_main',
5993
6081
  36: 'bike_light_shared',
5994
6082
  38: 'exd',
5995
6083
  40: 'bike_radar',
6084
+ 46: 'bike_aero',
5996
6085
  119: 'weight_scale',
5997
6086
  120: 'heart_rate',
5998
6087
  121: 'bike_speed_cadence',
@@ -6000,6 +6089,26 @@ export const FIT = {
6000
6089
  123: 'bike_speed',
6001
6090
  124: 'stride_speed_distance',
6002
6091
  },
6092
+ local_device_type: {
6093
+ 0: 'gps',
6094
+ 1: 'glonass',
6095
+ 2: 'gps_glonass',
6096
+ 3: 'accelerometer',
6097
+ 4: 'barometer',
6098
+ 5: 'temperature',
6099
+ 10: 'whr',
6100
+ 12: 'sensor_hub',
6101
+ },
6102
+ ble_device_type: {
6103
+ 0: 'connected_gps',
6104
+ 1: 'heart_rate',
6105
+ 2: 'bike_power',
6106
+ 3: 'bike_speed_cadence',
6107
+ 4: 'bike_speed',
6108
+ 5: 'bike_cadence',
6109
+ 6: 'footpod',
6110
+ 7: 'bike_trainer',
6111
+ },
6003
6112
  ant_network: {
6004
6113
  0: 'public',
6005
6114
  1: 'antplus',
@@ -16,7 +16,7 @@ export interface MessageIndex {
16
16
  selected: boolean;
17
17
  }
18
18
  export type File = 'device' | 'settings' | 'sport' | 'activity' | 'workout' | 'course' | 'schedules' | 'weight' | 'totals' | 'goals' | 'blood_pressure' | 'monitoring_a' | 'activity_summary' | 'monitoring_daily' | 'monitoring_b' | 'segment' | 'segment_list' | 'exd_configuration' | 'mfg_range_min' | 'mfg_range_max';
19
- export type MesgNum = 'file_id' | 'capabilities' | 'device_settings' | 'user_profile' | 'hrm_profile' | 'sdm_profile' | 'bike_profile' | 'zones_target' | 'hr_zone' | 'power_zone' | 'met_zone' | 'sport' | 'goal' | 'session' | 'lap' | 'record' | 'event' | 'device_info' | 'workout' | 'workout_step' | 'schedule' | 'weight_scale' | 'course' | 'course_point' | 'totals' | 'activity' | 'software' | 'file_capabilities' | 'mesg_capabilities' | 'field_capabilities' | 'file_creator' | 'blood_pressure' | 'speed_zone' | 'monitoring' | 'training_file' | 'hrv' | 'ant_rx' | 'ant_tx' | 'ant_channel_id' | 'length' | 'monitoring_info' | 'pad' | 'slave_device' | 'connectivity' | 'weather_conditions' | 'weather_alert' | 'cadence_zone' | 'hr' | 'segment_lap' | 'memo_glob' | 'segment_id' | 'segment_leaderboard_entry' | 'segment_point' | 'segment_file' | 'workout_session' | 'watchface_settings' | 'gps_metadata' | 'camera_event' | 'timestamp_correlation' | 'gyroscope_data' | 'accelerometer_data' | 'three_d_sensor_calibration' | 'video_frame' | 'obdii_data' | 'nmea_sentence' | 'aviation_attitude' | 'video' | 'video_title' | 'video_description' | 'video_clip' | 'exd_screen_configuration' | 'exd_data_field_configuration' | 'exd_data_concept_configuration' | 'field_description' | 'developer_data_id' | 'magnetometer_data' | 'barometer_data' | 'one_d_sensor_calibration' | 'time_in_zone' | 'set' | 'stress_level' | 'dive_settings' | 'dive_gas' | 'dive_alarm' | 'exercise_title' | 'dive_summary' | 'jump' | 'climb_pro' | 'tank_update' | 'tank_summary' | 'o_hr_settings' | 'mfg_range_min' | 'mfg_range_max' | 'definition';
19
+ export type MesgNum = 'file_id' | 'capabilities' | 'device_settings' | 'user_profile' | 'hrm_profile' | 'sdm_profile' | 'bike_profile' | 'zones_target' | 'hr_zone' | 'power_zone' | 'met_zone' | 'sport' | 'goal' | 'session' | 'lap' | 'record' | 'event' | 'device_info' | 'workout' | 'workout_step' | 'schedule' | 'weight_scale' | 'course' | 'course_point' | 'totals' | 'activity' | 'software' | 'file_capabilities' | 'mesg_capabilities' | 'field_capabilities' | 'file_creator' | 'blood_pressure' | 'speed_zone' | 'monitoring' | 'training_file' | 'hrv' | 'ant_rx' | 'ant_tx' | 'ant_channel_id' | 'length' | 'monitoring_info' | 'pad' | 'slave_device' | 'connectivity' | 'weather_conditions' | 'weather_alert' | 'cadence_zone' | 'hr' | 'activity_metrics' | 'segment_lap' | 'memo_glob' | 'segment_id' | 'segment_leaderboard_entry' | 'segment_point' | 'segment_file' | 'workout_session' | 'watchface_settings' | 'gps_metadata' | 'camera_event' | 'timestamp_correlation' | 'gyroscope_data' | 'accelerometer_data' | 'three_d_sensor_calibration' | 'video_frame' | 'obdii_data' | 'nmea_sentence' | 'aviation_attitude' | 'video' | 'video_title' | 'video_description' | 'video_clip' | 'exd_screen_configuration' | 'exd_data_field_configuration' | 'exd_data_concept_configuration' | 'field_description' | 'developer_data_id' | 'magnetometer_data' | 'barometer_data' | 'one_d_sensor_calibration' | 'time_in_zone' | 'set' | 'stress_level' | 'dive_settings' | 'dive_gas' | 'dive_alarm' | 'exercise_title' | 'dive_summary' | 'jump' | 'climb_pro' | 'tank_update' | 'tank_summary' | 'o_hr_settings' | 'mfg_range_min' | 'mfg_range_max' | 'definition';
20
20
  export type Checksum = 'clear' | 'ok';
21
21
  export type FileFlags = '0' | 'read' | 'write' | 'erase';
22
22
  export type MesgCount = 'num_per_file' | 'max_per_file' | 'max_per_file_type';
@@ -72,7 +72,9 @@ export type Schedule = 'workout' | 'course';
72
72
  export type CoursePoint = 'generic' | 'summit' | 'valley' | 'water' | 'food' | 'danger' | 'left' | 'right' | 'straight' | 'first_aid' | 'fourth_category' | 'third_category' | 'second_category' | 'first_category' | 'hors_category' | 'sprint' | 'left_fork' | 'right_fork' | 'middle_fork' | 'slight_left' | 'sharp_left' | 'slight_right' | 'sharp_right' | 'u_turn' | 'segment_start' | 'segment_end';
73
73
  export type Manufacturer = '0' | 'garmin' | 'garmin_fr405_antfs' | 'zephyr' | 'dayton' | 'idt' | 'srm' | 'quarq' | 'ibike' | 'saris' | 'spark_hk' | 'tanita' | 'echowell' | 'dynastream_oem' | 'nautilus' | 'dynastream' | 'timex' | 'metrigear' | 'xelic' | 'beurer' | 'cardiosport' | 'a_and_d' | 'hmm' | 'suunto' | 'thita_elektronik' | 'gpulse' | 'clean_mobile' | 'pedal_brain' | 'peaksware' | 'saxonar' | 'lemond_fitness' | 'dexcom' | 'wahoo_fitness' | 'octane_fitness' | 'archinoetics' | 'the_hurt_box' | 'citizen_systems' | 'magellan' | 'osynce' | 'holux' | 'concept2' | 'one_giant_leap' | 'ace_sensor' | 'brim_brothers' | 'xplova' | 'perception_digital' | 'bf1systems' | 'pioneer' | 'spantec' | 'metalogics' | '4iiiis' | 'seiko_epson' | 'seiko_epson_oem' | 'ifor_powell' | 'maxwell_guider' | 'star_trac' | 'breakaway' | 'alatech_technology_ltd' | 'mio_technology_europe' | 'rotor' | 'geonaute' | 'id_bike' | 'specialized' | 'wtek' | 'physical_enterprises' | 'north_pole_engineering' | 'bkool' | 'cateye' | 'stages_cycling' | 'sigmasport' | 'tomtom' | 'peripedal' | 'wattbike' | 'moxy' | 'ciclosport' | 'powerbahn' | 'acorn_projects_aps' | 'lifebeam' | 'bontrager' | 'wellgo' | 'scosche' | 'magura' | 'woodway' | 'elite' | 'nielsen_kellerman' | 'dk_city' | 'tacx' | 'direction_technology' | 'magtonic' | '1partcarbon' | 'inside_ride_technologies' | 'sound_of_motion' | 'stryd' | 'icg' | 'mipulse' | 'bsx_athletics' | 'look' | 'campagnolo_srl' | 'body_bike_smart' | 'praxisworks' | 'limits_technology' | 'topaction_technology' | 'cosinuss' | 'fitcare' | 'magene' | 'giant_manufacturing_co' | 'tigrasport' | 'salutron' | 'technogym' | 'bryton_sensors' | 'latitude_limited' | 'soaring_technology' | 'igpsport' | 'thinkrider' | 'gopher_sport' | 'waterrower' | 'orangetheory' | 'inpeak' | 'kinetic' | 'johnson_health_tech' | 'polar_electro' | 'seesense' | 'nci_technology' | 'development' | 'healthandlife' | 'lezyne' | 'scribe_labs' | 'zwift' | 'watteam' | 'recon' | 'favero_electronics' | 'dynovelo' | 'strava' | 'precor' | 'bryton' | 'sram' | 'navman' | 'cobi' | 'spivi' | 'mio_magellan' | 'evesports' | 'sensitivus_gauge' | 'podoon' | 'life_time_fitness' | 'falco_e_motors' | 'minoura' | 'cycliq' | 'luxottica' | 'trainer_road' | 'the_sufferfest' | 'fullspeedahead' | 'virtualtraining' | 'feedbacksports' | 'omata' | 'vdo' | 'magneticdays' | 'hammerhead' | 'kinetic_by_kurt' | 'shapelog' | 'dabuziduo' | 'jetblack' | 'coros' | 'virtugo' | 'velosense' | 'actigraphcorp';
74
74
  export type GarminProduct = 'hrm_bike' | 'hrm1' | 'axh01' | 'axb01' | 'axb02' | 'hrm2ss' | 'dsi_alf02' | 'hrm3ss' | 'hrm_run_single_byte_product_id' | 'bsm' | 'bcm' | 'axs01' | 'hrm_tri_single_byte_product_id' | 'fr225_single_byte_product_id' | 'fr301_china' | 'fr301_japan' | 'fr301_korea' | 'fr301_taiwan' | 'fr405' | 'fr50' | 'fr405_japan' | 'fr60' | 'dsi_alf01' | 'fr310xt' | 'edge500' | 'fr110' | 'edge800' | 'edge500_taiwan' | 'edge500_japan' | 'chirp' | 'fr110_japan' | 'edge200' | 'fr910xt' | 'edge800_taiwan' | 'edge800_japan' | 'alf04' | 'fr610' | 'fr210_japan' | 'vector_ss' | 'vector_cp' | 'edge800_china' | 'edge500_china' | 'fr610_japan' | 'edge500_korea' | 'fr70' | 'fr310xt_4t' | 'amx' | 'fr10' | 'edge800_korea' | 'swim' | 'fr910xt_china' | 'fenix' | 'edge200_taiwan' | 'edge510' | 'edge810' | 'tempe' | 'fr910xt_japan' | 'fr620' | 'fr220' | 'fr910xt_korea' | 'fr10_japan' | 'edge810_japan' | 'virb_elite' | 'edge_touring' | 'edge510_japan' | 'hrm_tri' | 'hrm_run' | 'fr920xt' | 'edge510_asia' | 'edge810_china' | 'edge810_taiwan' | 'edge1000' | 'vivo_fit' | 'virb_remote' | 'vivo_ki' | 'fr15' | 'vivo_active' | 'edge510_korea' | 'fr620_japan' | 'fr620_china' | 'fr220_japan' | 'fr220_china' | 'approach_s6' | 'vivo_smart' | 'fenix2' | 'epix' | 'fenix3' | 'edge1000_taiwan' | 'edge1000_japan' | 'fr15_japan' | 'edge520' | 'edge1000_china' | 'fr620_russia' | 'fr220_russia' | 'vector_s' | 'edge1000_korea' | 'fr920xt_taiwan' | 'fr920xt_china' | 'fr920xt_japan' | 'virbx' | 'vivo_smart_apac' | 'etrex_touch' | 'edge25' | 'fr25' | 'vivo_fit2' | 'fr225' | 'fr630' | 'fr230' | 'fr735xt' | 'vivo_active_apac' | 'vector_2' | 'vector_2s' | 'virbxe' | 'fr620_taiwan' | 'fr220_taiwan' | 'truswing' | 'fenix3_china' | 'fenix3_twn' | 'varia_headlight' | 'varia_taillight_old' | 'edge_explore_1000' | 'fr225_asia' | 'varia_radar_taillight' | 'varia_radar_display' | 'edge20' | 'd2_bravo' | 'approach_s20' | 'varia_remote' | 'hrm4_run' | 'vivo_active_hr' | 'vivo_smart_hr' | 'vivo_move' | 'varia_vision' | 'vivo_fit3' | 'fenix3_hr' | 'virb_ultra_30' | 'index_smart_scale' | 'fr235' | 'fenix3_chronos' | 'oregon7xx' | 'rino7xx' | 'nautix' | 'edge_820' | 'edge_explore_820' | 'fenix5s' | 'd2_bravo_titanium' | 'varia_ut800' | 'running_dynamics_pod' | 'fenix5x' | 'vivo_fit_jr' | 'fr935' | 'fenix5' | 'descent' | 'sdm4' | 'edge_remote' | 'training_center' | 'connectiq_simulator' | 'android_antplus_plugin' | 'connect';
75
- export type AntplusDeviceType = '0' | 'antfs' | 'bike_power' | 'environment_sensor_legacy' | 'multi_sport_speed_distance' | 'control' | 'fitness_equipment' | 'blood_pressure' | 'geocache_node' | 'light_electric_vehicle' | 'env_sensor' | 'racquet' | 'control_hub' | 'muscle_oxygen' | 'bike_light_main' | 'bike_light_shared' | 'exd' | 'bike_radar' | 'weight_scale' | 'heart_rate' | 'bike_speed_cadence' | 'bike_cadence' | 'bike_speed' | 'stride_speed_distance';
75
+ export type AntplusDeviceType = 'antfs' | 'bike_power' | 'environment_sensor_legacy' | 'multi_sport_speed_distance' | 'control' | 'fitness_equipment' | 'blood_pressure' | 'geocache_node' | 'light_electric_vehicle' | 'env_sensor' | 'racquet' | 'control_hub' | 'muscle_oxygen' | 'shifting' | 'bike_light_main' | 'bike_light_shared' | 'exd' | 'bike_radar' | 'bike_aero' | 'weight_scale' | 'heart_rate' | 'bike_speed_cadence' | 'bike_cadence' | 'bike_speed' | 'stride_speed_distance';
76
+ export type LocalDeviceType = 'gps' | 'glonass' | 'gps_glonass' | 'accelerometer' | 'barometer' | 'temperature' | 'whr' | 'sensor_hub';
77
+ export type BleDeviceType = 'connected_gps' | 'heart_rate' | 'bike_power' | 'bike_speed_cadence' | 'bike_speed' | 'bike_cadence' | 'footpod' | 'bike_trainer';
76
78
  export type AntNetwork = 'public' | 'antplus' | 'antfs' | 'private';
77
79
  export type WorkoutCapabilities = '0' | 'interval' | 'custom' | 'fitness_equipment' | 'firstbeat' | 'new_leaf' | 'tcx' | 'speed' | 'heart_rate' | 'distance' | 'cadence' | 'power' | 'grade' | 'resistance' | 'protected';
78
80
  export type BatteryStatus = '0' | 'new' | 'good' | 'ok' | 'low' | 'critical' | 'charging' | 'unknown';
@@ -665,7 +667,7 @@ export interface ParsedEvent {
665
667
  }
666
668
  export interface ParsedDeviceInfo {
667
669
  device_index?: number;
668
- device_type?: AntplusDeviceType;
670
+ device_type?: number;
669
671
  manufacturer?: Manufacturer;
670
672
  serial_number?: number;
671
673
  product?: number;
@@ -871,6 +873,20 @@ export interface ParsedOHrSettings {
871
873
  enabled?: number;
872
874
  timestamp: string;
873
875
  }
876
+ export interface ParsedActivityMetrics {
877
+ new_max_heart_rate?: number;
878
+ aerobic_training_effect?: number;
879
+ vo2_max?: number;
880
+ recovery_time?: number;
881
+ sport?: Sport;
882
+ anaerobic_training_effect?: number;
883
+ first_vo2_max?: number;
884
+ primary_benefit?: number;
885
+ total_ascent?: number;
886
+ total_descent?: number;
887
+ avg_power?: number;
888
+ avg_heart_rate?: number;
889
+ }
874
890
  export interface ParsedFieldDescription {
875
891
  developer_data_index?: number;
876
892
  field_definition_number?: number;
@@ -894,11 +910,9 @@ export interface ParsedTimeInZone {
894
910
  time_in_hr_zone?: number[];
895
911
  time_in_speed_zone?: number[];
896
912
  time_in_power_zone?: number[];
897
- hr_zone_high_boundary_deprecated?: number[];
898
913
  hr_zone_high_boundary?: number[];
899
914
  speed_zone_high_boundary?: number[];
900
915
  power_zone_high_boundary?: number[];
901
- hr_calc_type?: HrZoneCalc;
902
916
  max_heart_rate_deprecated?: number;
903
917
  max_heart_rate?: number;
904
918
  resting_heart_rate?: number;
@@ -1025,4 +1039,5 @@ export interface ParsedFit {
1025
1039
  tank_summaries?: ParsedTankSummary[];
1026
1040
  jumps?: ParsedJump[];
1027
1041
  time_in_zone?: ParsedTimeInZone[];
1042
+ activity_metrics?: ParsedActivityMetrics[];
1028
1043
  }
@@ -190,6 +190,7 @@ export function generateFitType() {
190
190
  tank_summaries: 'parsed_tank_summary',
191
191
  jumps: 'parsed_jump',
192
192
  time_in_zone: 'parsed_time_in_zone',
193
+ activity_metrics: 'parsed_activity_metrics',
193
194
  };
194
195
  const referenceProperties = {
195
196
  file_creator: 'parsed_file_creator',
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "fit-file-parser",
3
3
  "type": "module",
4
- "version": "2.2.5",
4
+ "version": "2.3.0",
5
5
  "private": false,
6
6
  "description": "Parse your .FIT files easily, directly from JS (Garmin, Polar, Suunto)",
7
7
  "author": {