Replace the stagnant Pf2eTools bestiary with Foundry VTT PF2e system data (github.com/foundryvtt/pf2e, v13-dev branch). This gives us 4,355 remaster-era creatures across 49 sources including Monster Core 1+2 and all adventure paths. Changes: - Rewrite index generation script to walk Foundry pack directories - Rewrite PF2e normalization adapter for Foundry JSON shape (system.* fields, items[] for attacks/abilities/spells) - Add stripFoundryTags utility for Foundry HTML + enrichment syntax - Implement multi-file source fetching (one request per creature file) - Add spellcasting section to PF2e stat block (ranked spells + cantrips) - Add saveConditional and hpDetails to PF2e domain type and stat block - Add size and rarity to PF2e trait tags - Filter redundant glossary abilities (healing when in hp.details, spell mechanic reminders, allSaves duplicates) - Add PF2e stat block component tests (22 tests) - Bump IndexedDB cache version to 5 for clean migration Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
61 lines
1.6 KiB
TypeScript
61 lines
1.6 KiB
TypeScript
import type {
|
|
AnyCreature,
|
|
BestiaryIndex,
|
|
CreatureId,
|
|
Encounter,
|
|
Pf2eBestiaryIndex,
|
|
PlayerCharacter,
|
|
UndoRedoState,
|
|
} from "@initiative/domain";
|
|
|
|
export interface EncounterPersistence {
|
|
load(): Encounter | null;
|
|
save(encounter: Encounter): void;
|
|
}
|
|
|
|
export interface UndoRedoPersistence {
|
|
load(): UndoRedoState;
|
|
save(state: UndoRedoState): void;
|
|
}
|
|
|
|
export interface PlayerCharacterPersistence {
|
|
load(): PlayerCharacter[];
|
|
save(characters: PlayerCharacter[]): void;
|
|
}
|
|
|
|
export interface CachedSourceInfo {
|
|
readonly sourceCode: string;
|
|
readonly displayName: string;
|
|
readonly creatureCount: number;
|
|
readonly cachedAt: number;
|
|
}
|
|
|
|
export interface BestiaryCachePort {
|
|
cacheSource(
|
|
system: string,
|
|
sourceCode: string,
|
|
displayName: string,
|
|
creatures: AnyCreature[],
|
|
): Promise<void>;
|
|
isSourceCached(system: string, sourceCode: string): Promise<boolean>;
|
|
getCachedSources(system?: string): Promise<CachedSourceInfo[]>;
|
|
clearSource(system: string, sourceCode: string): Promise<void>;
|
|
clearAll(): Promise<void>;
|
|
loadAllCachedCreatures(): Promise<Map<CreatureId, AnyCreature>>;
|
|
}
|
|
|
|
export interface BestiaryIndexPort {
|
|
loadIndex(): BestiaryIndex;
|
|
getAllSourceCodes(): string[];
|
|
getDefaultFetchUrl(sourceCode: string, baseUrl?: string): string;
|
|
getSourceDisplayName(sourceCode: string): string;
|
|
}
|
|
|
|
export interface Pf2eBestiaryIndexPort {
|
|
loadIndex(): Pf2eBestiaryIndex;
|
|
getAllSourceCodes(): string[];
|
|
getDefaultFetchUrl(sourceCode: string, baseUrl?: string): string;
|
|
getSourceDisplayName(sourceCode: string): string;
|
|
getCreaturePathsForSource(sourceCode: string): string[];
|
|
}
|