UNPKG

8.94 kBJavaScriptView Raw
1var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
2 if (k2 === undefined) k2 = k;
3 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4}) : (function(o, m, k, k2) {
5 if (k2 === undefined) k2 = k;
6 o[k2] = m[k];
7}));
8var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
9 Object.defineProperty(o, "default", { enumerable: true, value: v });
10}) : function(o, v) {
11 o["default"] = v;
12});
13var __importStar = (this && this.__importStar) || function (mod) {
14 if (mod && mod.__esModule) return mod;
15 var result = {};
16 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
17 __setModuleDefault(result, mod);
18 return result;
19};
20define(["require", "exports", "../bindings/binding_count", "../constants/error_msgs", "../constants/literal_types", "../constants/metadata_keys", "../utils/exceptions", "../utils/serialization", "./context", "./metadata", "./plan", "./reflection_utils", "./request", "./target"], function (require, exports, binding_count_1, ERROR_MSGS, literal_types_1, METADATA_KEY, exceptions_1, serialization_1, context_1, metadata_1, plan_1, reflection_utils_1, request_1, target_1) {
21 "use strict";
22 Object.defineProperty(exports, "__esModule", { value: true });
23 exports.getBindingDictionary = exports.createMockRequest = exports.plan = void 0;
24 ERROR_MSGS = __importStar(ERROR_MSGS);
25 METADATA_KEY = __importStar(METADATA_KEY);
26 function getBindingDictionary(cntnr) {
27 return cntnr._bindingDictionary;
28 }
29 exports.getBindingDictionary = getBindingDictionary;
30 function _createTarget(isMultiInject, targetType, serviceIdentifier, name, key, value) {
31 var metadataKey = isMultiInject ? METADATA_KEY.MULTI_INJECT_TAG : METADATA_KEY.INJECT_TAG;
32 var injectMetadata = new metadata_1.Metadata(metadataKey, serviceIdentifier);
33 var target = new target_1.Target(targetType, name, serviceIdentifier, injectMetadata);
34 if (key !== undefined) {
35 var tagMetadata = new metadata_1.Metadata(key, value);
36 target.metadata.push(tagMetadata);
37 }
38 return target;
39 }
40 function _getActiveBindings(metadataReader, avoidConstraints, context, parentRequest, target) {
41 var bindings = getBindings(context.container, target.serviceIdentifier);
42 var activeBindings = [];
43 if (bindings.length === binding_count_1.BindingCount.NoBindingsAvailable &&
44 context.container.options.autoBindInjectable &&
45 typeof target.serviceIdentifier === "function" &&
46 metadataReader.getConstructorMetadata(target.serviceIdentifier).compilerGeneratedMetadata) {
47 context.container.bind(target.serviceIdentifier).toSelf();
48 bindings = getBindings(context.container, target.serviceIdentifier);
49 }
50 if (!avoidConstraints) {
51 activeBindings = bindings.filter(function (binding) {
52 var request = new request_1.Request(binding.serviceIdentifier, context, parentRequest, binding, target);
53 return binding.constraint(request);
54 });
55 }
56 else {
57 activeBindings = bindings;
58 }
59 _validateActiveBindingCount(target.serviceIdentifier, activeBindings, target, context.container);
60 return activeBindings;
61 }
62 function _validateActiveBindingCount(serviceIdentifier, bindings, target, container) {
63 switch (bindings.length) {
64 case binding_count_1.BindingCount.NoBindingsAvailable:
65 if (target.isOptional()) {
66 return bindings;
67 }
68 else {
69 var serviceIdentifierString = (0, serialization_1.getServiceIdentifierAsString)(serviceIdentifier);
70 var msg = ERROR_MSGS.NOT_REGISTERED;
71 msg += (0, serialization_1.listMetadataForTarget)(serviceIdentifierString, target);
72 msg += (0, serialization_1.listRegisteredBindingsForServiceIdentifier)(container, serviceIdentifierString, getBindings);
73 throw new Error(msg);
74 }
75 case binding_count_1.BindingCount.OnlyOneBindingAvailable:
76 return bindings;
77 case binding_count_1.BindingCount.MultipleBindingsAvailable:
78 default:
79 if (!target.isArray()) {
80 var serviceIdentifierString = (0, serialization_1.getServiceIdentifierAsString)(serviceIdentifier);
81 var msg = ERROR_MSGS.AMBIGUOUS_MATCH + " " + serviceIdentifierString;
82 msg += (0, serialization_1.listRegisteredBindingsForServiceIdentifier)(container, serviceIdentifierString, getBindings);
83 throw new Error(msg);
84 }
85 else {
86 return bindings;
87 }
88 }
89 }
90 function _createSubRequests(metadataReader, avoidConstraints, serviceIdentifier, context, parentRequest, target) {
91 var activeBindings;
92 var childRequest;
93 if (parentRequest === null) {
94 activeBindings = _getActiveBindings(metadataReader, avoidConstraints, context, null, target);
95 childRequest = new request_1.Request(serviceIdentifier, context, null, activeBindings, target);
96 var thePlan = new plan_1.Plan(context, childRequest);
97 context.addPlan(thePlan);
98 }
99 else {
100 activeBindings = _getActiveBindings(metadataReader, avoidConstraints, context, parentRequest, target);
101 childRequest = parentRequest.addChildRequest(target.serviceIdentifier, activeBindings, target);
102 }
103 activeBindings.forEach(function (binding) {
104 var subChildRequest = null;
105 if (target.isArray()) {
106 subChildRequest = childRequest.addChildRequest(binding.serviceIdentifier, binding, target);
107 }
108 else {
109 if (binding.cache) {
110 return;
111 }
112 subChildRequest = childRequest;
113 }
114 if (binding.type === literal_types_1.BindingTypeEnum.Instance && binding.implementationType !== null) {
115 var dependencies = (0, reflection_utils_1.getDependencies)(metadataReader, binding.implementationType);
116 if (!context.container.options.skipBaseClassChecks) {
117 var baseClassDependencyCount = (0, reflection_utils_1.getBaseClassDependencyCount)(metadataReader, binding.implementationType);
118 if (dependencies.length < baseClassDependencyCount) {
119 var error = ERROR_MSGS.ARGUMENTS_LENGTH_MISMATCH((0, reflection_utils_1.getFunctionName)(binding.implementationType));
120 throw new Error(error);
121 }
122 }
123 dependencies.forEach(function (dependency) {
124 _createSubRequests(metadataReader, false, dependency.serviceIdentifier, context, subChildRequest, dependency);
125 });
126 }
127 });
128 }
129 function getBindings(container, serviceIdentifier) {
130 var bindings = [];
131 var bindingDictionary = getBindingDictionary(container);
132 if (bindingDictionary.hasKey(serviceIdentifier)) {
133 bindings = bindingDictionary.get(serviceIdentifier);
134 }
135 else if (container.parent !== null) {
136 bindings = getBindings(container.parent, serviceIdentifier);
137 }
138 return bindings;
139 }
140 function plan(metadataReader, container, isMultiInject, targetType, serviceIdentifier, key, value, avoidConstraints) {
141 if (avoidConstraints === void 0) { avoidConstraints = false; }
142 var context = new context_1.Context(container);
143 var target = _createTarget(isMultiInject, targetType, serviceIdentifier, "", key, value);
144 try {
145 _createSubRequests(metadataReader, avoidConstraints, serviceIdentifier, context, null, target);
146 return context;
147 }
148 catch (error) {
149 if ((0, exceptions_1.isStackOverflowExeption)(error)) {
150 (0, serialization_1.circularDependencyToException)(context.plan.rootRequest);
151 }
152 throw error;
153 }
154 }
155 exports.plan = plan;
156 function createMockRequest(container, serviceIdentifier, key, value) {
157 var target = new target_1.Target(literal_types_1.TargetTypeEnum.Variable, "", serviceIdentifier, new metadata_1.Metadata(key, value));
158 var context = new context_1.Context(container);
159 var request = new request_1.Request(serviceIdentifier, context, null, [], target);
160 return request;
161 }
162 exports.createMockRequest = createMockRequest;
163});
164//# sourceMappingURL=planner.js.map
\No newline at end of file