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;
}
|