text: "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.SetNumberFormatUnitOptions = void 0;
  var GetOption_1 = require("../GetOption");
  var IsWellFormedCurrencyCode_1 = require("../IsWellFormedCurrencyCode");
  var IsWellFormedUnitIdentifier_1 = require("../IsWellFormedUnitIdentifier");
  /**
   * https://tc39.es/ecma402/#sec-setnumberformatunitoptions
   */
  function SetNumberFormatUnitOptions(nf, options, _a) {
      if (options === void 0) { options = Object.create(null); }
      var getInternalSlots = _a.getInternalSlots;
      var internalSlots = getInternalSlots(nf);
      var style = GetOption_1.GetOption(options, 'style', 'string', ['decimal', 'percent', 'currency', 'unit'], 'decimal');
      internalSlots.style = style;
      var currency = GetOption_1.GetOption(options, 'currency', 'string', undefined, undefined);
      if (currency !== undefined && !IsWellFormedCurrencyCode_1.IsWellFormedCurrencyCode(currency)) {
          throw RangeError('Malformed currency code');
      }
      if (style === 'currency' && currency === undefined) {
          throw TypeError('currency cannot be undefined');
      }
      var currencyDisplay = GetOption_1.GetOption(options, 'currencyDisplay', 'string', ['code', 'symbol', 'narrowSymbol', 'name'], 'symbol');
      var currencySign = GetOption_1.GetOption(options, 'currencySign', 'string', ['standard', 'accounting'], 'standard');
      var unit = GetOption_1.GetOption(options, 'unit', 'string', undefined, undefined);
      if (unit !== undefined && !IsWellFormedUnitIdentifier_1.IsWellFormedUnitIdentifier(unit)) {
          throw RangeError('Invalid unit argument for Intl.NumberFormat()');
      }
      if (style === 'unit' && unit === undefined) {
          throw TypeError('unit cannot be undefined');
      }
      var unitDisplay = GetOption_1.GetOption(options, 'unitDisplay', 'string', ['short', 'narrow', 'long'], 'short');
      if (style === 'currency') {
          internalSlots.currency = currency.toUpperCase();
          internalSlots.currencyDisplay = currencyDisplay;
          internalSlots.currencySign = currencySign;
      }
      if (style === 'unit') {
          internalSlots.unit = unit;
          internalSlots.unitDisplay = unitDisplay;
      }
  }
  exports.SetNumberFormatUnitOptions = SetNumberFormatUnitOptions;
  