UNPKG

8.72 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};
20var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
21 if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
22 if (ar || !(i in from)) {
23 if (!ar) ar = Array.prototype.slice.call(from, 0, i);
24 ar[i] = from[i];
25 }
26 }
27 return to.concat(ar || Array.prototype.slice.call(from));
28};
29define(["require", "exports", "../annotation/lazy_service_identifier", "../constants/error_msgs", "../constants/literal_types", "../constants/metadata_keys", "../utils/serialization", "./target"], function (require, exports, lazy_service_identifier_1, ERROR_MSGS, literal_types_1, METADATA_KEY, serialization_1, target_1) {
30 "use strict";
31 Object.defineProperty(exports, "__esModule", { value: true });
32 exports.getFunctionName = exports.getBaseClassDependencyCount = exports.getDependencies = void 0;
33 ERROR_MSGS = __importStar(ERROR_MSGS);
34 METADATA_KEY = __importStar(METADATA_KEY);
35 Object.defineProperty(exports, "getFunctionName", { enumerable: true, get: function () { return serialization_1.getFunctionName; } });
36 function getDependencies(metadataReader, func) {
37 var constructorName = (0, serialization_1.getFunctionName)(func);
38 return getTargets(metadataReader, constructorName, func, false);
39 }
40 exports.getDependencies = getDependencies;
41 function getTargets(metadataReader, constructorName, func, isBaseClass) {
42 var metadata = metadataReader.getConstructorMetadata(func);
43 var serviceIdentifiers = metadata.compilerGeneratedMetadata;
44 if (serviceIdentifiers === undefined) {
45 var msg = ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION + " " + constructorName + ".";
46 throw new Error(msg);
47 }
48 var constructorArgsMetadata = metadata.userGeneratedMetadata;
49 var keys = Object.keys(constructorArgsMetadata);
50 var hasUserDeclaredUnknownInjections = (func.length === 0 && keys.length > 0);
51 var hasOptionalParameters = keys.length > func.length;
52 var iterations = (hasUserDeclaredUnknownInjections || hasOptionalParameters) ? keys.length : func.length;
53 var constructorTargets = getConstructorArgsAsTargets(isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata, iterations);
54 var propertyTargets = getClassPropsAsTargets(metadataReader, func, constructorName);
55 var targets = __spreadArray(__spreadArray([], constructorTargets, true), propertyTargets, true);
56 return targets;
57 }
58 function getConstructorArgsAsTarget(index, isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata) {
59 var targetMetadata = constructorArgsMetadata[index.toString()] || [];
60 var metadata = formatTargetMetadata(targetMetadata);
61 var isManaged = metadata.unmanaged !== true;
62 var serviceIdentifier = serviceIdentifiers[index];
63 var injectIdentifier = (metadata.inject || metadata.multiInject);
64 serviceIdentifier = (injectIdentifier) ? (injectIdentifier) : serviceIdentifier;
65 if (serviceIdentifier instanceof lazy_service_identifier_1.LazyServiceIdentifer) {
66 serviceIdentifier = serviceIdentifier.unwrap();
67 }
68 if (isManaged) {
69 var isObject = serviceIdentifier === Object;
70 var isFunction = serviceIdentifier === Function;
71 var isUndefined = serviceIdentifier === undefined;
72 var isUnknownType = (isObject || isFunction || isUndefined);
73 if (!isBaseClass && isUnknownType) {
74 var msg = ERROR_MSGS.MISSING_INJECT_ANNOTATION + " argument " + index + " in class " + constructorName + ".";
75 throw new Error(msg);
76 }
77 var target = new target_1.Target(literal_types_1.TargetTypeEnum.ConstructorArgument, metadata.targetName, serviceIdentifier);
78 target.metadata = targetMetadata;
79 return target;
80 }
81 return null;
82 }
83 function getConstructorArgsAsTargets(isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata, iterations) {
84 var targets = [];
85 for (var i = 0; i < iterations; i++) {
86 var index = i;
87 var target = getConstructorArgsAsTarget(index, isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata);
88 if (target !== null) {
89 targets.push(target);
90 }
91 }
92 return targets;
93 }
94 function _getServiceIdentifierForProperty(inject, multiInject, propertyName, className) {
95 var serviceIdentifier = (inject || multiInject);
96 if (serviceIdentifier === undefined) {
97 var msg = ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION + " for property " + String(propertyName) + " in class " + className + ".";
98 throw new Error(msg);
99 }
100 return serviceIdentifier;
101 }
102 function getClassPropsAsTargets(metadataReader, constructorFunc, constructorName) {
103 var classPropsMetadata = metadataReader.getPropertiesMetadata(constructorFunc);
104 var targets = [];
105 var symbolKeys = Object.getOwnPropertySymbols(classPropsMetadata);
106 var stringKeys = Object.keys(classPropsMetadata);
107 var keys = stringKeys.concat(symbolKeys);
108 for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
109 var key = keys_1[_i];
110 var targetMetadata = classPropsMetadata[key];
111 var metadata = formatTargetMetadata(targetMetadata);
112 var identifier = metadata.targetName || key;
113 var serviceIdentifier = _getServiceIdentifierForProperty(metadata.inject, metadata.multiInject, key, constructorName);
114 var target = new target_1.Target(literal_types_1.TargetTypeEnum.ClassProperty, identifier, serviceIdentifier);
115 target.metadata = targetMetadata;
116 targets.push(target);
117 }
118 var baseConstructor = Object.getPrototypeOf(constructorFunc.prototype).constructor;
119 if (baseConstructor !== Object) {
120 var baseTargets = getClassPropsAsTargets(metadataReader, baseConstructor, constructorName);
121 targets = __spreadArray(__spreadArray([], targets, true), baseTargets, true);
122 }
123 return targets;
124 }
125 function getBaseClassDependencyCount(metadataReader, func) {
126 var baseConstructor = Object.getPrototypeOf(func.prototype).constructor;
127 if (baseConstructor !== Object) {
128 var baseConstructorName = (0, serialization_1.getFunctionName)(baseConstructor);
129 var targets = getTargets(metadataReader, baseConstructorName, baseConstructor, true);
130 var metadata = targets.map(function (t) { return t.metadata.filter(function (m) { return m.key === METADATA_KEY.UNMANAGED_TAG; }); });
131 var unmanagedCount = [].concat.apply([], metadata).length;
132 var dependencyCount = targets.length - unmanagedCount;
133 if (dependencyCount > 0) {
134 return dependencyCount;
135 }
136 else {
137 return getBaseClassDependencyCount(metadataReader, baseConstructor);
138 }
139 }
140 else {
141 return 0;
142 }
143 }
144 exports.getBaseClassDependencyCount = getBaseClassDependencyCount;
145 function formatTargetMetadata(targetMetadata) {
146 var targetMetadataMap = {};
147 targetMetadata.forEach(function (m) {
148 targetMetadataMap[m.key.toString()] = m.value;
149 });
150 return {
151 inject: targetMetadataMap[METADATA_KEY.INJECT_TAG],
152 multiInject: targetMetadataMap[METADATA_KEY.MULTI_INJECT_TAG],
153 targetName: targetMetadataMap[METADATA_KEY.NAME_TAG],
154 unmanaged: targetMetadataMap[METADATA_KEY.UNMANAGED_TAG]
155 };
156 }
157});
158//# sourceMappingURL=reflection_utils.js.map
\No newline at end of file