text: var wrappy = require("wrappy");
  module.exports = wrappy(once);
  module.exports.strict = wrappy(onceStrict);
  
  once.proto = once(function () {
    Object.defineProperty(Function.prototype, "once", {
      value: function () {
        return once(this);
      },
      configurable: true,
    });
  
    Object.defineProperty(Function.prototype, "onceStrict", {
      value: function () {
        return onceStrict(this);
      },
      configurable: true,
    });
  });
  
  function once(fn) {
    var f = function () {
      if (f.called) return f.value;
      f.called = true;
      return f.value = fn.apply(this, arguments);
    };
    f.called = false;
    return f;
  }
  
  function onceStrict(fn) {
    var f = function () {
      if (f.called) {
        throw new Error(f.onceError);
      }
      f.called = true;
      return f.value = fn.apply(this, arguments);
    };
    var name = fn.name || "Function wrapped with `once`";
    f.onceError = name + " shouldn't be called more than once";
    f.called = false;
    return f;
  }
  