inversify 6.0.2 → 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 (273) hide show
  1. package/CHANGELOG.md +95 -81
  2. package/LICENSE +22 -22
  3. package/README.md +311 -309
  4. package/amd/annotation/decorator_utils.js +119 -114
  5. package/amd/annotation/inject.js +31 -27
  6. package/amd/annotation/inject_base.js +16 -17
  7. package/amd/annotation/injectable.js +40 -37
  8. package/amd/annotation/lazy_service_identifier.js +4 -15
  9. package/amd/annotation/multi_inject.js +31 -27
  10. package/amd/annotation/named.js +32 -29
  11. package/amd/annotation/optional.js +32 -29
  12. package/amd/annotation/post_construct.js +32 -28
  13. package/amd/annotation/pre_destroy.js +32 -28
  14. package/amd/annotation/property_event_decorator.js +16 -17
  15. package/amd/annotation/tagged.js +8 -9
  16. package/amd/annotation/target_name.js +35 -32
  17. package/amd/annotation/unmanaged.js +35 -32
  18. package/amd/bindings/binding.js +40 -39
  19. package/amd/bindings/binding_count.js +11 -10
  20. package/amd/constants/error_msgs.js +74 -64
  21. package/amd/constants/literal_types.js +28 -28
  22. package/amd/constants/metadata_keys.js +28 -28
  23. package/amd/container/container.js +762 -719
  24. package/amd/container/container_module.js +21 -21
  25. package/amd/container/container_snapshot.js +20 -20
  26. package/amd/container/lookup.js +132 -127
  27. package/amd/container/module_activation_store.js +51 -53
  28. package/amd/interfaces/interfaces.js +4 -10
  29. package/amd/inversify.js +57 -55
  30. package/amd/planning/context.js +19 -19
  31. package/amd/planning/metadata.js +45 -41
  32. package/amd/planning/metadata_reader.js +49 -43
  33. package/amd/planning/plan.js +13 -13
  34. package/amd/planning/planner.js +184 -163
  35. package/amd/planning/queryable_string.js +33 -30
  36. package/amd/planning/reflection_utils.js +55 -157
  37. package/amd/planning/request.js +24 -26
  38. package/amd/planning/target.js +111 -101
  39. package/amd/resolution/instantiation.js +219 -211
  40. package/amd/resolution/resolver.js +234 -222
  41. package/amd/scope/scope.js +93 -93
  42. package/amd/syntax/binding_in_syntax.js +24 -24
  43. package/amd/syntax/binding_in_when_on_syntax.js +75 -75
  44. package/amd/syntax/binding_on_syntax.js +20 -20
  45. package/amd/syntax/binding_to_syntax.js +116 -105
  46. package/amd/syntax/binding_when_on_syntax.js +65 -65
  47. package/amd/syntax/binding_when_syntax.js +107 -102
  48. package/amd/syntax/constraint_helpers.js +66 -61
  49. package/amd/utils/async.js +17 -17
  50. package/amd/utils/binding_utils.js +86 -77
  51. package/amd/utils/clonable.js +11 -12
  52. package/amd/utils/exceptions.js +46 -42
  53. package/amd/utils/factory_type.js +11 -11
  54. package/amd/utils/id.js +9 -10
  55. package/amd/utils/js.js +18 -19
  56. package/amd/utils/serialization.js +135 -129
  57. package/es/annotation/decorator_utils.js +90 -88
  58. package/es/annotation/inject.js +4 -4
  59. package/es/annotation/inject_base.js +14 -14
  60. package/es/annotation/injectable.js +13 -13
  61. package/es/annotation/lazy_service_identifier.js +1 -10
  62. package/es/annotation/multi_inject.js +4 -4
  63. package/es/annotation/named.js +7 -7
  64. package/es/annotation/optional.js +7 -7
  65. package/es/annotation/post_construct.js +5 -5
  66. package/es/annotation/pre_destroy.js +5 -5
  67. package/es/annotation/property_event_decorator.js +13 -13
  68. package/es/annotation/tagged.js +6 -6
  69. package/es/annotation/target_name.js +10 -10
  70. package/es/annotation/unmanaged.js +10 -10
  71. package/es/bindings/binding.js +37 -36
  72. package/es/bindings/binding_count.js +6 -5
  73. package/es/constants/error_msgs.js +62 -52
  74. package/es/constants/literal_types.js +21 -21
  75. package/es/constants/metadata_keys.js +23 -23
  76. package/es/container/container.js +746 -707
  77. package/es/container/container_module.js +17 -17
  78. package/es/container/container_snapshot.js +15 -15
  79. package/es/container/lookup.js +105 -104
  80. package/es/container/module_activation_store.js +47 -49
  81. package/es/interfaces/interfaces.js +1 -5
  82. package/es/inversify.js +23 -25
  83. package/es/planning/context.js +15 -15
  84. package/es/planning/metadata.js +17 -17
  85. package/es/planning/metadata_reader.js +21 -19
  86. package/es/planning/plan.js +8 -8
  87. package/es/planning/planner.js +165 -147
  88. package/es/planning/queryable_string.js +28 -25
  89. package/es/planning/reflection_utils.js +27 -135
  90. package/es/planning/request.js +20 -22
  91. package/es/planning/target.js +87 -81
  92. package/es/resolution/instantiation.js +195 -190
  93. package/es/resolution/resolver.js +214 -205
  94. package/es/scope/scope.js +88 -88
  95. package/es/syntax/binding_in_syntax.js +21 -21
  96. package/es/syntax/binding_in_when_on_syntax.js +73 -73
  97. package/es/syntax/binding_on_syntax.js +16 -16
  98. package/es/syntax/binding_to_syntax.js +91 -84
  99. package/es/syntax/binding_when_on_syntax.js +62 -62
  100. package/es/syntax/binding_when_syntax.js +104 -99
  101. package/es/syntax/constraint_helpers.js +36 -35
  102. package/es/utils/async.js +12 -11
  103. package/es/utils/binding_utils.js +58 -53
  104. package/es/utils/clonable.js +7 -7
  105. package/es/utils/exceptions.js +16 -16
  106. package/es/utils/factory_type.js +6 -6
  107. package/es/utils/id.js +5 -5
  108. package/es/utils/js.js +13 -13
  109. package/es/utils/serialization.js +103 -100
  110. package/es6/annotation/decorator_utils.js +114 -109
  111. package/es6/annotation/inject.js +30 -26
  112. package/es6/annotation/inject_base.js +17 -18
  113. package/es6/annotation/injectable.js +38 -35
  114. package/es6/annotation/lazy_service_identifier.js +2 -12
  115. package/es6/annotation/multi_inject.js +30 -26
  116. package/es6/annotation/named.js +32 -29
  117. package/es6/annotation/optional.js +32 -29
  118. package/es6/annotation/post_construct.js +31 -27
  119. package/es6/annotation/pre_destroy.js +31 -27
  120. package/es6/annotation/property_event_decorator.js +15 -16
  121. package/es6/annotation/tagged.js +8 -9
  122. package/es6/annotation/target_name.js +35 -32
  123. package/es6/annotation/unmanaged.js +35 -32
  124. package/es6/bindings/binding.js +39 -38
  125. package/es6/bindings/binding_count.js +9 -8
  126. package/es6/constants/error_msgs.js +58 -53
  127. package/es6/constants/literal_types.js +26 -26
  128. package/es6/constants/metadata_keys.js +26 -26
  129. package/es6/container/container.js +541 -520
  130. package/es6/container/container_module.js +18 -18
  131. package/es6/container/container_snapshot.js +15 -15
  132. package/es6/container/lookup.js +125 -120
  133. package/es6/container/module_activation_store.js +49 -51
  134. package/es6/interfaces/interfaces.js +2 -8
  135. package/es6/inversify.js +76 -76
  136. package/es6/planning/context.js +17 -17
  137. package/es6/planning/metadata.js +42 -38
  138. package/es6/planning/metadata_reader.js +44 -38
  139. package/es6/planning/plan.js +10 -10
  140. package/es6/planning/planner.js +191 -170
  141. package/es6/planning/queryable_string.js +30 -27
  142. package/es6/planning/reflection_utils.js +53 -155
  143. package/es6/planning/request.js +22 -24
  144. package/es6/planning/target.js +105 -99
  145. package/es6/resolution/instantiation.js +158 -151
  146. package/es6/resolution/resolver.js +193 -187
  147. package/es6/scope/scope.js +57 -57
  148. package/es6/syntax/binding_in_syntax.js +23 -23
  149. package/es6/syntax/binding_in_when_on_syntax.js +75 -75
  150. package/es6/syntax/binding_on_syntax.js +18 -18
  151. package/es6/syntax/binding_to_syntax.js +110 -105
  152. package/es6/syntax/binding_when_on_syntax.js +64 -64
  153. package/es6/syntax/binding_when_syntax.js +84 -79
  154. package/es6/syntax/constraint_helpers.js +63 -58
  155. package/es6/utils/async.js +15 -15
  156. package/es6/utils/binding_utils.js +79 -68
  157. package/es6/utils/clonable.js +9 -10
  158. package/es6/utils/exceptions.js +44 -40
  159. package/es6/utils/factory_type.js +9 -9
  160. package/es6/utils/id.js +7 -8
  161. package/es6/utils/js.js +15 -16
  162. package/es6/utils/serialization.js +132 -126
  163. package/lib/annotation/decorator_utils.d.ts +16 -16
  164. package/lib/annotation/decorator_utils.js +118 -113
  165. package/lib/annotation/inject.d.ts +5 -2
  166. package/lib/annotation/inject.js +30 -26
  167. package/lib/annotation/inject_base.d.ts +4 -3
  168. package/lib/annotation/inject_base.js +17 -18
  169. package/lib/annotation/injectable.d.ts +2 -2
  170. package/lib/annotation/injectable.js +38 -35
  171. package/lib/annotation/lazy_service_identifier.d.ts +3 -7
  172. package/lib/annotation/lazy_service_identifier.js +2 -13
  173. package/lib/annotation/multi_inject.d.ts +5 -2
  174. package/lib/annotation/multi_inject.js +30 -26
  175. package/lib/annotation/named.d.ts +2 -2
  176. package/lib/annotation/named.js +32 -29
  177. package/lib/annotation/optional.d.ts +2 -2
  178. package/lib/annotation/optional.js +32 -29
  179. package/lib/annotation/post_construct.d.ts +4 -4
  180. package/lib/annotation/post_construct.js +31 -27
  181. package/lib/annotation/pre_destroy.d.ts +4 -4
  182. package/lib/annotation/pre_destroy.js +31 -27
  183. package/lib/annotation/property_event_decorator.d.ts +4 -4
  184. package/lib/annotation/property_event_decorator.js +15 -16
  185. package/lib/annotation/tagged.d.ts +2 -2
  186. package/lib/annotation/tagged.js +8 -9
  187. package/lib/annotation/target_name.d.ts +3 -3
  188. package/lib/annotation/target_name.js +35 -32
  189. package/lib/annotation/unmanaged.d.ts +3 -3
  190. package/lib/annotation/unmanaged.js +35 -32
  191. package/lib/bindings/binding.d.ts +20 -20
  192. package/lib/bindings/binding.js +40 -39
  193. package/lib/bindings/binding_count.d.ts +5 -5
  194. package/lib/bindings/binding_count.js +9 -8
  195. package/lib/constants/error_msgs.d.ts +30 -32
  196. package/lib/constants/error_msgs.js +72 -62
  197. package/lib/constants/literal_types.d.ts +5 -5
  198. package/lib/constants/literal_types.js +26 -26
  199. package/lib/constants/metadata_keys.d.ts +13 -13
  200. package/lib/constants/metadata_keys.js +26 -26
  201. package/lib/container/container.d.ts +73 -73
  202. package/lib/container/container.js +772 -729
  203. package/lib/container/container_module.d.ts +11 -11
  204. package/lib/container/container_module.js +20 -20
  205. package/lib/container/container_snapshot.d.ts +10 -10
  206. package/lib/container/container_snapshot.js +18 -18
  207. package/lib/container/lookup.d.ts +17 -16
  208. package/lib/container/lookup.js +131 -126
  209. package/lib/container/module_activation_store.d.ts +10 -10
  210. package/lib/container/module_activation_store.js +50 -52
  211. package/lib/interfaces/interfaces.d.ts +269 -284
  212. package/lib/interfaces/interfaces.js +2 -8
  213. package/lib/inversify.d.ts +24 -25
  214. package/lib/inversify.js +76 -76
  215. package/lib/planning/context.d.ts +11 -11
  216. package/lib/planning/context.js +18 -18
  217. package/lib/planning/metadata.d.ts +8 -8
  218. package/lib/planning/metadata.js +43 -39
  219. package/lib/planning/metadata_reader.d.ts +6 -6
  220. package/lib/planning/metadata_reader.js +47 -41
  221. package/lib/planning/plan.d.ts +7 -7
  222. package/lib/planning/plan.js +11 -11
  223. package/lib/planning/planner.d.ts +5 -5
  224. package/lib/planning/planner.js +192 -171
  225. package/lib/planning/queryable_string.d.ts +10 -11
  226. package/lib/planning/queryable_string.js +31 -28
  227. package/lib/planning/reflection_utils.d.ts +5 -5
  228. package/lib/planning/reflection_utils.js +55 -159
  229. package/lib/planning/request.d.ts +14 -14
  230. package/lib/planning/request.js +23 -25
  231. package/lib/planning/target.d.ts +23 -23
  232. package/lib/planning/target.js +113 -103
  233. package/lib/resolution/instantiation.d.ts +3 -3
  234. package/lib/resolution/instantiation.js +220 -212
  235. package/lib/resolution/resolver.d.ts +3 -3
  236. package/lib/resolution/resolver.js +239 -227
  237. package/lib/scope/scope.d.ts +3 -3
  238. package/lib/scope/scope.js +93 -93
  239. package/lib/syntax/binding_in_syntax.d.ts +9 -9
  240. package/lib/syntax/binding_in_syntax.js +24 -24
  241. package/lib/syntax/binding_in_when_on_syntax.d.ts +29 -29
  242. package/lib/syntax/binding_in_when_on_syntax.js +76 -76
  243. package/lib/syntax/binding_on_syntax.d.ts +8 -8
  244. package/lib/syntax/binding_on_syntax.js +19 -19
  245. package/lib/syntax/binding_to_syntax.d.ts +18 -18
  246. package/lib/syntax/binding_to_syntax.js +117 -106
  247. package/lib/syntax/binding_when_on_syntax.d.ts +25 -25
  248. package/lib/syntax/binding_when_on_syntax.js +65 -65
  249. package/lib/syntax/binding_when_syntax.d.ts +21 -21
  250. package/lib/syntax/binding_when_syntax.js +107 -102
  251. package/lib/syntax/constraint_helpers.d.ts +6 -6
  252. package/lib/syntax/constraint_helpers.js +65 -60
  253. package/lib/tsconfig.tsbuildinfo +1 -1
  254. package/lib/utils/async.d.ts +3 -3
  255. package/lib/utils/async.js +15 -15
  256. package/lib/utils/binding_utils.d.ts +4 -4
  257. package/lib/utils/binding_utils.js +87 -78
  258. package/lib/utils/clonable.d.ts +3 -3
  259. package/lib/utils/clonable.js +9 -10
  260. package/lib/utils/exceptions.d.ts +2 -2
  261. package/lib/utils/exceptions.js +44 -40
  262. package/lib/utils/factory_type.d.ts +5 -5
  263. package/lib/utils/factory_type.js +9 -9
  264. package/lib/utils/id.d.ts +2 -2
  265. package/lib/utils/id.js +7 -8
  266. package/lib/utils/js.d.ts +1 -1
  267. package/lib/utils/js.js +16 -17
  268. package/lib/utils/serialization.d.ts +10 -10
  269. package/lib/utils/serialization.js +133 -127
  270. package/package.json +74 -61
  271. package/.nyc_output/16b95af9-19b9-451c-8475-9a8585677128.json +0 -1
  272. package/.nyc_output/processinfo/16b95af9-19b9-451c-8475-9a8585677128.json +0 -1
  273. package/.nyc_output/processinfo/index.json +0 -1
