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.
- package/CHANGELOG.md +9 -0
- package/README.md +14 -14
- package/amd/annotation/decorator_utils.js +3 -1
- package/amd/annotation/inject_base.js +1 -1
- package/amd/annotation/lazy_service_identifier.js +0 -11
- package/amd/bindings/binding.js +3 -2
- package/amd/bindings/binding_count.js +6 -5
- package/amd/constants/error_msgs.js +18 -18
- package/amd/constants/literal_types.js +3 -3
- package/amd/container/container.js +73 -34
- package/amd/container/lookup.js +15 -14
- package/amd/container/module_activation_store.js +8 -10
- package/amd/interfaces/interfaces.js +0 -5
- package/amd/inversify.js +3 -5
- package/amd/planning/metadata_reader.js +5 -3
- package/amd/planning/planner.js +31 -13
- package/amd/planning/queryable_string.js +5 -2
- package/amd/planning/reflection_utils.js +6 -112
- package/amd/planning/request.js +2 -4
- package/amd/planning/target.js +9 -3
- package/amd/resolution/instantiation.js +10 -5
- package/amd/resolution/resolver.js +19 -10
- package/amd/scope/scope.js +1 -1
- package/amd/syntax/binding_to_syntax.js +14 -7
- package/amd/syntax/binding_when_syntax.js +13 -8
- package/amd/syntax/constraint_helpers.js +4 -3
- package/amd/utils/async.js +3 -2
- package/amd/utils/binding_utils.js +8 -3
- package/amd/utils/clonable.js +4 -4
- package/amd/utils/exceptions.js +1 -1
- package/amd/utils/serialization.js +11 -8
- package/es/annotation/decorator_utils.js +3 -1
- package/es/annotation/inject_base.js +1 -1
- package/es/annotation/lazy_service_identifier.js +1 -10
- package/es/annotation/target_name.js +3 -3
- package/es/bindings/binding.js +3 -2
- package/es/bindings/binding_count.js +6 -5
- package/es/constants/error_msgs.js +17 -17
- package/es/constants/literal_types.js +3 -3
- package/es/container/container.js +74 -35
- package/es/container/lookup.js +15 -14
- package/es/container/module_activation_store.js +8 -10
- package/es/interfaces/interfaces.js +1 -5
- package/es/inversify.js +4 -6
- package/es/planning/metadata_reader.js +5 -3
- package/es/planning/planner.js +34 -16
- package/es/planning/queryable_string.js +5 -2
- package/es/planning/reflection_utils.js +6 -114
- package/es/planning/request.js +2 -4
- package/es/planning/target.js +9 -3
- package/es/resolution/instantiation.js +11 -6
- package/es/resolution/resolver.js +20 -11
- package/es/scope/scope.js +1 -1
- package/es/syntax/binding_to_syntax.js +18 -11
- package/es/syntax/binding_when_syntax.js +14 -9
- package/es/syntax/constraint_helpers.js +5 -4
- package/es/utils/async.js +3 -2
- package/es/utils/binding_utils.js +8 -3
- package/es/utils/clonable.js +4 -4
- package/es/utils/exceptions.js +1 -1
- package/es/utils/serialization.js +12 -9
- package/es6/annotation/decorator_utils.js +5 -3
- package/es6/annotation/inject_base.js +1 -1
- package/es6/annotation/lazy_service_identifier.js +0 -10
- package/es6/bindings/binding.js +3 -2
- package/es6/bindings/binding_count.js +6 -5
- package/es6/constants/error_msgs.js +5 -9
- package/es6/constants/literal_types.js +3 -3
- package/es6/container/container.js +59 -42
- package/es6/container/lookup.js +15 -14
- package/es6/container/module_activation_store.js +8 -10
- package/es6/interfaces/interfaces.js +0 -5
- package/es6/inversify.js +3 -7
- package/es6/planning/metadata_reader.js +5 -3
- package/es6/planning/planner.js +31 -13
- package/es6/planning/queryable_string.js +5 -2
- package/es6/planning/reflection_utils.js +4 -110
- package/es6/planning/request.js +2 -4
- package/es6/planning/target.js +3 -1
- package/es6/resolution/instantiation.js +9 -5
- package/es6/resolution/resolver.js +11 -8
- package/es6/scope/scope.js +1 -1
- package/es6/syntax/binding_to_syntax.js +5 -4
- package/es6/syntax/binding_when_syntax.js +13 -8
- package/es6/syntax/constraint_helpers.js +4 -3
- package/es6/utils/async.js +3 -2
- package/es6/utils/binding_utils.js +10 -3
- package/es6/utils/clonable.js +4 -4
- package/es6/utils/exceptions.js +1 -1
- package/es6/utils/serialization.js +11 -8
- package/lib/annotation/decorator_utils.d.ts +2 -2
- package/lib/annotation/decorator_utils.js +3 -1
- package/lib/annotation/inject.d.ts +4 -1
- package/lib/annotation/inject_base.d.ts +3 -2
- package/lib/annotation/inject_base.js +1 -1
- package/lib/annotation/lazy_service_identifier.d.ts +1 -5
- package/lib/annotation/lazy_service_identifier.js +0 -11
- package/lib/annotation/multi_inject.d.ts +4 -1
- package/lib/annotation/tagged.d.ts +1 -1
- package/lib/annotation/target_name.d.ts +1 -1
- package/lib/bindings/binding.js +3 -2
- package/lib/bindings/binding_count.d.ts +5 -5
- package/lib/bindings/binding_count.js +6 -5
- package/lib/constants/error_msgs.d.ts +18 -20
- package/lib/constants/error_msgs.js +18 -18
- package/lib/constants/literal_types.js +3 -3
- package/lib/constants/metadata_keys.d.ts +12 -12
- package/lib/container/container.d.ts +2 -2
- package/lib/container/container.js +73 -34
- package/lib/container/lookup.d.ts +2 -1
- package/lib/container/lookup.js +15 -14
- package/lib/container/module_activation_store.d.ts +1 -1
- package/lib/container/module_activation_store.js +8 -10
- package/lib/interfaces/interfaces.d.ts +14 -29
- package/lib/interfaces/interfaces.js +0 -5
- package/lib/inversify.d.ts +5 -6
- package/lib/inversify.js +3 -7
- package/lib/planning/metadata_reader.js +5 -3
- package/lib/planning/planner.js +31 -13
- package/lib/planning/queryable_string.d.ts +2 -3
- package/lib/planning/queryable_string.js +5 -2
- package/lib/planning/reflection_utils.js +6 -114
- package/lib/planning/request.d.ts +2 -2
- package/lib/planning/request.js +2 -4
- package/lib/planning/target.d.ts +1 -1
- package/lib/planning/target.js +9 -3
- package/lib/resolution/instantiation.js +10 -5
- package/lib/resolution/resolver.js +19 -10
- package/lib/scope/scope.js +1 -1
- package/lib/syntax/binding_in_syntax.d.ts +1 -1
- package/lib/syntax/binding_in_when_on_syntax.d.ts +7 -7
- package/lib/syntax/binding_on_syntax.d.ts +1 -1
- package/lib/syntax/binding_to_syntax.d.ts +4 -4
- package/lib/syntax/binding_to_syntax.js +14 -7
- package/lib/syntax/binding_when_on_syntax.d.ts +6 -6
- package/lib/syntax/binding_when_syntax.d.ts +4 -4
- package/lib/syntax/binding_when_syntax.js +13 -8
- package/lib/syntax/constraint_helpers.d.ts +2 -2
- package/lib/syntax/constraint_helpers.js +4 -3
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utils/async.js +3 -2
- package/lib/utils/binding_utils.js +8 -3
- package/lib/utils/clonable.js +4 -4
- package/lib/utils/exceptions.js +1 -1
- package/lib/utils/serialization.d.ts +3 -3
- package/lib/utils/serialization.js +11 -8
- package/package.json +18 -4
- package/.nyc_output/c29b2307-4e95-47d0-b220-9efcfa7ee49f.json +0 -1
- package/.nyc_output/processinfo/c29b2307-4e95-47d0-b220-9efcfa7ee49f.json +0 -1
- package/.nyc_output/processinfo/index.json +0 -1
|
@@ -4,20 +4,18 @@ var ModuleActivationStore = (function () {
|
|
|
4
4
|
this._map = new Map();
|
|
5
5
|
}
|
|
6
6
|
ModuleActivationStore.prototype.remove = function (moduleId) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
this.
|
|
10
|
-
return handlers;
|
|
7
|
+
var handlers = this._map.get(moduleId);
|
|
8
|
+
if (handlers === undefined) {
|
|
9
|
+
return this._getEmptyHandlersStore();
|
|
11
10
|
}
|
|
12
|
-
|
|
11
|
+
this._map.delete(moduleId);
|
|
12
|
+
return handlers;
|
|
13
13
|
};
|
|
14
14
|
ModuleActivationStore.prototype.addDeactivation = function (moduleId, serviceIdentifier, onDeactivation) {
|
|
15
|
-
this._getModuleActivationHandlers(moduleId)
|
|
16
|
-
.onDeactivations.add(serviceIdentifier, onDeactivation);
|
|
15
|
+
this._getModuleActivationHandlers(moduleId).onDeactivations.add(serviceIdentifier, onDeactivation);
|
|
17
16
|
};
|
|
18
17
|
ModuleActivationStore.prototype.addActivation = function (moduleId, serviceIdentifier, onActivation) {
|
|
19
|
-
this._getModuleActivationHandlers(moduleId)
|
|
20
|
-
.onActivations.add(serviceIdentifier, onActivation);
|
|
18
|
+
this._getModuleActivationHandlers(moduleId).onActivations.add(serviceIdentifier, onActivation);
|
|
21
19
|
};
|
|
22
20
|
ModuleActivationStore.prototype.clone = function () {
|
|
23
21
|
var clone = new ModuleActivationStore();
|
|
@@ -40,7 +38,7 @@ var ModuleActivationStore = (function () {
|
|
|
40
38
|
ModuleActivationStore.prototype._getEmptyHandlersStore = function () {
|
|
41
39
|
var handlersStore = {
|
|
42
40
|
onActivations: new Lookup(),
|
|
43
|
-
onDeactivations: new Lookup()
|
|
41
|
+
onDeactivations: new Lookup(),
|
|
44
42
|
};
|
|
45
43
|
return handlersStore;
|
|
46
44
|
};
|
package/es/inversify.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import * as keys from './constants/metadata_keys';
|
|
2
|
+
export { LazyServiceIdentifier } from '@inversifyjs/common';
|
|
2
3
|
export var METADATA_KEY = keys;
|
|
3
4
|
export { Container } from './container/container';
|
|
4
|
-
export { BindingScopeEnum, BindingTypeEnum, TargetTypeEnum } from './constants/literal_types';
|
|
5
|
-
export { AsyncContainerModule, ContainerModule } from './container/container_module';
|
|
5
|
+
export { BindingScopeEnum, BindingTypeEnum, TargetTypeEnum, } from './constants/literal_types';
|
|
6
|
+
export { AsyncContainerModule, ContainerModule, } from './container/container_module';
|
|
6
7
|
export { createTaggedDecorator } from './annotation/decorator_utils';
|
|
7
8
|
export { injectable } from './annotation/injectable';
|
|
8
9
|
export { tagged } from './annotation/tagged';
|
|
9
10
|
export { named } from './annotation/named';
|
|
10
11
|
export { inject } from './annotation/inject';
|
|
11
|
-
export { LazyServiceIdentifier } from './annotation/lazy_service_identifier';
|
|
12
|
-
export { LazyServiceIdentifier as LazyServiceIdentifer } from './annotation/lazy_service_identifier';
|
|
13
12
|
export { optional } from './annotation/optional';
|
|
14
13
|
export { unmanaged } from './annotation/unmanaged';
|
|
15
14
|
export { multiInject } from './annotation/multi_inject';
|
|
@@ -18,8 +17,7 @@ export { postConstruct } from './annotation/post_construct';
|
|
|
18
17
|
export { preDestroy } from './annotation/pre_destroy';
|
|
19
18
|
export { MetadataReader } from './planning/metadata_reader';
|
|
20
19
|
export { id } from './utils/id';
|
|
21
|
-
export { interfaces } from './interfaces/interfaces';
|
|
22
20
|
export { decorate } from './annotation/decorator_utils';
|
|
23
|
-
export { traverseAncerstors, taggedConstraint, namedConstraint, typeConstraint } from './syntax/constraint_helpers';
|
|
21
|
+
export { traverseAncerstors, taggedConstraint, namedConstraint, typeConstraint, } from './syntax/constraint_helpers';
|
|
24
22
|
export { getServiceIdentifierAsString } from './utils/serialization';
|
|
25
23
|
export { multiBindToService } from './utils/binding_utils';
|
|
@@ -3,15 +3,17 @@ var MetadataReader = (function () {
|
|
|
3
3
|
function MetadataReader() {
|
|
4
4
|
}
|
|
5
5
|
MetadataReader.prototype.getConstructorMetadata = function (constructorFunc) {
|
|
6
|
-
var
|
|
6
|
+
var _a;
|
|
7
|
+
var compilerGeneratedMetadata = (_a = Reflect.getMetadata(METADATA_KEY.DESIGN_PARAM_TYPES, constructorFunc)) !== null && _a !== void 0 ? _a : [];
|
|
7
8
|
var userGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.TAGGED, constructorFunc);
|
|
8
9
|
return {
|
|
9
10
|
compilerGeneratedMetadata: compilerGeneratedMetadata,
|
|
10
|
-
userGeneratedMetadata: userGeneratedMetadata
|
|
11
|
+
userGeneratedMetadata: userGeneratedMetadata !== null && userGeneratedMetadata !== void 0 ? userGeneratedMetadata : {},
|
|
11
12
|
};
|
|
12
13
|
};
|
|
13
14
|
MetadataReader.prototype.getPropertiesMetadata = function (constructorFunc) {
|
|
14
|
-
var
|
|
15
|
+
var _a;
|
|
16
|
+
var userGeneratedMetadata = (_a = Reflect.getMetadata(METADATA_KEY.TAGGED_PROP, constructorFunc)) !== null && _a !== void 0 ? _a : {};
|
|
15
17
|
return userGeneratedMetadata;
|
|
16
18
|
};
|
|
17
19
|
return MetadataReader;
|
package/es/planning/planner.js
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
|
+
import { ClassElementMetadataKind, getClassElementMetadataFromLegacyMetadata, LegacyTargetImpl as TargetImpl, } from '@inversifyjs/core';
|
|
1
2
|
import { BindingCount } from '../bindings/binding_count';
|
|
2
3
|
import * as ERROR_MSGS from '../constants/error_msgs';
|
|
3
|
-
import { BindingTypeEnum
|
|
4
|
+
import { BindingTypeEnum } from '../constants/literal_types';
|
|
4
5
|
import * as METADATA_KEY from '../constants/metadata_keys';
|
|
5
6
|
import { isStackOverflowException } from '../utils/exceptions';
|
|
6
|
-
import { circularDependencyToException, getServiceIdentifierAsString, listMetadataForTarget, listRegisteredBindingsForServiceIdentifier } from '../utils/serialization';
|
|
7
|
+
import { circularDependencyToException, getServiceIdentifierAsString, listMetadataForTarget, listRegisteredBindingsForServiceIdentifier, } from '../utils/serialization';
|
|
7
8
|
import { Context } from './context';
|
|
8
9
|
import { Metadata } from './metadata';
|
|
9
10
|
import { Plan } from './plan';
|
|
10
|
-
import { getBaseClassDependencyCount, getDependencies, getFunctionName } from './reflection_utils';
|
|
11
|
+
import { getBaseClassDependencyCount, getDependencies, getFunctionName, } from './reflection_utils';
|
|
11
12
|
import { Request } from './request';
|
|
12
|
-
import { Target } from './target';
|
|
13
13
|
function getBindingDictionary(cntnr) {
|
|
14
14
|
return cntnr._bindingDictionary;
|
|
15
15
|
}
|
|
16
16
|
function _createTarget(isMultiInject, targetType, serviceIdentifier, name, key, value) {
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
var tagMetadata = new Metadata(key, value);
|
|
22
|
-
target.metadata.push(tagMetadata);
|
|
17
|
+
var metadataList = _getTargetMetadata(isMultiInject, serviceIdentifier, key, value);
|
|
18
|
+
var classElementMetadata = getClassElementMetadataFromLegacyMetadata(metadataList);
|
|
19
|
+
if (classElementMetadata.kind === ClassElementMetadataKind.unmanaged) {
|
|
20
|
+
throw new Error('Unexpected metadata when creating target');
|
|
23
21
|
}
|
|
22
|
+
var target = new TargetImpl(name, classElementMetadata, targetType);
|
|
24
23
|
return target;
|
|
25
24
|
}
|
|
26
25
|
function _getActiveBindings(metadataReader, avoidConstraints, context, parentRequest, target) {
|
|
27
26
|
var bindings = getBindings(context.container, target.serviceIdentifier);
|
|
28
27
|
var activeBindings = [];
|
|
29
28
|
if (bindings.length === BindingCount.NoBindingsAvailable &&
|
|
30
|
-
context.container.options.autoBindInjectable &&
|
|
29
|
+
context.container.options.autoBindInjectable === true &&
|
|
31
30
|
typeof target.serviceIdentifier === 'function' &&
|
|
32
|
-
metadataReader.getConstructorMetadata(target.serviceIdentifier)
|
|
31
|
+
metadataReader.getConstructorMetadata(target.serviceIdentifier)
|
|
32
|
+
.compilerGeneratedMetadata) {
|
|
33
33
|
context.container.bind(target.serviceIdentifier).toSelf();
|
|
34
34
|
bindings = getBindings(context.container, target.serviceIdentifier);
|
|
35
35
|
}
|
|
@@ -45,6 +45,18 @@ function _getActiveBindings(metadataReader, avoidConstraints, context, parentReq
|
|
|
45
45
|
_validateActiveBindingCount(target.serviceIdentifier, activeBindings, target, context.container);
|
|
46
46
|
return activeBindings;
|
|
47
47
|
}
|
|
48
|
+
function _getTargetMetadata(isMultiInject, serviceIdentifier, key, value) {
|
|
49
|
+
var metadataKey = isMultiInject
|
|
50
|
+
? METADATA_KEY.MULTI_INJECT_TAG
|
|
51
|
+
: METADATA_KEY.INJECT_TAG;
|
|
52
|
+
var metadataList = [
|
|
53
|
+
new Metadata(metadataKey, serviceIdentifier),
|
|
54
|
+
];
|
|
55
|
+
if (key !== undefined) {
|
|
56
|
+
metadataList.push(new Metadata(key, value));
|
|
57
|
+
}
|
|
58
|
+
return metadataList;
|
|
59
|
+
}
|
|
48
60
|
function _validateActiveBindingCount(serviceIdentifier, bindings, target, container) {
|
|
49
61
|
switch (bindings.length) {
|
|
50
62
|
case BindingCount.NoBindingsAvailable:
|
|
@@ -92,14 +104,15 @@ function _createSubRequests(metadataReader, avoidConstraints, serviceIdentifier,
|
|
|
92
104
|
subChildRequest = childRequest.addChildRequest(binding.serviceIdentifier, binding, target);
|
|
93
105
|
}
|
|
94
106
|
else {
|
|
95
|
-
if (binding.cache) {
|
|
107
|
+
if (binding.cache !== null) {
|
|
96
108
|
return;
|
|
97
109
|
}
|
|
98
110
|
subChildRequest = childRequest;
|
|
99
111
|
}
|
|
100
|
-
if (binding.type === BindingTypeEnum.Instance &&
|
|
112
|
+
if (binding.type === BindingTypeEnum.Instance &&
|
|
113
|
+
binding.implementationType !== null) {
|
|
101
114
|
var dependencies = getDependencies(metadataReader, binding.implementationType);
|
|
102
|
-
if (
|
|
115
|
+
if (context.container.options.skipBaseClassChecks !== true) {
|
|
103
116
|
var baseClassDependencyCount = getBaseClassDependencyCount(metadataReader, binding.implementationType);
|
|
104
117
|
if (dependencies.length < baseClassDependencyCount) {
|
|
105
118
|
var error = ERROR_MSGS.ARGUMENTS_LENGTH_MISMATCH(getFunctionName(binding.implementationType));
|
|
@@ -139,7 +152,12 @@ function plan(metadataReader, container, isMultiInject, targetType, serviceIdent
|
|
|
139
152
|
}
|
|
140
153
|
}
|
|
141
154
|
function createMockRequest(container, serviceIdentifier, key, value) {
|
|
142
|
-
var
|
|
155
|
+
var metadataList = _getTargetMetadata(false, serviceIdentifier, key, value);
|
|
156
|
+
var classElementMetadata = getClassElementMetadataFromLegacyMetadata(metadataList);
|
|
157
|
+
if (classElementMetadata.kind === ClassElementMetadataKind.unmanaged) {
|
|
158
|
+
throw new Error('Unexpected metadata when creating target');
|
|
159
|
+
}
|
|
160
|
+
var target = new TargetImpl('', classElementMetadata, 'Variable');
|
|
143
161
|
var context = new Context(container);
|
|
144
162
|
var request = new Request(serviceIdentifier, context, null, [], target);
|
|
145
163
|
return request;
|
|
@@ -7,12 +7,15 @@ var QueryableString = (function () {
|
|
|
7
7
|
};
|
|
8
8
|
QueryableString.prototype.endsWith = function (searchString) {
|
|
9
9
|
var reverseString = '';
|
|
10
|
-
var reverseSearchString = searchString
|
|
10
|
+
var reverseSearchString = searchString
|
|
11
|
+
.split('')
|
|
12
|
+
.reverse()
|
|
13
|
+
.join('');
|
|
11
14
|
reverseString = this.str.split('').reverse().join('');
|
|
12
15
|
return this.startsWith.call({ str: reverseString }, reverseSearchString);
|
|
13
16
|
};
|
|
14
17
|
QueryableString.prototype.contains = function (searchString) {
|
|
15
|
-
return
|
|
18
|
+
return this.str.indexOf(searchString) !== -1;
|
|
16
19
|
};
|
|
17
20
|
QueryableString.prototype.equals = function (compareString) {
|
|
18
21
|
return this.str === compareString;
|
|
@@ -1,112 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
3
|
-
if (ar || !(i in from)) {
|
|
4
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
5
|
-
ar[i] = from[i];
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
9
|
-
};
|
|
10
|
-
import { LazyServiceIdentifier } from '../annotation/lazy_service_identifier';
|
|
11
|
-
import * as ERROR_MSGS from '../constants/error_msgs';
|
|
12
|
-
import { TargetTypeEnum } from '../constants/literal_types';
|
|
1
|
+
import { getTargets } from '@inversifyjs/core';
|
|
13
2
|
import * as METADATA_KEY from '../constants/metadata_keys';
|
|
14
3
|
import { getFunctionName } from '../utils/serialization';
|
|
15
|
-
import { Target } from './target';
|
|
16
4
|
function getDependencies(metadataReader, func) {
|
|
17
|
-
|
|
18
|
-
return getTargets(metadataReader, constructorName, func, false);
|
|
19
|
-
}
|
|
20
|
-
function getTargets(metadataReader, constructorName, func, isBaseClass) {
|
|
21
|
-
var metadata = metadataReader.getConstructorMetadata(func);
|
|
22
|
-
var serviceIdentifiers = metadata.compilerGeneratedMetadata;
|
|
23
|
-
if (serviceIdentifiers === undefined) {
|
|
24
|
-
var msg = "".concat(ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION, " ").concat(constructorName, ".");
|
|
25
|
-
throw new Error(msg);
|
|
26
|
-
}
|
|
27
|
-
var constructorArgsMetadata = metadata.userGeneratedMetadata;
|
|
28
|
-
var keys = Object.keys(constructorArgsMetadata);
|
|
29
|
-
var hasUserDeclaredUnknownInjections = (func.length === 0 && keys.length > 0);
|
|
30
|
-
var hasOptionalParameters = keys.length > func.length;
|
|
31
|
-
var iterations = (hasUserDeclaredUnknownInjections || hasOptionalParameters) ? keys.length : func.length;
|
|
32
|
-
var constructorTargets = getConstructorArgsAsTargets(isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata, iterations);
|
|
33
|
-
var propertyTargets = getClassPropsAsTargets(metadataReader, func, constructorName);
|
|
34
|
-
var targets = __spreadArray(__spreadArray([], constructorTargets, true), propertyTargets, true);
|
|
35
|
-
return targets;
|
|
36
|
-
}
|
|
37
|
-
function getConstructorArgsAsTarget(index, isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata) {
|
|
38
|
-
var targetMetadata = constructorArgsMetadata[index.toString()] || [];
|
|
39
|
-
var metadata = formatTargetMetadata(targetMetadata);
|
|
40
|
-
var isManaged = metadata.unmanaged !== true;
|
|
41
|
-
var serviceIdentifier = serviceIdentifiers[index];
|
|
42
|
-
var injectIdentifier = metadata.inject || metadata.multiInject;
|
|
43
|
-
serviceIdentifier = (injectIdentifier ? injectIdentifier : serviceIdentifier);
|
|
44
|
-
if (serviceIdentifier instanceof LazyServiceIdentifier) {
|
|
45
|
-
serviceIdentifier = serviceIdentifier.unwrap();
|
|
46
|
-
}
|
|
47
|
-
if (isManaged) {
|
|
48
|
-
var isObject = serviceIdentifier === Object;
|
|
49
|
-
var isFunction = serviceIdentifier === Function;
|
|
50
|
-
var isUndefined = serviceIdentifier === undefined;
|
|
51
|
-
var isUnknownType = isObject || isFunction || isUndefined;
|
|
52
|
-
if (!isBaseClass && isUnknownType) {
|
|
53
|
-
var msg = "".concat(ERROR_MSGS.MISSING_INJECT_ANNOTATION, " argument ").concat(index, " in class ").concat(constructorName, ".");
|
|
54
|
-
throw new Error(msg);
|
|
55
|
-
}
|
|
56
|
-
var target = new Target(TargetTypeEnum.ConstructorArgument, metadata.targetName, serviceIdentifier);
|
|
57
|
-
target.metadata = targetMetadata;
|
|
58
|
-
return target;
|
|
59
|
-
}
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
function getConstructorArgsAsTargets(isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata, iterations) {
|
|
63
|
-
var targets = [];
|
|
64
|
-
for (var i = 0; i < iterations; i++) {
|
|
65
|
-
var index = i;
|
|
66
|
-
var target = getConstructorArgsAsTarget(index, isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata);
|
|
67
|
-
if (target !== null) {
|
|
68
|
-
targets.push(target);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return targets;
|
|
72
|
-
}
|
|
73
|
-
function _getServiceIdentifierForProperty(inject, multiInject, propertyName, className) {
|
|
74
|
-
var serviceIdentifier = (inject || multiInject);
|
|
75
|
-
if (serviceIdentifier === undefined) {
|
|
76
|
-
var msg = "".concat(ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION, " for property ").concat(String(propertyName), " in class ").concat(className, ".");
|
|
77
|
-
throw new Error(msg);
|
|
78
|
-
}
|
|
79
|
-
return serviceIdentifier;
|
|
80
|
-
}
|
|
81
|
-
function getClassPropsAsTargets(metadataReader, constructorFunc, constructorName) {
|
|
82
|
-
var classPropsMetadata = metadataReader.getPropertiesMetadata(constructorFunc);
|
|
83
|
-
var targets = [];
|
|
84
|
-
var symbolKeys = Object.getOwnPropertySymbols(classPropsMetadata);
|
|
85
|
-
var stringKeys = Object.keys(classPropsMetadata);
|
|
86
|
-
var keys = stringKeys.concat(symbolKeys);
|
|
87
|
-
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
|
|
88
|
-
var key = keys_1[_i];
|
|
89
|
-
var targetMetadata = classPropsMetadata[key];
|
|
90
|
-
var metadata = formatTargetMetadata(targetMetadata);
|
|
91
|
-
var identifier = metadata.targetName || key;
|
|
92
|
-
var serviceIdentifier = _getServiceIdentifierForProperty(metadata.inject, metadata.multiInject, key, constructorName);
|
|
93
|
-
var target = new Target(TargetTypeEnum.ClassProperty, identifier, serviceIdentifier);
|
|
94
|
-
target.metadata = targetMetadata;
|
|
95
|
-
targets.push(target);
|
|
96
|
-
}
|
|
97
|
-
var baseConstructor = Object.getPrototypeOf(constructorFunc.prototype).constructor;
|
|
98
|
-
if (baseConstructor !== Object) {
|
|
99
|
-
var baseTargets = getClassPropsAsTargets(metadataReader, baseConstructor, constructorName);
|
|
100
|
-
targets = __spreadArray(__spreadArray([], targets, true), baseTargets, true);
|
|
101
|
-
}
|
|
102
|
-
return targets;
|
|
5
|
+
return getTargets(metadataReader)(func);
|
|
103
6
|
}
|
|
104
7
|
function getBaseClassDependencyCount(metadataReader, func) {
|
|
105
8
|
var baseConstructor = Object.getPrototypeOf(func.prototype).constructor;
|
|
106
9
|
if (baseConstructor !== Object) {
|
|
107
|
-
var
|
|
108
|
-
var
|
|
109
|
-
|
|
10
|
+
var targets = getTargets(metadataReader)(baseConstructor);
|
|
11
|
+
var metadata = targets.map(function (t) {
|
|
12
|
+
return t.metadata.filter(function (m) { return m.key === METADATA_KEY.UNMANAGED_TAG; });
|
|
13
|
+
});
|
|
110
14
|
var unmanagedCount = [].concat.apply([], metadata).length;
|
|
111
15
|
var dependencyCount = targets.length - unmanagedCount;
|
|
112
16
|
if (dependencyCount > 0) {
|
|
@@ -120,16 +24,4 @@ function getBaseClassDependencyCount(metadataReader, func) {
|
|
|
120
24
|
return 0;
|
|
121
25
|
}
|
|
122
26
|
}
|
|
123
|
-
function formatTargetMetadata(targetMetadata) {
|
|
124
|
-
var targetMetadataMap = {};
|
|
125
|
-
targetMetadata.forEach(function (m) {
|
|
126
|
-
targetMetadataMap[m.key.toString()] = m.value;
|
|
127
|
-
});
|
|
128
|
-
return {
|
|
129
|
-
inject: targetMetadataMap[METADATA_KEY.INJECT_TAG],
|
|
130
|
-
multiInject: targetMetadataMap[METADATA_KEY.MULTI_INJECT_TAG],
|
|
131
|
-
targetName: targetMetadataMap[METADATA_KEY.NAME_TAG],
|
|
132
|
-
unmanaged: targetMetadataMap[METADATA_KEY.UNMANAGED_TAG]
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
27
|
export { getDependencies, getBaseClassDependencyCount, getFunctionName };
|
package/es/planning/request.js
CHANGED
|
@@ -7,10 +7,8 @@ var Request = (function () {
|
|
|
7
7
|
this.parentRequest = parentRequest;
|
|
8
8
|
this.target = target;
|
|
9
9
|
this.childRequests = [];
|
|
10
|
-
this.bindings =
|
|
11
|
-
this.requestScope = parentRequest === null
|
|
12
|
-
? new Map()
|
|
13
|
-
: null;
|
|
10
|
+
this.bindings = Array.isArray(bindings) ? bindings : [bindings];
|
|
11
|
+
this.requestScope = parentRequest === null ? new Map() : null;
|
|
14
12
|
}
|
|
15
13
|
Request.prototype.addChildRequest = function (serviceIdentifier, bindings, target) {
|
|
16
14
|
var child = new Request(serviceIdentifier, this.parentContext, this, bindings, target);
|
package/es/planning/target.js
CHANGED
|
@@ -8,7 +8,9 @@ var Target = (function () {
|
|
|
8
8
|
this.id = id();
|
|
9
9
|
this.type = type;
|
|
10
10
|
this.serviceIdentifier = serviceIdentifier;
|
|
11
|
-
var queryableName = typeof identifier === 'symbol'
|
|
11
|
+
var queryableName = typeof identifier === 'symbol'
|
|
12
|
+
? getSymbolDescription(identifier)
|
|
13
|
+
: identifier;
|
|
12
14
|
this.name = new QueryableString(queryableName || '');
|
|
13
15
|
this.identifier = identifier;
|
|
14
16
|
this.metadata = new Array();
|
|
@@ -42,7 +44,9 @@ var Target = (function () {
|
|
|
42
44
|
return this.hasTag(METADATA_KEY.NAMED_TAG);
|
|
43
45
|
};
|
|
44
46
|
Target.prototype.isTagged = function () {
|
|
45
|
-
return this.metadata.some(function (metadata) {
|
|
47
|
+
return this.metadata.some(function (metadata) {
|
|
48
|
+
return METADATA_KEY.NON_CUSTOM_TAG_KEYS.every(function (key) { return metadata.key !== key; });
|
|
49
|
+
});
|
|
46
50
|
};
|
|
47
51
|
Target.prototype.isOptional = function () {
|
|
48
52
|
return this.matchesTag(METADATA_KEY.OPTIONAL_TAG)(true);
|
|
@@ -55,7 +59,9 @@ var Target = (function () {
|
|
|
55
59
|
};
|
|
56
60
|
Target.prototype.getCustomTags = function () {
|
|
57
61
|
if (this.isTagged()) {
|
|
58
|
-
return this.metadata.filter(function (metadata) {
|
|
62
|
+
return this.metadata.filter(function (metadata) {
|
|
63
|
+
return METADATA_KEY.NON_CUSTOM_TAG_KEYS.every(function (key) { return metadata.key !== key; });
|
|
64
|
+
});
|
|
59
65
|
}
|
|
60
66
|
else {
|
|
61
67
|
return null;
|
|
@@ -54,7 +54,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
54
54
|
}
|
|
55
55
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
56
56
|
};
|
|
57
|
-
import { ON_DEACTIVATION_ERROR, POST_CONSTRUCT_ERROR, PRE_DESTROY_ERROR } from '../constants/error_msgs';
|
|
57
|
+
import { ON_DEACTIVATION_ERROR, POST_CONSTRUCT_ERROR, PRE_DESTROY_ERROR, } from '../constants/error_msgs';
|
|
58
58
|
import { BindingScopeEnum, TargetTypeEnum } from '../constants/literal_types';
|
|
59
59
|
import * as METADATA_KEY from '../constants/metadata_keys';
|
|
60
60
|
import { isPromise, isPromiseOrContainsPromise } from '../utils/async';
|
|
@@ -73,7 +73,12 @@ function _resolveRequests(childRequests, resolveRequest) {
|
|
|
73
73
|
resolvedRequests.isAsync = isPromiseOrContainsPromise(injection);
|
|
74
74
|
}
|
|
75
75
|
return resolvedRequests;
|
|
76
|
-
}, {
|
|
76
|
+
}, {
|
|
77
|
+
constructorInjections: [],
|
|
78
|
+
isAsync: false,
|
|
79
|
+
propertyInjections: [],
|
|
80
|
+
propertyRequests: [],
|
|
81
|
+
});
|
|
77
82
|
}
|
|
78
83
|
function _createInstance(constr, childRequests, resolveRequest) {
|
|
79
84
|
var result;
|
|
@@ -167,9 +172,7 @@ function _validateInstanceResolution(binding, constr) {
|
|
|
167
172
|
}
|
|
168
173
|
}
|
|
169
174
|
function _throwIfHandlingDeactivation(binding, constr) {
|
|
170
|
-
var scopeErrorMessage = "Class cannot be instantiated in ".concat(binding.scope === BindingScopeEnum.Request ?
|
|
171
|
-
'request' :
|
|
172
|
-
'transient', " scope.");
|
|
175
|
+
var scopeErrorMessage = "Class cannot be instantiated in ".concat(binding.scope === BindingScopeEnum.Request ? 'request' : 'transient', " scope.");
|
|
173
176
|
if (typeof binding.onDeactivation === 'function') {
|
|
174
177
|
throw new Error(ON_DEACTIVATION_ERROR(constr.name, scopeErrorMessage));
|
|
175
178
|
}
|
|
@@ -181,7 +184,9 @@ function resolveInstance(binding, constr, childRequests, resolveRequest) {
|
|
|
181
184
|
_validateInstanceResolution(binding, constr);
|
|
182
185
|
var result = _createInstance(constr, childRequests, resolveRequest);
|
|
183
186
|
if (isPromise(result)) {
|
|
184
|
-
return result.then(function (resolvedResult) {
|
|
187
|
+
return result.then(function (resolvedResult) {
|
|
188
|
+
return _getInstanceAfterPostConstruct(constr, resolvedResult);
|
|
189
|
+
});
|
|
185
190
|
}
|
|
186
191
|
else {
|
|
187
192
|
return _getInstanceAfterPostConstruct(constr, result);
|
|
@@ -39,7 +39,7 @@ import { BindingTypeEnum } from '../constants/literal_types';
|
|
|
39
39
|
import { getBindingDictionary } from '../planning/planner';
|
|
40
40
|
import { saveToScope, tryGetFromScope } from '../scope/scope';
|
|
41
41
|
import { isPromise } from '../utils/async';
|
|
42
|
-
import {
|
|
42
|
+
import { ensureFullyBound, getFactoryDetails } from '../utils/binding_utils';
|
|
43
43
|
import { tryAndThrowErrorIfStackOverflow } from '../utils/exceptions';
|
|
44
44
|
import { resolveInstance } from './instantiation';
|
|
45
45
|
var _resolveRequest = function (requestScope) {
|
|
@@ -54,8 +54,8 @@ var _resolveRequest = function (requestScope) {
|
|
|
54
54
|
!request.parentRequest.target.matchesArray(request.target.serviceIdentifier);
|
|
55
55
|
if (targetIsAnArray && targetParentIsNotAnArray) {
|
|
56
56
|
return childRequests.map(function (childRequest) {
|
|
57
|
-
var
|
|
58
|
-
return
|
|
57
|
+
var resolveRequest = _resolveRequest(requestScope);
|
|
58
|
+
return resolveRequest(childRequest);
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
else {
|
|
@@ -69,7 +69,11 @@ var _resolveRequest = function (requestScope) {
|
|
|
69
69
|
};
|
|
70
70
|
var _resolveFactoryFromBinding = function (binding, context) {
|
|
71
71
|
var factoryDetails = getFactoryDetails(binding);
|
|
72
|
-
return tryAndThrowErrorIfStackOverflow(function () {
|
|
72
|
+
return tryAndThrowErrorIfStackOverflow(function () {
|
|
73
|
+
return factoryDetails.factory.bind(binding)(context);
|
|
74
|
+
}, function () {
|
|
75
|
+
return new Error(ERROR_MSGS.CIRCULAR_DEPENDENCY_IN_FACTORY(factoryDetails.factoryType, context.currentRequest.serviceIdentifier.toString()));
|
|
76
|
+
});
|
|
73
77
|
};
|
|
74
78
|
var _getResolvedFromBinding = function (requestScope, request, binding) {
|
|
75
79
|
var result;
|
|
@@ -104,7 +108,9 @@ var _resolveBinding = function (requestScope, request, binding) {
|
|
|
104
108
|
return _resolveInScope(requestScope, binding, function () {
|
|
105
109
|
var result = _getResolvedFromBinding(requestScope, request, binding);
|
|
106
110
|
if (isPromise(result)) {
|
|
107
|
-
result = result.then(function (resolved) {
|
|
111
|
+
result = result.then(function (resolved) {
|
|
112
|
+
return _onActivation(request, binding, resolved);
|
|
113
|
+
});
|
|
108
114
|
}
|
|
109
115
|
else {
|
|
110
116
|
result = _onActivation(request, binding, result);
|
|
@@ -129,7 +135,8 @@ function _onActivation(request, binding, resolved) {
|
|
|
129
135
|
result = _activateContainer(activationsIterator, context_1, result);
|
|
130
136
|
}
|
|
131
137
|
containersIteratorResult = containersIterator.next();
|
|
132
|
-
} while (containersIteratorResult.done !== true &&
|
|
138
|
+
} while (containersIteratorResult.done !== true &&
|
|
139
|
+
!getBindingDictionary(container).hasKey(request.serviceIdentifier));
|
|
133
140
|
return result;
|
|
134
141
|
}
|
|
135
142
|
var _bindingActivation = function (context, binding, previousResult) {
|
|
@@ -144,7 +151,7 @@ var _bindingActivation = function (context, binding, previousResult) {
|
|
|
144
151
|
};
|
|
145
152
|
var _activateContainer = function (activationsIterator, context, result) {
|
|
146
153
|
var activation = activationsIterator.next();
|
|
147
|
-
while (
|
|
154
|
+
while (activation.done !== true) {
|
|
148
155
|
result = activation.value(context, result);
|
|
149
156
|
if (isPromise(result)) {
|
|
150
157
|
return _activateContainerAsync(activationsIterator, context, result);
|
|
@@ -163,7 +170,7 @@ var _activateContainerAsync = function (activationsIterator, context, resultProm
|
|
|
163
170
|
activation = activationsIterator.next();
|
|
164
171
|
_a.label = 2;
|
|
165
172
|
case 2:
|
|
166
|
-
if (
|
|
173
|
+
if (!(activation.done !== true)) return [3, 4];
|
|
167
174
|
return [4, activation.value(context, result)];
|
|
168
175
|
case 3:
|
|
169
176
|
result = _a.sent();
|
|
@@ -175,7 +182,9 @@ var _activateContainerAsync = function (activationsIterator, context, resultProm
|
|
|
175
182
|
}); };
|
|
176
183
|
var _getContainerActivationsForService = function (container, serviceIdentifier) {
|
|
177
184
|
var activations = container._activations;
|
|
178
|
-
return activations.hasKey(serviceIdentifier)
|
|
185
|
+
return activations.hasKey(serviceIdentifier)
|
|
186
|
+
? activations.get(serviceIdentifier).values()
|
|
187
|
+
: [].values();
|
|
179
188
|
};
|
|
180
189
|
var _getContainersIterator = function (container) {
|
|
181
190
|
var containersStack = [container];
|
|
@@ -199,7 +208,7 @@ var _getContainersIterator = function (container) {
|
|
|
199
208
|
return containersIterator;
|
|
200
209
|
};
|
|
201
210
|
function resolve(context) {
|
|
202
|
-
var
|
|
203
|
-
return
|
|
211
|
+
var resolveRequestFunction = _resolveRequest(context.plan.rootRequest.requestScope);
|
|
212
|
+
return resolveRequestFunction(context.plan.rootRequest);
|
|
204
213
|
}
|
|
205
214
|
export { resolve };
|
package/es/scope/scope.js
CHANGED
|
@@ -37,7 +37,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
37
37
|
import { BindingScopeEnum } from '../constants/literal_types';
|
|
38
38
|
import { isPromise } from '../utils/async';
|
|
39
39
|
export var tryGetFromScope = function (requestScope, binding) {
|
|
40
|
-
if (
|
|
40
|
+
if (binding.scope === BindingScopeEnum.Singleton && binding.activated) {
|
|
41
41
|
return binding.cache;
|
|
42
42
|
}
|
|
43
43
|
if (binding.scope === BindingScopeEnum.Request &&
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import * as ERROR_MSGS from
|
|
2
|
-
import { BindingScopeEnum, BindingTypeEnum } from
|
|
3
|
-
import { BindingInWhenOnSyntax } from
|
|
4
|
-
import { BindingWhenOnSyntax } from
|
|
1
|
+
import * as ERROR_MSGS from '../constants/error_msgs';
|
|
2
|
+
import { BindingScopeEnum, BindingTypeEnum } from '../constants/literal_types';
|
|
3
|
+
import { BindingInWhenOnSyntax } from './binding_in_when_on_syntax';
|
|
4
|
+
import { BindingWhenOnSyntax } from './binding_when_on_syntax';
|
|
5
5
|
var BindingToSyntax = (function () {
|
|
6
6
|
function BindingToSyntax(binding) {
|
|
7
7
|
this._binding = binding;
|
|
@@ -12,10 +12,11 @@ var BindingToSyntax = (function () {
|
|
|
12
12
|
return new BindingInWhenOnSyntax(this._binding);
|
|
13
13
|
};
|
|
14
14
|
BindingToSyntax.prototype.toSelf = function () {
|
|
15
|
-
if (typeof this._binding.serviceIdentifier !==
|
|
16
|
-
throw new Error(
|
|
15
|
+
if (typeof this._binding.serviceIdentifier !== 'function') {
|
|
16
|
+
throw new Error(ERROR_MSGS.INVALID_TO_SELF_VALUE);
|
|
17
17
|
}
|
|
18
|
-
var self = this._binding
|
|
18
|
+
var self = this._binding
|
|
19
|
+
.serviceIdentifier;
|
|
19
20
|
return this.to(self);
|
|
20
21
|
};
|
|
21
22
|
BindingToSyntax.prototype.toConstantValue = function (value) {
|
|
@@ -46,7 +47,7 @@ var BindingToSyntax = (function () {
|
|
|
46
47
|
return new BindingWhenOnSyntax(this._binding);
|
|
47
48
|
};
|
|
48
49
|
BindingToSyntax.prototype.toFunction = function (func) {
|
|
49
|
-
if (typeof func !==
|
|
50
|
+
if (typeof func !== 'function') {
|
|
50
51
|
throw new Error(ERROR_MSGS.INVALID_FUNCTION_BINDING);
|
|
51
52
|
}
|
|
52
53
|
var bindingWhenOnSyntax = this.toConstantValue(func);
|
|
@@ -57,7 +58,9 @@ var BindingToSyntax = (function () {
|
|
|
57
58
|
BindingToSyntax.prototype.toAutoFactory = function (serviceIdentifier) {
|
|
58
59
|
this._binding.type = BindingTypeEnum.Factory;
|
|
59
60
|
this._binding.factory = function (context) {
|
|
60
|
-
var autofactory = function () {
|
|
61
|
+
var autofactory = function () {
|
|
62
|
+
return context.container.get(serviceIdentifier);
|
|
63
|
+
};
|
|
61
64
|
return autofactory;
|
|
62
65
|
};
|
|
63
66
|
this._binding.scope = BindingScopeEnum.Singleton;
|
|
@@ -66,7 +69,9 @@ var BindingToSyntax = (function () {
|
|
|
66
69
|
BindingToSyntax.prototype.toAutoNamedFactory = function (serviceIdentifier) {
|
|
67
70
|
this._binding.type = BindingTypeEnum.Factory;
|
|
68
71
|
this._binding.factory = function (context) {
|
|
69
|
-
return function (named) {
|
|
72
|
+
return function (named) {
|
|
73
|
+
return context.container.getNamed(serviceIdentifier, named);
|
|
74
|
+
};
|
|
70
75
|
};
|
|
71
76
|
return new BindingWhenOnSyntax(this._binding);
|
|
72
77
|
};
|
|
@@ -77,7 +82,9 @@ var BindingToSyntax = (function () {
|
|
|
77
82
|
return new BindingWhenOnSyntax(this._binding);
|
|
78
83
|
};
|
|
79
84
|
BindingToSyntax.prototype.toService = function (service) {
|
|
80
|
-
this.toDynamicValue(function (context) {
|
|
85
|
+
this.toDynamicValue(function (context) {
|
|
86
|
+
return context.container.get(service);
|
|
87
|
+
});
|
|
81
88
|
};
|
|
82
89
|
return BindingToSyntax;
|
|
83
90
|
}());
|