inversify 6.0.3 → 6.1.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 (150) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +14 -14
  3. package/amd/annotation/decorator_utils.js +3 -1
  4. package/amd/annotation/inject_base.js +1 -1
  5. package/amd/annotation/lazy_service_identifier.js +0 -11
  6. package/amd/bindings/binding.js +3 -2
  7. package/amd/bindings/binding_count.js +6 -5
  8. package/amd/constants/error_msgs.js +18 -18
  9. package/amd/constants/literal_types.js +3 -3
  10. package/amd/container/container.js +73 -34
  11. package/amd/container/lookup.js +15 -14
  12. package/amd/container/module_activation_store.js +8 -10
  13. package/amd/interfaces/interfaces.js +0 -5
  14. package/amd/inversify.js +3 -5
  15. package/amd/planning/metadata_reader.js +5 -3
  16. package/amd/planning/planner.js +31 -13
  17. package/amd/planning/queryable_string.js +5 -2
  18. package/amd/planning/reflection_utils.js +6 -112
  19. package/amd/planning/request.js +2 -4
  20. package/amd/planning/target.js +9 -3
  21. package/amd/resolution/instantiation.js +10 -5
  22. package/amd/resolution/resolver.js +19 -10
  23. package/amd/scope/scope.js +1 -1
  24. package/amd/syntax/binding_to_syntax.js +14 -7
  25. package/amd/syntax/binding_when_syntax.js +13 -8
  26. package/amd/syntax/constraint_helpers.js +4 -3
  27. package/amd/utils/async.js +3 -2
  28. package/amd/utils/binding_utils.js +8 -3
  29. package/amd/utils/clonable.js +4 -4
  30. package/amd/utils/exceptions.js +1 -1
  31. package/amd/utils/serialization.js +11 -8
  32. package/es/annotation/decorator_utils.js +3 -1
  33. package/es/annotation/inject_base.js +1 -1
  34. package/es/annotation/lazy_service_identifier.js +1 -10
  35. package/es/annotation/target_name.js +3 -3
  36. package/es/bindings/binding.js +3 -2
  37. package/es/bindings/binding_count.js +6 -5
  38. package/es/constants/error_msgs.js +17 -17
  39. package/es/constants/literal_types.js +3 -3
  40. package/es/container/container.js +74 -35
  41. package/es/container/lookup.js +15 -14
  42. package/es/container/module_activation_store.js +8 -10
  43. package/es/interfaces/interfaces.js +1 -5
  44. package/es/inversify.js +4 -6
  45. package/es/planning/metadata_reader.js +5 -3
  46. package/es/planning/planner.js +34 -16
  47. package/es/planning/queryable_string.js +5 -2
  48. package/es/planning/reflection_utils.js +6 -114
  49. package/es/planning/request.js +2 -4
  50. package/es/planning/target.js +9 -3
  51. package/es/resolution/instantiation.js +11 -6
  52. package/es/resolution/resolver.js +20 -11
  53. package/es/scope/scope.js +1 -1
  54. package/es/syntax/binding_to_syntax.js +18 -11
  55. package/es/syntax/binding_when_syntax.js +14 -9
  56. package/es/syntax/constraint_helpers.js +5 -4
  57. package/es/utils/async.js +3 -2
  58. package/es/utils/binding_utils.js +8 -3
  59. package/es/utils/clonable.js +4 -4
  60. package/es/utils/exceptions.js +1 -1
  61. package/es/utils/serialization.js +12 -9
  62. package/es6/annotation/decorator_utils.js +5 -3
  63. package/es6/annotation/inject_base.js +1 -1
  64. package/es6/annotation/lazy_service_identifier.js +0 -10
  65. package/es6/bindings/binding.js +3 -2
  66. package/es6/bindings/binding_count.js +6 -5
  67. package/es6/constants/error_msgs.js +5 -9
  68. package/es6/constants/literal_types.js +3 -3
  69. package/es6/container/container.js +59 -42
  70. package/es6/container/lookup.js +15 -14
  71. package/es6/container/module_activation_store.js +8 -10
  72. package/es6/interfaces/interfaces.js +0 -5
  73. package/es6/inversify.js +3 -7
  74. package/es6/planning/metadata_reader.js +5 -3
  75. package/es6/planning/planner.js +31 -13
  76. package/es6/planning/queryable_string.js +5 -2
  77. package/es6/planning/reflection_utils.js +4 -110
  78. package/es6/planning/request.js +2 -4
  79. package/es6/planning/target.js +3 -1
  80. package/es6/resolution/instantiation.js +9 -5
  81. package/es6/resolution/resolver.js +11 -8
  82. package/es6/scope/scope.js +1 -1
  83. package/es6/syntax/binding_to_syntax.js +5 -4
  84. package/es6/syntax/binding_when_syntax.js +13 -8
  85. package/es6/syntax/constraint_helpers.js +4 -3
  86. package/es6/utils/async.js +3 -2
  87. package/es6/utils/binding_utils.js +10 -3
  88. package/es6/utils/clonable.js +4 -4
  89. package/es6/utils/exceptions.js +1 -1
  90. package/es6/utils/serialization.js +11 -8
  91. package/lib/annotation/decorator_utils.d.ts +2 -2
  92. package/lib/annotation/decorator_utils.js +3 -1
  93. package/lib/annotation/inject.d.ts +4 -1
  94. package/lib/annotation/inject_base.d.ts +3 -2
  95. package/lib/annotation/inject_base.js +1 -1
  96. package/lib/annotation/lazy_service_identifier.d.ts +1 -5
  97. package/lib/annotation/lazy_service_identifier.js +0 -11
  98. package/lib/annotation/multi_inject.d.ts +4 -1
  99. package/lib/annotation/tagged.d.ts +1 -1
  100. package/lib/annotation/target_name.d.ts +1 -1
  101. package/lib/bindings/binding.js +3 -2
  102. package/lib/bindings/binding_count.d.ts +5 -5
  103. package/lib/bindings/binding_count.js +6 -5
  104. package/lib/constants/error_msgs.d.ts +18 -20
  105. package/lib/constants/error_msgs.js +18 -18
  106. package/lib/constants/literal_types.js +3 -3
  107. package/lib/constants/metadata_keys.d.ts +12 -12
  108. package/lib/container/container.d.ts +2 -2
  109. package/lib/container/container.js +73 -34
  110. package/lib/container/lookup.d.ts +2 -1
  111. package/lib/container/lookup.js +15 -14
  112. package/lib/container/module_activation_store.d.ts +1 -1
  113. package/lib/container/module_activation_store.js +8 -10
  114. package/lib/interfaces/interfaces.d.ts +14 -29
  115. package/lib/interfaces/interfaces.js +0 -5
  116. package/lib/inversify.d.ts +5 -6
  117. package/lib/inversify.js +3 -7
  118. package/lib/planning/metadata_reader.js +5 -3
  119. package/lib/planning/planner.js +31 -13
  120. package/lib/planning/queryable_string.d.ts +2 -3
  121. package/lib/planning/queryable_string.js +5 -2
  122. package/lib/planning/reflection_utils.js +6 -114
  123. package/lib/planning/request.d.ts +2 -2
  124. package/lib/planning/request.js +2 -4
  125. package/lib/planning/target.d.ts +1 -1
  126. package/lib/planning/target.js +9 -3
  127. package/lib/resolution/instantiation.js +10 -5
  128. package/lib/resolution/resolver.js +19 -10
  129. package/lib/scope/scope.js +1 -1
  130. package/lib/syntax/binding_in_syntax.d.ts +1 -1
  131. package/lib/syntax/binding_in_when_on_syntax.d.ts +7 -7
  132. package/lib/syntax/binding_on_syntax.d.ts +1 -1
  133. package/lib/syntax/binding_to_syntax.d.ts +4 -4
  134. package/lib/syntax/binding_to_syntax.js +14 -7
  135. package/lib/syntax/binding_when_on_syntax.d.ts +6 -6
  136. package/lib/syntax/binding_when_syntax.d.ts +4 -4
  137. package/lib/syntax/binding_when_syntax.js +13 -8
  138. package/lib/syntax/constraint_helpers.d.ts +2 -2
  139. package/lib/syntax/constraint_helpers.js +4 -3
  140. package/lib/tsconfig.tsbuildinfo +1 -1
  141. package/lib/utils/async.js +3 -2
  142. package/lib/utils/binding_utils.js +8 -3
  143. package/lib/utils/clonable.js +4 -4
  144. package/lib/utils/exceptions.js +1 -1
  145. package/lib/utils/serialization.d.ts +3 -3
  146. package/lib/utils/serialization.js +11 -8
  147. package/package.json +18 -4
  148. package/.nyc_output/c29b2307-4e95-47d0-b220-9efcfa7ee49f.json +0 -1
  149. package/.nyc_output/processinfo/c29b2307-4e95-47d0-b220-9efcfa7ee49f.json +0 -1
  150. package/.nyc_output/processinfo/index.json +0 -1
