@stratio/egeo
Version:
187 lines • 15 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/decorators/require-decorators.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { EgeoUtils } from '../utils/egeo-utils';
/** @type {?} */
var EGEO_METADATA = Symbol('EgeoLibraryMetadata');
/** @enum {number} */
var METADATA_TYPE = {
PROPERTY: 0,
};
export { METADATA_TYPE };
/**
* @record
*/
export function EgeoMetadata() { }
if (false) {
/** @type {?} */
EgeoMetadata.prototype.type;
/** @type {?|undefined} */
EgeoMetadata.prototype.required;
/** @type {?|undefined} */
EgeoMetadata.prototype.requireCondition;
/** @type {?|undefined} */
EgeoMetadata.prototype.deprecated;
/** @type {?|undefined} */
EgeoMetadata.prototype.initialValue;
}
// tslint:disable:only-arrow-functions
/**
* @param {?=} condition
* @return {?}
*/
export function StRequired(condition) {
return (/**
* @param {?} target
* @param {?} name
* @return {?}
*/
function (target, name) {
/** @type {?} */
var meta = Reflect.getOwnMetadata(EGEO_METADATA, target.constructor) || {};
meta[name] = meta.hasOwnProperty(name) && meta[name] || { type: 0 /* PROPERTY */ };
meta[name].required = true;
if (condition !== undefined) {
meta[name].requireCondition = condition;
}
Reflect.defineMetadata(EGEO_METADATA, meta, target.constructor);
});
}
/**
* @param {?=} initialValue
* @return {?}
*/
export function StDeprecated(initialValue) {
return (/**
* @param {?} target
* @param {?} name
* @return {?}
*/
function (target, name) {
/** @type {?} */
var meta = Reflect.getOwnMetadata(EGEO_METADATA, target.constructor) || {};
meta[name] = meta.hasOwnProperty(name) && meta[name] || { type: 0 /* PROPERTY */ };
meta[name].deprecated = true;
if (initialValue !== undefined) {
meta[name].initialValue = initialValue;
}
Reflect.defineMetadata(EGEO_METADATA, meta, target.constructor);
});
}
/**
* @param {?=} params
* @return {?}
*/
export function StEgeo(params) {
return (/**
* @param {?} target
* @return {?}
*/
function (target) {
/** @type {?} */
var _onInit = target.prototype.ngOnInit;
if (_onInit !== undefined) {
target.prototype.ngOnInit = (/**
* @param {...?} args
* @return {?}
*/
function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
checkDeprecated(target, this);
checkRequired(target, this);
_onInit.apply(this, args);
});
}
else {
target.prototype.ngOnInit = (/**
* @return {?}
*/
function () {
checkDeprecated(target, this);
checkRequired(target, this);
});
}
});
}
/**
* @param {?} target
* @param {?} scope
* @return {?}
*/
function checkDeprecated(target, scope) {
/** @type {?} */
var meta = Reflect.getOwnMetadata(EGEO_METADATA, target);
if (meta !== undefined) {
Object.keys(meta).forEach((/**
* @param {?} key
* @return {?}
*/
function (key) {
if (meta[key].deprecated) {
if (scope[key] !== undefined) {
console.warn(EgeoUtils.toDash(target.name) + ": field " + key + " is a deprecated field");
}
else if (meta[key].initialValue) {
scope[key] = meta[key].initialValue;
}
}
}));
}
}
/**
* @param {?} target
* @param {?} scope
* @return {?}
*/
function checkRequired(target, scope) {
/** @type {?} */
var meta = Reflect.getOwnMetadata(EGEO_METADATA, target);
if (meta !== undefined) {
/** @type {?} */
var inputs = getKeys(Object.keys(meta), meta, scope);
EgeoUtils.validateInputs(scope, inputs, target.name);
}
}
/**
* @param {?} inputs
* @param {?} metadata
* @param {?} scope
* @return {?}
*/
function getKeys(inputs, metadata, scope) {
return inputs.reduce((/**
* @param {?} prev
* @param {?} curr
* @return {?}
*/
function (prev, curr) {
if (metadata[curr].requireCondition !== undefined) {
if (checkConditionMetadata(scope, metadata[curr].requireCondition)) {
prev.push(curr);
}
}
else if (metadata[curr].required) {
prev.push(curr);
}
return prev;
}), []);
}
/**
* @param {?} scope
* @param {?} key
* @return {?}
*/
function checkConditionMetadata(scope, key) {
if (typeof scope[key] === 'function') {
return scope[key].apply(scope);
}
else {
return scope[key];
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZS1kZWNvcmF0b3JzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN0cmF0aW8vZWdlby8iLCJzb3VyY2VzIjpbImxpYi9kZWNvcmF0b3JzL3JlcXVpcmUtZGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVlBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7SUFFMUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQzs7QUFFbkQsSUFBa0IsYUFBYTtJQUFHLFFBQVEsR0FBQTtFQUFFOzs7OztBQUU1QyxrQ0FNQzs7O0lBTEUsNEJBQW9COztJQUNwQixnQ0FBbUI7O0lBQ25CLHdDQUEwQjs7SUFDMUIsa0NBQXFCOztJQUNyQixvQ0FBbUI7Ozs7Ozs7QUFJdEIsTUFBTSxVQUFVLFVBQVUsQ0FBQyxTQUFrQjtJQUMxQzs7Ozs7SUFBTyxVQUFVLE1BQVcsRUFBRSxJQUFZOztZQUNqQyxJQUFJLEdBQVEsT0FBTyxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUU7UUFDakYsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxrQkFBd0IsRUFBRSxDQUFDO1FBQ3pGLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1NBQzFDO1FBRUQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRSxDQUFDLEVBQUM7QUFDTCxDQUFDOzs7OztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsWUFB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LENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3ZEO0FBQ0osQ0FBQzs7Ozs7OztBQUVELFNBQVMsT0FBTyxDQUFDLE1BQWdCLEVBQUUsUUFBeUMsRUFBRSxLQUFVO0lBQ3JGLE9BQU8sTUFBTSxDQUFDLE1BQU07Ozs7O0lBQUMsVUFBQyxJQUFJLEVBQUUsSUFBSTtRQUM3QixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7WUFDaEQsSUFBSSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7Z0JBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbEI7U0FDSDthQUFNLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZixDQUFDLEdBQUUsRUFBRSxDQUFDLENBQUM7QUFDVixDQUFDOzs7Ozs7QUFFRCxTQUFTLHNCQUFzQixDQUFDLEtBQVUsRUFBRSxHQUFXO0lBQ3BELElBQUksT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxFQUFFO1FBQ25DLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNqQztTQUFNO1FBQ0osT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDcEI7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIMKpIDIwMTcgU3RyYXRpbyBCaWcgRGF0YSBJbmMuLCBTdWN1cnNhbCBlbiBFc3Bhw7FhLlxuICpcbiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC5cbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7XG4gKiB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuICogU2VlIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wLlxuICovXG5pbXBvcnQgKiBhcyBSZWZsZWN0TWV0YWRhdGEgZnJvbSAncmVmbGVjdC1tZXRhZGF0YSc7XG5cbmltcG9ydCB7IEVnZW9VdGlscyB9IGZyb20gJy4uL3V0aWxzL2VnZW8tdXRpbHMnO1xuXG5jb25zdCBFR0VPX01FVEFEQVRBID0gU3ltYm9sKCdFZ2VvTGlicmFyeU1ldGFkYXRhJyk7XG5cbmV4cG9ydCBjb25zdCBlbnVtIE1FVEFEQVRBX1RZUEUgeyBQUk9QRVJUWSB9XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWdlb01ldGFkYXRhIHtcbiAgIHR5cGU6IE1FVEFEQVRBX1RZUEU7XG4gICByZXF1aXJlZD86IGJvb2xlYW47XG4gICByZXF1aXJlQ29uZGl0aW9uPzogc3RyaW5nO1xuICAgZGVwcmVjYXRlZD86IGJvb2xlYW47XG4gICBpbml0aWFsVmFsdWU/OiBhbnk7XG59XG5cbi8vIHRzbGludDpkaXNhYmxlOm9ubHktYXJyb3ctZnVuY3Rpb25zXG5leHBvcnQgZnVuY3Rpb24gU3RSZXF1aXJlZChjb25kaXRpb24/OiBzdHJpbmcpOiBhbnkge1xuICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IGFueSwgbmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgIGNvbnN0IG1ldGE6IGFueSA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEoRUdFT19NRVRBREFUQSwgdGFyZ2V0LmNvbnN0cnVjdG9yKSB8fCB7fTtcbiAgICAgIG1ldGFbbmFtZV0gPSBtZXRhLmhhc093blByb3BlcnR5KG5hbWUpICYmIG1ldGFbbmFtZV0gfHwgeyB0eXBlOiBNRVRBREFUQV9UWVBFLlBST1BFUlRZIH07XG4gICAgICBtZXRhW25hbWVdLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgIGlmIChjb25kaXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgbWV0YVtuYW1lXS5yZXF1aXJlQ29uZGl0aW9uID0gY29uZGl0aW9uO1xuICAgICAgfVxuXG4gICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKEVHRU9fTUVUQURBVEEsIG1ldGEsIHRhcmdldC5jb25zdHJ1Y3Rvcik7XG4gICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU3REZXByZWNhdGVkKGluaXRpYWxWYWx1ZT86IGFueSk6IGFueSB7XG4gICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogYW55LCBuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgY29uc3QgbWV0YTogYW55ID0gUmVmbGVjdC5nZXRPd25NZXRhZGF0YShFR0VPX01FVEFEQVRBLCB0YXJnZXQuY29uc3RydWN0b3IpIHx8IHt9O1xuICAgICAgbWV0YVtuYW1lXSA9IG1ldGEuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgbWV0YVtuYW1lXSB8fCB7IHR5cGU6IE1FVEFEQVRBX1RZUEUuUFJPUEVSVFkgfTtcbiAgICAgIG1ldGFbbmFtZV0uZGVwcmVjYXRlZCA9IHRydWU7XG4gICAgICBpZiAoaW5pdGlhbFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgIG1ldGFbbmFtZV0uaW5pdGlhbFZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgICAgfVxuXG4gICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKEVHRU9fTUVUQURBVEEsIG1ldGEsIHRhcmdldC5jb25zdHJ1Y3Rvcik7XG4gICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU3RFZ2VvKHBhcmFtcz86ICcnKTogYW55IHtcbiAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBhbnkpOiBhbnkge1xuICAgICAgbGV0IF9vbkluaXQgPSB0YXJnZXQucHJvdG90eXBlLm5nT25Jbml0O1xuICAgICAgaWYgKF9vbkluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGFyZ2V0LnByb3RvdHlwZS5uZ09uSW5pdCA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICAgICAgY2hlY2tEZXByZWNhdGVkKHRhcmdldCwgdGhpcyk7XG4gICAgICAgICAgICBjaGVja1JlcXVpcmVkKHRhcmdldCwgdGhpcyk7XG4gICAgICAgICAgICBfb25Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICB0YXJnZXQucHJvdG90eXBlLm5nT25Jbml0ID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICAgICAgY2hlY2tEZXByZWNhdGVkKHRhcmdldCwgdGhpcyk7XG4gICAgICAgICAgICBjaGVja1JlcXVpcmVkKHRhcmdldCwgdGhpcyk7XG4gICAgICAgICB9O1xuICAgICAgfVxuICAgfTtcbn1cblxuZnVuY3Rpb24gY2hlY2tEZXByZWNhdGVkKHRhcmdldDogYW55LCBzY29wZTogYW55KTogdm9pZCB7XG4gICBjb25zdCBtZXRhOiBhbnkgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhKEVHRU9fTUVUQURBVEEsIHRhcmdldCk7XG4gICBpZiAobWV0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBPYmplY3Qua2V5cyhtZXRhKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgIGlmIChtZXRhW2tleV0uZGVwcmVjYXRlZCkge1xuICAgICAgICAgICAgaWYgKHNjb3BlW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGAke0VnZW9VdGlscy50b0Rhc2godGFyZ2V0Lm5hbWUpfTogZmllbGQgJHtrZXl9IGlzIGEgZGVwcmVjYXRlZCBmaWVsZGApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRhW2tleV0uaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgICAgICBzY29wZVtrZXldID0gbWV0YVtrZXldLmluaXRpYWxWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgIH0pO1xuICAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1JlcXVpcmVkKHRhcmdldDogYW55LCBzY29wZTogYW55KTogdm9pZCB7XG4gICBjb25zdCBtZXRhOiBhbnkgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhKEVHRU9fTUVUQURBVEEsIHRhcmdldCk7XG4gICBpZiAobWV0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgaW5wdXRzOiBzdHJpbmdbXSA9IGdldEtleXMoT2JqZWN0LmtleXMobWV0YSksIG1ldGEsIHNjb3BlKTtcbiAgICAgIEVnZW9VdGlscy52YWxpZGF0ZUlucHV0cyhzY29wZSwgaW5wdXRzLCB0YXJnZXQubmFtZSk7XG4gICB9XG59XG5cbmZ1bmN0aW9uIGdldEtleXMoaW5wdXRzOiBzdHJpbmdbXSwgbWV0YWRhdGE6IHsgW2tleTogc3RyaW5nXTogRWdlb01ldGFkYXRhIH0sIHNjb3BlOiBhbnkpOiBzdHJpbmdbXSB7XG4gICByZXR1cm4gaW5wdXRzLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgaWYgKG1ldGFkYXRhW2N1cnJdLnJlcXVpcmVDb25kaXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgaWYgKGNoZWNrQ29uZGl0aW9uTWV0YWRhdGEoc2NvcGUsIG1ldGFkYXRhW2N1cnJdLnJlcXVpcmVDb25kaXRpb24pKSB7XG4gICAgICAgICAgICBwcmV2LnB1c2goY3Vycik7XG4gICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhW2N1cnJdLnJlcXVpcmVkKSB7XG4gICAgICAgICBwcmV2LnB1c2goY3Vycik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJldjtcbiAgIH0sIFtdKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tDb25kaXRpb25NZXRhZGF0YShzY29wZTogYW55LCBrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgaWYgKHR5cGVvZiBzY29wZVtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gc2NvcGVba2V5XS5hcHBseShzY29wZSk7XG4gICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNjb3BlW2tleV07XG4gICB9XG59XG5cbi8vIHRzbGludDplbmFibGVkXG4iXX0=