ngx-manage
Version:
- angular class descriptor and state
239 lines • 18.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
/** @type {?} */
export var BASE_SHEMA = '$base';
/** @enum {number} */
var BaseValueProp = {
None: 0,
Text: 1,
Input: 2,
Disabled: 3,
Hidden: 4,
};
export { BaseValueProp };
BaseValueProp[BaseValueProp.None] = 'None';
BaseValueProp[BaseValueProp.Text] = 'Text';
BaseValueProp[BaseValueProp.Input] = 'Input';
BaseValueProp[BaseValueProp.Disabled] = 'Disabled';
BaseValueProp[BaseValueProp.Hidden] = 'Hidden';
/** @enum {string} */
var BaseValueType = {
Text: 'text',
Number: 'number',
Array: 'array',
Object: 'object',
Boolean: 'boolean',
Undefined: 'undefined',
Date: 'date',
Time: 'time',
Error: 'error',
Custom: 'custom',
};
export { BaseValueType };
var BaseParam = /** @class */ (function () {
function BaseParam(type, shema, prop, template, provider, validator) {
if (type === void 0) { type = BaseValueType.Text; }
if (shema === void 0) { shema = BASE_SHEMA; }
if (prop === void 0) { prop = BaseValueProp.Text; }
if (template === void 0) { template = ''; }
if (provider === void 0) { provider = ''; }
if (validator === void 0) { validator = ''; }
this.type = type;
this.shema = shema;
this.prop = prop;
this.template = template;
this.provider = provider;
this.validator = validator;
}
return BaseParam;
}());
export { BaseParam };
if (false) {
/** @type {?} */
BaseParam.prototype.type;
/** @type {?} */
BaseParam.prototype.shema;
/** @type {?} */
BaseParam.prototype.prop;
/** @type {?} */
BaseParam.prototype.template;
/** @type {?} */
BaseParam.prototype.provider;
/** @type {?} */
BaseParam.prototype.validator;
}
var BaseValue = /** @class */ (function () {
function BaseValue(name, param) {
this.name = name;
this.param = param;
}
return BaseValue;
}());
export { BaseValue };
if (false) {
/** @type {?} */
BaseValue.prototype.name;
/** @type {?} */
BaseValue.prototype.param;
}
/**
* @param {?} obj
* @return {?}
*/
function objectType(obj) {
if (obj !== undefined) {
if (obj instanceof Array) {
return BaseValueType.Array;
}
else if (typeof obj === 'boolean') {
return BaseValueType.Boolean;
}
else if (typeof obj === 'number') {
return BaseValueType.Number;
}
else if (obj && obj.hours !== undefined && '' + obj.hours) {
return BaseValueType.Time;
}
else if (obj && typeof obj.getMilliseconds === 'function') {
return BaseValueType.Date;
}
else {
return BaseValueType.Text;
}
}
return BaseValueType.Undefined;
}
/**
* @param {?} descriptor
* @param {?} property
* @return {?}
*/
export function Descriptor(descriptor, property) {
return (/**
* @template T
* @param {?} constructor
* @return {?}
*/
function (constructor) {
/** @type {?} */
var a = new constructor();
if (!property) {
property = Object.getOwnPropertyNames(a);
}
/** @type {?} */
var array = property;
/** @type {?} */
var trg = constructor.prototype;
//console.log('Descriptor',array,trg);
/**
* @param {?} data
* @param {?} propertyKey
* @return {?}
*/
function proc(data, propertyKey) {
/** @type {?} */
var base = Object.getOwnPropertyDescriptor(trg, data.shema);
if (!base) {
Object.defineProperty(trg, data.shema, {
configurable: false,
enumerable: true,
value: {
list: [],
hash: {},
},
});
base = Object.getOwnPropertyDescriptor(trg, data.shema);
}
// keep previous definition !
if (base && !base.value.hash[propertyKey]) {
base.value.hash[propertyKey] = new BaseValue(propertyKey, data);
base.value.list.push(propertyKey);
Object.defineProperty(trg, data.shema, base);
}
}
descriptor.forEach((/**
* @param {?} d
* @return {?}
*/
function (d) {
array.forEach((/**
* @param {?} name
* @return {?}
*/
function (name) {
/** @type {?} */
var nd = tslib_1.__assign({}, d);
/** @type {?} */
var t = nd.type;
if (t === BaseValueType.Undefined && a) {
// get value type
nd.type = objectType(a[name]);
}
proc(nd, name);
}));
/** @type {?} */
var base = Object.getOwnPropertyDescriptor(trg, d.shema);
if (base) {
base.value.list = property.slice();
Object.defineProperty(trg, d.shema, base);
}
}));
return /** @class */ (function (_super) {
tslib_1.__extends(class_1, _super);
function class_1() {
return _super !== null && _super.apply(this, arguments) || this;
}
return class_1;
}(constructor));
});
}
/**
* @param {?} descriptor
* @return {?}
*/
export function BaseDescriptors(descriptor) {
/**
* @param {?} data
* @param {?} target
* @param {?} propertyKey
* @return {?}
*/
function proc(data, target, propertyKey) {
/** @type {?} */
var base = Object.getOwnPropertyDescriptor(target, data.shema);
if (!base) {
Object.defineProperty(target, data.shema, {
configurable: false,
enumerable: true,
value: {
hash: {},
list: [],
},
});
base = Object.getOwnPropertyDescriptor(target, data.shema);
}
if (base) {
base.value.hash[propertyKey] = new BaseValue(propertyKey, data);
base.value.list.push(propertyKey);
Object.defineProperty(target, data.shema, base);
}
}
return (/**
* @param {?} target
* @param {?} propertyKey
* @return {?}
*/
function (target, propertyKey) {
descriptor.forEach((/**
* @param {?} d
* @return {?}
*/
function (d) {
proc(d, target, propertyKey);
}));
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1tYW5hZ2UvIiwic291cmNlcyI6WyJsaWIvYmFzZS9kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQU0sS0FBTyxVQUFVLEdBQVcsT0FBTzs7O0lBR3ZDLE9BQVE7SUFDUixPQUFRO0lBQ1IsUUFBUztJQUNULFdBQVk7SUFDWixTQUFVOzs7Ozs7Ozs7O0lBR1YsTUFBTyxNQUFNO0lBQ2IsUUFBUyxRQUFRO0lBQ2pCLE9BQVEsT0FBTztJQUNmLFFBQVMsUUFBUTtJQUNqQixTQUFVLFNBQVM7SUFDbkIsV0FBWSxXQUFXO0lBQ3ZCLE1BQU8sTUFBTTtJQUNiLE1BQU8sTUFBTTtJQUNiLE9BQVEsT0FBTztJQUNmLFFBQVMsUUFBUTs7O0FBRW5CO0lBQ0UsbUJBQ1MsSUFBd0MsRUFDeEMsS0FBMEIsRUFDMUIsSUFBd0MsRUFDeEMsUUFBcUIsRUFDckIsUUFBcUIsRUFDckIsU0FBc0I7UUFMdEIscUJBQUEsRUFBQSxPQUFzQixhQUFhLENBQUMsSUFBSTtRQUN4QyxzQkFBQSxFQUFBLGtCQUEwQjtRQUMxQixxQkFBQSxFQUFBLE9BQXNCLGFBQWEsQ0FBQyxJQUFJO1FBQ3hDLHlCQUFBLEVBQUEsYUFBcUI7UUFDckIseUJBQUEsRUFBQSxhQUFxQjtRQUNyQiwwQkFBQSxFQUFBLGNBQXNCO1FBTHRCLFNBQUksR0FBSixJQUFJLENBQW9DO1FBQ3hDLFVBQUssR0FBTCxLQUFLLENBQXFCO1FBQzFCLFNBQUksR0FBSixJQUFJLENBQW9DO1FBQ3hDLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixjQUFTLEdBQVQsU0FBUyxDQUFhO0lBQzVCLENBQUM7SUFDTixnQkFBQztBQUFELENBQUMsQUFURCxJQVNDOzs7O0lBUEcseUJBQStDOztJQUMvQywwQkFBaUM7O0lBQ2pDLHlCQUErQzs7SUFDL0MsNkJBQTRCOztJQUM1Qiw2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QUFFO29CQUNMLElBQUksRUFBRSxFQUFFO29CQUNSLElBQUksRUFBRSxFQUFFO2lCQUNUO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDakQ7SUFDSCxDQUFDO0lBQ0Q7Ozs7O0lBQU8sVUFBUyxNQUFXLEVBQUUsV0FBbUI7UUFDOUMsVUFBVSxDQUFDLE9BQU87Ozs7UUFBQyxVQUFBLENBQUM7WUFDbEIsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDLEVBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEJBU0VfU0hFTUE6IHN0cmluZyA9ICckYmFzZSc7XHJcblxyXG5leHBvcnQgZW51bSBCYXNlVmFsdWVQcm9wIHtcclxuICBOb25lID0gMCxcclxuICBUZXh0ID0gMSxcclxuICBJbnB1dCA9IDIsXHJcbiAgRGlzYWJsZWQgPSAzLFxyXG4gIEhpZGRlbiA9IDQsXHJcbn1cclxuZXhwb3J0IGVudW0gQmFzZVZhbHVlVHlwZSB7XHJcbiAgVGV4dCA9ICd0ZXh0JywgLy9cclxuICBOdW1iZXIgPSAnbnVtYmVyJywgLy9cclxuICBBcnJheSA9ICdhcnJheScsIC8vXHJcbiAgT2JqZWN0ID0gJ29iamVjdCcsIC8vXHJcbiAgQm9vbGVhbiA9ICdib29sZWFuJywgLy9cclxuICBVbmRlZmluZWQgPSAndW5kZWZpbmVkJywgLy9cclxuICBEYXRlID0gJ2RhdGUnLCAvL1xyXG4gIFRpbWUgPSAndGltZScsIC8vXHJcbiAgRXJyb3IgPSAnZXJyb3InLCAvL1xyXG4gIEN1c3RvbSA9ICdjdXN0b20nLFxyXG59XHJcbmV4cG9ydCBjbGFzcyBCYXNlUGFyYW0ge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHR5cGU6IEJhc2VWYWx1ZVR5cGUgPSBCYXNlVmFsdWVUeXBlLlRleHQsXHJcbiAgICBwdWJsaWMgc2hlbWE6IHN0cmluZyA9IEJBU0VfU0hFTUEsXHJcbiAgICBwdWJsaWMgcHJvcDogQmFzZVZhbHVlUHJvcCA9IEJhc2VWYWx1ZVByb3AuVGV4dCxcclxuICAgIHB1YmxpYyB0ZW1wbGF0ZTogc3RyaW5nID0gJycsXHJcbiAgICBwdWJsaWMgcHJvdmlkZXI6IHN0cmluZyA9ICcnLFxyXG4gICAgcHVibGljIHZhbGlkYXRvcjogc3RyaW5nID0gJycsXHJcbiAgKSB7fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBCYXNlVmFsdWUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcclxuICAgIHB1YmxpYyBwYXJhbTogQmFzZVBhcmFtLCAvLyAtLVxyXG4gICkge31cclxufVxyXG5cclxuZnVuY3Rpb24gb2JqZWN0VHlwZShvYmo6IGFueSk6IEJhc2VWYWx1ZVR5cGUge1xyXG4gIGlmIChvYmogIT09IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgIHJldHVybiBCYXNlVmFsdWVUeXBlLkFycmF5O1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgcmV0dXJuIEJhc2VWYWx1ZVR5cGUuQm9vbGVhbjtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIEJhc2VWYWx1ZVR5cGUuTnVtYmVyO1xyXG4gICAgfSBlbHNlIGlmIChvYmogJiYgb2JqLmhvdXJzICE9PSB1bmRlZmluZWQgJiYgJycgKyBvYmouaG91cnMpIHtcclxuICAgICAgcmV0dXJuIEJhc2VWYWx1ZVR5cGUuVGltZTtcclxuICAgIH0gZWxzZSBpZiAob2JqICYmIHR5cGVvZiBvYmouZ2V0TWlsbGlzZWNvbmRzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHJldHVybiBCYXNlVmFsdWVUeXBlLkRhdGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gQmFzZVZhbHVlVHlwZS5UZXh0O1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gQmFzZVZhbHVlVHlwZS5VbmRlZmluZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNjcmlwdG9yKGRlc2NyaXB0b3I6IEFycmF5PEJhc2VQYXJhbT4sIHByb3BlcnR5OiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uPFQgZXh0ZW5kcyB7IG5ldyAoLi4uYXJnczogYW55W10pOiB7fSB9Pihjb25zdHJ1Y3RvcjogVCkge1xyXG4gICAgY29uc3QgYTogYW55ID0gbmV3IGNvbnN0cnVjdG9yKCk7XHJcbiAgICBpZiAoIXByb3BlcnR5KSB7XHJcbiAgICAgIHByb3BlcnR5ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhcnJheSA9IHByb3BlcnR5O1xyXG4gICAgbGV0IHRyZyA9IGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcclxuICAgIC8vY29uc29sZS5sb2coJ0Rlc2NyaXB0b3InLGFycmF5LHRyZyk7XHJcbiAgICBmdW5jdGlvbiBwcm9jKGRhdGE6IEJhc2VQYXJhbSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xyXG4gICAgICBsZXQgYmFzZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodHJnLCBkYXRhLnNoZW1hKTtcclxuICAgICAgaWYgKCFiYXNlKSB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRyZywgZGF0YS5zaGVtYSwge1xyXG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgICBsaXN0OiBbXSxcclxuICAgICAgICAgICAgaGFzaDoge30sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJhc2UgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRyZywgZGF0YS5zaGVtYSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8ga2VlcCBwcmV2aW91cyBkZWZpbml0aW9uICFcclxuICAgICAgaWYgKGJhc2UgJiYgIWJhc2UudmFsdWUuaGFzaFtwcm9wZXJ0eUtleV0pIHtcclxuICAgICAgICBiYXNlLnZhbHVlLmhhc2hbcHJvcGVydHlLZXldID0gbmV3IEJhc2VWYWx1ZShwcm9wZXJ0eUtleSwgZGF0YSk7XHJcbiAgICAgICAgYmFzZS52YWx1ZS5saXN0LnB1c2gocHJvcGVydHlLZXkpO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0cmcsIGRhdGEuc2hlbWEsIGJhc2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVzY3JpcHRvci5mb3JFYWNoKGQgPT4ge1xyXG4gICAgICBhcnJheS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICAgIGxldCBuZDogQmFzZVBhcmFtID0geyAuLi5kIH07XHJcbiAgICAgICAgY29uc3QgdDogQmFzZVZhbHVlVHlwZSA9IG5kLnR5cGU7XHJcbiAgICAgICAgaWYgKHQgPT09IEJhc2VWYWx1ZVR5cGUuVW5kZWZpbmVkICYmIGEpIHtcclxuICAgICAgICAgIC8vIGdldCB2YWx1ZSB0eXBlXHJcbiAgICAgICAgICBuZC50eXBlID0gb2JqZWN0VHlwZShhW25hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJvYyhuZCwgbmFtZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgbGV0IGJhc2UgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRyZywgZC5zaGVtYSk7XHJcbiAgICAgIGlmIChiYXNlKSB7XHJcbiAgICAgICAgYmFzZS52YWx1ZS5saXN0ID0gcHJvcGVydHkuc2xpY2UoKTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHJnLCBkLnNoZW1hLCBiYXNlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBjb25zdHJ1Y3RvciB7fTtcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQmFzZURlc2NyaXB0b3JzKGRlc2NyaXB0b3I6IEFycmF5PEJhc2VQYXJhbT4pIHtcclxuICBmdW5jdGlvbiBwcm9jKGRhdGE6IEJhc2VQYXJhbSwgdGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcclxuICAgIGxldCBiYXNlID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGRhdGEuc2hlbWEpO1xyXG4gICAgaWYgKCFiYXNlKSB7XHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRhdGEuc2hlbWEsIHtcclxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgdmFsdWU6IHtcclxuICAgICAgICAgIGhhc2g6IHt9LFxyXG4gICAgICAgICAgbGlzdDogW10sXHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICAgIGJhc2UgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgZGF0YS5zaGVtYSk7XHJcbiAgICB9XHJcbiAgICBpZiAoYmFzZSkge1xyXG4gICAgICBiYXNlLnZhbHVlLmhhc2hbcHJvcGVydHlLZXldID0gbmV3IEJhc2VWYWx1ZShwcm9wZXJ0eUtleSwgZGF0YSk7XHJcbiAgICAgIGJhc2UudmFsdWUubGlzdC5wdXNoKHByb3BlcnR5S2V5KTtcclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGF0YS5zaGVtYSwgYmFzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xyXG4gICAgZGVzY3JpcHRvci5mb3JFYWNoKGQgPT4ge1xyXG4gICAgICBwcm9jKGQsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG4gICAgfSk7XHJcbiAgfTtcclxufVxyXG4iXX0=