in remote/data-info-manager.js [364:439]
realizeObjectDataInfo(dataInfo) {
const weakRef = this.remoteRefs[dataInfo.id];
if (weakRef && !weakRef.isDead()) {
return weakRef.ref();
}
/** @type {object} */
const base = Object.create(null);
/** @type {string} */
const refId = dataInfo.id;
/** @type {ProxyHandler.<object>} */
const handlers = {
/**
* @param {*} target
* @param {string | number | symbol} property
* @param {object} receiver
* @returns {Promise<*> | *}
*/
get: (target, property, receiver) => {
const baseValue = target[property];
if (baseValue || typeof property === "symbol") {
return baseValue;
}
return this.proxy.getPropertyAsync(refId, property);
},
/**
* @param {*} target
* @param {string | number | symbol} property
* @param {*} value
* @param {object} receiver
* @returns {boolean}
*/
set: (target, property, value, receiver) => {
if (typeof property === "symbol") {
target[property] = value;
return true;
}
if (property in target) {
return false;
}
this.proxy.setPropertyAsync(refId, property, value);
return true;
},
/**
* @param {*} target
* @param {string | number | symbol} prop
* @return {Boolean}
*/
has: (target, prop) => true
};
const objProxy = new Proxy(base, handlers);
if (dataInfo.memberInfos) {
for (const propertyName of Object.getOwnPropertyNames(dataInfo.memberInfos)) {
Object.defineProperty(base, propertyName, {
enumerable: false,
configurable: false,
writable: false,
value: this.realizeDataInfo(dataInfo.memberInfos[propertyName])
});
}
}
this.dataInfoMap.set(objProxy, dataInfo);
return this.registerRealizedObject(objProxy);
}