type JoinNames<
Gates extends readonly Gate<GateContextBase>[],
Sep extends string
> = Gates extends readonly [
infer Only extends Gate<GateContextBase>
]
? GateName<Only>
: Gates extends readonly [
infer First extends Gate<GateContextBase>,
...infer Rest extends readonly Gate<GateContextBase>[]
]
? `${GateName<First>}${Sep}${JoinNames<Rest, Sep>}`
: string;type JoinNames<
Gates extends readonly Gate<GateContextBase>[],
Sep extends string
> = Gates extends readonly [
infer Only extends Gate<GateContextBase>
]
? GateName<Only>
: Gates extends readonly [
infer First extends Gate<GateContextBase>,
...infer Rest extends readonly Gate<GateContextBase>[]
]
? `${GateName<First>}${Sep}${JoinNames<Rest, Sep>}`
: string;Gates
Gates extends readonly Gate<GateContextBase>[]Gates extends readonly Gate<GateContextBase>[]