@girders-elements/core
Version:
Girders Elements is an architectural framework that assists with building data-driven apps with React or React Native.
22 lines (16 loc) • 596 B
JavaScript
import R from 'ramda'
import { kindOf } from '../data/element'
import { memoize } from '../impl/util'
import { postWalk, root, value } from '../zip'
import { flow } from '../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, value)
}