exisjs 0.7.9 → 0.7.11

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 (140) hide show
  1. package/dist/cli/commands/dev.d.ts.map +1 -1
  2. package/dist/cli/commands/dev.js +8 -1
  3. package/dist/cli/commands/dev.js.map +1 -1
  4. package/dist/config/config.d.ts +2 -1
  5. package/dist/config/config.d.ts.map +1 -1
  6. package/dist/config/config.js +1 -1
  7. package/dist/config/config.js.map +1 -1
  8. package/dist/config/types.d.ts +7 -0
  9. package/dist/config/types.d.ts.map +1 -1
  10. package/dist/database/lifecycle.d.ts +2 -1
  11. package/dist/database/lifecycle.d.ts.map +1 -1
  12. package/dist/database/lifecycle.js +6 -2
  13. package/dist/database/lifecycle.js.map +1 -1
  14. package/dist/decorators/constants.d.ts +2 -0
  15. package/dist/decorators/constants.d.ts.map +1 -1
  16. package/dist/decorators/constants.js +3 -1
  17. package/dist/decorators/constants.js.map +1 -1
  18. package/dist/decorators/core.d.ts +14 -0
  19. package/dist/decorators/core.d.ts.map +1 -1
  20. package/dist/decorators/core.js +156 -41
  21. package/dist/decorators/core.js.map +1 -1
  22. package/dist/decorators/filters.d.ts +2 -10
  23. package/dist/decorators/filters.d.ts.map +1 -1
  24. package/dist/decorators/filters.js.map +1 -1
  25. package/dist/decorators/index.d.ts +1 -0
  26. package/dist/decorators/index.d.ts.map +1 -1
  27. package/dist/decorators/index.js +1 -0
  28. package/dist/decorators/index.js.map +1 -1
  29. package/dist/decorators/lifecycle.d.ts +29 -0
  30. package/dist/decorators/lifecycle.d.ts.map +1 -1
  31. package/dist/decorators/params.d.ts +3 -7
  32. package/dist/decorators/params.d.ts.map +1 -1
  33. package/dist/decorators/params.js.map +1 -1
  34. package/dist/decorators/pipes.d.ts +91 -0
  35. package/dist/decorators/pipes.d.ts.map +1 -0
  36. package/dist/decorators/pipes.js +283 -0
  37. package/dist/decorators/pipes.js.map +1 -0
  38. package/dist/di/container.d.ts +8 -4
  39. package/dist/di/container.d.ts.map +1 -1
  40. package/dist/di/container.js +186 -68
  41. package/dist/di/container.js.map +1 -1
  42. package/dist/di/decorators.d.ts +23 -5
  43. package/dist/di/decorators.d.ts.map +1 -1
  44. package/dist/di/decorators.js +83 -20
  45. package/dist/di/decorators.js.map +1 -1
  46. package/dist/di/forward-ref.d.ts +23 -0
  47. package/dist/di/forward-ref.d.ts.map +1 -0
  48. package/dist/di/forward-ref.js +30 -0
  49. package/dist/di/forward-ref.js.map +1 -0
  50. package/dist/di/index.d.ts +3 -2
  51. package/dist/di/index.d.ts.map +1 -1
  52. package/dist/di/index.js +8 -1
  53. package/dist/di/index.js.map +1 -1
  54. package/dist/docs/BENCHMARKS.md +5 -5
  55. package/dist/docs/content/config.mdx +16 -6
  56. package/dist/docs/content/controllers.mdx +230 -0
  57. package/dist/docs/content/errors.mdx +16 -9
  58. package/dist/docs/content/modules.mdx +23 -4
  59. package/dist/docs/content/providers.mdx +42 -6
  60. package/dist/docs/content/requests.mdx +9 -3
  61. package/dist/docs/content/responses.mdx +19 -5
  62. package/dist/docs/content/security.mdx +48 -35
  63. package/dist/docs/content/structure.mdx +119 -93
  64. package/dist/docs/reference/config.mdx +29 -18
  65. package/dist/docs/reference/decorators.mdx +15 -4
  66. package/dist/docs/reference/di.mdx +23 -16
  67. package/dist/docs/reference/router.mdx +75 -0
  68. package/dist/docs/reference/validator.mdx +2 -2
  69. package/dist/error/errors.d.ts.map +1 -1
  70. package/dist/error/errors.js +12 -0
  71. package/dist/error/errors.js.map +1 -1
  72. package/dist/middleware/security.d.ts +18 -0
  73. package/dist/middleware/security.d.ts.map +1 -1
  74. package/dist/middleware/security.js +32 -0
  75. package/dist/middleware/security.js.map +1 -1
  76. package/dist/router/controller-registrar.d.ts.map +1 -1
  77. package/dist/router/controller-registrar.js +142 -87
  78. package/dist/router/controller-registrar.js.map +1 -1
  79. package/dist/router/index.d.ts.map +1 -1
  80. package/dist/router/index.js.map +1 -1
  81. package/dist/router/radix.d.ts +1 -0
  82. package/dist/router/radix.d.ts.map +1 -1
  83. package/dist/router/radix.js +21 -0
  84. package/dist/router/radix.js.map +1 -1
  85. package/dist/router/route-builder.d.ts +160 -29
  86. package/dist/router/route-builder.d.ts.map +1 -1
  87. package/dist/router/route-builder.js +105 -31
  88. package/dist/router/route-builder.js.map +1 -1
  89. package/dist/router/route-scanner.d.ts +3 -2
  90. package/dist/router/route-scanner.d.ts.map +1 -1
  91. package/dist/router/route-scanner.js.map +1 -1
  92. package/dist/router/router.d.ts.map +1 -1
  93. package/dist/router/router.js +44 -0
  94. package/dist/router/router.js.map +1 -1
  95. package/dist/router/scanner/functional-compiler.d.ts +1 -1
  96. package/dist/router/scanner/functional-compiler.d.ts.map +1 -1
  97. package/dist/router/scanner/functional-compiler.js +403 -64
  98. package/dist/router/scanner/functional-compiler.js.map +1 -1
  99. package/dist/router/types.d.ts +4 -2
  100. package/dist/router/types.d.ts.map +1 -1
  101. package/dist/server/adapters/uws-adapter.d.ts +17 -0
  102. package/dist/server/adapters/uws-adapter.d.ts.map +1 -1
  103. package/dist/server/adapters/uws-adapter.js +101 -7
  104. package/dist/server/adapters/uws-adapter.js.map +1 -1
  105. package/dist/server/app.d.ts +2 -0
  106. package/dist/server/app.d.ts.map +1 -1
  107. package/dist/server/app.js +38 -0
  108. package/dist/server/app.js.map +1 -1
  109. package/dist/server/helpers/etag.d.ts +1 -0
  110. package/dist/server/helpers/etag.d.ts.map +1 -1
  111. package/dist/server/helpers/etag.js +168 -9
  112. package/dist/server/helpers/etag.js.map +1 -1
  113. package/dist/server/helpers/ip.d.ts.map +1 -1
  114. package/dist/server/helpers/ip.js +75 -17
  115. package/dist/server/helpers/ip.js.map +1 -1
  116. package/dist/server/request-handler.d.ts.map +1 -1
  117. package/dist/server/request-handler.js +35 -19
  118. package/dist/server/request-handler.js.map +1 -1
  119. package/dist/server/request.d.ts +4 -3
  120. package/dist/server/request.d.ts.map +1 -1
  121. package/dist/server/request.js +26 -8
  122. package/dist/server/request.js.map +1 -1
  123. package/dist/server/response.d.ts +1 -0
  124. package/dist/server/response.d.ts.map +1 -1
  125. package/dist/server/response.js +48 -22
  126. package/dist/server/response.js.map +1 -1
  127. package/dist/swagger/generator.d.ts.map +1 -1
  128. package/dist/swagger/generator.js +66 -22
  129. package/dist/swagger/generator.js.map +1 -1
  130. package/dist/testing/client.d.ts +15 -11
  131. package/dist/testing/client.d.ts.map +1 -1
  132. package/dist/testing/client.js +32 -11
  133. package/dist/testing/client.js.map +1 -1
  134. package/dist/utils/logger.d.ts.map +1 -1
  135. package/dist/utils/logger.js +2 -0
  136. package/dist/utils/logger.js.map +1 -1
  137. package/dist/validator/engine.d.ts.map +1 -1
  138. package/dist/validator/engine.js +45 -0
  139. package/dist/validator/engine.js.map +1 -1
  140. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/di/container.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAC/B,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;AAE/C,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,CAAA;CAC9C;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,YAAY;IACpD,QAAQ,EAAE,CAAC,CAAA;CACZ;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,CAAE,SAAQ,YAAY;IACtD,UAAU,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,YAAY;IACpD,QAAQ,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;CACpC;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAC9B,aAAa,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAE9D,eAAO,MAAM,eAAe,eAAqC,CAAA;AACjE,eAAO,MAAM,iBAAiB,eAAuC,CAAA;AACrE,eAAO,MAAM,cAAc,eAA6B,CAAA;AAExD,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,cAAc,CAAgC;IAEtD,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI;IAK1E,UAAU,IAAI,IAAI;IAIlB,gBAAgB,CAAC,CAAC,EAChB,WAAW,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EACtC,YAAY,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,GACrC,CAAC;IAmDJ,OAAO,CAAC,CAAC,EACP,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,YAAY,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,GACrC,CAAC;IAmGS,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB9B,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAe9D"}
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/di/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEnE,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAC/B,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;AAErE,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,CAAA;CAC9C;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,YAAY;IACpD,QAAQ,EAAE,CAAC,CAAA;CACZ;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,CAAE,SAAQ,YAAY;IACtD,UAAU,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,YAAY;IACpD,QAAQ,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;CACpC;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;AAEjE,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAC5B,aAAa,CAAC,CAAC,CAAC,GAChB,eAAe,CAAC,CAAC,CAAC,GAClB,aAAa,CAAC,CAAC,CAAC,GAChB,gBAAgB,CAAC,CAAC,CAAC,GACnB,CAAC,CAAA;AAEL,eAAO,MAAM,eAAe,eAAqC,CAAA;AACjE,eAAO,MAAM,wBAAwB,eAEpC,CAAA;AACD,eAAO,MAAM,iBAAiB,eAAuC,CAAA;AACrE,eAAO,MAAM,cAAc,eAA6B,CAAA;AAExD,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,QAAQ,CAAiB;IAEjC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI;IAM1E,UAAU,IAAI,IAAI;IAKlB,gBAAgB,CAAC,CAAC,EAChB,WAAW,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EACtC,YAAY,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAC3B,CAAC;IAoJJ,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;IA0IvD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB9B,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAe9D"}
@@ -1,139 +1,257 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Container = exports.SCOPE_METADATA = exports.OPTIONAL_METADATA = exports.INJECT_METADATA = void 0;
3
+ exports.Container = exports.SCOPE_METADATA = exports.OPTIONAL_METADATA = exports.PROPERTY_INJECT_METADATA = exports.INJECT_METADATA = void 0;
4
+ const forward_ref_1 = require("./forward-ref");
4
5
  exports.INJECT_METADATA = Symbol.for('exisjs:inject_tokens');
