UNPKG

playwright-advanced-ml-healer

Version:

Advanced AI-powered self-healing selectors for Playwright with 19+ healing types, neural networks, machine learning models, and Global DOM Learning ML Model

118 lines 3.82 kB
"use strict"; /** * Utility functions for Advanced ML Healing System */ Object.defineProperty(exports, "__esModule", { value: true }); exports.calculateStringSimilarity = calculateStringSimilarity; exports.calculateLevenshteinDistance = calculateLevenshteinDistance; exports.calculateCosineSimilarity = calculateCosineSimilarity; exports.areAnagrams = areAnagrams; exports.normalizeString = normalizeString; exports.extractCommonPatterns = extractCommonPatterns; /** * Calculate string similarity using various algorithms */ function calculateStringSimilarity(str1, str2) { if (str1 === str2) return 1.0; if (str1.length === 0 || str2.length === 0) return 0.0; const distance = calculateLevenshteinDistance(str1, str2); const maxLength = Math.max(str1.length, str2.length); return 1 - (distance / maxLength); } /** * Calculate Levenshtein distance between two strings */ function calculateLevenshteinDistance(str1, str2) { const matrix = Array(str2.length + 1).fill(null).map(() => Array(str1.length + 1).fill(null)); for (let i = 0; i <= str1.length; i++) { matrix[0][i] = i; } for (let j = 0; j <= str2.length; j++) { matrix[j][0] = j; } for (let j = 1; j <= str2.length; j++) { for (let i = 1; i <= str1.length; i++) { const indicator = str1[i - 1] === str2[j - 1] ? 0 : 1; matrix[j][i] = Math.min(matrix[j][i - 1] + 1, // deletion matrix[j - 1][i] + 1, // insertion matrix[j - 1][i - 1] + indicator // substitution ); } } return matrix[str2.length][str1.length]; } /** * Calculate cosine similarity between two strings */ function calculateCosineSimilarity(str1, str2) { const words1 = str1.toLowerCase().split(/\s+/); const words2 = str2.toLowerCase().split(/\s+/); const wordCount1 = new Map(); const wordCount2 = new Map(); words1.forEach(word => { wordCount1.set(word, (wordCount1.get(word) || 0) + 1); }); words2.forEach(word => { wordCount2.set(word, (wordCount2.get(word) || 0) + 1); }); const allWords = new Set([...wordCount1.keys(), ...wordCount2.keys()]); let dotProduct = 0; let norm1 = 0; let norm2 = 0; allWords.forEach(word => { const count1 = wordCount1.get(word) || 0; const count2 = wordCount2.get(word) || 0; dotProduct += count1 * count2; norm1 += count1 * count1; norm2 += count2 * count2; }); if (norm1 === 0 || norm2 === 0) return 0; return dotProduct / (Math.sqrt(norm1) * Math.sqrt(norm2)); } /** * Check if two strings are anagrams */ function areAnagrams(str1, str2) { if (str1.length !== str2.length) return false; const charCount = new Map(); for (const char of str1.toLowerCase()) { charCount.set(char, (charCount.get(char) || 0) + 1); } for (const char of str2.toLowerCase()) { const count = charCount.get(char); if (!count) return false; charCount.set(char, count - 1); } return true; } /** * Normalize string for comparison */ function normalizeString(str) { return str .toLowerCase() .replace(/[^a-z0-9]/g, '') .trim(); } /** * Extract common patterns from strings */ function extractCommonPatterns(str1, str2) { const patterns = []; const minLength = 3; for (let len = minLength; len <= Math.min(str1.length, str2.length); len++) { for (let i = 0; i <= str1.length - len; i++) { const pattern = str1.substring(i, i + len); if (str2.includes(pattern)) { patterns.push(pattern); } } } return [...new Set(patterns)].sort((a, b) => b.length - a.length); } //# sourceMappingURL=utils.js.map