import { h as hasown } from "../hasown/index.js";
import { s as sideChannel } from "../side-channel/index.js";
import { t as type } from "../es-errors/type.js";
var hasOwn = hasown;
var channel = sideChannel();
var $TypeError = type;
var SLOT = {
  assert: function(O, slot) {
    if (!O || typeof O !== "object" && typeof O !== "function") {
      throw new $TypeError("`O` is not an object");
    }
    if (typeof slot !== "string") {
      throw new $TypeError("`slot` must be a string");
    }
    channel.assert(O);
    if (!SLOT.has(O, slot)) {
      throw new $TypeError("`" + slot + "` is not present on `O`");
    }
  },
  get: function(O, slot) {
    if (!O || typeof O !== "object" && typeof O !== "function") {
      throw new $TypeError("`O` is not an object");
    }
    if (typeof slot !== "string") {
      throw new $TypeError("`slot` must be a string");
    }
    var slots = channel.get(O);
    return slots && slots["$" + slot];
  },
  has: function(O, slot) {
    if (!O || typeof O !== "object" && typeof O !== "function") {
      throw new $TypeError("`O` is not an object");
    }
    if (typeof slot !== "string") {
      throw new $TypeError("`slot` must be a string");
    }
    var slots = channel.get(O);
    return !!slots && hasOwn(slots, "$" + slot);
  },
  set: function(O, slot, V) {
    if (!O || typeof O !== "object" && typeof O !== "function") {
      throw new $TypeError("`O` is not an object");
    }
    if (typeof slot !== "string") {
      throw new $TypeError("`slot` must be a string");
    }
    var slots = channel.get(O);
    if (!slots) {
      slots = {};
      channel.set(O, slots);
    }
    slots["$" + slot] = V;
  }
};
if (Object.freeze) {
  Object.freeze(SLOT);
}
var internalSlot = SLOT;
export {
  internalSlot as i
};
//# sourceMappingURL=index.js.map