6
+ exports.PROPERTY_INJECT_METADATA = Symbol.for('exisjs:property_inject_tokens');
5
7
  exports.OPTIONAL_METADATA = Symbol.for('exisjs:optional_tokens');
6
8
  exports.SCOPE_METADATA = Symbol.for('exisjs:scope');
7
9
  class Container {
8
10
  constructor() {
9
11
  this.providers = new Map();
10
12
  this.singletonCache = new Map();
13
+ this.inFlight = new Set();
11
14
  }
12
15
  provide(token, provider) {
13
- this.providers.set(token, provider);
14
- this.singletonCache.delete(token);
16
+ const unwrappedToken = (0, forward_ref_1.isForwardRef)(token) ? token.forwardRef() : token;
17
+ this.providers.set(unwrappedToken, provider);
18
+ this.singletonCache.delete(unwrappedToken);
15
19
  }
16
20
  clearCache() {
17
21
  this.singletonCache.clear();
22
+ this.inFlight.clear();
18
23
  }
19
24
  instantiateClass(TargetClass, requestCache) {
20
- const injectTokens = TargetClass[exports.INJECT_METADATA] ||
21
- (TargetClass.prototype &&
25
+ const injectTokens = {
26
+ ...((TargetClass.prototype &&
22
27
  TargetClass.prototype[exports.INJECT_METADATA]) ||
23
- {};
28
+ {}),
29
+ ...(TargetClass[exports.INJECT_METADATA] || {}),
30
+ };
24
31
  const optionalParams = TargetClass[exports.OPTIONAL_METADATA] ||
25
32
  (TargetClass.prototype &&
26
33
  TargetClass.prototype[exports.OPTIONAL_METADATA]) ||
27
34
  new Set();
28
- const maxIndex = Object.keys(injectTokens).reduce((max, curr) => Math.max(max, Number(curr)), -1);
29
- if (maxIndex === -1 && optionalParams.size === 0) {
30
- return new TargetClass();
31
- }
32
- const args = [];
33
- const totalParams = Math.max(maxIndex + 1, ...Array.from(optionalParams).map((idx) => idx + 1));
34
- for (let i = 0; i < totalParams; i++) {
35
- const token = injectTokens[i];
36
- const isOptional = optionalParams.has(i);
37
- if (token !== undefined) {
38
- try {
39
- args.push(this.resolve(token, requestCache));
35
+ // 1. Inspect reflected parameter types emitted by TypeScript (design:paramtypes)
36
+ const reflectParamTypes = (typeof globalThis.Reflect?.getMetadata === 'function'
37
+ ? globalThis.Reflect.getMetadata('design:paramtypes', TargetClass) ||
38
+ (TargetClass.prototype
39
+ ? globalThis.Reflect.getMetadata('design:paramtypes', TargetClass.prototype)
40
+ : undefined)
41
+ : undefined) ||
42
+ TargetClass['design:paramtypes'] ||
43
+ TargetClass.prototype?.['design:paramtypes'] ||
44
+ [];
45
+ // Merge reflected constructor parameters if not explicitly overridden by @Inject()
46
+ if (Array.isArray(reflectParamTypes) && reflectParamTypes.length > 0) {
47
+ for (let i = 0; i < reflectParamTypes.length; i++) {
48
+ const paramType = reflectParamTypes[i];
49
+ if (injectTokens[i] === undefined &&
50
+ typeof paramType === 'function' &&
51
+ paramType !== Object &&
52
+ paramType !== String &&
53
+ paramType !== Number &&
54
+ paramType !== Boolean &&
55
+ paramType !== Symbol &&
56
+ paramType !== Array &&
57
+ paramType !== Function) {
58
+ injectTokens[i] = paramType;
40
59
  }
41
- catch (err) {
42
- if (isOptional) {
60
+ }
61
+ }
62
+ const tokenIndices = Object.keys(injectTokens).map(Number);
63
+ const maxIndex = tokenIndices.length > 0 ? Math.max(...tokenIndices) : -1;
64
+ let instance;
65
+ if (maxIndex === -1 &&
66
+ optionalParams.size === 0 &&
67
+ (!TargetClass.length || TargetClass.length === 0)) {
68
+ instance = new TargetClass();
69
+ }
70
+ else {
71
+ const totalParams = Math.max(maxIndex + 1, TargetClass.length || 0, ...Array.from(optionalParams).map((idx) => idx + 1));
72
+ if (totalParams === 0) {
73
+ instance = new TargetClass();
74
+ }
75
+ else {
76
+ const args = [];
77
+ for (let i = 0; i < totalParams; i++) {
78
+ const token = injectTokens[i];
79
+ const isOptional = optionalParams.has(i);
80
+ if (token !== undefined) {
81
+ try {
82
+ args.push(this.resolve(token, requestCache));
83
+ }
84
+ catch (err) {
85
+ if (isOptional) {
86
+ args.push(undefined);
87
+ }
88
+ else {
89
+ throw err;
90
+ }
91
+ }
92
+ }
93
+ else if (isOptional) {
43
94
  args.push(undefined);
44
95
  }
45
96
  else {
46
- throw err;
97
+ args.push(undefined);
47
98
  }
48
99
  }
100
+ instance = new TargetClass(...args);
49
101
  }
50
- else if (isOptional) {
51
- args.push(undefined);
102
+ }
103
+ // 2. Perform property-level dependency injections across prototype hierarchy
104
+ if (TargetClass.prototype) {
105
+ const protoChain = [];
106
+ let curr = TargetClass.prototype;
107
+ while (curr && curr !== Object.prototype) {
108
+ protoChain.unshift(curr);
109
+ curr = Object.getPrototypeOf(curr);
52
110
  }
53
- else {
54
- args.push(undefined);
111
+ for (const p of protoChain) {
112
+ const propInjections = p[exports.PROPERTY_INJECT_METADATA] || [];
113
+ const optProps = p[exports.OPTIONAL_METADATA] || new Set();
114
+ for (const { propertyKey, token } of propInjections) {
115
+ let resolvedToken = token;
116
+ if (resolvedToken === undefined) {
117
+ const reflectedType = typeof globalThis.Reflect?.getMetadata === 'function'
118
+ ? globalThis.Reflect.getMetadata('design:type', p, propertyKey)
119
+ : undefined;
120
+ if (reflectedType)
121
+ resolvedToken = reflectedType;
122
+ }
123
+ if (resolvedToken !== undefined) {
124
+ try {
125
+ ;
126
+ instance[propertyKey] = this.resolve(resolvedToken, requestCache);
127
+ }
128
+ catch (err) {
129
+ if (optProps.has(propertyKey)) {
130
+ ;
131
+ instance[propertyKey] = undefined;
132
+ }
133
+ else {
134
+ throw err;
135
+ }
136
+ }
137
+ }
138
+ }
55
139
  }
56
140
  }
57
- return new TargetClass(...args);
141
+ return instance;
58
142
  }
59
143
  resolve(token, requestCache) {
144
+ const unwrappedToken = (0, forward_ref_1.isForwardRef)(token) ? token.forwardRef() : token;
60
145
  // 1. Check singleton cache
61
- if (this.singletonCache.has(token)) {
62
- return this.singletonCache.get(token);
146
+ if (this.singletonCache.has(unwrappedToken)) {
147
+ return this.singletonCache.get(unwrappedToken);
63
148
  }
64
149
  // 2. Check request cache
65
- if (requestCache && requestCache.has(token)) {
66
- return requestCache.get(token);
150
+ if (requestCache && requestCache.has(unwrappedToken)) {
151
+ return requestCache.get(unwrappedToken);
67
152
  }
68
- const provider = this.providers.get(token);
153
+ // 3. Circular Dependency Resolution: Return Lazy Proxy
154
+ if (this.inFlight.has(unwrappedToken)) {
155
+ return new Proxy({}, {
156
+ get: (_, prop) => {
157
+ const realInstance = this.singletonCache.get(unwrappedToken) ||
158
+ (requestCache && requestCache.get(unwrappedToken));
159
+ if (realInstance) {
160
+ const val = realInstance[prop];
161
+ return typeof val === 'function' ? val.bind(realInstance) : val;
162
+ }
163
+ return undefined;
164
+ },
165
+ set: (_, prop, value) => {
166
+ const realInstance = this.singletonCache.get(unwrappedToken) ||
167
+ (requestCache && requestCache.get(unwrappedToken));
168
+ if (realInstance) {
169
+ realInstance[prop] = value;
170
+ return true;
171
+ }
172
+ return false;
173
+ },
174
+ });
175
+ }
176
+ const provider = this.providers.get(unwrappedToken);
69
177
  if (provider === undefined) {
70
- if (typeof token === 'function') {
178
+ if (typeof unwrappedToken === 'function') {
179
+ this.inFlight.add(unwrappedToken);
71
180
  try {
72
- const scope = token.prototype?.[exports.SCOPE_METADATA] || 'singleton';
73
- const instance = this.instantiateClass(token, requestCache);
181
+ const scope = unwrappedToken.prototype?.[exports.SCOPE_METADATA] || 'singleton';
182
+ const instance = this.instantiateClass(unwrappedToken, requestCache);
74
183
  if (scope === 'transient') {
75
184
  return instance;
76
185
  }
77
186
  if (scope === 'request') {
78
187
  if (!requestCache) {
79
- throw new Error(`Cannot resolve request-scoped provider '${String(token)}' outside of a request context. This usually happens if you try to resolve a request-scoped dependency during app startup, inside a background job, or without passing the request context cache.`);
188
+ throw new Error(`Cannot resolve request-scoped provider '${String(unwrappedToken)}' outside of a request context. This usually happens if you try to resolve a request-scoped dependency during app startup, inside a background job, or without passing the request context cache.`);
80
189
  }
81
- requestCache.set(token, instance);
190
+ requestCache.set(unwrappedToken, instance);
82
191
  }
83
192
  else {
84
- this.singletonCache.set(token, instance);
193
+ this.singletonCache.set(unwrappedToken, instance);
85
194
  }
86
195
  return instance;
87
196
  }
88
197
  catch (err) {
89
198
  const innerMsg = err instanceof Error ? err.message : String(err);
90
- const error = new Error(`Cannot resolve provider for token: ${String(token)}. Inner error: ${innerMsg}`);
199
+ const error = new Error(`Cannot resolve provider for token: ${String(unwrappedToken)}. Inner error: ${innerMsg}`);
91
200
  error.cause = err;
92
201
  throw error;
93
202
  }
203
+ finally {
204
+ this.inFlight.delete(unwrappedToken);
205
+ }
94
206
  }
95
- throw new Error('Provider not found for token: ' + String(token));
207
+ throw new Error('Provider not found for token: ' + String(unwrappedToken));
96
208
  }
97
209
  let resolvedValue;
98
210
  let scope = 'singleton';
99
- if (typeof provider === 'function') {
100
- const classScope = provider.prototype?.[exports.SCOPE_METADATA] || 'singleton';
101
- scope = classScope;
102
- resolvedValue = this.instantiateClass(provider, requestCache);
103
- }
104
- else if (provider && typeof provider === 'object') {
105
- if ('scope' in provider && provider.scope) {
106
- scope = provider.scope;
211
+ this.inFlight.add(unwrappedToken);
212
+ try {
213
+ if (typeof provider === 'function') {
214
+ const classScope = provider.prototype?.[exports.SCOPE_METADATA] || 'singleton';
215
+ scope = classScope;
216
+ resolvedValue = this.instantiateClass(provider, requestCache);
107
217
  }
108
- if ('useValue' in provider) {
109
- resolvedValue = provider.useValue;
218
+ else if (provider && typeof provider === 'object') {
219
+ if ('scope' in provider && provider.scope) {
220
+ scope = provider.scope;
221
+ }
222
+ if ('useValue' in provider) {
223
+ resolvedValue = provider.useValue;
224
+ }
225
+ else if ('useFactory' in provider) {
226
+ resolvedValue = provider.useFactory();
227
+ }
228
+ else if ('useClass' in provider) {
229
+ resolvedValue = this.instantiateClass(provider.useClass, requestCache);
230
+ }
231
+ else {
232
+ resolvedValue = provider;
233
+ }
110
234
  }
111
- else if ('useFactory' in provider) {
112
- resolvedValue = provider.useFactory();
235
+ else {
236
+ resolvedValue = provider;
237
+ }
238
+ if (scope === 'transient') {
239
+ return resolvedValue;
113
240
  }
114
- else if ('useClass' in provider) {
115
- resolvedValue = this.instantiateClass(provider.useClass, requestCache);
241
+ if (scope === 'request') {
242
+ if (!requestCache) {
243
+ throw new Error(`Cannot resolve request-scoped provider '${String(unwrappedToken)}' outside of a request context. This usually happens if you try to resolve a request-scoped dependency during app startup, inside a background job, or without passing the request context cache.`);
244
+ }
245
+ requestCache.set(unwrappedToken, resolvedValue);
116
246
  }
117
247
  else {
118
- resolvedValue = provider;
248
+ this.singletonCache.set(unwrappedToken, resolvedValue);
119
249
  }
120
- }
121
- else {
122
- resolvedValue = provider;
123
- }
124
- if (scope === 'transient') {
125
250
  return resolvedValue;
126
251
  }
127
- if (scope === 'request') {
128
- if (!requestCache) {
129
- throw new Error(`Cannot resolve request-scoped provider '${String(token)}' outside of a request context. This usually happens if you try to resolve a request-scoped dependency during app startup, inside a background job, or without passing the request context cache.`);
130
- }
131
- requestCache.set(token, resolvedValue);
132
- }
133
- else {
134
- this.singletonCache.set(token, resolvedValue);
252
+ finally {
253
+ this.inFlight.delete(unwrappedToken);
135
254
  }
136
- return resolvedValue;
137
255
  }
138
256
  async initLifecycle() {
139
257
  for (const [, instance] of this.singletonCache) {
@@ -1 +1 @@
1
- {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/di/container.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/di/container.ts"],"names":[],"mappings":"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"}
@@ -1,30 +1,48 @@
1
1
  import { ProviderToken } from './container';
2
2
  /**
3
- * Parameter decorator that specifies a dependency token to inject into a class constructor.
3
+ * Parameter or Property decorator that specifies a dependency token to inject.
4
+ * When applied to a property without an explicit token, the dependency type is automatically
5
+ * inferred from TypeScript's emitted metadata (`design:type`).
4
6
  *
5
- * Example:
7
+ * Examples:
6
8
  * ```ts
9
+ * // 1. Constructor Parameter Injection
7
10
  * class UserService {
8
11
  * constructor(
9
12
  * @Inject('DATABASE_URL') private dbUrl: string,
10
13
  * @Inject(LoggerService) private logger: LoggerService
11
14
  * ) {}
12
15
  * }
16
+ *
17
+ * // 2. Property Injection
18
+ * class OrderService {
19
+ * @Inject()
20
+ * private logger!: LoggerService
21
+ *
22
+ * @Inject('CONFIG')
23
+ * private config!: AppConfig
24
+ * }
13
25
  * ```
14
26
  */
15
- export declare function Inject(token: ProviderToken): ParameterDecorator;
27
+ export declare function Inject(token?: ProviderToken): any;
16
28
  /**
17
- * Parameter decorator that marks a dependency as optional.
29
+ * Parameter or Property decorator that marks a dependency as optional.
18
30
  * If the dependency cannot be resolved, `undefined` is injected instead of throwing an error.
19
31
  *
20
32
  * Example:
21
33
  * ```ts
22
34
  * class NotificationService {
35
+ * // Constructor
23
36
  * constructor(
24
37
  * @Inject('SLACK_WEBHOOK') @Optional() private webhook?: string
25
38
  * ) {}
39
+ *
40
+ * // Property
41
+ * @Inject('METRICS')
42
+ * @Optional()
43
+ * private metrics?: MetricsService
26
44
  * }
27
45
  * ```
28
46
  */
29
- export declare function Optional(): ParameterDecorator;
47
+ export declare function Optional(): any;
30
48
  //# sourceMappingURL=decorators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/di/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,aAAa,EAAE,MAAM,aAAa,CAAA;AAE/E;;;;;;;;;;;;GAYG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,kBAAkB,CAmB/D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,IAAI,kBAAkB,CAkB7C"}
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/di/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,aAAa,EACd,MAAM,aAAa,CAAA;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,GAAG,CAwEjD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,QAAQ,IAAI,GAAG,CAyB9B"}
@@ -4,55 +4,118 @@ exports.Inject = Inject;
4
4
  exports.Optional = Optional;
5
5
  const container_1 = require("./container");
6
6
  /**
7
- * Parameter decorator that specifies a dependency token to inject into a class constructor.
7
+ * Parameter or Property decorator that specifies a dependency token to inject.
8
+ * When applied to a property without an explicit token, the dependency type is automatically
9
+ * inferred from TypeScript's emitted metadata (`design:type`).
8
10
  *
9
- * Example:
11
+ * Examples:
10
12
  * ```ts
13
+ * // 1. Constructor Parameter Injection
11
14
  * class UserService {
12
15
  * constructor(
13
16
  * @Inject('DATABASE_URL') private dbUrl: string,
14
17
  * @Inject(LoggerService) private logger: LoggerService
15
18
  * ) {}
16
19
  * }
20
+ *
21
+ * // 2. Property Injection
22
+ * class OrderService {
23
+ * @Inject()
24
+ * private logger!: LoggerService
25
+ *
26
+ * @Inject('CONFIG')
27
+ * private config!: AppConfig
28
+ * }
17
29
  * ```
18
30
  */
19
31
  function Inject(token) {
20
32
  return function (target, propertyKey, parameterIndex) {
21
- // For constructor parameters, propertyKey is undefined and target is the constructor function
22
- const targetObj = propertyKey !== undefined ? target : target;
23
- const currentTokens = (targetObj[container_1.INJECT_METADATA] =
24
- targetObj[container_1.INJECT_METADATA] || {});
25
- currentTokens[parameterIndex] = token;
26
- // Also attach to prototype just in case target varies across transpiler settings
27
- if (targetObj.prototype) {
28
- const protoTokens = (targetObj.prototype[container_1.INJECT_METADATA] =
29
- targetObj.prototype[container_1.INJECT_METADATA] || {});
30
- protoTokens[parameterIndex] = token;
33
+ if (typeof parameterIndex === 'number') {
34
+ // 1. Parameter Decorator
35
+ let resolvedToken = token;
36
+ if (resolvedToken === undefined) {
37
+ const targetClass = typeof target === 'function' ? target : target.constructor;
38
+ const paramTypes = (typeof globalThis.Reflect?.getMetadata === 'function'
39
+ ? globalThis.Reflect.getMetadata('design:paramtypes', targetClass)
40
+ : undefined) || [];
41
+ if (paramTypes[parameterIndex]) {
42
+ resolvedToken = paramTypes[parameterIndex];
43
+ }
44
+ }
45
+ if (resolvedToken !== undefined) {
46
+ const targetObj = target;
47
+ const currentTokens = (targetObj[container_1.INJECT_METADATA] =
48
+ targetObj[container_1.INJECT_METADATA] || {});
49
+ currentTokens[parameterIndex] = resolvedToken;
50
+ if (targetObj.prototype) {
51
+ const protoTokens = (targetObj.prototype[container_1.INJECT_METADATA] =
52
+ targetObj.prototype[container_1.INJECT_METADATA] || {});
53
+ protoTokens[parameterIndex] = resolvedToken;
54
+ }
55
+ }
56
+ }
57
+ else if (propertyKey !== undefined) {
58
+ // 2. Property Decorator
59
+ let resolvedToken = token;
60
+ if (resolvedToken === undefined) {
61
+ const propType = typeof globalThis.Reflect?.getMetadata === 'function'
62
+ ? globalThis.Reflect.getMetadata('design:type', target, propertyKey)
63
+ : undefined;
64
+ if (propType &&
65
+ typeof propType === 'function' &&
66
+ propType !== Object &&
67
+ propType !== String &&
68
+ propType !== Number &&
69
+ propType !== Boolean &&
70
+ propType !== Symbol &&
71
+ propType !== Array &&
72
+ propType !== Function) {
73
+ resolvedToken = propType;
74
+ }
75
+ }
76
+ const proto = typeof target === 'function' ? target.prototype : target;
77
+ const propInjections = (proto[container_1.PROPERTY_INJECT_METADATA] =
78
+ proto[container_1.PROPERTY_INJECT_METADATA] || []);
79
+ propInjections.push({ propertyKey, token: resolvedToken });
31
80
  }
32
81
  };
33
82
  }
34
83
  /**
35
- * Parameter decorator that marks a dependency as optional.
84
+ * Parameter or Property decorator that marks a dependency as optional.
36
85
  * If the dependency cannot be resolved, `undefined` is injected instead of throwing an error.
37
86
  *
38
87
  * Example:
39
88
  * ```ts
40
89
  * class NotificationService {
90
+ * // Constructor
41
91
  * constructor(
42
92
  * @Inject('SLACK_WEBHOOK') @Optional() private webhook?: string
43
93
  * ) {}
94
+ *
95
+ * // Property
96
+ * @Inject('METRICS')
97
+ * @Optional()
98
+ * private metrics?: MetricsService
44
99
  * }
45
100
  * ```
46
101
  */
47
102
  function Optional() {
48
103
  return function (target, propertyKey, parameterIndex) {
49
- const targetObj = propertyKey !== undefined ? target : target;
50
- const currentOptional = (targetObj[container_1.OPTIONAL_METADATA] =
51
- targetObj[container_1.OPTIONAL_METADATA] || new Set());
52
- currentOptional.add(parameterIndex);
53
- if (targetObj.prototype) {
54
- const protoOptional = (targetObj.prototype[container_1.OPTIONAL_METADATA] = targetObj.prototype[container_1.OPTIONAL_METADATA] || new Set());
55
- protoOptional.add(parameterIndex);
104
+ if (typeof parameterIndex === 'number') {
105
+ const targetObj = target;
106
+ const currentOptional = (targetObj[container_1.OPTIONAL_METADATA] =
107
+ targetObj[container_1.OPTIONAL_METADATA] || new Set());
108
+ currentOptional.add(parameterIndex);
109
+ if (targetObj.prototype) {
110
+ const protoOptional = (targetObj.prototype[container_1.OPTIONAL_METADATA] = targetObj.prototype[container_1.OPTIONAL_METADATA] || new Set());
111
+ protoOptional.add(parameterIndex);
112
+ }
113
+ }
114
+ else if (propertyKey !== undefined) {
115
+ const proto = typeof target === 'function' ? target.prototype : target;
116
+ const optProps = (proto[container_1.OPTIONAL_METADATA] =
117
+ proto[container_1.OPTIONAL_METADATA] || new Set());
118
+ optProps.add(propertyKey);
56
119
  }
57
120
  };
58
121
  }
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/di/decorators.ts"],"names":[],"mappings":";;AAeA,wBAmBC;AAeD,4BAkBC;AAnED,2CAA+E;AAE/E;;;;;;;;;;;;GAYG;AACH,SAAgB,MAAM,CAAC,KAAoB;IACzC,OAAO,UACL,MAAW,EACX,WAAwC,EACxC,cAAsB;QAEtB,8FAA8F;QAC9F,MAAM,SAAS,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAA;QAC7D,MAAM,aAAa,GAAG,CAAC,SAAS,CAAC,2BAAe,CAAC;YAC/C,SAAS,CAAC,2BAAe,CAAC,IAAI,EAAE,CAAC,CAAA;QACnC,aAAa,CAAC,cAAc,CAAC,GAAG,KAAK,CAAA;QAErC,iFAAiF;QACjF,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;YACxB,MAAM,WAAW,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,2BAAe,CAAC;gBACvD,SAAS,CAAC,SAAS,CAAC,2BAAe,CAAC,IAAI,EAAE,CAAC,CAAA;YAC7C,WAAW,CAAC,cAAc,CAAC,GAAG,KAAK,CAAA;QACrC,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,QAAQ;IACtB,OAAO,UACL,MAAW,EACX,WAAwC,EACxC,cAAsB;QAEtB,MAAM,SAAS,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAA;QAC7D,MAAM,eAAe,GAAgB,CAAC,SAAS,CAAC,6BAAiB,CAAC;YAChE,SAAS,CAAC,6BAAiB,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC,CAAA;QACpD,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QAEnC,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;YACxB,MAAM,aAAa,GAAgB,CAAC,SAAS,CAAC,SAAS,CACrD,6BAAiB,CAClB,GAAG,SAAS,CAAC,SAAS,CAAC,6BAAiB,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC,CAAA;YAChE,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QACnC,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/di/decorators.ts"],"names":[],"mappings":";;AAgCA,wBAwEC;AAqBD,4BAyBC;AAtJD,2CAKoB;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAgB,MAAM,CAAC,KAAqB;IAC1C,OAAO,UACL,MAAW,EACX,WAA6B,EAC7B,cAAuB;QAEvB,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YACvC,yBAAyB;YACzB,IAAI,aAAa,GAAG,KAAK,CAAA;YACzB,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,WAAW,GACf,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAA;gBAC5D,MAAM,UAAU,GACd,CAAC,OAAQ,UAAkB,CAAC,OAAO,EAAE,WAAW,KAAK,UAAU;oBAC7D,CAAC,CAAE,UAAkB,CAAC,OAAO,CAAC,WAAW,CACrC,mBAAmB,EACnB,WAAW,CACZ;oBACH,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;gBACtB,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC/B,aAAa,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;gBAC5C,CAAC;YACH,CAAC;YAED,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,SAAS,GAAG,MAAM,CAAA;gBACxB,MAAM,aAAa,GAAG,CAAC,SAAS,CAAC,2BAAe,CAAC;oBAC/C,SAAS,CAAC,2BAAe,CAAC,IAAI,EAAE,CAAC,CAAA;gBACnC,aAAa,CAAC,cAAc,CAAC,GAAG,aAAa,CAAA;gBAE7C,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;oBACxB,MAAM,WAAW,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,2BAAe,CAAC;wBACvD,SAAS,CAAC,SAAS,CAAC,2BAAe,CAAC,IAAI,EAAE,CAAC,CAAA;oBAC7C,WAAW,CAAC,cAAc,CAAC,GAAG,aAAa,CAAA;gBAC7C,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,wBAAwB;YACxB,IAAI,aAAa,GAAG,KAAK,CAAA;YACzB,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,QAAQ,GACZ,OAAQ,UAAkB,CAAC,OAAO,EAAE,WAAW,KAAK,UAAU;oBAC5D,CAAC,CAAE,UAAkB,CAAC,OAAO,CAAC,WAAW,CACrC,aAAa,EACb,MAAM,EACN,WAAW,CACZ;oBACH,CAAC,CAAC,SAAS,CAAA;gBACf,IACE,QAAQ;oBACR,OAAO,QAAQ,KAAK,UAAU;oBAC9B,QAAQ,KAAK,MAAM;oBACnB,QAAQ,KAAK,MAAM;oBACnB,QAAQ,KAAK,MAAM;oBACnB,QAAQ,KAAK,OAAO;oBACpB,QAAQ,KAAK,MAAM;oBACnB,QAAQ,KAAK,KAAK;oBAClB,QAAQ,KAAK,QAAQ,EACrB,CAAC;oBACD,aAAa,GAAG,QAAQ,CAAA;gBAC1B,CAAC;YACH,CAAC;YAED,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;YACtE,MAAM,cAAc,GAGd,CAAC,KAAK,CAAC,oCAAwB,CAAC;gBACpC,KAAK,CAAC,oCAAwB,CAAC,IAAI,EAAE,CAAC,CAAA;YACxC,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,QAAQ;IACtB,OAAO,UACL,MAAW,EACX,WAA6B,EAC7B,cAAuB;QAEvB,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,MAAM,CAAA;YACxB,MAAM,eAAe,GAAgB,CAAC,SAAS,CAAC,6BAAiB,CAAC;gBAChE,SAAS,CAAC,6BAAiB,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC,CAAA;YACpD,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;YAEnC,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;gBACxB,MAAM,aAAa,GAAgB,CAAC,SAAS,CAAC,SAAS,CACrD,6BAAiB,CAClB,GAAG,SAAS,CAAC,SAAS,CAAC,6BAAiB,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC,CAAA;gBAChE,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;aAAM,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;YACtE,MAAM,QAAQ,GAAyB,CAAC,KAAK,CAAC,6BAAiB,CAAC;gBAC9D,KAAK,CAAC,6BAAiB,CAAC,IAAI,IAAI,GAAG,EAAmB,CAAC,CAAA;YACzD,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,23 @@
1
+ export interface ForwardReference<T = any> {
2
+ forwardRef: () => T;
3
+ }
4
+ /**
5
+ * Creates a lazy forward reference for resolving circular dependencies between providers or modules.
6
+ *
7
+ * Example:
8
+ * ```ts
9
+ * @Injectable()
10
+ * export class OrderService {
11
+ * constructor(
12
+ * @Inject(forwardRef(() => InventoryService))
13
+ * private inventoryService: InventoryService
14
+ * ) {}
15
+ * }
16
+ * ```
17
+ */
18
+ export declare function forwardRef<T = any>(fn: () => T): ForwardReference<T>;
19
+ /**
20
+ * Checks if a value is a ForwardReference wrapper.
21
+ */
22
+ export declare function isForwardRef(val: any): val is ForwardReference;
23
+ //# sourceMappingURL=forward-ref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forward-ref.d.ts","sourceRoot":"","sources":["../../src/di/forward-ref.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,GAAG;IACvC,UAAU,EAAE,MAAM,CAAC,CAAA;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAEpE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,gBAAgB,CAM9D"}