All files / near-membrane-shared/src NearMembrane.ts

0% Statements 0/6
0% Branches 0/14
0% Functions 0/2
0% Lines 0/6

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