@usirin/spellcaster
Version:
Remote execution of spells defined in spellbooks
38 lines • 1.72 kB
TypeScript
import type { Spellbook } from "@usirin/spellbook";
import { type ClientTransport } from "./transport";
/**
* Options for creating a SpellCaster
*/
export interface SpellCasterOptions {
/**
* Transport to use for communication
*/
transport: ClientTransport;
}
/**
* Type-safe interface for casting spells
*/
export interface SpellCasterSpec<TSpellbook extends Spellbook> {
/**
* Cast a spell using the provided transport
*
* @param name - The name of the spell to cast
* @param parameters - The parameters to pass to the spell
* @returns A promise that resolves to the result of the spell
*/
cast<TName extends keyof TSpellbook["spells"]>(name: TName, parameters: Parameters<TSpellbook["spells"][TName]["execute"]>[0]): Promise<ReturnType<TSpellbook["spells"][TName]["execute"]>>;
/**
* Get the current transport
*/
getTransport(): ClientTransport;
}
/**
* Create a SpellCaster for a specific spellbook type
*
* @param options - SpellCaster options
* @returns A SpellCaster instance
*/
export declare const createSpellCaster: <TSpellbook extends Spellbook>(options: SpellCasterOptions) => import("@usirin/forge").Entity<"caster"> & SpellCasterSpec<TSpellbook>;
export type SpellCaster<TSpellbook extends Spellbook = Spellbook> = ReturnType<typeof createSpellCaster<TSpellbook>>;
export declare function cast<TSpellbook extends Spellbook, TSpellName extends keyof TSpellbook["spells"] = keyof TSpellbook["spells"]>(transport: ClientTransport, name: TSpellName, parameters: Parameters<TSpellbook["spells"][TSpellName]["execute"]>[0]): Promise<ReturnType<TSpellbook["spells"][TSpellName]["execute"]>>;
//# sourceMappingURL=caster.d.ts.map