all files / src/ index.js

100% Statements 22/22
100% Branches 6/6
100% Functions 1/1
100% Lines 20/20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51        19×   21×                   12×       31× 20×                            
 
const _createElement = require('./create-element')
const helpers = require('hyperscript-helpers')
const parse = require('parse-hyperscript')
const hyphenate = require('@f/hyphenate')
const cn = require('classnames')
 
const toInlineStyle = (def) => Object.keys(def)
  .map((prop) => hyphenate(prop) + ':' + def[prop])
  .join(';')
 
const idTransform = (key, val) => val
 
const defaultTransformAttrs = (key, val) => {
  switch (key) {
    case 'className':
      return defaultTransformAttrs('class', val)
    case 'class':
      return [key, cn(val)]
    case 'style':
      return [
        key,
        typeof val !== 'string'
          ? toInlineStyle(val)
          : val
      ]
    default:
      return [key, val]
  }
}
 
const createElementx = (transformAttrs = idTransform) => {
  function createElement () {
    return _createElement(
      (key, val) => transformAttrs(key, defaultTransformAttrs(key, val)),
      parse(arguments)
    )
  }
 
  return Object.assign({}, helpers(createElement), {
    h: createElement,
    createElement
  })
}
 
Object.assign(
  module.exports,
  createElementx(),
  { createElementx }
)