From 42e330b3bed7cecca1f87744dafd38fd52427e54 Mon Sep 17 00:00:00 2001 From: Svante Bengtson Date: Sun, 1 Sep 2024 17:46:13 +0200 Subject: [PATCH] include models used by ruleset in ruleset info fixes #28 --- bin/generate-lists.ts | 8 +++++--- bin/validate.ts | 13 +++++++++++++ lib/listing-tools.ts | 2 ++ lib/rulesets/ijru@2.0.0.ts | 10 ++++++++++ lib/rulesets/ijru@3.0.0.ts | 10 ++++++++++ lib/rulesets/svgf-par@2.0.0.ts | 12 ++++++++++++ lib/rulesets/svgf-rh@2020.ts | 12 ++++++++++++ lib/rulesets/svgf-vh@2023.ts | 16 +++++++++++++++- lib/rulesets/types.ts | 5 ++++- 9 files changed, 83 insertions(+), 5 deletions(-) diff --git a/bin/generate-lists.ts b/bin/generate-lists.ts index 698cf17..76fbd2f 100644 --- a/bin/generate-lists.ts +++ b/bin/generate-lists.ts @@ -54,10 +54,10 @@ async function run () { // overall models const overallModels = await globImport('models/overalls/*.ts') - const overallModelInfo: Record = {} + const overallModelsInfo: Record = {} for (const [cEvt, model] of Object.entries(overallModels)) { - overallModelInfo[cEvt] = { + overallModelsInfo[cEvt] = { id: model.id, name: model.name, options: model.options, @@ -65,7 +65,7 @@ async function run () { } } - await writeFile(path.resolve(dataDir, 'overall-models.json'), JSON.stringify(overallModelInfo, null, 2), 'utf-8') + await writeFile(path.resolve(dataDir, 'overall-models.json'), JSON.stringify(overallModelsInfo, null, 2), 'utf-8') // preconfigured competition events const competitionEvents = await globImport('preconfigured/competition-events/**/*.ts') @@ -112,6 +112,8 @@ async function run () { name: model.name, competitionEvents: model.competitionEvents.map(cEvt => competitionEventsInfo[cEvt.id]), overalls: model.overalls.map(cEvt => overallsInfo[cEvt.id]), + competitionEventModels: model.competitionEventModels.map(cEvt => cEvtModelInfo[cEvt.id]), + overallModels: model.overallModels.map(cEvt => overallModelsInfo[cEvt.id]), } } diff --git a/bin/validate.ts b/bin/validate.ts index 1532d2b..6085d49 100644 --- a/bin/validate.ts +++ b/bin/validate.ts @@ -47,6 +47,19 @@ async function run () { if (model == null) printError(p, `Configured component competition event ${cEvt} does not exist`) } } + + // validate that ruleset contains all models referenced by preconfigured + for (const [p, ruleset] of Object.entries(rulesets)) { + for (const preConf of ruleset.competitionEvents) { + const modelIdx = ruleset.competitionEventModels.findIndex(m => m.id === preConf.modelId) + if (modelIdx === -1) printError(p, `Model ${preConf.modelId} is not present in ruleset's competitionEventModels but is used by competitionEvent ${preConf.id}`) + } + + for (const preConf of ruleset.overalls) { + const modelIdx = ruleset.overallModels.findIndex(m => m.id === preConf.modelId) + if (modelIdx === -1) printError(p, `Model ${preConf.modelId} is not present in ruleset's overallModels but is used by overall ${preConf.id}`) + } + } } run() diff --git a/lib/listing-tools.ts b/lib/listing-tools.ts index 0d517f1..c21d54e 100644 --- a/lib/listing-tools.ts +++ b/lib/listing-tools.ts @@ -32,6 +32,8 @@ export interface RulesetInfo { name: string competitionEvents: readonly CompetitionEventInfo[] overalls: readonly OverallInfo[] + competitionEventModels: readonly CompetitionEventModelInfo[] + overallModels: readonly OverallModelInfo[] } export async function listCompetitionEventModels () { diff --git a/lib/rulesets/ijru@2.0.0.ts b/lib/rulesets/ijru@2.0.0.ts index 02a9693..a032c85 100644 --- a/lib/rulesets/ijru@2.0.0.ts +++ b/lib/rulesets/ijru@2.0.0.ts @@ -17,6 +17,9 @@ import eIjruOaSrIsro10200 from '../preconfigured/overalls/ijru/2.0.0/e.ijru.oa.s import eIjruOaSrTsro40200 from '../preconfigured/overalls/ijru/2.0.0/e.ijru.oa.sr.tsro.4.0@2.0.0.js' import eIjruOaXdTcaa40200 from '../preconfigured/overalls/ijru/2.0.0/e.ijru.oa.xd.tcaa.4.0@2.0.0.js' import { type Ruleset } from './types.js' +import ijruFreestyle200 from '../models/competition-events/ijru.freestyle@2.0.0.js' +import ijruSpeed100 from '../models/competition-events/ijru.speed@1.0.0.js' +import ijruOverall100 from '../models/overalls/ijru.overall@1.0.0.js' export default { id: 'ijru@2.0.0', @@ -45,4 +48,11 @@ export default { eIjruOaDdTddo40200, eIjruOaXdTcaa40200, ], + competitionEventModels: [ + ijruFreestyle200, + ijruSpeed100, + ], + overallModels: [ + ijruOverall100, + ], } satisfies Ruleset diff --git a/lib/rulesets/ijru@3.0.0.ts b/lib/rulesets/ijru@3.0.0.ts index 29b6265..dc78b40 100644 --- a/lib/rulesets/ijru@3.0.0.ts +++ b/lib/rulesets/ijru@3.0.0.ts @@ -17,6 +17,9 @@ import eIjruOaSrIsro10300 from '../preconfigured/overalls/ijru/3.0.0/e.ijru.oa.s import eIjruOaSrTsro40300 from '../preconfigured/overalls/ijru/3.0.0/e.ijru.oa.sr.tsro.4.0@3.0.0.js' import eIjruOaXdTcaa40300 from '../preconfigured/overalls/ijru/3.0.0/e.ijru.oa.xd.tcaa.4.0@3.0.0.js' import { type Ruleset } from './types.js' +import ijruFreestyle300 from '../models/competition-events/ijru.freestyle@3.0.0.js' +import ijruSpeed100 from '../models/competition-events/ijru.speed@1.0.0.js' +import ijruOverall100 from '../models/overalls/ijru.overall@1.0.0.js' export default { id: 'ijru@3.0.0', @@ -45,4 +48,11 @@ export default { eIjruOaDdTddo40300, eIjruOaXdTcaa40300, ], + competitionEventModels: [ + ijruFreestyle300, + ijruSpeed100, + ], + overallModels: [ + ijruOverall100, + ], } satisfies Ruleset diff --git a/lib/rulesets/svgf-par@2.0.0.ts b/lib/rulesets/svgf-par@2.0.0.ts index 6c5bffb..ce6f359 100644 --- a/lib/rulesets/svgf-par@2.0.0.ts +++ b/lib/rulesets/svgf-par@2.0.0.ts @@ -1,4 +1,9 @@ import { type Ruleset } from '../index.js' + +import ijruFreestyle200 from '../models/competition-events/ijru.freestyle@2.0.0.js' +import ijruSpeed100 from '../models/competition-events/ijru.speed@1.0.0.js' +import svgfParOverall200 from '../models/overalls/svgf-par.overall@2.0.0.js' + import eIjruFsSrSrpf275200 from '../preconfigured/competition-events/ijru/2.0.0/e.ijru.fs.sr.srpf.2.75@2.0.0' import eIjruFsWhWhpf275200 from '../preconfigured/competition-events/ijru/2.0.0/e.ijru.fs.wh.whpf.2.75@2.0.0' import eIjruSpSrSrdr22x30100 from '../preconfigured/competition-events/ijru/1.0.0/e.ijru.sp.sr.srdr.2.2x30@1.0.0' @@ -19,4 +24,11 @@ export default { overalls: [ eSvgfOaXdTpaa20200, ], + competitionEventModels: [ + ijruFreestyle200, + ijruSpeed100, + ], + overallModels: [ + svgfParOverall200, + ], } satisfies Ruleset diff --git a/lib/rulesets/svgf-rh@2020.ts b/lib/rulesets/svgf-rh@2020.ts index 2823888..9acac26 100644 --- a/lib/rulesets/svgf-rh@2020.ts +++ b/lib/rulesets/svgf-rh@2020.ts @@ -1,4 +1,9 @@ import { type Ruleset } from '../index.js' + +import ijruSpeed100 from '../models/competition-events/ijru.speed@1.0.0.js' +import svgfRhFreestyle2020 from '../models/competition-events/svgf-rh.freestyle@2020.js' +import svgfRhOverall2020 from '../models/overalls/svgf-rh.overall@2020.js' + import eIjruSpDdDdsr44x30100 from '../preconfigured/competition-events/ijru/1.0.0/e.ijru.sp.dd.ddsr.4.4x30@1.0.0.js' import eIjruSpDdDdss360100 from '../preconfigured/competition-events/ijru/1.0.0/e.ijru.sp.dd.ddss.3.60@1.0.0.js' import eIjruSpSrSrdr22x30100 from '../preconfigured/competition-events/ijru/1.0.0/e.ijru.sp.sr.srdr.2.2x30@1.0.0.js' @@ -46,4 +51,11 @@ export default { eSvgfOaXdReaa402020, eSvgfOaSrRpaa202020, ], + competitionEventModels: [ + ijruSpeed100, + svgfRhFreestyle2020, + ], + overallModels: [ + svgfRhOverall2020, + ], } satisfies Ruleset diff --git a/lib/rulesets/svgf-vh@2023.ts b/lib/rulesets/svgf-vh@2023.ts index b516a56..6aedfed 100644 --- a/lib/rulesets/svgf-vh@2023.ts +++ b/lib/rulesets/svgf-vh@2023.ts @@ -1,4 +1,10 @@ import { type Ruleset } from '../index.js' + +import svgfVhFreestyle2023 from '../models/competition-events/svgf-vh.freestyle@2023.js' +import svgfVhSpeed2023 from '../models/competition-events/svgf-vh.speed@2023.js' +import svgfVhTiming2023 from '../models/competition-events/svgf-vh.timing@2023.js' +import svgfVhOverall2023 from '../models/overalls/svgf-vh.overall@2023.js' + import eSvgfFsDdDdpfVh41202023 from '../preconfigured/competition-events/svgf/2023/e.svgf.fs.dd.ddpf-vh.4.120@2023.js' import eSvgfFsSrSrifVh1752023 from '../preconfigured/competition-events/svgf/2023/e.svgf.fs.sr.srif-vh.1.75@2023.js' import eSvgfFsSrSrtfVh4752023 from '../preconfigured/competition-events/svgf/2023/e.svgf.fs.sr.srtf-vh.4.75@2023.js' @@ -35,4 +41,12 @@ export default { eSvgfOaSrVhto402023, eSvgfOaDdVhto402023, ], -} satisfies Ruleset + competitionEventModels: [ + svgfVhFreestyle2023, + svgfVhSpeed2023, + svgfVhTiming2023, + ], + overallModels: [ + svgfVhOverall2023, + ], +} as Ruleset diff --git a/lib/rulesets/types.ts b/lib/rulesets/types.ts index 4632c4c..a1ac8d2 100644 --- a/lib/rulesets/types.ts +++ b/lib/rulesets/types.ts @@ -1,8 +1,11 @@ -import { type Overall, type CompetitionEvent } from '../preconfigured/types.js' +import type { CompetitionEventModel, OverallModel } from '../models/types.js' +import type { Overall, CompetitionEvent } from '../preconfigured/types.js' export interface Ruleset { id: string name: string competitionEvents: CompetitionEvent[] overalls: Overall[] + competitionEventModels: CompetitionEventModel[] + overallModels: OverallModel[] }