@kaiord/zwo 4.7.2 → 7.0.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/browser.d.ts +2 -2
- package/dist/browser.js +50 -36
- package/dist/browser.js.map +1 -1
- package/dist/{fast-xml-parser-YgKah3Fp.d.ts → fast-xml-parser-otyxjhMa.d.ts} +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +50 -36
- package/dist/index.js.map +1 -1
- package/package.json +13 -8
- package/schema/zwift-workout.xsd +119 -0
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createConsoleLogger, createZwiftParsingError, createZwiftValidationError,
|
|
1
|
+
import { createConsoleLogger, createZwiftParsingError, createZwiftValidationError, targetTypeSchema, targetUnitSchema, intensitySchema, durationTypeSchema } from '@kaiord/core';
|
|
2
2
|
import { XMLParser, XMLValidator, XMLBuilder } from 'fast-xml-parser';
|
|
3
3
|
|
|
4
4
|
// src/index.ts
|
|
@@ -79,24 +79,26 @@ var encodePowerTargets = (onStep, offStep, intervalsT) => {
|
|
|
79
79
|
intervalsT["@_OffPower"] = offStep.target.value.value / 100;
|
|
80
80
|
}
|
|
81
81
|
};
|
|
82
|
-
var
|
|
83
|
-
if (
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
if (cadence !== void 0) {
|
|
89
|
-
intervalsT["@_Cadence"] = cadence;
|
|
82
|
+
var resolveStepCadence = (step) => {
|
|
83
|
+
if (step.target.type === "cadence") {
|
|
84
|
+
const val = step.target.value;
|
|
85
|
+
if (val.unit === "rpm") return val.value;
|
|
86
|
+
if (val.unit === "range" && val.min !== void 0 && val.max !== void 0) {
|
|
87
|
+
return Math.round((val.min + val.max) / 2);
|
|
90
88
|
}
|
|
91
89
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
90
|
+
const zwift = step.extensions ? step.extensions.zwift : void 0;
|
|
91
|
+
const ext = zwift;
|
|
92
|
+
return ext ? ext.cadence : void 0;
|
|
93
|
+
};
|
|
94
|
+
var encodeCadenceTargets = (onStep, offStep, intervalsT) => {
|
|
95
|
+
const cadence = resolveStepCadence(onStep);
|
|
96
|
+
if (cadence !== void 0) {
|
|
97
|
+
intervalsT["@_Cadence"] = cadence;
|
|
98
|
+
}
|
|
99
|
+
const cadenceResting = resolveStepCadence(offStep);
|
|
100
|
+
if (cadenceResting !== void 0) {
|
|
101
|
+
intervalsT["@_CadenceResting"] = cadenceResting;
|
|
100
102
|
}
|
|
101
103
|
};
|
|
102
104
|
var encodeIntervalsT = (repetitionBlock) => {
|
|
@@ -201,6 +203,16 @@ var encodeMetadata = (step, interval) => {
|
|
|
201
203
|
interval["@_kaiord:equipment"] = step.equipment;
|
|
202
204
|
}
|
|
203
205
|
};
|
|
206
|
+
var convertZwiftCadenceTarget = (cadence, isRunning = false) => {
|
|
207
|
+
const rpm = isRunning ? cadence / 2 : cadence;
|
|
208
|
+
return {
|
|
209
|
+
type: targetTypeSchema.enum.cadence,
|
|
210
|
+
value: {
|
|
211
|
+
unit: "rpm",
|
|
212
|
+
value: rpm
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
};
|
|
204
216
|
var convertZwiftPowerTarget = (ftpPercentage) => {
|
|
205
217
|
return {
|
|
206
218
|
type: targetTypeSchema.enum.power,
|
|
@@ -232,16 +244,6 @@ var convertPowerZoneToPercentFtp = (zone) => {
|
|
|
232
244
|
};
|
|
233
245
|
return zoneMap[zone] || 100;
|
|
234
246
|
};
|
|
235
|
-
var convertZwiftCadenceTarget = (cadence, isRunning = false) => {
|
|
236
|
-
const rpm = isRunning ? cadence / 2 : cadence;
|
|
237
|
-
return {
|
|
238
|
-
type: targetTypeSchema.enum.cadence,
|
|
239
|
-
value: {
|
|
240
|
-
unit: "rpm",
|
|
241
|
-
value: rpm
|
|
242
|
-
}
|
|
243
|
-
};
|
|
244
|
-
};
|
|
245
247
|
|
|
246
248
|
// src/adapters/krd-to-zwift/power-encoder.ts
|
|
247
249
|
var encodeSteadyStatePowerTarget = (step, interval) => {
|
|
@@ -425,7 +427,13 @@ var mapSportType = (sport) => {
|
|
|
425
427
|
};
|
|
426
428
|
|
|
427
429
|
// src/adapters/krd-to-zwift/workout-file-builder.ts
|
|
428
|
-
var buildWorkoutFile = (
|
|
430
|
+
var buildWorkoutFile = ({
|
|
431
|
+
workoutData,
|
|
432
|
+
zwiftExtensions,
|
|
433
|
+
metadata,
|
|
434
|
+
fitExtensions,
|
|
435
|
+
logger
|
|
436
|
+
}) => {
|
|
429
437
|
const workoutFile = {};
|
|
430
438
|
addWorkoutProperties(workoutFile, workoutData.name, zwiftExtensions);
|
|
431
439
|
workoutFile.sportType = mapSportType(workoutData.sport);
|
|
@@ -470,13 +478,13 @@ var convertKRDToZwift = (krd, logger) => {
|
|
|
470
478
|
logger.debug("Building Zwift workout structure from KRD");
|
|
471
479
|
const workoutData = extractWorkoutData(krd);
|
|
472
480
|
const zwiftExtensions = krd.extensions?.zwift || {};
|
|
473
|
-
const workoutFile = buildWorkoutFile(
|
|
481
|
+
const workoutFile = buildWorkoutFile({
|
|
474
482
|
workoutData,
|
|
475
483
|
zwiftExtensions,
|
|
476
|
-
krd.metadata,
|
|
477
|
-
krd.extensions?.fit,
|
|
484
|
+
metadata: krd.metadata,
|
|
485
|
+
fitExtensions: krd.extensions?.fit,
|
|
478
486
|
logger
|
|
479
|
-
);
|
|
487
|
+
});
|
|
480
488
|
const xmlString = buildXmlString(workoutFile);
|
|
481
489
|
logger.debug("Zwift XML structure built successfully");
|
|
482
490
|
return xmlString;
|
|
@@ -552,25 +560,31 @@ var extractTags = (tags) => {
|
|
|
552
560
|
const tagArray = Array.isArray(tags.tag) ? tags.tag : [tags.tag];
|
|
553
561
|
return tagArray.map((t) => t["@_name"]);
|
|
554
562
|
};
|
|
555
|
-
var
|
|
556
|
-
|
|
563
|
+
var mapOriginalDurationType = (data) => {
|
|
564
|
+
const orig = data["kaiord:originalDurationType"];
|
|
565
|
+
if (orig === "distance") {
|
|
557
566
|
return {
|
|
558
567
|
type: durationTypeSchema.enum.distance,
|
|
559
568
|
meters: data["kaiord:originalDurationMeters"] || data.Duration || 0
|
|
560
569
|
};
|
|
561
570
|
}
|
|
562
|
-
if (
|
|
571
|
+
if (orig === "heart_rate_less_than") {
|
|
563
572
|
return {
|
|
564
573
|
type: durationTypeSchema.enum.heart_rate_less_than,
|
|
565
574
|
bpm: data["kaiord:originalDurationBpm"] || 0
|
|
566
575
|
};
|
|
567
576
|
}
|
|
568
|
-
if (
|
|
577
|
+
if (orig === "power_less_than") {
|
|
569
578
|
return {
|
|
570
579
|
type: durationTypeSchema.enum.power_less_than,
|
|
571
580
|
watts: data["kaiord:originalDurationWatts"] || 0
|
|
572
581
|
};
|
|
573
582
|
}
|
|
583
|
+
return void 0;
|
|
584
|
+
};
|
|
585
|
+
var mapZwiftDuration = (data) => {
|
|
586
|
+
const original = mapOriginalDurationType(data);
|
|
587
|
+
if (original) return original;
|
|
574
588
|
if (data.Duration === void 0 || data.Duration <= 0) {
|
|
575
589
|
return { type: durationTypeSchema.enum.open };
|
|
576
590
|
}
|