text: var V3_URL = 'https://js.stripe.com/v3';
  var V3_URL_REGEX = /^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/;
  var EXISTING_SCRIPT_MESSAGE = 'loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used';
  var findScript = function findScript() {
    var scripts = document.querySelectorAll("script[src^=\"".concat(V3_URL, "\"]"));
  
    for (var i = 0; i < scripts.length; i++) {
      var script = scripts[i];
  
      if (!V3_URL_REGEX.test(script.src)) {
        continue;
      }
  
      return script;
    }
  
    return null;
  };
  
  var injectScript = function injectScript(params) {
    var queryString = params && !params.advancedFraudSignals ? '?advancedFraudSignals=false' : '';
    var script = document.createElement('script');
    script.src = "".concat(V3_URL).concat(queryString);
    var headOrBody = document.head || document.body;
  
    if (!headOrBody) {
      throw new Error('Expected document.body not to be null. Stripe.js requires a <body> element.');
    }
  
    headOrBody.appendChild(script);
    return script;
  };
  
  var registerWrapper = function registerWrapper(stripe, startTime) {
    if (!stripe || !stripe._registerWrapper) {
      return;
    }
  
    stripe._registerWrapper({
      name: 'stripe-js',
      version: "1.17.1",
      startTime: startTime
    });
  };
  
  var stripePromise = null;
  var loadScript = function loadScript(params) {
    // Ensure that we only attempt to load Stripe.js at most once
    if (stripePromise !== null) {
      return stripePromise;
    }
  
    stripePromise = new Promise(function (resolve, reject) {
      if (typeof window === 'undefined') {
        // Resolve to null when imported server side. This makes the module
        // safe to import in an isomorphic code base.
        resolve(null);
        return;
      }
  
      if (window.Stripe && params) {
        console.warn(EXISTING_SCRIPT_MESSAGE);
      }
  
      if (window.Stripe) {
        resolve(window.Stripe);
        return;
      }
  
      try {
        var script = findScript();
  
        if (script && params) {
          console.warn(EXISTING_SCRIPT_MESSAGE);
        } else if (!script) {
          script = injectScript(params);
        }
  
        script.addEventListener('load', function () {
          if (window.Stripe) {
            resolve(window.Stripe);
          } else {
            reject(new Error('Stripe.js not available'));
          }
        });
        script.addEventListener('error', function () {
          reject(new Error('Failed to load Stripe.js'));
        });
      } catch (error) {
        reject(error);
        return;
      }
    });
    return stripePromise;
  };
  var initStripe = function initStripe(maybeStripe, args, startTime) {
    if (maybeStripe === null) {
      return null;
    }
  
    var stripe = maybeStripe.apply(undefined, args);
    registerWrapper(stripe, startTime);
    return stripe;
  };
  
  // own script injection.
  
  var stripePromise$1 = Promise.resolve().then(function () {
    return loadScript(null);
  });
  var loadCalled = false;
  stripePromise$1["catch"](function (err) {
    if (!loadCalled) {
      console.warn(err);
    }
  });
  var loadStripe = function loadStripe() {
    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }
  
    loadCalled = true;
    var startTime = Date.now();
    return stripePromise$1.then(function (maybeStripe) {
      return initStripe(maybeStripe, args, startTime);
    });
  };
  
  export { loadStripe };
  