xatto
Version:
xatto is View Layer Library based on Function and Context using VirtualDOM. This is developed by forking from jorgebucaran/superfine.
49 lines (34 loc) • 1.36 kB
text/typescript
import { assign } from './assign'
import { UPDATE } from './consts/lifecycleNames'
import { CHILDREN } from './consts/vNodeAttributeNames'
import { noop } from './noop'
import { Resolver } from './resolver'
import { x } from './x'
export function rendering (glueNode, view, extra, renderers) {
const resolverRecursion: Resolver = (...args) => resolver.apply(null, args)
const [resolver] = renderers
.map((v) => v[0])
.reduce(wrapOnion, [
(() => []) as Resolver,
resolverRecursion
]) as Resolver[]
const glueNodeMergerRecursion = (...args) => glueNodeMerger.apply(null, args)
const [glueNodeMerger] = renderers
.map((v) => v[1])
.reduce(wrapOnion, [noop, glueNodeMergerRecursion])
const patcherRecursion = (...args) => patcher.apply(null, args)
const [patcher] = renderers
.map((v) => v[2])
.reduce(wrapOnion, [noop, patcherRecursion])
const [finallyer] = renderers.map((v) => v[3]).reduce(wrapOnion, [noop, noop])
const vNodes = resolver(x(view, { xa: { extra } }, []))
const container = assign({}, glueNode)
container[CHILDREN] = vNodes
const node = glueNodeMerger(UPDATE, container, glueNode)
glueNode = patcher(node, 'svg' === node.name)
finallyer()
return glueNode
}
function wrapOnion ([next, recursion], stack) {
return [stack ? stack(next, recursion) : next, recursion]
}