1 | "use strict";
|
2 | var __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 | }));
|
9 | var __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 | });
|
14 | var __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 | };
|
21 | Object.defineProperty(exports, "__esModule", { value: true });
|
22 | exports.createTaggedDecorator = exports.tagProperty = exports.tagParameter = exports.decorate = void 0;
|
23 | var ERROR_MSGS = __importStar(require("../constants/error_msgs"));
|
24 | var METADATA_KEY = __importStar(require("../constants/metadata_keys"));
|
25 | var js_1 = require("../utils/js");
|
26 | function targetIsConstructorFunction(target) {
|
27 | return target.prototype !== undefined;
|
28 | }
|
29 | function _throwIfMethodParameter(parameterName) {
|
30 | if (parameterName !== undefined) {
|
31 | throw new Error(ERROR_MSGS.INVALID_DECORATOR_OPERATION);
|
32 | }
|
33 | }
|
34 | function tagParameter(annotationTarget, parameterName, parameterIndex, metadata) {
|
35 | _throwIfMethodParameter(parameterName);
|
36 | _tagParameterOrProperty(METADATA_KEY.TAGGED, annotationTarget, parameterIndex.toString(), metadata);
|
37 | }
|
38 | exports.tagParameter = tagParameter;
|
39 | function 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 | }
|
45 | exports.tagProperty = tagProperty;
|
46 | function _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 | }
|
60 | function _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 | }
|
85 | function 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 | }
|
95 | exports.createTaggedDecorator = createTaggedDecorator;
|
96 | function _decorate(decorators, target) {
|
97 | Reflect.decorate(decorators, target);
|
98 | }
|
99 | function _param(paramIndex, decorator) {
|
100 | return function (target, key) { decorator(target, key, paramIndex); };
|
101 | }
|
102 | function 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 | }
|
113 | exports.decorate = decorate;
|
114 |
|
\ | No newline at end of file |