{"_id":"@bernierllc/validators-link-integrity","_rev":"7-7b436ce87718bc3ee5f10b0980ad6eb1","name":"@bernierllc/validators-link-integrity","dist-tags":{"latest":"0.7.0"},"versions":{"0.1.1":{"name":"@bernierllc/validators-link-integrity","version":"0.1.1","keywords":["validation","validators","link-integrity","broken-links","anchor-validation","redirects","url-validation","content","primitives"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-link-integrity@0.1.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"11b5788bd0dfa64d5b74d414ff8884ed37805547","tarball":"https://registry.npmjs.org/@bernierllc/validators-link-integrity/-/validators-link-integrity-0.1.1.tgz","fileCount":22,"integrity":"sha512-KaI1kVl/6YRpe98EDRTiQaPp3LolgC+5RJIgy6/wkfCEKTg4ocJGxoYAaYtmwTtfUB/U24K+slkWIgylWD/Z3Q==","signatures":[{"sig":"MEYCIQDiRzWJd/t6jGv3dAubUtBXVXBlqdhR7qN68GGR92f+jwIhAI4MVHkSgMiNR8oZQDOznz8FKqkefGCkynZPakxMuUWs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68965},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"e5d54e147cd3b7a2065f6299a9346128bfb4a3b5","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-link-integrity"},"_npmVersion":"11.4.2","description":"Link integrity validation primitive - broken links, anchor targets, redirects, and URL validation","directories":{},"_nodeVersion":"24.4.1","dependencies":{"@bernierllc/validators-core":"^0.1.1","@bernierllc/validators-utils":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","jsdom":"^27.0.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@types/jsdom":"^27.0.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-link-integrity_0.1.1_1760037309223_0.8482965006814653","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bernierllc/validators-link-integrity","version":"0.3.0","keywords":["validation","validators","link-integrity","broken-links","anchor-validation","redirects","url-validation","content","primitives"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-link-integrity@0.3.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"fd08a1d49f4468b32cba3fcc5aa84c82fe43c0c3","tarball":"https://registry.npmjs.org/@bernierllc/validators-link-integrity/-/validators-link-integrity-0.3.0.tgz","fileCount":22,"integrity":"sha512-VwcH+qh3vXdAFvK25fxnDi3C1bc2/AFMtwRavJjaL5ijr4QxgzaDGu7NjwCfxm0zrDqPQ7vBL4WK7pjk+WV1Nw==","signatures":[{"sig":"MEUCIDPTppgCGgq0O13UsRe0TUPG6A+6lqG7vKrV1ESOEQbFAiEAiA8441BaJF5VDCNaGy/8DJ3WwSnYkzDomjs29MBkwtw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69067},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6bc2410-87bf-4256-99c5-6fe8e613c048"}},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-link-integrity"},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"Link integrity validation primitive - broken links, anchor targets, redirects, and URL validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@bernierllc/validators-core":"0.1.2","@bernierllc/validators-utils":"0.1.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","jsdom":"^27.0.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@types/jsdom":"^27.0.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-link-integrity_0.3.0_1767642369382_0.6293901538352313","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@bernierllc/validators-link-integrity","version":"0.3.1","keywords":["validation","validators","link-integrity","broken-links","anchor-validation","redirects","url-validation","content","primitives"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-link-integrity@0.3.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"fb8eb8a1d979aeb87a4c678fd3f84d1c010cc213","tarball":"https://registry.npmjs.org/@bernierllc/validators-link-integrity/-/validators-link-integrity-0.3.1.tgz","fileCount":22,"integrity":"sha512-vMUYfU3ZU76vQl5pWA3pL0e3AC3GC5pddlTXaJWjm02pQRif7DqDYpmDub9+CJSOtmPFERKGUgKcahtG7EKE4w==","signatures":[{"sig":"MEQCIFOFfyjYUc8XKcyPbDHNgtMy79UruYt7qtdC57ZNa9ALAiAhdm8LTA7oGF+dhsuSdH+O4swcgyKXCfNB9cerWFNOcQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69009},"main":"dist/index.js","_from":"file:bernierllc-validators-link-integrity-0.3.1.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6bc2410-87bf-4256-99c5-6fe8e613c048"}},"_resolved":"/tmp/2dd2639589b984dd337e2caff3776767/bernierllc-validators-link-integrity-0.3.1.tgz","_integrity":"sha512-vMUYfU3ZU76vQl5pWA3pL0e3AC3GC5pddlTXaJWjm02pQRif7DqDYpmDub9+CJSOtmPFERKGUgKcahtG7EKE4w==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-link-integrity"},"_npmVersion":"11.11.0","description":"Link integrity validation primitive - broken links, anchor targets, redirects, and URL validation","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bernierllc/validators-core":"0.1.3","@bernierllc/validators-utils":"0.1.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","jsdom":"^27.0.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@types/jsdom":"^27.0.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-link-integrity_0.3.1_1773078302407_0.7139844387416341","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@bernierllc/validators-link-integrity","version":"0.3.2","keywords":["validation","validators","link-integrity","broken-links","anchor-validation","redirects","url-validation","content","primitives"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-link-integrity@0.3.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"9d1828506c4d8b6bde75b115fb9a32e506a6c151","tarball":"https://registry.npmjs.org/@bernierllc/validators-link-integrity/-/validators-link-integrity-0.3.2.tgz","fileCount":22,"integrity":"sha512-ZPaVQ2IY7ZmWK61MUi7054MdfPVQxKrCE2L88XEuDfdhfBmOC+Jataq/cb48veR/0xkDWTOgOc7tLRlKu95RxQ==","signatures":[{"sig":"MEUCIQDlQF4reZAaTC2hyNtreHTUBpWlaWwDSO7/AJpLJC1BcQIgM8/JHq6VLaInHT/2T7iUVPV+DvqBs6A6LZL20kTDghU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69009},"main":"dist/index.js","_from":"file:bernierllc-validators-link-integrity-0.3.2.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6bc2410-87bf-4256-99c5-6fe8e613c048"}},"_resolved":"/home/runner/work/tools/tools/packages/validators/validators-link-integrity/bernierllc-validators-link-integrity-0.3.2.tgz","_integrity":"sha512-ZPaVQ2IY7ZmWK61MUi7054MdfPVQxKrCE2L88XEuDfdhfBmOC+Jataq/cb48veR/0xkDWTOgOc7tLRlKu95RxQ==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-link-integrity"},"_npmVersion":"11.11.0","description":"Link integrity validation primitive - broken links, anchor targets, redirects, and URL validation","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bernierllc/validators-core":"0.1.4","@bernierllc/validators-utils":"0.1.4"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","jsdom":"^27.0.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@types/jsdom":"^27.0.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-link-integrity_0.3.2_1773163948500_0.19724806796281347","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bernierllc/validators-link-integrity","version":"0.4.0","keywords":["validation","validators","link-integrity","broken-links","anchor-validation","redirects","url-validation","content","primitives"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-link-integrity@0.4.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"f6fd3b30df3921192aebec63f5e9845f043a7ba2","tarball":"https://registry.npmjs.org/@bernierllc/validators-link-integrity/-/validators-link-integrity-0.4.0.tgz","fileCount":22,"integrity":"sha512-jj1foZA3B+cZ4ZnTN+2ybwpbL/xVMMevEXhwcZM6zU1OX8/0pKbeOuIyjiUrTO0PH88a0w0MiFrKpPAmMKnzng==","signatures":[{"sig":"MEYCIQD+SWnkbgWrzUNqD9r/0YIC+ZFbaRQzgTtPppg7CTTdcAIhAIS/hh9i++UYqtqXnt4iLBYi9VCXmci+GziJ6esS0PQr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69009},"main":"dist/index.js","_from":"file:bernierllc-validators-link-integrity-0.4.0.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6bc2410-87bf-4256-99c5-6fe8e613c048"}},"_resolved":"/home/runner/work/tools/tools/packages/validators/validators-link-integrity/bernierllc-validators-link-integrity-0.4.0.tgz","_integrity":"sha512-jj1foZA3B+cZ4ZnTN+2ybwpbL/xVMMevEXhwcZM6zU1OX8/0pKbeOuIyjiUrTO0PH88a0w0MiFrKpPAmMKnzng==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-link-integrity"},"_npmVersion":"11.14.1","description":"Link integrity validation primitive - broken links, anchor targets, redirects, and URL validation","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/validators-core":"0.2.0","@bernierllc/validators-utils":"0.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","jsdom":"^27.0.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@types/jsdom":"^27.0.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-link-integrity_0.4.0_1779242179682_0.7714917142722646","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@bernierllc/validators-link-integrity","version":"0.5.0","keywords":["validation","validators","link-integrity","broken-links","anchor-validation","redirects","url-validation","content","primitives"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-link-integrity@0.5.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"bfb205f0c65ac73dd2cc49ecef0b04fc9652a8db","tarball":"https://registry.npmjs.org/@bernierllc/validators-link-integrity/-/validators-link-integrity-0.5.0.tgz","fileCount":22,"integrity":"sha512-sncQlwLbdS/V7hJx9nXcPFzKqQhYMvCH8McKVQz7g5Eu7LRCOp5Dnvkc1dbnegaHvaRhXUC0lEXF3NZ/sXgeog==","signatures":[{"sig":"MEUCIDGWvrtfkPNHsB4O95ok9czK7hj99I2LpkZTmmazkSTkAiEAhVg93LGqmPqc5ZZD+OT0WjWZnU1kp6FkxLwJBhL2FXo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69009},"main":"dist/index.js","_from":"file:bernierllc-validators-link-integrity-0.5.0.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6bc2410-87bf-4256-99c5-6fe8e613c048"}},"_resolved":"/home/runner/work/tools/tools/packages/validators/validators-link-integrity/bernierllc-validators-link-integrity-0.5.0.tgz","_integrity":"sha512-sncQlwLbdS/V7hJx9nXcPFzKqQhYMvCH8McKVQz7g5Eu7LRCOp5Dnvkc1dbnegaHvaRhXUC0lEXF3NZ/sXgeog==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/validators/validators-link-integrity"},"_npmVersion":"11.14.1","description":"Link integrity validation primitive - broken links, anchor targets, redirects, and URL validation","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/validators-core":"0.3.0","@bernierllc/validators-utils":"0.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","jsdom":"^27.0.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@types/jsdom":"^27.0.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-link-integrity_0.5.0_1779250936427_0.6824891202276051","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@bernierllc/validators-link-integrity","version":"0.7.0","description":"Link integrity validation primitive - broken links, anchor targets, redirects, and URL validation","main":"dist/index.js","types":"dist/index.d.ts","keywords":["validation","validators","link-integrity","broken-links","anchor-validation","redirects","url-validation","content","primitives"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","dependencies":{"@bernierllc/validators-utils":"0.5.0","@bernierllc/validators-core":"0.4.0"},"devDependencies":{"@types/jest":"^29.5.0","@types/jsdom":"^27.0.0","@types/node":"^18.15.0","@typescript-eslint/eslint-plugin":"^5.57.0","@typescript-eslint/parser":"^5.57.0","eslint":"^8.37.0","jest":"^29.5.0","jsdom":"^27.0.0","ts-jest":"^29.0.5","typescript":"^5.0.0"},"repository":{"type":"git","url":"git+https://github.com/bernierllc/tools.git","directory":"packages/validators/validators-link-integrity"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build":"tsc","dev":"tsc --watch","test":"jest","test:run":"jest","test:coverage":"jest --coverage","lint":"eslint src --ext .ts","lint:fix":"eslint src --ext .ts --fix","clean":"rm -rf dist"},"_id":"@bernierllc/validators-link-integrity@0.7.0","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"homepage":"https://github.com/bernierllc/tools#readme","_integrity":"sha512-Ckg2AeoYLPuqKR/+tzmpk/IMc1L5ps9guwmStPhrHuLICP6kbSfzXcaJdBbrkVRlI/pxrqZCIdAUs8MBWWL8jg==","_resolved":"/home/runner/work/tools/tools/packages/validators/validators-link-integrity/bernierllc-validators-link-integrity-0.7.0.tgz","_from":"file:bernierllc-validators-link-integrity-0.7.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-Ckg2AeoYLPuqKR/+tzmpk/IMc1L5ps9guwmStPhrHuLICP6kbSfzXcaJdBbrkVRlI/pxrqZCIdAUs8MBWWL8jg==","shasum":"65db77373a6110653f7ee3bb644248fc45da0ca3","tarball":"https://registry.npmjs.org/@bernierllc/validators-link-integrity/-/validators-link-integrity-0.7.0.tgz","fileCount":26,"unpackedSize":72137,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBlpV4UxOOZp/XxxZiXLPO327nEib56AVzxhkqsMLb2dAiBatMrOMXEFeCOhk1lBixekhmL5a41aWyyE7yCdO40KkA=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6bc2410-87bf-4256-99c5-6fe8e613c048"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/validators-link-integrity_0.7.0_1779252223443_0.7610788530127919"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-09T19:15:09.118Z","modified":"2026-05-20T04:43:43.727Z","0.1.1":"2025-10-09T19:15:09.399Z","0.3.0":"2026-01-05T19:46:09.511Z","0.3.1":"2026-03-09T17:45:02.544Z","0.3.2":"2026-03-10T17:32:28.671Z","0.4.0":"2026-05-20T01:56:19.859Z","0.5.0":"2026-05-20T04:22:16.583Z","0.7.0":"2026-05-20T04:43:43.584Z"},"bugs":{"url":"https://github.com/bernierllc/tools/issues"},"author":{"name":"Bernier LLC"},"license":"UNLICENSED","homepage":"https://github.com/bernierllc/tools#readme","keywords":["validation","validators","link-integrity","broken-links","anchor-validation","redirects","url-validation","content","primitives"],"repository":{"type":"git","url":"git+https://github.com/bernierllc/tools.git","directory":"packages/validators/validators-link-integrity"},"description":"Link integrity validation primitive - broken links, anchor targets, redirects, and URL validation","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/validators-link-integrity\n\nLink integrity validation primitive - broken links, anchor targets, redirects, and URL validation.\n\n## Installation\n\n```bash\nnpm install @bernierllc/validators-link-integrity\n```\n\n## Usage\n\n### Basic Usage\n\n```typescript\nimport { validateLinkIntegrity } from '@bernierllc/validators-link-integrity';\nimport { createSharedUtils } from '@bernierllc/validators-utils';\n\nconst utils = createSharedUtils();\n\nconst input = {\n  links: [\n    { url: 'https://example.com', context: 'Example link' },\n    { url: '#section-1', context: 'Internal anchor' },\n    { url: 'http://insecure.com', context: 'HTTP link' }\n  ],\n  htmlContent: '<div id=\"section-1\">Content</div>',\n  pageUrl: 'https://mysite.com'\n};\n\nconst result = await validateLinkIntegrity(input, {}, utils);\n\nif (result.problems.length > 0) {\n  console.log('Link integrity issues found:');\n  result.problems.forEach(problem => {\n    console.log(`  - ${problem.message} (${problem.severity})`);\n  });\n}\n```\n\n### Create a Configured Validator\n\n```typescript\nimport { createLinkIntegrityValidator } from '@bernierllc/validators-link-integrity';\n\nconst validator = createLinkIntegrityValidator({\n  checkBrokenLinks: true,\n  checkAnchorTargets: true,\n  checkRedirectChains: false, // Disable redirect checks\n  checkProtocolConsistency: true,\n  maxRedirects: 3,\n  timeout: 5000\n});\n\nconst result = await validator.validate(input, utils);\n```\n\n## API Reference\n\n### `validateLinkIntegrity(input, options, utils): Promise<ValidationResult>`\n\nValidates link integrity for the provided links.\n\n**Parameters:**\n\n- `input` (LinkIntegrityInput): The input containing links to validate\n  - `links` (LinkContext[]): Array of links to validate\n  - `htmlContent?` (string): Optional HTML content for anchor validation\n  - `pageUrl?` (string): Optional page URL for protocol validation\n- `options` (LinkIntegrityOptions): Validation options\n- `utils` (SharedUtils): Shared utility functions from validators-utils\n\n**Returns:** `Promise<ValidationResult>`\n\n### `createLinkIntegrityValidator(options): Validator`\n\nCreates a configured link integrity validator.\n\n**Parameters:**\n\n- `options` (LinkIntegrityOptions): Validation options\n\n**Returns:** An object with:\n- `validate(input, utils)`: Validation function\n- `getMeta()`: Returns validator metadata\n\n## LinkIntegrityOptions\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `checkBrokenLinks` | boolean | true | Check for broken links (404s and other error statuses) |\n| `checkAnchorTargets` | boolean | true | Check for anchor target existence (#fragment validation) |\n| `checkRedirectChains` | boolean | true | Check for redirect chains |\n| `checkProtocolConsistency` | boolean | true | Check for protocol consistency (http vs https) |\n| `maxRedirects` | number | 5 | Maximum number of redirects to follow |\n| `timeout` | number | 5000 | Timeout for HTTP requests (ms) |\n| `checkExternalLinks` | boolean | true | Whether to check external links (outside current domain) |\n| `baseUrl` | string | '' | Base URL for resolving relative links |\n| `userAgent` | string | 'BernierLLC-Validators/1.0' | User agent string for HTTP requests |\n\n## Validation Rules\n\n### Broken Links (link-integrity/broken-links)\n\nDetects broken links that return 404 or other error status codes.\n\n**Reports:**\n- **Error**: 404 Not Found\n- **Warning**: Other HTTP error statuses (500, 503, etc.)\n- **Warning**: Network errors and timeouts\n\n**Skips:**\n- `mailto:`, `tel:`, `javascript:`, `data:` protocols\n- Anchor-only links (#fragment)\n\n### Anchor Targets (link-integrity/anchor-targets)\n\nValidates that anchor links (#fragment) point to existing IDs in the document.\n\n**Reports:**\n- **Error**: Anchor target not found in HTML content\n- **Warning**: Failed to parse HTML content\n- **Info**: Cannot validate anchor (no HTML content provided)\n\n**Validates:**\n- Elements with matching `id` attributes\n- Elements with matching `name` attributes (legacy HTML)\n\n### Redirect Chains (link-integrity/redirect-chains)\n\nValidates redirect chains and detects excessive or circular redirects.\n\n**Reports:**\n- **Error**: Excessive redirect chain (exceeds maxRedirects)\n- **Error**: Circular redirect detected\n- **Warning**: Long redirect chain (> 2 redirects)\n\n**Skips:**\n- Non-HTTP protocols\n\n### Protocol Consistency (link-integrity/protocol-consistency)\n\nValidates protocol consistency and recommends HTTPS usage.\n\n**Reports:**\n- **Error**: Mixed content (HTTPS page links to HTTP resource)\n- **Warning**: Insecure protocol (HTTP instead of HTTPS)\n- **Info**: Protocol-relative URL (//example.com)\n\n**Skips:**\n- Non-HTTP/HTTPS protocols\n\n## Examples\n\n### Check Broken Links\n\n```typescript\nconst validator = createLinkIntegrityValidator({\n  checkBrokenLinks: true,\n  checkAnchorTargets: false,\n  checkRedirectChains: false,\n  checkProtocolConsistency: false\n});\n\nconst result = await validator.validate({\n  links: [\n    { url: 'https://example.com/page' },\n    { url: 'https://example.com/missing' }\n  ]\n}, utils);\n\n// Result will contain problems for broken links\n```\n\n### Validate Anchor Targets\n\n```typescript\nconst htmlContent = `\n  <div id=\"section-1\">Section 1</div>\n  <div id=\"section-2\">Section 2</div>\n`;\n\nconst result = await validateLinkIntegrity({\n  links: [\n    { url: '#section-1' },\n    { url: '#section-2' },\n    { url: '#section-3' } // This will report an error\n  ],\n  htmlContent\n}, {}, utils);\n```\n\n### Check Protocol Consistency\n\n```typescript\nconst result = await validateLinkIntegrity({\n  links: [\n    { url: 'http://example.com' },  // Warning: insecure\n    { url: 'https://secure.com' }   // OK\n  ],\n  pageUrl: 'https://mysite.com'  // Mixed content detection\n}, {\n  checkProtocolConsistency: true,\n  checkBrokenLinks: false,\n  checkAnchorTargets: false,\n  checkRedirectChains: false\n}, utils);\n```\n\n### Validate Redirects\n\n```typescript\nconst validator = createLinkIntegrityValidator({\n  checkRedirectChains: true,\n  maxRedirects: 3  // Warn if more than 3 redirects\n});\n\nconst result = await validator.validate({\n  links: [\n    { url: 'http://example.com/redirect-chain' }\n  ]\n}, utils);\n```\n\n## Integration Status\n\n- **Logger**: not-applicable - Pure validation primitive with no internal state\n- **Docs-Suite**: ready - Markdown documentation, TypeDoc API documentation\n- **NeverHub**: not-applicable - Stateless primitive validator\n\n## Performance\n\n- **Sub-100ms** validation per link for local checks (anchors, protocol)\n- **Network-bound** for broken link and redirect checks (timeout: 5000ms)\n- **Parallel execution** recommended for multiple links\n- **Rate limiting** built-in for HTTP requests (10 requests per second)\n\n## Architecture\n\nThis is a **primitive validator** following BernierLLC validators architecture:\n\n- **Pure validation** - Returns problems, never throws exceptions\n- **No policy enforcement** - Implementors decide what constitutes \"passing\"\n- **Composable rules** - Each rule focuses on a single aspect\n- **Evidence-rich** - Provides actionable information for debugging\n- **Tool-agnostic** - Works in CLI, web apps, CI/CD, IDE plugins\n\n## See Also\n\n- [@bernierllc/validators-core](../validators-core) - Core types and interfaces\n- [@bernierllc/validators-utils](../validators-utils) - Shared utilities\n- [@bernierllc/validators-runner](../validators-runner) - Validation orchestration\n\n## License\n\nCopyright (c) 2025 Bernier LLC. All rights reserved.\n","readmeFilename":"README.md"}