Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import { LOCKER_NEAR_MEMBRANE_SERIALIZED_VALUE_SYMBOL, LOCKER_NEAR_MEMBRANE_SYMBOL, } from './constants'; import type { NearMembraneSerializedValue } from './types'; export function getNearMembraneProxySerializedValue(object: object): NearMembraneSerializedValue { if ((typeof object === 'object' && object !== null) || typeof object === 'function') { // To extract the serialized value of a blue near-membrane proxy we must // perform a two step handshake. First, we trigger the "has" trap for // the `LOCKER_NEAR_MEMBRANE_SERIALIZED_VALUE_SYMBOL` property which // must report `false`. Second, we trigger the "get" trap to return the // serialized value. return LOCKER_NEAR_MEMBRANE_SERIALIZED_VALUE_SYMBOL in object ? undefined : (object as any)[LOCKER_NEAR_MEMBRANE_SERIALIZED_VALUE_SYMBOL]; } return undefined; } export function isNearMembraneProxy(value: any): boolean { if ((typeof value === 'object' && value !== null) || typeof value === 'function') { // To extract the flag value of a blue near-membrane proxy we must // perform a two step handshake. First, we trigger the "has" trap for // the `LOCKER_NEAR_MEMBRANE_SYMBOL` property which must report `false`. // Second, we trigger the "get" trap to return the flag value. return ( !(LOCKER_NEAR_MEMBRANE_SYMBOL in value) && (value as any)[LOCKER_NEAR_MEMBRANE_SYMBOL] === true ); } return false; } |