Skip to content

Commit

Permalink
include models used by ruleset in ruleset info
Browse files Browse the repository at this point in the history
fixes #28
  • Loading branch information
swantzter committed Sep 1, 2024
1 parent 8262591 commit 42e330b
Show file tree
Hide file tree
Showing 9 changed files with 83 additions and 5 deletions.
8 changes: 5 additions & 3 deletions bin/generate-lists.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,18 +54,18 @@ async function run () {

// overall models
const overallModels = await globImport<OverallModel>('models/overalls/*.ts')
const overallModelInfo: Record<string, OverallModelInfo> = {}
const overallModelsInfo: Record<string, OverallModelInfo> = {}

for (const [cEvt, model] of Object.entries(overallModels)) {
overallModelInfo[cEvt] = {
overallModelsInfo[cEvt] = {
id: model.id,
name: model.name,
options: model.options,
competitionEventOptions: model.competitionEventOptions,
}
}

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<CompetitionEvent>('preconfigured/competition-events/**/*.ts')
Expand Down Expand Up @@ -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]),
}
}

Expand Down
13 changes: 13 additions & 0 deletions bin/validate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
2 changes: 2 additions & 0 deletions lib/listing-tools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 () {
Expand Down
10 changes: 10 additions & 0 deletions lib/rulesets/ijru@2.0.0.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down Expand Up @@ -45,4 +48,11 @@ export default {
eIjruOaDdTddo40200,
eIjruOaXdTcaa40200,
],
competitionEventModels: [
ijruFreestyle200,
ijruSpeed100,
],
overallModels: [
ijruOverall100,
],
} satisfies Ruleset
10 changes: 10 additions & 0 deletions lib/rulesets/ijru@3.0.0.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down Expand Up @@ -45,4 +48,11 @@ export default {
eIjruOaDdTddo40300,
eIjruOaXdTcaa40300,
],
competitionEventModels: [
ijruFreestyle300,
ijruSpeed100,
],
overallModels: [
ijruOverall100,
],
} satisfies Ruleset
12 changes: 12 additions & 0 deletions lib/rulesets/svgf-par@2.0.0.ts
Original file line number Diff line number Diff line change
@@ -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'
Expand All @@ -19,4 +24,11 @@ export default {
overalls: [
eSvgfOaXdTpaa20200,
],
competitionEventModels: [
ijruFreestyle200,
ijruSpeed100,
],
overallModels: [
svgfParOverall200,
],
} satisfies Ruleset
12 changes: 12 additions & 0 deletions lib/rulesets/svgf-rh@2020.ts
Original file line number Diff line number Diff line change
@@ -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'
Expand Down Expand Up @@ -46,4 +51,11 @@ export default {
eSvgfOaXdReaa402020,
eSvgfOaSrRpaa202020,
],
competitionEventModels: [
ijruSpeed100,
svgfRhFreestyle2020,
],
overallModels: [
svgfRhOverall2020,
],
} satisfies Ruleset
16 changes: 15 additions & 1 deletion lib/rulesets/svgf-vh@2023.ts
Original file line number Diff line number Diff line change
@@ -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'
Expand Down Expand Up @@ -35,4 +41,12 @@ export default {
eSvgfOaSrVhto402023,
eSvgfOaDdVhto402023,
],
} satisfies Ruleset
competitionEventModels: [
svgfVhFreestyle2023,
svgfVhSpeed2023,
svgfVhTiming2023,
],
overallModels: [
svgfVhOverall2023,
],
} as Ruleset
5 changes: 4 additions & 1 deletion lib/rulesets/types.ts
Original file line number Diff line number Diff line change
@@ -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[]
}

0 comments on commit 42e330b

Please sign in to comment.