diff --git a/src/samples/boop/boopPart.csv.d.ts b/src/samples/boop/boopPart.csv.d.ts index 779b753..eaa18f1 100644 --- a/src/samples/boop/boopPart.csv.d.ts +++ b/src/samples/boop/boopPart.csv.d.ts @@ -6,5 +6,5 @@ type BoopPartTable = readonly { export type BoopPart = BoopPartTable[number]; -declare const data: BoopPartTable; -export default data; +declare function getData(): BoopPartTable; +export default getData; diff --git a/src/samples/boop/state.ts b/src/samples/boop/state.ts index fd7b354..c53a3c8 100644 --- a/src/samples/boop/state.ts +++ b/src/samples/boop/state.ts @@ -1,4 +1,4 @@ -import parts from './boopPart.csv'; +import getParts from './boopPart.csv'; import {createRegion, moveToRegion, Region} from "@/core/region"; import {createPartsFromTable} from "@/core/part-factory"; import {BoopPart} from "@/samples/boop/types"; @@ -6,6 +6,7 @@ import {BOARD_SIZE} from "@/samples/boop/constants"; import {PlayerType, PieceType, RegionType} from "@/samples/boop/types"; export function createInitialState() { + const parts = getParts(); const pieces = createPartsFromTable( parts, (item, index) => `${item.player}-${item.type}-${index + 1}`, diff --git a/src/samples/onitama/cards.csv.d.ts b/src/samples/onitama/cards.csv.d.ts index 181b8f2..144a9aa 100644 --- a/src/samples/onitama/cards.csv.d.ts +++ b/src/samples/onitama/cards.csv.d.ts @@ -7,5 +7,5 @@ type CardsTable = readonly { export type Cards = CardsTable[number]; -declare const data: CardsTable; -export default data; +declare function getData(): CardsTable; +export default getData; diff --git a/src/samples/onitama/types.ts b/src/samples/onitama/types.ts index 32df334..a7fbb43 100644 --- a/src/samples/onitama/types.ts +++ b/src/samples/onitama/types.ts @@ -1,4 +1,4 @@ -import cards from './cards.csv'; +import getCards from './cards.csv'; import {Part} from "@/core/part"; import {createRegion, createRegionAxis, Region} from "@/core/region"; import {createPromptDef, IGameContext} from "@/core/game"; @@ -38,7 +38,8 @@ export function createGameInfo(){ } export function createCards(){ - const dataMap = {} as Record; + const cards = getCards(); + const dataMap = {} as Record; for(const entry of cards){ const card = dataMap[entry.name] = dataMap[entry.name] || { diff --git a/src/samples/slay-the-spire-like/data/effectDesert.csv.d.ts b/src/samples/slay-the-spire-like/data/effectDesert.csv.d.ts index 0c471cf..442ffdd 100644 --- a/src/samples/slay-the-spire-like/data/effectDesert.csv.d.ts +++ b/src/samples/slay-the-spire-like/data/effectDesert.csv.d.ts @@ -6,5 +6,5 @@ type EffectDesertTable = readonly { export type EffectDesert = EffectDesertTable[number]; -declare const data: EffectDesertTable; -export default data; +declare function getData(): EffectDesertTable; +export default getData; diff --git a/src/samples/slay-the-spire-like/data/encounterDesert.csv.d.ts b/src/samples/slay-the-spire-like/data/encounterDesert.csv.d.ts index e84e3b4..348797f 100644 --- a/src/samples/slay-the-spire-like/data/encounterDesert.csv.d.ts +++ b/src/samples/slay-the-spire-like/data/encounterDesert.csv.d.ts @@ -10,5 +10,5 @@ type EncounterDesertTable = readonly { export type EncounterDesert = EncounterDesertTable[number]; -declare const data: EncounterDesertTable; -export default data; +declare function getData(): EncounterDesertTable; +export default getData; diff --git a/src/samples/slay-the-spire-like/data/enemyDesert.csv.d.ts b/src/samples/slay-the-spire-like/data/enemyDesert.csv.d.ts index 2408c52..5f76109 100644 --- a/src/samples/slay-the-spire-like/data/enemyDesert.csv.d.ts +++ b/src/samples/slay-the-spire-like/data/enemyDesert.csv.d.ts @@ -9,5 +9,5 @@ type EnemyDesertTable = readonly { export type EnemyDesert = EnemyDesertTable[number]; -declare const data: EnemyDesertTable; -export default data; +declare function getData(): EnemyDesertTable; +export default getData; diff --git a/src/samples/slay-the-spire-like/data/enemyIntentDesert.csv.d.ts b/src/samples/slay-the-spire-like/data/enemyIntentDesert.csv.d.ts index 0c264ce..ef6a795 100644 --- a/src/samples/slay-the-spire-like/data/enemyIntentDesert.csv.d.ts +++ b/src/samples/slay-the-spire-like/data/enemyIntentDesert.csv.d.ts @@ -11,5 +11,5 @@ type EnemyIntentDesertTable = readonly { export type EnemyIntentDesert = EnemyIntentDesertTable[number]; -declare const data: EnemyIntentDesertTable; -export default data; +declare function getData(): EnemyIntentDesertTable; +export default getData; diff --git a/src/samples/slay-the-spire-like/data/heroItemFighter1.csv.d.ts b/src/samples/slay-the-spire-like/data/heroItemFighter1.csv.d.ts index b254585..5ff6eb0 100644 --- a/src/samples/slay-the-spire-like/data/heroItemFighter1.csv.d.ts +++ b/src/samples/slay-the-spire-like/data/heroItemFighter1.csv.d.ts @@ -11,5 +11,5 @@ type HeroItemFighter1Table = readonly { export type HeroItemFighter1 = HeroItemFighter1Table[number]; -declare const data: HeroItemFighter1Table; -export default data; +declare function getData(): HeroItemFighter1Table; +export default getData; diff --git a/src/samples/slay-the-spire-like/data/index.ts b/src/samples/slay-the-spire-like/data/index.ts index 3d7bc32..b9747b4 100644 --- a/src/samples/slay-the-spire-like/data/index.ts +++ b/src/samples/slay-the-spire-like/data/index.ts @@ -4,11 +4,11 @@ import enemyDesertCsv from './enemyDesert.csv'; import enemyIntentDesertCsv from './enemyIntentDesert.csv'; import effectDesertCsv from './effectDesert.csv'; -export const heroItemFighter1Data = heroItemFighter1Csv; -export const encounterDesertData = encounterDesertCsv; -export const enemyDesertData = enemyDesertCsv; -export const enemyIntentDesertData = enemyIntentDesertCsv; -export const effectDesertData = effectDesertCsv; +export const heroItemFighter1Data = heroItemFighter1Csv(); +export const encounterDesertData = encounterDesertCsv(); +export const enemyDesertData = enemyDesertCsv(); +export const enemyIntentDesertData = enemyIntentDesertCsv(); +export const effectDesertData = effectDesertCsv(); export { default as encounterDesertCsv, type EncounterDesert } from './encounterDesert.csv'; export { default as enemyDesertCsv, type EnemyDesert } from './enemyDesert.csv'; diff --git a/src/samples/slay-the-spire-like/map/generator.ts b/src/samples/slay-the-spire-like/map/generator.ts index bc23b96..d343dff 100644 --- a/src/samples/slay-the-spire-like/map/generator.ts +++ b/src/samples/slay-the-spire-like/map/generator.ts @@ -1,8 +1,10 @@ import { Mulberry32RNG, type RNG } from '@/utils/rng'; -import encounterDesertCsv, { type EncounterDesert } from '../data/encounterDesert.csv'; +import encounterDesertCsvAccessor, { type EncounterDesert } from '../data/encounterDesert.csv'; import { MapNodeType, MapLayerType } from './types'; import type { MapLayer, MapNode, PointCrawlMap, MapGenerationConfig } from './types'; +const encounterDesertCsv = encounterDesertCsvAccessor(); + /** Pre-indexed encounters by type */ const encountersByType = buildEncounterIndex(); diff --git a/tests/samples/slay-the-spire-like/data/index.test.ts b/tests/samples/slay-the-spire-like/data/index.test.ts index e8ee18c..1d26a7b 100644 --- a/tests/samples/slay-the-spire-like/data/index.test.ts +++ b/tests/samples/slay-the-spire-like/data/index.test.ts @@ -102,8 +102,8 @@ describe('encounterDesert.csv import', () => { if (e.type === 'minion' || e.type === 'elite') { expect(Array.isArray(e.enemies)).toBe(true); expect(e.enemies.length).toBeGreaterThan(0); - for (const [enemyId, bonusHp] of e.enemies) { - expect(typeof enemyId).toBe('string'); + for (const [enemy, bonusHp] of e.enemies) { + expect(typeof enemy === 'string' || typeof enemy === 'object').toBe(true); expect(typeof bonusHp).toBe('number'); } } @@ -222,9 +222,9 @@ describe('enemyIntentDesert.csv import', () => { it('should have effects with target, effect ref, and value', () => { for (const intent of enemyIntentDesertData) { - for (const [target, effectId, value] of intent.effects) { + for (const [target, effect, value] of intent.effects) { expect(target === 'self' || target === 'opponent').toBe(true); - expect(typeof effectId).toBe('string'); + expect(typeof effect === 'string' || typeof effect === 'object').toBe(true); expect(typeof value).toBe('number'); } }