refactor: change how we define command

This commit is contained in:
hypercross 2026-04-06 10:06:04 +08:00
parent 2d5200bdb7
commit 70b1ac1e43
4 changed files with 10 additions and 4 deletions

View File

@ -19,7 +19,7 @@ export type { Region, RegionAxis } from './core/region';
export { createRegion, createRegionAxis, applyAlign, shuffle, moveToRegion } from './core/region';
// Utils
export type { Command, CommandResult, CommandSchema, CommandParamSchema, CommandOptionSchema, CommandFlagSchema } from './utils/command';
export type { Command, CommandDef, CommandResult, CommandSchema, CommandParamSchema, CommandOptionSchema, CommandFlagSchema } from './utils/command';
export { parseCommand, parseCommandSchema, validateCommand, parseCommandWithSchema, applyCommandSchema } from './utils/command';
export type { CommandRunner, CommandRunnerHandler, CommandRunnerContext, PromptEvent, CommandRunnerEvents } from './utils/command';

View File

@ -1,5 +1,6 @@
import type { Command, CommandSchema } from './types';
import type {
CommandDef, CommandFunction,
CommandResult,
CommandRunner,
CommandRunnerContext,
@ -16,9 +17,8 @@ type CanRunParsed = {
runParsed<T=unknown>(command: Command): Promise<CommandResult<T>>,
}
type CmdFunc<TContext> = (ctx: TContext, ...args: any[]) => Promise<unknown>;
export class CommandRegistry<TContext> extends Map<string, CommandRunner<TContext>>{
asCommand<TFunc extends CmdFunc<TContext> = CmdFunc<TContext>>(schema: CommandSchema | string, run: TFunc) {
register<TFunc extends CommandFunction<TContext>>({schema,run}: CommandDef<TContext, TFunc>) {
const parsedSchema = typeof schema === 'string' ? parseCommandSchema(schema) : schema;
registerCommand(this, {
schema: parsedSchema,

View File

@ -51,3 +51,9 @@ export type CommandRunner<TContext, TResult = unknown> = {
schema: CommandSchema;
run: CommandRunnerHandler<TContext, TResult>;
};
export type CommandFunction<TContext> = (ctx: TContext, ...args: any[]) => Promise<unknown>;
export type CommandDef<TContext,TFunc extends CommandFunction<TContext>> = {
schema: string | CommandSchema,
run: TFunc;
}

View File

@ -18,5 +18,5 @@ export type {
CommandFlagSchema,
CommandSchema,
} from './types';
export type { CommandRunner, CommandResult, CommandRunnerHandler, CommandRunnerContext, PromptEvent, CommandRunnerEvents } from './command-runner';
export type { CommandRunner, CommandDef, CommandResult, CommandRunnerHandler, CommandRunnerContext, PromptEvent, CommandRunnerEvents } from './command-runner';
export type { CommandRegistry, CommandRunnerContextExport } from './command-registry';