Staging
v0.5.1
v0.5.1
https://www.npmjs.com/package/angular-ts-manage
Tip revision: b1e482ab8056177921736d49affb12f385db16fb authored by Dimitry Katz on 07 September 2019, 09:18:58 UTC
1.0.0
1.0.0
Tip revision: b1e482a
descriptor.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BASE_SHEMA = '$base';
var BaseValueProp;
(function (BaseValueProp) {
BaseValueProp[BaseValueProp["None"] = 0] = "None";
BaseValueProp[BaseValueProp["Text"] = 1] = "Text";
BaseValueProp[BaseValueProp["Input"] = 2] = "Input";
BaseValueProp[BaseValueProp["Disabled"] = 3] = "Disabled";
BaseValueProp[BaseValueProp["Hidden"] = 4] = "Hidden";
})(BaseValueProp = exports.BaseValueProp || (exports.BaseValueProp = {}));
var BaseValueType;
(function (BaseValueType) {
BaseValueType["Text"] = "text";
BaseValueType["Number"] = "number";
BaseValueType["Array"] = "array";
BaseValueType["Object"] = "object";
BaseValueType["Boolean"] = "boolean";
BaseValueType["Undefined"] = "undefined";
BaseValueType["Date"] = "date";
BaseValueType["Time"] = "time";
BaseValueType["Error"] = "error";
BaseValueType["Custom"] = "custom";
})(BaseValueType = exports.BaseValueType || (exports.BaseValueType = {}));
class BaseParam {
constructor(type = BaseValueType.Text, shema = exports.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;
}
}
exports.BaseParam = BaseParam;
class BaseValue {
constructor(name, param // --
) {
this.name = name;
this.param = param;
}
}
exports.BaseValue = BaseValue;
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;
}
function Descriptor(descriptor, property) {
return function (constructor) {
const a = new constructor();
if (!property) {
property = Object.getOwnPropertyNames(a);
}
const array = property;
let trg = constructor.prototype;
//console.log('Descriptor',array,trg);
function proc(data, propertyKey) {
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((d) => {
array.forEach(name => {
let nd = Object.assign({}, d);
const t = nd.type;
if (t === BaseValueType.Undefined && a) {
// get value type
nd.type = objectType(a[name]);
}
proc(nd, name);
});
let base = Object.getOwnPropertyDescriptor(trg, d.shema);
if (base) {
base.value.list = property.slice();
Object.defineProperty(trg, d.shema, base);
}
});
return class extends constructor {
};
};
}
exports.Descriptor = Descriptor;
function BaseDescriptors(descriptor) {
function proc(data, target, propertyKey) {
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 function (target, propertyKey) {
descriptor.forEach((d) => {
proc(d, target, propertyKey);
});
};
}
exports.BaseDescriptors = BaseDescriptors;