UNPKG

@markw65/fit-file-writer

Version:

Javascript Library for writing FitFiles

72 lines (71 loc) 3.29 kB
import { ExtFitField, FitMessageInputs, FitMessageMap, UserMessage, UserMessageMap, fit_messages, fit_types } from "./fit-tables"; type keysOf<o> = { [K in keyof o]: K extends string ? K : K extends number ? `${K}` : never; }[keyof o]; export { fit_messages, UserMessageMap }; export declare function keysOf<o extends object>(o: o): keysOf<o>[]; type Exact<Target, T> = { [K in keyof T]: K extends keyof Target ? T[K] : never; }; type Merge<T, U> = Omit<T, keyof U> & U; type FitTypes = typeof fit_types; type FitTypeKeys = keyof FitTypes; type ExcludeSpecial<T, E extends string = never> = Exclude<T, "_min" | "_max" | `${number}` | E>; type TypeFromFitType<T extends FitTypeKeys> = FitTypes[T] extends { mask: number; } ? { value: number; options?: ExcludeSpecial<keyof FitTypes[T], "mask">[]; } : ExcludeSpecial<keyof FitTypes[T]>; type TypeFromField<F extends ExtFitField | undefined> = F extends ExtFitField ? F["base_type"] extends "string" ? string : F["array"] extends true ? number[] : F["type"] extends FitTypeKeys ? TypeFromFitType<F["type"]> : number : undefined; type TypeFromMessage<M extends UserMessage> = { [K in keyof M["fields"]]: TypeFromField<M["fields"][K]>; }; type TypeFromMessages<M extends UserMessageMap> = { [K in keyof M]: TypeFromMessage<M[K]>; }; type FitMessages<UserMessages> = { [K in keyof FitMessageInputs | keyof UserMessages]: K extends keyof FitMessageInputs ? K extends keyof UserMessages ? Merge<FitMessageInputs[K], UserMessages[K]> : FitMessageInputs[K] : K extends keyof UserMessages ? UserMessages[K] : never; }; type FitMessageTypes<U extends UserMessageMap | null> = U extends UserMessageMap ? FitMessages<TypeFromMessages<U>> : FitMessageInputs; export type FitDevInfo = { field_num: number; value: number | number[] | string; }; export type FitWriterOptions = { noCompressedTimestamps?: boolean; usePreferredRecords?: boolean; }; export declare class FitWriter { private buffer; private offset; private crc; private definitionMap; private nextLocalDef; private localDefs; private scratch; private devFieldTypes; private lastTimeStamp; private options; private ensureSpace; constructor(options?: FitWriterOptions | boolean); private write_crc; private update_crc; private byte; private word; private long; private float; private double; private str; private field; private definition; private file_header; private dev_field_key; time(t: number | Date): number; latlng<T extends number | undefined>(l: T): T; finish(): DataView; private writeFieldValue; getPreferredField(message: FitMessageMap[string], key: string): ExtFitField; writeCustomMessage<S extends UserMessageMap | null, T extends keyof FitMessageInputs | (S extends UserMessageMap ? keyof FitMessageTypes<S> : never), U extends Partial<FitMessageTypes<S>[T]>>(userMessages: S, messageType: T, messageInfo: U & Exact<FitMessageTypes<S>[T], U>, devInfo?: FitDevInfo[] | null, lastUse?: boolean): void; writeMessage<T extends keyof FitMessageInputs, U extends Partial<FitMessageInputs[T]>>(messageType: T, messageInfo: U & Exact<FitMessageInputs[T], U>, devInfo?: FitDevInfo[] | null, lastUse?: boolean): void; }