UNPKG

@angular-package/property

Version:
83 lines 15.3 kB
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==