@busy-hour/blaze-types
Version:
<h1 align='center'>🔥 Blaze Types</h1> <div align='center'> An event driven framework for 🔥 Hono.js </div>
17 lines (16 loc) • 2.14 kB
TypeScript
import type { ActionEventCallRequest, AnyAction, Service } from '@busy-hour/blaze';
import type { RecordString, RecordUnknown } from './helper';
import type { ExtractActionHandler, ExtractActionValidator, ExtractEventValidator, ProcedureExtractor } from './extractor';
export type ServiceNameExtractor<T extends Service> = NonNullable<T['version']> extends number ? NonNullable<T['name']> extends string ? `v${T['version']}.${T['name']}` : `v${T['version']}` : NonNullable<T['name']> extends string ? `${T['name']}` : never;
export type ActionsExtractor<T extends Service> = {
[A in keyof T['actions'] as `${ServiceNameExtractor<T>}.${A extends string ? A : never}`]: ActionEventCallRequest<ExtractActionValidator<T, A, 'header'>, ExtractActionValidator<T, A, 'params'>, ExtractActionValidator<T, A, 'query'>, ExtractActionValidator<T, A, 'body'>, ExtractActionHandler<T, A>>;
};
export type EventsExtractor<T extends Service> = {
[E in keyof T['events'] as `${ServiceNameExtractor<T>}.${E extends string ? E : never}`]: ActionEventCallRequest<RecordString, RecordUnknown, RecordUnknown, ExtractEventValidator<T, E>, unknown>;
};
export type TrpcMutationExtractor<T extends Service> = {
[A in keyof T['actions'] as T['actions'][A] extends AnyAction ? NonNullable<T['actions'][A]['trpc']> extends 'mutation' ? `${ServiceNameExtractor<T>}.${A extends string ? A : never}` : never : never]: ProcedureExtractor<'mutation', ActionEventCallRequest<ExtractActionValidator<T, A, 'header'>, ExtractActionValidator<T, A, 'params'>, ExtractActionValidator<T, A, 'query'>, ExtractActionValidator<T, A, 'body'>, ExtractActionHandler<T, A>>>;
};
export type TrpcQueryExtractor<T extends Service> = {
[A in keyof T['actions'] as T['actions'][A] extends AnyAction ? NonNullable<T['actions'][A]['trpc']> extends 'query' ? `${ServiceNameExtractor<T>}.${A extends string ? A : never}` : never : never]: ProcedureExtractor<'query', ActionEventCallRequest<ExtractActionValidator<T, A, 'header'>, ExtractActionValidator<T, A, 'params'>, ExtractActionValidator<T, A, 'query'>, ExtractActionValidator<T, A, 'body'>, ExtractActionHandler<T, A>>>;
};