##// END OF EJS Templates
Corrected method signatures
cin -
r6:5683fe88e2a5 default
parent child
Show More
@@ -15,7 +15,7 export class ContainerBuilder<S extends
15 15 this._services = Object.create(parentServices ? parentServices : null) as object;
16 16 }
17 17
18 createServiceBuilder<K extends keyof S>(name: K): IDescriptorBuilder<S, NonNullable<S[K]>, object> {
18 createServiceBuilder<K extends keyof S>(name: K): IDescriptorBuilder<ContainerServices<S>, NonNullable<S[K]>, object, keyof S> {
19 19 return new DescriptorBuilder(this._lifetimeManager, this._register(name), this._fail);
20 20 }
21 21
@@ -8,7 +8,7 import { each, isKey, isPromise, isStrin
8 8 * @template {S} ΠšΠ°Ρ€Ρ‚Π° доступных зависимостСй, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ `ContainerServices`
9 9 * @template {T} Π’ΠΈΠΏ сСрвиса
10 10 */
11 export class DescriptorBuilder<S extends object, T, R extends object = object> implements IDescriptorBuilder<S, T, R> {
11 export class DescriptorBuilder<S extends object, T, R extends object, O extends keyof S> implements IDescriptorBuilder<S, T, R, O> {
12 12 private readonly _lifetimeManager: LifetimeManager;
13 13 private readonly _cb: (d: Descriptor<S, T>) => void;
14 14
@@ -51,7 +51,7 export class DescriptorBuilder<S extends
51 51 X[k] extends keyof S ? NonNullable<S[X[k]]> :
52 52 X[k] extends Ref<infer K, infer L, infer D> ? Resolved<S, K & keyof S, L, D> :
53 53 never;
54 }> {
54 }, O> {
55 55
56 56 each(refs, (v, k) => this._refs[k] = v);
57 57
@@ -60,7 +60,7 export class DescriptorBuilder<S extends
60 60 X[k] extends keyof S ? NonNullable<S[X[k]]> :
61 61 X[k] extends Ref<infer K, infer L, infer D> ? Resolved<S, K & keyof S, L, D> :
62 62 never;
63 }>;
63 }, O>;
64 64 }
65 65 factory(f: (refs: R) => T): void {
66 66 this._assertBuilding();
@@ -79,9 +79,9 export class DescriptorBuilder<S extends
79 79 this._finalized = true;
80 80 }
81 81
82 override<K extends ConfigurableKeys<S>>(name: K, builder: RegistrationBuilder<S, NonNullable<S[K]>>): this;
83 override<K extends ConfigurableKeys<S>>(services: { [k in K]: RegistrationBuilder<S, NonNullable<S[k]>> }): this;
84 override<K extends ConfigurableKeys<S>>(nameOrServices: K | { [name in K]: RegistrationBuilder<S, NonNullable<S[K]>> }, builder?: RegistrationBuilder<S, NonNullable<S[K]>>): this {
82 override<K extends O>(name: K, builder: RegistrationBuilder<S, NonNullable<S[K]>>): this;
83 override<K extends O>(services: { [k in K]: RegistrationBuilder<S, NonNullable<S[k]>> }): this;
84 override<K extends O>(nameOrServices: K | { [name in K]: RegistrationBuilder<S, NonNullable<S[K]>> }, builder?: RegistrationBuilder<S, NonNullable<S[K]>>): this {
85 85 this._assertBuilding();
86 86 const guard = (v: void | Promise<void>) => {
87 87 if (isPromise(v))
@@ -91,7 +91,7 export class DescriptorBuilder<S extends
91 91 if (isKey(nameOrServices)) {
92 92 if (builder) {
93 93 this._defer();
94 const d = new DescriptorBuilder<S, NonNullable<S[K]>>(
94 const d = new DescriptorBuilder<S, NonNullable<S[K]>, object, O>(
95 95 this._lifetimeManager,
96 96 result => {
97 97 this._overrides[nameOrServices] = result;
@@ -1,8 +1,7
1 import { Descriptor, ILifetime, ConfigurableKeys, DepsMap, Ref, IActivationContext } from "./interfaces";
2 import { ActivationContext } from "./ActivationContext";
1 import { Descriptor, ILifetime, DepsMap, Ref, IActivationContext } from "./interfaces";
3 2 import { each, isKey, key } from "./traits";
4 3
5 export type RegistrationOverridesMap<S extends object> = { [k in ConfigurableKeys<S>]?: Descriptor<S, NonNullable<S[k]>> };
4 export type RegistrationOverridesMap<S extends object> = { [k in keyof S]?: Descriptor<S, NonNullable<S[k]>> };
6 5
7 6 export interface DescriptorImplArgs<S extends object, T> {
8 7 lifetime: ILifetime<T>;
@@ -1,4 +1,3
1 import { ActivationContext } from "./ActivationContext";
2 1 import { key } from "./traits";
3 2
4 3 export interface IDestroyable {
@@ -35,7 +34,7 export type Ref<K extends key, L extends
35 34 export type Resolved<S, K extends keyof S, L, D> =
36 35 L extends true ? () => NonNullable<S[K]> | (unknown extends D ? never : D) : NonNullable<S[K]> | (unknown extends D ? never : D);
37 36
38 export interface IDescriptorBuilder<S extends object, T, R extends object = object> {
37 export interface IDescriptorBuilder<S extends object, T, R extends object, O extends keyof S> {
39 38
40 39 /**
41 40 *
@@ -49,10 +48,10 export interface IDescriptorBuilder<S ex
49 48 X[k] extends keyof S ? NonNullable<S[X[k]]> :
50 49 X[k] extends Ref<infer K, infer L, infer D> ? Resolved<S, K & keyof S, L, D> :
51 50 never
52 }>
51 }, O>
53 52
54 override<K extends ConfigurableKeys<S>>(name: K, builder: RegistrationBuilder<S, NonNullable<S[K]>>): this;
55 override<K extends ConfigurableKeys<S>>(services: { [name in K]: RegistrationBuilder<S, NonNullable<S[K]>> }): this;
53 override<K extends O>(name: K, builder: RegistrationBuilder<S, NonNullable<S[K]>>): this;
54 override<K extends O>(services: { [name in K]: RegistrationBuilder<S, NonNullable<S[K]>> }): this;
56 55
57 56 lifetime(lifetime: "singleton", typeId: string | number | object): this;
58 57 lifetime(lifetime: ILifetime<T> | Exclude<ActivationType, "singleton">): this;
@@ -62,9 +61,9 export interface IDescriptorBuilder<S ex
62 61 value(v: T): void;
63 62 }
64 63
65 export type RegistrationBuilder<S extends object, T> = (d: IDescriptorBuilder<S, T>) => void;
64 export type RegistrationBuilder<S extends object, T> = (d: IDescriptorBuilder<S, T, object, ConfigurableKeys<S>>) => void;
66 65
67 export type RegistrationBuildersMap<S extends object, K extends ConfigurableKeys<S> = ConfigurableKeys<S>> = {
66 export type RegistrationBuildersMap<S extends Configurable<S>, K extends keyof S = keyof S> = {
68 67 [k in K]-?: RegistrationBuilder<ContainerServices<S>, NonNullable<S[k]>>
69 68 };
70 69
@@ -78,8 +77,6 export interface IActivationContext<S ex
78 77 createContainerLifetime<T>(): ILifetime<T>;
79 78 }
80 79
81 export type ConfigurableDescriptor<S extends object, K extends ConfigurableKeys<S>> = Descriptor<ContainerServices<S>, S[K]>;
82
83 80 export type RegistrationMap<S extends object, K extends keyof S = keyof S> = {
84 81 [k in K]-?: Descriptor<S, S[k]>;
85 82 };
@@ -119,7 +116,7 export interface ServiceContainer<S exte
119 116 }
120 117
121 118 export interface IContainerBuilder<S extends Configurable<S>> {
122 createServiceBuilder<K extends keyof S>(name: K): IDescriptorBuilder<S, NonNullable<S[K]>>;
119 createServiceBuilder<K extends keyof S>(name: K): IDescriptorBuilder<S, NonNullable<S[K]>, object, keyof S>;
123 120
124 121 build(): ServiceContainer<S>;
125 122 }
General Comments 0
You need to be logged in to leave comments. Login now