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