UNPKG

4.82 kBJavaScriptView Raw
1"use strict";
2var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3 if (k2 === undefined) k2 = k;
4 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5}) : (function(o, m, k, k2) {
6 if (k2 === undefined) k2 = k;
7 o[k2] = m[k];
8}));
9var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10 Object.defineProperty(o, "default", { enumerable: true, value: v });
11}) : function(o, v) {
12 o["default"] = v;
13});
14var __importStar = (this && this.__importStar) || function (mod) {
15 if (mod && mod.__esModule) return mod;
16 var result = {};
17 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18 __setModuleDefault(result, mod);
19 return result;
20};
21Object.defineProperty(exports, "__esModule", { value: true });
22exports.createTaggedDecorator = exports.tagProperty = exports.tagParameter = exports.decorate = void 0;
23var ERROR_MSGS = __importStar(require("../constants/error_msgs"));
24var METADATA_KEY = __importStar(require("../constants/metadata_keys"));
25var js_1 = require("../utils/js");
26function targetIsConstructorFunction(target) {
27 return target.prototype !== undefined;
28}
29function _throwIfMethodParameter(parameterName) {
30 if (parameterName !== undefined) {
31 throw new Error(ERROR_MSGS.INVALID_DECORATOR_OPERATION);
32 }
33}
34function tagParameter(annotationTarget, parameterName, parameterIndex, metadata) {
35 _throwIfMethodParameter(parameterName);
36 _tagParameterOrProperty(METADATA_KEY.TAGGED, annotationTarget, parameterIndex.toString(), metadata);
37}
38exports.tagParameter = tagParameter;
39function tagProperty(annotationTarget, propertyName, metadata) {
40 if (targetIsConstructorFunction(annotationTarget)) {
41 throw new Error(ERROR_MSGS.INVALID_DECORATOR_OPERATION);
42 }
43 _tagParameterOrProperty(METADATA_KEY.TAGGED_PROP, annotationTarget.constructor, propertyName, metadata);
44}
45exports.tagProperty = tagProperty;
46function _ensureNoMetadataKeyDuplicates(metadata) {
47 var metadatas = [];
48 if (Array.isArray(metadata)) {
49 metadatas = metadata;
50 var duplicate = (0, js_1.getFirstArrayDuplicate)(metadatas.map(function (md) { return md.key; }));
51 if (duplicate !== undefined) {
52 throw new Error(ERROR_MSGS.DUPLICATED_METADATA + " " + duplicate.toString());
53 }
54 }
55 else {
56 metadatas = [metadata];
57 }
58 return metadatas;
59}
60function _tagParameterOrProperty(metadataKey, annotationTarget, key, metadata) {
61 var metadatas = _ensureNoMetadataKeyDuplicates(metadata);
62 var paramsOrPropertiesMetadata = {};
63 if (Reflect.hasOwnMetadata(metadataKey, annotationTarget)) {
64 paramsOrPropertiesMetadata = Reflect.getMetadata(metadataKey, annotationTarget);
65 }
66 var paramOrPropertyMetadata = paramsOrPropertiesMetadata[key];
67 if (paramOrPropertyMetadata === undefined) {
68 paramOrPropertyMetadata = [];
69 }
70 else {
71 var _loop_1 = function (m) {
72 if (metadatas.some(function (md) { return md.key === m.key; })) {
73 throw new Error(ERROR_MSGS.DUPLICATED_METADATA + " " + m.key.toString());
74 }
75 };
76 for (var _i = 0, paramOrPropertyMetadata_1 = paramOrPropertyMetadata; _i < paramOrPropertyMetadata_1.length; _i++) {
77 var m = paramOrPropertyMetadata_1[_i];
78 _loop_1(m);
79 }
80 }
81 paramOrPropertyMetadata.push.apply(paramOrPropertyMetadata, metadatas);
82 paramsOrPropertiesMetadata[key] = paramOrPropertyMetadata;
83 Reflect.defineMetadata(metadataKey, paramsOrPropertiesMetadata, annotationTarget);
84}
85function createTaggedDecorator(metadata) {
86 return function (target, targetKey, indexOrPropertyDescriptor) {
87 if (typeof indexOrPropertyDescriptor === "number") {
88 tagParameter(target, targetKey, indexOrPropertyDescriptor, metadata);
89 }
90 else {
91 tagProperty(target, targetKey, metadata);
92 }
93 };
94}
95exports.createTaggedDecorator = createTaggedDecorator;
96function _decorate(decorators, target) {
97 Reflect.decorate(decorators, target);
98}
99function _param(paramIndex, decorator) {
100 return function (target, key) { decorator(target, key, paramIndex); };
101}
102function decorate(decorator, target, parameterIndexOrProperty) {
103 if (typeof parameterIndexOrProperty === "number") {
104 _decorate([_param(parameterIndexOrProperty, decorator)], target);
105 }
106 else if (typeof parameterIndexOrProperty === "string") {
107 Reflect.decorate([decorator], target, parameterIndexOrProperty);
108 }
109 else {
110 _decorate([decorator], target);
111 }
112}
113exports.decorate = decorate;
114//# sourceMappingURL=decorator_utils.js.map
\No newline at end of file