UNPKG

@girders-elements/core

Version:

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

200 lines (24 loc) 3.85 kB
'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.childPositions=exports.asList=exports.childrenProperty=exports.isExactlyOfKind=exports.isOfKind=undefined;exports. isElementRef=isElementRef;exports. kindOf=kindOf;exports. isElement=isElement;exports. ancestorKinds=ancestorKinds;exports. canonical=canonical;exports. pathsToChildElements=pathsToChildElements;var _ramda=require('ramda');var _invariant=require('invariant');var _invariant2=_interopRequireDefault(_invariant);var _immutable=require('immutable');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var isOfKind=exports.isOfKind=(0,_ramda.curry)(function isOfKind(kind,element){if(element==null){return false;}var normalized=canonical(kind);var elementKindNormalized=canonical(element.get('kind'));(0,_invariant2.default)(normalized!=null,'You must provide a valid element kind');(0,_invariant2.default)(elementKindNormalized,'You must provide an element that has a valid kind');return(0,_immutable.is)(elementKindNormalized.take(normalized.count()),normalized);});function isElementRef(obj){var isString=function isString(o){return typeof o==='string';};if(isString(obj))return true;if(Array.isArray(obj)&&((0,_ramda.all)(isString)(obj)||obj.length===0))return true;if(obj instanceof _immutable.List&&(obj.every(isString)||obj.isEmpty()))return true;return false;}var isExactlyOfKind=exports.isExactlyOfKind=(0,_ramda.curry)(function isExactlyOfKind(kind,element){if(element==null||kindOf(element)==null){return false;}var normalized=normalize(kind);var elementKindNormalized=normalize(element.get('kind'));return(0,_immutable.is)(elementKindNormalized,normalized);});function kindOf(element){var kind=element.get('kind');if(kind!=null){return canonical(kind);}return null;}function isElement(obj){return _immutable.Iterable.isIterable(obj)&&kindOf(obj)!=null;}function ancestorKinds(ref){var _marked=regeneratorRuntime.mark(subKinds);var cRef=canonical(ref);(0,_invariant2.default)(cRef!=null,'you must provide a valid element reference');function subKinds(){var current;return regeneratorRuntime.wrap(function subKinds$(_context){while(1){switch(_context.prev=_context.next){case 0:current=(0,_immutable.List)(cRef);case 1:if(!(current!=null&&!current.isEmpty())){_context.next=7;break;}_context.next=4;return current;case 4:current=current.butLast();_context.next=1;break;case 7:case'end':return _context.stop();}}},_marked,this);}if(Array.isArray(ref)&&ref.length===0){return(0,_immutable.List)();}return(0,_immutable.Seq)(subKinds());}function canonical(ref){return normalize(ref);}function normalize(kind){if(typeof kind==='string'){return normalize([kind]);}if(Array.isArray(kind)){return(0,_immutable.List)(kind);}if(_immutable.List.isList(kind)){return kind;}if(_immutable.Seq.isSeq(kind)){return kind.toList();}return null;}function pathsToChildElements(element){ return childPositions(element).flatMap(function(childrenPath){ var children=element.get(childrenPath); if(_immutable.Iterable.isIndexed(children)){ return children.map(function(_,i){return _immutable.List.of(childrenPath,i);}); }else if(_immutable.Iterable.isAssociative(children)){ return _immutable.List.of(_immutable.List.of(childrenPath)); }else{ return(0,_immutable.List)(); } }); } var childrenProperty=exports.childrenProperty='@@girders-elements/children'; var asList=exports.asList=function asList(v){return( _immutable.Iterable.isIndexed(v)? v: Array.isArray(v)?(0,_immutable.List)(v):v!=null?_immutable.List.of(v):(0,_immutable.List)());}; var childPositions=exports.childPositions=function childPositions(element){return asList(element.get(childrenProperty));};