@ogre-tools/injectable
Advanced tools
Comparing version 5.0.0 to 5.0.1
@@ -6,2 +6,11 @@ # Change Log | ||
### [5.0.1](https://github.com/ogre-works/ogre-tools/compare/v5.0.0...v5.0.1) (2022-02-16) | ||
### Bug Fixes | ||
* Fix typing of getting injectable for injection token ([6412b3e](https://github.com/ogre-works/ogre-tools/commit/6412b3e083b6c3db02167813628d8d0e9062b82c)) | ||
## [5.0.0](https://github.com/ogre-works/ogre-tools/compare/v4.1.0...v5.0.0) (2022-02-09) | ||
@@ -8,0 +17,0 @@ |
/// <reference types="jest" /> | ||
declare module '@ogre-tools/injectable' { | ||
type InferFromInjectable<T> = T extends Injectable< | ||
unknown, | ||
type InferFromInjectable<T> = T extends NormalInjectable< | ||
infer TInstance, | ||
@@ -23,7 +22,7 @@ infer TInstantiationParameter | ||
export interface DiContainer extends DiContainerForInjection<false> { | ||
purge: (injectableKey: Injectable<any, any, any>) => void; | ||
purge: (injectableKey: NormalInjectable<any, any>) => void; | ||
runSetups: () => Promise<void>; | ||
override<TInjectable extends Injectable<unknown, unknown, unknown>>( | ||
override<TInjectable extends NormalInjectable<unknown, unknown>>( | ||
injectable: TInjectable, | ||
@@ -38,3 +37,4 @@ instantiateStub: ( | ||
register(injectable: Injectable<any, any, any>): void; | ||
register(injectable: NormalInjectable<any, any>): void; | ||
register(injectable: InjectionTokenInjectable<any>): void; | ||
preventSideEffects: () => void; | ||
@@ -54,2 +54,38 @@ } | ||
interface CommonInjectable { | ||
id: string; | ||
setup?: (di: DiContainerForSetup) => void | Promise<void>; | ||
causesSideEffects?: boolean; | ||
lifecycle?: ILifecycle; | ||
} | ||
interface InjectionTokenInjectable< | ||
TInjectionToken extends InjectionToken<unknown, unknown>, | ||
> extends CommonInjectable { | ||
injectionToken: TInjectionToken; | ||
instantiate: ( | ||
di: DiContainerForInstantiate, | ||
instantiationParameter: InferFromToken<TInjectionToken>[1], | ||
) => InferFromToken<TInjectionToken>[0]; | ||
} | ||
interface NormalInjectable<TInstance, TInstantiationParameter> | ||
extends CommonInjectable { | ||
instantiate: ( | ||
di: DiContainerForInstantiate, | ||
instantiationParameter: TInstantiationParameter, | ||
) => TInstance; | ||
} | ||
export function getInjectable< | ||
TInjectionToken extends InjectionToken<unknown, unknown>, | ||
>( | ||
options: InjectionTokenInjectable<TInjectionToken>, | ||
): InjectionTokenInjectable<TInjectionToken>; | ||
export function getInjectable<TInstance, TInstantiationParameter>( | ||
options: NormalInjectable<TInstance, TInstantiationParameter>, | ||
): NormalInjectable<TInstance, TInstantiationParameter>; | ||
export function getInjectionToken<TInstance, TInstantiationParameter = void>({ | ||
@@ -77,3 +113,3 @@ id: string, | ||
interface DiContainerForInjection<TReturnAsPromise extends boolean> { | ||
inject<TInjectable extends Injectable<unknown, unknown, unknown>>( | ||
inject<TInjectable extends NormalInjectable<unknown, unknown>>( | ||
injectableKey: TInjectable, | ||
@@ -113,14 +149,2 @@ ...instantiationParameter: TentativeTuple< | ||
export function getInjectable< | ||
TInjectionToken extends InjectionToken<TInstance, TInstantiationParameter>, | ||
TInstance = TInjectionToken extends InjectionToken<any, any> | ||
? InferFromToken<TInjectionToken>[0] | ||
: unknown, | ||
TInstantiationParameter = TInjectionToken extends InjectionToken<any, any> | ||
? InferFromToken<TInjectionToken>[1] | ||
: unknown, | ||
>( | ||
options: Injectable<TInjectionToken, TInstance, TInstantiationParameter>, | ||
): Injectable<TInjectionToken, TInstance, TInstantiationParameter>; | ||
export interface ILifecycle { | ||
@@ -130,2 +154,3 @@ getInstanceKey: (di: DiContainer, param: unknown) => string | number; | ||
// ASDs | ||
export const lifecycleEnum: { | ||
@@ -132,0 +157,0 @@ singleton: ILifecycle; |
{ | ||
"name": "@ogre-tools/injectable", | ||
"private": false, | ||
"version": "5.0.0", | ||
"version": "5.0.1", | ||
"description": "A brutal dependency injection container", | ||
@@ -19,3 +19,3 @@ "repository": { | ||
"dependencies": { | ||
"@ogre-tools/fp": "^5.0.0", | ||
"@ogre-tools/fp": "^5.0.1", | ||
"lodash": "^4.17.21" | ||
@@ -26,3 +26,3 @@ }, | ||
}, | ||
"gitHead": "593e872fc518904cabde92410a21605ce1792b8f", | ||
"gitHead": "5e4de86e2f77a9b9a159192959741bc308751027", | ||
"bugs": { | ||
@@ -29,0 +29,0 @@ "url": "https://github.com/ogre-works/ogre-tools/issues" |
123269
1446
Updated@ogre-tools/fp@^5.0.1