mirror of
https://github.com/slynn1324/tinypin
synced 2025-12-12 14:25:35 +00:00
58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
const app = new Proxy(new function(){
|
|
const _setters = {};
|
|
const _getters = {};
|
|
const _components = {};
|
|
let frozen = false;
|
|
|
|
this.addSetter = (name, f) => {
|
|
if ( frozen ){
|
|
console.error(`actions are frozen, add setter '${name}' before init.`);
|
|
}
|
|
if ( _setters[name] ){
|
|
console.error(`setter ${name} is already defined.`);
|
|
} else {
|
|
_setters[name] = f;
|
|
}
|
|
}
|
|
|
|
this.addGetter = (name, f) => {
|
|
if ( frozen ){
|
|
console.error(`actions are frozen, add getter '${name}' before init.`);
|
|
}
|
|
if (_getters[name] ){
|
|
console.error(`getter ${name} is already defined.`);
|
|
} else {
|
|
_getters[name] = f;
|
|
}
|
|
}
|
|
|
|
this.addComponent = (name, f) => {
|
|
if ( frozen ){
|
|
throw(new Error(`context is frozen, add component '${name}' components before init`));
|
|
}
|
|
_components[name] = f;
|
|
}
|
|
|
|
this.getSetters = () => {
|
|
return _setters;
|
|
}
|
|
|
|
this.getGetters = () => {
|
|
return _getters;
|
|
}
|
|
|
|
this.getComponents = () => {
|
|
return _components;
|
|
}
|
|
|
|
this.freeze = () => {
|
|
frozen = true;
|
|
}
|
|
}, {
|
|
get(target, name, receiver){
|
|
return Reflect.get(target, name, receiver);
|
|
},
|
|
set(target, name, receiver){
|
|
console.error("Direct modification of setters is not allowed. Use setters.do(name, function) instead.");
|
|
}
|
|
}); |