Derive partial AST types inside parser
This commit is contained in:
parent
6563f4fd5a
commit
cba9954621
|
|
@ -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;
|
|
||||||
};
|
|
||||||
|
|
|
||||||
|
|
@ -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> = {};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue