refactor: update inline-schema to import accessors

This commit is contained in:
hypercross 2026-04-15 14:56:48 +08:00
parent 7e98e5e546
commit 09148f5b13
12 changed files with 31 additions and 27 deletions

View File

@ -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;

View File

@ -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}`,

View File

@ -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;

View File

@ -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<string, CardData>;
const cards = getCards();
const dataMap = {} as Record<string, CardData>;
for(const entry of cards){
const card = dataMap[entry.name] = dataMap[entry.name] || {

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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';

View File

@ -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();

View File

@ -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');
}
}