"use strict";
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const index = require("../hasown/index.cjs");
const index$1 = require("../side-channel/index.cjs");
const type = require("../es-errors/type.cjs");
var hasOwn = index.hasown;
var channel = index$1.sideChannel();
var $TypeError = type.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;
exports.internalSlot = internalSlot;
//# sourceMappingURL=index.cjs.map
