UNPKG

@skele/classic

Version:

Skele is an architectural framework that assists with building data-driven apps with React or React Native.

1 lines 2.92 kB
'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.enricher=enricher;var R=_interopRequireWildcard(require("ramda"));var _core=require("@skele/core");function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj;}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key)){var desc=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):{};if(desc.get||desc.set){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}}newObj.default=obj;return newObj;}}var memoize=_core.registry.memoize;function enricher(config){var registry=config.registry,elementZipper=config.elementZipper;if(registry.isEmpty())return function _callee(el){var context,_args=arguments;return regeneratorRuntime.async(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:context=_args.length>1&&_args[1]!==undefined?_args[1]:{};return _context.abrupt("return",el);case 2:case"end":return _context.stop();}}},null,this);};var elementEnricher=memoize(function(kind){var enrichers=registry.get(kind);return enrichers.isEmpty()?null:enrichers.reduce(function(f,g){return function(x,context){return Promise.resolve(f(x,context)).then(function(x){return g(x,context);});};},function(x){return Promise.resolve(x);});});function postWalk(loc,context){var children,changedChildren,elEnricher,changedValue;return regeneratorRuntime.async(function postWalk$(_context2){while(1){switch(_context2.prev=_context2.next){case 0:if(!_core.zip.isBranch(loc)){_context2.next=7;break;}children=_core.zip.children(loc);if(!(children!=null)){_context2.next=7;break;}_context2.next=5;return regeneratorRuntime.awrap(Promise.all(_core.data.flow(children,R.map(R.pipe(elementZipper,function(loc){return postWalk(loc,context);})))));case 5:changedChildren=_context2.sent;loc=_core.zip.replace(_core.zip.makeNode(loc,_core.zip.node(loc),R.map(_core.zip.node,changedChildren)),loc);case 7:elEnricher=_core.data.flow(loc,_core.zip.node,_core.data.kindOf,elementEnricher);if(!(elEnricher!=null)){_context2.next=13;break;}_context2.next=11;return regeneratorRuntime.awrap(elEnricher(_core.zip.node(loc),context));case 11:changedValue=_context2.sent;loc=_core.zip.replace(changedValue,loc);case 13:return _context2.abrupt("return",loc);case 14:case"end":return _context2.stop();}}},null,this);}return function _callee2(el){var context,_args3=arguments;return regeneratorRuntime.async(function _callee2$(_context3){while(1){switch(_context3.prev=_context3.next){case 0:context=_args3.length>1&&_args3[1]!==undefined?_args3[1]:{};_context3.t0=_core.zip;_context3.next=4;return regeneratorRuntime.awrap(postWalk(elementZipper(el),context));case 4:_context3.t1=_context3.sent;return _context3.abrupt("return",_context3.t0.node.call(_context3.t0,_context3.t1));case 6:case"end":return _context3.stop();}}},null,this);};}