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