UNPKG

ngx-manage

Version:

- angular class descriptor and state

239 lines 18.4 kB
/** * @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=