JSFiddle - React, Tailwind, and code Playground

JavaScript

"use strict";
Hamburger.SIZE_SMALL = { price: 50, calories: 20, desc: 'SMALL' }
Hamburger.SIZE_BIG = { price: 100, calories: 40, desc: 'BIG' }

Hamburger.TOPPING_MAYO = { price: 20, calories: 5, desc: 'MAYO' }
Hamburger.TOPPING_CONDIMENT = { price: 15, calories: 0, desc: 'CONDIMENT' }

Hamburger.STUFFING_CHEESE = { price: 10, calories: 20, desc: 'CHEESE' }
Hamburger.STUFFING_SALADE = { price: 20, calories: 5 , desc: 'SALADE' }
Hamburger.STUFFING_POTATO = { price: 15, calories: 10, desc: 'POTATO' }

function Hamburger(size, stuffing) {
  var availableSizes = [Hamburger.SIZE_SMALL, Hamburger.SIZE_BIG];
  var availableStuffings = [Hamburger.STUFFING_CHEESE, Hamburger.STUFFING_SALADE, Hamburger.STUFFING_POTATO];
  var availableToppings = [Hamburger.TOPPING_MAYO, Hamburger.TOPPING_CONDIMENT];

  var invalidSizeErrorMessage = 'Invalid size. Only ' + availableSizes.map(size => size.desc).join`, ` + ' sizes are available';
  validatePriceCaloriesConst(availableSizes, size, invalidSizeErrorMessage);

  var invalidStuffingErrorMessage = 'Invalid stuffing. Only ' + availableStuffings.map(stuffing => stuffing.desc).join`, ` + ' stuffings are available';
  validatePriceCaloriesConst(availableStuffings, stuffing, invalidStuffingErrorMessage);

  this.price = size.price;
  this.calories = size.calories;
  this.price += stuffing.price;
  this.calories += stuffing.calories;

  function validatePriceCaloriesConst(consts, givenConst, errorMessage) {
    for (var i = 0; i < consts.length; i++) {
      if (givenConst
          && consts[i].price === givenConst.price
          && consts[i].calories === givenConst.calories
          && consts[i].desc === givenConst.desc) {
        return;
      }
    }

    throw new HamburgerException(errorMessage);
  }

  var toppingsSetted = [];
  this.addTopping = function(topping) {
    validatePriceCaloriesConst(availableToppings, topping, 'Invalid stuffing');
    if (~toppingsSetted.indexOf(topping.desc)) {
      throw new...