{"_id":"@cerios/playwright-expectly-fuzzy","_rev":"6-56e205ba3e5b26f7f49be2daf119dc5f","name":"@cerios/playwright-expectly-fuzzy","dist-tags":{"latest":"1.0.1"},"versions":{"0.0.0":{"name":"@cerios/playwright-expectly-fuzzy","version":"0.0.0","keywords":["ai-testing","assertions","cerios","e2e","end-to-end","expect","fuzzball","fuzzy","locator","matchers","playwright","qa","string-validation","test","test-automation","testing","typescript"],"author":{"name":"Patrick Schilder - Cerios"},"license":"MIT","_id":"@cerios/playwright-expectly-fuzzy@0.0.0","maintainers":[{"name":"patrickschilder","email":"patrick@djpasch.nl"},{"name":"vethman","email":"r.veth87@outlook.com"}],"homepage":"https://github.com/CeriosTesting/playwright-expectly#readme","bugs":{"url":"https://github.com/CeriosTesting/playwright-expectly/issues"},"dist":{"shasum":"2d18d4a60c769a6c6c572b2d6a5b1e8e3d9e9a2a","tarball":"https://registry.npmjs.org/@cerios/playwright-expectly-fuzzy/-/playwright-expectly-fuzzy-0.0.0.tgz","fileCount":7,"integrity":"sha512-yPVJ4+Fff4mkgNAujrHYhkJMIMmU3p1atk8vzn1fF2rkhX53gbuphChX6aJGgAd8JvYEyyOHqg6MuRI4fDAA3Q==","signatures":[{"sig":"MEQCIF3lUp5VDbayZISgtk3BOvpFCQ6+Z/Qy2MU/ij6BgIsrAiBddPJqXdfO6ijTQrMzXtq+3ggNcJ3Y1vx8Z4VGytgnSA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":784838},"main":"./dist/index.cjs","type":"commonjs","types":"./dist/index.d.cts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"1dbbb857fbf144391bd6e747717ea2f43edcbe27","scripts":{"test":"playwright test","build":"tsdown"},"_npmUser":{"name":"patrickschilder","email":"patrick@djpasch.nl"},"repository":{"url":"git+https://github.com/CeriosTesting/playwright-expectly.git","type":"git","directory":"packages/playwright-expectly-fuzzy"},"_npmVersion":"11.16.0","description":"Fuzzy string matching matchers for Playwright using fuzzball. Ideal for validating AI-generated text where wording may vary.","directories":{},"sideEffects":false,"_nodeVersion":"26.3.0","dependencies":{"fuzzball":"^2.2.6","@cerios/playwright-expectly-core":"*"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.22.2","typescript":"^6.0.3","@types/node":"^25.9.3","@playwright/test":"^1.60.0"},"peerDependencies":{"@playwright/test":">=1.40.0"},"_npmOperationalInternal":{"tmp":"tmp/playwright-expectly-fuzzy_0.0.0_1781294991364_0.39805357986368906","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@cerios/playwright-expectly-fuzzy","version":"0.1.0","keywords":["ai-testing","assertions","cerios","e2e","end-to-end","expect","fuzzball","fuzzy","locator","matchers","playwright","qa","string-validation","test","test-automation","testing","typescript"],"author":{"name":"Patrick Schilder - Cerios"},"license":"MIT","_id":"@cerios/playwright-expectly-fuzzy@0.1.0","maintainers":[{"name":"patrickschilder","email":"patrick@djpasch.nl"},{"name":"vethman","email":"r.veth87@outlook.com"}],"homepage":"https://github.com/CeriosTesting/playwright-expectly#readme","bugs":{"url":"https://github.com/CeriosTesting/playwright-expectly/issues"},"dist":{"shasum":"cbff89b12f54b49fce2b450bcd24cc91b9d96950","tarball":"https://registry.npmjs.org/@cerios/playwright-expectly-fuzzy/-/playwright-expectly-fuzzy-0.1.0.tgz","fileCount":7,"integrity":"sha512-ytRlvxiKwnt1RV7edUePi4rCTe8kDIKn3g/l3qNI+uHkje7n1BWH7FHQ1LIYDa0CbSho5zdCkeTttLztAW2AqA==","signatures":[{"sig":"MEUCIH2k6M44Sb0hlZLPTbpE/r5PPori8g376biKWLfpY8inAiEAwMgo3RhiCNltdGrTeHM5aQhMr4QQypBe8wEMHgdfcYk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":784838},"main":"./dist/index.cjs","type":"commonjs","types":"./dist/index.d.cts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"cdb016645593581c3aa4ad3e133ef9c26c3809be","scripts":{"test":"playwright test","build":"tsdown"},"_npmUser":{"name":"patrickschilder","email":"patrick@djpasch.nl"},"repository":{"url":"git+https://github.com/CeriosTesting/playwright-expectly.git","type":"git","directory":"packages/playwright-expectly-fuzzy"},"_npmVersion":"11.16.0","description":"Fuzzy string matching matchers for Playwright using fuzzball. Ideal for validating AI-generated text where wording may vary.","directories":{},"sideEffects":false,"_nodeVersion":"26.3.0","dependencies":{"fuzzball":"^2.2.6","@cerios/playwright-expectly-core":"*"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.22.2","typescript":"^6.0.3","@types/node":"^25.9.3","@playwright/test":"^1.60.0"},"peerDependencies":{"@playwright/test":">=1.40.0"},"_npmOperationalInternal":{"tmp":"tmp/playwright-expectly-fuzzy_0.1.0_1781295934752_0.16120192246946385","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@cerios/playwright-expectly-fuzzy","version":"0.1.1","keywords":["ai-testing","assertions","cerios","e2e","end-to-end","expect","fuzzball","fuzzy","locator","matchers","playwright","qa","string-validation","test","test-automation","testing","typescript"],"author":{"name":"Patrick Schilder - Cerios"},"license":"MIT","_id":"@cerios/playwright-expectly-fuzzy@0.1.1","maintainers":[{"name":"patrickschilder","email":"patrick@djpasch.nl"},{"name":"vethman","email":"r.veth87@outlook.com"}],"homepage":"https://github.com/CeriosTesting/playwright-expectly#readme","bugs":{"url":"https://github.com/CeriosTesting/playwright-expectly/issues"},"dist":{"shasum":"8a314d29cf181558ce65839a2f4fd55f90d5bad2","tarball":"https://registry.npmjs.org/@cerios/playwright-expectly-fuzzy/-/playwright-expectly-fuzzy-0.1.1.tgz","fileCount":8,"integrity":"sha512-6XKWLJ2DMhyyZkfvwA5DgVOBee3IwoWODdzIsM2bD9wzrhtalDlk2xUXLRs3pX/FdyyiznG+YAytNI6yz4+82w==","signatures":[{"sig":"MEUCIQD86tSqHmdcmhWHkwButRshYk9yrV0EiKM2CcopoQ+RvAIgYn7p7trCQHZslrDaRtQY+q2hEi/kj4EgET5/Y2ZBf6Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":791840},"main":"./dist/index.cjs","type":"commonjs","types":"./dist/index.d.cts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"e5298b09a9a6fd14adab8d337cb7d69f53da2e8f","scripts":{"test":"playwright test","build":"tsdown"},"_npmUser":{"name":"patrickschilder","email":"patrick@djpasch.nl"},"repository":{"url":"git+https://github.com/CeriosTesting/playwright-expectly.git","type":"git","directory":"packages/playwright-expectly-fuzzy"},"_npmVersion":"11.16.0","description":"Fuzzy string matching matchers for Playwright using fuzzball. Ideal for validating AI-generated text where wording may vary.","directories":{},"sideEffects":false,"_nodeVersion":"26.3.0","dependencies":{"fuzzball":"^2.2.6","@cerios/playwright-expectly-core":"*"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.22.2","typescript":"^6.0.3","@types/node":"^25.9.3","@playwright/test":"^1.60.0"},"peerDependencies":{"@playwright/test":">=1.40.0"},"_npmOperationalInternal":{"tmp":"tmp/playwright-expectly-fuzzy_0.1.1_1781345373816_0.8425071931654093","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@cerios/playwright-expectly-fuzzy","version":"0.1.2","keywords":["ai-testing","assertions","cerios","e2e","end-to-end","expect","fuzzball","fuzzy","locator","matchers","playwright","qa","string-validation","test","test-automation","testing","typescript"],"author":{"name":"Patrick Schilder - Cerios"},"license":"MIT","_id":"@cerios/playwright-expectly-fuzzy@0.1.2","maintainers":[{"name":"patrickschilder","email":"patrick@djpasch.nl"},{"name":"vethman","email":"r.veth87@outlook.com"}],"homepage":"https://github.com/CeriosTesting/playwright-expectly#readme","bugs":{"url":"https://github.com/CeriosTesting/playwright-expectly/issues"},"dist":{"shasum":"b9a43892fce942843301853c614ea947677ecddf","tarball":"https://registry.npmjs.org/@cerios/playwright-expectly-fuzzy/-/playwright-expectly-fuzzy-0.1.2.tgz","fileCount":8,"integrity":"sha512-InXyq+mHp+SsEXApGcNQZLttC6zplC8P5Ibwe70GaVcBW+HqzPT/ywfFHLoIsVsKpQIIltYkOOhE7B84PIugcA==","signatures":[{"sig":"MEQCIE0GhvgV6HOZ9XzF+df+Eo7TYk6D7V1oubDc62uIueKAAiAPqzU7QV83ZtMD3PFl8OGNwgaaqp4gaDdHhfjra4bk7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cerios%2fplaywright-expectly-fuzzy@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":803599},"main":"./dist/index.cjs","type":"commonjs","types":"./dist/index.d.cts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"259cef51b61d99ec151e89ad0223c8de227753f7","scripts":{"test":"playwright test --config=../../playwright.config.ts --project=expectly-fuzzy","build":"tsdown"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec8b4312-2896-43a8-b46f-776f7f160941"}},"repository":{"url":"git+https://github.com/CeriosTesting/playwright-expectly.git","type":"git","directory":"packages/playwright-expectly-fuzzy"},"_npmVersion":"11.18.0","description":"Fuzzy string matching matchers for Playwright using fuzzball. Ideal for validating AI-generated text where wording may vary.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"fuzzball":"^2.2.6","@cerios/playwright-expectly-core":"*"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.22.3","typescript":"^6.0.3","@types/node":"^26.0.1","@playwright/test":"^1.61.1"},"peerDependencies":{"@playwright/test":">=1.40.0"},"_npmOperationalInternal":{"tmp":"tmp/playwright-expectly-fuzzy_0.1.2_1783054073669_0.22157107277984034","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@cerios/playwright-expectly-fuzzy","version":"1.0.0","keywords":["ai-testing","assertions","cerios","e2e","end-to-end","expect","fuzzball","fuzzy","locator","matchers","playwright","qa","string-validation","test","test-automation","testing","typescript"],"author":{"name":"Patrick Schilder - Cerios"},"license":"MIT","_id":"@cerios/playwright-expectly-fuzzy@1.0.0","maintainers":[{"name":"patrickschilder","email":"patrick@djpasch.nl"},{"name":"vethman","email":"r.veth87@outlook.com"}],"homepage":"https://github.com/CeriosTesting/playwright-expectly#readme","bugs":{"url":"https://github.com/CeriosTesting/playwright-expectly/issues"},"dist":{"shasum":"97f77016a21b4d44e4b1b9d7ea91e04abae50e86","tarball":"https://registry.npmjs.org/@cerios/playwright-expectly-fuzzy/-/playwright-expectly-fuzzy-1.0.0.tgz","fileCount":8,"integrity":"sha512-HvVQRgG216z3lFtYHBM+lQOl46IRTM4WHtyvumsis6oz5+AIVUNV/sOIWBQNasjkW2JKMdXvshmgdKDyV4J/oA==","signatures":[{"sig":"MEUCIHCb6uv01CvCD8jKPy2z7mEoS1JJ2eSDdBrWArhOKSsKAiEA2D1vn/3ngE7x01Yj0rtFeUklssVcz1JTkSXkWidcGjg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cerios%2fplaywright-expectly-fuzzy@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":809173},"main":"./dist/index.cjs","type":"commonjs","types":"./dist/index.d.cts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"621cf551dd12a19384e07419b427eb91d9d7181f","scripts":{"test":"playwright test --config=../../playwright.config.ts --project=expectly-fuzzy","build":"tsdown"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec8b4312-2896-43a8-b46f-776f7f160941"}},"repository":{"url":"git+https://github.com/CeriosTesting/playwright-expectly.git","type":"git","directory":"packages/playwright-expectly-fuzzy"},"_npmVersion":"12.0.1","description":"Fuzzy string matching matchers for Playwright using fuzzball. Ideal for validating AI-generated text where wording may vary.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"fuzzball":"^2.2.6","@cerios/playwright-expectly-core":"*"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.22.4","typescript":"^6.0.3","@types/node":"^26.1.1","@playwright/test":"^1.61.1"},"peerDependencies":{"@playwright/test":">=1.40.0"},"_npmOperationalInternal":{"tmp":"tmp/playwright-expectly-fuzzy_1.0.0_1784138120559_0.09535526998582333","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"_id":"@cerios/playwright-expectly-fuzzy@1.0.1","bugs":{"url":"https://github.com/CeriosTesting/playwright-expectly/issues"},"dist":{"shasum":"d74d7c5926664b84803497e26dd23871190cf1e1","tarball":"https://registry.npmjs.org/@cerios/playwright-expectly-fuzzy/-/playwright-expectly-fuzzy-1.0.1.tgz","fileCount":8,"integrity":"sha512-RWQZmzbeqBLS+HnS6s+dJubKnMa1BNvRum/woVyiT4uk6jiQHXZGbhKcVe1fUvRvvlgJp7reg6etEgf0pq3cAA==","signatures":[{"sig":"MEQCH06RTM9NXajhgzGQMsWxKkpx0evZuo7R9A17oCXW2RcCIQC32zhBpLDicEMH5IiuqYf31ZirsT6IGkNO+gnM6k05xw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDBPd1TbbnQVXYNDPPG9CLnYXg/xulX5Ekt3BN5bD+BrAIgW0DaJgGwr6GJ92rqGXl4kd77Ad/9h+42Egut0PTVCT0="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cerios%2fplaywright-expectly-fuzzy@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":867765},"main":"./dist/index.cjs","name":"@cerios/playwright-expectly-fuzzy","type":"commonjs","types":"./dist/index.d.cts","author":{"name":"Patrick Schilder - Cerios"},"module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"7c7426ab0dc99c6a2da64bd2df182a3f75c00395","license":"MIT","scripts":{"test":"playwright test --config=../../playwright.config.ts --project=expectly-fuzzy","build":"tsdown"},"version":"1.0.1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec8b4312-2896-43a8-b46f-776f7f160941"}},"homepage":"https://github.com/CeriosTesting/playwright-expectly#readme","keywords":["ai-testing","assertions","cerios","e2e","end-to-end","expect","fuzzball","fuzzy","locator","matchers","playwright","qa","string-validation","test","test-automation","testing","typescript"],"repository":{"url":"git+https://github.com/CeriosTesting/playwright-expectly.git","type":"git","directory":"packages/playwright-expectly-fuzzy"},"_npmVersion":"12.0.2","description":"Fuzzy string matching matchers for Playwright using fuzzball. Ideal for validating AI-generated text where wording may vary.","directories":{},"maintainers":[{"name":"patrickschilder","email":"patrick@djpasch.nl"},{"name":"vethman","email":"r.veth87@outlook.com"}],"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"fuzzball":"^2.2.6","@cerios/playwright-expectly-core":"*"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.23.0","typescript":"^7.0.2","@types/node":"^26.2.0","@playwright/test":"^1.63.0"},"peerDependencies":{"@playwright/test":">=1.40.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/playwright-expectly-fuzzy_1.0.1_1789497414301_0.39971297731671784"}}},"time":{"created":"2026-06-12T20:09:51.204Z","modified":"2026-09-15T18:36:54.851Z","0.0.0":"2026-06-12T20:09:51.563Z","0.1.0":"2026-06-12T20:25:34.945Z","0.1.1":"2026-06-13T10:09:33.944Z","0.1.2":"2026-07-03T04:47:53.825Z","1.0.0":"2026-07-15T17:55:20.693Z","1.0.1":"2026-09-15T18:36:54.401Z"},"bugs":{"url":"https://github.com/CeriosTesting/playwright-expectly/issues"},"author":{"name":"Patrick Schilder - Cerios"},"license":"MIT","homepage":"https://github.com/CeriosTesting/playwright-expectly#readme","keywords":["ai-testing","assertions","cerios","e2e","end-to-end","expect","fuzzball","fuzzy","locator","matchers","playwright","qa","string-validation","test","test-automation","testing","typescript"],"repository":{"url":"git+https://github.com/CeriosTesting/playwright-expectly.git","type":"git","directory":"packages/playwright-expectly-fuzzy"},"description":"Fuzzy string matching matchers for Playwright using fuzzball. Ideal for validating AI-generated text where wording may vary.","maintainers":[{"name":"patrickschilder","email":"patrick@djpasch.nl"},{"name":"vethman","email":"r.veth87@outlook.com"}],"readme":"# 🎭 Playwright Expectly Fuzzy | By Cerios\n\n[![npm version](https://badge.fury.io/js/%40cerios%2Fplaywright-expectly-fuzzy.svg)](https://www.npmjs.com/package/@cerios/playwright-expectly-fuzzy)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nFuzzy string matching matchers for Playwright. Validates AI-generated text, chatbot replies, and dynamic content where exact wording may vary — using [fuzzball](https://www.npmjs.com/package/fuzzball)'s `token_sort_ratio` algorithm.\n\nPart of the [playwright-expectly](https://github.com/CeriosTesting/playwright-expectly) ecosystem.\n\n## Features\n\n- 🤖 **AI-Ready** — Tolerates minor wording variations, typos, and rephrasing\n- 🔀 **Word-order-insensitive** — `\"hello world\"` and `\"world hello\"` both score 100\n- 🎯 **Configurable threshold** — 0–100 similarity score, default 80\n- 🎨 **Locator support** — Works directly on Playwright `Locator` objects with automatic polling\n- 💪 **Type-Safe** — Full TypeScript support with Playwright `expect` type augmentation\n- ⚡ **Lightweight** — Only Playwright and `fuzzball` required\n\n## Installation\n\n```bash\nnpm install @cerios/playwright-expectly-fuzzy --save-dev\n```\n\n> **Peer dependency:** requires `@playwright/test` to be installed.\n\n## Quick Start\n\n### Recommended: a single `tests/support` module\n\nCreate ONE shared module in your own project that extends Playwright's `expect` and captures the return value, then re-exports it. Every fixture file and spec file imports `test`/`expect` from this module — never straight from `@playwright/test`.\n\n```typescript\n// tests/support/expect.ts\nimport \"@cerios/playwright-expectly-fuzzy\";\n\nimport { expect as baseExpect, test as base } from \"@playwright/test\";\nimport { expectlyFuzzyMatchers } from \"@cerios/playwright-expectly-fuzzy\";\n\n// MUST capture the return value — never call `.extend()` and discard it.\nexport const expect = baseExpect.extend(expectlyFuzzyMatchers);\nexport const test = base;\n```\n\nCombining with `@cerios/playwright-expectly` (or your own matchers) via `mergeExpects()` — recommended when composing 2+ matcher sources:\n\n```typescript\n// tests/support/expect.ts\nimport { expect as baseExpect, mergeExpects, test as base } from \"@playwright/test\";\nimport { expectlyMatchers } from \"@cerios/playwright-expectly\";\nimport { expectlyFuzzyMatchers } from \"@cerios/playwright-expectly-fuzzy\";\n\nconst expectlyExpect = baseExpect.extend(expectlyMatchers);\nconst fuzzyExpect = baseExpect.extend(expectlyFuzzyMatchers);\n\nexport const expect = mergeExpects(baseExpect, expectlyExpect, fuzzyExpect);\nexport const test = base;\n```\n\nIf you only need the standalone package exports, the shorter form is also valid:\n\n```typescript\nimport { expectly } from \"@cerios/playwright-expectly\";\nimport { expectlyFuzzy } from \"@cerios/playwright-expectly-fuzzy\";\nimport { expect as baseExpect, mergeExpects, test as base } from \"@playwright/test\";\n\nexport const expect = mergeExpects(baseExpect, expectly, expectlyFuzzy);\nexport const test = base;\n```\n\nThen use `expect` as usual in your tests:\n\n```typescript\nimport { expect, test } from \"./support/expect\";\n\ntest(\"AI content validation\", async ({ page }) => {\n\texpect(\"Hello Wrold\").toMatchFuzzy(\"Hello World\");\n\tawait expect(page.locator(\"[data-testid='ai-summary']\")).toMatchFuzzy(\"quarterly revenue increase\", 75);\n});\n```\n\nCapturing the return value keeps your setup aligned with Playwright's extended-`expect` model and composes cleanly when you merge multiple matcher sources. The most visible collision today is in the base package, where the Date `toBeCloseTo` only exists on the value returned by `.extend(...)`, so using the same returned-value pattern here keeps the combined setup consistent.\n\n### Standalone `expectlyFuzzy`\n\nUse `expectlyFuzzy` directly without modifying Playwright's `expect`:\n\n```typescript\nimport { expectlyFuzzy } from \"@cerios/playwright-expectly-fuzzy\";\n\n// Passes — minor typo tolerated (default threshold 80)\nexpectlyFuzzy(\"Hello Wrold\").toMatchFuzzy(\"Hello World\");\n\n// Word-order-insensitive — scores 100\nexpectlyFuzzy(\"world hello\").toMatchFuzzy(\"hello world\");\n\n// Custom threshold for more lenient matching\nexpectlyFuzzy(\"The cat sat on the mat\").toMatchFuzzy(\"A cat sits on a mat\", 70);\n\n// With negation\nexpectlyFuzzy(\"completely different\").not.toMatchFuzzy(\"hello world\");\n```\n\n> **Note:** You may see a `setupExpectlyFuzzy()` function in older docs or code — it is **deprecated**. It still works for `toMatchFuzzy` (which doesn't collide with any Playwright built-in), but the `tests/support` pattern above is the recommended replacement: it correctly captures the return value of `expect.extend()`/`mergeExpects()`, which `setupExpectlyFuzzy()` does not.\n\n## Available Matchers\n\n### `toMatchFuzzy(expected, threshold?)`\n\nAsserts that a string or locator's text content fuzzy-matches the expected string using fuzzball's `token_sort_ratio` algorithm.\n\n| Parameter   | Type     | Default | Description                                           |\n| ----------- | -------- | ------- | ----------------------------------------------------- |\n| `expected`  | `string` | —       | The string to compare against                         |\n| `threshold` | `number` | `80`    | Minimum similarity score (0–100). Pass to be lenient. |\n\n**Key behaviours:**\n\n- Scores range from **0–100**; assertion passes when `score >= threshold`\n- **Word-order-insensitive**: token sort normalises word order before comparison\n- Locator variant **polls** until the condition is met (or times out)\n\n```typescript\n// String\nexpectlyFuzzy(\"Hello Wrold\").toMatchFuzzy(\"Hello World\"); // score ~89 ≥ 80 ✓\n\n// Locator (async)\nawait expectlyFuzzyLocator(page.locator(\"[data-testid='summary']\")).toMatchFuzzy(\n\t\"The report shows an increase in quarterly revenue\",\n\t75,\n);\n\n// Negation\nexpectlyFuzzy(\"completely different text\").not.toMatchFuzzy(\"hello world\");\n```\n\n[📖 View full fuzzy matcher docs →](../../docs/FUZZY_MATCHERS.md)\n\n## Exports\n\n| Export                         | Description                                                  |\n| ------------------------------ | ------------------------------------------------------------ |\n| `expectlyFuzzy`                | `expect` extended with all fuzzy matchers                    |\n| `expectlyFuzzyMatchers`        | Matcher object — pass to `baseExpect.extend()`               |\n| `expectlyFuzzyString`          | `expect` extended with string-only fuzzy matchers            |\n| `expectlyFuzzyStringMatchers`  | String fuzzy matcher object                                  |\n| `expectlyFuzzyLocator`         | `expect` extended with locator-only fuzzy matchers           |\n| `expectlyFuzzyLocatorMatchers` | Locator fuzzy matcher object                                 |\n| `setupExpectlyFuzzy`           | Registers all fuzzy matchers on Playwright's global `expect` |\n\n## Usage Examples\n\n### Validating AI-generated summaries\n\n```typescript\nimport { expectlyFuzzyLocator } from \"@cerios/playwright-expectly-fuzzy\";\n\ntest(\"AI summary is close enough\", async ({ page }) => {\n\tawait expectlyFuzzyLocator(page.locator(\"[data-testid='ai-summary']\")).toMatchFuzzy(\n\t\t\"The report shows an increase in quarterly revenue\",\n\t\t75,\n\t);\n});\n```\n\n### Validating chatbot responses\n\n```typescript\ntest(\"chatbot reply is on topic\", async ({ page }) => {\n\tawait expect(page.locator(\"[data-testid='bot-reply']\")).toMatchFuzzy(\n\t\t\"Your order has been shipped and will arrive in 3 to 5 business days\",\n\t\t70,\n\t);\n});\n```\n\n### Testing with word-order variance\n\n```typescript\ntest(\"word order does not matter\", () => {\n\texpectlyFuzzy(\"revenue quarterly increase report\").toMatchFuzzy(\"quarterly revenue increase report\");\n});\n```\n\n## Related Packages\n\n- [`@cerios/playwright-expectly`](https://www.npmjs.com/package/@cerios/playwright-expectly) — Core matchers: strings, numbers, dates, arrays, objects, and locators\n\n## License\n\nMIT — see [LICENSE](../../LICENSE)\n","readmeFilename":"README.md"}