@navios/di 0.4.1 → 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 +447 -212
- package/lib/_tsup-dts-rollup.d.ts +447 -212
- package/lib/chunk-44F3LXW5.mjs +2043 -0
- 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 +1199 -773
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +4 -1599
- package/lib/index.mjs.map +1 -1
- package/lib/testing/index.d.mts +2 -0
- package/lib/testing/index.d.ts +2 -0
- package/lib/testing/index.js +2060 -0
- package/lib/testing/index.js.map +1 -0
- package/lib/testing/index.mjs +73 -0
- package/lib/testing/index.mjs.map +1 -0
- package/package.json +11 -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 +70 -10
- 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/testing/README.md +80 -0
- package/src/testing/__tests__/test-container.spec.mts +173 -0
- package/src/testing/index.mts +1 -0
- package/src/testing/test-container.mts +120 -0
- 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/tsup.config.mts +1 -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
|
|