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]; export type BoopPart = BoopPartTable[number];
declare const data: BoopPartTable; declare function getData(): BoopPartTable;
export default data; 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 {createRegion, moveToRegion, Region} from "@/core/region";
import {createPartsFromTable} from "@/core/part-factory"; import {createPartsFromTable} from "@/core/part-factory";
import {BoopPart} from "@/samples/boop/types"; 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"; import {PlayerType, PieceType, RegionType} from "@/samples/boop/types";
export function createInitialState() { export function createInitialState() {
const parts = getParts();
const pieces = createPartsFromTable( const pieces = createPartsFromTable(
parts, parts,
(item, index) => `${item.player}-${item.type}-${index + 1}`, (item, index) => `${item.player}-${item.type}-${index + 1}`,

View File

@ -7,5 +7,5 @@ type CardsTable = readonly {
export type Cards = CardsTable[number]; export type Cards = CardsTable[number];
declare const data: CardsTable; declare function getData(): CardsTable;
export default data; 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 {Part} from "@/core/part";
import {createRegion, createRegionAxis, Region} from "@/core/region"; import {createRegion, createRegionAxis, Region} from "@/core/region";
import {createPromptDef, IGameContext} from "@/core/game"; import {createPromptDef, IGameContext} from "@/core/game";
@ -38,7 +38,8 @@ export function createGameInfo(){
} }
export function createCards(){ export function createCards(){
const dataMap = {} as Record<string, CardData>; const cards = getCards();
const dataMap = {} as Record<string, CardData>;
for(const entry of cards){ for(const entry of cards){
const card = dataMap[entry.name] = dataMap[entry.name] || { const card = dataMap[entry.name] = dataMap[entry.name] || {

View File

@ -6,5 +6,5 @@ type EffectDesertTable = readonly {
export type EffectDesert = EffectDesertTable[number]; export type EffectDesert = EffectDesertTable[number];
declare const data: EffectDesertTable; declare function getData(): EffectDesertTable;
export default data; export default getData;

View File

@ -10,5 +10,5 @@ type EncounterDesertTable = readonly {
export type EncounterDesert = EncounterDesertTable[number]; export type EncounterDesert = EncounterDesertTable[number];
declare const data: EncounterDesertTable; declare function getData(): EncounterDesertTable;
export default data; export default getData;

View File

@ -9,5 +9,5 @@ type EnemyDesertTable = readonly {
export type EnemyDesert = EnemyDesertTable[number]; export type EnemyDesert = EnemyDesertTable[number];
declare const data: EnemyDesertTable; declare function getData(): EnemyDesertTable;
export default data; export default getData;

View File

@ -11,5 +11,5 @@ type EnemyIntentDesertTable = readonly {
export type EnemyIntentDesert = EnemyIntentDesertTable[number]; export type EnemyIntentDesert = EnemyIntentDesertTable[number];
declare const data: EnemyIntentDesertTable; declare function getData(): EnemyIntentDesertTable;
export default data; export default getData;

View File

@ -11,5 +11,5 @@ type HeroItemFighter1Table = readonly {
export type HeroItemFighter1 = HeroItemFighter1Table[number]; export type HeroItemFighter1 = HeroItemFighter1Table[number];
declare const data: HeroItemFighter1Table; declare function getData(): HeroItemFighter1Table;
export default data; export default getData;

View File

@ -4,11 +4,11 @@ import enemyDesertCsv from './enemyDesert.csv';
import enemyIntentDesertCsv from './enemyIntentDesert.csv'; import enemyIntentDesertCsv from './enemyIntentDesert.csv';
import effectDesertCsv from './effectDesert.csv'; import effectDesertCsv from './effectDesert.csv';
export const heroItemFighter1Data = heroItemFighter1Csv; export const heroItemFighter1Data = heroItemFighter1Csv();
export const encounterDesertData = encounterDesertCsv; export const encounterDesertData = encounterDesertCsv();
export const enemyDesertData = enemyDesertCsv; export const enemyDesertData = enemyDesertCsv();
export const enemyIntentDesertData = enemyIntentDesertCsv; export const enemyIntentDesertData = enemyIntentDesertCsv();
export const effectDesertData = effectDesertCsv; export const effectDesertData = effectDesertCsv();
export { default as encounterDesertCsv, type EncounterDesert } from './encounterDesert.csv'; export { default as encounterDesertCsv, type EncounterDesert } from './encounterDesert.csv';
export { default as enemyDesertCsv, type EnemyDesert } from './enemyDesert.csv'; export { default as enemyDesertCsv, type EnemyDesert } from './enemyDesert.csv';

View File

@ -1,8 +1,10 @@
import { Mulberry32RNG, type RNG } from '@/utils/rng'; 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 { MapNodeType, MapLayerType } from './types';
import type { MapLayer, MapNode, PointCrawlMap, MapGenerationConfig } from './types'; import type { MapLayer, MapNode, PointCrawlMap, MapGenerationConfig } from './types';
const encounterDesertCsv = encounterDesertCsvAccessor();
/** Pre-indexed encounters by type */ /** Pre-indexed encounters by type */
const encountersByType = buildEncounterIndex(); const encountersByType = buildEncounterIndex();

View File

@ -102,8 +102,8 @@ describe('encounterDesert.csv import', () => {
if (e.type === 'minion' || e.type === 'elite') { if (e.type === 'minion' || e.type === 'elite') {
expect(Array.isArray(e.enemies)).toBe(true); expect(Array.isArray(e.enemies)).toBe(true);
expect(e.enemies.length).toBeGreaterThan(0); expect(e.enemies.length).toBeGreaterThan(0);
for (const [enemyId, bonusHp] of e.enemies) { for (const [enemy, bonusHp] of e.enemies) {
expect(typeof enemyId).toBe('string'); expect(typeof enemy === 'string' || typeof enemy === 'object').toBe(true);
expect(typeof bonusHp).toBe('number'); expect(typeof bonusHp).toBe('number');
} }
} }
@ -222,9 +222,9 @@ describe('enemyIntentDesert.csv import', () => {
it('should have effects with target, effect ref, and value', () => { it('should have effects with target, effect ref, and value', () => {
for (const intent of enemyIntentDesertData) { 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(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'); expect(typeof value).toBe('number');
} }
} }