ngx-manage
Version:
- angular class descriptor and state
235 lines • 17.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/** @type {?} */
export const BASE_SHEMA = '$base';
/** @enum {number} */
const 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} */
const BaseValueType = {
Text: 'text',
Number: 'number',
Array: 'array',
Object: 'object',
Boolean: 'boolean',
Undefined: 'undefined',
Date: 'date',
Time: 'time',
Error: 'error',
Custom: 'custom',
};
export { BaseValueType };
export class BaseParam {
/**
* @param {?=} type
* @param {?=} shema
* @param {?=} prop
* @param {?=} template
* @param {?=} provider
* @param {?=} validator
*/
constructor(type = BaseValueType.Text, shema = BASE_SHEMA, prop = BaseValueProp.Text, template = '', provider = '', validator = '') {
this.type = type;
this.shema = shema;
this.prop = prop;
this.template = template;
this.provider = provider;
this.validator = validator;
}
}
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;
}
export class BaseValue {
/**
* @param {?} name
* @param {?} param
*/
constructor(name, param) {
this.name = name;
this.param = param;
}
}
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 {?} */
const a = new constructor();
if (!property) {
property = Object.getOwnPropertyNames(a);
}
/** @type {?} */
const array = property;
/** @type {?} */
let trg = constructor.prototype;
//console.log('Descriptor',array,trg);
/**
* @param {?} data
* @param {?} propertyKey
* @return {?}
*/
function proc(data, propertyKey) {
/** @type {?} */
let 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 {?}
*/
d => {
array.forEach((/**
* @param {?} name
* @return {?}
*/
name => {
/** @type {?} */
let nd = Object.assign({}, d);
/** @type {?} */
const t = nd.type;
if (t === BaseValueType.Undefined && a) {
// get value type
nd.type = objectType(a[name]);
}
proc(nd, name);
}));
/** @type {?} */
let base = Object.getOwnPropertyDescriptor(trg, d.shema);
if (base) {
base.value.list = property.slice();
Object.defineProperty(trg, d.shema, base);
}
}));
return class extends constructor {
};
});
}
/**
* @param {?} descriptor
* @return {?}
*/
export function BaseDescriptors(descriptor) {
/**
* @param {?} data
* @param {?} target
* @param {?} propertyKey
* @return {?}
*/
function proc(data, target, propertyKey) {
/** @type {?} */
let 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 {?}
*/
d => {
proc(d, target, propertyKey);
}));
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1tYW5hZ2UvIiwic291cmNlcyI6WyJsaWIvYmFzZS9kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsTUFBTSxPQUFPLFVBQVUsR0FBVyxPQUFPOzs7SUFHdkMsT0FBUTtJQUNSLE9BQVE7SUFDUixRQUFTO0lBQ1QsV0FBWTtJQUNaLFNBQVU7Ozs7Ozs7Ozs7SUFHVixNQUFPLE1BQU07SUFDYixRQUFTLFFBQVE7SUFDakIsT0FBUSxPQUFPO0lBQ2YsUUFBUyxRQUFRO0lBQ2pCLFNBQVUsU0FBUztJQUNuQixXQUFZLFdBQVc7SUFDdkIsTUFBTyxNQUFNO0lBQ2IsTUFBTyxNQUFNO0lBQ2IsT0FBUSxPQUFPO0lBQ2YsUUFBUyxRQUFROzs7QUFFbkIsTUFBTSxPQUFPLFNBQVM7Ozs7Ozs7OztJQUNwQixZQUNTLE9BQXNCLGFBQWEsQ0FBQyxJQUFJLEVBQ3hDLFFBQWdCLFVBQVUsRUFDMUIsT0FBc0IsYUFBYSxDQUFDLElBQUksRUFDeEMsV0FBbUIsRUFBRSxFQUNyQixXQUFtQixFQUFFLEVBQ3JCLFlBQW9CLEVBQUU7UUFMdEIsU0FBSSxHQUFKLElBQUksQ0FBb0M7UUFDeEMsVUFBSyxHQUFMLEtBQUssQ0FBcUI7UUFDMUIsU0FBSSxHQUFKLElBQUksQ0FBb0M7UUFDeEMsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLGNBQVMsR0FBVCxTQUFTLENBQWE7SUFDNUIsQ0FBQztDQUNMOzs7SUFQRyx5QkFBK0M7O0lBQy9DLDBCQUFpQzs7SUFDakMseUJBQStDOztJQUMvQyw2QkFBNEI7O0lBQzVCLDZCQUE0Qjs7SUFDNUIsOEJBQTZCOztBQUdqQyxNQUFNLE9BQU8sU0FBUzs7Ozs7SUFDcEIsWUFDUyxJQUFZLEVBQ1osS0FBZ0I7UUFEaEIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLFVBQUssR0FBTCxLQUFLLENBQVc7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RTtZQUNSLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNqRDtJQUNILENBQUM7SUFDRDs7Ozs7SUFBTyxVQUFTLE1BQVcsRUFBRSxXQUFtQjtRQUM5QyxVQUFVLENBQUMsT0FBTzs7OztRQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQyxFQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBCQVNFX1NIRU1BOiBzdHJpbmcgPSAnJGJhc2UnO1xyXG5cclxuZXhwb3J0IGVudW0gQmFzZVZhbHVlUHJvcCB7XHJcbiAgTm9uZSA9IDAsXHJcbiAgVGV4dCA9IDEsXHJcbiAgSW5wdXQgPSAyLFxyXG4gIERpc2FibGVkID0gMyxcclxuICBIaWRkZW4gPSA0LFxyXG59XHJcbmV4cG9ydCBlbnVtIEJhc2VWYWx1ZVR5cGUge1xyXG4gIFRleHQgPSAndGV4dCcsIC8vXHJcbiAgTnVtYmVyID0gJ251bWJlcicsIC8vXHJcbiAgQXJyYXkgPSAnYXJyYXknLCAvL1xyXG4gIE9iamVjdCA9ICdvYmplY3QnLCAvL1xyXG4gIEJvb2xlYW4gPSAnYm9vbGVhbicsIC8vXHJcbiAgVW5kZWZpbmVkID0gJ3VuZGVmaW5lZCcsIC8vXHJcbiAgRGF0ZSA9ICdkYXRlJywgLy9cclxuICBUaW1lID0gJ3RpbWUnLCAvL1xyXG4gIEVycm9yID0gJ2Vycm9yJywgLy9cclxuICBDdXN0b20gPSAnY3VzdG9tJyxcclxufVxyXG5leHBvcnQgY2xhc3MgQmFzZVBhcmFtIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyB0eXBlOiBCYXNlVmFsdWVUeXBlID0gQmFzZVZhbHVlVHlwZS5UZXh0LFxyXG4gICAgcHVibGljIHNoZW1hOiBzdHJpbmcgPSBCQVNFX1NIRU1BLFxyXG4gICAgcHVibGljIHByb3A6IEJhc2VWYWx1ZVByb3AgPSBCYXNlVmFsdWVQcm9wLlRleHQsXHJcbiAgICBwdWJsaWMgdGVtcGxhdGU6IHN0cmluZyA9ICcnLFxyXG4gICAgcHVibGljIHByb3ZpZGVyOiBzdHJpbmcgPSAnJyxcclxuICAgIHB1YmxpYyB2YWxpZGF0b3I6IHN0cmluZyA9ICcnLFxyXG4gICkge31cclxufVxyXG5leHBvcnQgY2xhc3MgQmFzZVZhbHVlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXHJcbiAgICBwdWJsaWMgcGFyYW06IEJhc2VQYXJhbSwgLy8gLS1cclxuICApIHt9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG9iamVjdFR5cGUob2JqOiBhbnkpOiBCYXNlVmFsdWVUeXBlIHtcclxuICBpZiAob2JqICE9PSB1bmRlZmluZWQpIHtcclxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICByZXR1cm4gQmFzZVZhbHVlVHlwZS5BcnJheTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHJldHVybiBCYXNlVmFsdWVUeXBlLkJvb2xlYW47XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHJldHVybiBCYXNlVmFsdWVUeXBlLk51bWJlcjtcclxuICAgIH0gZWxzZSBpZiAob2JqICYmIG9iai5ob3VycyAhPT0gdW5kZWZpbmVkICYmICcnICsgb2JqLmhvdXJzKSB7XHJcbiAgICAgIHJldHVybiBCYXNlVmFsdWVUeXBlLlRpbWU7XHJcbiAgICB9IGVsc2UgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqLmdldE1pbGxpc2Vjb25kcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICByZXR1cm4gQmFzZVZhbHVlVHlwZS5EYXRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIEJhc2VWYWx1ZVR5cGUuVGV4dDtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIEJhc2VWYWx1ZVR5cGUuVW5kZWZpbmVkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzY3JpcHRvcihkZXNjcmlwdG9yOiBBcnJheTxCYXNlUGFyYW0+LCBwcm9wZXJ0eTogQXJyYXk8c3RyaW5nPikge1xyXG4gIHJldHVybiBmdW5jdGlvbjxUIGV4dGVuZHMgeyBuZXcgKC4uLmFyZ3M6IGFueVtdKToge30gfT4oY29uc3RydWN0b3I6IFQpIHtcclxuICAgIGNvbnN0IGE6IGFueSA9IG5ldyBjb25zdHJ1Y3RvcigpO1xyXG4gICAgaWYgKCFwcm9wZXJ0eSkge1xyXG4gICAgICBwcm9wZXJ0eSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXJyYXkgPSBwcm9wZXJ0eTtcclxuICAgIGxldCB0cmcgPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdEZXNjcmlwdG9yJyxhcnJheSx0cmcpO1xyXG4gICAgZnVuY3Rpb24gcHJvYyhkYXRhOiBCYXNlUGFyYW0sIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcclxuICAgICAgbGV0IGJhc2UgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRyZywgZGF0YS5zaGVtYSk7XHJcbiAgICAgIGlmICghYmFzZSkge1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0cmcsIGRhdGEuc2hlbWEsIHtcclxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgdmFsdWU6IHtcclxuICAgICAgICAgICAgbGlzdDogW10sXHJcbiAgICAgICAgICAgIGhhc2g6IHt9LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBiYXNlID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0cmcsIGRhdGEuc2hlbWEpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGtlZXAgcHJldmlvdXMgZGVmaW5pdGlvbiAhXHJcbiAgICAgIGlmIChiYXNlICYmICFiYXNlLnZhbHVlLmhhc2hbcHJvcGVydHlLZXldKSB7XHJcbiAgICAgICAgYmFzZS52YWx1ZS5oYXNoW3Byb3BlcnR5S2V5XSA9IG5ldyBCYXNlVmFsdWUocHJvcGVydHlLZXksIGRhdGEpO1xyXG4gICAgICAgIGJhc2UudmFsdWUubGlzdC5wdXNoKHByb3BlcnR5S2V5KTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHJnLCBkYXRhLnNoZW1hLCBiYXNlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRlc2NyaXB0b3IuZm9yRWFjaChkID0+IHtcclxuICAgICAgYXJyYXkuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgICBsZXQgbmQ6IEJhc2VQYXJhbSA9IHsgLi4uZCB9O1xyXG4gICAgICAgIGNvbnN0IHQ6IEJhc2VWYWx1ZVR5cGUgPSBuZC50eXBlO1xyXG4gICAgICAgIGlmICh0ID09PSBCYXNlVmFsdWVUeXBlLlVuZGVmaW5lZCAmJiBhKSB7XHJcbiAgICAgICAgICAvLyBnZXQgdmFsdWUgdHlwZVxyXG4gICAgICAgICAgbmQudHlwZSA9IG9iamVjdFR5cGUoYVtuYW1lXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb2MobmQsIG5hbWUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGxldCBiYXNlID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0cmcsIGQuc2hlbWEpO1xyXG4gICAgICBpZiAoYmFzZSkge1xyXG4gICAgICAgIGJhc2UudmFsdWUubGlzdCA9IHByb3BlcnR5LnNsaWNlKCk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRyZywgZC5zaGVtYSwgYmFzZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgY29uc3RydWN0b3Ige307XHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEJhc2VEZXNjcmlwdG9ycyhkZXNjcmlwdG9yOiBBcnJheTxCYXNlUGFyYW0+KSB7XHJcbiAgZnVuY3Rpb24gcHJvYyhkYXRhOiBCYXNlUGFyYW0sIHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSB7XHJcbiAgICBsZXQgYmFzZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBkYXRhLnNoZW1hKTtcclxuICAgIGlmICghYmFzZSkge1xyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkYXRhLnNoZW1hLCB7XHJcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIHZhbHVlOiB7XHJcbiAgICAgICAgICBoYXNoOiB7fSxcclxuICAgICAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgICBiYXNlID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGRhdGEuc2hlbWEpO1xyXG4gICAgfVxyXG4gICAgaWYgKGJhc2UpIHtcclxuICAgICAgYmFzZS52YWx1ZS5oYXNoW3Byb3BlcnR5S2V5XSA9IG5ldyBCYXNlVmFsdWUocHJvcGVydHlLZXksIGRhdGEpO1xyXG4gICAgICBiYXNlLnZhbHVlLmxpc3QucHVzaChwcm9wZXJ0eUtleSk7XHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRhdGEuc2hlbWEsIGJhc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcclxuICAgIGRlc2NyaXB0b3IuZm9yRWFjaChkID0+IHtcclxuICAgICAgcHJvYyhkLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcclxuICAgIH0pO1xyXG4gIH07XHJcbn1cclxuIl19