Skip to content

@kaiord/core


@kaiord/core / validateRoundTrip

Function: validateRoundTrip()

validateRoundTrip(binaryReader, binaryWriter, toleranceChecker, logger): object

Defined in: packages/core/src/tests/round-trip/validate-round-trip.ts:105

Validates round-trip conversion between FIT and KRD formats.

This use case provides two validation methods to ensure data integrity during bidirectional conversions, checking that values remain within acceptable tolerances.

Default tolerances:

  • Time: ±1 second
  • Power: ±1 watt or ±1% FTP
  • Heart rate: ±1 BPM
  • Cadence: ±1 RPM

Parameters

binaryReader

BinaryReader

FIT file reader implementation

binaryWriter

BinaryWriter

FIT file writer implementation

toleranceChecker

ToleranceChecker

Tolerance checker with configured thresholds

logger

Logger

Logger for operation tracking

Returns

object

An object with validation methods for both round-trip directions

validateFitToKrdToFit

validateFitToKrdToFit: (params) => Promise<object[]>

Parameters

params

ValidateFitToKrdToFitParams

Returns

Promise<object[]>

validateKrdToFitToKrd

validateKrdToFitToKrd: (params) => Promise<object[]>

Parameters

params

ValidateKrdToFitToKrdParams

Returns

Promise<object[]>

Examples

typescript
import { validateRoundTrip, createDefaultProviders, DEFAULT_TOLERANCES } from '@kaiord/core';
import { readFileSync } from 'fs';

const providers = createDefaultProviders();
const validator = validateRoundTrip(
  providers.binaryReader,
  providers.binaryWriter,
  providers.toleranceChecker,
  providers.logger
);

// Validate FIT → KRD → FIT
const fitBuffer = readFileSync('workout.fit');
const violations = await validator.validateFitToKrdToFit({
  originalFit: fitBuffer
});

if (violations.length > 0) {
  console.error('Round-trip validation failed:');
  violations.forEach(v => {
    console.error(`  ${v.field}: expected ${v.expected}, got ${v.actual}`);
  });
}
typescript
// Validate KRD → FIT → KRD
const krd = {
  version: '1.0',
  type: 'structured_workout',
  metadata: { created: '2025-01-15T10:30:00Z', sport: 'running' }
};

const violations = await validator.validateKrdToFitToKrd({
  originalKrd: krd
});
typescript
// Custom tolerance configuration
import { createToleranceChecker, toleranceConfigSchema } from '@kaiord/core';

const customConfig = toleranceConfigSchema.parse({
  time: 2,      // ±2 seconds
  power: 5,     // ±5 watts
  heartRate: 2, // ±2 BPM
  cadence: 2    // ±2 RPM
});

const customChecker = createToleranceChecker(customConfig);
const validator = validateRoundTrip(
  providers.binaryReader,
  providers.binaryWriter,
  customChecker,
  providers.logger
);