UNPKG

rn-pendo-sdk

Version:

Pendo Mobile React Native SDK

1 lines 21.2 kB
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.TagFinder=exports.FiberNodeType=void 0;var _toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _common=require("./common");var _pendoLogger=require("./pendoLogger");var _pendoTypes=require("./pendoTypes");var _traverseOptions=require("./traverseOptions");var _TagFinder;var FiberNodeType=exports.FiberNodeType=function(FiberNodeType){FiberNodeType["RCTView"]="RCTView";FiberNodeType["RNSScreen"]="RNSScreen";FiberNodeType["RNSScreenContainer"]="RNSScreenContainer";FiberNodeType["ExpoRouterContainer"]="NavigationContent";return FiberNodeType;}({});var TagFinder=exports.TagFinder=function(){function TagFinder(){(0,_classCallCheck2.default)(this,TagFinder);}return(0,_createClass2.default)(TagFinder,null,[{key:"nativeTag",value:function nativeTag(node){var takeRCTView=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;if(takeRCTView){var nodeType=TagFinder.getNodeTypeName(node);if(nodeType===FiberNodeType.RCTView){return TagFinder.nativeTagInternal(node);}else{return null;}}return TagFinder.nativeTagInternal(node);}},{key:"nativeTagInternal",value:function nativeTagInternal(node){var tag=null;if(node&&node.stateNode){tag=node.stateNode._nativeTag||node.stateNode.nativeTag;if(!tag&&node.stateNode.canonical){tag=node.stateNode.canonical._nativeTag||node.stateNode.canonical.nativeTag;}}return tag;}},{key:"isRCTView",value:function isRCTView(node){return TagFinder.getNodeTypeName(node)===FiberNodeType.RCTView;}},{key:"isRNSScreen",value:function isRNSScreen(node){return TagFinder.getNodeTypeName(node)===FiberNodeType.RNSScreen;}},{key:"isScreenContainer",value:function isScreenContainer(node,options){var nodeTypeName=TagFinder.getNodeTypeName(node);if(options.integrationType===_pendoTypes.IntegrationType.expoRouter){return TagFinder.isExpoScreenContainer(nodeTypeName);}else if(options.integrationType===_pendoTypes.IntegrationType.reactNavigation){return TagFinder.isRNSScreenContainer(nodeTypeName);}return false;}},{key:"isRNSScreenContainer",value:function isRNSScreenContainer(nodeTypeName){return nodeTypeName===FiberNodeType.RNSScreenContainer;}},{key:"isExpoScreenContainer",value:function isExpoScreenContainer(nodeTypeName){return nodeTypeName===FiberNodeType.ExpoRouterContainer;}},{key:"highestTagInStateNodeChildren",value:function highestTagInStateNodeChildren(node){var nodeTag=TagFinder.nativeTag(node);if(node&&node.stateNode&&node.stateNode._children&&node.stateNode._children.length!==0){var maxTag=Math.max.apply(Math,(0,_toConsumableArray2.default)(node.stateNode._children.map(function(o){return o?o._nativeTag||o.nativeTag:0;})).concat([0]));return maxTag===0?nodeTag:maxTag;}return nodeTag;}},{key:"findNativeNode",value:function findNativeNode(node,direction){var takeRCTView=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return TagFinder.closestNativeNode(node,direction,takeRCTView);}},{key:"closestNativeNode",value:function closestNativeNode(node,direction){var takeRCTView=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;if(direction==null){_pendoLogger.Logger.warn(`Direction of traversal must be specified ${new Error().stack}`);return node;}else if(direction===_traverseOptions.TraverseDirection.Child){return TagFinder.closestNativeNodeChildAndSibling(node,takeRCTView);}else{while(node){var tag=TagFinder.nativeTag(node,takeRCTView);if(tag){return node;}if(direction===_traverseOptions.TraverseDirection.Parent){node=node.return;}else if(direction===_traverseOptions.TraverseDirection.Sibling){node=node.sibling;}}return null;}}},{key:"closestNativeNodeTag",value:function closestNativeNodeTag(node,direction){var takeRCTView=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var closestNativeNode=TagFinder.findNativeNode(node,direction,takeRCTView);if(closestNativeNode){return TagFinder.nativeTag(closestNativeNode,takeRCTView);}return null;}},{key:"closestNativeNodeChildAndSibling",value:function closestNativeNodeChildAndSibling(node){var takeRCTView=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var nodesStack=[];nodesStack.push(node);while(nodesStack.length!==0){var currentNode=nodesStack.pop();if(currentNode){var tag=TagFinder.nativeTag(currentNode,takeRCTView);if(tag){return currentNode;}if(currentNode.child){nodesStack.push(currentNode.child);}if(currentNode.sibling){nodesStack.push(currentNode.sibling);}}}return null;}},{key:"isNodeClickable",value:function isNodeClickable(node,clickableElementsNativeIDsRegex){var _node$stateNode,_node$stateNode$props,_node$child,_node$child$memoizedP,_node$memoizedProps,_node$pendingProps;if(clickableElementsNativeIDsRegex&&!TagFinder.clickableElementsNativeIDsRegex){TagFinder.clickableElementsNativeIDsRegex=new RegExp(clickableElementsNativeIDsRegex);}if(node!=null&&(_node$stateNode=node.stateNode)!=null&&(_node$stateNode$props=_node$stateNode.props)!=null&&_node$stateNode$props.onPress){return true;}else if(node!=null&&node.stateNode&&node!=null&&(_node$child=node.child)!=null&&(_node$child$memoizedP=_node$child.memoizedProps)!=null&&_node$child$memoizedP.onPress){return true;}else if(node!=null&&(_node$memoizedProps=node.memoizedProps)!=null&&_node$memoizedProps.onClick){return true;}else if(TagFinder.isTouchableElement(node)){return true;}else if(TagFinder.clickableElementsNativeIDsRegex&&node!=null&&(_node$pendingProps=node.pendingProps)!=null&&_node$pendingProps.nativeID){return TagFinder.clickableElementsNativeIDsRegex.test(node.pendingProps.nativeID);}return false;}},{key:"findDrawerNativeTag",value:function findDrawerNativeTag(node,direction){var takeRCTView=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return TagFinder.closestNativeNodeTag(node,direction,takeRCTView);}},{key:"isDrawerRelatedNode",value:function isDrawerRelatedNode(node){var drawerBaseNameCandidates=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];if(!TagFinder.drawerCandidateNamesRegex){TagFinder.drawerCandidateNamesRegex=new RegExp('('+drawerBaseNameCandidates.join('|')+')');}var nodeTypeName=TagFinder.getNodeTypeName(node);return nodeTypeName!==null&&TagFinder.drawerCandidateNamesRegex.test(nodeTypeName.toLowerCase());}},{key:"isMaterialTabBarExists",value:function isMaterialTabBarExists(node,tabBarWrapperView){var nodeTypeName=TagFinder.getNodeTypeName(node);if(nodeTypeName&&nodeTypeName.toLowerCase()===tabBarWrapperView){if(node.pendingProps&&node.pendingProps.navigation&&node.pendingProps.navigation.isFocused){return node.pendingProps.navigation.isFocused();}}return false;}},{key:"isTabBarNavigator",value:function isTabBarNavigator(node){var tabBarBaseNameCandidates=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];if(!TagFinder.tabBarCandidateNamesRegex){TagFinder.tabBarCandidateNamesRegex=new RegExp('('+tabBarBaseNameCandidates.join('|')+')');}var nodeTypeName=TagFinder.getNodeTypeName(node);var isTabBarMatch=nodeTypeName!==null&&TagFinder.tabBarCandidateNamesRegex.test(nodeTypeName.toLowerCase());if(!isTabBarMatch){return false;}var isTabBarVisible=true;if(node.pendingProps&&node.pendingProps.navigation&&node.pendingProps.navigation.isFocused){isTabBarVisible=node.pendingProps.navigation.isFocused();}return isTabBarMatch&&isTabBarVisible;}},{key:"isMaterialBottomTabNavigator",value:function isMaterialBottomTabNavigator(node){var materialBottomTabBarNameCandidates=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];if(!TagFinder.materialBottomTabBarCandidateNamesRegex){TagFinder.materialBottomTabBarCandidateNamesRegex=new RegExp('('+materialBottomTabBarNameCandidates.join('|')+')');}var nodeTypeName=TagFinder.getNodeTypeName(node);return nodeTypeName!==null&&TagFinder.materialBottomTabBarCandidateNamesRegex.test(nodeTypeName.toLowerCase());}},{key:"findBottomBarNativeNode",value:function findBottomBarNativeNode(node,direction){var takeRCTView=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return TagFinder.findNativeNode(node,direction,takeRCTView);}},{key:"isBottomTabBar",value:function isBottomTabBar(node){var bottomBarBaseNameCandidates=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];if(!TagFinder.bottomTabCandidateNamesRegex){TagFinder.bottomTabCandidateNamesRegex=new RegExp('('+bottomBarBaseNameCandidates.join('|')+')');}var nodeTypeName=TagFinder.getNodeTypeName(node);var isBottomBarMatch=nodeTypeName!==null&&TagFinder.bottomTabCandidateNamesRegex.test(nodeTypeName.toLowerCase());if(!isBottomBarMatch){return false;}var isBottomBarVisible=true;if(node.pendingProps&&node.pendingProps.navigation&&node.pendingProps.navigation.isFocused){isBottomBarVisible=node.pendingProps.navigation.isFocused();}return isBottomBarVisible;}},{key:"isNavigationBar",value:function isNavigationBar(node){var navigationBarBaseNameCandidates=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];if(!TagFinder.navigationBarCandidateNamesRegex){TagFinder.navigationBarCandidateNamesRegex=new RegExp('('+navigationBarBaseNameCandidates.join('|')+')');}var nodeTypeName=TagFinder.getNodeTypeName(node);var isNavigationBarMatch=nodeTypeName!==null&&TagFinder.navigationBarCandidateNamesRegex.test(nodeTypeName.toLowerCase());if(!isNavigationBarMatch){return false;}var isNavVisible=true;if(node.pendingProps&&node.pendingProps.navigation&&node.pendingProps.navigation.isFocused){isNavVisible=node.pendingProps.navigation.isFocused();}return isNavigationBarMatch&&isNavVisible;}},{key:"isReactModal",value:function isReactModal(node){var _node$child$stateNode,_node$child$stateNode2,_ref,_node$child$stateNode3,_node$child$stateNode4,_node$stateNode2,_node$stateNode2$prop;var modalBaseNameCandidates=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];if(!TagFinder.modalCandidateNamesRegex){TagFinder.modalCandidateNamesRegex=new RegExp('('+modalBaseNameCandidates.join('|')+')');}var nodeTypeName=TagFinder.getNodeTypeName(node);var isModalMatch=nodeTypeName!==null&&TagFinder.modalCandidateNamesRegex.test(nodeTypeName.toLowerCase());if(!isModalMatch){return false;}var modalType=(_node$child$stateNode=node.child.stateNode)==null?void 0:(_node$child$stateNode2=_node$child$stateNode.props)==null?void 0:_node$child$stateNode2.modalType;_pendoLogger.Logger.debug(`isReactModal ${nodeTypeName} modalType: ${TagFinder.getModalTypeName(modalType)}`);if(modalType!==_pendoTypes.ModalType.ReactModal){return false;}var isModalVisible=(_ref=((_node$child$stateNode3=node.child.stateNode)==null?void 0:(_node$child$stateNode4=_node$child$stateNode3.props)==null?void 0:_node$child$stateNode4.visible)||((_node$stateNode2=node.stateNode)==null?void 0:(_node$stateNode2$prop=_node$stateNode2.props)==null?void 0:_node$stateNode2$prop.visible))!=null?_ref:false;if(isModalVisible){_pendoLogger.Logger.debug(`isReactModal ${nodeTypeName} visible`);}return isModalVisible;}},{key:"isGorhomModal",value:function isGorhomModal(node){var _node$child$memoizedP2,_node$stateNode$pndSt,_node$stateNode3,_node$stateNode3$pndS,_node$stateNode3$pndS2;var bottomSheetModalCandidateNamesRegex=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];if(!TagFinder.bottomSheetModalCandidateNamesRegex){TagFinder.bottomSheetModalCandidateNamesRegex=new RegExp('('+bottomSheetModalCandidateNamesRegex.join('|')+')');}var nodeTypeName=TagFinder.getNodeTypeName(node);var isGorhamBottomSheetModalMatch=nodeTypeName!==null&&TagFinder.bottomSheetModalCandidateNamesRegex.test(nodeTypeName.toLowerCase());if(!isGorhamBottomSheetModalMatch){return false;}var modalType=(_node$child$memoizedP2=node.child.memoizedProps)==null?void 0:_node$child$memoizedP2.modalType;_pendoLogger.Logger.debug(`isGorhomModal ${nodeTypeName} modalType: ${TagFinder.getModalTypeName(modalType)}`);if(modalType!==_pendoTypes.ModalType.GorhomModal){return false;}var isModalVisible=(_node$stateNode$pndSt=(_node$stateNode3=node.stateNode)==null?void 0:(_node$stateNode3$pndS=_node$stateNode3.pndState)==null?void 0:(_node$stateNode3$pndS2=_node$stateNode3$pndS.current)==null?void 0:_node$stateNode3$pndS2.isVisible)!=null?_node$stateNode$pndSt:false;if(isModalVisible){_pendoLogger.Logger.debug(`Gorham ${nodeTypeName} visible`);}return isModalVisible;}},{key:"isBottomSheet",value:function isBottomSheet(node){var bottomSheetBaseNameCandidates=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];if(!TagFinder.bottomSheetCandidateNamesRegex){TagFinder.bottomSheetCandidateNamesRegex=new RegExp('('+bottomSheetBaseNameCandidates.join('|')+')');}var nodeTypeName=TagFinder.getNodeTypeName(node);var isBottomSheetMatch=nodeTypeName!==null&&TagFinder.bottomSheetCandidateNamesRegex.test(nodeTypeName.toLowerCase());if(!isBottomSheetMatch){return false;}var isBottomSheetVisible=true;if(node.pendingProps&&node.pendingProps.navigation&&node.pendingProps.navigation.isFocused){isBottomSheetVisible=node.pendingProps.navigation.isFocused();}if(isBottomSheetVisible){_pendoLogger.Logger.debug(`bottomSheet ${nodeTypeName} visible`);}return isBottomSheetVisible;}},{key:"getNodeTypeName",value:function getNodeTypeName(node){var elementTypeName=null;if(node!=null&&node.type){if(typeof node.type==='string'){elementTypeName=node.type;}else{elementTypeName=node.type.name;}}if(elementTypeName==null&&node!=null&&node.elementType){elementTypeName=node.elementType.name;}if(elementTypeName===undefined){elementTypeName=null;}return elementTypeName;}},{key:"getModalType",value:function getModalType(node,options){if(TagFinder.isGorhomModal(node,options.gorhomModalNameCandidates)){_pendoLogger.Logger.debug('Pendo - Gorhom Modal detected');return _pendoTypes.ModalType.GorhomModal;}else if(TagFinder.isReactModal(node,options.reactModalBaseNameCandidates)){_pendoLogger.Logger.debug('Pendo - React Modal detected');return _pendoTypes.ModalType.ReactModal;}return _pendoTypes.ModalType.None;}},{key:"getModalTypeName",value:function getModalTypeName(modalType){switch(modalType){case _pendoTypes.ModalType.ReactModal:return'React';case _pendoTypes.ModalType.GorhomModal:return'Gorhom';case _pendoTypes.ModalType.None:return'Unknown';}}},{key:"isTouchableElement",value:function isTouchableElement(node){if(node==null){return false;}var elementTypeName=TagFinder.getNodeTypeName(node);return elementTypeName==='TouchableOpacity'||elementTypeName==='Touchable';}},{key:"fiberNodeFromComponent",value:function fiberNodeFromComponent(component){if(component){return component._reactInternalFiber||component._reactInternals;}return null;}},{key:"findAndAddRootTags",value:function findAndAddRootTags(node,nativeParams,options){var pushAsFirstRootTag=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;var closestNode=TagFinder.closestNativeNode(node,options.regularTraverseDirection);var rootTag=TagFinder.nativeTag(closestNode);if(_common.Utils.isAndroid()&&closestNode){var additionalRootTag=TagFinder.closestNativeNodeTag(closestNode.child,options.regularTraverseDirection);if(additionalRootTag){_common.Utils.addRootTag(nativeParams.rootTags,additionalRootTag,'Root Tag discovered: ',pushAsFirstRootTag);}}if(rootTag){_common.Utils.addRootTag(nativeParams.rootTags,rootTag,'Root Tag discovered: ',pushAsFirstRootTag);}}},{key:"findScreenContainerRootTag",value:function findScreenContainerRootTag(rootFiberNode,nativeParams,options){var nodesStack=[];var errorMessage='findScreenContainerRootTag - screenContainer tag not found.';nodesStack.push(rootFiberNode);while(nodesStack.length!==0){var node=nodesStack.pop();if(!node){continue;}if(node.child){nodesStack.push(node.child);}if(node.sibling){nodesStack.push(node.sibling);}if(TagFinder.isScreenContainer(node,options)){TagFinder.findAndAddRootTags(node,nativeParams,options);if(nativeParams.rootTags.length>0){return;}}}nativeParams.error=errorMessage;}},{key:"findClosestNativeNodeTagsForLogger",value:function findClosestNativeNodeTagsForLogger(node,nodeTypeName,componentName){var takeRCTView=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;var childTag=null;var parentTag=null;if(node&&nodeTypeName&&componentName){parentTag=TagFinder.closestNativeNodeTag(node,_traverseOptions.TraverseDirection.Parent,takeRCTView);childTag=TagFinder.closestNativeNodeTag(node,_traverseOptions.TraverseDirection.Child,takeRCTView);}_pendoLogger.Logger.debug('Candidates for '+componentName+'Node: '+nodeTypeName+', Parent: '+parentTag+', Child: '+childTag);}},{key:"LogFiberNode",value:function LogFiberNode(node,options){if(_pendoLogger.Logger.isDebugEnabled()){var _node$type,_node$type$name;var nodeTypeName=node==null?void 0:(_node$type=node.type)==null?void 0:(_node$type$name=_node$type.name)==null?void 0:_node$type$name.toLowerCase();if(nodeTypeName){if(options.isDrawerVisible&&nodeTypeName.startsWith('drawer')){TagFinder.findClosestNativeNodeTagsForLogger(node,nodeTypeName,'Drawer',options.drawerTakeRCTView);}else if(nodeTypeName.includes('header')||nodeTypeName.startsWith('top')||nodeTypeName.includes('navigation')){TagFinder.findClosestNativeNodeTagsForLogger(node,nodeTypeName,'Navigation Bar',options.navigationBarTakeRCTView);}else if(nodeTypeName.includes('bottom')&&!nodeTypeName.includes('bottomsheet')){TagFinder.findClosestNativeNodeTagsForLogger(node,nodeTypeName,'Bottom Tab',options.materialBottomTabTakeRCTView);}else if(nodeTypeName.includes('tabbar')){TagFinder.findClosestNativeNodeTagsForLogger(node,nodeTypeName,'Tab Bar',options.tabBarTakeRCTView);}else if(nodeTypeName.includes('tab')){TagFinder.findClosestNativeNodeTagsForLogger(node,nodeTypeName,'Tab Node',options.navigationBarTakeRCTView);}else if(nodeTypeName.includes('modal')){TagFinder.findClosestNativeNodeTagsForLogger(node,nodeTypeName,'Modal',options.gorhomModalTakeRCTView);}else if(nodeTypeName.includes('bottomsheet')){TagFinder.findClosestNativeNodeTagsForLogger(node,nodeTypeName,'Bottom Sheet',options.bottomSheetTakeRCTView);}}}}}]);}();_TagFinder=TagFinder;TagFinder.isFabricEnabled=_common.Utils.isFabricEnabled();TagFinder.clickableElementsNativeIDsRegex=null;TagFinder.drawerCandidateNamesRegex=null;TagFinder.bottomTabCandidateNamesRegex=null;TagFinder.navigationBarCandidateNamesRegex=null;TagFinder.tabBarCandidateNamesRegex=null;TagFinder.materialBottomTabBarCandidateNamesRegex=null;TagFinder.bottomSheetCandidateNamesRegex=null;TagFinder.bottomSheetModalCandidateNamesRegex=null;TagFinder.modalCandidateNamesRegex=null;TagFinder.traverseComponentToFindClickableElements=function(node,options){var _set=new Set();var _nativeNodes=new Set();if(!node){return _set;}_set.add(node);while(_set.size!==0){var _node=_set.values().next().value;if(!_node){continue;}_set.delete(_node);if(_node.child){_set.add(_node.child);}if(_node.sibling){_set.add(_node.sibling);}if(_TagFinder.isNodeClickable(_node,options.clickableElementsNativeIDsRegex)){var closestNode=_TagFinder.closestNativeNode(_node,options.regularTraverseDirection);if(closestNode){_nativeNodes.add(closestNode);}}}return _nativeNodes;};TagFinder.closestNativeNodeFabric=function(node,direction){var takeRCTView=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var iterationCount=3;var counter=1;if(direction==null){_pendoLogger.Logger.warn(`Direction of traversal must be specified ${new Error().stack}`);return node;}else if(direction===_traverseOptions.TraverseDirection.Child){return _TagFinder.closestNativeNodeChildAndSibling(node,takeRCTView);}else{while(node){var tag=_TagFinder.nativeTag(node,takeRCTView);if(tag){if(counter===iterationCount){return node;}node=node.return;counter+=1;}if(direction===_traverseOptions.TraverseDirection.Parent){node=node.return;}else if(direction===_traverseOptions.TraverseDirection.Sibling){node=node.sibling;}}return null;}};TagFinder.closestDrawerFabricTag=function(node){var takeRCTView=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var nodesStack=[];nodesStack.push(node);var siblingsCount=1;var counter=0;var isIterationDone=false;while(nodesStack.length!==0){var currentNode=nodesStack.pop();if(currentNode){var tag=_TagFinder.nativeTag(currentNode,takeRCTView);if(isIterationDone&&tag&&siblingsCount===counter){tag=_TagFinder.nativeTag(currentNode.child,takeRCTView);return tag;}if(tag&&siblingsCount===counter){isIterationDone=true;}if(currentNode.sibling){nodesStack.push(currentNode.sibling);counter+=1;}else if(currentNode.child){nodesStack.push(currentNode.child);}}}return null;};TagFinder.closestNativeNodeSiblingsChildFabric=function(node){var takeRCTView=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var nodesStack=[];nodesStack.push(node);var isSiblingVisited=false;while(nodesStack.length>0){var currentNode=nodesStack.pop();if(currentNode){var tag=_TagFinder.nativeTag(currentNode,takeRCTView);if(tag&&isSiblingVisited){return currentNode;}if(currentNode.sibling){nodesStack.push(currentNode.sibling);isSiblingVisited=true;}else if(currentNode.child){nodesStack.push(currentNode.child);}}}return null;};