@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
JavaScript
;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));};