@sports-alliance/sports-lib 7.1.1 → 7.2.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.
- package/lib/cjs/data/data-ground-contact-time-balance-left.d.ts +4 -0
- package/lib/cjs/data/data-ground-contact-time-balance-left.js +8 -0
- package/lib/cjs/data/data-ground-contact-time-balance-right.d.ts +4 -0
- package/lib/cjs/data/data-ground-contact-time-balance-right.js +8 -0
- package/lib/cjs/data/data-ground-contact-time-balance.d.ts +3 -0
- package/lib/cjs/data/data-ground-contact-time-balance.js +7 -0
- package/lib/cjs/data/data-stance-time-balance-left.d.ts +1 -0
- package/lib/cjs/data/data-stance-time-balance-left.js +1 -0
- package/lib/cjs/data/data-stance-time-balance-right.d.ts +1 -0
- package/lib/cjs/data/data-stance-time-balance-right.js +1 -0
- package/lib/cjs/data/data-stance-time-balance.d.ts +1 -0
- package/lib/cjs/data/data-stance-time-balance.js +1 -0
- package/lib/cjs/data/data.depth-max.d.ts +5 -0
- package/lib/cjs/data/data.depth-max.js +9 -0
- package/lib/cjs/data/data.depth.d.ts +5 -0
- package/lib/cjs/data/data.depth.js +9 -0
- package/lib/cjs/data/data.fitness-age.d.ts +5 -0
- package/lib/cjs/data/data.fitness-age.js +9 -0
- package/lib/cjs/data/data.ground-contact-time-avg.d.ts +5 -0
- package/lib/cjs/data/data.ground-contact-time-avg.js +9 -0
- package/lib/cjs/data/data.ground-contact-time-max.d.ts +5 -0
- package/lib/cjs/data/data.ground-contact-time-max.js +9 -0
- package/lib/cjs/data/data.ground-contact-time-min.d.ts +5 -0
- package/lib/cjs/data/data.ground-contact-time-min.js +9 -0
- package/lib/cjs/data/data.ground-contact-time.d.ts +5 -0
- package/lib/cjs/data/data.ground-contact-time.js +9 -0
- package/lib/cjs/data/data.max-hr-setting.d.ts +5 -0
- package/lib/cjs/data/data.max-hr-setting.js +9 -0
- package/lib/cjs/data/data.stance-time.d.ts +1 -0
- package/lib/cjs/data/data.stance-time.js +1 -0
- package/lib/cjs/data/data.store.js +39 -1
- package/lib/cjs/data/data.vertical-oscillation-avg.d.ts +5 -0
- package/lib/cjs/data/data.vertical-oscillation-avg.js +9 -0
- package/lib/cjs/data/data.vertical-oscillation-max.d.ts +5 -0
- package/lib/cjs/data/data.vertical-oscillation-max.js +9 -0
- package/lib/cjs/data/data.vertical-oscillation-min.d.ts +5 -0
- package/lib/cjs/data/data.vertical-oscillation-min.js +9 -0
- package/lib/cjs/events/adapters/importers/fit/importer.fit.js +40 -3
- package/lib/cjs/events/adapters/importers/fit/importer.fit.mapper.js +23 -0
- package/lib/cjs/events/adapters/importers/suunto/importer.suunto.integration.spec.js +87 -3
- package/lib/cjs/events/adapters/importers/suunto/importer.suunto.json.js +86 -6
- package/lib/cjs/events/utilities/activity.utilities.js +38 -2
- package/lib/esm/data/data-ground-contact-time-balance-left.d.ts +4 -0
- package/lib/esm/data/data-ground-contact-time-balance-right.d.ts +4 -0
- package/lib/esm/data/data-ground-contact-time-balance.d.ts +3 -0
- package/lib/esm/data/data-stance-time-balance-left.d.ts +1 -0
- package/lib/esm/data/data-stance-time-balance-right.d.ts +1 -0
- package/lib/esm/data/data-stance-time-balance.d.ts +1 -0
- package/lib/esm/data/data.depth-max.d.ts +5 -0
- package/lib/esm/data/data.depth.d.ts +5 -0
- package/lib/esm/data/data.fitness-age.d.ts +5 -0
- package/lib/esm/data/data.ground-contact-time-avg.d.ts +5 -0
- package/lib/esm/data/data.ground-contact-time-max.d.ts +5 -0
- package/lib/esm/data/data.ground-contact-time-min.d.ts +5 -0
- package/lib/esm/data/data.ground-contact-time.d.ts +5 -0
- package/lib/esm/data/data.max-hr-setting.d.ts +5 -0
- package/lib/esm/data/data.stance-time.d.ts +1 -0
- package/lib/esm/data/data.vertical-oscillation-avg.d.ts +5 -0
- package/lib/esm/data/data.vertical-oscillation-max.d.ts +5 -0
- package/lib/esm/data/data.vertical-oscillation-min.d.ts +5 -0
- package/lib/esm/index.js +259 -13
- package/package.json +2 -2
|
@@ -100,6 +100,18 @@ const data_speed_zone_two_duration_1 = require("../../../../data/data.speed-zone
|
|
|
100
100
|
const data_speed_zone_three_duration_1 = require("../../../../data/data.speed-zone-three-duration");
|
|
101
101
|
const data_speed_zone_four_duration_1 = require("../../../../data/data.speed-zone-four-duration");
|
|
102
102
|
const data_speed_zone_five_duration_1 = require("../../../../data/data.speed-zone-five-duration");
|
|
103
|
+
const data_ground_contact_time_1 = require("../../../../data/data.ground-contact-time");
|
|
104
|
+
const data_ground_contact_time_avg_1 = require("../../../../data/data.ground-contact-time-avg");
|
|
105
|
+
const data_ground_contact_time_max_1 = require("../../../../data/data.ground-contact-time-max");
|
|
106
|
+
const data_ground_contact_time_min_1 = require("../../../../data/data.ground-contact-time-min");
|
|
107
|
+
const data_vertical_oscillation_1 = require("../../../../data/data.vertical-oscillation");
|
|
108
|
+
const data_vertical_oscillation_avg_1 = require("../../../../data/data.vertical-oscillation-avg");
|
|
109
|
+
const data_vertical_oscillation_max_1 = require("../../../../data/data.vertical-oscillation-max");
|
|
110
|
+
const data_vertical_oscillation_min_1 = require("../../../../data/data.vertical-oscillation-min");
|
|
111
|
+
const data_fitness_age_1 = require("../../../../data/data.fitness-age");
|
|
112
|
+
const data_max_hr_setting_1 = require("../../../../data/data.max-hr-setting");
|
|
113
|
+
const data_depth_1 = require("../../../../data/data.depth");
|
|
114
|
+
const data_depth_max_1 = require("../../../../data/data.depth-max");
|
|
103
115
|
const file_type_enum_1 = require("../../file-type.enum");
|
|
104
116
|
const activity_parsing_options_1 = require("../../../../activities/activity-parsing-options");
|
|
105
117
|
class EventImporterSuuntoJSON {
|
|
@@ -152,8 +164,11 @@ class EventImporterSuuntoJSON {
|
|
|
152
164
|
: [];
|
|
153
165
|
// Create the activities
|
|
154
166
|
const activities = activityStartEventSamples.map((activityStartEventSample, index) => {
|
|
167
|
+
// If no stop event, use the last sample time as end date
|
|
168
|
+
const lastSampleTime = eventJSONObject.DeviceLog.Samples[eventJSONObject.DeviceLog.Samples.length - 1].TimeISO8601;
|
|
169
|
+
const fallbackEndTime = stopEventSample ? stopEventSample.TimeISO8601 : lastSampleTime;
|
|
155
170
|
const activity = new activity_1.Activity(new Date(activityStartEventSample.TimeISO8601), activityStartEventSamples.length - 1 === index
|
|
156
|
-
? new Date(
|
|
171
|
+
? new Date(fallbackEndTime)
|
|
157
172
|
: new Date(activityStartEventSamples[index + 1].TimeISO8601), activity_types_1.ActivityTypes[(importer_suunto_activity_ids_1.ImporterSuuntoActivityIds[activityStartEventSample.Events[0].Activity.ActivityType])], creator, options);
|
|
158
173
|
// Set the end date to the stop event time if the activity is the last or the only one else set it on the next itery time
|
|
159
174
|
// Create the stats these are a 1:1 ref arrays
|
|
@@ -268,10 +283,6 @@ class EventImporterSuuntoJSON {
|
|
|
268
283
|
// @todo check if start and end date can derive from the json
|
|
269
284
|
const event = new event_1.Event('', activities[0].startDate, activities[activities.length - 1].endDate, file_type_enum_1.FileType.SUUNTO);
|
|
270
285
|
activities.forEach(activity => event.addActivity(activity));
|
|
271
|
-
// Populate the event stats from the Header Object // @todo maybe remove
|
|
272
|
-
this.getStats(eventJSONObject.DeviceLog.Header).forEach(stat => {
|
|
273
|
-
event.addStat(stat);
|
|
274
|
-
});
|
|
275
286
|
// Get the settings and add it to all activities as it's logical
|
|
276
287
|
if (eventJSONObject.DeviceLog.Header.Settings) {
|
|
277
288
|
this.getSettings(eventJSONObject.DeviceLog.Header.Settings).forEach(stat => {
|
|
@@ -285,9 +296,12 @@ class EventImporterSuuntoJSON {
|
|
|
285
296
|
stat instanceof data_pool_length_1.DataPoolLength);
|
|
286
297
|
stats.forEach(stat => activities[0].addStat(stat));
|
|
287
298
|
}
|
|
288
|
-
// @todo see how we can have those event stats persisted as the below generation wipes those off.
|
|
289
299
|
// Generate stats
|
|
290
300
|
event_utilities_1.EventUtilities.generateStatsForAll(event);
|
|
301
|
+
// Populate the event stats from the Header Object
|
|
302
|
+
this.getStats(eventJSONObject.DeviceLog.Header).forEach(stat => {
|
|
303
|
+
event.addStat(stat);
|
|
304
|
+
});
|
|
291
305
|
resolve(event);
|
|
292
306
|
});
|
|
293
307
|
}
|
|
@@ -355,8 +369,12 @@ class EventImporterSuuntoJSON {
|
|
|
355
369
|
return samples;
|
|
356
370
|
}
|
|
357
371
|
static setStreamsForActivity(activity, samples) {
|
|
372
|
+
// console.log(`Setting streams for activity with ${samples.length} samples`);
|
|
358
373
|
exports.SuuntoSampleMapper.forEach(sampleMapping => {
|
|
359
374
|
const subjectSamples = samples.filter(sample => (0, helpers_1.isNumberOrString)(sample[sampleMapping.sampleField]));
|
|
375
|
+
// if (sampleMapping.sampleField === 'GroundContactTime') {
|
|
376
|
+
// console.log(`GCT Samples found: ${subjectSamples.length}`);
|
|
377
|
+
// }
|
|
360
378
|
if (subjectSamples.length) {
|
|
361
379
|
activity.addStream(activity.createStream(sampleMapping.dataType));
|
|
362
380
|
subjectSamples.forEach(subjectSample => {
|
|
@@ -525,6 +543,53 @@ class EventImporterSuuntoJSON {
|
|
|
525
543
|
}
|
|
526
544
|
}
|
|
527
545
|
}
|
|
546
|
+
// Ground Contact Time (Running Dynamics)
|
|
547
|
+
if (object.hasOwnProperty('GroundContactTime')) {
|
|
548
|
+
if (Array.isArray(object.GroundContactTime)) {
|
|
549
|
+
if ((0, helpers_1.isNumber)(object.GroundContactTime[0].Avg)) {
|
|
550
|
+
stats.push(new data_ground_contact_time_avg_1.DataGroundContactTimeAvg(object.GroundContactTime[0].Avg * 1000)); // Convert s to ms
|
|
551
|
+
}
|
|
552
|
+
if ((0, helpers_1.isNumber)(object.GroundContactTime[0].Max)) {
|
|
553
|
+
stats.push(new data_ground_contact_time_max_1.DataGroundContactTimeMax(object.GroundContactTime[0].Max * 1000));
|
|
554
|
+
}
|
|
555
|
+
if ((0, helpers_1.isNumber)(object.GroundContactTime[0].Min)) {
|
|
556
|
+
stats.push(new data_ground_contact_time_min_1.DataGroundContactTimeMin(object.GroundContactTime[0].Min * 1000));
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
// Vertical Oscillation (Running Dynamics)
|
|
561
|
+
if (object.hasOwnProperty('VerticalOscillation')) {
|
|
562
|
+
if (Array.isArray(object.VerticalOscillation)) {
|
|
563
|
+
if ((0, helpers_1.isNumber)(object.VerticalOscillation[0].Avg)) {
|
|
564
|
+
stats.push(new data_vertical_oscillation_avg_1.DataVerticalOscillationAvg(object.VerticalOscillation[0].Avg * 1000)); // Convert m to mm
|
|
565
|
+
}
|
|
566
|
+
if ((0, helpers_1.isNumber)(object.VerticalOscillation[0].Max)) {
|
|
567
|
+
stats.push(new data_vertical_oscillation_max_1.DataVerticalOscillationMax(object.VerticalOscillation[0].Max * 1000));
|
|
568
|
+
}
|
|
569
|
+
if ((0, helpers_1.isNumber)(object.VerticalOscillation[0].Min)) {
|
|
570
|
+
stats.push(new data_vertical_oscillation_min_1.DataVerticalOscillationMin(object.VerticalOscillation[0].Min * 1000));
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
// Fitness Age
|
|
575
|
+
if ((0, helpers_1.isNumber)(object.FitnessAge)) {
|
|
576
|
+
stats.push(new data_fitness_age_1.DataFitnessAge(object.FitnessAge));
|
|
577
|
+
}
|
|
578
|
+
// Personal MaxHR
|
|
579
|
+
if (object.Personal && (0, helpers_1.isNumber)(object.Personal.MaxHR)) {
|
|
580
|
+
stats.push(new data_max_hr_setting_1.DataMaxHRSetting(object.Personal.MaxHR * 60)); // Convert from Hz to bpm
|
|
581
|
+
}
|
|
582
|
+
// Depth (Diving)
|
|
583
|
+
if (object.hasOwnProperty('Depth')) {
|
|
584
|
+
if (Array.isArray(object.Depth)) {
|
|
585
|
+
if ((0, helpers_1.isNumber)(object.Depth[0].Max) && object.Depth[0].Max > 0) {
|
|
586
|
+
stats.push(new data_depth_max_1.DataDepthMax(object.Depth[0].Max));
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
else if ((0, helpers_1.isNumber)(object.Depth.Max) && object.Depth.Max > 0) {
|
|
590
|
+
stats.push(new data_depth_max_1.DataDepthMax(object.Depth.Max));
|
|
591
|
+
}
|
|
592
|
+
}
|
|
528
593
|
return stats;
|
|
529
594
|
}
|
|
530
595
|
}
|
|
@@ -717,5 +782,20 @@ exports.SuuntoSampleMapper = [
|
|
|
717
782
|
dataType: data_battery_voltage_1.DataBatteryVoltage.type,
|
|
718
783
|
sampleField: 'BatteryVoltage',
|
|
719
784
|
convertSampleValue: (value) => Number(value)
|
|
785
|
+
},
|
|
786
|
+
{
|
|
787
|
+
dataType: data_vertical_oscillation_1.DataVerticalOscillation.type,
|
|
788
|
+
sampleField: 'VerticalOscillation',
|
|
789
|
+
convertSampleValue: (value) => Number(value * 1000) // Convert m to mm
|
|
790
|
+
},
|
|
791
|
+
{
|
|
792
|
+
dataType: data_ground_contact_time_1.DataGroundContactTime.type,
|
|
793
|
+
sampleField: 'GroundContactTime',
|
|
794
|
+
convertSampleValue: (value) => Number(value * 1000) // Convert s to ms
|
|
795
|
+
},
|
|
796
|
+
{
|
|
797
|
+
dataType: data_depth_1.DataDepth.type,
|
|
798
|
+
sampleField: 'Depth',
|
|
799
|
+
convertSampleValue: (value) => Number(value)
|
|
720
800
|
}
|
|
721
801
|
];
|
|
@@ -82,6 +82,18 @@ const data_speed_zone_two_duration_1 = require("../../data/data.speed-zone-two-d
|
|
|
82
82
|
const data_speed_zone_three_duration_1 = require("../../data/data.speed-zone-three-duration");
|
|
83
83
|
const data_speed_zone_four_duration_1 = require("../../data/data.speed-zone-four-duration");
|
|
84
84
|
const data_speed_zone_five_duration_1 = require("../../data/data.speed-zone-five-duration");
|
|
85
|
+
const data_ground_contact_time_1 = require("../../data/data.ground-contact-time");
|
|
86
|
+
const data_ground_contact_time_avg_1 = require("../../data/data.ground-contact-time-avg");
|
|
87
|
+
const data_ground_contact_time_max_1 = require("../../data/data.ground-contact-time-max");
|
|
88
|
+
const data_ground_contact_time_min_1 = require("../../data/data.ground-contact-time-min");
|
|
89
|
+
const data_ground_contact_time_balance_left_1 = require("../../data/data-ground-contact-time-balance-left");
|
|
90
|
+
const data_ground_contact_time_balance_right_1 = require("../../data/data-ground-contact-time-balance-right");
|
|
91
|
+
const data_vertical_oscillation_1 = require("../../data/data.vertical-oscillation");
|
|
92
|
+
const data_vertical_oscillation_avg_1 = require("../../data/data.vertical-oscillation-avg");
|
|
93
|
+
const data_vertical_oscillation_max_1 = require("../../data/data.vertical-oscillation-max");
|
|
94
|
+
const data_vertical_oscillation_min_1 = require("../../data/data.vertical-oscillation-min");
|
|
95
|
+
const data_stance_time_balance_left_1 = require("../../data/data-stance-time-balance-left");
|
|
96
|
+
const data_stance_time_balance_right_1 = require("../../data/data-stance-time-balance-right");
|
|
85
97
|
const data_store_1 = require("../../data/data.store");
|
|
86
98
|
const data_start_position_1 = require("../../data/data.start-position");
|
|
87
99
|
const data_end_position_1 = require("../../data/data.end-position");
|
|
@@ -101,8 +113,6 @@ const data_altitude_smooth_1 = require("../../data/data.altitude-smooth");
|
|
|
101
113
|
const data_grade_smooth_1 = require("../../data/data.grade-smooth");
|
|
102
114
|
const data_swolf_25m_1 = require("../../data/data.swolf-25m");
|
|
103
115
|
const data_swolf_50m_1 = require("../../data/data.swolf-50m");
|
|
104
|
-
const data_stance_time_balance_left_1 = require("../../data/data-stance-time-balance-left");
|
|
105
|
-
const data_stance_time_balance_right_1 = require("../../data/data-stance-time-balance-right");
|
|
106
116
|
const low_pass_filter_1 = require("./grade-calculator/low-pass-filter");
|
|
107
117
|
const data_power_normalized_1 = require("../../data/data.power-normalized");
|
|
108
118
|
const data_power_work_1 = require("../../data/data.power-work");
|
|
@@ -1310,11 +1320,37 @@ class ActivityUtilities {
|
|
|
1310
1320
|
activity.addStat(new data_left_balance_1.DataLeftBalance(100 - avgRightBalance));
|
|
1311
1321
|
}
|
|
1312
1322
|
// Assign L/R balance stance time from streams if exists
|
|
1323
|
+
if (!activity.getStat(data_ground_contact_time_balance_left_1.DataGroundContactTimeBalanceLeft.type) && activity.hasStreamData(data_ground_contact_time_balance_left_1.DataGroundContactTimeBalanceLeft.type)) {
|
|
1324
|
+
const avgStanceTimeLeftBalance = this.round(this.getDataTypeAvg(activity, data_ground_contact_time_balance_left_1.DataGroundContactTimeBalanceLeft.type), 2);
|
|
1325
|
+
activity.addStat(new data_ground_contact_time_balance_left_1.DataGroundContactTimeBalanceLeft(avgStanceTimeLeftBalance));
|
|
1326
|
+
activity.addStat(new data_ground_contact_time_balance_right_1.DataGroundContactTimeBalanceRight(100 - avgStanceTimeLeftBalance));
|
|
1327
|
+
}
|
|
1328
|
+
// Backward compatibility for Stance Time Balance
|
|
1313
1329
|
if (!activity.getStat(data_stance_time_balance_left_1.DataStanceTimeBalanceLeft.type) && activity.hasStreamData(data_stance_time_balance_left_1.DataStanceTimeBalanceLeft.type)) {
|
|
1314
1330
|
const avgStanceTimeLeftBalance = this.round(this.getDataTypeAvg(activity, data_stance_time_balance_left_1.DataStanceTimeBalanceLeft.type), 2);
|
|
1315
1331
|
activity.addStat(new data_stance_time_balance_left_1.DataStanceTimeBalanceLeft(avgStanceTimeLeftBalance));
|
|
1316
1332
|
activity.addStat(new data_stance_time_balance_right_1.DataStanceTimeBalanceRight(100 - avgStanceTimeLeftBalance));
|
|
1317
1333
|
}
|
|
1334
|
+
// Ground Contact Time
|
|
1335
|
+
if (!activity.getStat(data_ground_contact_time_max_1.DataGroundContactTimeMax.type) && activity.hasStreamData(data_ground_contact_time_1.DataGroundContactTime.type)) {
|
|
1336
|
+
activity.addStat(new data_ground_contact_time_max_1.DataGroundContactTimeMax(this.getDataTypeMax(activity, data_ground_contact_time_1.DataGroundContactTime.type)));
|
|
1337
|
+
}
|
|
1338
|
+
if (!activity.getStat(data_ground_contact_time_min_1.DataGroundContactTimeMin.type) && activity.hasStreamData(data_ground_contact_time_1.DataGroundContactTime.type)) {
|
|
1339
|
+
activity.addStat(new data_ground_contact_time_min_1.DataGroundContactTimeMin(this.getDataTypeMin(activity, data_ground_contact_time_1.DataGroundContactTime.type)));
|
|
1340
|
+
}
|
|
1341
|
+
if (!activity.getStat(data_ground_contact_time_avg_1.DataGroundContactTimeAvg.type) && activity.hasStreamData(data_ground_contact_time_1.DataGroundContactTime.type)) {
|
|
1342
|
+
activity.addStat(new data_ground_contact_time_avg_1.DataGroundContactTimeAvg(this.getDataTypeAvg(activity, data_ground_contact_time_1.DataGroundContactTime.type)));
|
|
1343
|
+
}
|
|
1344
|
+
// Vertical Oscillation
|
|
1345
|
+
if (!activity.getStat(data_vertical_oscillation_max_1.DataVerticalOscillationMax.type) && activity.hasStreamData(data_vertical_oscillation_1.DataVerticalOscillation.type)) {
|
|
1346
|
+
activity.addStat(new data_vertical_oscillation_max_1.DataVerticalOscillationMax(this.getDataTypeMax(activity, data_vertical_oscillation_1.DataVerticalOscillation.type)));
|
|
1347
|
+
}
|
|
1348
|
+
if (!activity.getStat(data_vertical_oscillation_min_1.DataVerticalOscillationMin.type) && activity.hasStreamData(data_vertical_oscillation_1.DataVerticalOscillation.type)) {
|
|
1349
|
+
activity.addStat(new data_vertical_oscillation_min_1.DataVerticalOscillationMin(this.getDataTypeMin(activity, data_vertical_oscillation_1.DataVerticalOscillation.type)));
|
|
1350
|
+
}
|
|
1351
|
+
if (!activity.getStat(data_vertical_oscillation_avg_1.DataVerticalOscillationAvg.type) && activity.hasStreamData(data_vertical_oscillation_1.DataVerticalOscillation.type)) {
|
|
1352
|
+
activity.addStat(new data_vertical_oscillation_avg_1.DataVerticalOscillationAvg(this.getDataTypeAvg(activity, data_vertical_oscillation_1.DataVerticalOscillation.type)));
|
|
1353
|
+
}
|
|
1318
1354
|
}
|
|
1319
1355
|
static generateMissingSpeedDerivedStatsForActivity(activity) {
|
|
1320
1356
|
// Pace
|