qcobjects
Version:
QCObjects is an Open-source framework that empowers full-stack developers to make micro-services and micro-frontends into an N-Tier architecture.
94 lines (87 loc) • 2.32 kB
text/typescript
import { TDDOParams } from "types";
import { Export } from "./Export";
import { InheritClass } from "./InheritClass";
import { logger } from "./Logger";
import { ObjectName } from "./ObjectName";
/**
* Dynamic Data Objects Class
* Usage:
* Class('TestDDO',{
* data: {},
* _new_ (){
* this.ddo = New(DDO,{
* instance:this,
* name:'data',
* value:{},
* fget (value){
* logger.debug('returned value '+ value );
* }
* })
* }
* });
*
*/
export class DDO extends InheritClass {
constructor({
instance,
name,
fget,
fset,
value
}:TDDOParams) {
super({
instance,
name,
fget,
fset,
value
});
this._new_({
instance,
name,
fget,
fset,
value
});
}
_new_({
instance,
name,
fget,
fset
}:TDDOParams):void {
const ddoInstance = this;
var name = (typeof name === "undefined") ? (ObjectName(ddoInstance)) : (name);
Object.defineProperty(instance, name, {
set(val) {
const _value = val;
logger.debug("value changed " + name);
let ret;
if (typeof fset !== "undefined" && typeof fset === "function") {
ret = fset(_value);
} else {
ret = _value;
}
instance["_" + name] = ret;
},
get():any {
const _value = instance["_" + name];
logger.debug("returning value " + name);
const is_ddo = (v:any):any => {
if (typeof v === "object" && Object.hasOwn(v, "value")) {
return v.value;
}
return v;
};
let ret;
if (typeof fget !== "undefined" && typeof fget === "function") {
ret = fget(is_ddo(_value));
} else {
ret = is_ddo(_value);
}
return ret;
}
});
}
}
Export(DDO);