aran-access-control
Version:
Access Control System for Aran
35 lines (32 loc) • 1.56 kB
JavaScript
const WeakMap_prototype_get = WeakMap.prototype.get;
const WeakMap_prototype_set = WeakMap.prototype.set;
module.exports = () => {
const foreign_internal_objects = new WeakMap();
foreign_internal_objects.get = WeakMap_prototype_get;
foreign_internal_objects.set = WeakMap_prototype_set;
const native_internal_objects = new WeakMap();
native_internal_objects.get = WeakMap_prototype_get;
native_internal_objects.set = WeakMap_prototype_set;
let native_external_objects = null;
let create_foreign_internal_object = null;
return {
internal_value_of: (external_value) => {
if (external_value && typeof external_value === "object" || typeof external_value === "function") {
const native_internal_object = native_internal_objects.get(external_value);
if (native_internal_object)
return native_internal_object;
let foreign_internal_object = foreign_internal_objects.get(external_value);
if (!foreign_internal_object) {
foreign_internal_object = create_foreign_internal_object(external_value);
native_external_objects.set(foreign_internal_object, external_value);
foreign_internal_objects.set(external_value, foreign_internal_object);
}
return foreign_internal_object;
}
return external_value;
},
native_internal_objects: native_internal_objects,
resolve_native_external_objects: (map) => native_external_objects = map,
resolve_create_foreign_internal_object: (closure) => create_foreign_internal_object = closure
};
};