declare enum LifeCycle { BEFORE_PREPARE = "LifeCycle_BEFORE_PREPARE", AFTER_PREPARE = "LifeCycle_AFTER_PREPARE", BEFORE_START = "LifeCycle_BEFORE_START", AFTER_START = "LifeCycle_AFTER_START", BEFORE_STEP = "LifeCycle_BEFORE_STEP", AFTER_STEP = "LifeCycle_AFTER_STEP", BEFORE_END = "LifeCycle_BEFORE_END", AFTER_END = "LifeCycle_AFTER_END", INVALID_FORMAT = "LifeCycle_INVALID_FORMAT", INVALID_STEP = "LifeCycle_INVALID_STEP" } declare enum CustomEvent { CHANGE_SNAPSHOT = "CustomEvent_CHANGE_SNAPSHOT" } type Event = LifeCycle | CustomEvent; declare abstract class Game { private pubsub; private stepCheckChain; data: Record & { turn: number; }; bundler: Record; _deps: Map; abstract __prepare(initDataMask: string): void; abstract __start(): void; abstract __step(stepStr: string): any; abstract __isStepValidFormat(stepStr: string): string; abstract __end(reason: string): void; abstract toString(): string; abstract isAllowed(): boolean; subscribe(events: Event | Event[], fn: (...args: any[]) => any): void; publish(events: Event | Event[], ...args: any[]): void; prepare(initDataMask: string): void; start(): void; step(stepStr: string): void; checkStep(...checkers: ((stepStr: string) => string)[]): void; forceStep(stepStr: string): void; end(reason: string): void; } declare function GameImpl(tag: string): ClassDecorator; interface BuildGameOptions { name: string; plugins: (string | { name: string; extra?: Record; })[]; } declare function buildGame(option: BuildGameOptions): Game | undefined; /** * The base of Generator */ declare abstract class Generator { abstract generate(...args: any[]): string; } declare function GeneratorImpl(tag: string): ClassDecorator; declare function NewGenerator(tag: string): Generator; declare abstract class GamePlugin { abstract bindGame(game: Game, extra?: any): void | Record; } declare function GamePluginImpl(tag: string): ClassDecorator; declare function NewPlugin(tag: string): GamePlugin; export { CustomEvent, Event, Game, GameImpl, GamePlugin, GamePluginImpl, Generator, GeneratorImpl, LifeCycle, NewGenerator, NewPlugin, buildGame };