@navios/di 0.4.2 → 0.5.0
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/README.md +211 -1
- package/coverage/clover.xml +1912 -1277
- package/coverage/coverage-final.json +37 -28
- package/coverage/docs/examples/basic-usage.mts.html +1 -1
- package/coverage/docs/examples/factory-pattern.mts.html +1 -1
- package/coverage/docs/examples/index.html +1 -1
- package/coverage/docs/examples/injection-tokens.mts.html +1 -1
- package/coverage/docs/examples/request-scope-example.mts.html +1 -1
- package/coverage/docs/examples/service-lifecycle.mts.html +1 -1
- package/coverage/index.html +71 -41
- package/coverage/lib/_tsup-dts-rollup.d.mts.html +682 -43
- package/coverage/lib/index.d.mts.html +7 -4
- package/coverage/lib/index.html +5 -5
- package/coverage/lib/testing/index.d.mts.html +91 -0
- package/coverage/lib/testing/index.html +116 -0
- package/coverage/src/base-instance-holder-manager.mts.html +589 -0
- package/coverage/src/container.mts.html +257 -74
- package/coverage/src/decorators/factory.decorator.mts.html +1 -1
- package/coverage/src/decorators/index.html +1 -1
- package/coverage/src/decorators/index.mts.html +1 -1
- package/coverage/src/decorators/injectable.decorator.mts.html +20 -20
- package/coverage/src/enums/index.html +1 -1
- package/coverage/src/enums/index.mts.html +1 -1
- package/coverage/src/enums/injectable-scope.enum.mts.html +1 -1
- package/coverage/src/enums/injectable-type.enum.mts.html +1 -1
- package/coverage/src/errors/di-error.mts.html +292 -0
- package/coverage/src/errors/errors.enum.mts.html +30 -21
- package/coverage/src/errors/factory-not-found.mts.html +31 -22
- package/coverage/src/errors/factory-token-not-resolved.mts.html +29 -26
- package/coverage/src/errors/index.html +56 -41
- package/coverage/src/errors/index.mts.html +15 -9
- package/coverage/src/errors/instance-destroying.mts.html +31 -22
- package/coverage/src/errors/instance-expired.mts.html +31 -22
- package/coverage/src/errors/instance-not-found.mts.html +31 -22
- package/coverage/src/errors/unknown-error.mts.html +31 -43
- package/coverage/src/event-emitter.mts.html +14 -14
- package/coverage/src/factory-context.mts.html +1 -1
- package/coverage/src/index.html +121 -46
- package/coverage/src/index.mts.html +7 -4
- package/coverage/src/injection-token.mts.html +28 -28
- package/coverage/src/injector.mts.html +1 -1
- package/coverage/src/instance-resolver.mts.html +1762 -0
- package/coverage/src/interfaces/factory.interface.mts.html +1 -1
- package/coverage/src/interfaces/index.html +1 -1
- package/coverage/src/interfaces/index.mts.html +1 -1
- package/coverage/src/interfaces/on-service-destroy.interface.mts.html +1 -1
- package/coverage/src/interfaces/on-service-init.interface.mts.html +1 -1
- package/coverage/src/registry.mts.html +28 -28
- package/coverage/src/request-context-holder.mts.html +183 -102
- package/coverage/src/request-context-manager.mts.html +532 -0
- package/coverage/src/service-instantiator.mts.html +49 -49
- package/coverage/src/service-invalidator.mts.html +1372 -0
- package/coverage/src/service-locator-event-bus.mts.html +48 -48
- package/coverage/src/service-locator-instance-holder.mts.html +2 -14
- package/coverage/src/service-locator-manager.mts.html +71 -335
- package/coverage/src/service-locator.mts.html +240 -2328
- package/coverage/src/symbols/index.html +1 -1
- package/coverage/src/symbols/index.mts.html +1 -1
- package/coverage/src/symbols/injectable-token.mts.html +1 -1
- package/coverage/src/testing/index.html +131 -0
- package/coverage/src/testing/index.mts.html +88 -0
- package/coverage/src/testing/test-container.mts.html +445 -0
- package/coverage/src/token-processor.mts.html +607 -0
- package/coverage/src/utils/defer.mts.html +28 -214
- package/coverage/src/utils/get-injectable-token.mts.html +7 -7
- package/coverage/src/utils/get-injectors.mts.html +99 -99
- package/coverage/src/utils/index.html +15 -15
- package/coverage/src/utils/index.mts.html +4 -7
- package/coverage/src/utils/types.mts.html +1 -1
- package/docs/injectable.md +51 -11
- package/docs/scopes.md +63 -29
- package/lib/_tsup-dts-rollup.d.mts +376 -213
- package/lib/_tsup-dts-rollup.d.ts +376 -213
- package/lib/{chunk-3NLYPYBY.mjs → chunk-44F3LXW5.mjs} +1021 -605
- package/lib/chunk-44F3LXW5.mjs.map +1 -0
- package/lib/index.d.mts +6 -4
- package/lib/index.d.ts +6 -4
- package/lib/index.js +1192 -776
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +2 -2
- package/lib/testing/index.js +1258 -840
- package/lib/testing/index.js.map +1 -1
- package/lib/testing/index.mjs +1 -1
- package/package.json +1 -1
- package/src/__tests__/container.spec.mts +47 -13
- package/src/__tests__/errors.spec.mts +53 -27
- package/src/__tests__/injectable.spec.mts +73 -0
- package/src/__tests__/request-scope.spec.mts +0 -2
- package/src/__tests__/service-locator-manager.spec.mts +12 -82
- package/src/__tests__/service-locator.spec.mts +1009 -1
- package/src/__type-tests__/inject.spec-d.mts +30 -7
- package/src/__type-tests__/injectable.spec-d.mts +76 -37
- package/src/base-instance-holder-manager.mts +2 -9
- package/src/container.mts +61 -9
- package/src/decorators/injectable.decorator.mts +29 -5
- package/src/errors/di-error.mts +69 -0
- package/src/errors/index.mts +9 -7
- package/src/injection-token.mts +1 -0
- package/src/injector.mts +2 -0
- package/src/instance-resolver.mts +559 -0
- package/src/request-context-holder.mts +0 -2
- package/src/request-context-manager.mts +149 -0
- package/src/service-invalidator.mts +429 -0
- package/src/service-locator-instance-holder.mts +0 -4
- package/src/service-locator-manager.mts +10 -40
- package/src/service-locator.mts +86 -782
- package/src/token-processor.mts +174 -0
- package/src/utils/get-injectors.mts +161 -24
- package/src/utils/index.mts +0 -1
- package/src/utils/types.mts +12 -8
- package/lib/chunk-3NLYPYBY.mjs.map +0 -1
- package/src/__tests__/defer.spec.mts +0 -166
- package/src/errors/errors.enum.mts +0 -8
- package/src/errors/factory-not-found.mts +0 -8
- package/src/errors/factory-token-not-resolved.mts +0 -10
- package/src/errors/instance-destroying.mts +0 -8
- package/src/errors/instance-expired.mts +0 -8
- package/src/errors/instance-not-found.mts +0 -8
- package/src/errors/unknown-error.mts +0 -15
- package/src/utils/defer.mts +0 -73
|
@@ -3,12 +3,7 @@ import type { ServiceLocatorInstanceHolder } from './service-locator-instance-ho
|
|
|
3
3
|
|
|
4
4
|
import { BaseInstanceHolderManager } from './base-instance-holder-manager.mjs'
|
|
5
5
|
import { InjectableScope, InjectableType } from './enums/index.mjs'
|
|
6
|
-
import {
|
|
7
|
-
ErrorsEnum,
|
|
8
|
-
InstanceDestroying,
|
|
9
|
-
InstanceExpired,
|
|
10
|
-
InstanceNotFound,
|
|
11
|
-
} from './errors/index.mjs'
|
|
6
|
+
import { DIError, DIErrorCode } from './errors/index.mjs'
|
|
12
7
|
import { ServiceLocatorInstanceHolderStatus } from './service-locator-instance-holder.mjs'
|
|
13
8
|
|
|
14
9
|
export class ServiceLocatorManager extends BaseInstanceHolderManager {
|
|
@@ -19,31 +14,21 @@ export class ServiceLocatorManager extends BaseInstanceHolderManager {
|
|
|
19
14
|
get(
|
|
20
15
|
name: string,
|
|
21
16
|
):
|
|
22
|
-
| [
|
|
23
|
-
| [
|
|
17
|
+
| [DIError, ServiceLocatorInstanceHolder]
|
|
18
|
+
| [DIError]
|
|
24
19
|
| [undefined, ServiceLocatorInstanceHolder] {
|
|
25
20
|
const holder = this._holders.get(name)
|
|
26
21
|
if (holder) {
|
|
27
|
-
if (holder.
|
|
28
|
-
const now = Date.now()
|
|
29
|
-
if (now - holder.createdAt > holder.ttl) {
|
|
30
|
-
this.logger?.log(
|
|
31
|
-
`[ServiceLocatorManager]#getInstanceHolder() TTL expired for ${holder.name}`,
|
|
32
|
-
)
|
|
33
|
-
return [new InstanceExpired(holder.name), holder]
|
|
34
|
-
}
|
|
35
|
-
} else if (
|
|
36
|
-
holder.status === ServiceLocatorInstanceHolderStatus.Destroying
|
|
37
|
-
) {
|
|
22
|
+
if (holder.status === ServiceLocatorInstanceHolderStatus.Destroying) {
|
|
38
23
|
this.logger?.log(
|
|
39
24
|
`[ServiceLocatorManager]#getInstanceHolder() Instance ${holder.name} is destroying`,
|
|
40
25
|
)
|
|
41
|
-
return [
|
|
26
|
+
return [DIError.instanceDestroying(holder.name), holder]
|
|
42
27
|
} else if (holder.status === ServiceLocatorInstanceHolderStatus.Error) {
|
|
43
28
|
this.logger?.log(
|
|
44
29
|
`[ServiceLocatorManager]#getInstanceHolder() Instance ${holder.name} is in error state`,
|
|
45
30
|
)
|
|
46
|
-
return [holder.instance as
|
|
31
|
+
return [holder.instance as DIError, holder]
|
|
47
32
|
}
|
|
48
33
|
|
|
49
34
|
return [undefined, holder]
|
|
@@ -51,7 +36,7 @@ export class ServiceLocatorManager extends BaseInstanceHolderManager {
|
|
|
51
36
|
this.logger?.log(
|
|
52
37
|
`[ServiceLocatorManager]#getInstanceHolder() Instance ${name} not found`,
|
|
53
38
|
)
|
|
54
|
-
return [
|
|
39
|
+
return [DIError.instanceNotFound(name)]
|
|
55
40
|
}
|
|
56
41
|
}
|
|
57
42
|
|
|
@@ -59,18 +44,12 @@ export class ServiceLocatorManager extends BaseInstanceHolderManager {
|
|
|
59
44
|
this._holders.set(name, holder)
|
|
60
45
|
}
|
|
61
46
|
|
|
62
|
-
has(
|
|
63
|
-
name: string,
|
|
64
|
-
): [InstanceExpired | InstanceDestroying] | [undefined, boolean] {
|
|
47
|
+
has(name: string): [DIError] | [undefined, boolean] {
|
|
65
48
|
const [error, holder] = this.get(name)
|
|
66
49
|
if (!error) {
|
|
67
50
|
return [undefined, true]
|
|
68
51
|
}
|
|
69
|
-
if (
|
|
70
|
-
[ErrorsEnum.InstanceExpired, ErrorsEnum.InstanceDestroying].includes(
|
|
71
|
-
error.code,
|
|
72
|
-
)
|
|
73
|
-
) {
|
|
52
|
+
if (error.code === DIErrorCode.InstanceDestroying) {
|
|
74
53
|
return [error]
|
|
75
54
|
}
|
|
76
55
|
return [undefined, !!holder]
|
|
@@ -88,7 +67,6 @@ export class ServiceLocatorManager extends BaseInstanceHolderManager {
|
|
|
88
67
|
* @param type The injectable type
|
|
89
68
|
* @param scope The injectable scope
|
|
90
69
|
* @param deps Optional set of dependencies
|
|
91
|
-
* @param ttl Optional time-to-live in milliseconds (defaults to Infinity)
|
|
92
70
|
* @returns The created holder
|
|
93
71
|
*/
|
|
94
72
|
storeCreatedHolder<Instance>(
|
|
@@ -97,16 +75,8 @@ export class ServiceLocatorManager extends BaseInstanceHolderManager {
|
|
|
97
75
|
type: InjectableType,
|
|
98
76
|
scope: InjectableScope,
|
|
99
77
|
deps: Set<string> = new Set(),
|
|
100
|
-
ttl: number = Infinity,
|
|
101
78
|
): ServiceLocatorInstanceHolder<Instance> {
|
|
102
|
-
const holder = this.createCreatedHolder(
|
|
103
|
-
name,
|
|
104
|
-
instance,
|
|
105
|
-
type,
|
|
106
|
-
scope,
|
|
107
|
-
deps,
|
|
108
|
-
ttl,
|
|
109
|
-
)
|
|
79
|
+
const holder = this.createCreatedHolder(name, instance, type, scope, deps)
|
|
110
80
|
|
|
111
81
|
this._holders.set(name, holder)
|
|
112
82
|
|