@markw65/fit-file-writer
Version:
Javascript Library for writing FitFiles
72 lines (71 loc) • 3.29 kB
TypeScript
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;
}