@@ -34,9 +34,7 @@ class Lookup {
34
34
  return this._map;
35
35
  }
36
36
  add(serviceIdentifier, value) {
37
- if (serviceIdentifier === null || serviceIdentifier === undefined) {
38
- throw new Error(ERROR_MSGS.NULL_ARGUMENT);
39
- }
37
+ this._checkNonNulish(serviceIdentifier);
40
38
  if (value === null || value === undefined) {
41
39
  throw new Error(ERROR_MSGS.NULL_ARGUMENT);
42
40
  }
@@ -49,9 +47,7 @@ class Lookup {
49
47
  }
50
48
  }
51
49
  get(serviceIdentifier) {
52
- if (serviceIdentifier === null || serviceIdentifier === undefined) {
53
- throw new Error(ERROR_MSGS.NULL_ARGUMENT);
54
- }
50
+ this._checkNonNulish(serviceIdentifier);
55
51
  const entry = this._map.get(serviceIdentifier);
56
52
  if (entry !== undefined) {
57
53
  return entry;
@@ -61,16 +57,16 @@ class Lookup {
61
57
  }
62
58
  }
63
59
  remove(serviceIdentifier) {
64
- if (serviceIdentifier === null || serviceIdentifier === undefined) {
65
- throw new Error(ERROR_MSGS.NULL_ARGUMENT);
66
- }
60
+ this._checkNonNulish(serviceIdentifier);
67
61
  if (!this._map.delete(serviceIdentifier)) {
68
62
  throw new Error(ERROR_MSGS.KEY_NOT_FOUND);
69
63
  }
70
64
  }
71
65
  removeIntersection(lookup) {
72
66
  this.traverse((serviceIdentifier, value) => {
73
- const lookupActivations = lookup.hasKey(serviceIdentifier) ? lookup.get(serviceIdentifier) : undefined;
67
+ const lookupActivations = lookup.hasKey(serviceIdentifier)
68
+ ? lookup.get(serviceIdentifier)
69
+ : undefined;
74
70
  if (lookupActivations !== undefined) {
75
71
  const filteredValues = value.filter((lookupValue) => !lookupActivations.some((moduleActivation) => lookupValue === moduleActivation));
76
72
  this._setValue(serviceIdentifier, filteredValues);
@@ -95,15 +91,15 @@ class Lookup {
95
91
  return removals;
96
92
  }
97
93
  hasKey(serviceIdentifier) {
98
- if (serviceIdentifier === null || serviceIdentifier === undefined) {
99
- throw new Error(ERROR_MSGS.NULL_ARGUMENT);
100
- }
94
+ this._checkNonNulish(serviceIdentifier);
101
95
  return this._map.has(serviceIdentifier);
102
96
  }
103
97
  clone() {
104
98
  const copy = new Lookup();
105
99
  this._map.forEach((value, key) => {
106
- value.forEach((b) => copy.add(key, (0, clonable_1.isClonable)(b) ? b.clone() : b));
100
+ value.forEach((b) => {
101
+ copy.add(key, (0, clonable_1.isClonable)(b) ? b.clone() : b);
102
+ });
107
103
  });
108
104
  return copy;
109
105
  }
@@ -112,6 +108,11 @@ class Lookup {
112
108
  func(key, value);
113
109
  });
114
110
  }
111
+ _checkNonNulish(value) {
112
+ if (value == null) {
113
+ throw new Error(ERROR_MSGS.NULL_ARGUMENT);
114
+ }
115
+ }
115
116
  _setValue(serviceIdentifier, value) {
116
117
  if (value.length > 0) {
117
118
  this._map.set(serviceIdentifier, value);
@@ -7,20 +7,18 @@ class ModuleActivationStore {
7
7
  this._map = new Map();
8
8
  }
9
9
  remove(moduleId) {
10
- if (this._map.has(moduleId)) {
11
- const handlers = this._map.get(moduleId);
12
- this._map.delete(moduleId);
13
- return handlers;
10
+ const handlers = this._map.get(moduleId);
11
+ if (handlers === undefined) {
12
+ return this._getEmptyHandlersStore();
14
13
  }
15
- return this._getEmptyHandlersStore();
14
+ this._map.delete(moduleId);
15
+ return handlers;
16
16
  }
17
17
  addDeactivation(moduleId, serviceIdentifier, onDeactivation) {
18
- this._getModuleActivationHandlers(moduleId)
19
- .onDeactivations.add(serviceIdentifier, onDeactivation);
18
+ this._getModuleActivationHandlers(moduleId).onDeactivations.add(serviceIdentifier, onDeactivation);
20
19
  }
21
20
  addActivation(moduleId, serviceIdentifier, onActivation) {
22
- this._getModuleActivationHandlers(moduleId)
23
- .onActivations.add(serviceIdentifier, onActivation);
21
+ this._getModuleActivationHandlers(moduleId).onActivations.add(serviceIdentifier, onActivation);
24
22
  }
25
23
  clone() {
26
24
  const clone = new ModuleActivationStore();
@@ -43,7 +41,7 @@ class ModuleActivationStore {
43
41
  _getEmptyHandlersStore() {
44
42
  const handlersStore = {
45
43
  onActivations: new lookup_1.Lookup(),
46
- onDeactivations: new lookup_1.Lookup()
44
+ onDeactivations: new lookup_1.Lookup(),
47
45
  };
48
46
  return handlersStore;
49
47
  }
@@ -1,7 +1,2 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.interfaces = void 0;
4
- var interfaces;
5
- (function (interfaces) {
6
- ;
7
- })(interfaces || (exports.interfaces = interfaces = {}));
package/es6/inversify.js CHANGED
@@ -23,8 +23,10 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.multiBindToService = exports.getServiceIdentifierAsString = exports.typeConstraint = exports.namedConstraint = exports.taggedConstraint = exports.traverseAncerstors = exports.decorate = exports.interfaces = exports.id = exports.MetadataReader = exports.preDestroy = exports.postConstruct = exports.targetName = exports.multiInject = exports.unmanaged = exports.optional = exports.LazyServiceIdentifer = exports.LazyServiceIdentifier = exports.inject = exports.named = exports.tagged = exports.injectable = exports.createTaggedDecorator = exports.ContainerModule = exports.AsyncContainerModule = exports.TargetTypeEnum = exports.BindingTypeEnum = exports.BindingScopeEnum = exports.Container = exports.METADATA_KEY = void 0;
26
+ exports.multiBindToService = exports.getServiceIdentifierAsString = exports.typeConstraint = exports.namedConstraint = exports.taggedConstraint = exports.traverseAncerstors = exports.decorate = exports.id = exports.MetadataReader = exports.preDestroy = exports.postConstruct = exports.targetName = exports.multiInject = exports.unmanaged = exports.optional = exports.inject = exports.named = exports.tagged = exports.injectable = exports.createTaggedDecorator = exports.ContainerModule = exports.AsyncContainerModule = exports.TargetTypeEnum = exports.BindingTypeEnum = exports.BindingScopeEnum = exports.Container = exports.METADATA_KEY = exports.LazyServiceIdentifier = void 0;
27
27
  const keys = __importStar(require("./constants/metadata_keys"));
28
+ var common_1 = require("@inversifyjs/common");
29
+ Object.defineProperty(exports, "LazyServiceIdentifier", { enumerable: true, get: function () { return common_1.LazyServiceIdentifier; } });
28
30
  exports.METADATA_KEY = keys;
29
31
  var container_1 = require("./container/container");
30
32
  Object.defineProperty(exports, "Container", { enumerable: true, get: function () { return container_1.Container; } });
@@ -45,10 +47,6 @@ var named_1 = require("./annotation/named");
45
47
  Object.defineProperty(exports, "named", { enumerable: true, get: function () { return named_1.named; } });
46
48
  var inject_1 = require("./annotation/inject");
47
49
  Object.defineProperty(exports, "inject", { enumerable: true, get: function () { return inject_1.inject; } });
48
- var lazy_service_identifier_1 = require("./annotation/lazy_service_identifier");
49
- Object.defineProperty(exports, "LazyServiceIdentifier", { enumerable: true, get: function () { return lazy_service_identifier_1.LazyServiceIdentifier; } });
50
- var lazy_service_identifier_2 = require("./annotation/lazy_service_identifier");
51
- Object.defineProperty(exports, "LazyServiceIdentifer", { enumerable: true, get: function () { return lazy_service_identifier_2.LazyServiceIdentifier; } });
52
50
  var optional_1 = require("./annotation/optional");
53
51
  Object.defineProperty(exports, "optional", { enumerable: true, get: function () { return optional_1.optional; } });
54
52
  var unmanaged_1 = require("./annotation/unmanaged");
@@ -65,8 +63,6 @@ var metadata_reader_1 = require("./planning/metadata_reader");
65
63
  Object.defineProperty(exports, "MetadataReader", { enumerable: true, get: function () { return metadata_reader_1.MetadataReader; } });
66
64
  var id_1 = require("./utils/id");
67
65
  Object.defineProperty(exports, "id", { enumerable: true, get: function () { return id_1.id; } });
68
- var interfaces_1 = require("./interfaces/interfaces");
69
- Object.defineProperty(exports, "interfaces", { enumerable: true, get: function () { return interfaces_1.interfaces; } });
70
66
  var decorator_utils_2 = require("./annotation/decorator_utils");
71
67
  Object.defineProperty(exports, "decorate", { enumerable: true, get: function () { return decorator_utils_2.decorate; } });
72
68
  var constraint_helpers_1 = require("./syntax/constraint_helpers");
@@ -27,15 +27,17 @@ exports.MetadataReader = void 0;
27
27
  const METADATA_KEY = __importStar(require("../constants/metadata_keys"));
28
28
  class MetadataReader {
29
29
  getConstructorMetadata(constructorFunc) {
30
- const compilerGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.PARAM_TYPES, constructorFunc);
30
+ var _a;
31
+ const compilerGeneratedMetadata = (_a = Reflect.getMetadata(METADATA_KEY.DESIGN_PARAM_TYPES, constructorFunc)) !== null && _a !== void 0 ? _a : [];
31
32
  const userGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.TAGGED, constructorFunc);
32
33
  return {
33
34
  compilerGeneratedMetadata,
34
- userGeneratedMetadata: userGeneratedMetadata || {}
35
+ userGeneratedMetadata: userGeneratedMetadata !== null && userGeneratedMetadata !== void 0 ? userGeneratedMetadata : {},
35
36
  };
36
37
  }
37
38
  getPropertiesMetadata(constructorFunc) {
38
- const userGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.TAGGED_PROP, constructorFunc) || [];
39
+ var _a;
40
+ const userGeneratedMetadata = (_a = Reflect.getMetadata(METADATA_KEY.TAGGED_PROP, constructorFunc)) !== null && _a !== void 0 ? _a : {};
39
41
  return userGeneratedMetadata;
40
42
  }
41
43
  }
@@ -26,6 +26,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.plan = plan;
27
27
  exports.createMockRequest = createMockRequest;
28
28
  exports.getBindingDictionary = getBindingDictionary;
29
+ const core_1 = require("@inversifyjs/core");
29
30
  const binding_count_1 = require("../bindings/binding_count");
30
31
  const ERROR_MSGS = __importStar(require("../constants/error_msgs"));
31
32
  const literal_types_1 = require("../constants/literal_types");
@@ -37,27 +38,26 @@ const metadata_1 = require("./metadata");
37
38
  const plan_1 = require("./plan");
38
39
  const reflection_utils_1 = require("./reflection_utils");
39
40
  const request_1 = require("./request");
40
- const target_1 = require("./target");
41
41
  function getBindingDictionary(cntnr) {
42
42
  return cntnr._bindingDictionary;
43
43
  }
44
44
  function _createTarget(isMultiInject, targetType, serviceIdentifier, name, key, value) {
45
- const metadataKey = isMultiInject ? METADATA_KEY.MULTI_INJECT_TAG : METADATA_KEY.INJECT_TAG;
46
- const injectMetadata = new metadata_1.Metadata(metadataKey, serviceIdentifier);
47
- const target = new target_1.Target(targetType, name, serviceIdentifier, injectMetadata);
48
- if (key !== undefined) {
49
- const tagMetadata = new metadata_1.Metadata(key, value);
50
- target.metadata.push(tagMetadata);
45
+ const metadataList = _getTargetMetadata(isMultiInject, serviceIdentifier, key, value);
46
+ const classElementMetadata = (0, core_1.getClassElementMetadataFromLegacyMetadata)(metadataList);
47
+ if (classElementMetadata.kind === core_1.ClassElementMetadataKind.unmanaged) {
48
+ throw new Error('Unexpected metadata when creating target');
51
49
  }
50
+ const target = new core_1.LegacyTargetImpl(name, classElementMetadata, targetType);
52
51
  return target;
53
52
  }
54
53
  function _getActiveBindings(metadataReader, avoidConstraints, context, parentRequest, target) {
55
54
  let bindings = getBindings(context.container, target.serviceIdentifier);
56
55
  let activeBindings = [];
57
56
  if (bindings.length === binding_count_1.BindingCount.NoBindingsAvailable &&
58
- context.container.options.autoBindInjectable &&
57
+ context.container.options.autoBindInjectable === true &&
59
58
  typeof target.serviceIdentifier === 'function' &&
60
- metadataReader.getConstructorMetadata(target.serviceIdentifier).compilerGeneratedMetadata) {
59
+ metadataReader.getConstructorMetadata(target.serviceIdentifier)
60
+ .compilerGeneratedMetadata) {
61
61
  context.container.bind(target.serviceIdentifier).toSelf();
62
62
  bindings = getBindings(context.container, target.serviceIdentifier);
63
63
  }
@@ -73,6 +73,18 @@ function _getActiveBindings(metadataReader, avoidConstraints, context, parentReq
73
73
  _validateActiveBindingCount(target.serviceIdentifier, activeBindings, target, context.container);
74
74
  return activeBindings;
75
75
  }
76
+ function _getTargetMetadata(isMultiInject, serviceIdentifier, key, value) {
77
+ const metadataKey = isMultiInject
78
+ ? METADATA_KEY.MULTI_INJECT_TAG
79
+ : METADATA_KEY.INJECT_TAG;
80
+ const metadataList = [
81
+ new metadata_1.Metadata(metadataKey, serviceIdentifier),
82
+ ];
83
+ if (key !== undefined) {
84
+ metadataList.push(new metadata_1.Metadata(key, value));
85
+ }
86
+ return metadataList;
87
+ }
76
88
  function _validateActiveBindingCount(serviceIdentifier, bindings, target, container) {
77
89
  switch (bindings.length) {
78
90
  case binding_count_1.BindingCount.NoBindingsAvailable:
@@ -120,14 +132,15 @@ function _createSubRequests(metadataReader, avoidConstraints, serviceIdentifier,
120
132
  subChildRequest = childRequest.addChildRequest(binding.serviceIdentifier, binding, target);
121
133
  }
122
134
  else {
123
- if (binding.cache) {
135
+ if (binding.cache !== null) {
124
136
  return;
125
137
  }
126
138
  subChildRequest = childRequest;
127
139
  }
128
- if (binding.type === literal_types_1.BindingTypeEnum.Instance && binding.implementationType !== null) {
140
+ if (binding.type === literal_types_1.BindingTypeEnum.Instance &&
141
+ binding.implementationType !== null) {
129
142
  const dependencies = (0, reflection_utils_1.getDependencies)(metadataReader, binding.implementationType);
130
- if (!context.container.options.skipBaseClassChecks) {
143
+ if (context.container.options.skipBaseClassChecks !== true) {
131
144
  const baseClassDependencyCount = (0, reflection_utils_1.getBaseClassDependencyCount)(metadataReader, binding.implementationType);
132
145
  if (dependencies.length < baseClassDependencyCount) {
133
146
  const error = ERROR_MSGS.ARGUMENTS_LENGTH_MISMATCH((0, reflection_utils_1.getFunctionName)(binding.implementationType));
@@ -166,7 +179,12 @@ function plan(metadataReader, container, isMultiInject, targetType, serviceIdent
166
179
  }
167
180
  }
168
181
  function createMockRequest(container, serviceIdentifier, key, value) {
169
- const target = new target_1.Target(literal_types_1.TargetTypeEnum.Variable, '', serviceIdentifier, new metadata_1.Metadata(key, value));
182
+ const metadataList = _getTargetMetadata(false, serviceIdentifier, key, value);
183
+ const classElementMetadata = (0, core_1.getClassElementMetadataFromLegacyMetadata)(metadataList);
184
+ if (classElementMetadata.kind === core_1.ClassElementMetadataKind.unmanaged) {
185
+ throw new Error('Unexpected metadata when creating target');
186
+ }
187
+ const target = new core_1.LegacyTargetImpl('', classElementMetadata, 'Variable');
170
188
  const context = new context_1.Context(container);
171
189
  const request = new request_1.Request(serviceIdentifier, context, null, [], target);
172
190
  return request;
@@ -10,12 +10,15 @@ class QueryableString {
10
10
  }
11
11
  endsWith(searchString) {
12
12
  let reverseString = '';
13
- const reverseSearchString = searchString.split('').reverse().join('');
13
+ const reverseSearchString = searchString
14
+ .split('')
15
+ .reverse()
16
+ .join('');
14
17
  reverseString = this.str.split('').reverse().join('');
15
18
  return this.startsWith.call({ str: reverseString }, reverseSearchString);
16
19
  }
17
20
  contains(searchString) {
18
- return (this.str.indexOf(searchString) !== -1);
21
+ return this.str.indexOf(searchString) !== -1;
19
22
  }
20
23
  equals(compareString) {
21
24
  return this.str === compareString;
@@ -26,112 +26,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.getFunctionName = void 0;
27
27
  exports.getDependencies = getDependencies;
28
28
  exports.getBaseClassDependencyCount = getBaseClassDependencyCount;
29
- const lazy_service_identifier_1 = require("../annotation/lazy_service_identifier");
30
- const ERROR_MSGS = __importStar(require("../constants/error_msgs"));
31
- const literal_types_1 = require("../constants/literal_types");
29
+ const core_1 = require("@inversifyjs/core");
32
30
  const METADATA_KEY = __importStar(require("../constants/metadata_keys"));
33
31
  const serialization_1 = require("../utils/serialization");
34
32
  Object.defineProperty(exports, "getFunctionName", { enumerable: true, get: function () { return serialization_1.getFunctionName; } });
35
- const target_1 = require("./target");
36
33
  function getDependencies(metadataReader, func) {
37
- const constructorName = (0, serialization_1.getFunctionName)(func);
38
- return getTargets(metadataReader, constructorName, func, false);
39
- }
40
- function getTargets(metadataReader, constructorName, func, isBaseClass) {
41
- const metadata = metadataReader.getConstructorMetadata(func);
42
- const serviceIdentifiers = metadata.compilerGeneratedMetadata;
43
- if (serviceIdentifiers === undefined) {
44
- const msg = `${ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION} ${constructorName}.`;
45
- throw new Error(msg);
46
- }
47
- const constructorArgsMetadata = metadata.userGeneratedMetadata;
48
- const keys = Object.keys(constructorArgsMetadata);
49
- const hasUserDeclaredUnknownInjections = (func.length === 0 && keys.length > 0);
50
- const hasOptionalParameters = keys.length > func.length;
51
- const iterations = (hasUserDeclaredUnknownInjections || hasOptionalParameters) ? keys.length : func.length;
52
- const constructorTargets = getConstructorArgsAsTargets(isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata, iterations);
53
- const propertyTargets = getClassPropsAsTargets(metadataReader, func, constructorName);
54
- const targets = [
55
- ...constructorTargets,
56
- ...propertyTargets
57
- ];
58
- return targets;
59
- }
60
- function getConstructorArgsAsTarget(index, isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata) {
61
- const targetMetadata = constructorArgsMetadata[index.toString()] || [];
62
- const metadata = formatTargetMetadata(targetMetadata);
63
- const isManaged = metadata.unmanaged !== true;
64
- let serviceIdentifier = serviceIdentifiers[index];
65
- const injectIdentifier = metadata.inject || metadata.multiInject;
66
- serviceIdentifier = (injectIdentifier ? injectIdentifier : serviceIdentifier);
67
- if (serviceIdentifier instanceof lazy_service_identifier_1.LazyServiceIdentifier) {
68
- serviceIdentifier = serviceIdentifier.unwrap();
69
- }
70
- if (isManaged) {
71
- const isObject = serviceIdentifier === Object;
72
- const isFunction = serviceIdentifier === Function;
73
- const isUndefined = serviceIdentifier === undefined;
74
- const isUnknownType = isObject || isFunction || isUndefined;
75
- if (!isBaseClass && isUnknownType) {
76
- const msg = `${ERROR_MSGS.MISSING_INJECT_ANNOTATION} argument ${index} in class ${constructorName}.`;
77
- throw new Error(msg);
78
- }
79
- const target = new target_1.Target(literal_types_1.TargetTypeEnum.ConstructorArgument, metadata.targetName, serviceIdentifier);
80
- target.metadata = targetMetadata;
81
- return target;
82
- }
83
- return null;
84
- }
85
- function getConstructorArgsAsTargets(isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata, iterations) {
86
- const targets = [];
87
- for (let i = 0; i < iterations; i++) {
88
- const index = i;
89
- const target = getConstructorArgsAsTarget(index, isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata);
90
- if (target !== null) {
91
- targets.push(target);
92
- }
93
- }
94
- return targets;
95
- }
96
- function _getServiceIdentifierForProperty(inject, multiInject, propertyName, className) {
97
- const serviceIdentifier = (inject || multiInject);
98
- if (serviceIdentifier === undefined) {
99
- const msg = `${ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION} for property ${String(propertyName)} in class ${className}.`;
100
- throw new Error(msg);
101
- }
102
- return serviceIdentifier;
103
- }
104
- function getClassPropsAsTargets(metadataReader, constructorFunc, constructorName) {
105
- const classPropsMetadata = metadataReader.getPropertiesMetadata(constructorFunc);
106
- let targets = [];
107
- const symbolKeys = Object.getOwnPropertySymbols(classPropsMetadata);
108
- const stringKeys = Object.keys(classPropsMetadata);
109
- const keys = stringKeys.concat(symbolKeys);
110
- for (const key of keys) {
111
- const targetMetadata = classPropsMetadata[key];
112
- const metadata = formatTargetMetadata(targetMetadata);
113
- const identifier = metadata.targetName || key;
114
- const serviceIdentifier = _getServiceIdentifierForProperty(metadata.inject, metadata.multiInject, key, constructorName);
115
- const target = new target_1.Target(literal_types_1.TargetTypeEnum.ClassProperty, identifier, serviceIdentifier);
116
- target.metadata = targetMetadata;
117
- targets.push(target);
118
- }
119
- const baseConstructor = Object.getPrototypeOf(constructorFunc.prototype).constructor;
120
- if (baseConstructor !== Object) {
121
- const baseTargets = getClassPropsAsTargets(metadataReader, baseConstructor, constructorName);
122
- targets = [
123
- ...targets,
124
- ...baseTargets
125
- ];
126
- }
127
- return targets;
34
+ return (0, core_1.getTargets)(metadataReader)(func);
128
35
  }
129
36
  function getBaseClassDependencyCount(metadataReader, func) {
130
37
  const baseConstructor = Object.getPrototypeOf(func.prototype).constructor;
131
38
  if (baseConstructor !== Object) {
132
- const baseConstructorName = (0, serialization_1.getFunctionName)(baseConstructor);
133
- const targets = getTargets(metadataReader, baseConstructorName, baseConstructor, true);
134
- const metadata = targets.map((t) => t.metadata.filter(m => m.key === METADATA_KEY.UNMANAGED_TAG));
39
+ const targets = (0, core_1.getTargets)(metadataReader)(baseConstructor);
40
+ const metadata = targets.map((t) => t.metadata.filter((m) => m.key === METADATA_KEY.UNMANAGED_TAG));
135
41
  const unmanagedCount = [].concat.apply([], metadata).length;
136
42
  const dependencyCount = targets.length - unmanagedCount;
137
43
  if (dependencyCount > 0) {
@@ -145,15 +51,3 @@ function getBaseClassDependencyCount(metadataReader, func) {
145
51
  return 0;
146
52
  }
147
53
  }
148
- function formatTargetMetadata(targetMetadata) {
149
- const targetMetadataMap = {};
150
- targetMetadata.forEach((m) => {
151
- targetMetadataMap[m.key.toString()] = m.value;
152
- });
153
- return {
154
- inject: targetMetadataMap[METADATA_KEY.INJECT_TAG],
155
- multiInject: targetMetadataMap[METADATA_KEY.MULTI_INJECT_TAG],
156
- targetName: targetMetadataMap[METADATA_KEY.NAME_TAG],
157
- unmanaged: targetMetadataMap[METADATA_KEY.UNMANAGED_TAG]
158
- };
159
- }
@@ -10,10 +10,8 @@ class Request {
10
10
  this.parentRequest = parentRequest;
11
11
  this.target = target;
12
12
  this.childRequests = [];
13
- this.bindings = (Array.isArray(bindings) ? bindings : [bindings]);
14
- this.requestScope = parentRequest === null
15
- ? new Map()
16
- : null;
13
+ this.bindings = Array.isArray(bindings) ? bindings : [bindings];
14
+ this.requestScope = parentRequest === null ? new Map() : null;
17
15
  }
18
16
  addChildRequest(serviceIdentifier, bindings, target) {
19
17
  const child = new Request(serviceIdentifier, this.parentContext, this, bindings, target);
@@ -34,7 +34,9 @@ class Target {
34
34
  this.id = (0, id_1.id)();
35
35
  this.type = type;
36
36
  this.serviceIdentifier = serviceIdentifier;
37
- const queryableName = typeof identifier === 'symbol' ? (0, serialization_1.getSymbolDescription)(identifier) : identifier;
37
+ const queryableName = typeof identifier === 'symbol'
38
+ ? (0, serialization_1.getSymbolDescription)(identifier)
39
+ : identifier;
38
40
  this.name = new queryable_string_1.QueryableString(queryableName || '');
39
41
  this.identifier = identifier;
40
42
  this.metadata = new Array();
@@ -52,7 +52,12 @@ function _resolveRequests(childRequests, resolveRequest) {
52
52
  resolvedRequests.isAsync = (0, async_1.isPromiseOrContainsPromise)(injection);
53
53
  }
54
54
  return resolvedRequests;
55
- }, { constructorInjections: [], propertyInjections: [], propertyRequests: [], isAsync: false });
55
+ }, {
56
+ constructorInjections: [],
57
+ isAsync: false,
58
+ propertyInjections: [],
59
+ propertyRequests: [],
60
+ });
56
61
  }
57
62
  function _createInstance(constr, childRequests, resolveRequest) {
58
63
  let result;
@@ -86,7 +91,8 @@ function createInstanceWithInjectionsAsync(args) {
86
91
  return __awaiter(this, void 0, void 0, function* () {
87
92
  const constructorInjections = yield possiblyWaitInjections(args.constructorInjections);
88
93
  const propertyInjections = yield possiblyWaitInjections(args.propertyInjections);
89
- return createInstanceWithInjections(Object.assign(Object.assign({}, args), { constructorInjections, propertyInjections }));
94
+ return createInstanceWithInjections(Object.assign(Object.assign({}, args), { constructorInjections,
95
+ propertyInjections }));
90
96
  });
91
97
  }
92
98
  function possiblyWaitInjections(possiblePromiseinjections) {
@@ -132,9 +138,7 @@ function _validateInstanceResolution(binding, constr) {
132
138
  }
133
139
  }
134
140
  function _throwIfHandlingDeactivation(binding, constr) {
135
- const scopeErrorMessage = `Class cannot be instantiated in ${binding.scope === literal_types_1.BindingScopeEnum.Request ?
136
- 'request' :
137
- 'transient'} scope.`;
141
+ const scopeErrorMessage = `Class cannot be instantiated in ${binding.scope === literal_types_1.BindingScopeEnum.Request ? 'request' : 'transient'} scope.`;
138
142
  if (typeof binding.onDeactivation === 'function') {
139
143
  throw new Error((0, error_msgs_1.ON_DEACTIVATION_ERROR)(constr.name, scopeErrorMessage));
140
144
  }
@@ -52,8 +52,8 @@ const _resolveRequest = (requestScope) => (request) => {
52
52
  !request.parentRequest.target.matchesArray(request.target.serviceIdentifier);
53
53
  if (targetIsAnArray && targetParentIsNotAnArray) {
54
54
  return childRequests.map((childRequest) => {
55
- const _f = _resolveRequest(requestScope);
56
- return _f(childRequest);
55
+ const resolveRequest = _resolveRequest(requestScope);
56
+ return resolveRequest(childRequest);
57
57
  });
58
58
  }
59
59
  else {
@@ -126,7 +126,8 @@ function _onActivation(request, binding, resolved) {
126
126
  result = _activateContainer(activationsIterator, context, result);
127
127
  }
128
128
  containersIteratorResult = containersIterator.next();
129
- } while (containersIteratorResult.done !== true && !(0, planner_1.getBindingDictionary)(container).hasKey(request.serviceIdentifier));
129
+ } while (containersIteratorResult.done !== true &&
130
+ !(0, planner_1.getBindingDictionary)(container).hasKey(request.serviceIdentifier));
130
131
  return result;
131
132
  }
132
133
  const _bindingActivation = (context, binding, previousResult) => {
@@ -141,7 +142,7 @@ const _bindingActivation = (context, binding, previousResult) => {
141
142
  };
142
143
  const _activateContainer = (activationsIterator, context, result) => {
143
144
  let activation = activationsIterator.next();
144
- while (!activation.done) {
145
+ while (activation.done !== true) {
145
146
  result = activation.value(context, result);
146
147
  if ((0, async_1.isPromise)(result)) {
147
148
  return _activateContainerAsync(activationsIterator, context, result);
@@ -153,7 +154,7 @@ const _activateContainer = (activationsIterator, context, result) => {
153
154
  const _activateContainerAsync = (activationsIterator, context, resultPromise) => __awaiter(void 0, void 0, void 0, function* () {
154
155
  let result = yield resultPromise;
155
156
  let activation = activationsIterator.next();
156
- while (!activation.done) {
157
+ while (activation.done !== true) {
157
158
  result = yield activation.value(context, result);
158
159
  activation = activationsIterator.next();
159
160
  }
@@ -161,7 +162,9 @@ const _activateContainerAsync = (activationsIterator, context, resultPromise) =>
161
162
  });
162
163
  const _getContainerActivationsForService = (container, serviceIdentifier) => {
163
164
  const activations = container._activations;
164
- return activations.hasKey(serviceIdentifier) ? activations.get(serviceIdentifier).values() : [].values();
165
+ return activations.hasKey(serviceIdentifier)
166
+ ? activations.get(serviceIdentifier).values()
167
+ : [].values();
165
168
  };
166
169
  const _getContainersIterator = (container) => {
167
170
  const containersStack = [container];
@@ -185,6 +188,6 @@ const _getContainersIterator = (container) => {
185
188
  return containersIterator;
186
189
  };
187
190
  function resolve(context) {
188
- const _f = _resolveRequest(context.plan.rootRequest.requestScope);
189
- return _f(context.plan.rootRequest);
191
+ const resolveRequestFunction = _resolveRequest(context.plan.rootRequest.requestScope);
192
+ return resolveRequestFunction(context.plan.rootRequest);
190
193
  }
@@ -13,7 +13,7 @@ exports.saveToScope = exports.tryGetFromScope = void 0;
13
13
  const literal_types_1 = require("../constants/literal_types");
14
14
  const async_1 = require("../utils/async");
15
15
  const tryGetFromScope = (requestScope, binding) => {
16
- if ((binding.scope === literal_types_1.BindingScopeEnum.Singleton) && binding.activated) {
16
+ if (binding.scope === literal_types_1.BindingScopeEnum.Singleton && binding.activated) {
17
17
  return binding.cache;
18
18
  }
19
19
  if (binding.scope === literal_types_1.BindingScopeEnum.Request &&
@@ -38,10 +38,11 @@ class BindingToSyntax {
38
38
  return new binding_in_when_on_syntax_1.BindingInWhenOnSyntax(this._binding);
39
39
  }
40
40
  toSelf() {
41
- if (typeof this._binding.serviceIdentifier !== "function") {
42
- throw new Error(`${ERROR_MSGS.INVALID_TO_SELF_VALUE}`);
41
+ if (typeof this._binding.serviceIdentifier !== 'function') {
42
+ throw new Error(ERROR_MSGS.INVALID_TO_SELF_VALUE);
43
43
  }
44
- const self = this._binding.serviceIdentifier;
44
+ const self = this._binding
45
+ .serviceIdentifier;
45
46
  return this.to(self);
46
47
  }
47
48
  toConstantValue(value) {
@@ -72,7 +73,7 @@ class BindingToSyntax {
72
73
  return new binding_when_on_syntax_1.BindingWhenOnSyntax(this._binding);
73
74
  }
74
75
  toFunction(func) {
75
- if (typeof func !== "function") {
76
+ if (typeof func !== 'function') {
76
77
  throw new Error(ERROR_MSGS.INVALID_FUNCTION_BINDING);
77
78
  }
78
79
  const bindingWhenOnSyntax = this.toConstantValue(func);
@@ -20,9 +20,9 @@ class BindingWhenSyntax {
20
20
  if (request === null) {
21
21
  return false;
22
22
  }
23
- const targetIsDefault = (request.target !== null) &&
24
- (!request.target.isNamed()) &&
25
- (!request.target.isTagged());
23
+ const targetIsDefault = request.target !== null &&
24
+ !request.target.isNamed() &&
25
+ !request.target.isTagged();
26
26
  return targetIsDefault;
27
27
  };
28
28
  return new binding_on_syntax_1.BindingOnSyntax(this._binding);
@@ -48,7 +48,8 @@ class BindingWhenSyntax {
48
48
  return new binding_on_syntax_1.BindingOnSyntax(this._binding);
49
49
  }
50
50
  whenNoAncestorIs(ancestor) {
51
- this._binding.constraint = (request) => request !== null && !(0, constraint_helpers_1.traverseAncerstors)(request, (0, constraint_helpers_1.typeConstraint)(ancestor));
51
+ this._binding.constraint = (request) => request !== null &&
52
+ !(0, constraint_helpers_1.traverseAncerstors)(request, (0, constraint_helpers_1.typeConstraint)(ancestor));
52
53
  return new binding_on_syntax_1.BindingOnSyntax(this._binding);
53
54
  }
54
55
  whenAnyAncestorNamed(name) {
@@ -60,19 +61,23 @@ class BindingWhenSyntax {
60
61
  return new binding_on_syntax_1.BindingOnSyntax(this._binding);
61
62
  }
62
63
  whenAnyAncestorTagged(tag, value) {
63
- this._binding.constraint = (request) => request !== null && (0, constraint_helpers_1.traverseAncerstors)(request, (0, constraint_helpers_1.taggedConstraint)(tag)(value));
64
+ this._binding.constraint = (request) => request !== null &&
65
+ (0, constraint_helpers_1.traverseAncerstors)(request, (0, constraint_helpers_1.taggedConstraint)(tag)(value));
64
66
  return new binding_on_syntax_1.BindingOnSyntax(this._binding);
65
67
  }
66
68
  whenNoAncestorTagged(tag, value) {
67
- this._binding.constraint = (request) => request !== null && !(0, constraint_helpers_1.traverseAncerstors)(request, (0, constraint_helpers_1.taggedConstraint)(tag)(value));
69
+ this._binding.constraint = (request) => request !== null &&
70
+ !(0, constraint_helpers_1.traverseAncerstors)(request, (0, constraint_helpers_1.taggedConstraint)(tag)(value));
68
71
  return new binding_on_syntax_1.BindingOnSyntax(this._binding);
69
72
  }
70
73
  whenAnyAncestorMatches(constraint) {
71
- this._binding.constraint = (request) => request !== null && (0, constraint_helpers_1.traverseAncerstors)(request, constraint);
74
+ this._binding.constraint = (request) => request !== null &&
75
+ (0, constraint_helpers_1.traverseAncerstors)(request, constraint);
72
76
  return new binding_on_syntax_1.BindingOnSyntax(this._binding);
73
77
  }
74
78
  whenNoAncestorMatches(constraint) {
75
- this._binding.constraint = (request) => request !== null && !(0, constraint_helpers_1.traverseAncerstors)(request, constraint);
79
+ this._binding.constraint = (request) => request !== null &&
80
+ !(0, constraint_helpers_1.traverseAncerstors)(request, constraint);
76
81
  return new binding_on_syntax_1.BindingOnSyntax(this._binding);
77
82
  }
78
83
  }
@@ -37,7 +37,9 @@ const traverseAncerstors = (request, constraint) => {
37
37
  };
38
38
  exports.traverseAncerstors = traverseAncerstors;
39
39
  const taggedConstraint = (key) => (value) => {
40
- const constraint = (request) => request !== null && request.target !== null && request.target.matchesTag(key)(value);
40
+ const constraint = (request) => request !== null &&
41
+ request.target !== null &&
42
+ request.target.matchesTag(key)(value);
41
43
  constraint.metaData = new metadata_1.Metadata(key, value);
42
44
  return constraint;
43
45
  };
@@ -49,8 +51,7 @@ const typeConstraint = (type) => (request) => {
49
51
  if (request !== null) {
50
52
  binding = request.bindings[0];
51
53
  if (typeof type === 'string') {
52
- const serviceIdentifier = binding.serviceIdentifier;
53
- return serviceIdentifier === type;
54
+ return binding.serviceIdentifier === type;
54
55
  }
55
56
  else {
56
57
  const constructor = request.bindings[0].implementationType;