From de9d9feeebebe6633d0b9215f7e4c5591ce0c628 Mon Sep 17 00:00:00 2001 From: Rene Saarsoo Date: Fri, 18 Sep 2020 10:16:00 +0300 Subject: [PATCH] Merge types inside tokenizer file --- src/ast.ts | 38 ------------------------------------ src/tokenizer.ts | 51 +++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 44 insertions(+), 45 deletions(-) delete mode 100644 src/ast.ts diff --git a/src/ast.ts b/src/ast.ts deleted file mode 100644 index d035843..0000000 --- a/src/ast.ts +++ /dev/null @@ -1,38 +0,0 @@ -export enum RuleType { - Name = "Name", - Author = "Author", - Description = "Description", - Warmup = "Warmup", - Rest = "Rest", - Interval = "Interval", - Cooldown = "Cooldown", -} - -export type Rule = { - type: RuleType; - params: Param[]; -}; - -export enum ParamType { - Text = "Text", - Power = "Power", - PowerRange = "PowerRange", - Cadence = "Cadence", - Duration = "Duration", -} - -export type TextParam = { type: ParamType.Text; value: string }; -export type PowerParam = { type: ParamType.Power; value: number }; -export type PowerRangeParam = { - type: ParamType.PowerRange; - value: [number, number]; -}; -export type CadenceParam = { type: ParamType.Cadence; value: number }; -export type DurationParam = { type: ParamType.Duration; value: number }; - -export type Param = - | TextParam - | PowerParam - | PowerRangeParam - | CadenceParam - | DurationParam; diff --git a/src/tokenizer.ts b/src/tokenizer.ts index 189f40a..b8d0f24 100644 --- a/src/tokenizer.ts +++ b/src/tokenizer.ts @@ -1,4 +1,41 @@ -import { Param, ParamType, RuleType, Rule } from "./ast"; +export enum RuleType { + Name = "Name", + Author = "Author", + Description = "Description", + Warmup = "Warmup", + Rest = "Rest", + Interval = "Interval", + Cooldown = "Cooldown", +} + +export type Rule = { + type: RuleType; + params: Param[]; +}; + +export enum ParamType { + Text = "Text", + Power = "Power", + PowerRange = "PowerRange", + Cadence = "Cadence", + Duration = "Duration", +} + +export type TextParam = { type: ParamType.Text; value: string }; +export type PowerParam = { type: ParamType.Power; value: number }; +export type PowerRangeParam = { + type: ParamType.PowerRange; + value: [number, number]; +}; +export type CadenceParam = { type: ParamType.Cadence; value: number }; +export type DurationParam = { type: ParamType.Duration; value: number }; + +export type Param = + | TextParam + | PowerParam + | PowerRangeParam + | CadenceParam + | DurationParam; const toInteger = (str: string): number => { return parseInt(str.replace(/[^0-9]/, ""), 10); @@ -58,19 +95,19 @@ const tokenizeRule = (line: string): Rule | undefined => { }; export const tokenizeFile = (file: string): Rule[] => { - const rules: Rule[] = []; + const tokens: Rule[] = []; file.split("\n").forEach((line) => { const rule = tokenizeRule(line); if (rule) { - rules.push(rule); + tokens.push(rule); return; } - const lastRule = rules[rules.length - 1]; - if (lastRule && lastRule.type === RuleType.Description) { - lastRule.params.push({ type: ParamType.Text, value: line.trim() }); + const lastToken = tokens[tokens.length - 1]; + if (lastToken && lastToken.type === RuleType.Description) { + lastToken.params.push({ type: ParamType.Text, value: line.trim() }); } }); - return rules; + return tokens; };