@angular-package/property
Version:
Features to handle object properties.
83 lines • 15.3 kB
JavaScript
var _WrapProperty_instances, _WrapProperty_descriptors, _WrapProperty_object, _WrapProperty_wrapped, _WrapProperty_wrappedValues, _WrapProperty_wrap;
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
import { Descriptors } from '../descriptor/lib/descriptors.class';
export class WrapProperty {
constructor(object, ...names) {
_WrapProperty_instances.add(this);
_WrapProperty_descriptors.set(this, void 0);
_WrapProperty_object.set(this, void 0);
_WrapProperty_wrapped.set(this, new Set());
_WrapProperty_wrappedValues.set(this, new Map());
__classPrivateFieldSet(this, _WrapProperty_object, object, "f");
__classPrivateFieldSet(this, _WrapProperty_descriptors, new Descriptors(object, ...names), "f");
}
get descriptors() {
return __classPrivateFieldGet(this, _WrapProperty_descriptors, "f");
}
get wrapped() {
return __classPrivateFieldGet(this, _WrapProperty_wrapped, "f");
}
get wrappedValues() {
return __classPrivateFieldGet(this, _WrapProperty_wrappedValues, "f");
}
wrap(names, getterCallback, setterCallback) {
Array.isArray(names)
? names.forEach(name => __classPrivateFieldGet(this, _WrapProperty_instances, "m", _WrapProperty_wrap).call(this, __classPrivateFieldGet(this, _WrapProperty_object, "f"), name, getterCallback, setterCallback))
: __classPrivateFieldGet(this, _WrapProperty_instances, "m", _WrapProperty_wrap).call(this, __classPrivateFieldGet(this, _WrapProperty_object, "f"), names, getterCallback, setterCallback);
return this;
}
unwrap(...names) {
Array.isArray(names) &&
names.forEach((name) => (__classPrivateFieldGet(this, _WrapProperty_wrapped, "f").delete(name),
Object.defineProperty(__classPrivateFieldGet(this, _WrapProperty_object, "f"), name, {
...__classPrivateFieldGet(this, _WrapProperty_descriptors, "f").get(name),
})));
return this;
}
}
_WrapProperty_descriptors = new WeakMap(), _WrapProperty_object = new WeakMap(), _WrapProperty_wrapped = new WeakMap(), _WrapProperty_wrappedValues = new WeakMap(), _WrapProperty_instances = new WeakSet(), _WrapProperty_wrap = function _WrapProperty_wrap(object, name, getterCallback, setterCallback) {
const thisInstance = this;
if (__classPrivateFieldGet(this, _WrapProperty_wrapped, "f").has(name) === false) {
if (typeof object === 'object' || typeof object === 'function') {
__classPrivateFieldGet(this, _WrapProperty_descriptors, "f").has(name) === false &&
__classPrivateFieldGet(this, _WrapProperty_descriptors, "f").setPicked(object, name);
const detectedSource = typeof object === 'function' ? object.prototype : object;
__classPrivateFieldGet(this, _WrapProperty_wrappedValues, "f").set(name, detectedSource[name]);
Object.defineProperty(detectedSource, name, {
configurable: true,
enumerable: false,
get() {
let result;
thisInstance.descriptors.has(name) &&
thisInstance.descriptors
.get(name)
?.get?.apply(this, arguments);
typeof getterCallback === 'function' &&
(result = getterCallback(name, this));
return result || thisInstance.wrappedValues.get(name);
},
set(value) {
const oldValue = thisInstance.wrappedValues.get(name);
thisInstance.descriptors.has(name) &&
thisInstance.descriptors
.get(name)
?.set?.apply(this, arguments);
thisInstance.wrappedValues.set(name, value);
typeof setterCallback === 'function' &&
setterCallback(value, oldValue, name, this);
},
});
__classPrivateFieldGet(this, _WrapProperty_wrapped, "f").add(name);
}
else {
throw new Error(`Problem: Argument \`object\`: ${object} must be generic type variable \`Obj\`.
Quick fix: Check the passed object in the constructor.
`);
}
}
else {
throw new Error(`Problem: Property \`name\`: ${String(name)} is already wrapped.`);
}
return this;
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JhcC1wcm9wZXJ0eS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3Byb3BlcnR5L3NyYy9saWIvd3JhcC1wcm9wZXJ0eS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQU9sRSxNQUFNLE9BQU8sWUFBWTtJQW1EdkIsWUFBWSxNQUFXLEVBQUUsR0FBRyxLQUFjOztRQXZCMUMsNENBQXNDO1FBS3RDLHVDQUFhO1FBS2IsZ0NBQXVCLElBQUksR0FBRyxFQUFFLEVBQUM7UUFLakMsc0NBQWtDLElBQUksR0FBRyxFQUFFLEVBQUM7UUFTMUMsdUJBQUEsSUFBSSx3QkFBVyxNQUFNLE1BQUEsQ0FBQztRQUN0Qix1QkFBQSxJQUFJLDZCQUFnQixJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBQSxDQUFDO0lBQ3hELENBQUM7SUEvQ0QsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sdUJBQUEsSUFBSSxpQ0FBYSxDQUFDO0lBQzNCLENBQUM7SUFLRCxJQUFXLE9BQU87UUFDaEIsT0FBTyx1QkFBQSxJQUFJLDZCQUFTLENBQUM7SUFDdkIsQ0FBQztJQUtELElBQVcsYUFBYTtRQUN0QixPQUFPLHVCQUFBLElBQUksbUNBQWUsQ0FBQztJQUM3QixDQUFDO0lBeUNNLElBQUksQ0FDVCxLQUFvQixFQUNwQixjQUEwQyxFQUMxQyxjQUEwQztRQUUxQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNsQixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLHVCQUFBLElBQUksbURBQU0sTUFBVixJQUFJLEVBQU8sdUJBQUEsSUFBSSw0QkFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDdkYsQ0FBQyxDQUFDLHVCQUFBLElB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RixDQUFDLENBQUM7WUFDSCx1QkFBQSxJQUFJLDZCQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pCO2FBQU07WUFDTCxNQUFNLElBQUksS0FBSyxDQUNiLGlDQUFpQyxNQUFNOztXQUV0QyxDQUNGLENBQUM7U0FDSDtLQUNGO1NBQU07UUFDTCxNQUFNLElBQUksS0FBSyxDQUNiLCtCQUErQixNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUNsRSxDQUFDO0tBQ0g7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDbGFzcy5cbmltcG9ydCB7IERlc2NyaXB0b3JzIH0gZnJvbSAnLi4vZGVzY3JpcHRvci9saWIvZGVzY3JpcHRvcnMuY2xhc3MnO1xuLy8gVHlwZS5cbmltcG9ydCB7IEdldHRlckNhbGxiYWNrIH0gZnJvbSAnLi4vdHlwZS9nZXR0ZXItY2FsbGJhY2sudHlwZSc7XG5pbXBvcnQgeyBTZXR0ZXJDYWxsYmFjayB9IGZyb20gJy4uL3R5cGUvc2V0dGVyLWNhbGxiYWNrLnR5cGUnO1xuLyoqXG4gKlxuICovXG5leHBvcnQgY2xhc3MgV3JhcFByb3BlcnR5PFxuICBPYmogZXh0ZW5kcyBvYmplY3QgfCBGdW5jdGlvbixcbiAgTmFtZXMgZXh0ZW5kcyBrZXlvZiBPYmpcbj4ge1xuICAvKipcbiAgICpcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRvcnMoKTogRGVzY3JpcHRvcnM8T2JqLCBOYW1lcz4ge1xuICAgIHJldHVybiB0aGlzLiNkZXNjcmlwdG9ycztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIGdldCB3cmFwcGVkKCk6IFNldDxOYW1lcz4ge1xuICAgIHJldHVybiB0aGlzLiN3cmFwcGVkO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgZ2V0IHdyYXBwZWRWYWx1ZXMoKTogTWFwPE5hbWVzLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy4jd3JhcHBlZFZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgI2Rlc2NyaXB0b3JzOiBEZXNjcmlwdG9yczxPYmosIE5hbWVzPjtcblxuICAvKipcbiAgICpcbiAgICovXG4gICNvYmplY3Q6IE9iajtcblxuICAvKipcbiAgICpcbiAgICovXG4gICN3cmFwcGVkOiBTZXQ8TmFtZXM+ID0gbmV3IFNldCgpO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgI3dyYXBwZWRWYWx1ZXM6IE1hcDxOYW1lcywgYW55PiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG9iamVjdFxuICAgKiBAcGFyYW0gbmFtZXNcbiAgICogQGFuZ3VsYXJwYWNrYWdlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvYmplY3Q6IE9iaiwgLi4ubmFtZXM6IE5hbWVzW10pIHtcbiAgICB0aGlzLiNvYmplY3QgPSBvYmplY3Q7XG4gICAgdGhpcy4jZGVzY3JpcHRvcnMgPSBuZXcgRGVzY3JpcHRvcnMob2JqZWN0LCAuLi5uYW1lcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG5hbWVzXG4gICAqIEBwYXJhbSBnZXR0ZXJDYWxsYmFja1xuICAgKiBAcGFyYW0gc2V0dGVyQ2FsbGJhY2tcbiAgICogQHJldHVybnNcbiAgICogQGFuZ3VsYXJwYWNrYWdlXG4gICAqL1xuICBwdWJsaWMgd3JhcDxOYW1lIGV4dGVuZHMgTmFtZXM+KFxuICAgIG5hbWVzOiBOYW1lIHwgTmFtZVtdLFxuICAgIGdldHRlckNhbGxiYWNrPzogR2V0dGVyQ2FsbGJhY2s8T2JqLCBOYW1lPixcbiAgICBzZXR0ZXJDYWxsYmFjaz86IFNldHRlckNhbGxiYWNrPE9iaiwgTmFtZT5cbiAgKTogdGhpcyB7XG4gICAgQXJyYXkuaXNBcnJheShuYW1lcylcbiAgICAgID8gbmFtZXMuZm9yRWFjaChuYW1lID0+IHRoaXMuI3dyYXAodGhpcy4jb2JqZWN0LCBuYW1lLCBnZXR0ZXJDYWxsYmFjaywgc2V0dGVyQ2FsbGJhY2spKVxuICAgICAgOiB0aGlzLiN3cmFwKHRoaXMuI29iamVjdCwgbmFtZXMsIGdldHRlckNhbGxiYWNrLCBzZXR0ZXJDYWxsYmFjayk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG5hbWVzXG4gICAqIEByZXR1cm5zXG4gICAqIEBhbmd1bGFycGFja2FnZVxuICAgKi9cbiAgcHVibGljIHVud3JhcCguLi5uYW1lczogTmFtZXNbXSk6IHRoaXMge1xuICAgIEFycmF5LmlzQXJyYXkobmFtZXMpICYmXG4gICAgICBuYW1lcy5mb3JFYWNoKFxuICAgICAgICAobmFtZSkgPT4gKFxuICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIHRoZSAjd3JhcHBlZCBzdG9yYWdlLlxuICAgICAgICAgIHRoaXMuI3dyYXBwZWQuZGVsZXRlKG5hbWUpLFxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLiNvYmplY3QsIG5hbWUsIHtcbiAgICAgICAgICAgIC4uLnRoaXMuI2Rlc2NyaXB0b3JzLmdldChuYW1lKSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRPRE86IENoZWNrIHdyYXBwaW5nIGZvciB1bmlvbiB0eXBlcy5cbiAgICogV3JhcHBlciBmb3Igc291cmNlIG9iamVjdCBwcm9wZXJ0eS5cbiAgICogQHBhcmFtIG9iamVjdCBTb3VyY2Ugb2JqZWN0IGFzIGRlY29yYXRvciBmdW5jdGlvbiBvciBjb21wb25lbnQgdHlwZSB0byB3cmFwIHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSBuYW1lIFNvdXJjZSBvYmplY3QgcHJvcGVydHkga2V5IHRvIHdyYXAgdmFsdWUuXG4gICAqIEBwYXJhbSBnZXR0ZXJDYWxsYmFjayBGdW5jdGlvbiB0byB3cmFwIHNvdXJjZSBwcm9wZXJ0eSBnZXR0ZXIuXG4gICAqIEBwYXJhbSBzZXR0ZXJDYWxsYmFjayBGdW5jdGlvbiB0byB3cmFwIHNvdXJjZSBwcm9wZXJ0eSBzZXR0ZXIuXG4gICAqIEBhbmd1bGFycGFja2FnZVxuICAgKi9cbiAgI3dyYXA8TmFtZSBleHRlbmRzIE5hbWVzPihcbiAgICBvYmplY3Q6IE9iaixcbiAgICBuYW1lOiBOYW1lLFxuICAgIGdldHRlckNhbGxiYWNrPzogR2V0dGVyQ2FsbGJhY2s8T2JqLCBOYW1lPixcbiAgICBzZXR0ZXJDYWxsYmFjaz86IFNldHRlckNhbGxiYWNrPE9iaiwgTmFtZT5cbiAgKTogdGhpcyB7XG4gICAgY29uc3QgdGhpc0luc3RhbmNlID0gdGhpcztcbiAgICBpZiAodGhpcy4jd3JhcHBlZC5oYXMobmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG9iamVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBJZiB0aGUgZGVzY3JpcHRvciBpcyBub3QgYWxyZWFkeSBmb3VuZCBzZXQgdGhlIG9yaWdpbmFsIGRlc2NyaXB0b3IgaWYgZXhpc3RzLlxuICAgICAgICB0aGlzLiNkZXNjcmlwdG9ycy5oYXMobmFtZSkgPT09IGZhbHNlICYmXG4gICAgICAgICAgdGhpcy4jZGVzY3JpcHRvcnMuc2V0UGlja2VkKG9iamVjdCwgbmFtZSk7XG5cbiAgICAgICAgLy8gRGV0ZWN0IHNvdXJjZS5cbiAgICAgICAgY29uc3QgZGV0ZWN0ZWRTb3VyY2UgPVxuICAgICAgICAgIHR5cGVvZiBvYmplY3QgPT09ICdmdW5jdGlvbicgPyBvYmplY3QucHJvdG90eXBlIDogb2JqZWN0O1xuXG4gICAgICAgIC8vIFNldHMgdGhlIGRlZmF1bHQgdmFsdWUgdG8gd3JhcHBlZCBwcm9wZXJ0eS5cbiAgICAgICAgdGhpcy4jd3JhcHBlZFZhbHVlcy5zZXQobmFtZSwgZGV0ZWN0ZWRTb3VyY2VbbmFtZV0pO1xuXG4gICAgICAgIC8vIERlZmluZSBwcm9wZXJ0eS5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRldGVjdGVkU291cmNlLCBuYW1lLCB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIC8vIElmIHRydWUgdGhlbiBNYXhpbXVtIGNhbGwgZXhjZWVkZWQuXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgZ2V0KCk6IE9ialtOYW1lXSB7XG4gICAgICAgICAgICAvLyBQcmVwYXJlIHZhcmlhYmxlIHRvIHJldHVybi5cbiAgICAgICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgICAgICAvLyBQZXJmb3JtIHN0b3JlZCBnZXR0ZXIuXG4gICAgICAgICAgICB0aGlzSW5zdGFuY2UuZGVzY3JpcHRvcnMuaGFzKG5hbWUpICYmXG4gICAgICAgICAgICAgIHRoaXNJbnN0YW5jZS5kZXNjcmlwdG9yc1xuICAgICAgICAgICAgICAgIC5nZXQobmFtZSlcbiAgICAgICAgICAgICAgICA/LmdldD8uYXBwbHkodGhpcywgYXJndW1lbnRzIGFzIGFueSk7XG5cbiAgICAgICAgICAgIC8vIEN1c3RvbSBnZXR0ZXIuXG4gICAgICAgICAgICB0eXBlb2YgZ2V0dGVyQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgICAgKHJlc3VsdCA9IGdldHRlckNhbGxiYWNrKG5hbWUsIHRoaXMpKTtcblxuICAgICAgICAgICAgLy8gUmV0dXJucyB0aGUgdmFsdWUuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IHx8IHRoaXNJbnN0YW5jZS53cmFwcGVkVmFsdWVzLmdldChuYW1lKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldCh2YWx1ZTogT2JqW05hbWVdKTogdm9pZCB7XG4gICAgICAgICAgICAvLyBTdG9yZSB0aGUgb2xkIHZhbHVlIHRvIHBhc3MgdG8gc2V0dGVyQ2FsbGJhY2suXG4gICAgICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXNJbnN0YW5jZS53cmFwcGVkVmFsdWVzLmdldChuYW1lKTtcbiAgICAgICAgICAgIC8vIFBlcmZvcm0gc3RvcmVkIHNldHRlci5cbiAgICAgICAgICAgIHRoaXNJbnN0YW5jZS5kZXNjcmlwdG9ycy5oYXMobmFtZSkgJiZcbiAgICAgICAgICAgICAgdGhpc0luc3RhbmNlLmRlc2NyaXB0b3JzXG4gICAgICAgICAgICAgICAgLmdldChuYW1lKVxuICAgICAgICAgICAgICAgID8uc2V0Py5hcHBseSh0aGlzLCBhcmd1bWVudHMgYXMgYW55KTtcbiAgICAgICAgICAgIC8vIFNldCB0aGUgdmFsdWUuXG4gICAgICAgICAgICB0aGlzSW5zdGFuY2Uud3JhcHBlZFZhbHVlcy5zZXQobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgLy8gVXNlIGN1c3RvbSBzZXR0ZXIuXG4gICAgICAgICAgICB0eXBlb2Ygc2V0dGVyQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgICAgc2V0dGVyQ2FsbGJhY2sodmFsdWUsIG9sZFZhbHVlLCBuYW1lLCB0aGlzKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4jd3JhcHBlZC5hZGQobmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFByb2JsZW06IEFyZ3VtZW50IFxcYG9iamVjdFxcYDogJHtvYmplY3R9IG11c3QgYmUgZ2VuZXJpYyB0eXBlIHZhcmlhYmxlIFxcYE9ialxcYC5cbiAgICAgICAgICBRdWljayBmaXg6IENoZWNrIHRoZSBwYXNzZWQgb2JqZWN0IGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICBgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFByb2JsZW06IFByb3BlcnR5IFxcYG5hbWVcXGA6ICR7U3RyaW5nKG5hbWUpfSBpcyBhbHJlYWR5IHdyYXBwZWQuYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cbiJdfQ==