| 
              {object} = require 'utila'
module.exports = self =
	sanitize: (val) ->
		self._toChildren val
	_toChildren: (val) ->
		if object.isBareObject val
			return self._objectToChildren val
		else if Array.isArray val
			return self._arrayToChildren val
		else if val is null or typeof val is 'undefined'
			return []
		else if typeof val in ['string', 'number']
			return [String val]
		else
			throw Error "not a valid child node: `#{val}"
	_objectToChildren: (o) ->
		a = []
		for own key, val of o
			cur = {}
			cur[key] = self.sanitize val
			a.push cur
		a
	_arrayToChildren: (a) ->
		ret = []
		for v in a
			ret.push self._toNode v
		ret
	_toNode: (o) ->
		if typeof o in ['string', 'number']
			return String o
		else if object.isBareObject o
			keys = Object.keys(o)
			if keys.length isnt 1
				throw Error "a node must only have one key as tag name"
			key = keys[0]
			obj = {}
			obj[key] = self._toChildren o[key]
			return obj
		else
			throw Error "not a valid node: `#{o}`"
 
  |