@skele/classic
Version:
Skele is an architectural framework that assists with building data-driven apps with React or React Native.
28 lines (21 loc) • 611 B
JavaScript
import * as R from 'ramda'
import { data, zip, registry } from '@skele/core'
const memoize = registry.memoize
const { postWalk, root } = zip
const { flow, kindOf } = data
export function transformer(registry, elementZipper) {
const elementTransformer = memoize(kind =>
registry
.get(kind)
.reduce((f, g) => (x, context) => g(f(x, context), context), R.identity)
)
const transform = context => el => elementTransformer(kindOf(el))(el, context)
return (el, context = {}) =>
flow(
el,
elementZipper,
postWalk(transform(context)),
root
)
}