@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.
Files changed (120) hide show
  1. package/README.md +211 -1
  2. package/coverage/clover.xml +1912 -1277
  3. package/coverage/coverage-final.json +37 -28
  4. package/coverage/docs/examples/basic-usage.mts.html +1 -1
  5. package/coverage/docs/examples/factory-pattern.mts.html +1 -1
  6. package/coverage/docs/examples/index.html +1 -1
  7. package/coverage/docs/examples/injection-tokens.mts.html +1 -1
  8. package/coverage/docs/examples/request-scope-example.mts.html +1 -1
  9. package/coverage/docs/examples/service-lifecycle.mts.html +1 -1
  10. package/coverage/index.html +71 -41
  11. package/coverage/lib/_tsup-dts-rollup.d.mts.html +682 -43
  12. package/coverage/lib/index.d.mts.html +7 -4
  13. package/coverage/lib/index.html +5 -5
  14. package/coverage/lib/testing/index.d.mts.html +91 -0
  15. package/coverage/lib/testing/index.html +116 -0
  16. package/coverage/src/base-instance-holder-manager.mts.html +589 -0
  17. package/coverage/src/container.mts.html +257 -74
  18. package/coverage/src/decorators/factory.decorator.mts.html +1 -1
  19. package/coverage/src/decorators/index.html +1 -1
  20. package/coverage/src/decorators/index.mts.html +1 -1
  21. package/coverage/src/decorators/injectable.decorator.mts.html +20 -20
  22. package/coverage/src/enums/index.html +1 -1
  23. package/coverage/src/enums/index.mts.html +1 -1
  24. package/coverage/src/enums/injectable-scope.enum.mts.html +1 -1
  25. package/coverage/src/enums/injectable-type.enum.mts.html +1 -1
  26. package/coverage/src/errors/di-error.mts.html +292 -0
  27. package/coverage/src/errors/errors.enum.mts.html +30 -21
  28. package/coverage/src/errors/factory-not-found.mts.html +31 -22
  29. package/coverage/src/errors/factory-token-not-resolved.mts.html +29 -26
  30. package/coverage/src/errors/index.html +56 -41
  31. package/coverage/src/errors/index.mts.html +15 -9
  32. package/coverage/src/errors/instance-destroying.mts.html +31 -22
  33. package/coverage/src/errors/instance-expired.mts.html +31 -22
  34. package/coverage/src/errors/instance-not-found.mts.html +31 -22
  35. package/coverage/src/errors/unknown-error.mts.html +31 -43
  36. package/coverage/src/event-emitter.mts.html +14 -14
  37. package/coverage/src/factory-context.mts.html +1 -1
  38. package/coverage/src/index.html +121 -46
  39. package/coverage/src/index.mts.html +7 -4
  40. package/coverage/src/injection-token.mts.html +28 -28
  41. package/coverage/src/injector.mts.html +1 -1
  42. package/coverage/src/instance-resolver.mts.html +1762 -0
  43. package/coverage/src/interfaces/factory.interface.mts.html +1 -1
  44. package/coverage/src/interfaces/index.html +1 -1
  45. package/coverage/src/interfaces/index.mts.html +1 -1
  46. package/coverage/src/interfaces/on-service-destroy.interface.mts.html +1 -1
  47. package/coverage/src/interfaces/on-service-init.interface.mts.html +1 -1
  48. package/coverage/src/registry.mts.html +28 -28
  49. package/coverage/src/request-context-holder.mts.html +183 -102
  50. package/coverage/src/request-context-manager.mts.html +532 -0
  51. package/coverage/src/service-instantiator.mts.html +49 -49
  52. package/coverage/src/service-invalidator.mts.html +1372 -0
  53. package/coverage/src/service-locator-event-bus.mts.html +48 -48
  54. package/coverage/src/service-locator-instance-holder.mts.html +2 -14
  55. package/coverage/src/service-locator-manager.mts.html +71 -335
  56. package/coverage/src/service-locator.mts.html +240 -2328
  57. package/coverage/src/symbols/index.html +1 -1
  58. package/coverage/src/symbols/index.mts.html +1 -1
  59. package/coverage/src/symbols/injectable-token.mts.html +1 -1
  60. package/coverage/src/testing/index.html +131 -0
  61. package/coverage/src/testing/index.mts.html +88 -0
  62. package/coverage/src/testing/test-container.mts.html +445 -0
  63. package/coverage/src/token-processor.mts.html +607 -0
  64. package/coverage/src/utils/defer.mts.html +28 -214
  65. package/coverage/src/utils/get-injectable-token.mts.html +7 -7
  66. package/coverage/src/utils/get-injectors.mts.html +99 -99
  67. package/coverage/src/utils/index.html +15 -15
  68. package/coverage/src/utils/index.mts.html +4 -7
  69. package/coverage/src/utils/types.mts.html +1 -1
  70. package/docs/injectable.md +51 -11
  71. package/docs/scopes.md +63 -29
  72. package/lib/_tsup-dts-rollup.d.mts +376 -213
  73. package/lib/_tsup-dts-rollup.d.ts +376 -213
  74. package/lib/{chunk-3NLYPYBY.mjs → chunk-44F3LXW5.mjs} +1021 -605
  75. package/lib/chunk-44F3LXW5.mjs.map +1 -0
  76. package/lib/index.d.mts +6 -4
  77. package/lib/index.d.ts +6 -4
  78. package/lib/index.js +1192 -776
  79. package/lib/index.js.map +1 -1
  80. package/lib/index.mjs +2 -2
  81. package/lib/testing/index.js +1258 -840
  82. package/lib/testing/index.js.map +1 -1
  83. package/lib/testing/index.mjs +1 -1
  84. package/package.json +1 -1
  85. package/src/__tests__/container.spec.mts +47 -13
  86. package/src/__tests__/errors.spec.mts +53 -27
  87. package/src/__tests__/injectable.spec.mts +73 -0
  88. package/src/__tests__/request-scope.spec.mts +0 -2
  89. package/src/__tests__/service-locator-manager.spec.mts +12 -82
  90. package/src/__tests__/service-locator.spec.mts +1009 -1
  91. package/src/__type-tests__/inject.spec-d.mts +30 -7
  92. package/src/__type-tests__/injectable.spec-d.mts +76 -37
  93. package/src/base-instance-holder-manager.mts +2 -9
  94. package/src/container.mts +61 -9
  95. package/src/decorators/injectable.decorator.mts +29 -5
  96. package/src/errors/di-error.mts +69 -0
  97. package/src/errors/index.mts +9 -7
  98. package/src/injection-token.mts +1 -0
  99. package/src/injector.mts +2 -0
  100. package/src/instance-resolver.mts +559 -0
  101. package/src/request-context-holder.mts +0 -2
  102. package/src/request-context-manager.mts +149 -0
  103. package/src/service-invalidator.mts +429 -0
  104. package/src/service-locator-instance-holder.mts +0 -4
  105. package/src/service-locator-manager.mts +10 -40
  106. package/src/service-locator.mts +86 -782
  107. package/src/token-processor.mts +174 -0
  108. package/src/utils/get-injectors.mts +161 -24
  109. package/src/utils/index.mts +0 -1
  110. package/src/utils/types.mts +12 -8
  111. package/lib/chunk-3NLYPYBY.mjs.map +0 -1
  112. package/src/__tests__/defer.spec.mts +0 -166
  113. package/src/errors/errors.enum.mts +0 -8
  114. package/src/errors/factory-not-found.mts +0 -8
  115. package/src/errors/factory-token-not-resolved.mts +0 -10
  116. package/src/errors/instance-destroying.mts +0 -8
  117. package/src/errors/instance-expired.mts +0 -8
  118. package/src/errors/instance-not-found.mts +0 -8
  119. package/src/errors/unknown-error.mts +0 -15
  120. 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
- | [InstanceExpired | InstanceDestroying, ServiceLocatorInstanceHolder]
23
- | [InstanceNotFound]
17
+ | [DIError, ServiceLocatorInstanceHolder]
18
+ | [DIError]
24
19
  | [undefined, ServiceLocatorInstanceHolder] {
25
20
  const holder = this._holders.get(name)
26
21
  if (holder) {
27
- if (holder.ttl !== Infinity) {
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 [new InstanceDestroying(holder.name), holder]
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 InstanceNotFound, holder]
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 [new InstanceNotFound(name)]
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