@amirmarmul/waba-common
Version:

60 lines (59 loc) • 1.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.JsonResource = void 0;
class JsonResource {
hidden = [];
fillable = [];
attributes = {};
constructor(attributes) {
this.fill(attributes);
return new Proxy(this, {
get: (target, property) => {
if (target.isAttribute(property)) {
return target.getAttribute(property);
}
return target[property];
},
set: (target, property, value) => {
target.setAttribute(property, value);
return true;
}
});
}
fill(attributes) {
for (const key in attributes) {
this.setAttribute(key, attributes[key]);
}
}
isAttribute(key) {
return this.attributes.hasOwnProperty(key);
}
getAttribute(key) {
return this.attributes[key];
}
setAttribute(key, value) {
this.attributes[key] = value;
}
getHidden() {
return this.hidden;
}
setHidden(keys) {
this.hidden = keys;
}
getFillable() {
return this.fillable;
}
setFillable(keys) {
this.fillable = keys;
}
toJSON() {
return Object.keys(this.attributes)
.filter(key => this.getFillable().includes(key))
.filter(key => !this.getHidden().includes(key))
.reduce((target, key) => {
target[key] = this.attributes[key];
return target;
}, {});
}
}
exports.JsonResource = JsonResource;