whole_func_string: function toJssRules(cssRules, options) {
    const jssRules = {}
  
    function stripUnit(value) {
      if (
        !options.unit ||
        // Detect a compound/multi value.
        /\s|,/.test(value)
      ) return value
  
      const unit = value.substr(value.length - options.unit.length)
      const num = parseFloat(value)
      if (unit === options.unit && num !== NaN) {
        return num
      }
      return value
    }
  
    function addRule(rule, rules) {
      if (rule.type === 'comment') return
      const key = rule.selectors.join(', ')
      const style = rules[key] || (rules[key] = {})
      rule.declarations.forEach(function (decl) {
        if (decl.type === 'comment') return
        const property = formatProp(decl.property)
        if (property in style) {
          const fallbacks = style.fallbacks || (style.fallbacks = [])
          fallbacks.splice(0, 0, { [property]: style[property] })
        }
        style[property] = stripUnit(decl.value)
      })
    }
  
    function formatProp(prop) {
      // Capitalize the first character
      return options.dashes ? prop : (typeof prop === 'string' && prop.substring(0, 1) === '-') ?
        camelCase(prop).charAt(0).toUpperCase() : camelCase(prop)
    }
  
    cssRules.forEach(function (rule) {
      if (rule.type === 'comment') return
      switch (rule.type) {
        case 'rule':
          addRule(rule, jssRules)
          break
        case 'media': {
          const key = '@media ' + rule.media
          const value = jssRules[key] || (jssRules[key] = {})
          rule.rules.forEach(function(rule) {
            addRule(rule, value)
          })
          break
        }
        case 'font-face': {
          const key = '@' + rule.type
          const value = jssRules[key] || (jssRules[key] = {})
          rule.declarations.forEach(function (decl) {
            value[formatProp(decl.property)] = decl.value
          })
          break
        }
        case 'keyframes': {
          const key = '@' + rule.type + ' ' + rule.name
          const value = jssRules[key] || (jssRules[key] = {})
          rule.keyframes.forEach(function (keyframe) {
            const frameKey = keyframe.values.join(', ')
            const frameValue = value[frameKey] || (value[frameKey] = {})
            keyframe.declarations.forEach(function (decl) {
              frameValue[formatProp(decl.property)] = stripUnit(decl.value)
            })
          })
        }
      }
    })
  
    return {'@global': jssRules}
  }
func_code_string: function toJssRules(cssRules, options) {
    const jssRules = {}
  
    function stripUnit(value) {
      if (
        !options.unit ||
        // Detect a compound/multi value.
        /\s|,/.test(value)
      ) return value
  
      const unit = value.substr(value.length - options.unit.length)
      const num = parseFloat(value)
      if (unit === options.unit && num !== NaN) {
        return num
      }
      return value
    }
  
    function addRule(rule, rules) {
      if (rule.type === 'comment') return
      const key = rule.selectors.join(', ')
      const style = rules[key] || (rules[key] = {})
      rule.declarations.forEach(function (decl) {
        if (decl.type === 'comment') return
        const property = formatProp(decl.property)
        if (property in style) {
          const fallbacks = style.fallbacks || (style.fallbacks = [])
          fallbacks.splice(0, 0, { [property]: style[property] })
        }
        style[property] = stripUnit(decl.value)
      })
    }
  
    function formatProp(prop) {
      // Capitalize the first character
      return options.dashes ? prop : (typeof prop === 'string' && prop.substring(0, 1) === '-') ?
        camelCase(prop).charAt(0).toUpperCase() : camelCase(prop)
    }
  
    cssRules.forEach(function (rule) {
      if (rule.type === 'comment') return
      switch (rule.type) {
        case 'rule':
          addRule(rule, jssRules)
          break
        case 'media': {
          const key = '@media ' + rule.media
          const value = jssRules[key] || (jssRules[key] = {})
          rule.rules.forEach(function(rule) {
            addRule(rule, value)
          })
          break
        }
        case 'font-face': {
          const key = '@' + rule.type
          const value = jssRules[key] || (jssRules[key] = {})
          rule.declarations.forEach(function (decl) {
            value[formatProp(decl.property)] = decl.value
          })
          break
        }
        case 'keyframes': {
          const key = '@' + rule.type + ' ' + rule.name
          const value = jssRules[key] || (jssRules[key] = {})
          rule.keyframes.forEach(function (keyframe) {
            const frameKey = keyframe.values.join(', ')
            const frameValue = value[frameKey] || (value[frameKey] = {})
            keyframe.declarations.forEach(function (decl) {
              frameValue[formatProp(decl.property)] = stripUnit(decl.value)
            })
          })
        }
      }
    })
  
    return {'@global': jssRules}
  }
func_documentation_string: Convert rules from css ast to jss style.
  
  @param {Array} cssRules
  @param {Object} options
  @return {Object}