Derive partial AST types inside parser

This commit is contained in:
Rene Saarsoo 2020-09-18 15:23:07 +03:00
parent 6563f4fd5a
commit cba9954621
2 changed files with 6 additions and 11 deletions

View File

@ -7,12 +7,9 @@ export type Workout = {
intervals: Interval[]; intervals: Interval[];
}; };
export type IntervalData = { export type Interval = {
type: IntervalLabelTokenValue;
duration: number; duration: number;
power: { from: number; to: number }; power: { from: number; to: number };
cadence?: number; cadence?: number;
}; };
export type Interval = IntervalData & {
type: IntervalLabelTokenValue;
};

View File

@ -1,11 +1,7 @@
import { Interval, IntervalData, Workout } from "./ast"; import { Interval, Workout } from "./ast";
import { isIntervalLabelTokenValue, Token } from "./tokenizer"; import { isIntervalLabelTokenValue, Token } from "./tokenizer";
type Header = { type Header = Partial<Omit<Workout, "intervals">>;
name?: string;
author?: string;
description?: string;
};
const extractText = (tokens: Token[]): [string, Token[]] => { const extractText = (tokens: Token[]): [string, Token[]] => {
let text; let text;
@ -49,6 +45,8 @@ const parseHeader = (tokens: Token[]): [Header, Token[]] => {
return [header, tokens]; return [header, tokens];
}; };
type IntervalData = Omit<Interval, "type">;
const parseIntervalParams = (tokens: Token[]): [IntervalData, Token[]] => { const parseIntervalParams = (tokens: Token[]): [IntervalData, Token[]] => {
const data: Partial<IntervalData> = {}; const data: Partial<IntervalData> = {};