Parse your .FIT files easily, directly from JS. Written in Typescript
$ npm install fit-file-parser --save
See in examples folder:
import fs from 'node:fs/promises'
import FitParser from 'fit-file-parser'
fs.readFile('./example.fit', (err, content) => {
// Create a FitParser instance (options argument is optional)
if (err) {
console.error(err)
}
const fitParser = new FitParser({
force: true,
speedUnit: 'km/h',
lengthUnit: 'km',
temperatureUnit: 'kelvin',
pressureUnit: 'bar', // accept bar, cbar and psi (default is bar)
elapsedRecordField: true,
mode: 'cascade',
})
// Parse your file
fitParser.parse(content, (error, data) => {
// Handle result of parse method
if (error) {
console.error(error)
}
else {
console.log(JSON.stringify(data))
}
})
})import fs from 'node:fs/promises'
import FitParser from 'fit-file-parser'
const buffer = await fs.readFile('./example.fit')
const fitObject = await fitParser.parseAsync(buffer)To build the project, run:
npm run build
To run tests, run:
npm test
To rebuild the typescript types (as they are autogenerated from the FIT object) run:
this will update the file
src/fit_types.tsas it is only running with node (with type stripping), regenerating them requires node>=245
To run the codegen in watch mode during local development, run:
To build the local examples, run:
npm run examples
To lint and format the code, run:
npm run lint
To run the typechecker, run:
npm run type-check
Needed to create a new instance. options is optional, and is used to customize the returned object.
Allowed properties :
mode: Stringcascade: Returned object is organized as a tree, eg. each lap contains arecordsfields, that is an array of its records (default)list: Returned object is organized as lists of sessions, laps, records, etc..., without parent-child relationboth: A mix of the two other modes, eg.recordsare available inside the root field as well as inside each laps
lengthUnit: Stringm: Lengths are in meters (default)km: Lengths are in kilometersmi: Lengths are in miles
temperatureUnit: Stringcelsius:Temperatures are in °C (default)kelvin: Temperatures are in °Kfahrenheit: Temperatures are in °F
speedUnit: Stringm/s: Speeds are in meters per seconds (default)km/h: Speeds are in kilometers per hourmph: Speeds are in miles per hour
force: Booleantrue: Continues even if they are errors (default for now)false: Stops if an error occurs
elapsedRecordField: Booleantrue: Includeselapsed_time, containing the elapsed time in seconds since the first record, andtimer_time, containing the time shown on the device, inside eachrecordfieldfalse(default)
callback receives two arguments, the first as a error String, and the second as Object, result of parsing.
returns a Promise that resolves to the result of parsing.
All started thanks to Pierre Jacquier
Big thanks to Mikael Lofjärd for his early prototype. See CONTRIBUTORS.
MIT license; see LICENSE.
(c) 2019 Dimitrios Kanellopoulos