UNPKG

ngx-manage

Version:

- angular class descriptor and state

235 lines 17.7 kB
/** * @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