Created
October 15, 2024 14:05
-
-
Save guiseek/8fbb2df5ec3cad320a7c518b720cbf69 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import {Abstract} from './abstract' | |
import {Type} from './type' | |
export type AbstractConstructorParams<T extends Type> = | |
ConstructorParameters<T> extends { | |
length: 1 | |
} | |
? [Abstract<ConstructorParameters<T>[0]>] | |
: ConstructorParameters<T> extends {length: 2} | |
? [ | |
Abstract<ConstructorParameters<T>[0]>, | |
Abstract<ConstructorParameters<T>[1]> | |
] | |
: ConstructorParameters<T> extends {length: 3} | |
? [ | |
Abstract<ConstructorParameters<T>[0]>, | |
Abstract<ConstructorParameters<T>[1]>, | |
Abstract<ConstructorParameters<T>[2]> | |
] | |
: ConstructorParameters<T> extends {length: 4} | |
? [ | |
Abstract<ConstructorParameters<T>[0]>, | |
Abstract<ConstructorParameters<T>[1]>, | |
Abstract<ConstructorParameters<T>[2]>, | |
Abstract<ConstructorParameters<T>[3]> | |
] | |
: ConstructorParameters<T> extends {length: 5} | |
? [ | |
Abstract<ConstructorParameters<T>[0]>, | |
Abstract<ConstructorParameters<T>[1]>, | |
Abstract<ConstructorParameters<T>[2]>, | |
Abstract<ConstructorParameters<T>[3]>, | |
Abstract<ConstructorParameters<T>[4]> | |
] | |
: ConstructorParameters<T> extends {length: 6} | |
? [ | |
Abstract<ConstructorParameters<T>[0]>, | |
Abstract<ConstructorParameters<T>[1]>, | |
Abstract<ConstructorParameters<T>[2]>, | |
Abstract<ConstructorParameters<T>[3]>, | |
Abstract<ConstructorParameters<T>[4]>, | |
Abstract<ConstructorParameters<T>[5]> | |
] | |
: ConstructorParameters<T> extends {length: 7} | |
? [ | |
Abstract<ConstructorParameters<T>[0]>, | |
Abstract<ConstructorParameters<T>[1]>, | |
Abstract<ConstructorParameters<T>[2]>, | |
Abstract<ConstructorParameters<T>[3]>, | |
Abstract<ConstructorParameters<T>[4]>, | |
Abstract<ConstructorParameters<T>[5]>, | |
Abstract<ConstructorParameters<T>[6]>, | |
] | |
: ConstructorParameters<T> extends {length: 8} | |
? [ | |
Abstract<ConstructorParameters<T>[0]>, | |
Abstract<ConstructorParameters<T>[1]>, | |
Abstract<ConstructorParameters<T>[2]>, | |
Abstract<ConstructorParameters<T>[3]>, | |
Abstract<ConstructorParameters<T>[4]>, | |
Abstract<ConstructorParameters<T>[5]>, | |
Abstract<ConstructorParameters<T>[6]>, | |
Abstract<ConstructorParameters<T>[7]>, | |
] | |
: [] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export type Abstract<T = any> = abstract new (...params: any[]) => T |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import {Type, TypeConstructorParams} from '@webauthn/shared-api-interfaces' | |
export function createFactoryProvider<T extends Type>( | |
constructor: T, | |
dependencies: TypeConstructorParams<T> | |
) { | |
return { | |
provide: constructor, | |
useFactory(...params: ConstructorParameters<T>) { | |
return new constructor(...params) | |
}, | |
deps: dependencies, | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { | |
Type, | |
Abstract, | |
TypeConstructorParams, | |
AbstractConstructorParams, | |
} from '@webauthn/shared-api-interfaces' | |
export function createServiceProvider<A extends Abstract, T extends Type>( | |
constructor: A, | |
implementation: T, | |
dependencies: TypeConstructorParams<T> | AbstractConstructorParams<T> | |
) { | |
return { | |
provide: constructor, | |
useFactory(...params: ConstructorParameters<T>) { | |
return new implementation(...params) | |
}, | |
deps: dependencies, | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { | |
Type, | |
UseCase, | |
AbstractConstructorParams, | |
} from '@webauthn/shared-api-interfaces' | |
export function createUseCaseProvider< | |
T extends Type<UseCase<unknown, unknown>> | |
>(useCase: T, dependencies: AbstractConstructorParams<T>) { | |
return { | |
provide: useCase, | |
useFactory(...params: ConstructorParameters<T>) { | |
return new useCase(...params) | |
}, | |
deps: dependencies, | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import {Type} from './type' | |
type TypeOr<T, O> = Type<T> | O | |
type TypeOrString<T> = TypeOr<T, string> | |
export type TypeConstructorParams<T extends Type> = | |
ConstructorParameters<T> extends { | |
length: 1 | |
} | |
? [TypeOrString<ConstructorParameters<T>[0]>] | |
: ConstructorParameters<T> extends {length: 2} | |
? [ | |
TypeOrString<ConstructorParameters<T>[0]>, | |
TypeOrString<ConstructorParameters<T>[1]> | |
] | |
: ConstructorParameters<T> extends {length: 3} | |
? [ | |
TypeOrString<ConstructorParameters<T>[0]>, | |
TypeOrString<ConstructorParameters<T>[1]>, | |
TypeOrString<ConstructorParameters<T>[2]> | |
] | |
: ConstructorParameters<T> extends {length: 4} | |
? [ | |
TypeOrString<ConstructorParameters<T>[0]>, | |
TypeOrString<ConstructorParameters<T>[1]>, | |
TypeOrString<ConstructorParameters<T>[2]>, | |
TypeOrString<ConstructorParameters<T>[3]> | |
] | |
: ConstructorParameters<T> extends {length: 5} | |
? [ | |
TypeOrString<ConstructorParameters<T>[0]>, | |
TypeOrString<ConstructorParameters<T>[1]>, | |
TypeOrString<ConstructorParameters<T>[2]>, | |
TypeOrString<ConstructorParameters<T>[3]>, | |
TypeOrString<ConstructorParameters<T>[4]> | |
] | |
: ConstructorParameters<T> extends {length: 6} | |
? [ | |
TypeOrString<ConstructorParameters<T>[0]>, | |
TypeOrString<ConstructorParameters<T>[1]>, | |
TypeOrString<ConstructorParameters<T>[2]>, | |
TypeOrString<ConstructorParameters<T>[3]>, | |
TypeOrString<ConstructorParameters<T>[4]>, | |
TypeOrString<ConstructorParameters<T>[5]> | |
] | |
: ConstructorParameters<T> extends {length: 7} | |
? [ | |
TypeOrString<ConstructorParameters<T>[0]>, | |
TypeOrString<ConstructorParameters<T>[1]>, | |
TypeOrString<ConstructorParameters<T>[2]>, | |
TypeOrString<ConstructorParameters<T>[3]>, | |
TypeOrString<ConstructorParameters<T>[4]>, | |
TypeOrString<ConstructorParameters<T>[5]>, | |
TypeOrString<ConstructorParameters<T>[6]> | |
] | |
: ConstructorParameters<T> extends {length: 8} | |
? [ | |
TypeOrString<ConstructorParameters<T>[0]>, | |
TypeOrString<ConstructorParameters<T>[1]>, | |
TypeOrString<ConstructorParameters<T>[2]>, | |
TypeOrString<ConstructorParameters<T>[3]>, | |
TypeOrString<ConstructorParameters<T>[4]>, | |
TypeOrString<ConstructorParameters<T>[5]>, | |
TypeOrString<ConstructorParameters<T>[6]>, | |
TypeOrString<ConstructorParameters<T>[7]> | |
] | |
: ConstructorParameters<T> extends {length: 9} | |
? [ | |
TypeOrString<ConstructorParameters<T>[0]>, | |
TypeOrString<ConstructorParameters<T>[1]>, | |
TypeOrString<ConstructorParameters<T>[2]>, | |
TypeOrString<ConstructorParameters<T>[3]>, | |
TypeOrString<ConstructorParameters<T>[4]>, | |
TypeOrString<ConstructorParameters<T>[5]>, | |
TypeOrString<ConstructorParameters<T>[6]>, | |
TypeOrString<ConstructorParameters<T>[7]>, | |
TypeOrString<ConstructorParameters<T>[8]> | |
] | |
: ConstructorParameters<T> extends {length: 10} | |
? [ | |
TypeOrString<ConstructorParameters<T>[0]>, | |
TypeOrString<ConstructorParameters<T>[1]>, | |
TypeOrString<ConstructorParameters<T>[2]>, | |
TypeOrString<ConstructorParameters<T>[3]>, | |
TypeOrString<ConstructorParameters<T>[4]>, | |
TypeOrString<ConstructorParameters<T>[5]>, | |
TypeOrString<ConstructorParameters<T>[6]>, | |
TypeOrString<ConstructorParameters<T>[7]>, | |
TypeOrString<ConstructorParameters<T>[8]>, | |
TypeOrString<ConstructorParameters<T>[9]> | |
] | |
: ConstructorParameters<T> extends {length: 11} | |
? [ | |
TypeOrString<ConstructorParameters<T>[0]>, | |
TypeOrString<ConstructorParameters<T>[1]>, | |
TypeOrString<ConstructorParameters<T>[2]>, | |
TypeOrString<ConstructorParameters<T>[3]>, | |
TypeOrString<ConstructorParameters<T>[4]>, | |
TypeOrString<ConstructorParameters<T>[5]>, | |
TypeOrString<ConstructorParameters<T>[6]>, | |
TypeOrString<ConstructorParameters<T>[7]>, | |
TypeOrString<ConstructorParameters<T>[8]>, | |
TypeOrString<ConstructorParameters<T>[9]>, | |
TypeOrString<ConstructorParameters<T>[10]> | |
] | |
: ConstructorParameters<T> extends {length: 12} | |
? [ | |
TypeOrString<ConstructorParameters<T>[0]>, | |
TypeOrString<ConstructorParameters<T>[1]>, | |
TypeOrString<ConstructorParameters<T>[2]>, | |
TypeOrString<ConstructorParameters<T>[3]>, | |
TypeOrString<ConstructorParameters<T>[4]>, | |
TypeOrString<ConstructorParameters<T>[5]>, | |
TypeOrString<ConstructorParameters<T>[6]>, | |
TypeOrString<ConstructorParameters<T>[7]>, | |
TypeOrString<ConstructorParameters<T>[8]>, | |
TypeOrString<ConstructorParameters<T>[9]>, | |
TypeOrString<ConstructorParameters<T>[10]>, | |
TypeOrString<ConstructorParameters<T>[11]> | |
] | |
: never |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export interface Type<T = any> extends ReturnType<FunctionConstructor> { | |
new (...params: any[]): T | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import {Observable} from 'rxjs' | |
export interface UseCase<I, O> { | |
execute(input: I): Promise<O> | Observable<O> | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment