summaryrefslogtreecommitdiff
path: root/src/node_modules/inversify/lib/planning/planner.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2021-12-21 16:52:28 +0100
committerMinteck <contact@minteck.org>2021-12-21 16:52:28 +0100
commit46e43f4bde4a35785b4997b81e86cd19f046b69b (patch)
treec53c2f826f777f9d6b2d249dab556feb72a6c3a6 /src/node_modules/inversify/lib/planning/planner.js
downloadlangdetect-46e43f4bde4a35785b4997b81e86cd19f046b69b.tar.gz
langdetect-46e43f4bde4a35785b4997b81e86cd19f046b69b.tar.bz2
langdetect-46e43f4bde4a35785b4997b81e86cd19f046b69b.zip
Commit
Diffstat (limited to 'src/node_modules/inversify/lib/planning/planner.js')
-rw-r--r--src/node_modules/inversify/lib/planning/planner.js155
1 files changed, 155 insertions, 0 deletions
diff --git a/src/node_modules/inversify/lib/planning/planner.js b/src/node_modules/inversify/lib/planning/planner.js
new file mode 100644
index 0000000..c05eec9
--- /dev/null
+++ b/src/node_modules/inversify/lib/planning/planner.js
@@ -0,0 +1,155 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var binding_count_1 = require("../bindings/binding_count");
+var ERROR_MSGS = require("../constants/error_msgs");
+var literal_types_1 = require("../constants/literal_types");
+var METADATA_KEY = require("../constants/metadata_keys");
+var exceptions_1 = require("../utils/exceptions");
+var serialization_1 = require("../utils/serialization");
+var context_1 = require("./context");
+var metadata_1 = require("./metadata");
+var plan_1 = require("./plan");
+var reflection_utils_1 = require("./reflection_utils");
+var request_1 = require("./request");
+var target_1 = require("./target");
+function getBindingDictionary(cntnr) {
+ return cntnr._bindingDictionary;
+}
+exports.getBindingDictionary = getBindingDictionary;
+function _createTarget(isMultiInject, targetType, serviceIdentifier, name, key, value) {
+ var metadataKey = isMultiInject ? METADATA_KEY.MULTI_INJECT_TAG : METADATA_KEY.INJECT_TAG;
+ var injectMetadata = new metadata_1.Metadata(metadataKey, serviceIdentifier);
+ var target = new target_1.Target(targetType, name, serviceIdentifier, injectMetadata);
+ if (key !== undefined) {
+ var tagMetadata = new metadata_1.Metadata(key, value);
+ target.metadata.push(tagMetadata);
+ }
+ return target;
+}
+function _getActiveBindings(metadataReader, avoidConstraints, context, parentRequest, target) {
+ var bindings = getBindings(context.container, target.serviceIdentifier);
+ var activeBindings = [];
+ if (bindings.length === binding_count_1.BindingCount.NoBindingsAvailable &&
+ context.container.options.autoBindInjectable &&
+ typeof target.serviceIdentifier === "function" &&
+ metadataReader.getConstructorMetadata(target.serviceIdentifier).compilerGeneratedMetadata) {
+ context.container.bind(target.serviceIdentifier).toSelf();
+ bindings = getBindings(context.container, target.serviceIdentifier);
+ }
+ if (!avoidConstraints) {
+ activeBindings = bindings.filter(function (binding) {
+ var request = new request_1.Request(binding.serviceIdentifier, context, parentRequest, binding, target);
+ return binding.constraint(request);
+ });
+ }
+ else {
+ activeBindings = bindings;
+ }
+ _validateActiveBindingCount(target.serviceIdentifier, activeBindings, target, context.container);
+ return activeBindings;
+}
+function _validateActiveBindingCount(serviceIdentifier, bindings, target, container) {
+ switch (bindings.length) {
+ case binding_count_1.BindingCount.NoBindingsAvailable:
+ if (target.isOptional()) {
+ return bindings;
+ }
+ else {
+ var serviceIdentifierString = serialization_1.getServiceIdentifierAsString(serviceIdentifier);
+ var msg = ERROR_MSGS.NOT_REGISTERED;
+ msg += serialization_1.listMetadataForTarget(serviceIdentifierString, target);
+ msg += serialization_1.listRegisteredBindingsForServiceIdentifier(container, serviceIdentifierString, getBindings);
+ throw new Error(msg);
+ }
+ case binding_count_1.BindingCount.OnlyOneBindingAvailable:
+ if (!target.isArray()) {
+ return bindings;
+ }
+ case binding_count_1.BindingCount.MultipleBindingsAvailable:
+ default:
+ if (!target.isArray()) {
+ var serviceIdentifierString = serialization_1.getServiceIdentifierAsString(serviceIdentifier);
+ var msg = ERROR_MSGS.AMBIGUOUS_MATCH + " " + serviceIdentifierString;
+ msg += serialization_1.listRegisteredBindingsForServiceIdentifier(container, serviceIdentifierString, getBindings);
+ throw new Error(msg);
+ }
+ else {
+ return bindings;
+ }
+ }
+}
+function _createSubRequests(metadataReader, avoidConstraints, serviceIdentifier, context, parentRequest, target) {
+ var activeBindings;
+ var childRequest;
+ if (parentRequest === null) {
+ activeBindings = _getActiveBindings(metadataReader, avoidConstraints, context, null, target);
+ childRequest = new request_1.Request(serviceIdentifier, context, null, activeBindings, target);
+ var thePlan = new plan_1.Plan(context, childRequest);
+ context.addPlan(thePlan);
+ }
+ else {
+ activeBindings = _getActiveBindings(metadataReader, avoidConstraints, context, parentRequest, target);
+ childRequest = parentRequest.addChildRequest(target.serviceIdentifier, activeBindings, target);
+ }
+ activeBindings.forEach(function (binding) {
+ var subChildRequest = null;
+ if (target.isArray()) {
+ subChildRequest = childRequest.addChildRequest(binding.serviceIdentifier, binding, target);
+ }
+ else {
+ if (binding.cache) {
+ return;
+ }
+ subChildRequest = childRequest;
+ }
+ if (binding.type === literal_types_1.BindingTypeEnum.Instance && binding.implementationType !== null) {
+ var dependencies = reflection_utils_1.getDependencies(metadataReader, binding.implementationType);
+ if (!context.container.options.skipBaseClassChecks) {
+ var baseClassDependencyCount = reflection_utils_1.getBaseClassDependencyCount(metadataReader, binding.implementationType);
+ if (dependencies.length < baseClassDependencyCount) {
+ var error = ERROR_MSGS.ARGUMENTS_LENGTH_MISMATCH(reflection_utils_1.getFunctionName(binding.implementationType));
+ throw new Error(error);
+ }
+ }
+ dependencies.forEach(function (dependency) {
+ _createSubRequests(metadataReader, false, dependency.serviceIdentifier, context, subChildRequest, dependency);
+ });
+ }
+ });
+}
+function getBindings(container, serviceIdentifier) {
+ var bindings = [];
+ var bindingDictionary = getBindingDictionary(container);
+ if (bindingDictionary.hasKey(serviceIdentifier)) {
+ bindings = bindingDictionary.get(serviceIdentifier);
+ }
+ else if (container.parent !== null) {
+ bindings = getBindings(container.parent, serviceIdentifier);
+ }
+ return bindings;
+}
+function plan(metadataReader, container, isMultiInject, targetType, serviceIdentifier, key, value, avoidConstraints) {
+ if (avoidConstraints === void 0) { avoidConstraints = false; }
+ var context = new context_1.Context(container);
+ var target = _createTarget(isMultiInject, targetType, serviceIdentifier, "", key, value);
+ try {
+ _createSubRequests(metadataReader, avoidConstraints, serviceIdentifier, context, null, target);
+ return context;
+ }
+ catch (error) {
+ if (exceptions_1.isStackOverflowExeption(error)) {
+ if (context.plan) {
+ serialization_1.circularDependencyToException(context.plan.rootRequest);
+ }
+ }
+ throw error;
+ }
+}
+exports.plan = plan;
+function createMockRequest(container, serviceIdentifier, key, value) {
+ var target = new target_1.Target(literal_types_1.TargetTypeEnum.Variable, "", serviceIdentifier, new metadata_1.Metadata(key, value));
+ var context = new context_1.Context(container);
+ var request = new request_1.Request(serviceIdentifier, context, null, [], target);
+ return request;
+}
+exports.createMockRequest = createMockRequest;