Skip to content

Commit 8ce94c8

Browse files
committed
πŸ› fix: type
1 parent 8b367f3 commit 8ce94c8

File tree

6 files changed

+51
-33
lines changed

6 files changed

+51
-33
lines changed

β€Žpackage.jsonβ€Ž

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@
4545
},
4646
"pnpm": {
4747
"patchedDependencies": {
48-
48+
49+
4950
}
5051
}
5152
}

β€Žpackages/core/src/cli.tsβ€Ž

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { LiteEmit } from "lite-emit";
22
import { typeFlag } from "type-flag";
3-
import type { Dict, LiteralUnion, MaybeArray } from "@clerc/utils";
3+
import type { LiteralUnion, MaybeArray } from "@clerc/utils";
44
import { toArray } from "@clerc/utils";
55

66
import {
@@ -18,7 +18,7 @@ import type {
1818
CommandRecord,
1919
CommandType,
2020
CommandWithHandler,
21-
FlagOptions,
21+
Flags,
2222
Handler,
2323
HandlerContext,
2424
Inspector,
@@ -155,8 +155,8 @@ export class Clerc<C extends CommandRecord = {}> {
155155
* })
156156
* ```
157157
*/
158-
command<N extends string | RootType, O extends CommandOptions<[...P], A, F>, P extends string[] = string[], A extends MaybeArray<string | RootType> = MaybeArray<string | RootType>, F extends Dict<FlagOptions> = Dict<FlagOptions>>(c: CommandWithHandler<N, O & CommandOptions<[...P], A, F>>): this & Clerc<C & Record<N, Command<N, O>>>;
159-
command<N extends string | RootType, O extends CommandOptions<[...P], A, F>, P extends string[] = string[], A extends MaybeArray<string | RootType> = MaybeArray<string | RootType>, F extends Dict<FlagOptions> = Dict<FlagOptions>>(name: N, description: string, options?: O & CommandOptions<[...P], A, F>): this & Clerc<C & Record<N, Command<N, O>>>;
158+
command<N extends string | RootType, O extends CommandOptions<[...P], A, F>, P extends string[] = string[], A extends MaybeArray<string | RootType> = MaybeArray<string | RootType>, F extends Flags = Flags>(c: CommandWithHandler<N, O & CommandOptions<[...P], A, F>>): this & Clerc<C & Record<N, Command<N, O>>>;
159+
command<N extends string | RootType, O extends CommandOptions<[...P], A, F>, P extends string[] = string[], A extends MaybeArray<string | RootType> = MaybeArray<string | RootType>, F extends Flags = Flags>(name: N, description: string, options?: O & CommandOptions<[...P], A, F>): this & Clerc<C & Record<N, Command<N, O>>>;
160160
command(nameOrCommand: any, description?: any, options: any = {}) {
161161
const checkIsCommandObject = (nameOrCommand: any): nameOrCommand is CommandWithHandler => !(typeof nameOrCommand === "string" || nameOrCommand === Root);
162162

@@ -180,7 +180,7 @@ export class Clerc<C extends CommandRecord = {}> {
180180
(toArray(commandToSave.alias) || []).forEach(a => this.#usedNames.add(a));
181181

182182
// Register handler
183-
isCommandObject && handler && this.on(nameOrCommand.name, handler as any);
183+
isCommandObject && handler && this.on(nameOrCommand.name, handler);
184184

185185
return this as any;
186186
}

β€Žpackages/core/src/helpers.tsβ€Ž

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
import type { Dict, MaybeArray } from "@clerc/utils";
1+
/* eslint-disable @so1ve/generic-spacing */
22
import type { Clerc, RootType } from "./cli";
3-
import type { CommandOptions, CommandWithHandler, FlagOptions, Handler, Inspector, Plugin } from "./types";
3+
import type { Command, CommandOptions, CommandWithHandler, Handler, HandlerContext, HandlerInCommand, Inspector, Plugin } from "./types";
44

55
export const definePlugin = <T extends Clerc, U extends Clerc>(p: Plugin<T, U>) => p;
66

77
export const defineHandler = <C extends Clerc, K extends keyof C["_commands"]>(_cli: C, _key: K, handler: Handler<C["_commands"], K>) => handler;
88

99
export const defineInspector = <C extends Clerc>(_cli: C, inspector: Inspector<C["_commands"]>) => inspector;
1010

11-
export const defineCommand = <N extends string | RootType, O extends CommandOptions<[...P], A, F>, P extends string[] = string[], A extends MaybeArray<string> = MaybeArray<string>, F extends Dict<FlagOptions> = Dict<FlagOptions>>(command: CommandWithHandler<N, O & CommandOptions<[...P], A, F>>) => command;
11+
export const defineCommand = <N extends string | RootType, O extends CommandOptions<[...P]>, P extends string[]>(command: Command<N, O & CommandOptions<[...P]>>, handler?: HandlerInCommand<
12+
HandlerContext<Record<N, Command<N, O>> & Record<never, never>, N>
13+
>): CommandWithHandler<N, O & CommandOptions<[...P]>> => ({ ...command, handler });

β€Žpackages/core/src/types/index.tsβ€Ž

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ export type FlagOptions = FlagSchema & {
99
export type Flag = FlagOptions & {
1010
name: string
1111
};
12+
export type Flags = Dict<FlagOptions>;
1213
// Custom properties
1314
export declare interface CommandCustomProperties {}
14-
export interface CommandOptions<P extends string[] = string[], A extends MaybeArray<string | RootType> = MaybeArray<string | RootType>, F extends Dict<FlagOptions> = Dict<FlagOptions>> extends CommandCustomProperties {
15+
export interface CommandOptions<P extends string[] = string[], A extends MaybeArray<string | RootType> = MaybeArray<string | RootType>, F extends Flags = Flags> extends CommandCustomProperties {
1516
alias?: A
1617
parameters?: P
1718
flags?: F
@@ -25,9 +26,8 @@ export type Command<N extends string | RootType = string, O extends CommandOptio
2526
export type CommandAlias<N extends string | RootType = string, O extends CommandOptions = CommandOptions> = Command<N, O> & {
2627
__isAlias?: true
2728
};
28-
export type CommandWithHandler<N extends string | RootType = string, O extends CommandOptions = CommandOptions> = Command<N, O> & {
29-
handler?: HandlerInCommand<Record<N, Command<N, O>> & Record<never, never>, N>
30-
};
29+
30+
export type CommandWithHandler<N extends string | RootType = string, O extends CommandOptions = CommandOptions> = Command<N, O> & { handler?: HandlerInCommand<HandlerContext<Record<N, Command<N, O>> & Record<never, never>, N>> };
3131
type StripBrackets<Parameter extends string> = (
3232
Parameter extends `<${infer ParameterName}>` | `[${infer ParameterName}]`
3333
? (
@@ -51,36 +51,29 @@ export type CommandRecord = Dict<Command> & { [Root]?: Command };
5151
export type MakeEventMap<T extends CommandRecord> = { [K in keyof T]: [InspectorContext] };
5252
export type PossibleInputKind = string | number | boolean | Dict<any>;
5353
type NonNullableParameters<T extends string[] | undefined> = T extends undefined ? [] : NonNullable<T>;
54-
type TransformParameters<C extends CommandRecord = CommandRecord, N extends keyof C = keyof C> = {
55-
[Parameter in [...NonNullableParameters<C[N]["parameters"]>][number] as CamelCase<StripBrackets<Parameter>>]: ParameterType<Parameter>;
56-
};
57-
type TransformFlags<F extends Record<string, FlagSchema>> = {
58-
[K in keyof F]: F[K]["type"] extends any[]
59-
? F[K]["default"] extends never[]
60-
? F[K] & { default: any[] }
61-
: F[K]
62-
: F[K]
54+
type TransformParameters<C extends Command> = {
55+
[Parameter in NonNullableParameters<C["parameters"]>[number] as CamelCase<StripBrackets<Parameter>>]: ParameterType<Parameter>;
6356
};
64-
type TypeFlagWithDefault<C extends CommandRecord = CommandRecord, N extends keyof C = keyof C> = TypeFlag<TransformFlags<NonNullable<C[N]["flags"]>>>;
65-
type Raw<C extends CommandRecord = CommandRecord, N extends keyof C = keyof C> =
66-
TypeFlagWithDefault<C, N> & {
57+
type TypeFlagWithDefault<C extends Command> = TypeFlag<NonNullable<C["flags"]>>;
58+
type Raw<C extends Command> =
59+
TypeFlagWithDefault<C> & {
6760
parameters: string[]
68-
mergedFlags: TypeFlagWithDefault<C, N>["flags"] & TypeFlagWithDefault<C, N>["unknownFlags"]
61+
mergedFlags: TypeFlagWithDefault<C>["flags"] & TypeFlagWithDefault<C>["unknownFlags"]
6962
};
7063
export interface HandlerContext<C extends CommandRecord = CommandRecord, N extends keyof C = keyof C> {
71-
name: N extends keyof C ? N : N | undefined
64+
name?: N
7265
called?: string | RootType
73-
resolved: N extends keyof C ? true : boolean
66+
resolved: boolean
7467
hasRootOrAlias: boolean
7568
hasRoot: boolean
76-
raw: Raw<C, N>
77-
parameters: TransformParameters<C, N>
69+
raw: { [K in keyof Raw<C[N]>]: Raw<C[N]>[K] }
70+
parameters: { [K in keyof TransformParameters<C[N]>]: TransformParameters<C[N]>[K] }
7871
unknownFlags: ParsedFlags["unknownFlags"]
79-
flags: TypeFlagWithDefault<C, N>["flags"]
72+
flags: TypeFlagWithDefault<C[N]>["flags"]
8073
cli: Clerc<C>
8174
}
8275
export type Handler<C extends CommandRecord = CommandRecord, K extends keyof C = keyof C> = (ctx: HandlerContext<C, K>) => void;
83-
export type HandlerInCommand<C extends CommandRecord = CommandRecord, K extends keyof C = keyof C> = (ctx: HandlerContext<C, K> & { name: K }) => void;
76+
export type HandlerInCommand<C extends HandlerContext> = (ctx: { [K in keyof C]: C[K] }) => void;
8477
export type FallbackType<T, U> = {} extends T ? U : T;
8578
export type InspectorContext<C extends CommandRecord = CommandRecord> = HandlerContext<C> & {
8679
flags: FallbackType<TypeFlag<NonNullable<C[keyof C]["flags"]>>["flags"], Dict<any>>

β€Žpatches/[email protected]β€Ž

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
diff --git a/dist/index.d.ts b/dist/index.d.ts
2+
index d732d58ec773a3c8f55650995ba9a113bc04f505..75769f276cb3537fb0e0a418e0739bd72f08a6c6 100644
3+
--- a/dist/index.d.ts
4+
+++ b/dist/index.d.ts
5+
@@ -2,7 +2,7 @@ interface EventMap {
6+
[key: string | symbol]: any[];
7+
}
8+
declare type Listener<A extends any[]> = (...args: A) => void;
9+
-declare type _WildcardListener<EM extends EventMap, K extends keyof EM = keyof EM> = Listener<K extends unknown ? [K, ...EM[K]] : [K, ...EM[K]]>;
10+
+declare type _WildcardListener<EM extends EventMap, K extends keyof EM = keyof EM> = Listener<[K, ...EM[K]]>;
11+
declare type WildcardListener<EM extends EventMap> = _WildcardListener<EM>;
12+
declare type ListenerMap<EM extends EventMap> = {
13+
[K in keyof EM]?: Set<Listener<EM[K]>>;

β€Žpnpm-lock.yamlβ€Ž

Lines changed: 10 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
Β (0)