{"version":3,"file":"string.cjs","sources":["../../../src/matchers/string.js"],"sourcesContent":["import { getMatcherResult } from './utils.js';\nimport deepEqualCheck from 'deep-equal-check';\n\n/**\n * toMatch matcher follows below standards\n * Strings: Case-sensitive substring matching\n * RegExp: Uses RegExp.test()\n */\nexport function toMatch(received, expected) {\n  if (typeof received !== 'string') {\n    return getMatcherResult(false, 'toMatch', received, expected);\n  }\n  \n  if (expected instanceof RegExp) {\n    return getMatcherResult(expected.test(received), 'toMatch', received, expected);\n  } else {\n    return getMatcherResult(received.includes(String(expected)), 'toMatch', received, expected);\n  }\n}\n\n/**\n * toContain matcher follows below standards\n * Strings: Case-sensitive substring matching\n * Arrays: Object.is() for primitives, deep equality for objects\n * Objects: Exact deep equality (not partial matching)\n * Performance: Early termination for better performance\n * Edge Cases: Handles NaN, Symbol, and other special values\n */\nexport function toContain(received, expected) {\n  if (typeof received === 'string') {\n    const stringReceived = String(received);\n    const stringExpected = String(expected);\n    return getMatcherResult(stringReceived.includes(stringExpected), 'toContain', received, expected);\n  }\n  \n  if (Array.isArray(received)) {\n    // For primitives, null, undefined, NaN, Symbol - use Object.is()\n    if (expected === null || expected === undefined || \n        typeof expected !== 'object' || \n        typeof expected === 'number' && isNaN(expected) ||\n        typeof expected === 'symbol') {\n      for (let i = 0; i < received.length; i++) {\n        if (Object.is(received[i], expected)) {\n          return getMatcherResult(true, 'toContain', received, expected);\n        }\n      }\n      return getMatcherResult(false, 'toContain', received, expected);\n    }\n    \n    // For objects (including arrays) - use deep equality\n    if (typeof expected === 'object') {\n      for (let i = 0; i < received.length; i++) {\n        if (deepEqualCheck(received[i], expected)) {\n          return getMatcherResult(true, 'toContain', received, expected);\n        }\n      }\n      return getMatcherResult(false, 'toContain', received, expected);\n    }\n  }\n  \n  if (received && typeof received[Symbol.iterator] === 'function') {\n    for (const item of received) {\n      // For primitives, null, undefined, NaN, Symbol - use Object.is()\n      if (expected === null || expected === undefined || \n          typeof expected !== 'object' || \n          typeof expected === 'number' && isNaN(expected) ||\n          typeof expected === 'symbol') {\n        if (Object.is(item, expected)) {\n          return getMatcherResult(true, 'toContain', received, expected);\n        }\n      } else if (typeof expected === 'object') {\n        if (deepEqualCheck(item, expected)) {\n          return getMatcherResult(true, 'toContain', received, expected);\n        }\n      }\n    }\n    return getMatcherResult(false, 'toContain', received, expected);\n  }\n\n  return getMatcherResult(false, 'toContain', received, expected);\n}\n"],"names":["getMatcherResult"],"mappings":"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"}