{"_id":"@akukral/site-comparator","_rev":"9-a246cce4f616d895d17454d72cb91bfc","name":"@akukral/site-comparator","dist-tags":{"latest":"1.4.0"},"versions":{"1.0.0":{"name":"@akukral/site-comparator","version":"1.0.0","keywords":["website","comparison","diff","crawler","testing","development","testing","staging","production","content-analysis","automation","ci-cd","quality-assurance","web-scraping","puppeteer","cheerio","site-comparator","website-diff"],"author":{"name":"Allan Kukral","email":"me@allankukral.com"},"license":"MIT","_id":"@akukral/site-comparator@1.0.0","maintainers":[{"name":"akukral","email":"me@allankukral.com"}],"homepage":"https://github.com/akukral/site-comparator#readme","bugs":{"url":"https://github.com/akukral/site-comparator/issues"},"bin":{"site-comparator":"comparator.js"},"dist":{"shasum":"71cda274fbf14d8465f4f26ff42eb42245144576","tarball":"https://registry.npmjs.org/@akukral/site-comparator/-/site-comparator-1.0.0.tgz","fileCount":4,"integrity":"sha512-c1L6GArmud0Pu81VMhb4xuWIakxefloI1mqhZbb8YQy1SIKFjrSKQ06ctWEi0s+lU9jEvjh/wnlW1QyVWjdYZQ==","signatures":[{"sig":"MEYCIQDSs/Ehj6E34ffLEwCI5sExIYL/A1DPrFIv80a5VZaTOAIhAJ5zt6VFIYV0dYQr9F+Etx/EUgiH/GY2X1XL00X0nSAa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64309},"main":"comparator.js","type":"commonjs","engines":{"node":">=16.0.0"},"gitHead":"b0e152906bcadc22ec68296030abae9fab628f97","scripts":{"test":"echo \"Error: no test specified\" && exit 1","start":"node comparator.js"},"_npmUser":{"name":"akukral","email":"me@allankukral.com"},"repository":{"url":"git+https://github.com/akukral/site-comparator.git","type":"git"},"_npmVersion":"11.4.2","description":"A sophisticated website comparison tool with intelligent content analysis and offset-aware difference detection","directories":{"example":"examples"},"_nodeVersion":"23.11.0","dependencies":{"cheerio":"^1.1.2","puppeteer":"^24.17.1"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/site-comparator_1.0.0_1756487912144_0.8781604602913602","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@akukral/site-comparator","version":"1.0.1","keywords":["website","comparison","diff","crawler","testing","development","testing","staging","production","content-analysis","automation","ci-cd","quality-assurance","web-scraping","puppeteer","cheerio","site-comparator","website-diff"],"author":{"name":"Allan Kukral","email":"me@allankukral.com"},"license":"MIT","_id":"@akukral/site-comparator@1.0.1","maintainers":[{"name":"akukral","email":"me@allankukral.com"}],"homepage":"https://github.com/akukral/site-comparator#readme","bugs":{"url":"https://github.com/akukral/site-comparator/issues"},"bin":{"site-comparator":"comparator.js"},"dist":{"shasum":"2e68e77a5fb9832ac38cbbd893b2e2b466580f1f","tarball":"https://registry.npmjs.org/@akukral/site-comparator/-/site-comparator-1.0.1.tgz","fileCount":4,"integrity":"sha512-bWvSzXrPC/ZhLkBZmXQAis2tSiQqCI1KCGVYQTtu584tnMHIRabIQb1+C+vkgRLhw+CJK7iC7397swsxlIm7zg==","signatures":[{"sig":"MEYCIQCMHCn7H5KQDeTiiAZiCHBflmGFFW5Bv9N8Yjn1a7i7CwIhAKQRfo+xBhxyOpKh9NYUwRcfpagbGFjt85BUR8ppbNFv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64340},"main":"comparator.js","type":"commonjs","engines":{"node":">=16.0.0"},"gitHead":"a19883f8dc2459fa21e9d42dc22063150ae9527c","scripts":{"test":"echo \"Error: no test specified\" && exit 1","start":"node comparator.js"},"_npmUser":{"name":"akukral","email":"me@allankukral.com"},"repository":{"url":"git+https://github.com/akukral/site-comparator.git","type":"git"},"_npmVersion":"11.4.2","description":"A sophisticated website comparison tool with intelligent content analysis and offset-aware difference detection","directories":{"example":"examples"},"_nodeVersion":"23.11.0","dependencies":{"cheerio":"^1.1.2","puppeteer":"^24.17.1"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/site-comparator_1.0.1_1756488731657_0.6497569458327508","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@akukral/site-comparator","version":"1.0.2","keywords":["website","comparison","diff","crawler","testing","development","testing","staging","production","content-analysis","automation","ci-cd","quality-assurance","web-scraping","puppeteer","cheerio","site-comparator","website-diff"],"author":{"name":"Allan Kukral","email":"me@allankukral.com"},"license":"MIT","_id":"@akukral/site-comparator@1.0.2","maintainers":[{"name":"akukral","email":"me@allankukral.com"}],"homepage":"https://github.com/akukral/site-comparator#readme","bugs":{"url":"https://github.com/akukral/site-comparator/issues"},"bin":{"site-comparator":"comparator.js"},"dist":{"shasum":"3fe2483c860583490b81cce3eb218eb7dda94992","tarball":"https://registry.npmjs.org/@akukral/site-comparator/-/site-comparator-1.0.2.tgz","fileCount":4,"integrity":"sha512-KaR11YtAgVr8ORtoBZqrwQXaJb+oJldVxkUF+gkyHKhR546gy0+ugCWTrR2J/ug/Sck2Iy8NQt4w4mJQSzZwdQ==","signatures":[{"sig":"MEQCIF3cWiiu/7bMiq4jXdVEgggfEvLwcsWrmuryqanAzikLAiAbbF0RtbsZpN+E9Nz4FrAXshDj6JpSXH169JC86Y/kaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64340},"main":"comparator.js","type":"commonjs","engines":{"node":">=16.0.0"},"gitHead":"17033a3ff3dca33d9ab9c2ec2858a0d38352dcf7","scripts":{"test":"echo \"Error: no test specified\" && exit 1","start":"node comparator.js"},"_npmUser":{"name":"akukral","email":"me@allankukral.com"},"repository":{"url":"git+https://github.com/akukral/site-comparator.git","type":"git"},"_npmVersion":"11.4.2","description":"A sophisticated website comparison tool with intelligent content analysis and offset-aware difference detection","directories":{"example":"examples"},"_nodeVersion":"23.11.0","dependencies":{"cheerio":"^1.1.2","puppeteer":"^24.17.1"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/site-comparator_1.0.2_1756488833521_0.8772691713433145","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@akukral/site-comparator","version":"1.0.4","keywords":["website","comparison","diff","crawler","testing","development","testing","staging","production","content-analysis","automation","ci-cd","quality-assurance","web-scraping","puppeteer","cheerio","site-comparator","website-diff"],"author":{"name":"Allan Kukral","email":"me@allankukral.com"},"license":"MIT","_id":"@akukral/site-comparator@1.0.4","maintainers":[{"name":"akukral","email":"me@allankukral.com"}],"homepage":"https://github.com/akukral/site-comparator#readme","bugs":{"url":"https://github.com/akukral/site-comparator/issues"},"bin":{"site-comparator":"comparator.js"},"dist":{"shasum":"14b2bb2e47eb7f59ce3d92e61c9c691b46962e85","tarball":"https://registry.npmjs.org/@akukral/site-comparator/-/site-comparator-1.0.4.tgz","fileCount":4,"integrity":"sha512-+/l+zTrAS2hxU5G3aihL1+R3tE/9aAQdYzsVaPA/DNsIvOvbXe/7o73P6XXr2Us8TfoDC2QK7Banjtnz41NFzQ==","signatures":[{"sig":"MEYCIQCiNkSecOZosY1ml35EiXj5kcdWhr6FebzGxSAnbirBtwIhAJqjWbVYbPs0VuHBkMkEYl4cfsmaGbji9TIbUul1WZPd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64770},"main":"comparator.js","type":"commonjs","engines":{"node":">=16.0.0"},"gitHead":"b50784335f9b7a9959fe0cc30ed001547a9eee9a","scripts":{"test":"echo \"Error: no test specified\" && exit 1","start":"node comparator.js","site-comparator":"node comparator.js"},"_npmUser":{"name":"akukral","email":"me@allankukral.com"},"repository":{"url":"git+https://github.com/akukral/site-comparator.git","type":"git"},"_npmVersion":"11.4.2","description":"A sophisticated website comparison tool with intelligent content analysis and offset-aware difference detection","directories":{"example":"examples"},"_nodeVersion":"23.11.0","dependencies":{"cheerio":"^1.1.2","puppeteer":"^24.17.1","@akukral/site-comparator":"^1.0.2"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/site-comparator_1.0.4_1756490012998_0.7310405043120651","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@akukral/site-comparator","version":"1.1.0","keywords":["website","comparison","diff","crawler","testing","development","testing","staging","production","content-analysis","automation","ci-cd","quality-assurance","web-scraping","puppeteer","cheerio","site-comparator","website-diff"],"author":{"name":"Allan Kukral","email":"me@allankukral.com"},"license":"MIT","_id":"@akukral/site-comparator@1.1.0","maintainers":[{"name":"akukral","email":"me@allankukral.com"}],"homepage":"https://github.com/akukral/site-comparator#readme","bugs":{"url":"https://github.com/akukral/site-comparator/issues"},"bin":{"site-comparator":"comparator.js"},"dist":{"shasum":"eee51019f37ebde1dda8336220bfd13b2a426460","tarball":"https://registry.npmjs.org/@akukral/site-comparator/-/site-comparator-1.1.0.tgz","fileCount":5,"integrity":"sha512-pNR81MomhVJrK/kaOToGFLiLmdXyVumJzu8YmXvjJLJAGVLpeRwl2cSqN3czqpmcqPsJ71q4Ccpi2AVOQX/0VA==","signatures":[{"sig":"MEQCIFdDI56/lIWwE6RZawzKcd3HKFR9y93Umb+kpIQ5zYlCAiBC6GEMUsar7t4eVAlNe2mN1taraNVNGRx36asEHN8aHg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66733},"main":"comparator.js","type":"commonjs","engines":{"node":">=16.0.0"},"gitHead":"015143cfa6919d5477c74ef511f7c826e8064307","scripts":{"test":"echo \"Error: no test specified\" && exit 1","start":"node comparator.js","release:major":"npm version major && npm publish","release:minor":"npm version minor && npm publish","release:patch":"npm version patch && npm publish","site-comparator":"node comparator.js"},"_npmUser":{"name":"akukral","email":"me@allankukral.com"},"repository":{"url":"git+https://github.com/akukral/site-comparator.git","type":"git"},"_npmVersion":"11.4.2","description":"A sophisticated website comparison tool with intelligent content analysis and offset-aware difference detection","directories":{"example":"examples"},"_nodeVersion":"23.11.0","dependencies":{"cheerio":"^1.1.2","puppeteer":"^24.17.1","readline-sync":"^1.4.10"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/site-comparator_1.1.0_1756494053732_0.24869679261425381","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@akukral/site-comparator","version":"1.1.1","keywords":["website","comparison","diff","crawler","testing","development","testing","staging","production","content-analysis","automation","ci-cd","quality-assurance","web-scraping","puppeteer","cheerio","site-comparator","website-diff"],"author":{"name":"Allan Kukral","email":"me@allankukral.com"},"license":"MIT","_id":"@akukral/site-comparator@1.1.1","maintainers":[{"name":"akukral","email":"me@allankukral.com"}],"homepage":"https://github.com/akukral/site-comparator#readme","bugs":{"url":"https://github.com/akukral/site-comparator/issues"},"bin":{"site-comparator":"comparator.js"},"dist":{"shasum":"8da738a033d36ecf384da075090c8847f1495be1","tarball":"https://registry.npmjs.org/@akukral/site-comparator/-/site-comparator-1.1.1.tgz","fileCount":5,"integrity":"sha512-pIeMEts+9R9DLRwD8DJv8XjvYHhgiJRql84OQE4Oc2Dssir8A7belU731fcicaSRyJ7gD1yHYUX5Elj4dGENqA==","signatures":[{"sig":"MEYCIQCj0NKWpMZLVolBm8MkIQZ9HZjAuEo88JyVbBYYKVi6QQIhAO89aX5RTXwgmijeZo8KA6+aobKTWaZIvuT4XucW3dKH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67245},"main":"comparator.js","type":"commonjs","engines":{"node":">=16.0.0"},"gitHead":"49a79dafc3124443203a9d51c7120bccdfb5d7db","scripts":{"test":"echo \"Error: no test specified\" && exit 1","start":"node comparator.js","release:major":"npm version major && npm publish","release:minor":"npm version minor && npm publish","release:patch":"npm version patch && npm publish","site-comparator":"node comparator.js"},"_npmUser":{"name":"akukral","email":"me@allankukral.com"},"repository":{"url":"git+https://github.com/akukral/site-comparator.git","type":"git"},"_npmVersion":"11.4.2","description":"A sophisticated website comparison tool with intelligent content analysis and offset-aware difference detection","directories":{"example":"examples"},"_nodeVersion":"23.11.0","dependencies":{"cheerio":"^1.1.2","puppeteer":"^24.17.1","readline-sync":"^1.4.10"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/site-comparator_1.1.1_1756496017615_0.2804517558454269","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@akukral/site-comparator","version":"1.2.0","keywords":["website","comparison","diff","crawler","testing","development","testing","staging","production","content-analysis","automation","ci-cd","quality-assurance","web-scraping","puppeteer","cheerio","site-comparator","website-diff"],"author":{"name":"Allan Kukral","email":"me@allankukral.com"},"license":"MIT","_id":"@akukral/site-comparator@1.2.0","maintainers":[{"name":"akukral","email":"me@allankukral.com"}],"homepage":"https://github.com/akukral/site-comparator#readme","bugs":{"url":"https://github.com/akukral/site-comparator/issues"},"bin":{"site-comparator":"comparator.js"},"dist":{"shasum":"3a02eb520734ddf3e84188202f4c01297c9d97e8","tarball":"https://registry.npmjs.org/@akukral/site-comparator/-/site-comparator-1.2.0.tgz","fileCount":5,"integrity":"sha512-11mVvn5gsl2bkOibT3BZkyvwiUd8n2QWn9cx0C+WH/eZPC+8ZsFX/7zmeTBDSiUCokNlxFlO2ji698qAZjISQg==","signatures":[{"sig":"MEYCIQCGZBWqbbzMVCxfj7qYnk+lRFQ/6iLF26AwMLuTq2WPWgIhAIu0hQZ28fK2kuvruEi9uUL3ZRSGO5v7PRIn6Ih0iOhq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68653},"main":"comparator.js","type":"commonjs","engines":{"node":">=16.0.0"},"gitHead":"2fb13626eb054aa80ad25dce2b823919bfd245a3","scripts":{"test":"echo \"Error: no test specified\" && exit 1","start":"node comparator.js","release:major":"npm version major && npm publish","release:minor":"npm version minor && npm publish","release:patch":"npm version patch && npm publish","site-comparator":"node comparator.js"},"_npmUser":{"name":"akukral","email":"me@allankukral.com"},"repository":{"url":"git+https://github.com/akukral/site-comparator.git","type":"git"},"_npmVersion":"11.4.2","description":"A sophisticated website comparison tool with intelligent content analysis and offset-aware difference detection","directories":{"example":"examples"},"_nodeVersion":"23.11.0","dependencies":{"cheerio":"^1.1.2","puppeteer":"^24.17.1","readline-sync":"^1.4.10"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/site-comparator_1.2.0_1756501727618_0.3210321330557826","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@akukral/site-comparator","version":"1.2.2","keywords":["website","comparison","diff","crawler","testing","development","testing","staging","production","content-analysis","automation","ci-cd","quality-assurance","web-scraping","puppeteer","cheerio","site-comparator","website-diff"],"author":{"name":"Allan Kukral","email":"me@allankukral.com"},"license":"MIT","_id":"@akukral/site-comparator@1.2.2","maintainers":[{"name":"akukral","email":"me@allankukral.com"}],"homepage":"https://github.com/akukral/site-comparator#readme","bugs":{"url":"https://github.com/akukral/site-comparator/issues"},"bin":{"site-comparator":"comparator.js"},"dist":{"shasum":"150628531ebc0d9fd08698afc1798c265c6887d6","tarball":"https://registry.npmjs.org/@akukral/site-comparator/-/site-comparator-1.2.2.tgz","fileCount":5,"integrity":"sha512-1fH+X8WOs9dLcLgHq0b8zZZNtq4aRL4xxGQ1i0qFS6EB6/1vwzz233pSq5kW987mzLzoOeZG/ubh+GNtrqxdWA==","signatures":[{"sig":"MEYCIQCdAWfzJoyeO9OqaF1AlEzCHJKqqiY1ko3mCuAotNiyOQIhAIvKMlZehOytBFebmUHy42hhkcCZwsaqf2JNciBbM99g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69103},"main":"comparator.js","type":"commonjs","engines":{"node":">=16.0.0"},"gitHead":"b21b18ca9c98cfd5fcd270fc7ac3404682c87d04","scripts":{"test":"echo \"Error: no test specified\" && exit 1","start":"node comparator.js","release:major":"npm version major && npm publish","release:minor":"npm version minor && npm publish","release:patch":"npm version patch && npm publish","site-comparator":"node comparator.js"},"_npmUser":{"name":"akukral","email":"me@allankukral.com"},"repository":{"url":"git+https://github.com/akukral/site-comparator.git","type":"git"},"_npmVersion":"11.4.2","description":"A sophisticated website comparison tool with intelligent content analysis and offset-aware difference detection","directories":{"example":"examples"},"_nodeVersion":"23.11.0","dependencies":{"cheerio":"^1.1.2","puppeteer":"^24.17.1","readline-sync":"^1.4.10"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/site-comparator_1.2.2_1756582729888_0.1152632878372597","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@akukral/site-comparator","version":"1.4.0","description":"A sophisticated website comparison tool with intelligent content analysis and offset-aware difference detection","keywords":["website","comparison","diff","crawler","testing","development","testing","staging","production","content-analysis","automation","ci-cd","quality-assurance","web-scraping","puppeteer","cheerio","site-comparator","website-diff"],"homepage":"https://github.com/akukral/site-comparator#readme","bugs":{"url":"https://github.com/akukral/site-comparator/issues"},"repository":{"type":"git","url":"git+https://github.com/akukral/site-comparator.git"},"license":"MIT","author":{"name":"Allan Kukral","email":"me@allankukral.com"},"type":"commonjs","main":"comparator.js","bin":{"site-comparator":"comparator.js"},"scripts":{"start":"node comparator.js","test":"echo \"Error: no test specified\" && exit 1","site-comparator":"node comparator.js","release:patch":"npm version patch && npm publish","release:minor":"npm version minor && npm publish","release:major":"npm version major && npm publish"},"directories":{"example":"examples"},"dependencies":{"cheerio":"^1.1.2","puppeteer":"^24.17.1","readline-sync":"^1.4.10"},"engines":{"node":">=16.0.0"},"preferGlobal":true,"_id":"@akukral/site-comparator@1.4.0","gitHead":"c365e8e8c2cbcb899f23529e3c3bf66d8f66b799","_nodeVersion":"23.11.0","_npmVersion":"11.4.2","dist":{"integrity":"sha512-BADUVvbwpM88irK4O1h2JoWrhXfDeHWR6oCFfER+Le9nIH7WeTEalil09bpadWmxFNqUbqcBKO+vRDuOkps+Dw==","shasum":"d7b35803431c0fa85112ab977214041b0137b4f5","tarball":"https://registry.npmjs.org/@akukral/site-comparator/-/site-comparator-1.4.0.tgz","fileCount":5,"unpackedSize":97026,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFzRypa4gpYpbSo5KKLKVHOkgEUK8l5cfgcROHb0HIaYAiEAqIuFaYYYTurXJmurm6VTG49hc/QjEI7BdAVscH68KJk="}]},"_npmUser":{"name":"akukral","email":"me@allankukral.com"},"maintainers":[{"name":"akukral","email":"me@allankukral.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/site-comparator_1.4.0_1756908799433_0.8907332044761846"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-29T17:18:32.054Z","modified":"2025-09-03T14:13:19.808Z","1.0.0":"2025-08-29T17:18:32.335Z","1.0.1":"2025-08-29T17:32:11.834Z","1.0.2":"2025-08-29T17:33:53.704Z","1.0.4":"2025-08-29T17:53:33.159Z","1.1.0":"2025-08-29T19:00:53.916Z","1.1.1":"2025-08-29T19:33:37.786Z","1.2.0":"2025-08-29T21:08:47.797Z","1.2.2":"2025-08-30T19:38:50.080Z","1.4.0":"2025-09-03T14:13:19.615Z"},"bugs":{"url":"https://github.com/akukral/site-comparator/issues"},"author":{"name":"Allan Kukral","email":"me@allankukral.com"},"license":"MIT","homepage":"https://github.com/akukral/site-comparator#readme","keywords":["website","comparison","diff","crawler","testing","development","testing","staging","production","content-analysis","automation","ci-cd","quality-assurance","web-scraping","puppeteer","cheerio","site-comparator","website-diff"],"repository":{"type":"git","url":"git+https://github.com/akukral/site-comparator.git"},"description":"A sophisticated website comparison tool with intelligent content analysis and offset-aware difference detection","maintainers":[{"name":"akukral","email":"me@allankukral.com"}],"readme":"# Site Comparator\n\n A sophisticated website comparison tool that performs intelligent content analysis between two websites, detecting differences while accounting for content reordering and structural changes. Intended to get a general sense if your development or staging envirionment are in parity with regards to content with each other. At this point there is no funcitonality checks or visual/sylistic comparisons. This tool is intended for use on websites you have permission to crawl.\n\n## 🚀 Features\n\n- **Intelligent Content Analysis**: Compares websites beyond simple text matching, understanding content structure and meaning\n- **Offset-Aware Comparison**: Detects when content has been reordered or shifted rather than just added/removed\n- **Authentication Support**: Handles HTTP Basic Authentication with interactive prompts and environment variables\n- **Automatic Crawling**: Discovers and compares internal pages automatically\n- **Comprehensive Reports**: Generates detailed HTML and JSON reports with visual difference highlighting\n- **Spurious Difference Filtering**: Ignores common dynamic content like CSRF tokens, timestamps, and session IDs\n- **Flexible Configuration**: Customizable crawling limits, delays, and output options\n\n## 📋 Requirements\n\n- Node.js 16+\n- npm or yarn\n- Internet connection for web crawling\n\n## 🛠️ Installation\n\n### Global Installation (Recommended)\n\n```bash\nnpm install -g @akukral/site-comparator\n```\n\n### Local Installation\n\n```bash\nnpm install @akukral/site-comparator\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/akukral/site-comparator\ncd site-comparator\nnpm install\nnpm link  # Makes it available globally\n```\n\n## 🎯 Quick Start\n\n### Basic Usage\n\n#### Global Installation\n```bash\n# Compare two websites\nsite-comparator https://staging.example.com https://example.com\n\n# With custom options\nsite-comparator https://dev.site.com https://site.com --max-pages 20 --delay 2000\n```\n\n#### Local Installation\n```bash\n# Using npm script\nnpm run site-comparator https://staging.example.com https://example.com\n\n# Using npx\nnpx site-comparator https://staging.example.com https://example.com\n\n# Direct execution\nnode node_modules/@akukral/site-comparator/comparator.js https://staging.example.com https://example.com\n```\n\n### Authentication Examples\n\n```bash\n# Interactive authentication (will prompt for credentials)\nsite-comparator https://staging.example.com https://example.com\n\n# Using environment variables\nCOMPARATOR_USERNAME=myuser COMPARATOR_PASSWORD=mypass \\\n  site-comparator https://staging.example.com https://example.com\n\n# Different credentials per domain\nCOMPARATOR_USER_STAGING_EXAMPLE_COM=user1 COMPARATOR_PASS_STAGING_EXAMPLE_COM=pass1 \\\nCOMPARATOR_USER_EXAMPLE_COM=user2 COMPARATOR_PASS_EXAMPLE_COM=pass2 \\\n  site-comparator https://staging.example.com https://example.com\n```\n\n## 📖 Usage\n\n### Command Line Interface\n\n```bash\nsite-comparator <domain1> <domain2> [options]\n```\n\n### Options\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `--max-pages <number>` | Maximum pages to crawl per site | 20 |\n| `--max-discovery <number>` | Maximum unique links to discover | 500 |\n| `--delay <ms>` | Delay between requests (milliseconds) | 1000 |\n| `--timeout <ms>` | Page load timeout (milliseconds) | 30000 |\n| `--output-dir <path>` | Output directory for reports | `./comparator-results` |\n\n### Programmatic Usage\n\n```javascript\nconst Comparator = require('@akukral/site-comparator');\n\nconst comparator = new Comparator({\n    maxPages: 20,\n    maxDiscovery: 500,\n    delay: 1500,\n    timeout: 45000,\n    outputDir: './my-results'\n});\n\n// Compare websites\nawait comparator.compare('https://staging.example.com', 'https://example.com');\n\n// Or with authentication\nawait comparator.compare('https://staging.example.com', 'https://example.com', {\n    site1: { username: 'user1', password: 'pass1' },\n    site2: { username: 'user2', password: 'pass2' }\n});\n```\n\n## 🔐 Authentication\n\nSite Comparator supports multiple authentication methods:\n\n### Interactive Prompts\nWhen authentication is required, the tool will prompt for credentials with hidden password input.\n\n### Environment Variables\nSet credentials using environment variables:\n\n```bash\n# Default credentials for both sites\nexport COMPARATOR_USERNAME=\"myuser\"\nexport COMPARATOR_PASSWORD=\"mypass\"\n\n# Site-specific credentials (domain key is hostname with special chars as _)\nexport COMPARATOR_USER_STAGING_EXAMPLE_COM=\"staging_user\"\nexport COMPARATOR_PASS_STAGING_EXAMPLE_COM=\"staging_pass\"\nexport COMPARATOR_USER_EXAMPLE_COM=\"prod_user\"\nexport COMPARATOR_PASS_EXAMPLE_COM=\"prod_pass\"\n```\n\n### Domain Key Generation\nThe tool automatically converts domain names to environment variable keys:\n- `https://staging.example.com` → `STAGING_EXAMPLE_COM`\n- `https://dev-site.com` → `DEV_SITE_COM`\n- `https://test.example.co.uk` → `TEST_EXAMPLE_CO_UK`\n\n## 📊 Output\n\nSite Comparator generates comprehensive reports in the specified output directory:\n\n### JSON Report (`results-{timestamp}.json`)\nDetailed comparison data including:\n- Page-by-page differences\n- Content analysis results\n- Error logs\n- Summary statistics\n\n### HTML Report (`report-{timestamp}.html`)\nVisual report with:\n- Summary metrics\n- Difference type breakdown\n- Content change analysis\n- Most significant differences\n- Detailed page comparisons\n- Error listings\n\n### Report Features\n- **Difference Types**: Titles, headings, paragraphs, links, images, forms\n- **Content Analysis**: Additions, deletions, reordering detection\n- **Visual Indicators**: Color-coded differences and severity levels\n- **Snippets**: Content previews for quick identification\n- **Statistics**: Comprehensive metrics and summaries\n\n## 🔧 Configuration\n\n### Constructor Options\n\n```javascript\nconst options = {\n    maxPages: 20,                     // Maximum pages to crawl per site\n    maxDiscovery: 500,                // Maximum unique links to discover (queue cap)\n    delay: 1000,                      // Delay between requests (ms)\n    timeout: 30000,                   // Page load timeout (ms)\n    ignoreElements: [                 // HTML elements to ignore\n        'script', 'noscript', 'style'\n    ],\n    ignoreAttributes: [               // Attributes to ignore\n        'data-csrf', 'csrf-token', '_token', 'nonce'\n    ],\n    ignoreClasses: [                  // CSS classes to ignore\n        'timestamp', 'csrf', 'nonce', 'random'\n    ],\n    userAgent: 'Comparator Bot 1.0',  // User agent string\n    outputDir: './comparator-results' // Output directory\n};\n```\n\n## 🧠 Intelligent Comparison\n\nSite Comparator uses advanced algorithms to detect meaningful differences:\n\n### Content Normalization\n- Removes dynamic content (CSRF tokens, timestamps)\n- Normalizes whitespace and formatting\n- Handles URL differences between environments\n- Filters out common noise\n\n### Structural Analysis\n- Compares content structure, not just text\n- Detects content reordering vs. actual changes\n- Analyzes heading hierarchies\n- Examines link relationships\n\n### Offset Detection\n- Uses Longest Common Subsequence (LCS) algorithm\n- Identifies when content has moved rather than changed\n- Reduces false positives from content reordering\n- Provides accurate change analysis\n\n## 🚨 Error Handling\n\nThe tool gracefully handles various error scenarios:\n- Network timeouts and connection issues\n- Authentication failures\n- Invalid URLs and redirects\n- JavaScript errors on pages\n- Missing or inaccessible content\n\nErrors are logged and included in the final report for analysis.\n\n## 🔒 Security Considerations\n\n- Credentials are never logged or stored\n- **Password input is completely hidden** - no keystrokes visible during interactive prompts\n- Environment variables are cleared after use\n- No sensitive data is included in reports\n- Supports secure authentication methods\n- Professional-grade password input using industry-standard libraries\n\n## 📝 Examples\n\n### Basic Website Comparison\n```bash\n# Compare staging and production\nsite-comparator https://staging.mysite.com https://mysite.com\n```\n\n### Limited Crawl for Large Sites\n```bash\n# Compare with limited page discovery\nsite-comparator https://dev.example.com https://example.com --max-pages 10\n```\n\n### Custom Output Location\n```bash\n# Save results to custom directory\nsite-comparator https://test.site.com https://site.com --output-dir ./my-comparison-results\n```\n\n### CI/CD Integration\n```bash\n# Use in automated testing\nCOMPARATOR_USERNAME=$STAGING_USER \\\nCOMPARATOR_PASSWORD=$STAGING_PASS \\\nsite-comparator https://staging.app.com https://app.com \\\n  --max-pages 20 \\\n  --delay 500 \\\n  --output-dir ./test-results\n```\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'feat: add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🆘 Support\n\n- **Issues**: Report bugs and feature requests on GitHub\n- **Documentation**: Check the inline code comments for detailed API documentation\n- **Examples**: See the `examples/` directory for additional usage patterns\n\n## 🔄 Version History\n\n- **1.3.0**: Minor release with maintenance updates and JSDoc comments\n- **1.2.0**: Crawl and discovery improvements\n  - Added `maxDiscovery` option and `--max-discovery` CLI flag\n  - Default `maxPages` now 20; discovery capped by crawled pages\n  - Updated help text and docs\n- **1.1.0**: Enhanced security and improved password input\n  - **Security Enhancement**: Completely hidden password input with no visible keystrokes\n  - **Professional Authentication**: Uses industry-standard `readline-sync` library for secure CLI input\n  - **Better User Experience**: Cleaner, more reliable authentication prompts\n  - **Dependency Updates**: Added `readline-sync` for enhanced security\n- **1.0.4**: Previous stable release\n- **1.0.0**: Initial release with intelligent content comparison\n  - Features: Authentication support, HTML/JSON reports, offset detection\n\n---\n\n**Note**: This tool is designed for legitimate website comparison and testing purposes. Please ensure you have permission to crawl and compare the target websites.\n","readmeFilename":"README.md"}