squidGame/tgx-games-client/assets/core_tgx/base/ModuleContext.ts

53 lines
1.3 KiB
TypeScript

const PROP_MODULE = '__module__name__';
const PROP_IMPL_CLASS = '__impl__class__';
let defaultModule = 'resources';
export class ModuleContext {
public static setDefaultModule(moduleName) {
defaultModule = moduleName;
}
public static getDefaultModule(){
return defaultModule;
}
public static attachClassModule(cls, moduleName) {
cls[PROP_MODULE] = moduleName;
}
public static getClassModule(cls) {
return cls[PROP_MODULE] || defaultModule;
}
public static attachImplClass(cls, implCls) {
cls[PROP_IMPL_CLASS] = implCls;
}
public static attachModuleAndImplClass(cls, moduleName, implCls) {
cls[PROP_MODULE] = moduleName;
cls[PROP_IMPL_CLASS] = implCls;
}
public static getImplClass(cls) {
return cls[PROP_IMPL_CLASS] || cls;
}
public static createFromModule(cls) {
let implCls = this.getImplClass(cls) || cls;
return new implCls();
}
}
export function tgx_class(module:string, superCls?:Function) {
return function(cls:Function){
if(superCls){
ModuleContext.attachModuleAndImplClass(superCls,module,cls);
}
else{
ModuleContext.attachClassModule(cls,module);
}
}
}