@codeque/core
Version: 
Multiline code search for every language. Structural code search for JavaScript, TypeScript, HTML and CSS
66 lines (60 loc) • 2.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.createMatchWildcardsInPropValueNodesComparator = void 0;
var _matchStringOrIdentifierAliases = require("../../../searchStages/matchStringOrIdentifierAliases");
/*
 * Supports matching string or identifier wildcards in nodes that contains prop and value in the same node.
 * eg. TextAttribute in HTML which is { prop: 'propName', value: 'value', ...otherKeys }
 */
const createMatchWildcardsInPropValueNodesComparator = ({
  nodeType,
  keysWithWildcards,
  keysToTraverse
}) => ({
  queryNode,
  fileNode,
  searchSettings,
  matchContext
}, _, {
  fileKeysToTraverseForOtherMatches,
  log
}) => {
  if (queryNode?.type === nodeType && fileNode?.type === nodeType) {
    const {
      wildcardUtils
    } = searchSettings.parserSettings;
    const {
      caseInsensitive
    } = searchSettings;
    let levelMatch = true;
    keysWithWildcards.forEach(key => {
      const queryNodeStringContent = queryNode[key];
      const fileNodeStringContent = fileNode[key];
      const wildcardsMeta = wildcardUtils.getStringWildcardsFromString(queryNodeStringContent);
      if (wildcardsMeta.length > 0) {
        levelMatch = levelMatch && (0, _matchStringOrIdentifierAliases.matchStringOrIdentifierAliases)({
          queryValue: queryNodeStringContent,
          fileValue: fileNodeStringContent,
          wildcardsMeta,
          matchContext,
          wildcardUtils,
          caseInsensitive
        });
      } else {
        /**
         * If there are no wildcards in given prop, compare prop values directly
         */
        levelMatch = levelMatch && queryNodeStringContent === fileNodeStringContent;
      }
    }); // We always want to return here, otherwise generic string wildcard matching would take over and match incorrectly
    return {
      levelMatch,
      queryKeysToTraverseForValidatingMatch: keysToTraverse,
      fileKeysToTraverseForValidatingMatch: keysToTraverse,
      fileKeysToTraverseForOtherMatches
    };
  }
};
exports.createMatchWildcardsInPropValueNodesComparator = createMatchWildcardsInPropValueNodesComparator;