@@ -1,707 +1,746 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
- return new (P || (P = Promise))(function (resolve, reject) {
15
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
- step((generator = generator.apply(thisArg, _arguments || [])).next());
19
- });
20
- };
21
- var __generator = (this && this.__generator) || function (thisArg, body) {
22
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
- function verb(n) { return function (v) { return step([n, v]); }; }
25
- function step(op) {
26
- if (f) throw new TypeError("Generator is already executing.");
27
- while (_) try {
28
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
- if (y = 0, t) op = [op[0] & 2, t.value];
30
- switch (op[0]) {
31
- case 0: case 1: t = op; break;
32
- case 4: _.label++; return { value: op[1], done: false };
33
- case 5: _.label++; y = op[1]; op = [0]; continue;
34
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
- default:
36
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
- if (t[2]) _.ops.pop();
41
- _.trys.pop(); continue;
42
- }
43
- op = body.call(thisArg, _);
44
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
- }
47
- };
48
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
49
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
50
- if (ar || !(i in from)) {
51
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
52
- ar[i] = from[i];
53
- }
54
- }
55
- return to.concat(ar || Array.prototype.slice.call(from));
56
- };
57
- import { Binding } from '../bindings/binding';
58
- import * as ERROR_MSGS from '../constants/error_msgs';
59
- import { BindingScopeEnum, TargetTypeEnum } from '../constants/literal_types';
60
- import * as METADATA_KEY from '../constants/metadata_keys';
61
- import { MetadataReader } from '../planning/metadata_reader';
62
- import { createMockRequest, getBindingDictionary, plan } from '../planning/planner';
63
- import { resolve } from '../resolution/resolver';
64
- import { BindingToSyntax } from '../syntax/binding_to_syntax';
65
- import { isPromise, isPromiseOrContainsPromise } from '../utils/async';
66
- import { id } from '../utils/id';
67
- import { getServiceIdentifierAsString } from '../utils/serialization';
68
- import { ContainerSnapshot } from './container_snapshot';
69
- import { Lookup } from './lookup';
70
- import { ModuleActivationStore } from './module_activation_store';
71
- var Container = (function () {
72
- function Container(containerOptions) {
73
- var options = containerOptions || {};
74
- if (typeof options !== 'object') {
75
- throw new Error("" + ERROR_MSGS.CONTAINER_OPTIONS_MUST_BE_AN_OBJECT);
76
- }
77
- if (options.defaultScope === undefined) {
78
- options.defaultScope = BindingScopeEnum.Transient;
79
- }
80
- else if (options.defaultScope !== BindingScopeEnum.Singleton &&
81
- options.defaultScope !== BindingScopeEnum.Transient &&
82
- options.defaultScope !== BindingScopeEnum.Request) {
83
- throw new Error("" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_DEFAULT_SCOPE);
84
- }
85
- if (options.autoBindInjectable === undefined) {
86
- options.autoBindInjectable = false;
87
- }
88
- else if (typeof options.autoBindInjectable !== 'boolean') {
89
- throw new Error("" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_AUTO_BIND_INJECTABLE);
90
- }
91
- if (options.skipBaseClassChecks === undefined) {
92
- options.skipBaseClassChecks = false;
93
- }
94
- else if (typeof options.skipBaseClassChecks !== 'boolean') {
95
- throw new Error("" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_SKIP_BASE_CHECK);
96
- }
97
- this.options = {
98
- autoBindInjectable: options.autoBindInjectable,
99
- defaultScope: options.defaultScope,
100
- skipBaseClassChecks: options.skipBaseClassChecks
101
- };
102
- this.id = id();
103
- this._bindingDictionary = new Lookup();
104
- this._snapshots = [];
105
- this._middleware = null;
106
- this._activations = new Lookup();
107
- this._deactivations = new Lookup();
108
- this.parent = null;
109
- this._metadataReader = new MetadataReader();
110
- this._moduleActivationStore = new ModuleActivationStore();
111
- }
112
- Container.merge = function (container1, container2) {
113
- var containers = [];
114
- for (var _i = 2; _i < arguments.length; _i++) {
115
- containers[_i - 2] = arguments[_i];
116
- }
117
- var container = new Container();
118
- var targetContainers = __spreadArray([container1, container2], containers, true).map(function (targetContainer) { return getBindingDictionary(targetContainer); });
119
- var bindingDictionary = getBindingDictionary(container);
120
- function copyDictionary(origin, destination) {
121
- origin.traverse(function (_key, value) {
122
- value.forEach(function (binding) {
123
- destination.add(binding.serviceIdentifier, binding.clone());
124
- });
125
- });
126
- }
127
- targetContainers.forEach(function (targetBindingDictionary) {
128
- copyDictionary(targetBindingDictionary, bindingDictionary);
129
- });
130
- return container;
131
- };
132
- Container.prototype.load = function () {
133
- var modules = [];
134
- for (var _i = 0; _i < arguments.length; _i++) {
135
- modules[_i] = arguments[_i];
136
- }
137
- var getHelpers = this._getContainerModuleHelpersFactory();
138
- for (var _a = 0, modules_1 = modules; _a < modules_1.length; _a++) {
139
- var currentModule = modules_1[_a];
140
- var containerModuleHelpers = getHelpers(currentModule.id);
141
- currentModule.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction, containerModuleHelpers.unbindAsyncFunction, containerModuleHelpers.onActivationFunction, containerModuleHelpers.onDeactivationFunction);
142
- }
143
- };
144
- Container.prototype.loadAsync = function () {
145
- var modules = [];
146
- for (var _i = 0; _i < arguments.length; _i++) {
147
- modules[_i] = arguments[_i];
148
- }
149
- return __awaiter(this, void 0, void 0, function () {
150
- var getHelpers, _a, modules_2, currentModule, containerModuleHelpers;
151
- return __generator(this, function (_b) {
152
- switch (_b.label) {
153
- case 0:
154
- getHelpers = this._getContainerModuleHelpersFactory();
155
- _a = 0, modules_2 = modules;
156
- _b.label = 1;
157
- case 1:
158
- if (!(_a < modules_2.length)) return [3, 4];
159
- currentModule = modules_2[_a];
160
- containerModuleHelpers = getHelpers(currentModule.id);
161
- return [4, currentModule.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction, containerModuleHelpers.unbindAsyncFunction, containerModuleHelpers.onActivationFunction, containerModuleHelpers.onDeactivationFunction)];
162
- case 2:
163
- _b.sent();
164
- _b.label = 3;
165
- case 3:
166
- _a++;
167
- return [3, 1];
168
- case 4: return [2];
169
- }
170
- });
171
- });
172
- };
173
- Container.prototype.unload = function () {
174
- var _this = this;
175
- var modules = [];
176
- for (var _i = 0; _i < arguments.length; _i++) {
177
- modules[_i] = arguments[_i];
178
- }
179
- modules.forEach(function (module) {
180
- var deactivations = _this._removeModuleBindings(module.id);
181
- _this._deactivateSingletons(deactivations);
182
- _this._removeModuleHandlers(module.id);
183
- });
184
- };
185
- Container.prototype.unloadAsync = function () {
186
- var modules = [];
187
- for (var _i = 0; _i < arguments.length; _i++) {
188
- modules[_i] = arguments[_i];
189
- }
190
- return __awaiter(this, void 0, void 0, function () {
191
- var _a, modules_3, module_1, deactivations;
192
- return __generator(this, function (_b) {
193
- switch (_b.label) {
194
- case 0:
195
- _a = 0, modules_3 = modules;
196
- _b.label = 1;
197
- case 1:
198
- if (!(_a < modules_3.length)) return [3, 4];
199
- module_1 = modules_3[_a];
200
- deactivations = this._removeModuleBindings(module_1.id);
201
- return [4, this._deactivateSingletonsAsync(deactivations)];
202
- case 2:
203
- _b.sent();
204
- this._removeModuleHandlers(module_1.id);
205
- _b.label = 3;
206
- case 3:
207
- _a++;
208
- return [3, 1];
209
- case 4: return [2];
210
- }
211
- });
212
- });
213
- };
214
- Container.prototype.bind = function (serviceIdentifier) {
215
- var scope = this.options.defaultScope || BindingScopeEnum.Transient;
216
- var binding = new Binding(serviceIdentifier, scope);
217
- this._bindingDictionary.add(serviceIdentifier, binding);
218
- return new BindingToSyntax(binding);
219
- };
220
- Container.prototype.rebind = function (serviceIdentifier) {
221
- this.unbind(serviceIdentifier);
222
- return this.bind(serviceIdentifier);
223
- };
224
- Container.prototype.rebindAsync = function (serviceIdentifier) {
225
- return __awaiter(this, void 0, void 0, function () {
226
- return __generator(this, function (_a) {
227
- switch (_a.label) {
228
- case 0: return [4, this.unbindAsync(serviceIdentifier)];
229
- case 1:
230
- _a.sent();
231
- return [2, this.bind(serviceIdentifier)];
232
- }
233
- });
234
- });
235
- };
236
- Container.prototype.unbind = function (serviceIdentifier) {
237
- if (this._bindingDictionary.hasKey(serviceIdentifier)) {
238
- var bindings = this._bindingDictionary.get(serviceIdentifier);
239
- this._deactivateSingletons(bindings);
240
- }
241
- this._removeServiceFromDictionary(serviceIdentifier);
242
- };
243
- Container.prototype.unbindAsync = function (serviceIdentifier) {
244
- return __awaiter(this, void 0, void 0, function () {
245
- var bindings;
246
- return __generator(this, function (_a) {
247
- switch (_a.label) {
248
- case 0:
249
- if (!this._bindingDictionary.hasKey(serviceIdentifier)) return [3, 2];
250
- bindings = this._bindingDictionary.get(serviceIdentifier);
251
- return [4, this._deactivateSingletonsAsync(bindings)];
252
- case 1:
253
- _a.sent();
254
- _a.label = 2;
255
- case 2:
256
- this._removeServiceFromDictionary(serviceIdentifier);
257
- return [2];
258
- }
259
- });
260
- });
261
- };
262
- Container.prototype.unbindAll = function () {
263
- var _this = this;
264
- this._bindingDictionary.traverse(function (_key, value) {
265
- _this._deactivateSingletons(value);
266
- });
267
- this._bindingDictionary = new Lookup();
268
- };
269
- Container.prototype.unbindAllAsync = function () {
270
- return __awaiter(this, void 0, void 0, function () {
271
- var promises;
272
- var _this = this;
273
- return __generator(this, function (_a) {
274
- switch (_a.label) {
275
- case 0:
276
- promises = [];
277
- this._bindingDictionary.traverse(function (_key, value) {
278
- promises.push(_this._deactivateSingletonsAsync(value));
279
- });
280
- return [4, Promise.all(promises)];
281
- case 1:
282
- _a.sent();
283
- this._bindingDictionary = new Lookup();
284
- return [2];
285
- }
286
- });
287
- });
288
- };
289
- Container.prototype.onActivation = function (serviceIdentifier, onActivation) {
290
- this._activations.add(serviceIdentifier, onActivation);
291
- };
292
- Container.prototype.onDeactivation = function (serviceIdentifier, onDeactivation) {
293
- this._deactivations.add(serviceIdentifier, onDeactivation);
294
- };
295
- Container.prototype.isBound = function (serviceIdentifier) {
296
- var bound = this._bindingDictionary.hasKey(serviceIdentifier);
297
- if (!bound && this.parent) {
298
- bound = this.parent.isBound(serviceIdentifier);
299
- }
300
- return bound;
301
- };
302
- Container.prototype.isCurrentBound = function (serviceIdentifier) {
303
- return this._bindingDictionary.hasKey(serviceIdentifier);
304
- };
305
- Container.prototype.isBoundNamed = function (serviceIdentifier, named) {
306
- return this.isBoundTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);
307
- };
308
- Container.prototype.isBoundTagged = function (serviceIdentifier, key, value) {
309
- var bound = false;
310
- if (this._bindingDictionary.hasKey(serviceIdentifier)) {
311
- var bindings = this._bindingDictionary.get(serviceIdentifier);
312
- var request_1 = createMockRequest(this, serviceIdentifier, key, value);
313
- bound = bindings.some(function (b) { return b.constraint(request_1); });
314
- }
315
- if (!bound && this.parent) {
316
- bound = this.parent.isBoundTagged(serviceIdentifier, key, value);
317
- }
318
- return bound;
319
- };
320
- Container.prototype.snapshot = function () {
321
- this._snapshots.push(ContainerSnapshot.of(this._bindingDictionary.clone(), this._middleware, this._activations.clone(), this._deactivations.clone(), this._moduleActivationStore.clone()));
322
- };
323
- Container.prototype.restore = function () {
324
- var snapshot = this._snapshots.pop();
325
- if (snapshot === undefined) {
326
- throw new Error(ERROR_MSGS.NO_MORE_SNAPSHOTS_AVAILABLE);
327
- }
328
- this._bindingDictionary = snapshot.bindings;
329
- this._activations = snapshot.activations;
330
- this._deactivations = snapshot.deactivations;
331
- this._middleware = snapshot.middleware;
332
- this._moduleActivationStore = snapshot.moduleActivationStore;
333
- };
334
- Container.prototype.createChild = function (containerOptions) {
335
- var child = new Container(containerOptions || this.options);
336
- child.parent = this;
337
- return child;
338
- };
339
- Container.prototype.applyMiddleware = function () {
340
- var middlewares = [];
341
- for (var _i = 0; _i < arguments.length; _i++) {
342
- middlewares[_i] = arguments[_i];
343
- }
344
- var initial = (this._middleware) ? this._middleware : this._planAndResolve();
345
- this._middleware = middlewares.reduce(function (prev, curr) { return curr(prev); }, initial);
346
- };
347
- Container.prototype.applyCustomMetadataReader = function (metadataReader) {
348
- this._metadataReader = metadataReader;
349
- };
350
- Container.prototype.get = function (serviceIdentifier) {
351
- var getArgs = this._getNotAllArgs(serviceIdentifier, false);
352
- return this._getButThrowIfAsync(getArgs);
353
- };
354
- Container.prototype.getAsync = function (serviceIdentifier) {
355
- return __awaiter(this, void 0, void 0, function () {
356
- var getArgs;
357
- return __generator(this, function (_a) {
358
- getArgs = this._getNotAllArgs(serviceIdentifier, false);
359
- return [2, this._get(getArgs)];
360
- });
361
- });
362
- };
363
- Container.prototype.getTagged = function (serviceIdentifier, key, value) {
364
- var getArgs = this._getNotAllArgs(serviceIdentifier, false, key, value);
365
- return this._getButThrowIfAsync(getArgs);
366
- };
367
- Container.prototype.getTaggedAsync = function (serviceIdentifier, key, value) {
368
- return __awaiter(this, void 0, void 0, function () {
369
- var getArgs;
370
- return __generator(this, function (_a) {
371
- getArgs = this._getNotAllArgs(serviceIdentifier, false, key, value);
372
- return [2, this._get(getArgs)];
373
- });
374
- });
375
- };
376
- Container.prototype.getNamed = function (serviceIdentifier, named) {
377
- return this.getTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);
378
- };
379
- Container.prototype.getNamedAsync = function (serviceIdentifier, named) {
380
- return this.getTaggedAsync(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);
381
- };
382
- Container.prototype.getAll = function (serviceIdentifier) {
383
- var getArgs = this._getAllArgs(serviceIdentifier);
384
- return this._getButThrowIfAsync(getArgs);
385
- };
386
- Container.prototype.getAllAsync = function (serviceIdentifier) {
387
- var getArgs = this._getAllArgs(serviceIdentifier);
388
- return this._getAll(getArgs);
389
- };
390
- Container.prototype.getAllTagged = function (serviceIdentifier, key, value) {
391
- var getArgs = this._getNotAllArgs(serviceIdentifier, true, key, value);
392
- return this._getButThrowIfAsync(getArgs);
393
- };
394
- Container.prototype.getAllTaggedAsync = function (serviceIdentifier, key, value) {
395
- var getArgs = this._getNotAllArgs(serviceIdentifier, true, key, value);
396
- return this._getAll(getArgs);
397
- };
398
- Container.prototype.getAllNamed = function (serviceIdentifier, named) {
399
- return this.getAllTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);
400
- };
401
- Container.prototype.getAllNamedAsync = function (serviceIdentifier, named) {
402
- return this.getAllTaggedAsync(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);
403
- };
404
- Container.prototype.resolve = function (constructorFunction) {
405
- var isBound = this.isBound(constructorFunction);
406
- if (!isBound) {
407
- this.bind(constructorFunction).toSelf();
408
- }
409
- var resolved = this.get(constructorFunction);
410
- if (!isBound) {
411
- this.unbind(constructorFunction);
412
- }
413
- return resolved;
414
- };
415
- Container.prototype._preDestroy = function (constructor, instance) {
416
- var _a, _b;
417
- if (Reflect.hasMetadata(METADATA_KEY.PRE_DESTROY, constructor)) {
418
- var data = Reflect.getMetadata(METADATA_KEY.PRE_DESTROY, constructor);
419
- return (_b = (_a = instance)[data.value]) === null || _b === void 0 ? void 0 : _b.call(_a);
420
- }
421
- };
422
- Container.prototype._removeModuleHandlers = function (moduleId) {
423
- var moduleActivationsHandlers = this._moduleActivationStore.remove(moduleId);
424
- this._activations.removeIntersection(moduleActivationsHandlers.onActivations);
425
- this._deactivations.removeIntersection(moduleActivationsHandlers.onDeactivations);
426
- };
427
- Container.prototype._removeModuleBindings = function (moduleId) {
428
- return this._bindingDictionary.removeByCondition(function (binding) { return binding.moduleId === moduleId; });
429
- };
430
- Container.prototype._deactivate = function (binding, instance) {
431
- var _this = this;
432
- var constructor = Object.getPrototypeOf(instance).constructor;
433
- try {
434
- if (this._deactivations.hasKey(binding.serviceIdentifier)) {
435
- var result = this._deactivateContainer(instance, this._deactivations.get(binding.serviceIdentifier).values());
436
- if (isPromise(result)) {
437
- return this._handleDeactivationError(result.then(function () { return _this._propagateContainerDeactivationThenBindingAndPreDestroyAsync(binding, instance, constructor); }), constructor);
438
- }
439
- }
440
- var propagateDeactivationResult = this._propagateContainerDeactivationThenBindingAndPreDestroy(binding, instance, constructor);
441
- if (isPromise(propagateDeactivationResult)) {
442
- return this._handleDeactivationError(propagateDeactivationResult, constructor);
443
- }
444
- }
445
- catch (ex) {
446
- if (ex instanceof Error) {
447
- throw new Error(ERROR_MSGS.ON_DEACTIVATION_ERROR(constructor.name, ex.message));
448
- }
449
- }
450
- };
451
- Container.prototype._handleDeactivationError = function (asyncResult, constructor) {
452
- return __awaiter(this, void 0, void 0, function () {
453
- var ex_1;
454
- return __generator(this, function (_a) {
455
- switch (_a.label) {
456
- case 0:
457
- _a.trys.push([0, 2, , 3]);
458
- return [4, asyncResult];
459
- case 1:
460
- _a.sent();
461
- return [3, 3];
462
- case 2:
463
- ex_1 = _a.sent();
464
- if (ex_1 instanceof Error) {
465
- throw new Error(ERROR_MSGS.ON_DEACTIVATION_ERROR(constructor.name, ex_1.message));
466
- }
467
- return [3, 3];
468
- case 3: return [2];
469
- }
470
- });
471
- });
472
- };
473
- Container.prototype._deactivateContainer = function (instance, deactivationsIterator) {
474
- var _this = this;
475
- var deactivation = deactivationsIterator.next();
476
- while (deactivation.value) {
477
- var result = deactivation.value(instance);
478
- if (isPromise(result)) {
479
- return result.then(function () {
480
- return _this._deactivateContainerAsync(instance, deactivationsIterator);
481
- });
482
- }
483
- deactivation = deactivationsIterator.next();
484
- }
485
- };
486
- Container.prototype._deactivateContainerAsync = function (instance, deactivationsIterator) {
487
- return __awaiter(this, void 0, void 0, function () {
488
- var deactivation;
489
- return __generator(this, function (_a) {
490
- switch (_a.label) {
491
- case 0:
492
- deactivation = deactivationsIterator.next();
493
- _a.label = 1;
494
- case 1:
495
- if (!deactivation.value) return [3, 3];
496
- return [4, deactivation.value(instance)];
497
- case 2:
498
- _a.sent();
499
- deactivation = deactivationsIterator.next();
500
- return [3, 1];
501
- case 3: return [2];
502
- }
503
- });
504
- });
505
- };
506
- Container.prototype._getContainerModuleHelpersFactory = function () {
507
- var _this = this;
508
- var setModuleId = function (bindingToSyntax, moduleId) {
509
- bindingToSyntax._binding.moduleId = moduleId;
510
- };
511
- var getBindFunction = function (moduleId) {
512
- return function (serviceIdentifier) {
513
- var bindingToSyntax = _this.bind(serviceIdentifier);
514
- setModuleId(bindingToSyntax, moduleId);
515
- return bindingToSyntax;
516
- };
517
- };
518
- var getUnbindFunction = function () {
519
- return function (serviceIdentifier) {
520
- return _this.unbind(serviceIdentifier);
521
- };
522
- };
523
- var getUnbindAsyncFunction = function () {
524
- return function (serviceIdentifier) {
525
- return _this.unbindAsync(serviceIdentifier);
526
- };
527
- };
528
- var getIsboundFunction = function () {
529
- return function (serviceIdentifier) {
530
- return _this.isBound(serviceIdentifier);
531
- };
532
- };
533
- var getRebindFunction = function (moduleId) {
534
- return function (serviceIdentifier) {
535
- var bindingToSyntax = _this.rebind(serviceIdentifier);
536
- setModuleId(bindingToSyntax, moduleId);
537
- return bindingToSyntax;
538
- };
539
- };
540
- var getOnActivationFunction = function (moduleId) {
541
- return function (serviceIdentifier, onActivation) {
542
- _this._moduleActivationStore.addActivation(moduleId, serviceIdentifier, onActivation);
543
- _this.onActivation(serviceIdentifier, onActivation);
544
- };
545
- };
546
- var getOnDeactivationFunction = function (moduleId) {
547
- return function (serviceIdentifier, onDeactivation) {
548
- _this._moduleActivationStore.addDeactivation(moduleId, serviceIdentifier, onDeactivation);
549
- _this.onDeactivation(serviceIdentifier, onDeactivation);
550
- };
551
- };
552
- return function (mId) { return ({
553
- bindFunction: getBindFunction(mId),
554
- isboundFunction: getIsboundFunction(),
555
- onActivationFunction: getOnActivationFunction(mId),
556
- onDeactivationFunction: getOnDeactivationFunction(mId),
557
- rebindFunction: getRebindFunction(mId),
558
- unbindFunction: getUnbindFunction(),
559
- unbindAsyncFunction: getUnbindAsyncFunction()
560
- }); };
561
- };
562
- Container.prototype._getAll = function (getArgs) {
563
- return Promise.all(this._get(getArgs));
564
- };
565
- Container.prototype._get = function (getArgs) {
566
- var planAndResolveArgs = __assign(__assign({}, getArgs), { contextInterceptor: function (context) { return context; }, targetType: TargetTypeEnum.Variable });
567
- if (this._middleware) {
568
- var middlewareResult = this._middleware(planAndResolveArgs);
569
- if (middlewareResult === undefined || middlewareResult === null) {
570
- throw new Error(ERROR_MSGS.INVALID_MIDDLEWARE_RETURN);
571
- }
572
- return middlewareResult;
573
- }
574
- return this._planAndResolve()(planAndResolveArgs);
575
- };
576
- Container.prototype._getButThrowIfAsync = function (getArgs) {
577
- var result = this._get(getArgs);
578
- if (isPromiseOrContainsPromise(result)) {
579
- throw new Error(ERROR_MSGS.LAZY_IN_SYNC(getArgs.serviceIdentifier));
580
- }
581
- return result;
582
- };
583
- Container.prototype._getAllArgs = function (serviceIdentifier) {
584
- var getAllArgs = {
585
- avoidConstraints: true,
586
- isMultiInject: true,
587
- serviceIdentifier: serviceIdentifier,
588
- };
589
- return getAllArgs;
590
- };
591
- Container.prototype._getNotAllArgs = function (serviceIdentifier, isMultiInject, key, value) {
592
- var getNotAllArgs = {
593
- avoidConstraints: false,
594
- isMultiInject: isMultiInject,
595
- serviceIdentifier: serviceIdentifier,
596
- key: key,
597
- value: value,
598
- };
599
- return getNotAllArgs;
600
- };
601
- Container.prototype._planAndResolve = function () {
602
- var _this = this;
603
- return function (args) {
604
- var context = plan(_this._metadataReader, _this, args.isMultiInject, args.targetType, args.serviceIdentifier, args.key, args.value, args.avoidConstraints);
605
- context = args.contextInterceptor(context);
606
- var result = resolve(context);
607
- return result;
608
- };
609
- };
610
- Container.prototype._deactivateIfSingleton = function (binding) {
611
- var _this = this;
612
- if (!binding.activated) {
613
- return;
614
- }
615
- if (isPromise(binding.cache)) {
616
- return binding.cache.then(function (resolved) { return _this._deactivate(binding, resolved); });
617
- }
618
- return this._deactivate(binding, binding.cache);
619
- };
620
- Container.prototype._deactivateSingletons = function (bindings) {
621
- for (var _i = 0, bindings_1 = bindings; _i < bindings_1.length; _i++) {
622
- var binding = bindings_1[_i];
623
- var result = this._deactivateIfSingleton(binding);
624
- if (isPromise(result)) {
625
- throw new Error(ERROR_MSGS.ASYNC_UNBIND_REQUIRED);
626
- }
627
- }
628
- };
629
- Container.prototype._deactivateSingletonsAsync = function (bindings) {
630
- return __awaiter(this, void 0, void 0, function () {
631
- var _this = this;
632
- return __generator(this, function (_a) {
633
- switch (_a.label) {
634
- case 0: return [4, Promise.all(bindings.map(function (b) { return _this._deactivateIfSingleton(b); }))];
635
- case 1:
636
- _a.sent();
637
- return [2];
638
- }
639
- });
640
- });
641
- };
642
- Container.prototype._propagateContainerDeactivationThenBindingAndPreDestroy = function (binding, instance, constructor) {
643
- if (this.parent) {
644
- return this._deactivate.bind(this.parent)(binding, instance);
645
- }
646
- else {
647
- return this._bindingDeactivationAndPreDestroy(binding, instance, constructor);
648
- }
649
- };
650
- Container.prototype._propagateContainerDeactivationThenBindingAndPreDestroyAsync = function (binding, instance, constructor) {
651
- return __awaiter(this, void 0, void 0, function () {
652
- return __generator(this, function (_a) {
653
- switch (_a.label) {
654
- case 0:
655
- if (!this.parent) return [3, 2];
656
- return [4, this._deactivate.bind(this.parent)(binding, instance)];
657
- case 1:
658
- _a.sent();
659
- return [3, 4];
660
- case 2: return [4, this._bindingDeactivationAndPreDestroyAsync(binding, instance, constructor)];
661
- case 3:
662
- _a.sent();
663
- _a.label = 4;
664
- case 4: return [2];
665
- }
666
- });
667
- });
668
- };
669
- Container.prototype._removeServiceFromDictionary = function (serviceIdentifier) {
670
- try {
671
- this._bindingDictionary.remove(serviceIdentifier);
672
- }
673
- catch (e) {
674
- throw new Error(ERROR_MSGS.CANNOT_UNBIND + " " + getServiceIdentifierAsString(serviceIdentifier));
675
- }
676
- };
677
- Container.prototype._bindingDeactivationAndPreDestroy = function (binding, instance, constructor) {
678
- var _this = this;
679
- if (typeof binding.onDeactivation === 'function') {
680
- var result = binding.onDeactivation(instance);
681
- if (isPromise(result)) {
682
- return result.then(function () { return _this._preDestroy(constructor, instance); });
683
- }
684
- }
685
- return this._preDestroy(constructor, instance);
686
- };
687
- Container.prototype._bindingDeactivationAndPreDestroyAsync = function (binding, instance, constructor) {
688
- return __awaiter(this, void 0, void 0, function () {
689
- return __generator(this, function (_a) {
690
- switch (_a.label) {
691
- case 0:
692
- if (!(typeof binding.onDeactivation === 'function')) return [3, 2];
693
- return [4, binding.onDeactivation(instance)];
694
- case 1:
695
- _a.sent();
696
- _a.label = 2;
697
- case 2: return [4, this._preDestroy(constructor, instance)];
698
- case 3:
699
- _a.sent();
700
- return [2];
701
- }
702
- });
703
- });
704
- };
705
- return Container;
706
- }());
707
- export { Container };
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
23
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
49
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
50
+ if (ar || !(i in from)) {
51
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
52
+ ar[i] = from[i];
53
+ }
54
+ }
55
+ return to.concat(ar || Array.prototype.slice.call(from));
56
+ };
57
+ import { Binding } from '../bindings/binding';
58
+ import * as ERROR_MSGS from '../constants/error_msgs';
59
+ import { BindingScopeEnum, TargetTypeEnum } from '../constants/literal_types';
60
+ import * as METADATA_KEY from '../constants/metadata_keys';
61
+ import { MetadataReader } from '../planning/metadata_reader';
62
+ import { createMockRequest, getBindingDictionary, plan, } from '../planning/planner';
63
+ import { resolve } from '../resolution/resolver';
64
+ import { BindingToSyntax } from '../syntax/binding_to_syntax';
65
+ import { isPromise, isPromiseOrContainsPromise } from '../utils/async';
66
+ import { id } from '../utils/id';
67
+ import { getServiceIdentifierAsString } from '../utils/serialization';
68
+ import { ContainerSnapshot } from './container_snapshot';
69
+ import { Lookup } from './lookup';
70
+ import { ModuleActivationStore } from './module_activation_store';
71
+ var Container = (function () {
72
+ function Container(containerOptions) {
73
+ var options = containerOptions || {};
74
+ if (typeof options !== 'object') {
75
+ throw new Error(ERROR_MSGS.CONTAINER_OPTIONS_MUST_BE_AN_OBJECT);
76
+ }
77
+ if (options.defaultScope === undefined) {
78
+ options.defaultScope = BindingScopeEnum.Transient;
79
+ }
80
+ else if (options.defaultScope !== BindingScopeEnum.Singleton &&
81
+ options.defaultScope !== BindingScopeEnum.Transient &&
82
+ options.defaultScope !== BindingScopeEnum.Request) {
83
+ throw new Error(ERROR_MSGS.CONTAINER_OPTIONS_INVALID_DEFAULT_SCOPE);
84
+ }
85
+ if (options.autoBindInjectable === undefined) {
86
+ options.autoBindInjectable = false;
87
+ }
88
+ else if (typeof options.autoBindInjectable !== 'boolean') {
89
+ throw new Error(ERROR_MSGS.CONTAINER_OPTIONS_INVALID_AUTO_BIND_INJECTABLE);
90
+ }
91
+ if (options.skipBaseClassChecks === undefined) {
92
+ options.skipBaseClassChecks = false;
93
+ }
94
+ else if (typeof options.skipBaseClassChecks !== 'boolean') {
95
+ throw new Error(ERROR_MSGS.CONTAINER_OPTIONS_INVALID_SKIP_BASE_CHECK);
96
+ }
97
+ this.options = {
98
+ autoBindInjectable: options.autoBindInjectable,
99
+ defaultScope: options.defaultScope,
100
+ skipBaseClassChecks: options.skipBaseClassChecks,
101
+ };
102
+ this.id = id();
103
+ this._bindingDictionary = new Lookup();
104
+ this._snapshots = [];
105
+ this._middleware = null;
106
+ this._activations = new Lookup();
107
+ this._deactivations = new Lookup();
108
+ this.parent = null;
109
+ this._metadataReader = new MetadataReader();
110
+ this._moduleActivationStore = new ModuleActivationStore();
111
+ }
112
+ Container.merge = function (container1, container2) {
113
+ var containers = [];
114
+ for (var _i = 2; _i < arguments.length; _i++) {
115
+ containers[_i - 2] = arguments[_i];
116
+ }
117
+ var container = new Container();
118
+ var targetContainers = __spreadArray([
119
+ container1,
120
+ container2
121
+ ], containers, true).map(function (targetContainer) {
122
+ return getBindingDictionary(targetContainer);
123
+ });
124
+ var bindingDictionary = getBindingDictionary(container);
125
+ function copyDictionary(origin, destination) {
126
+ origin.traverse(function (_key, value) {
127
+ value.forEach(function (binding) {
128
+ destination.add(binding.serviceIdentifier, binding.clone());
129
+ });
130
+ });
131
+ }
132
+ targetContainers.forEach(function (targetBindingDictionary) {
133
+ copyDictionary(targetBindingDictionary, bindingDictionary);
134
+ });
135
+ return container;
136
+ };
137
+ Container.prototype.load = function () {
138
+ var modules = [];
139
+ for (var _i = 0; _i < arguments.length; _i++) {
140
+ modules[_i] = arguments[_i];
141
+ }
142
+ var getHelpers = this._getContainerModuleHelpersFactory();
143
+ for (var _a = 0, modules_1 = modules; _a < modules_1.length; _a++) {
144
+ var currentModule = modules_1[_a];
145
+ var containerModuleHelpers = getHelpers(currentModule.id);
146
+ currentModule.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction, containerModuleHelpers.unbindAsyncFunction, containerModuleHelpers.onActivationFunction, containerModuleHelpers.onDeactivationFunction);
147
+ }
148
+ };
149
+ Container.prototype.loadAsync = function () {
150
+ var modules = [];
151
+ for (var _i = 0; _i < arguments.length; _i++) {
152
+ modules[_i] = arguments[_i];
153
+ }
154
+ return __awaiter(this, void 0, void 0, function () {
155
+ var getHelpers, _a, modules_2, currentModule, containerModuleHelpers;
156
+ return __generator(this, function (_b) {
157
+ switch (_b.label) {
158
+ case 0:
159
+ getHelpers = this._getContainerModuleHelpersFactory();
160
+ _a = 0, modules_2 = modules;
161
+ _b.label = 1;
162
+ case 1:
163
+ if (!(_a < modules_2.length)) return [3, 4];
164
+ currentModule = modules_2[_a];
165
+ containerModuleHelpers = getHelpers(currentModule.id);
166
+ return [4, currentModule.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction, containerModuleHelpers.unbindAsyncFunction, containerModuleHelpers.onActivationFunction, containerModuleHelpers.onDeactivationFunction)];
167
+ case 2:
168
+ _b.sent();
169
+ _b.label = 3;
170
+ case 3:
171
+ _a++;
172
+ return [3, 1];
173
+ case 4: return [2];
174
+ }
175
+ });
176
+ });
177
+ };
178
+ Container.prototype.unload = function () {
179
+ var _this = this;
180
+ var modules = [];
181
+ for (var _i = 0; _i < arguments.length; _i++) {
182
+ modules[_i] = arguments[_i];
183
+ }
184
+ modules.forEach(function (module) {
185
+ var deactivations = _this._removeModuleBindings(module.id);
186
+ _this._deactivateSingletons(deactivations);
187
+ _this._removeModuleHandlers(module.id);
188
+ });
189
+ };
190
+ Container.prototype.unloadAsync = function () {
191
+ var modules = [];
192
+ for (var _i = 0; _i < arguments.length; _i++) {
193
+ modules[_i] = arguments[_i];
194
+ }
195
+ return __awaiter(this, void 0, void 0, function () {
196
+ var _a, modules_3, module_1, deactivations;
197
+ return __generator(this, function (_b) {
198
+ switch (_b.label) {
199
+ case 0:
200
+ _a = 0, modules_3 = modules;
201
+ _b.label = 1;
202
+ case 1:
203
+ if (!(_a < modules_3.length)) return [3, 4];
204
+ module_1 = modules_3[_a];
205
+ deactivations = this._removeModuleBindings(module_1.id);
206
+ return [4, this._deactivateSingletonsAsync(deactivations)];
207
+ case 2:
208
+ _b.sent();
209
+ this._removeModuleHandlers(module_1.id);
210
+ _b.label = 3;
211
+ case 3:
212
+ _a++;
213
+ return [3, 1];
214
+ case 4: return [2];
215
+ }
216
+ });
217
+ });
218
+ };
219
+ Container.prototype.bind = function (serviceIdentifier) {
220
+ var scope = this.options.defaultScope || BindingScopeEnum.Transient;
221
+ var binding = new Binding(serviceIdentifier, scope);
222
+ this._bindingDictionary.add(serviceIdentifier, binding);
223
+ return new BindingToSyntax(binding);
224
+ };
225
+ Container.prototype.rebind = function (serviceIdentifier) {
226
+ this.unbind(serviceIdentifier);
227
+ return this.bind(serviceIdentifier);
228
+ };
229
+ Container.prototype.rebindAsync = function (serviceIdentifier) {
230
+ return __awaiter(this, void 0, void 0, function () {
231
+ return __generator(this, function (_a) {
232
+ switch (_a.label) {
233
+ case 0: return [4, this.unbindAsync(serviceIdentifier)];
234
+ case 1:
235
+ _a.sent();
236
+ return [2, this.bind(serviceIdentifier)];
237
+ }
238
+ });
239
+ });
240
+ };
241
+ Container.prototype.unbind = function (serviceIdentifier) {
242
+ if (this._bindingDictionary.hasKey(serviceIdentifier)) {
243
+ var bindings = this._bindingDictionary.get(serviceIdentifier);
244
+ this._deactivateSingletons(bindings);
245
+ }
246
+ this._removeServiceFromDictionary(serviceIdentifier);
247
+ };
248
+ Container.prototype.unbindAsync = function (serviceIdentifier) {
249
+ return __awaiter(this, void 0, void 0, function () {
250
+ var bindings;
251
+ return __generator(this, function (_a) {
252
+ switch (_a.label) {
253
+ case 0:
254
+ if (!this._bindingDictionary.hasKey(serviceIdentifier)) return [3, 2];
255
+ bindings = this._bindingDictionary.get(serviceIdentifier);
256
+ return [4, this._deactivateSingletonsAsync(bindings)];
257
+ case 1:
258
+ _a.sent();
259
+ _a.label = 2;
260
+ case 2:
261
+ this._removeServiceFromDictionary(serviceIdentifier);
262
+ return [2];
263
+ }
264
+ });
265
+ });
266
+ };
267
+ Container.prototype.unbindAll = function () {
268
+ var _this = this;
269
+ this._bindingDictionary.traverse(function (_key, value) {
270
+ _this._deactivateSingletons(value);
271
+ });
272
+ this._bindingDictionary = new Lookup();
273
+ };
274
+ Container.prototype.unbindAllAsync = function () {
275
+ return __awaiter(this, void 0, void 0, function () {
276
+ var promises;
277
+ var _this = this;
278
+ return __generator(this, function (_a) {
279
+ switch (_a.label) {
280
+ case 0:
281
+ promises = [];
282
+ this._bindingDictionary.traverse(function (_key, value) {
283
+ promises.push(_this._deactivateSingletonsAsync(value));
284
+ });
285
+ return [4, Promise.all(promises)];
286
+ case 1:
287
+ _a.sent();
288
+ this._bindingDictionary = new Lookup();
289
+ return [2];
290
+ }
291
+ });
292
+ });
293
+ };
294
+ Container.prototype.onActivation = function (serviceIdentifier, onActivation) {
295
+ this._activations.add(serviceIdentifier, onActivation);
296
+ };
297
+ Container.prototype.onDeactivation = function (serviceIdentifier, onDeactivation) {
298
+ this._deactivations.add(serviceIdentifier, onDeactivation);
299
+ };
300
+ Container.prototype.isBound = function (serviceIdentifier) {
301
+ var bound = this._bindingDictionary.hasKey(serviceIdentifier);
302
+ if (!bound && this.parent) {
303
+ bound = this.parent.isBound(serviceIdentifier);
304
+ }
305
+ return bound;
306
+ };
307
+ Container.prototype.isCurrentBound = function (serviceIdentifier) {
308
+ return this._bindingDictionary.hasKey(serviceIdentifier);
309
+ };
310
+ Container.prototype.isBoundNamed = function (serviceIdentifier, named) {
311
+ return this.isBoundTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);
312
+ };
313
+ Container.prototype.isBoundTagged = function (serviceIdentifier, key, value) {
314
+ var bound = false;
315
+ if (this._bindingDictionary.hasKey(serviceIdentifier)) {
316
+ var bindings = this._bindingDictionary.get(serviceIdentifier);
317
+ var request_1 = createMockRequest(this, serviceIdentifier, key, value);
318
+ bound = bindings.some(function (b) { return b.constraint(request_1); });
319
+ }
320
+ if (!bound && this.parent) {
321
+ bound = this.parent.isBoundTagged(serviceIdentifier, key, value);
322
+ }
323
+ return bound;
324
+ };
325
+ Container.prototype.snapshot = function () {
326
+ this._snapshots.push(ContainerSnapshot.of(this._bindingDictionary.clone(), this._middleware, this._activations.clone(), this._deactivations.clone(), this._moduleActivationStore.clone()));
327
+ };
328
+ Container.prototype.restore = function () {
329
+ var snapshot = this._snapshots.pop();
330
+ if (snapshot === undefined) {
331
+ throw new Error(ERROR_MSGS.NO_MORE_SNAPSHOTS_AVAILABLE);
332
+ }
333
+ this._bindingDictionary = snapshot.bindings;
334
+ this._activations = snapshot.activations;
335
+ this._deactivations = snapshot.deactivations;
336
+ this._middleware = snapshot.middleware;
337
+ this._moduleActivationStore = snapshot.moduleActivationStore;
338
+ };
339
+ Container.prototype.createChild = function (containerOptions) {
340
+ var child = new Container(containerOptions || this.options);
341
+ child.parent = this;
342
+ return child;
343
+ };
344
+ Container.prototype.applyMiddleware = function () {
345
+ var middlewares = [];
346
+ for (var _i = 0; _i < arguments.length; _i++) {
347
+ middlewares[_i] = arguments[_i];
348
+ }
349
+ var initial = this._middleware
350
+ ? this._middleware
351
+ : this._planAndResolve();
352
+ this._middleware = middlewares.reduce(function (prev, curr) { return curr(prev); }, initial);
353
+ };
354
+ Container.prototype.applyCustomMetadataReader = function (metadataReader) {
355
+ this._metadataReader = metadataReader;
356
+ };
357
+ Container.prototype.get = function (serviceIdentifier) {
358
+ var getArgs = this._getNotAllArgs(serviceIdentifier, false);
359
+ return this._getButThrowIfAsync(getArgs);
360
+ };
361
+ Container.prototype.getAsync = function (serviceIdentifier) {
362
+ return __awaiter(this, void 0, void 0, function () {
363
+ var getArgs;
364
+ return __generator(this, function (_a) {
365
+ getArgs = this._getNotAllArgs(serviceIdentifier, false);
366
+ return [2, this._get(getArgs)];
367
+ });
368
+ });
369
+ };
370
+ Container.prototype.getTagged = function (serviceIdentifier, key, value) {
371
+ var getArgs = this._getNotAllArgs(serviceIdentifier, false, key, value);
372
+ return this._getButThrowIfAsync(getArgs);
373
+ };
374
+ Container.prototype.getTaggedAsync = function (serviceIdentifier, key, value) {
375
+ return __awaiter(this, void 0, void 0, function () {
376
+ var getArgs;
377
+ return __generator(this, function (_a) {
378
+ getArgs = this._getNotAllArgs(serviceIdentifier, false, key, value);
379
+ return [2, this._get(getArgs)];
380
+ });
381
+ });
382
+ };
383
+ Container.prototype.getNamed = function (serviceIdentifier, named) {
384
+ return this.getTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);
385
+ };
386
+ Container.prototype.getNamedAsync = function (serviceIdentifier, named) {
387
+ return __awaiter(this, void 0, void 0, function () {
388
+ return __generator(this, function (_a) {
389
+ return [2, this.getTaggedAsync(serviceIdentifier, METADATA_KEY.NAMED_TAG, named)];
390
+ });
391
+ });
392
+ };
393
+ Container.prototype.getAll = function (serviceIdentifier) {
394
+ var getArgs = this._getAllArgs(serviceIdentifier);
395
+ return this._getButThrowIfAsync(getArgs);
396
+ };
397
+ Container.prototype.getAllAsync = function (serviceIdentifier) {
398
+ return __awaiter(this, void 0, void 0, function () {
399
+ var getArgs;
400
+ return __generator(this, function (_a) {
401
+ getArgs = this._getAllArgs(serviceIdentifier);
402
+ return [2, this._getAll(getArgs)];
403
+ });
404
+ });
405
+ };
406
+ Container.prototype.getAllTagged = function (serviceIdentifier, key, value) {
407
+ var getArgs = this._getNotAllArgs(serviceIdentifier, true, key, value);
408
+ return this._getButThrowIfAsync(getArgs);
409
+ };
410
+ Container.prototype.getAllTaggedAsync = function (serviceIdentifier, key, value) {
411
+ return __awaiter(this, void 0, void 0, function () {
412
+ var getArgs;
413
+ return __generator(this, function (_a) {
414
+ getArgs = this._getNotAllArgs(serviceIdentifier, true, key, value);
415
+ return [2, this._getAll(getArgs)];
416
+ });
417
+ });
418
+ };
419
+ Container.prototype.getAllNamed = function (serviceIdentifier, named) {
420
+ return this.getAllTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named);
421
+ };
422
+ Container.prototype.getAllNamedAsync = function (serviceIdentifier, named) {
423
+ return __awaiter(this, void 0, void 0, function () {
424
+ return __generator(this, function (_a) {
425
+ return [2, this.getAllTaggedAsync(serviceIdentifier, METADATA_KEY.NAMED_TAG, named)];
426
+ });
427
+ });
428
+ };
429
+ Container.prototype.resolve = function (constructorFunction) {
430
+ var isBound = this.isBound(constructorFunction);
431
+ if (!isBound) {
432
+ this.bind(constructorFunction).toSelf();
433
+ }
434
+ var resolved = this.get(constructorFunction);
435
+ if (!isBound) {
436
+ this.unbind(constructorFunction);
437
+ }
438
+ return resolved;
439
+ };
440
+ Container.prototype._preDestroy = function (constructor, instance) {
441
+ var _a, _b;
442
+ if (Reflect.hasMetadata(METADATA_KEY.PRE_DESTROY, constructor)) {
443
+ var data = Reflect.getMetadata(METADATA_KEY.PRE_DESTROY, constructor);
444
+ return (_b = (_a = instance)[data.value]) === null || _b === void 0 ? void 0 : _b.call(_a);
445
+ }
446
+ };
447
+ Container.prototype._removeModuleHandlers = function (moduleId) {
448
+ var moduleActivationsHandlers = this._moduleActivationStore.remove(moduleId);
449
+ this._activations.removeIntersection(moduleActivationsHandlers.onActivations);
450
+ this._deactivations.removeIntersection(moduleActivationsHandlers.onDeactivations);
451
+ };
452
+ Container.prototype._removeModuleBindings = function (moduleId) {
453
+ return this._bindingDictionary.removeByCondition(function (binding) { return binding.moduleId === moduleId; });
454
+ };
455
+ Container.prototype._deactivate = function (binding, instance) {
456
+ var _this = this;
457
+ var constructor = Object.getPrototypeOf(instance).constructor;
458
+ try {
459
+ if (this._deactivations.hasKey(binding.serviceIdentifier)) {
460
+ var result = this._deactivateContainer(instance, this._deactivations.get(binding.serviceIdentifier).values());
461
+ if (isPromise(result)) {
462
+ return this._handleDeactivationError(result.then(function () { return __awaiter(_this, void 0, void 0, function () {
463
+ return __generator(this, function (_a) {
464
+ return [2, this._propagateContainerDeactivationThenBindingAndPreDestroyAsync(binding, instance, constructor)];
465
+ });
466
+ }); }), constructor);
467
+ }
468
+ }
469
+ var propagateDeactivationResult = this._propagateContainerDeactivationThenBindingAndPreDestroy(binding, instance, constructor);
470
+ if (isPromise(propagateDeactivationResult)) {
471
+ return this._handleDeactivationError(propagateDeactivationResult, constructor);
472
+ }
473
+ }
474
+ catch (ex) {
475
+ if (ex instanceof Error) {
476
+ throw new Error(ERROR_MSGS.ON_DEACTIVATION_ERROR(constructor.name, ex.message));
477
+ }
478
+ }
479
+ };
480
+ Container.prototype._handleDeactivationError = function (asyncResult, constructor) {
481
+ return __awaiter(this, void 0, void 0, function () {
482
+ var ex_1;
483
+ return __generator(this, function (_a) {
484
+ switch (_a.label) {
485
+ case 0:
486
+ _a.trys.push([0, 2, , 3]);
487
+ return [4, asyncResult];
488
+ case 1:
489
+ _a.sent();
490
+ return [3, 3];
491
+ case 2:
492
+ ex_1 = _a.sent();
493
+ if (ex_1 instanceof Error) {
494
+ throw new Error(ERROR_MSGS.ON_DEACTIVATION_ERROR(constructor.name, ex_1.message));
495
+ }
496
+ return [3, 3];
497
+ case 3: return [2];
498
+ }
499
+ });
500
+ });
501
+ };
502
+ Container.prototype._deactivateContainer = function (instance, deactivationsIterator) {
503
+ var _this = this;
504
+ var deactivation = deactivationsIterator.next();
505
+ while (typeof deactivation.value === 'function') {
506
+ var result = deactivation.value(instance);
507
+ if (isPromise(result)) {
508
+ return result.then(function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
509
+ return [2, this._deactivateContainerAsync(instance, deactivationsIterator)];
510
+ }); }); });
511
+ }
512
+ deactivation = deactivationsIterator.next();
513
+ }
514
+ };
515
+ Container.prototype._deactivateContainerAsync = function (instance, deactivationsIterator) {
516
+ return __awaiter(this, void 0, void 0, function () {
517
+ var deactivation;
518
+ return __generator(this, function (_a) {
519
+ switch (_a.label) {
520
+ case 0:
521
+ deactivation = deactivationsIterator.next();
522
+ _a.label = 1;
523
+ case 1:
524
+ if (!(typeof deactivation.value === 'function')) return [3, 3];
525
+ return [4, deactivation.value(instance)];
526
+ case 2:
527
+ _a.sent();
528
+ deactivation = deactivationsIterator.next();
529
+ return [3, 1];
530
+ case 3: return [2];
531
+ }
532
+ });
533
+ });
534
+ };
535
+ Container.prototype._getContainerModuleHelpersFactory = function () {
536
+ var _this = this;
537
+ var setModuleId = function (bindingToSyntax, moduleId) {
538
+ bindingToSyntax._binding.moduleId = moduleId;
539
+ };
540
+ var getBindFunction = function (moduleId) {
541
+ return function (serviceIdentifier) {
542
+ var bindingToSyntax = _this.bind(serviceIdentifier);
543
+ setModuleId(bindingToSyntax, moduleId);
544
+ return bindingToSyntax;
545
+ };
546
+ };
547
+ var getUnbindFunction = function () { return function (serviceIdentifier) {
548
+ _this.unbind(serviceIdentifier);
549
+ }; };
550
+ var getUnbindAsyncFunction = function () {
551
+ return function (serviceIdentifier) { return __awaiter(_this, void 0, void 0, function () {
552
+ return __generator(this, function (_a) {
553
+ return [2, this.unbindAsync(serviceIdentifier)];
554
+ });
555
+ }); };
556
+ };
557
+ var getIsboundFunction = function () {
558
+ return function (serviceIdentifier) {
559
+ return _this.isBound(serviceIdentifier);
560
+ };
561
+ };
562
+ var getRebindFunction = function (moduleId) {
563
+ return function (serviceIdentifier) {
564
+ var bindingToSyntax = _this.rebind(serviceIdentifier);
565
+ setModuleId(bindingToSyntax, moduleId);
566
+ return bindingToSyntax;
567
+ };
568
+ };
569
+ var getOnActivationFunction = function (moduleId) {
570
+ return function (serviceIdentifier, onActivation) {
571
+ _this._moduleActivationStore.addActivation(moduleId, serviceIdentifier, onActivation);
572
+ _this.onActivation(serviceIdentifier, onActivation);
573
+ };
574
+ };
575
+ var getOnDeactivationFunction = function (moduleId) {
576
+ return function (serviceIdentifier, onDeactivation) {
577
+ _this._moduleActivationStore.addDeactivation(moduleId, serviceIdentifier, onDeactivation);
578
+ _this.onDeactivation(serviceIdentifier, onDeactivation);
579
+ };
580
+ };
581
+ return function (mId) { return ({
582
+ bindFunction: getBindFunction(mId),
583
+ isboundFunction: getIsboundFunction(),
584
+ onActivationFunction: getOnActivationFunction(mId),
585
+ onDeactivationFunction: getOnDeactivationFunction(mId),
586
+ rebindFunction: getRebindFunction(mId),
587
+ unbindAsyncFunction: getUnbindAsyncFunction(),
588
+ unbindFunction: getUnbindFunction(),
589
+ }); };
590
+ };
591
+ Container.prototype._getAll = function (getArgs) {
592
+ return __awaiter(this, void 0, void 0, function () {
593
+ return __generator(this, function (_a) {
594
+ return [2, Promise.all(this._get(getArgs))];
595
+ });
596
+ });
597
+ };
598
+ Container.prototype._get = function (getArgs) {
599
+ var planAndResolveArgs = __assign(__assign({}, getArgs), { contextInterceptor: function (context) { return context; }, targetType: TargetTypeEnum.Variable });
600
+ if (this._middleware) {
601
+ var middlewareResult = this._middleware(planAndResolveArgs);
602
+ if (middlewareResult === undefined || middlewareResult === null) {
603
+ throw new Error(ERROR_MSGS.INVALID_MIDDLEWARE_RETURN);
604
+ }
605
+ return middlewareResult;
606
+ }
607
+ return this._planAndResolve()(planAndResolveArgs);
608
+ };
609
+ Container.prototype._getButThrowIfAsync = function (getArgs) {
610
+ var result = this._get(getArgs);
611
+ if (isPromiseOrContainsPromise(result)) {
612
+ throw new Error(ERROR_MSGS.LAZY_IN_SYNC(getArgs.serviceIdentifier));
613
+ }
614
+ return result;
615
+ };
616
+ Container.prototype._getAllArgs = function (serviceIdentifier) {
617
+ var getAllArgs = {
618
+ avoidConstraints: true,
619
+ isMultiInject: true,
620
+ serviceIdentifier: serviceIdentifier,
621
+ };
622
+ return getAllArgs;
623
+ };
624
+ Container.prototype._getNotAllArgs = function (serviceIdentifier, isMultiInject, key, value) {
625
+ var getNotAllArgs = {
626
+ avoidConstraints: false,
627
+ isMultiInject: isMultiInject,
628
+ key: key,
629
+ serviceIdentifier: serviceIdentifier,
630
+ value: value,
631
+ };
632
+ return getNotAllArgs;
633
+ };
634
+ Container.prototype._planAndResolve = function () {
635
+ var _this = this;
636
+ return function (args) {
637
+ var context = plan(_this._metadataReader, _this, args.isMultiInject, args.targetType, args.serviceIdentifier, args.key, args.value, args.avoidConstraints);
638
+ context = args.contextInterceptor(context);
639
+ var result = resolve(context);
640
+ return result;
641
+ };
642
+ };
643
+ Container.prototype._deactivateIfSingleton = function (binding) {
644
+ var _this = this;
645
+ if (!binding.activated) {
646
+ return;
647
+ }
648
+ if (isPromise(binding.cache)) {
649
+ return binding.cache.then(function (resolved) {
650
+ return _this._deactivate(binding, resolved);
651
+ });
652
+ }
653
+ return this._deactivate(binding, binding.cache);
654
+ };
655
+ Container.prototype._deactivateSingletons = function (bindings) {
656
+ for (var _i = 0, bindings_1 = bindings; _i < bindings_1.length; _i++) {
657
+ var binding = bindings_1[_i];
658
+ var result = this._deactivateIfSingleton(binding);
659
+ if (isPromise(result)) {
660
+ throw new Error(ERROR_MSGS.ASYNC_UNBIND_REQUIRED);
661
+ }
662
+ }
663
+ };
664
+ Container.prototype._deactivateSingletonsAsync = function (bindings) {
665
+ return __awaiter(this, void 0, void 0, function () {
666
+ var _this = this;
667
+ return __generator(this, function (_a) {
668
+ switch (_a.label) {
669
+ case 0: return [4, Promise.all(bindings.map(function (b) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
670
+ return [2, this._deactivateIfSingleton(b)];
671
+ }); }); }))];
672
+ case 1:
673
+ _a.sent();
674
+ return [2];
675
+ }
676
+ });
677
+ });
678
+ };
679
+ Container.prototype._propagateContainerDeactivationThenBindingAndPreDestroy = function (binding, instance, constructor) {
680
+ if (this.parent) {
681
+ return this._deactivate.bind(this.parent)(binding, instance);
682
+ }
683
+ else {
684
+ return this._bindingDeactivationAndPreDestroy(binding, instance, constructor);
685
+ }
686
+ };
687
+ Container.prototype._propagateContainerDeactivationThenBindingAndPreDestroyAsync = function (binding, instance, constructor) {
688
+ return __awaiter(this, void 0, void 0, function () {
689
+ return __generator(this, function (_a) {
690
+ switch (_a.label) {
691
+ case 0:
692
+ if (!this.parent) return [3, 2];
693
+ return [4, this._deactivate.bind(this.parent)(binding, instance)];
694
+ case 1:
695
+ _a.sent();
696
+ return [3, 4];
697
+ case 2: return [4, this._bindingDeactivationAndPreDestroyAsync(binding, instance, constructor)];
698
+ case 3:
699
+ _a.sent();
700
+ _a.label = 4;
701
+ case 4: return [2];
702
+ }
703
+ });
704
+ });
705
+ };
706
+ Container.prototype._removeServiceFromDictionary = function (serviceIdentifier) {
707
+ try {
708
+ this._bindingDictionary.remove(serviceIdentifier);
709
+ }
710
+ catch (_e) {
711
+ throw new Error("".concat(ERROR_MSGS.CANNOT_UNBIND, " ").concat(getServiceIdentifierAsString(serviceIdentifier)));
712
+ }
713
+ };
714
+ Container.prototype._bindingDeactivationAndPreDestroy = function (binding, instance, constructor) {
715
+ var _this = this;
716
+ if (typeof binding.onDeactivation === 'function') {
717
+ var result = binding.onDeactivation(instance);
718
+ if (isPromise(result)) {
719
+ return result.then(function () {
720
+ return _this._preDestroy(constructor, instance);
721
+ });
722
+ }
723
+ }
724
+ return this._preDestroy(constructor, instance);
725
+ };
726
+ Container.prototype._bindingDeactivationAndPreDestroyAsync = function (binding, instance, constructor) {
727
+ return __awaiter(this, void 0, void 0, function () {
728
+ return __generator(this, function (_a) {
729
+ switch (_a.label) {
730
+ case 0:
731
+ if (!(typeof binding.onDeactivation === 'function')) return [3, 2];
732
+ return [4, binding.onDeactivation(instance)];
733
+ case 1:
734
+ _a.sent();
735
+ _a.label = 2;
736
+ case 2: return [4, this._preDestroy(constructor, instance)];
737
+ case 3:
738
+ _a.sent();
739
+ return [2];
740
+ }
741
+ });
742
+ });
743
+ };
744
+ return Container;
745
+ }());
746
+ export { Container };