@navios/di 0.1.11 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/concepts/injectable.md +182 -0
- package/docs/concepts/injection-token.md +145 -0
- package/lib/_tsup-dts-rollup.d.mts +9 -9
- package/lib/_tsup-dts-rollup.d.ts +9 -9
- package/lib/index.js +37 -104
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +4 -46
- package/lib/index.mjs.map +1 -1
- package/package.json +4 -4
- package/src/__type-tests__/injectable.spec-d.mts +255 -0
- package/src/decorators/injectable.decorator.mts +15 -12
- package/tsup.config.mts +1 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# @Injectable decorator
|
|
2
|
+
|
|
3
|
+
The `@Injectable` decorator is used to define a class or a factory class as an injectable service.
|
|
4
|
+
|
|
5
|
+
## Parameters
|
|
6
|
+
|
|
7
|
+
The `@Injectable` decorator accepts the following fields in its options:
|
|
8
|
+
|
|
9
|
+
- `token`: The injection token to use for the service. If not provided, will create a new token using the class itself.
|
|
10
|
+
- `scope`: The lifetime of the service. Accepts `InjectableScope.Singleton` or `InjectableScope.Instance`. By default, it will be `InjectableScope.Singleton`.
|
|
11
|
+
- `type`: The type of the service. Accepts `InjectableType.Class` or `InjectableType.Factory`. By default, it will be `InjectableType.Class`.
|
|
12
|
+
- `registry`: The registry to use for the service. Uses the default registry if not provided.
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
Injectable can be used as a class decorator or a factory decorator.
|
|
17
|
+
|
|
18
|
+
Inside a class that you're decorating with `@Injectable` you can use `inject` and `syncInject` functions to inject the services.
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
@Injectable()
|
|
22
|
+
class GreeterService {
|
|
23
|
+
sayHello(name: string) {
|
|
24
|
+
return `Hello ${name}`
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@Injectable()
|
|
29
|
+
class UserService {
|
|
30
|
+
private readonly greeterService = syncInject(GreeterService)
|
|
31
|
+
|
|
32
|
+
makeGreeting(name: string) {
|
|
33
|
+
return this.greeterService.sayHello(name)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Please note that `syncInject` can be used only with services that are created with `InjectableScope.Singleton`.
|
|
39
|
+
|
|
40
|
+
If you need to inject a service that is created with `InjectableScope.Instance`, you can use `inject` function. and it will return a Promise.
|
|
41
|
+
|
|
42
|
+
For example:
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
@Injectable({ scope: InjectableScope.Instance })
|
|
46
|
+
class GreeterService {
|
|
47
|
+
private readonly createdAt = new Date()
|
|
48
|
+
|
|
49
|
+
sayHello(name: string) {
|
|
50
|
+
return `Hello ${name} ${this.createdAt.toISOString()}`
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@Injectable()
|
|
55
|
+
class UserService {
|
|
56
|
+
private readonly greeterService = inject(GreeterService)
|
|
57
|
+
|
|
58
|
+
async makeGreeting(name: string) {
|
|
59
|
+
const service = await this.greeterService
|
|
60
|
+
return service.sayHello(name)
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Examples
|
|
66
|
+
|
|
67
|
+
### Simple class
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
@Injectable()
|
|
71
|
+
class GreeterService {
|
|
72
|
+
sayHello(name: string) {
|
|
73
|
+
return `Hello ${name}`
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const greeterService = await inject(GreeterService)
|
|
78
|
+
console.log(greeterService.sayHello('John'))
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Simple Factory
|
|
82
|
+
|
|
83
|
+
```ts
|
|
84
|
+
@Injectable({ type: InjectableType.Factory })
|
|
85
|
+
class GreeterServiceFactory {
|
|
86
|
+
create() {
|
|
87
|
+
return new GreeterService()
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const greeterService = await inject(GreeterServiceFactory)
|
|
92
|
+
console.log(greeterService.sayHello('John'))
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Class with token
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
export interface GreeterServiceInterface {
|
|
99
|
+
sayHello(name: string): string
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const GreeterServiceParams = z.object({
|
|
103
|
+
context: z.string(),
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
export const GREETER_SERVICE = InjectionToken.create<
|
|
107
|
+
GreeterServiceInterface,
|
|
108
|
+
typeof GreeterServiceParams
|
|
109
|
+
>('GreeterService', GreeterServiceParams)
|
|
110
|
+
|
|
111
|
+
@Injectable({ token: GREETER_SERVICE })
|
|
112
|
+
class GreeterService {
|
|
113
|
+
constructor(private readonly config: z.infer<typeof GreeterServiceParams>) {}
|
|
114
|
+
|
|
115
|
+
sayHello(name: string) {
|
|
116
|
+
return `Hello ${name} ${this.config.context}`
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const greeterService = await inject(GREETER_SERVICE, { context: 'World' })
|
|
121
|
+
console.log(greeterService.sayHello('John'))
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Factory with token
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
export interface GreeterServiceInterface {
|
|
128
|
+
sayHello(name: string): string
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const GreeterServiceParams = z.object({
|
|
132
|
+
context: z.string(),
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
export const GREETER_SERVICE = InjectionToken.create<
|
|
136
|
+
GreeterServiceInterface,
|
|
137
|
+
typeof GreeterServiceParams
|
|
138
|
+
>('GreeterService', GreeterServiceParams)
|
|
139
|
+
|
|
140
|
+
@Injectable({ type: InjectableType.Factory, token: GREETER_SERVICE })
|
|
141
|
+
class GreeterServiceFactory {
|
|
142
|
+
create(ctx: FactoryContext, args: z.infer<typeof GreeterServiceParams>) {
|
|
143
|
+
return new GreeterService(args)
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const greeterService = await inject(GREETER_SERVICE, { context: 'World' })
|
|
148
|
+
console.log(greeterService.sayHello('John'))
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## InjectableScope
|
|
152
|
+
|
|
153
|
+
The `InjectableScope` enum defines the scope of the service.
|
|
154
|
+
|
|
155
|
+
- `InjectableScope.Singleton`: The service will be created once and reused.
|
|
156
|
+
- `InjectableScope.Instance`: The service will be created every time it is injected.
|
|
157
|
+
|
|
158
|
+
## InjectableType
|
|
159
|
+
|
|
160
|
+
The `InjectableType` enum defines the type of the service.
|
|
161
|
+
|
|
162
|
+
- `InjectableType.Class`: The service will be a class.
|
|
163
|
+
- `InjectableType.Factory`: The service will be a factory.
|
|
164
|
+
|
|
165
|
+
## Registry
|
|
166
|
+
|
|
167
|
+
The `Registry` is the registry of the service. It is used to store the service and its dependencies.
|
|
168
|
+
|
|
169
|
+
## FactoryContext
|
|
170
|
+
|
|
171
|
+
The `FactoryContext` is the context of the factory. It is used to add additional information to the factory.
|
|
172
|
+
|
|
173
|
+
Context API:
|
|
174
|
+
|
|
175
|
+
- `inject`: Injects the service, same as global inject, but additionally it will track the dependencies of the service.
|
|
176
|
+
- `on`: Adds a listener to the service locator event bus.
|
|
177
|
+
- `getDependencies`: Returns the dependencies of the service.
|
|
178
|
+
- `invalidate`: Invalidates self and all the services that depend on it.
|
|
179
|
+
- `addEffect`: Adds an effect to the service. Effect is a function that will be called when the service is invalidated.
|
|
180
|
+
- `setTtl`: Sets the ttl of the service.
|
|
181
|
+
- `getTtl`: Returns the ttl of the service.
|
|
182
|
+
- `locator`: Returns the service locator you are currently in.
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# Injection Token
|
|
2
|
+
|
|
3
|
+
Injection tokens are used to identify and retrieve services from the dependency injection container. They are typically defined as constants and used to inject services into classes.
|
|
4
|
+
|
|
5
|
+
## Creating an Injection Token
|
|
6
|
+
|
|
7
|
+
To create an injection token, you can use the `InjectionToken` class from the `@navios/di` or `@navios/core` package. Here's an example:
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
import { InjectionToken } from '@navios/di'
|
|
11
|
+
|
|
12
|
+
export const GREETER_SERVICE =
|
|
13
|
+
InjectionToken.create<GreeterService>('GreeterService')
|
|
14
|
+
|
|
15
|
+
@Injectable({ token: GREETER_SERVICE })
|
|
16
|
+
class GreeterService {}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Using an Injection Token
|
|
20
|
+
|
|
21
|
+
To use an injection token, you can inject it into a class or a function.
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import { inject } from '@navios/di'
|
|
25
|
+
|
|
26
|
+
const greeterService = await inject(GREETER_SERVICE)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
or
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
@Injectable()
|
|
33
|
+
class UserService {
|
|
34
|
+
private readonly greeterService = inject(GREETER_SERVICE) // This will be a Promise<GreeterService>
|
|
35
|
+
private readonly greeterServiceSync = syncInject(GREETER_SERVICE) // This will be a GreeterService
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Adding a parameter to the injection token
|
|
40
|
+
|
|
41
|
+
You can add a parameter to the injection token to make it more specific.
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
import { z } from 'zod'
|
|
45
|
+
|
|
46
|
+
const GreeterServiceParams = z.object({
|
|
47
|
+
context: z.string(),
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
export const GREETER_SERVICE = InjectionToken.create<
|
|
51
|
+
GreeterService,
|
|
52
|
+
typeof GreeterServiceParams
|
|
53
|
+
>('GreeterService', GreeterServiceParams)
|
|
54
|
+
|
|
55
|
+
@Injectable({ token: GREETER_SERVICE })
|
|
56
|
+
class GreeterService {}
|
|
57
|
+
|
|
58
|
+
const greeterService = await inject(GREETER_SERVICE, { context: 'Hello' })
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Providing a value to an injection token
|
|
62
|
+
|
|
63
|
+
You can provide a value to an injection token by using the `bound` function.
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
import { inject, InjectionToken } from '@navios/di'
|
|
67
|
+
|
|
68
|
+
const helloGreeterService = InjectionToken.bound(GREETER_SERVICE, {
|
|
69
|
+
context: 'Hello',
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
const greeterService = await inject(helloGreeterService)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Providing a factory to an injection token
|
|
76
|
+
|
|
77
|
+
You can provide a factory to an injection token by using the `factory` function.
|
|
78
|
+
|
|
79
|
+
It is useful, when you need to bind a value to a result of another service (e.g. a configuration).
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
import { inject, InjectionToken } from '@navios/di'
|
|
83
|
+
|
|
84
|
+
@Injectable()
|
|
85
|
+
class GreeterConfigService {
|
|
86
|
+
getContext() {
|
|
87
|
+
return 'Hello'
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const helloGreeterService = InjectionToken.factory(
|
|
91
|
+
GREETER_SERVICE,
|
|
92
|
+
async () => {
|
|
93
|
+
const config = await inject(GreeterConfigService)
|
|
94
|
+
return { context: config.getContext() }
|
|
95
|
+
},
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
const greeterService = await inject(helloGreeterService)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## API
|
|
102
|
+
|
|
103
|
+
### `InjectionToken.create`
|
|
104
|
+
|
|
105
|
+
Creates a new injection token.
|
|
106
|
+
|
|
107
|
+
Generic arguments:
|
|
108
|
+
|
|
109
|
+
- `T`: The type of the value to bind to the injection token.
|
|
110
|
+
- `P`: Zod schema type of the parameters of the injection token.
|
|
111
|
+
|
|
112
|
+
Arguments:
|
|
113
|
+
|
|
114
|
+
- `name: string | Class | symbol`: The name of the injection token.
|
|
115
|
+
- `params: ZodSchema | undefined`: The parameters of the injection token.
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
|
|
119
|
+
- `InjectionToken`: The new injection token.
|
|
120
|
+
|
|
121
|
+
### `InjectionToken.bound`
|
|
122
|
+
|
|
123
|
+
Creates a new injection token that is bound to a value.
|
|
124
|
+
|
|
125
|
+
Arguments:
|
|
126
|
+
|
|
127
|
+
- `token: InjectionToken`: The injection token to bind.
|
|
128
|
+
- `value: any`: The value to bind to the injection token.
|
|
129
|
+
|
|
130
|
+
Returns:
|
|
131
|
+
|
|
132
|
+
- `BoundInjectionToken`: The new injection token.
|
|
133
|
+
|
|
134
|
+
### `InjectionToken.factory`
|
|
135
|
+
|
|
136
|
+
Creates a new injection token that is a factory.
|
|
137
|
+
|
|
138
|
+
Arguments:
|
|
139
|
+
|
|
140
|
+
- `token: InjectionToken`: The injection token to bind.
|
|
141
|
+
- `factory: () => Promise<any>`: The factory to bind to the injection token.
|
|
142
|
+
|
|
143
|
+
Returns:
|
|
144
|
+
|
|
145
|
+
- `FactoryInjectionToken`: The new injection token.
|
|
@@ -194,17 +194,17 @@ declare const inject: Injectors['inject'];
|
|
|
194
194
|
export { inject }
|
|
195
195
|
export { inject as inject_alias_1 }
|
|
196
196
|
|
|
197
|
-
declare function Injectable(): <T extends ClassType>(target: T, context
|
|
197
|
+
declare function Injectable(): <T extends ClassType>(target: T, context?: ClassDecoratorContext) => T;
|
|
198
198
|
|
|
199
199
|
declare function Injectable(options: {
|
|
200
200
|
registry: Registry;
|
|
201
|
-
}): <T extends ClassType>(target: T, context
|
|
201
|
+
}): <T extends ClassType>(target: T, context?: ClassDecoratorContext) => T;
|
|
202
202
|
|
|
203
203
|
declare function Injectable<R>(options: {
|
|
204
204
|
scope?: InjectableScope;
|
|
205
205
|
type: InjectableType.Factory;
|
|
206
206
|
registry?: Registry;
|
|
207
|
-
}): <T extends ClassTypeWithInstance<Factory<R>>>(target: T, context
|
|
207
|
+
}): <T extends ClassTypeWithInstance<Factory<R>>>(target: T, context?: ClassDecoratorContext) => T;
|
|
208
208
|
|
|
209
209
|
declare function Injectable<Type, Schema>(options: {
|
|
210
210
|
scope?: InjectableScope;
|
|
@@ -212,10 +212,10 @@ declare function Injectable<Type, Schema>(options: {
|
|
|
212
212
|
token: InjectionToken<Type, Schema>;
|
|
213
213
|
registry?: Registry;
|
|
214
214
|
}): Schema extends BaseInjectionTokenSchemaType ? Type extends undefined ? <T extends ClassTypeWithArgument<z.output<Schema>>>(// #3.1.1 Typeless token
|
|
215
|
-
target: T, context
|
|
216
|
-
target: T, context
|
|
217
|
-
target: T, context
|
|
218
|
-
target: R, context
|
|
215
|
+
target: T, context?: ClassDecoratorContext) => T : <T extends ClassTypeWithInstanceAndArgument<Type, z.output<Schema>>>(// #3.1.2 Typed token
|
|
216
|
+
target: T, context?: ClassDecoratorContext) => T : Schema extends OptionalInjectionTokenSchemaType ? Type extends undefined ? <T extends ClassTypeWithOptionalArgument<z.output<Schema>>>(// #3.2.1 Typeless token
|
|
217
|
+
target: T, context?: ClassDecoratorContext) => T : <T extends ClassTypeWithInstanceAndOptionalArgument<Type, z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T : Schema extends undefined ? <R extends ClassTypeWithInstance<Type>>(// #3.3.1 Token must have a type
|
|
218
|
+
target: R, context?: ClassDecoratorContext) => R : never;
|
|
219
219
|
|
|
220
220
|
declare function Injectable<R, S>(options: {
|
|
221
221
|
scope?: InjectableScope;
|
|
@@ -223,8 +223,8 @@ declare function Injectable<R, S>(options: {
|
|
|
223
223
|
token: InjectionToken<R, S>;
|
|
224
224
|
registry?: Registry;
|
|
225
225
|
}): R extends undefined ? never : S extends InjectionTokenSchemaType ? <T extends ClassTypeWithInstance<FactoryWithArgs<R, S>>>(// #4.2.1 Token have a schema
|
|
226
|
-
target: T, context
|
|
227
|
-
target: T, context
|
|
226
|
+
target: T, context?: ClassDecoratorContext) => T : S extends undefined ? <T extends ClassTypeWithInstance<Factory<R>>>(// #4.3.1 Token without a schema
|
|
227
|
+
target: T, context?: ClassDecoratorContext) => T : never;
|
|
228
228
|
export { Injectable }
|
|
229
229
|
export { Injectable as Injectable_alias_1 }
|
|
230
230
|
export { Injectable as Injectable_alias_2 }
|
|
@@ -194,17 +194,17 @@ declare const inject: Injectors['inject'];
|
|
|
194
194
|
export { inject }
|
|
195
195
|
export { inject as inject_alias_1 }
|
|
196
196
|
|
|
197
|
-
declare function Injectable(): <T extends ClassType>(target: T, context
|
|
197
|
+
declare function Injectable(): <T extends ClassType>(target: T, context?: ClassDecoratorContext) => T;
|
|
198
198
|
|
|
199
199
|
declare function Injectable(options: {
|
|
200
200
|
registry: Registry;
|
|
201
|
-
}): <T extends ClassType>(target: T, context
|
|
201
|
+
}): <T extends ClassType>(target: T, context?: ClassDecoratorContext) => T;
|
|
202
202
|
|
|
203
203
|
declare function Injectable<R>(options: {
|
|
204
204
|
scope?: InjectableScope;
|
|
205
205
|
type: InjectableType.Factory;
|
|
206
206
|
registry?: Registry;
|
|
207
|
-
}): <T extends ClassTypeWithInstance<Factory<R>>>(target: T, context
|
|
207
|
+
}): <T extends ClassTypeWithInstance<Factory<R>>>(target: T, context?: ClassDecoratorContext) => T;
|
|
208
208
|
|
|
209
209
|
declare function Injectable<Type, Schema>(options: {
|
|
210
210
|
scope?: InjectableScope;
|
|
@@ -212,10 +212,10 @@ declare function Injectable<Type, Schema>(options: {
|
|
|
212
212
|
token: InjectionToken<Type, Schema>;
|
|
213
213
|
registry?: Registry;
|
|
214
214
|
}): Schema extends BaseInjectionTokenSchemaType ? Type extends undefined ? <T extends ClassTypeWithArgument<z.output<Schema>>>(// #3.1.1 Typeless token
|
|
215
|
-
target: T, context
|
|
216
|
-
target: T, context
|
|
217
|
-
target: T, context
|
|
218
|
-
target: R, context
|
|
215
|
+
target: T, context?: ClassDecoratorContext) => T : <T extends ClassTypeWithInstanceAndArgument<Type, z.output<Schema>>>(// #3.1.2 Typed token
|
|
216
|
+
target: T, context?: ClassDecoratorContext) => T : Schema extends OptionalInjectionTokenSchemaType ? Type extends undefined ? <T extends ClassTypeWithOptionalArgument<z.output<Schema>>>(// #3.2.1 Typeless token
|
|
217
|
+
target: T, context?: ClassDecoratorContext) => T : <T extends ClassTypeWithInstanceAndOptionalArgument<Type, z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T : Schema extends undefined ? <R extends ClassTypeWithInstance<Type>>(// #3.3.1 Token must have a type
|
|
218
|
+
target: R, context?: ClassDecoratorContext) => R : never;
|
|
219
219
|
|
|
220
220
|
declare function Injectable<R, S>(options: {
|
|
221
221
|
scope?: InjectableScope;
|
|
@@ -223,8 +223,8 @@ declare function Injectable<R, S>(options: {
|
|
|
223
223
|
token: InjectionToken<R, S>;
|
|
224
224
|
registry?: Registry;
|
|
225
225
|
}): R extends undefined ? never : S extends InjectionTokenSchemaType ? <T extends ClassTypeWithInstance<FactoryWithArgs<R, S>>>(// #4.2.1 Token have a schema
|
|
226
|
-
target: T, context
|
|
227
|
-
target: T, context
|
|
226
|
+
target: T, context?: ClassDecoratorContext) => T : S extends undefined ? <T extends ClassTypeWithInstance<Factory<R>>>(// #4.3.1 Token without a schema
|
|
227
|
+
target: T, context?: ClassDecoratorContext) => T : never;
|
|
228
228
|
export { Injectable }
|
|
229
229
|
export { Injectable as Injectable_alias_1 }
|
|
230
230
|
export { Injectable as Injectable_alias_2 }
|
package/lib/index.js
CHANGED
|
@@ -1,63 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/index.mts
|
|
21
|
-
var index_exports = {};
|
|
22
|
-
__export(index_exports, {
|
|
23
|
-
BoundInjectionToken: () => BoundInjectionToken,
|
|
24
|
-
ErrorsEnum: () => ErrorsEnum,
|
|
25
|
-
EventEmitter: () => EventEmitter,
|
|
26
|
-
FactoryInjectionToken: () => FactoryInjectionToken,
|
|
27
|
-
FactoryNotFound: () => FactoryNotFound,
|
|
28
|
-
FactoryTokenNotResolved: () => FactoryTokenNotResolved,
|
|
29
|
-
Injectable: () => Injectable,
|
|
30
|
-
InjectableScope: () => InjectableScope,
|
|
31
|
-
InjectableTokenMeta: () => InjectableTokenMeta,
|
|
32
|
-
InjectableType: () => InjectableType,
|
|
33
|
-
InjectionToken: () => InjectionToken,
|
|
34
|
-
InjectorsBase: () => InjectorsBase,
|
|
35
|
-
InstanceDestroying: () => InstanceDestroying,
|
|
36
|
-
InstanceExpired: () => InstanceExpired,
|
|
37
|
-
InstanceNotFound: () => InstanceNotFound,
|
|
38
|
-
ProxyServiceLocator: () => ProxyServiceLocator,
|
|
39
|
-
Registry: () => Registry,
|
|
40
|
-
ServiceLocator: () => ServiceLocator,
|
|
41
|
-
ServiceLocatorEventBus: () => ServiceLocatorEventBus,
|
|
42
|
-
ServiceLocatorInstanceHolderKind: () => ServiceLocatorInstanceHolderKind,
|
|
43
|
-
ServiceLocatorInstanceHolderStatus: () => ServiceLocatorInstanceHolderStatus,
|
|
44
|
-
ServiceLocatorManager: () => ServiceLocatorManager,
|
|
45
|
-
UnknownError: () => UnknownError,
|
|
46
|
-
getGlobalServiceLocator: () => getGlobalServiceLocator,
|
|
47
|
-
getInjectableToken: () => getInjectableToken,
|
|
48
|
-
getInjectors: () => getInjectors,
|
|
49
|
-
globalRegistry: () => globalRegistry,
|
|
50
|
-
inject: () => inject,
|
|
51
|
-
makeProxyServiceLocator: () => makeProxyServiceLocator,
|
|
52
|
-
provideServiceLocator: () => provideServiceLocator,
|
|
53
|
-
resolveService: () => resolveService,
|
|
54
|
-
syncInject: () => syncInject,
|
|
55
|
-
wrapSyncInit: () => wrapSyncInit
|
|
56
|
-
});
|
|
57
|
-
module.exports = __toCommonJS(index_exports);
|
|
1
|
+
'use strict';
|
|
58
2
|
|
|
59
3
|
// src/decorators/injectable.decorator.mts
|
|
60
|
-
var import_zod3 = require("zod");
|
|
61
4
|
|
|
62
5
|
// src/enums/injectable-scope.enum.mts
|
|
63
6
|
var InjectableScope = /* @__PURE__ */ ((InjectableScope3) => {
|
|
@@ -72,9 +15,6 @@ var InjectableType = /* @__PURE__ */ ((InjectableType2) => {
|
|
|
72
15
|
InjectableType2["Factory"] = "Factory";
|
|
73
16
|
return InjectableType2;
|
|
74
17
|
})(InjectableType || {});
|
|
75
|
-
|
|
76
|
-
// src/injection-token.mts
|
|
77
|
-
var import_zod = require("zod");
|
|
78
18
|
var InjectionToken = class _InjectionToken {
|
|
79
19
|
constructor(name, schema) {
|
|
80
20
|
this.name = name;
|
|
@@ -149,9 +89,6 @@ var FactoryInjectionToken = class {
|
|
|
149
89
|
return this.token.toString();
|
|
150
90
|
}
|
|
151
91
|
};
|
|
152
|
-
|
|
153
|
-
// src/registry.mts
|
|
154
|
-
var import_zod2 = require("zod");
|
|
155
92
|
var Registry = class {
|
|
156
93
|
constructor(parent) {
|
|
157
94
|
this.parent = parent;
|
|
@@ -349,7 +286,7 @@ function Injectable({
|
|
|
349
286
|
registry = globalRegistry
|
|
350
287
|
} = {}) {
|
|
351
288
|
return (target, context) => {
|
|
352
|
-
if (context.kind !== "class") {
|
|
289
|
+
if (context && context.kind !== "class" || target instanceof Function && !context) {
|
|
353
290
|
throw new Error(
|
|
354
291
|
"[ServiceLocator] @Injectable decorator can only be used on classes."
|
|
355
292
|
);
|
|
@@ -450,9 +387,6 @@ var UnknownError = class extends Error {
|
|
|
450
387
|
}
|
|
451
388
|
};
|
|
452
389
|
|
|
453
|
-
// src/interfaces/factory.interface.mts
|
|
454
|
-
var import_zod4 = require("zod");
|
|
455
|
-
|
|
456
390
|
// src/event-emitter.mts
|
|
457
391
|
var EventEmitter = class {
|
|
458
392
|
listeners = /* @__PURE__ */ new Map();
|
|
@@ -988,40 +922,39 @@ var inject = values.inject;
|
|
|
988
922
|
var syncInject = values.syncInject;
|
|
989
923
|
var wrapSyncInit = values.wrapSyncInit;
|
|
990
924
|
var provideServiceLocator = values.provideServiceLocator;
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
});
|
|
925
|
+
|
|
926
|
+
exports.BoundInjectionToken = BoundInjectionToken;
|
|
927
|
+
exports.ErrorsEnum = ErrorsEnum;
|
|
928
|
+
exports.EventEmitter = EventEmitter;
|
|
929
|
+
exports.FactoryInjectionToken = FactoryInjectionToken;
|
|
930
|
+
exports.FactoryNotFound = FactoryNotFound;
|
|
931
|
+
exports.FactoryTokenNotResolved = FactoryTokenNotResolved;
|
|
932
|
+
exports.Injectable = Injectable;
|
|
933
|
+
exports.InjectableScope = InjectableScope;
|
|
934
|
+
exports.InjectableTokenMeta = InjectableTokenMeta;
|
|
935
|
+
exports.InjectableType = InjectableType;
|
|
936
|
+
exports.InjectionToken = InjectionToken;
|
|
937
|
+
exports.InjectorsBase = InjectorsBase;
|
|
938
|
+
exports.InstanceDestroying = InstanceDestroying;
|
|
939
|
+
exports.InstanceExpired = InstanceExpired;
|
|
940
|
+
exports.InstanceNotFound = InstanceNotFound;
|
|
941
|
+
exports.ProxyServiceLocator = ProxyServiceLocator;
|
|
942
|
+
exports.Registry = Registry;
|
|
943
|
+
exports.ServiceLocator = ServiceLocator;
|
|
944
|
+
exports.ServiceLocatorEventBus = ServiceLocatorEventBus;
|
|
945
|
+
exports.ServiceLocatorInstanceHolderKind = ServiceLocatorInstanceHolderKind;
|
|
946
|
+
exports.ServiceLocatorInstanceHolderStatus = ServiceLocatorInstanceHolderStatus;
|
|
947
|
+
exports.ServiceLocatorManager = ServiceLocatorManager;
|
|
948
|
+
exports.UnknownError = UnknownError;
|
|
949
|
+
exports.getGlobalServiceLocator = getGlobalServiceLocator;
|
|
950
|
+
exports.getInjectableToken = getInjectableToken;
|
|
951
|
+
exports.getInjectors = getInjectors;
|
|
952
|
+
exports.globalRegistry = globalRegistry;
|
|
953
|
+
exports.inject = inject;
|
|
954
|
+
exports.makeProxyServiceLocator = makeProxyServiceLocator;
|
|
955
|
+
exports.provideServiceLocator = provideServiceLocator;
|
|
956
|
+
exports.resolveService = resolveService;
|
|
957
|
+
exports.syncInject = syncInject;
|
|
958
|
+
exports.wrapSyncInit = wrapSyncInit;
|
|
959
|
+
//# sourceMappingURL=index.js.map
|
|
1027
960
|
//# sourceMappingURL=index.js.map
|