import { CurriedCreateTagsFunction, HyperScriptHelperNamespace, HyperScriptHelperRootTag, HyperScriptFunction, } from './types' import createTag from './createTag' import {isNil} from 'ramda' function createTags( h: HyperScriptFunction ): CurriedCreateTagsFunction function createTags( h: HyperScriptFunction, tagNames: T[] ): HyperScriptHelperNamespace function createTags( h: HyperScriptFunction, tagNames: T[], rootTagName: T ): HyperScriptHelperRootTag function createTags( h: HyperScriptFunction, tagNames?: T[], rootTagName?: T ): unknown { const _createTag = createTag(h) function curriedCreateTags(names: T[], rootName?: T): unknown { const root = !isNil(rootName) ? _createTag(rootName) : Object.create(null) return names.reduce((result, tagName) => { result[tagName] = _createTag(tagName) return result }, root) } if (!isNil(tagNames)) { return !isNil(rootTagName) ? curriedCreateTags(tagNames, rootTagName) : curriedCreateTags(tagNames) } return curriedCreateTags } export default createTags