{"_id":"@casoon/astro-post-audit","_rev":"32-83c509bdd228e2a3ab36f29dffca25fe","name":"@casoon/astro-post-audit","dist-tags":{"latest":"0.6.0"},"versions":{"0.1.3":{"name":"@casoon/astro-post-audit","version":"0.1.3","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"license":"MIT","_id":"@casoon/astro-post-audit@0.1.3","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"bin":{"astro-post-audit":"bin/run.cjs"},"cpu":["x64","arm64"],"dist":{"shasum":"9bd1f146e0c103bab28a8ce0ecdc6c4ac0bab946","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.1.3.tgz","fileCount":9,"integrity":"sha512-FYY37enz5fkhopxLORiC5zNoZmcmL3ClCst9JDo4Hjx6Z9eweq0OH9w9orKXx4wTECDa21P+xMK7tg88asFnoA==","signatures":[{"sig":"MEUCIHiBafYc7WURL+lm/2dBfhVHnKcbxRacnCUx24ApOTcJAiEA7MKnD8nUYq9AykzLkWv8KsQO4O2Lfis8L6NZCN1eI/Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10965},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"3e4da6faaf6b3990e9360ca362c45707b8e64b61","scripts":{"build":"tsc","postinstall":"node bin/install.cjs"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast post-build auditor for Astro sites: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^6.0.0-beta.15","typescript":"^5.9.3","@types/node":"^22.10.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0 || ^6.0.0"},"peerDependenciesMeta":{"astro":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.1.3_1772031788793_0.15501816352474762","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@casoon/astro-post-audit","version":"0.2.0","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"license":"MIT","_id":"@casoon/astro-post-audit@0.2.0","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"bin":{"astro-post-audit":"bin/run.cjs"},"cpu":["x64","arm64"],"dist":{"shasum":"7f2fa3127a4ba0a7456df86e7756816cc2d897da","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.2.0.tgz","fileCount":13,"integrity":"sha512-daCZx4NLtFUaNiYZI/Cv7aDef71euNi0dP7WoeWxec7djRoRy1Qouou1HRVGKj78NoOsiu/S2uIXoAEms5TGZg==","signatures":[{"sig":"MEUCICm+e9tFBWlhUI5oilYVbprPNHuj/MJICs9PDHjhek8mAiEAq7CgngK4TYv2vofaXpTbW5eBtp9VO+DqIIZlUhaHdn0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3214885},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"ff38b3b0ab2460b88e4639efd160f18a9239d847","scripts":{"test":"tsc && node --test dist/integration.test.js","build":"tsc","postinstall":"node bin/install.cjs","prepublishOnly":"tsc"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.2.0_1772730196123_0.8004257263880501","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@casoon/astro-post-audit","version":"0.2.1","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"license":"MIT","_id":"@casoon/astro-post-audit@0.2.1","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"bin":{"astro-post-audit":"bin/run.cjs"},"cpu":["x64","arm64"],"dist":{"shasum":"c2c138cd5504c094c6e759e58caa8a31327159c7","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.2.1.tgz","fileCount":13,"integrity":"sha512-jJzD0MIheolcII4IxQp4aVjWP5BY32+gpizcqfVjCS+jvP6idJD+CJiFLN+Flg/nK5zuu38SOHhuw40tm82WAA==","signatures":[{"sig":"MEQCIH8CXsh+XaQIgpwrBjeyGE6UwM6dBNyN+PgNpj65e/8XAiBwUIvyGGrHRWM4V/GULTUbCTBA++v/jKixKaB2vNEFtQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3217815},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"a9da75100b41bc46f052899419194ded843df3b6","scripts":{"test":"tsc && node --test dist/integration.test.js","build":"tsc","postinstall":"node bin/install.cjs","prepublishOnly":"tsc"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.2.1_1772735478603_0.36573780116267973","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@casoon/astro-post-audit","version":"0.2.2","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"license":"MIT","_id":"@casoon/astro-post-audit@0.2.2","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"bin":{"astro-post-audit":"bin/run.cjs"},"cpu":["x64","arm64"],"dist":{"shasum":"110173bd8ad229c632b9e31010beb93acaee5f83","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.2.2.tgz","fileCount":13,"integrity":"sha512-loT8vkyuJaeG2cdyFZ7e54BSFPhGga8UKASwfsudG0O5ZZJXoF9QODdIPz+8JrBztZrdE/jALJuzSP1mO49Erw==","signatures":[{"sig":"MEUCID+j84LlFgY/hr0xW/GkPG8j/AIxJMVvaJPmdarYg1eOAiEAwkgWvSHoOXM9TRePYqZM5ED+TqdPi7QgrTjvFKG/cp4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3216203},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"78971f6dcb3be43352f038adfb2e048353e1026e","scripts":{"test":"tsc && node --test dist/integration.test.js","build":"tsc","postinstall":"node bin/install.cjs","prepublishOnly":"tsc"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.2.2_1772737612492_0.766767531391789","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@casoon/astro-post-audit","version":"0.2.3","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"license":"MIT","_id":"@casoon/astro-post-audit@0.2.3","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"bin":{"astro-post-audit":"bin/run.cjs"},"cpu":["x64","arm64"],"dist":{"shasum":"44e779b81cd5c4a913489678a370c9502cab9f1a","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.2.3.tgz","fileCount":13,"integrity":"sha512-gcAWxagYKdWkxFf5CLg0WjdHTNNNyIPCSBZ4LIYJcEFY/6drVcOjAI0rS/Uem5xtaIOhKjr7RIvWCdkvJ+yoxA==","signatures":[{"sig":"MEUCIGyu21Y6EhC71C1Kp92gauGLmHr5YlUHCc54rqfVPGvXAiEA5MkzxZblIqewfjgC7uI1RIUlOBNuv4rSzK04xHAAalM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3216732},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"b64f31a1dc8b293f867741fa966581f34c0dfd94","scripts":{"test":"tsc && node --test dist/integration.test.js","build":"tsc","postinstall":"node bin/install.cjs","prepublishOnly":"tsc"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.2.3_1772739218346_0.9160048499185036","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@casoon/astro-post-audit","version":"0.2.4","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"license":"MIT","_id":"@casoon/astro-post-audit@0.2.4","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"bin":{"astro-post-audit":"bin/run.cjs"},"cpu":["x64","arm64"],"dist":{"shasum":"837c2815148a267a1b01aa83a853a1b009217b94","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.2.4.tgz","fileCount":13,"integrity":"sha512-LZFlzRC6bBXaJWvcKxQzhphie8A8pQHoYDaTeJsSWKgl+LSKckyhwl05HPvYX4hP/uY3opxyjG/4npfk7Od0Sg==","signatures":[{"sig":"MEUCIQC0ml7/NZes6YWmKDPwqtIbk5ruEsjn8XenpTzZfhVjZwIgCmiiLZASIWVKCzIRtCrmuPMZqHNkGoNvfgIYn/FFT5M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3216179},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"bdda82db967997ecd23efa48f0c685cc6fd45ed8","scripts":{"test":"tsc && node --test dist/integration.test.js","build":"tsc","postinstall":"node bin/install.cjs","prepublishOnly":"tsc"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.2.4_1772745243837_0.8255832086252517","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@casoon/astro-post-audit","version":"0.2.5","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"license":"MIT","_id":"@casoon/astro-post-audit@0.2.5","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"bin":{"astro-post-audit":"bin/run.cjs"},"cpu":["x64","arm64"],"dist":{"shasum":"855f1b93cdaa2526eada3b2a01b3fdee6a53a8fe","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.2.5.tgz","fileCount":17,"integrity":"sha512-we/Uid1sVbq5nKCt0BiB2CU3ws2e34jYsx85dLuBqG6JdfjdufCjlUn1HgORoKFI4g1I5UDmt8PpvA/u234zVw==","signatures":[{"sig":"MEUCIBU8YqJQZTO9Ku1mUrstHdN+FNrH8EyabQJN92GhGRWPAiEA6cwr4xgwB/M9uq/Uc8YnFMvO4H7CjEVx/z7QtxzjVxo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4711075},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"a25f4bf8009d3d65c7ee024032a4ed2935fd2855","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"tsc","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.2.5_1772814124232_0.7159318495923135","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@casoon/astro-post-audit","version":"0.2.6","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"license":"MIT","_id":"@casoon/astro-post-audit@0.2.6","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"bin":{"astro-post-audit":"bin/run.cjs"},"cpu":["x64","arm64"],"dist":{"shasum":"802cef8d99643c89ca98c99f8c7454b7d64293d0","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.2.6.tgz","fileCount":17,"integrity":"sha512-vhalWk6+miSNQ5LbC0p8ekC1Q00HBmrAFsveB8E+Jx7sCmqyyrcsZK1BpAXOjToHn+S5Y8c2BZC2gDJfOZeOKg==","signatures":[{"sig":"MEUCIQDYbnzjdsdmOAU9mE+w+lCGmmGxvSyjT31x4Z2iT4QarwIgeCQj4c0vlTLz0VVJ5zEdUZLpaSF96hstW3S54oPqxag=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4712648},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"b3f41480d0acbad4ff2407dc763a1427608422b8","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"tsc","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.2.6_1772825506646_0.34415995916125697","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@casoon/astro-post-audit","version":"0.2.7","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"license":"MIT","_id":"@casoon/astro-post-audit@0.2.7","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"c2525d6e5f6324a83640a04f68d789ca45aad602","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.2.7.tgz","fileCount":16,"integrity":"sha512-0rb4NNaBnw1sYWNGdO5DFL32TctSEGtiymCd+gmbmE4mfPaXvPA0qPYjoEpp47iLryuTUqVX9Mw9a7Elxg9tFw==","signatures":[{"sig":"MEUCIQC5LWAlO22+vhcdW1uU5+EQMRztrC7cauqQtOHuHpD3UAIgVGCAxnaFtUEDV7P+4LHrCGfzjuEvYJPEs88RNk+fc9E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92542},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"830f855a16c82fcc47d83a88369a0618d74e13ba","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"tsc","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.2.7_1778306812498_0.7695665794122406","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@casoon/astro-post-audit","version":"0.2.8","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"license":"MIT","_id":"@casoon/astro-post-audit@0.2.8","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"a56ded92d2ae1a68df9a3e9628bb5690f0a22952","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.2.8.tgz","fileCount":17,"integrity":"sha512-HtnlrvnBGcekPpJnXE93OTlKrQF/hApPiEb3zXc2ZnhxTN8mBMj62BoDIJxw1llRMJpt886xpuuAEPZRr6aC4Q==","signatures":[{"sig":"MEQCIFJkZ9TaBIQZ7HUG9DzsGSv9YXZBeE7wzD16XGxtzsPKAiB04ghhpEvAcnz5hgU5RzBDSNHxEsuYWmWvO75JdJ4AIw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":114153},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"c2b5ab5776237c11733daa89dd9a5dcf34f248d6","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.2.8_1778337349444_0.8677965410618826","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@casoon/astro-post-audit","version":"0.2.9","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"license":"MIT","_id":"@casoon/astro-post-audit@0.2.9","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"aff49d34aa2767b07533ac234a274d77a26f4831","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.2.9.tgz","fileCount":17,"integrity":"sha512-8fYbhEuGgxHzglH6he4fSvAXhjo05ttcP40R6Mg+jpci6uURfN+huJsI/GS/0UxDlP3AdHzffqL37NX/Bcu5vA==","signatures":[{"sig":"MEQCICNJrAlNlCD1YauztSxQaJM/c8k/ax7OcYYBWr3FbVX2AiBdtI4cC/VKWc0fJFmCPQgvI26skF9yq7uHwRR9/+cEuA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":114153},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"394d060f9c311d4fab5456f23c28b0fe7ab2f6cd","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.2.9_1778340417487_0.8848202371540603","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"@casoon/astro-post-audit","version":"0.2.10","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"license":"MIT","_id":"@casoon/astro-post-audit@0.2.10","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"87b8636720a7b57a588c6ed60b27aba91d5654e5","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.2.10.tgz","fileCount":17,"integrity":"sha512-4mpCYo/7/cZTJUymLpCtiWaed/4krTDDTqaKHy2eHqFCwS/okc7aTYRmSvLQgxPbl01+EyH9dHbXwTZ/+ziNOQ==","signatures":[{"sig":"MEUCIBpzXto+48eIwQv3lCLoiK7UMay7pKGdBcvwEOh/hti1AiEA7xCeISRoXT3pWNPmBHcc3qcwn20sQYi/AX2cS04QnRU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":114205},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"89af69e0795c514665cfb69619eef719c612cc45","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.2.10_1778356195541_0.3471808393280771","host":"s3://npm-registry-packages-npm-production"}},"0.2.11":{"name":"@casoon/astro-post-audit","version":"0.2.11","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"license":"MIT","_id":"@casoon/astro-post-audit@0.2.11","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"885ef875c8b3bbb475bd82628d45e3c4ae4949e3","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.2.11.tgz","fileCount":17,"integrity":"sha512-3MjkGLvmwMtbDsaWtKNdWWI0rvnNSm+4OlEaFjJEYUE6CKWJiswXtBN46RtIqXFztoTDGn7RuD248tTRaMosPw==","signatures":[{"sig":"MEUCIH7J+Y2YhOrx2cxohrwg5EJQulh5KjGE/XGyt5t2xFarAiEAsKNcv3esHaTcAEX96Jmaf8h8nPgeZ6qYpO7B2CArrZ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":114775},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"606e299316f785fd9dba4473172196fb86739544","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.2.11_1778482157584_0.2910092194119942","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@casoon/astro-post-audit","version":"0.3.0","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.3.0","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"5723af1d84cd891cce3fbb8ba2c3c89a832174d8","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.3.0.tgz","fileCount":17,"integrity":"sha512-dqVrZjBjpB6DIAyGc/t+8YMr+uxejhA3y+tMz0ZhRYmXrKTbILOfjSFqAvtJYeVVnroXH5xy3rqdGiDUGoRCnA==","signatures":[{"sig":"MEUCIQDKOJ1Di+UbhhBlCUu/E/YrMWFn4VEjetTJIwzl+GlBkAIgQNZ4oKpoqTQgT43ygY3fcXceUtWsGIwkf1ZtJGS6m10=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141280},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"6c95a18352be502661ee6dcc37f3c07dc0f49e54","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0 || ^7.0.0-alpha.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.3.0_1779741352704_0.8378935150908113","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@casoon/astro-post-audit","version":"0.3.1","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.3.1","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"9b4d93b4b94bcd3c8c829fd4317a95681eb92e45","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.3.1.tgz","fileCount":17,"integrity":"sha512-BcE6kvv/Ua16QVmTuKEN8gH0qCl6Lx7EkrOSJVPvgs8bnkZCppG+YJkN89+dGg7aiTUzuHh8aqVg0SVqv1oo2g==","signatures":[{"sig":"MEUCIQDGwm9Z/CAFnCOpFsw7qFf+eEcUS7gjc7Ea+aGVTYQIZAIgIZBxto65OLXrhd6RM6glbNvQNp8mLrEwbvPeuGACWfI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141280},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"007c98127690d3f25be9ec1498632e4efe42f2f8","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0 || ^7.0.0-alpha.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.3.1_1779746509769_0.5252449530894954","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@casoon/astro-post-audit","version":"0.3.2","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.3.2","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"fbe1391e605e04c617f7a63d6142094c38435989","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.3.2.tgz","fileCount":17,"integrity":"sha512-0/gGKC3LQDtfe2E6kM+5OgoEBFh0Zh+O5CWXlum++sOUP/5SwKya/tD31evSpV6kXtmigNNeTT0jjttceLNKhg==","signatures":[{"sig":"MEUCICRHwlJlijx29g/++Bqjo+Kuk2+MT3xOU1paWhfmFrbSAiEAu4Ioz/+5vC6xhHLCQ80Iae32if8iMcjvzGl+vQlQqJY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141280},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"c69cf04e3156aa6e96990473919410f3226a7662","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0 || ^7.0.0-alpha.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.3.2_1779783246070_0.14842691941539576","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@casoon/astro-post-audit","version":"0.4.0","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.4.0","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"0070e0af99d4a13c7bb62ac200f96ba7d4768d09","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.4.0.tgz","fileCount":17,"integrity":"sha512-NTcMBXKY/ZbT4TyDg+tmsxAlHuVYUaAJ7fsr33A9EDNQJbhmnbxJ6DSv8jB4nnuRKfjBMBFmrStLcpq56VLIeA==","signatures":[{"sig":"MEYCIQC9N2AQHeJ3Q0cwtO7LfR2o4bg3rMF/t+W8i+lXdCNV7QIhAOLQ8zMLP3tuberFcz5I6tJ3gJIHU4BnzQar7YeeFz6C","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":150131},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"3683d6c453918cb289cfac2d4a9dc916c54212e3","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0 || ^7.0.0-alpha.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.4.0_1780276977624_0.1955248326487229","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@casoon/astro-post-audit","version":"0.4.2","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.4.2","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"50368821f245fbdeccada40b6c78d40d0817ca3e","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.4.2.tgz","fileCount":17,"integrity":"sha512-T1gUS/yobD4kOh1O8mVrrV8ulvaFA9Fc7Yow7bR/JMwipWL8tjHLKqjBZichindszwpDfWcokor9uJs2iyc7gQ==","signatures":[{"sig":"MEUCIAUsR3bFEQf1LIYfeNw5PMUz2Jq91Mfh0F3hsnhRnuKEAiEA/C3bcEMMDZXByuKWMYGu59sq4GyJ0YH02zuYjmgtoE0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158706},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"ead9bc1d89bb76781fd7569f4c27d93d86bbf511","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0 || ^7.0.0-alpha.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.4.2_1780316479777_0.6674139107213564","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@casoon/astro-post-audit","version":"0.4.3","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.4.3","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"7f90c5648878d7b8adb804a0da607a4c5f19cebf","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.4.3.tgz","fileCount":17,"integrity":"sha512-3jsDXswSl2PixTkH67WAfnHClRZ3oTRbLp5h2pU6hi1tI2Q4OY/VcY3RYiR6UXFVXh5qQw+UcUIR/uH9BYDtgA==","signatures":[{"sig":"MEUCIQCDEKqdTUi1pXhVcIz18eHq9uPcnZbWpUYQXWbsEQn1CQIgEXb6UJ+Ndotr8rkVk3gjHpV8WPJJMhpG2bidrqv5evw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158706},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"143fa6284fd901b2e250ef13b76094ff07e71931","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0 || ^7.0.0-alpha.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.4.3_1780318798317_0.8882121779516525","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"@casoon/astro-post-audit","version":"0.4.4","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.4.4","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"e88547fee9bbfe066b285a35428531bf41b0ddab","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.4.4.tgz","fileCount":17,"integrity":"sha512-m2xagajHzNTzvcLB9ttWLE4dW7xOj27EmqEgN370FuQuafvd8muwPHXbPb+XmbwyuHeiRizdAPDed5GuHYodeQ==","signatures":[{"sig":"MEUCIQDimPv4YLXw89zHxRHcnEqy0wjQL1YHxZeTlXQEOWLYEgIgBPoYqzyAFlIjFMxUwnLy4O9lgeoH2kXnWsOKgwJ1as0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158706},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"a55f2bad3696b5d0244ac8b3ab6c92164c04448a","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0 || ^7.0.0-alpha.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.4.4_1780319468773_0.17473407452783207","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"@casoon/astro-post-audit","version":"0.4.5","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.4.5","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"41c78973ab2f7f8bee66e4d3dd1345380b376ae5","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.4.5.tgz","fileCount":17,"integrity":"sha512-T1XOSkGF3+UkyDdmfz8DZIJ2lnIn7T6791O5eM1droT6XIu1zCjjihvrQKR9J7Wt0TR9LH3SaaouEOzYwsX/hA==","signatures":[{"sig":"MEYCIQDT9Y5CRSk1EGDhW7rRvNd1EDX3uYIBaOaqVjkbfzr0wgIhAL01Dg/AZWKCf/WswJ+Wx6zfEXEYLjKJLAPk/cVsax58","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159182},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"a55f2bad3696b5d0244ac8b3ab6c92164c04448a","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^5.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0-beta.0 || ^7.0.0-alpha.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.4.5_1780324218945_0.8931811319153018","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"@casoon/astro-post-audit","version":"0.4.6","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.4.6","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"4b9e2cfe465569da8cf61d6269817e74f30a003b","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.4.6.tgz","fileCount":17,"integrity":"sha512-Jc78dGv9G4ExGFIagL/M5ynIFYAysxO7jY5IXmyK/rZWz0jxV7pdk/FV/TyvVWpKSRF4B9oLr020Ssf/3KufMw==","signatures":[{"sig":"MEYCIQC02iiR7gyynZuEoUSGe0dAQ+2UXALm+Z20gNCZq1LMaAIhAKFwqhJ4nqj065FfNr8x9eLn9abNgFF9bTvHtcgq4+J+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159407},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"746e480222fa1b87b9b0af1caace9b366de91284","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^7.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.4.6_1782201467004_0.7303985647537263","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@casoon/astro-post-audit","version":"0.5.0","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.5.0","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"a9f9fa1502e1b3f076723147d934c7a1c3ccb1eb","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.5.0.tgz","fileCount":17,"integrity":"sha512-tzBUz9Jz9WtWqzyJPPE5tJvyyq/wSHlSmMRhq3B3BtgEsekba63u+gdCIvKM8PXs7MAFZAOZ8N4WJrWpvm3kzA==","signatures":[{"sig":"MEQCICecr8DzluCXgMGLT9JmTeRBIniW4QKypQ7Gr5lfuPaNAiBAo4QKRTzmSTm85eC4J5IUyWUvaN8sVXGIx71aqnIniA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":179961},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"d43f56ccd32e43a38cd84c4fc4134f97e6ec12a0","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","test:unit":"tsc && node --test dist/integration.test.js","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^7.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.5.0_1785318861449_0.566600005527045","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@casoon/astro-post-audit","version":"0.5.1","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.5.1","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"1345e9ad010c1c00c54748646f7d10ff85a445c8","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.5.1.tgz","fileCount":17,"integrity":"sha512-40ONEJPTWJVZUX3ZFP+oJbpOGiFPpsaPTBCfb6ZpAaSRAsY4HcFOno2It3Xm8BUK2EL3Q4y+eI0IKkfXN/wddw==","signatures":[{"sig":"MEYCIQDT31a0tx9xlBixqLBM+z/qUGO5ShpGvZQLojA2yJ89QAIhAMuX7njanWIGpDtHvd59WUukluynSzzV/O3NJPLGuLoz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":180517},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"4263f33899889c471cbf58d151078065296541ba","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","test:unit":"tsc && node --test dist/integration.test.js","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^7.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.5.1_1785322109327_0.5476876394859584","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@casoon/astro-post-audit","version":"0.5.2","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.5.2","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"aade5aa4a720779e6b535426fdfd4cf5ff948808","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.5.2.tgz","fileCount":17,"integrity":"sha512-iosqXGGT49z1Ih04H9IJ2DTcalYNu1SKpp3hoObC4a6lBqTPXsD40PXnxhJ40z7hwwzOSspjVxmUfYhBKrQ9tg==","signatures":[{"sig":"MEYCIQDAcJ4r0bCuRL1f0a5X9bgXMvCPHb8bVa1FSLdWXv1vPwIhAL3opQLBvmL0wEHcN/FpPdZzyGFYKnvacR2ncWRK4CLz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":188380},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"9720dbeb1407e7277d059171e41126fa268b33e5","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","test:unit":"tsc && node --test dist/integration.test.js","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^7.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.5.2_1785334645763_0.7477541722731953","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@casoon/astro-post-audit","version":"0.5.3","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.5.3","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"daf43e2c455f7f0d6581bc2dbc541a54c2017b6c","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.5.3.tgz","fileCount":17,"integrity":"sha512-sHem+EgYhBJ51hG6z2RNNbPuiRJmSV9M6DHGBvXiyn0/H3Vy/rAIfTEIDBYhfRPT/pa87MjqhGiSaizqkMmbIQ==","signatures":[{"sig":"MEYCIQDF8x4BXI68K4jGQ8XkuBaXb1cKKGw46hi0L4k+UJ7QngIhANdH3+0IrSlhgEkJaXHo2xMFs3TnIymo9aHbQRAJheSF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":194511},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"04769836e50904ceb3d0517904e56e2a3e21010a","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","test:unit":"tsc && node --test dist/integration.test.js","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^7.0.0","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.67.1"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.5.3_1785335804158_0.8764194262073701","host":"s3://npm-registry-packages-npm-production"}},"0.5.4":{"name":"@casoon/astro-post-audit","version":"0.5.4","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.5.4","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"3db80ca41c5d0ef9e9ce8a9057acc640a9f93364","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.5.4.tgz","fileCount":16,"integrity":"sha512-6ggvqPOP45P1yeFZD8bV0D5WrE9Od5o/JercrHR2+Et1jubFt4HcdZt6zHX6enAF9dPMF1EZoIRJq/DuJUG1fw==","signatures":[{"sig":"MEQCIDo8lLcGsQJKqyP/LXP+vh440Mq+UCQ3zjt5gI1LjL6kAiBYJQ5N4rRG7PZi4xO2KoPu5JjWtJvYicsACQOv/Sc8Fw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":207473},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"4f7a88df199c55b8625f274c9759168a7c9da85b","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","test:unit":"tsc && node --test dist/integration.test.js","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^7.2.10","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.68.0"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.5.4_1788433144636_0.9027640064945912","host":"s3://npm-registry-packages-npm-production"}},"0.5.5":{"name":"@casoon/astro-post-audit","version":"0.5.5","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.5.5","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"f971b9c208d35da664f59b9cf7d9a74865f1602a","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.5.5.tgz","fileCount":16,"integrity":"sha512-8tol5SyGRTWn3RmOljOcj/kXNUvUFIORrCentuxtc057KPbNmV0H4Pnw89yrvKHI7WyfKeXZsECBweJH99oTVw==","signatures":[{"sig":"MEQCIHsfbWFdae0OabrO66BWjzf7HubrZeTqF/QcEIEcvSgvAiAvf/qADswVuMfmS34ewMQMG0qBKhvUUq9oGUnQ2F3eLg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":207601},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"568526145a8941fbfce3667531e46b865f6ce984","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","test:unit":"tsc && node --test dist/integration.test.js","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^7.2.10","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.68.0"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.5.5_1788443666226_0.27803021549634277","host":"s3://npm-registry-packages-npm-production"}},"0.5.6":{"name":"@casoon/astro-post-audit","version":"0.5.6","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.5.6","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"559139d2b7f322994780489b1f0fae3d957c8fbb","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.5.6.tgz","fileCount":16,"integrity":"sha512-J5YOBkS2j/lT0YbU7L3rIx5pqljDLsGBm/O6ctvw98V2966W2jUH9PEb8dFfZvivQL6C2fd8QbDpxQx8tCQTmg==","signatures":[{"sig":"MEQCIFqowx55qiEg+Z7Cb4R5O4iMfcoryfOBJFywYAIqbRu9AiAWIoobyUpt8W3Hn/rCGoSUmefk8v4uTaS5HRyveG8wKw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":207601},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"4f99cab93316bf733ec574e967117a82f8f9bd76","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","test:unit":"tsc && node --test dist/integration.test.js","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^7.2.10","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.68.0"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.5.6_1788516105173_0.5222965742847321","host":"s3://npm-registry-packages-npm-production"}},"0.5.7":{"name":"@casoon/astro-post-audit","version":"0.5.7","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.5.7","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"e9c034847db738fa713ffa79869e9e8462ceb3ce","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.5.7.tgz","fileCount":16,"integrity":"sha512-ZT5rOLq03611rhtSdcmNhXwIZuXZxZGbuWgQrHjRNMqwlYOOFPZ78fvJCkBmsLk/5J5b7pJEH9HX8cCZu4PngA==","signatures":[{"sig":"MEUCIFcZ4G5eRIB+f7N3g2LeXhRphyfJqgo4zUEmLDudOLqEAiEAiIIq4LazES6Qx/I67ip0bvMK41S8ndMc9GU4K5LRLq4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":215776},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"25ca849f6ee62493665e38309165c8a48a920b1a","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","test:unit":"tsc && node --test dist/integration.test.js","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^7.2.10","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.68.0"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.5.7_1788946987562_0.2944614005188655","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Missing GitHub binary assets; please upgrade to 0.6.0."},"0.6.0":{"name":"@casoon/astro-post-audit","version":"0.6.0","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","_id":"@casoon/astro-post-audit@0.6.0","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/astro-post-audit#readme","bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"os":["darwin","linux","win32"],"cpu":["x64","arm64"],"dist":{"shasum":"b9e4bee768d65de458ecda5412508f1b89870787","tarball":"https://registry.npmjs.org/@casoon/astro-post-audit/-/astro-post-audit-0.6.0.tgz","fileCount":16,"integrity":"sha512-jO0dCqqUC9PiPb2PUmbnqkHCYLw8x60AefU2LEMTu2FUQUM+JhY15TyTrrtIhZOgmnzWc/nsZgdCRaB4cqrmqA==","signatures":[{"sig":"MEYCIQDFvYbi2z2WwQCjn1HXPGL9Wb37Ijoi8X17oPmtdjMsqwIhAIE7UmyBU7Y8o+JrFYshvSNdoHwivK1Ej23BJSQGUrXJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":217666},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./schema":"./schema.json"},"gitHead":"9250a66e432365612532d036937467b0909d4232","scripts":{"test":"tsc && node --test dist/*.test.js","build":"tsc && npm run generate-schema","test:unit":"tsc && node --test dist/integration.test.js","postinstall":"node bin/install.cjs","verify:binary":"node scripts/verify-binary.cjs","prepublishOnly":"node -e \"require('fs').copyFileSync('../../README.md','README.md')\" && tsc && npm run generate-schema","generate-schema":"typescript-json-schema tsconfig.json PostAuditOptions --noExtraProps -o schema.json"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"_npmVersion":"11.6.2","description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"astro":"^7.2.10","typescript":"^5.9.3","@types/node":"^22.10.1","typescript-json-schema":"^0.68.0"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/astro-post-audit_0.6.0_1789029758501_0.847303559842018","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-02-25T15:03:08.689Z","modified":"2026-09-10T08:43:26.612Z","0.1.3":"2026-02-25T15:03:08.937Z","0.2.0":"2026-03-05T17:03:16.385Z","0.2.1":"2026-03-05T18:31:18.856Z","0.2.2":"2026-03-05T19:06:52.738Z","0.2.3":"2026-03-05T19:33:38.624Z","0.2.4":"2026-03-05T21:14:04.100Z","0.2.5":"2026-03-06T16:22:04.484Z","0.2.6":"2026-03-06T19:31:46.888Z","0.2.7":"2026-05-09T06:06:52.636Z","0.2.8":"2026-05-09T14:35:49.571Z","0.2.9":"2026-05-09T15:26:57.634Z","0.2.10":"2026-05-09T19:49:55.686Z","0.2.11":"2026-05-11T06:49:17.728Z","0.3.0":"2026-05-25T20:35:52.855Z","0.3.1":"2026-05-25T22:01:49.924Z","0.3.2":"2026-05-26T08:14:06.202Z","0.4.0":"2026-06-01T01:22:57.807Z","0.4.2":"2026-06-01T12:21:19.937Z","0.4.3":"2026-06-01T12:59:58.465Z","0.4.4":"2026-06-01T13:11:08.937Z","0.4.5":"2026-06-01T14:30:19.119Z","0.4.6":"2026-06-23T07:57:47.143Z","0.5.0":"2026-07-29T09:54:21.586Z","0.5.1":"2026-07-29T10:48:29.487Z","0.5.2":"2026-07-29T14:17:26.007Z","0.5.3":"2026-07-29T14:36:44.303Z","0.5.4":"2026-09-03T10:59:04.775Z","0.5.5":"2026-09-03T13:54:26.382Z","0.5.6":"2026-09-04T10:01:45.314Z","0.5.7":"2026-09-09T09:43:07.691Z","0.6.0":"2026-09-10T08:42:38.656Z"},"bugs":{"url":"https://github.com/casoon/astro-post-audit/issues"},"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"info@casoon.de"},"license":"MIT","homepage":"https://github.com/casoon/astro-post-audit#readme","keywords":["astro","astro-integration","seo","audit","accessibility","static-site","wcag","canonical","links"],"repository":{"url":"git+https://github.com/casoon/astro-post-audit.git","type":"git"},"description":"Astro integration for post-build auditing: SEO, links, and lightweight WCAG checks","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"readme":"# astro-post-audit\n\nFast, offline post-build auditor for Astro sites — SEO signals, internal link consistency, and lightweight WCAG heuristics against your `dist/` output, with 33 check modules covering structured data, performance, privacy, and more. Static analysis only: no browser, and no network calls unless opt-in external-link checking is enabled — runs in <1s on typical sites. Recent releases added per-route CSS payload analysis, static Astro/Tailwind source analysis, offline HTML5 conformance validation, and C2PA Content Credentials verification.\n\n## What's new in 0.6.0\n\n| Area | What | Rule IDs | How to enable |\n|------|------|----------|---------------|\n| Speed mode | New `mode: 'fast' \\| 'full'` top-level option, orthogonal to `preset`. `'fast'` forcibly disables `rules.html_validation` regardless of how it's configured, for quick local/dev builds on large sites. `'full'` (default) is unchanged behavior | — | `mode: 'fast'`. See [Speed mode](#speed-mode) |\n\n## What's new in 0.5.7\n\n| Area | What | Rule IDs | How to enable |\n|------|------|----------|---------------|\n| CSS architecture | Measures directly referenced local stylesheets and inline CSS per route, with configurable payload limits and median-based outlier detection | `css-architecture/route-payload`, `css-architecture/route-outlier` | `rules.css_architecture.enabled` |\n| Tailwind source analysis | Handles normal Astro `class:list` expressions, ignores build/dependency directories, distinguishes `justify-*` properties, and detects same-axis spacing conflicts | `source-analysis/utility-conflict`, inventory and complexity rules | `rules.source_analysis.enabled` |\n| Defaults and schema | Runtime, TypeScript and JSON Schema defaults are aligned and covered by regression tests | — | Automatic |\n| Render blocking | Removes the blanket recommendation to preload every stylesheet; sync scripts and missing third-party preconnects remain checked | `render-blocking/sync-head-scripts`, `render-blocking/missing-preconnect` | `rules.render_blocking.enabled` |\n\n## What's new in 0.5.5\n\n| Area | What | Rule IDs | How to enable |\n|------|------|----------|---------------|\n| Content-style config | `density_per_1000_words` now matches the documented TypeScript/schema value; invalid JavaScript rule types fail early | `content-style/*` | Automatic |\n| Astro islands | Framework-generated client-island runtime styles no longer produce HTML conformance findings | `html/schema.html5` | Automatic when `rules.html_validation.enabled` |\n| HTML validation docs | Clarifies body-level `<style>` handling and the intentional `role=\"list\"` accessibility workaround | `html/assertion.roles.unnecessary-list` | See [HTML5 conformance validation](#html5-conformance-validation) |\n\nSee [C2PA provenance](#c2pa-provenance) for the full configuration.\n\nEarlier releases (0.3.0–0.5.4) added, among other things: C2PA Content Credentials verification (`rules.c2pa`), expanded offline HTML5 conformance validation (`rules.html_validation`), static Astro/Tailwind source analysis (`rules.source_analysis`, see [Source analysis](#source-analysis-astro--tailwind)), font-loading and View Transitions checks, AI visibility and UX heuristics, opt-in content-style heuristics for \"reads like AI\" writing, redirect/robots.txt/hreflang/GDPR checks, and the default-on accessibility and image checks described in [Configuration](#configuration) below. Full history: [GitHub Releases](https://github.com/casoon/astro-post-audit/releases).\n\n## Installation\n\n```bash\nnpm i -D @casoon/astro-post-audit\n```\n\n## Setup\n\n```js\n// astro.config.mjs\nimport { defineConfig } from 'astro/config';\nimport postAudit from '@casoon/astro-post-audit';\n\nexport default defineConfig({\n  site: 'https://example.com',\n  integrations: [postAudit()],\n});\n```\n\nThat's it. The audit runs automatically after every `astro build`.\n\n> **Note:** If you use `@astrojs/sitemap`, make sure `postAudit()` comes **after** `sitemap()` in the integrations array. Both plugins use the `astro:build:done` hook and run in array order — the sitemap file needs to exist before the audit can check it.\n\n## Skipping the audit\n\nSet the `SKIP_AUDIT` environment variable to skip the audit for a single build. Useful for quick dev builds when external link checking would slow things down:\n\n```bash\nSKIP_AUDIT=1 astro build\n```\n\nOr add a dedicated script to your `package.json`:\n\n```json\n{\n  \"scripts\": {\n    \"build\": \"astro build\",\n    \"build:fast\": \"SKIP_AUDIT=1 astro build\"\n  }\n}\n```\n\nThen run `npm run build:fast` (or `pnpm build:fast`) when you want to skip the audit.\n\nYou can also disable the audit permanently via config: `postAudit({ disable: true })`.\n\n## Presets\n\nUse a preset to start with a predefined configuration. Individual `rules` override preset defaults.\n\n```js\npostAudit({ preset: 'standard' })\n\n// Preset + custom overrides\npostAudit({\n  preset: 'seo',\n  rules: {\n    headings: { no_skip: true },   // add a rule on top of the preset\n  },\n})\n```\n\n| Preset | What it enables |\n|--------|----------------|\n| `standard` | Comprehensive quality checks without aggressive extras. Canonical self-reference, heading gaps, meta description, Open Graph (title/description/image + absolute image URL + twitter card validation), a11y (skip link, img alt, button/label names, landmark structure, duplicate IDs, ARIA roles), image dimensions/lazy loading, fragment validation, sitemap, security (target-blank), hreflang, assets, JSON-LD, content quality (duplicate titles/descriptions/H1). Warnings stay warnings. |\n| `strict` | Everything in `standard` plus orphan detection, extended robots.txt (disallow-all, crawl-delay), inline-script warnings, Twitter Card, OG type/url requirements, structured data property completeness, i18n audit, crawl budget, render blocking, privacy/security, structured data graph. Sets `strict: true` (warnings become errors). |\n| `production` | Alias for `strict`. |\n| `seo` | SEO signals only — canonical (self-reference, clusters), html basics (lang, title, meta description, viewport, length limits), Open Graph (all four tags), JSON-LD syntax, sitemap. |\n| `accessibility` | WCAG heuristics — lang attr, title, viewport, heading hierarchy (H1 required, single, no gaps), full a11y ruleset (img alt, link/button names, form labels, generic link text, aria-hidden, skip link, landmark structure, duplicate IDs, ARIA roles), fragment validation. |\n| `performance` | Static performance signals — broken asset references, missing image dimensions (CLS), lazy loading, srcset hints, hashed filenames, render blocking scripts. |\n| `relaxed` | Core SEO and link checks only. No heading gaps, no Open Graph, no structured data, no content quality. Broken links are warnings, not errors. Good starting point for existing sites with known issues. |\n| `editorial` | Enables the `content_style` module with its built-in ruleset (em-dash density, contrast-formula repetition, chatbot leftovers). Doesn't touch any other check — combine with `standard`/`seo` via `rules` overrides. See [Content style](#content-style). |\n\n## Speed mode\n\n`mode` is orthogonal to `preset`: it's a speed switch, not a rule-set choice. On large sites, `rules.html_validation` (full HTML5 conformance validation, opt-in) can dominate build time — it runs a RELAX NG content-model check per page and scales with page count. `mode: 'fast'` disables it unconditionally, even if `rules.html_validation.enabled: true` is set elsewhere (e.g. inherited from a preset or a shared config), which makes it a safe one-line override for local/dev builds without touching the rest of the config. `mode: 'full'` (the default) leaves your config untouched.\n\n```js\n// astro.config.mjs\npostAudit({\n  preset: 'seo',\n  mode: process.env.POST_AUDIT_FAST === '1' ? 'fast' : 'full',\n  rules: {\n    html_validation: { enabled: true }, // still off when mode: 'fast'\n  },\n})\n```\n\n```bash\nPOST_AUDIT_FAST=1 pnpm build   # fast: skips html_validation\npnpm build                     # full: runs everything as configured\n```\n\n## Example configurations\n\nA working reference implementation can be found in [casoon/astro-v6-template](https://github.com/casoon/astro-v6-template).\n\n### Simple site\n\nMinimal config for a small personal or marketing site — the `relaxed` preset covers core SEO with lenient settings, then we add a meta description requirement on top.\n\n```js\npostAudit({\n  preset: 'relaxed',\n  failOn: 'errors',\n  rules: {\n    filters: { exclude: ['404.html'] },\n    html_basics: { meta_description_required: true },\n    sitemap: { require: true },\n  },\n})\n```\n\n### Blog with Content Collections\n\nThe `seo` preset handles canonical, html basics, Open Graph, JSON-LD and sitemap. Source-file hints show MDX paths next to `dist/` findings.\n\n```js\npostAudit({\n  preset: 'seo',\n  failOn: 'errors',\n  hints: { sourceFiles: true },\n  rules: {\n    filters: { exclude: ['404.html', 'blog/index.html'] },\n    headings: { no_skip: true },\n    content_quality: {\n      detect_duplicate_titles: true,\n      detect_duplicate_descriptions: true,\n    },\n  },\n})\n```\n\n### Multilingual site (hreflang)\n\nThe `standard` preset already includes hreflang (self-reference, x-default, reciprocal). Only exclusions and `failOn` need to be set.\n\n```js\npostAudit({\n  preset: 'standard',\n  failOn: 'errors',\n  rules: {\n    filters: { exclude: ['404.html'] },\n  },\n})\n```\n\n### Accessibility-focused\n\nThe `accessibility` preset covers the full WCAG heuristic ruleset. Add `seo` rules on top if needed.\n\n```js\npostAudit({\n  preset: 'accessibility',\n  failOn: 'errors',\n  rules: {\n    filters: { exclude: ['404.html'] },\n    html_basics: { meta_description_required: true },\n    sitemap: { require: true },\n  },\n})\n```\n\n### Strict production gate\n\n`production` (= `strict`) enables everything. Only additional opt-in checks and output config need to be specified.\n\n```js\npostAudit({\n  preset: 'production',\n  failOn: 'errors',\n  maxWarnings: 0,\n  hints: { sourceFiles: true },\n  reports: {\n    json: 'audit-report.json',\n    sarif: 'audit.sarif',\n  },\n  rules: {\n    filters: { exclude: ['404.html'] },\n    external_links: { enabled: true, fail_on_broken: true },\n  },\n})\n```\n\n### AI-optimised content\n\nEnable AI visibility checks for content that should surface well in LLM-generated answers. Useful for documentation, blogs, and product pages targeting AI-assisted search.\n\n```js\npostAudit({\n  preset: 'seo',\n  failOn: 'errors',\n  aiVisibility: true,\n  rules: {\n    filters: { exclude: ['404.html'] },\n    headings: { no_skip: true },\n    structured_data: { check_json_ld: true },\n  },\n})\n```\n\n`aiVisibility: true` enables the opt-in AI visibility module, which checks LLM-readability (word count, lang attribute), citability (og:title, og:description, canonical, author schema), chunk quality (semantic sectioning, heading structure on long pages), and AI bot policy in robots.txt.\n\n### UX heuristics for marketing sites\n\nEnable UX heuristics to catch missing calls-to-action, generic link text, and missing trust signals:\n\n```js\npostAudit({\n  preset: 'standard',\n  failOn: 'errors',\n  uxHeuristics: {\n    maxLinksPerPage: 60,\n    minCtaPerPage: 2,\n  },\n  rules: {\n    filters: { exclude: ['404.html'] },\n  },\n})\n```\n\nPass `uxHeuristics: true` to use the defaults (`maxLinksPerPage: 80`, `minCtaPerPage: 1`), or pass an object to override them.\n\n### Environment-based gate (dev / staging / prod)\n\nUse plain JavaScript in `astro.config.mjs` — no profile system needed. The `goLive` option automatically uses Astro's `site` as the expected production origin so you don't have to repeat the domain.\n\n```js\nconst isProd = process.env.DEPLOY_CONTEXT === 'production'\n\npostAudit({\n  preset: isProd ? 'production' : 'relaxed',\n  failOn: isProd ? 'errors' : 'never',\n  maxWarnings: isProd ? 0 : undefined,\n  goLive: {\n    enabled: isProd,\n    forbiddenDomains: ['staging.example.com', 'localhost'],\n  },\n})\n```\n\nWhen `goLive.enabled` is `true`, the integration verifies that the expected production origin matches:\n1. `goLive.expectedSite` — only needed when the go-live target differs from Astro's `site` config\n2. `Astro config.site` — used automatically otherwise\n\nIf neither is set and `goLive.enabled` is `true`, the audit fails with a config error.\n\nEnvironment selection always belongs in `astro.config.mjs` via normal JavaScript — the plugin does not have a built-in profile system. If you find yourself duplicating a lot of config across environments, a profile system may be worth revisiting in a future release.\n\n## Production rollout\n\nThe new dist-only audits (`i18n_audit`, `crawl_budget`, `render_blocking`, `privacy_security`, `structured_data_graph`) are intentionally heuristic. They are useful in production, but best rolled out in two steps.\n\n### Step 1: Recommended baseline (warn-first)\n\n```js\npostAudit({\n  failOn: 'never',\n  reports: { json: 'audit-report.json' },\n  rules: {\n    i18n_audit: { enabled: true },\n    crawl_budget: { enabled: true },\n    render_blocking: { enabled: true },\n    privacy_security: { enabled: true },\n    structured_data_graph: { enabled: true },\n    severity: {\n      'privacy-security/third-party-domains': 'info',\n      'crawl-budget/noindex-with-internal-demand': 'info',\n    },\n  },\n})\n```\n\n### Step 2: Strict gate (after tuning)\n\n```js\npostAudit({\n  failOn: 'errors',\n  maxErrors: 50,\n  rules: {\n    i18n_audit: { enabled: true },\n    crawl_budget: { enabled: true },\n    render_blocking: { enabled: true },\n    privacy_security: { enabled: true },\n    structured_data_graph: { enabled: true },\n    severity: {\n      'privacy-security/missing-sri-script': 'error',\n      'privacy-security/missing-sri-stylesheet': 'error',\n      'structured-data-graph/type-conflict': 'error',\n      'crawl-budget/redirect-target-missing': 'error',\n    },\n  },\n})\n```\n\n## Configuration\n\nAll options are optional. Your editor provides autocomplete with descriptions and concrete defaults where a field has one.\n\n```js\npostAudit({\n  preset: 'standard',        // Apply a predefined config (see Presets)\n  failOn: 'errors',          // Fail the build on errors (or 'warnings' / 'never')\n  maxErrors: 20,             // Stop after 20 errors\n  reports: {                 // Write report files (multiple formats at once)\n    json: 'audit-report.json',\n    markdown: 'audit-summary.md',\n    sarif: 'audit.sarif',\n  },\n  benchmark: true,           // Print per-check timing breakdown\n  pageOverview: true,        // Show page properties overview instead of checks\n  rules: {\n    filters: { exclude: ['404.html', 'drafts/**'] },\n    canonical: { self_reference: true },\n    a11y: { require_skip_link: true },\n    assets: { check_broken_assets: true, check_image_dimensions: true },\n    structured_data: { check_json_ld: true },\n    security: { check_target_blank: true },\n    content_quality: { detect_duplicate_titles: true },\n    opengraph: { require_og_title: true, require_og_image: true },\n    external_links: { enabled: true, timeout_ms: 5000 },\n    headings: { no_skip: true },\n    severity: {\n      'html/title-too-long': 'off',\n      'a11y/img-alt': 'error',\n    },\n  },\n})\n```\n\n### Top-level options reference\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `preset` | `'standard' \\| 'strict' \\| 'production' \\| 'seo' \\| 'accessibility' \\| 'performance' \\| 'relaxed' \\| 'editorial'` | — | Apply a predefined config before your `rules` overrides. See [Presets](#presets). |\n| `mode` | `'fast' \\| 'full'` | `'full'` | Orthogonal to `preset`. `'fast'` forcibly disables checks known to be expensive on large sites (currently `rules.html_validation`), regardless of how they're configured. See [Speed mode](#speed-mode). |\n| `strict` | `boolean` | `false` | Treat warnings as errors (exit code 1). |\n| `throwOnError` | `boolean` | `false` | Throw an error (fail the build) when the audit finds issues. Ignored when `failOn` is set. |\n| `failOn` | `'errors' \\| 'warnings' \\| 'never'` | — | Fail on errors only, on warnings and errors, or never. Takes precedence over `throwOnError`; `'warnings'` always implies strict mode. |\n| `maxErrors` | `number` | — | Truncate output after this many errors. |\n| `maxWarnings` | `number` | — | Fail the build if the warning count exceeds this number. Activates build gating unless `failOn: 'never'` is set. |\n| `site` | `string` | auto | Base URL — auto-detected from Astro's `site` config. |\n| `reports` | `ReportsConfig` | — | Write report files. See [Report files](#report-files). |\n| `output` | `string` | — | Write a JSON report to this path. Legacy alias for `reports.json`. |\n| `baseline` | `string` | — | Path to a baseline file. Only new findings since the baseline are reported. |\n| `writeBaseline` | `boolean` | `false` | Write current findings as the new baseline and exit 0. Run once to adopt the plugin on a site with existing issues. |\n| `hints.sourceFiles` | `boolean` | `false` | Show likely source file paths (e.g. `src/content/blog/post.mdx`) next to `dist/` findings. Heuristic — may not always match. |\n| `groups` | `GroupsConfig` | — | Enable rule groups: `seo`, `a11y`, `links`, `performance`, `privacy`. `true` enables the group, `\"warn\"` enables but downgrades all findings to warnings. |\n| `goLive` | `GoLiveConfig` | — | Production readiness gate. See [Go-live gate](#go-live-gate). |\n| `pageOverview` | `boolean` | `false` | Print a page properties table (title, description, canonical, OG, H1, lang, JSON-LD) instead of running checks. |\n| `benchmark` | `boolean` | `false` | Print per-check timing breakdown. |\n| `progress` | `boolean` | auto | Live progress bar on stderr while checks run. Auto-on in an interactive terminal, silent in CI. Set `true`/`false` to force. |\n| `debug` | `boolean` | `false` | Verbose diagnostics on stderr (resolved config, discovery stats, per-check counts/timings). Never touches the stdout report; replaces the progress bar. See [Diagnostics](#diagnostics). |\n| `aiVisibility` | `boolean` | `false` | Enable AI visibility checks (LLM-readability, citability, chunk quality). See [AI visibility](#ai-visibility). |\n| `uxHeuristics` | `boolean \\| { maxLinksPerPage?: number, minCtaPerPage?: number }` | `false` | Enable UX heuristic checks (CTAs, generic link text, trust signals). See [UX heuristics](#ux-heuristics). |\n| `contentStyle` | `boolean` | `false` | Enable content style checks (recurring \"reads like AI\" writing patterns). See [Content style](#content-style). |\n| `disable` | `boolean` | `false` | Disable the integration entirely. |\n| `rules` | `RulesConfig` | — | Inline check configuration — see full reference below. |\n\n#### Baseline workflow\n\nUse `baseline` + `writeBaseline` to adopt the plugin on a site that already has findings:\n\n```js\n// Step 1: write the current state as a baseline (run once)\npostAudit({ writeBaseline: true, baseline: '.audit-baseline.json' })\n\n// Step 2: from now on, only new findings are reported\npostAudit({ baseline: '.audit-baseline.json' })\n```\n\nCommit `.audit-baseline.json` to version control. Delete entries from it to re-enable specific checks.\n\n#### Groups shorthand\n\n```js\npostAudit({\n  groups: {\n    seo: true,           // enable all SEO rules\n    a11y: 'warn',        // enable a11y rules but never block the build\n    performance: true,\n  },\n})\n```\n\n#### Go-live gate\n\nThe `goLive` option adds a set of production-readiness checks that run only when `enabled: true`. These checks catch staging/dev leftovers before a build goes to production.\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `goLive.enabled` | `boolean` | `false` | Enable go-live checks. |\n| `goLive.expectedSite` | `string` | auto | Expected production origin. Defaults to Astro's `site` config. Only set this when the go-live target differs from Astro `site`. |\n| `goLive.forbiddenDomains` | `string[]` | `[]` | Domains that must not appear in canonical URLs, sitemaps, OG tags, or absolute links. |\n\n**What it checks (rule IDs prefixed with `golive/`):**\n\n| Rule ID | Description |\n|---------|-------------|\n| `golive/noindex` | Page has a `noindex` robots directive |\n| `golive/canonical-origin` | Canonical URL uses the wrong origin |\n| `golive/og-origin` | `og:url` or `og:image` uses the wrong origin |\n| `golive/sitemap-origin` | Sitemap entry uses the wrong origin |\n| `golive/forbidden-domain` | Absolute link, script, canonical, or sitemap entry contains a forbidden domain |\n| `golive/robots-blocked` | `robots.txt` globally blocks crawlers with `Disallow: /` |\n| `golive/config-missing-site` | `goLive.enabled` is `true` but no expected site could be resolved |\n\nAll go-live findings are errors (exit code 1). They cannot be downgraded via `severity` overrides — they are explicit production gates.\n\n### Full rules reference\n\nAll fields are optional — shown here with their defaults.\n\n```js\nrules: {\n  // Site settings\n  site: {\n    base_url: undefined,               // Auto-detected from Astro's `site` config\n  },\n\n  // File filters\n  filters: {\n    include: [],                        // Glob patterns to include\n    exclude: [],                        // Glob patterns to exclude (e.g. [\"404.html\", \"drafts/**\"])\n  },\n\n  // URL normalization\n  url_normalization: {\n    trailing_slash: 'always',           // 'always' | 'never' | 'ignore'\n    index_html: 'forbid',              // 'forbid' | 'allow'\n  },\n\n  // Canonical tag checks\n  canonical: {\n    require: true,                      // Every page must have a canonical tag\n    absolute: true,                     // Canonical URL must be absolute\n    same_origin: true,                  // Must point to same origin as site\n    self_reference: false,              // Must be a self-referencing canonical\n    detect_clusters: true,              // Warn when multiple pages share the same canonical\n  },\n\n  // Robots meta\n  robots_meta: {\n    allow_noindex: true,                // Don't warn on noindex pages\n    fail_if_noindex: false,             // Treat noindex as error\n  },\n\n  // Internal link checks\n  links: {\n    check_internal: true,               // Verify internal links resolve\n    fail_on_broken: true,               // Broken links are errors (not warnings)\n    forbid_query_params_internal: true,  // Warn on ?query in internal links\n    check_fragments: false,             // Validate #fragment targets exist\n    detect_orphan_pages: false,         // Warn about pages with no incoming links\n    check_mixed_content: true,          // Warn on http:// in internal links\n    max_url_depth: undefined,           // Warn when URL nesting depth exceeds this (e.g. 3)\n    known_routes: [],                   // Glob patterns for known SSR/dynamic routes (e.g. ['/dashboard/'])\n                                         // excluded from links/broken and sitemap/entry-not-in-dist\n  },\n\n  // Sitemap cross-reference\n  sitemap: {\n    require: false,                     // sitemap.xml must exist\n    canonical_must_be_in_sitemap: true,  // Canonical URLs should appear in sitemap\n    forbid_noncanonical_in_sitemap: false, // Sitemap must not contain non-canonical URLs\n    entries_must_exist_in_dist: true,    // Sitemap URLs must correspond to pages\n  },\n\n  // robots.txt\n  robots_txt: {\n    require: false,                     // robots.txt must exist\n    require_sitemap_link: false,        // Must contain a sitemap link\n    check_disallow_all: true,           // Error when User-agent: * blocks everything\n    max_crawl_delay: 10,                // Warn when Crawl-delay exceeds this value (seconds)\n    ai_bot_policy: false,               // Check AI bot (GPTBot, ClaudeBot, CCBot …) rules\n    check_noindex_contradiction: false, // Error when a Disallow'd page also has noindex\n    check_sitemap_blocked: false,       // Warn when a sitemap URL is blocked by robots.txt\n  },\n\n  // HTML basics\n  html_basics: {\n    lang_attr_required: true,           // <html lang=\"...\"> required\n    title_required: true,               // <title> required and non-empty\n    meta_description_required: false,   // <meta name=\"description\"> required\n    viewport_required: true,            // <meta name=\"viewport\"> required\n    title_max_length: 60,               // Warn if title exceeds this length\n    meta_description_max_length: 160,   // Warn if description exceeds this length\n  },\n\n  // Heading hierarchy\n  headings: {\n    require_h1: true,                   // Page must have at least one <h1>\n    single_h1: true,                    // Only one <h1> per page\n    no_skip: false,                     // No heading level gaps (h2 → h4)\n  },\n\n  // Accessibility\n  a11y: {\n    img_alt_required: true,             // <img> must have alt attribute\n    allow_decorative_images: true,      // role=\"presentation\" skips alt check\n    a_accessible_name_required: true,   // <a> must have accessible name\n    button_name_required: true,         // <button> must have accessible name\n    label_for_required: true,           // Form controls need associated <label>\n    warn_generic_link_text: true,       // Warn on \"click here\", \"mehr\", \"weiter\"\n    aria_hidden_focusable_check: true,  // Warn on aria-hidden on focusable elements\n    require_skip_link: false,           // Require skip navigation link\n    check_landmarks: true,              // Require proper landmark structure (<main>, <nav>, …)\n    check_duplicate_ids: true,          // Error on duplicate id attributes\n    check_aria_roles: true,             // Validate role= values against WAI-ARIA spec\n    check_alt_quality: true,            // Warn on filename/placeholder/too-short alt text\n  },\n\n  // Asset checks\n  assets: {\n    check_broken_assets: false,         // Verify img/script/link references\n    check_image_dimensions: false,      // Warn on missing width/height (CLS)\n    max_image_size_kb: undefined,       // Warn if image exceeds size in KB\n    max_js_size_kb: undefined,          // Warn if JS file exceeds size in KB\n    max_css_size_kb: undefined,         // Warn if CSS file exceeds size in KB\n    require_hashed_filenames: false,    // Warn if filenames lack cache-busting hash\n  },\n\n  // Open Graph & Twitter Cards\n  opengraph: {\n    require_og_title: false,            // Require og:title\n    require_og_description: false,      // Require og:description\n    require_og_image: false,            // Require og:image\n    require_twitter_card: false,        // Require twitter:card\n    require_og_type: false,             // Require og:type\n    require_og_url: false,              // Require og:url\n    og_image_absolute_url: true,        // og:image must be an absolute URL\n    require_twitter_image: false,       // Require twitter:image\n    twitter_card_valid_values: true,    // Validate twitter:card value against the spec\n    og_title_consistency: false,        // Warn when og:title and <title> differ significantly\n    check_image_exists: false,          // Verify a local og:image exists in dist\n    check_image_dimensions: false,      // Warn if local og:image is below 1200×630\n    og_image_max_size_kb: undefined,    // Warn if local og:image exceeds this size in KB\n  },\n\n  // Structured data (JSON-LD)\n  structured_data: {\n    check_json_ld: false,               // Validate JSON-LD syntax and semantics\n    require_json_ld: false,             // Every page must have JSON-LD\n    detect_duplicate_types: false,      // Warn on duplicate @type per page\n  },\n\n  // Hreflang (multilingual sites)\n  hreflang: {\n    check_hreflang: false,              // Enable hreflang checks\n    require_x_default: false,           // Require x-default entry\n    require_self_reference: false,      // Must include self-referencing entry\n    require_reciprocal: false,          // Links must be reciprocal (A→B and B→A)\n    require_target_exists: false,       // Warn when an internal hreflang target is missing\n  },\n\n  // Security\n  security: {\n    check_target_blank: true,           // Warn on target=\"_blank\" without rel=\"noopener\"\n    check_mixed_content: true,          // Warn on http:// resource URLs\n    warn_inline_scripts: false,         // Warn on inline <script> tags\n  },\n\n  // Content quality\n  content_quality: {\n    detect_duplicate_titles: false,     // Warn on duplicate <title> across pages\n    detect_duplicate_descriptions: false, // Warn on duplicate meta descriptions\n    detect_duplicate_h1: false,         // Warn on duplicate <h1> across pages\n    detect_duplicate_pages: false,      // Warn on identical page content\n  },\n\n  // External link checking (network requests)\n  external_links: {\n    enabled: false,                     // Enable external link checking via HEAD requests\n    timeout_ms: 3000,                   // Timeout per request in milliseconds\n    max_concurrent: 10,                 // Maximum concurrent requests\n    fail_on_broken: false,              // Broken external links are errors (not just warnings)\n    allow_domains: [],                  // Only check links to these domains (empty = all)\n    block_domains: [],                  // Skip links to these domains\n  },\n\n  // Image checks (HTML attribute-level)\n  images: {\n    check_missing_dimensions: true,     // Error on <img> without width/height (CLS risk)\n    warn_missing_lazy: true,            // Warn when images below the fold lack loading=\"lazy\"\n    info_missing_srcset: true,          // Info when <img> has no srcset (responsive images)\n    format_hints: false,                // Info hint when JPEG/PNG/GIF could use a modern format\n  },\n\n  // C2PA Content Credentials — opt-in module\n  c2pa: {\n    enabled: false,                     // Validate embedded Content Credentials in local JPEG/PNG/WebP assets\n    require_for: [],                    // Dist-relative image globs for which credentials are expected, e.g. [\"blog/**/*.jpg\"]\n    require_trusted: false,             // Also flag Valid-but-not-Trusted manifests (e.g. self-signed certs)\n  },\n\n  // AI Visibility — opt-in module\n  // Enable via top-level aiVisibility option or set enabled: true here\n  ai_visibility: {\n    enabled: false,                     // Enable AI visibility checks\n    require_llms_txt: true,             // Require llms.txt or llms-full.txt and validate internal links\n  },\n\n  // UX Heuristics — opt-in module\n  // Enable via top-level uxHeuristics option or set enabled: true here\n  ux_heuristics: {\n    enabled: false,                     // Enable UX heuristic checks\n    max_links_per_page: 80,             // Info when a page exceeds this link count\n    min_cta_per_page: 1,                // Warn when a page has fewer CTAs than this\n  },\n\n  // Content Style — opt-in module, heuristics for recurring \"reads like AI\" writing patterns\n  // Enable via top-level contentStyle option or set enabled: true here\n  content_style: {\n    enabled: false,                     // Enable content style checks\n    content_selector: \"article, main, .prose\", // Default: prefer article, then main, then .prose\n    exclude: [],                        // Dist-relative globs to skip only this check, e.g. [\"tags/**\"]\n    // rules: [...],                    // Replaces the built-in ruleset entirely when set (even to [])\n    // extra_rules: [                   // Always appended to whichever ruleset is in effect\n    //   { id: \"custom-word\", type: \"presence\", pattern: \"unleash\", level: \"warning\" },\n    // ],\n    disabled_rules: [],                 // Disable built-in/custom rules by short ID\n    language_detection: {\n      enabled: true,                    // Compare German/English text signals with html[lang]\n      min_signal_words: 12,             // Require this many signals for the other language\n      mismatch_ratio: 2,                // Other-language signals must be this many times higher\n    },\n  },\n\n  // Font loading checks — opt-in\n  fonts: {\n    enabled: false,\n    check_font_display: true,           // Warn when an @font-face block has no font-display\n    require_font_preload: true,         // Info when self-hosted fonts have no preload hint\n  },\n\n  // Astro View Transitions checks — opt-in\n  view_transitions: {\n    enabled: false,\n    check_duplicate_names: true,        // Error for duplicate transition:name values on one page\n    check_external_reload: true,        // Info for external links missing data-astro-reload\n  },\n\n  // Static Astro/Tailwind source analysis — opt-in (needs project root, passed automatically)\n  source_analysis: {\n    enabled: false,\n    extensions: [],                     // Additional source file extensions to inspect (without leading dot)\n    exclude: [],                        // Additional globs; build/dependency directories are always excluded\n    tailwind_inventory: true,           // Emit a compact Tailwind utility inventory\n    duplicate_signatures: true,         // Report exact repeated static class signatures\n    utility_conflicts: true,            // Report duplicate/mutually exclusive utility tokens\n    component_complexity: true,         // Report components crossing complexity thresholds\n    min_duplicate_occurrences: 3,       // Minimum occurrences before a repeated signature is reported\n    max_component_lines: 300,           // Advisory source-line threshold\n    max_component_props: 12,            // Advisory declared Props member threshold\n    max_component_slots: 6,             // Advisory named-slot threshold\n  },\n\n  // Innovative dist-only audits\n  i18n_audit: {\n    enabled: false,                     // lang/hreflang/canonical consistency by locale route\n  },\n  crawl_budget: {\n    enabled: false,                     // URL variants, duplicate clusters, indexability mismatches\n  },\n  render_blocking: {\n    enabled: false,                     // Sync head scripts and missing preconnect hints\n  },\n  css_architecture: {\n    enabled: false,                     // Per-route local and inline CSS payload\n    max_route_kb: 50,                   // Warning threshold per route\n    detect_route_outliers: true,        // Compare route payloads with the site median\n    outlier_factor: 2,                  // Required multiple of the median\n    min_outlier_kb: 20,                 // Ignore small absolute differences\n  },\n  privacy_security: {\n    enabled: false,                     // Third-party domains, SRI/CSP readiness, consent indicators\n    gdpr: false,                        // GDPR/DSGVO transfers: Google Fonts, YouTube, Maps, CDNs, external images\n  },\n  structured_data_graph: {\n    enabled: false,                     // Cross-page JSON-LD entity consistency and missing internal URLs\n  },\n\n  // Static meta-refresh redirect analysis\n  redirects: {\n    enabled: false,                     // Links to redirect pages, redirect chains, loops\n  },\n  // Client-side JS bloat per route\n  js_bloat: {\n    enabled: false,                     // Warn when a route's total local JS is too large\n    max_kb: 100,                        // Threshold in KB\n  },\n  // Content collection ↔ generated page sync (needs project root, passed automatically)\n  content_sync: {\n    enabled: false,                     // Warn about src/content items with no build page\n  },\n  // Native HTML5 conformance validation (offline, via html-conform, vnu-comparable)\n  html_validation: {\n    enabled: false,                     // Report HTML5 conformance findings\n    max_per_page: 20,                   // Cap distinct findings reported per page\n  },\n\n  // Override severity per rule ID\n  severity: {\n    // 'rule-id': 'error' | 'warning' | 'info' | 'off'\n  },\n}\n```\n\n## What it checks\n\n- **Note on signal type** — Most checks are deterministic (broken links, missing tags). The five dist-only audits are heuristic by design and should be tuned via `severity` for your project.\n- **SEO** — Canonical tags (including cluster detection), robots meta, URL normalization (trailing slash, index.html)\n- **Links** — Broken internal links, query parameters, fragment validation, orphan pages, URL depth, links pointing at redirect pages\n- **External Links** — HEAD requests to verify external URLs return 2xx, with domain filtering and concurrency control\n- **Sitemap** — Cross-reference with canonical URLs, stale entries, missing pages\n- **robots.txt** — Existence check, sitemap link, disallow-all detection, crawl-delay threshold, AI bot policy (GPTBot, ClaudeBot, CCBot …), noindex/Disallow contradiction, sitemap entries blocked by robots\n- **Redirects** — Static meta-refresh redirect chains, loops, and internal links that point at redirect pages\n- **HTML** — `<html lang>`, `<title>`, viewport, meta description, heading hierarchy, native HTML5 conformance validation *(opt-in)*\n- **Accessibility** — img alt + alt-text quality heuristics, link/button names, form labels (including wrapping labels), generic link text, skip link, aria-hidden on focusable elements, landmark structure (`<main>`, `<nav>`, `<header>`, `<footer>`), duplicate IDs, WAI-ARIA role validation\n- **Open Graph** — og:title, og:description, og:image (absolute URL + existence/dimensions/size), og:type, og:url, twitter:card (valid values), twitter:image, title consistency\n- **Structured Data** — JSON-LD syntax, semantics, duplicate type detection, property completeness (author, datePublished, image, publisher, breadcrumb positions …)\n- **Images** — Missing `width`/`height` attributes (CLS), missing `loading=\"lazy\"`, missing `srcset`, modern format hints\n- **Hreflang** — Multilingual link validation, x-default, self-reference, reciprocal links, target existence\n- **Security** — target=\"_blank\" without noopener, mixed content, inline scripts\n- **Assets** — Broken references, image dimensions, file size limits, cache-busting hashes\n- **Performance** — Client-side JS and CSS payloads per route and font-loading hints *(opt-in)*\n- **Content Quality** — Duplicate titles, descriptions, H1s, near-identical pages\n- **Content Sync** *(opt-in)* — `src/content/` collection items with no corresponding generated page\n- **Source Analysis** *(opt-in)* — Static Astro/Tailwind source inventory: utility-family usage, exact duplicate class signatures, mutually exclusive utilities, and oversized components. Never executes JavaScript or guesses dynamic classes.\n- **I18n Audit** — Consistency between localized routes, `html[lang]`, `hreflang`, and canonical\n- **Crawl Budget** — Query/variant URL dilution, duplicate canonical clusters, and indexability mismatches\n- **Render Blocking** — Sync `<head>` scripts and missing `preconnect` hints for critical third-party resources\n- **Privacy/Security (Static)** — Third-party domain inventory, missing SRI, CSP-readiness, consent signals, GDPR/DSGVO transfers *(opt-in: Google Fonts, YouTube, Maps, public CDNs, external images)*\n- **Structured Data Graph** — Cross-page JSON-LD entity conflicts (`@id`, type/name/url) and missing internal entity URLs\n- **AI Visibility** *(opt-in)* — LLM readability (word count, lang), citability (OG metadata, canonical, author schema), semantic structure, AI bot policy, and `llms.txt` / `llms-full.txt` link integrity\n- **UX Heuristics** *(opt-in)* — Missing CTAs, generic link text (\"click here\", \"mehr\"), missing trust signals (Impressum, Datenschutz, contact), link density, interactive element density\n- **Content Style** *(opt-in)* — Configurable heuristics for recurring \"reads like AI\" writing patterns: em-dash overuse, contrast-formula repetition (\"nicht/kein X, sondern Y\"), chatbot leftovers, uniform sentence rhythm\n- **View Transitions** *(opt-in)* — Duplicate `transition:name` values and Client Router external-link reload hints\n- **C2PA Provenance** *(opt-in)* — Local validation of embedded C2PA Content Credentials in JPEG, PNG, and WebP assets\n\n### HTML5 conformance validation\n\nEnable `rules.html_validation.enabled` for offline content-model, parser, ARIA, attribute, and table validation. Astro's generated client-island runtime style (`astro-island,astro-slot,astro-static-slot{display:contents}`) is ignored automatically; other `<style>` elements in body content remain findings. Under the [current HTML standard](https://html.spec.whatwg.org/multipage/semantics.html#the-style-element), `<style>` is metadata content and belongs in `<head>` (or a `<noscript>` in `<head>`), even when it is the first child of a body-level container. In Astro and MDX, use Astro's normal component-scoped `<style>` handling instead of emitting a raw body-level `<style>` tag.\n\n`html/assertion.roles.unnecessary-list` reports an explicit `role=\"list\"` on `<ul>`/`<ol>` as redundant according to ARIA-in-HTML. If the role is intentional to retain VoiceOver/Safari list semantics when CSS removes list markers, keep the workaround and tune only that finding:\n\n```js\nrules: {\n  html_validation: { enabled: true },\n  severity: {\n    \"html/assertion.roles.unnecessary-list\": \"off\",\n  },\n}\n```\n\n## AI visibility\n\nEnable via `aiVisibility: true` (top-level option) or `rules.ai_visibility.enabled: true`.\n\nBy default this also looks for `dist/llms.txt` or `dist/llms-full.txt` and validates their internal Markdown links. Set `rules.ai_visibility.require_llms_txt: false` to keep the other AI visibility checks without this file check.\n\n| Rule ID | Level | Description |\n|---------|-------|-------------|\n| `ai-visibility/missing-llms-txt` | Info | Neither `llms.txt` nor `llms-full.txt` exists in `dist/` |\n| `ai-visibility/llms-txt-broken-link` | Warning | An internal Markdown link in an LLM context file has no published target |\n| `ai-visibility/low-word-count` | Info | Page word count < 300 — may not be chunked by LLMs |\n| `ai-visibility/lang-missing` | Warning | Missing `<html lang>` — LLMs may not infer language |\n| `ai-visibility/missing-og-title` | Warning | No `og:title` — reduces citation quality |\n| `ai-visibility/missing-og-description` | Info | No `og:description` — reduces citation quality |\n| `ai-visibility/missing-canonical` | Warning | No canonical URL — LLMs may attribute content incorrectly |\n| `ai-visibility/missing-author-schema` | Info | No `author` in JSON-LD — reduces attribution quality |\n| `ai-visibility/no-semantic-sections` | Info | No `<article>` or `<section>` — poor chunk boundaries |\n| `ai-visibility/no-subheadings` | Warning | Long page with no H2/H3 — poor chunk quality |\n| `ai-visibility/noindex-page` | Info | Page is noindexed — will not be crawled by AI bots |\n\n## UX heuristics\n\nEnable via `uxHeuristics: true` (top-level option) or `rules.ux_heuristics.enabled: true`. Pass an object to configure thresholds: `uxHeuristics: { maxLinksPerPage: 60, minCtaPerPage: 2 }`.\n\n| Rule ID | Level | Description |\n|---------|-------|-------------|\n| `ux/no-cta` | Warning | Page has no call-to-action (links/buttons with CTA keywords) |\n| `ux/generic-link-text` | Warning | Link with generic text (\"click here\", \"mehr\", \"weiter\", \"read more\") |\n| `ux/no-trust-signals` | Warning | No links to Impressum, Datenschutz, contact, or about pages |\n| `ux/high-link-density` | Info | Link count exceeds `max_links_per_page` (default 80) |\n| `ux/high-interactive-density` | Info | More than 20 interactive elements on a single page |\n\n## Source analysis (Astro + Tailwind)\n\nEnable via `rules.source_analysis.enabled: true`. Runs entirely offline against your Astro/Tailwind source files (needs the project root, which the integration passes automatically) and only evaluates quoted static `class` and `class:list` entries — it never executes JavaScript or guesses dynamic classes. `.git`, `.astro`, `dist`, `node_modules`, and `target` are always excluded; `exclude` adds project-specific globs. All findings are advisory `info`.\n\n```js\nrules: {\n  source_analysis: {\n    enabled: true,\n    exclude: [\"src/components/generated/**\"],\n    min_duplicate_occurrences: 3,\n    max_component_lines: 300,\n  },\n}\n```\n\n| Rule ID | Description |\n|---------|--------------|\n| `source-analysis/tailwind-inventory` | Utility-family inventory across quoted static class lists |\n| `source-analysis/duplicate-signature` | An exact class signature repeats at least `min_duplicate_occurrences` times (default 3) |\n| `source-analysis/utility-conflict` | Duplicate or mutually exclusive utilities within the same variant scope (e.g. `p-2 p-4`, `block hidden`) |\n| `source-analysis/component-complexity` | An Astro component exceeds `max_component_lines` (default 300), `max_component_props` (default 12), or `max_component_slots` (default 6) |\n\n## CSS architecture\n\nEnable via `rules.css_architecture.enabled: true`. The check measures every route's directly referenced local stylesheets and inline `<style>` blocks. Repeated references to the same file on one page count once. External stylesheets and CSS loaded later by JavaScript are excluded because their size cannot be established reliably from `dist/` alone.\n\n```js\nrules: {\n  css_architecture: {\n    enabled: true,\n    max_route_kb: 50,\n    detect_route_outliers: true,\n    outlier_factor: 2,\n    min_outlier_kb: 20,\n  },\n}\n```\n\n| Rule ID | Level | Description |\n|---------|-------|-------------|\n| `css-architecture/route-payload` | Warning | Direct local and inline CSS exceeds `max_route_kb` |\n| `css-architecture/route-outlier` | Info | A route above `min_outlier_kb` exceeds the site median by `outlier_factor` |\n\n## Content style\n\nConfigurable heuristics for recurring \"reads like AI\" writing patterns. This is a stylistic signal, not a correctness check — every finding carries `confidence: \"low\"`. Info-level findings do not affect `--strict`; the built-in chatbot-leftover rule is a warning and therefore does. Regex-based findings include a short excerpt around the first match so they can be reviewed in context.\n\nEnable via `contentStyle: true` (top-level option), `rules.content_style.enabled: true`, or `preset: 'editorial'`. With the default `content_selector` (`article, main, .prose`), the audit prefers a semantic `<article>`, otherwise `<main>`, then `.prose`. It omits header, nav, aside and footer content as well as repeated linked card groups (three or more equal sibling cards with a link and H2/H3), so article teasers and a small related-content hub do not distort one continuous writing sample. A custom `content_selector` uses its outermost matches directly.\n\nFor archive or taxonomy pages whose card structure cannot be recognised reliably, use `exclude` with dist-relative globs. It only disables content-style checks for those pages; link, accessibility, SEO and all other checks still run. For example: `exclude: [\"tags/**\", \"serien/**\"]`.\n\nTune built-in density rules without copying their regexes:\n\n```ts\nrules: {\n  content_style: {\n    enabled: true,\n    thresholds: {\n      em_dash_density: 16,\n      contrast_formula_density: 6,\n      contrast_formula_density_en: 6,\n    },\n  },\n}\n```\n\nThe built-in ruleset is kept in sync with the [`anti-ai-copy` skill](https://github.com/casoon/casoon-agent-skills)'s checklist:\n\n| Rule ID | Level | Description |\n|---------|-------|-------------|\n| `content-style/em-dash-density` | Info | More than 12 em-dashes (`—`) per 1000 words |\n| `content-style/contrast-formula-density` | Info | German: more than 4 \"nicht/kein X, sondern Y\" contrast constructions per 1000 words |\n| `content-style/chatbot-leftover` | Warning | German: unedited chatbot phrases (\"Ich hoffe, das hilft\", \"Gerne!\", \"Lass uns eintauchen\") |\n| `content-style/contrast-formula-density-en` | Info | English: more than 4 \"not X, but Y\" contrast constructions per 1000 words |\n| `content-style/chatbot-leftover-en` | Warning | English: unedited chatbot phrases (\"I hope this helps\", \"Happy to help!\", \"Let's dive in\") |\n| `content-style/language-mismatch` | Info | `<html lang>` conflicts with a strong German/English function-word signal |\n\nNew patterns discovered during manual review become a config entry, not a code change — the engine supports three generic rule types:\n\n- **`density_per_1000_words`** — flags when regex matches per 1000 words exceed `threshold`\n- **`presence`** — flags when the regex matches at all, anywhere in the content\n- **`sentence_length_uniformity`** — flags when sentence word-lengths are unusually uniform (coefficient of variation below `threshold`); not in the default ruleset since it needs per-project tuning to avoid false positives on reference-style content\n\nRule types are validated at runtime as well as by TypeScript. This catches misspellings in plain `astro.config.mjs` files and stops the build instead of silently disabling the affected rule.\n\nThe German and English built-in rule packs are selected from the primary `<html lang>` value (`de-AT` selects German, `en-US` English). Language-neutral rules always run; pages without `lang` run both language-specific packs so a missing language signal does not hide findings. Custom rules can use `languages: [\"de\"]` or `languages: [\"en\"]` for the same behavior.\n\nThe built-in language-consistency heuristic compares common German and English function words with `<html lang>`. It only reports a clear mismatch (at least 12 signal words and a 2:1 advantage), always with low confidence; it does not attempt to classify other languages or mixed-language pages. Tune or disable it with `language_detection`.\n\n```js\ncontentStyle: true, // or, for fine-grained control:\nrules: {\n  content_style: {\n    enabled: true,\n    disabled_rules: [\"em-dash-density\"], // Disable a built-in rule by its short ID\n    exclude: [\"tags/**\", \"serien/**\"], // Skip only content-style checks on archive hubs\n    language_detection: {\n      enabled: true,              // Compare German/English signal words with html[lang]\n      min_signal_words: 12,\n      mismatch_ratio: 2,\n    },\n    // Replaces the built-in defaults entirely when set (even to []):\n    rules: [\n      { id: \"unleash\", type: \"presence\", pattern: \"(?i)entfesseln|unleash\", languages: [\"de\", \"en\"], level: \"warning\" },\n    ],\n    // Or keep the defaults and just add one pattern:\n    extra_rules: [\n      { id: \"tapestry-metaphor\", type: \"presence\", pattern: \"(?i)geflecht aus|mosaik aus\", level: \"info\" },\n    ],\n  },\n},\n```\n\nEach rule supports `message`/`help` overrides with `{count}`/`{word_count}`/`{density}`/`{threshold}`/`{cv}`/`{sentences}` placeholders, `languages` for language-scoping, and `level: \"off\"` to disable a rule without removing it from the list. Use `disabled_rules` to switch off a built-in rule without copying the default ruleset.\n\n## C2PA provenance\n\nEnable via `rules.c2pa.enabled: true`. Validates embedded [C2PA Content Credentials](https://c2pa.org) in local JPEG, PNG, and WebP assets found in `dist/` — entirely offline, no remote manifest fetching.\n\nBy default, a missing manifest is silent: most images simply don't carry Content Credentials, and that's not a signal of anything. Set `require_for` to a list of dist-relative globs to require credentials on specific assets (e.g. AI-generated illustrations you want to keep provenance metadata on):\n\n```js\nrules: {\n  c2pa: {\n    enabled: true,\n    require_for: [\"blog/**/*.jpg\", \"og/*.png\"],\n    require_trusted: true,\n  },\n}\n```\n\n| Rule ID | Level | Description |\n|---------|-------|--------------|\n| `c2pa/invalid` | Warning | An embedded manifest exists but failed validation |\n| `c2pa/missing-required` | Warning | No readable manifest found on an asset matched by `require_for` |\n| `c2pa/untrusted` | Warning | Manifest is cryptographically valid but its signing certificate does not chain to a trusted root (only reported when `require_trusted: true`) |\n\nMissing credentials never imply that an image is AI-generated or otherwise non-compliant — they only mean no Content Credentials were embedded or none could be read.\n\nBy default, a `Valid` manifest passes even if it wasn't signed by a certificate chaining to a trusted root — a self-signed certificate produces `Valid`, never `Trusted`. That's fine for local testing but not sufficient as a compliance signal, since no real-world C2PA verifier (browser viewer, Adobe Content Credentials) would display it as trustworthy. Set `require_trusted: true` to flag `Valid`-but-not-`Trusted` manifests too. Keep it off if you intentionally sign with an in-house or test CA that isn't in the C2PA default trust list — you'd otherwise start failing your own legitimate manifests.\n\n## GDPR / DSGVO\n\nEnable via `rules.privacy_security.gdpr: true`. Detects third-party transfers that send visitor IPs abroad without consent — particularly relevant in the DACH region. All findings are warnings.\n\n| Rule ID | Description |\n|---------|-------------|\n| `privacy-security/google-fonts-external` | Loads fonts from `fonts.googleapis.com` / `fonts.gstatic.com` — self-host with `@fontsource` |\n| `privacy-security/youtube-direct-embed` | YouTube iframe uses `youtube.com` instead of `youtube-nocookie.com` / a consent wrapper |\n| `privacy-security/google-maps-embed` | Direct Google Maps iframe — use a static preview or gate behind consent |\n| `privacy-security/cdn-resources` | Scripts/styles from public CDNs (unpkg, jsDelivr, cdnjs, …) — bundle locally instead |\n| `privacy-security/external-images` | `<img>` from a third-party domain — host the image locally in `src/assets/` |\n\n## Diagnostics\n\nTwo stderr-only diagnostics help you see what the audit is doing — neither touches the report on stdout, so JSON/SARIF output stays clean.\n\n### Progress bar\n\nA live single-line progress bar over the check phases. Auto-enabled when stderr is an interactive terminal and silent in CI / when piped. Force it with `progress: true` / `false`.\n\n```\n  Auditing 770 pages…\n  [███████████░░░░░░░░░░░] 17/32  crawl_budget\n```\n\n### Debug mode\n\n`debug: true` prints verbose diagnostics on stderr and replaces the progress bar:\n\n```js\npostAudit({ debug: true })\n```\n\n```\n[debug] effective config:\nConfig { preset: None, strict: false, ... }            ← resolved config after preset merge\n[debug] discovery: 770 HTML file(s) found, 2 excluded by filters, 768 parsed into pages (180 ms)\n[debug] sitemap.xml: 768 URL(s)\n[debug]  1/33 seo                        12 finding(s)  40 ms\n[debug]  2/33 links                       3 finding(s)  95 ms\n...\n[debug] 33/33 source_analysis             0 finding(s)   2 ms\n```\n\nUse it to confirm which config actually applies, what discovery found/filtered, and which check produces (or misses) findings and how long it takes.\n\n## Output\n\nText output is rendered by Runemark with semantic severity markers, grouped findings, metrics, and remedies. It uses colors in an interactive terminal and deterministic ASCII output when piped or in CI. The remedies reference Astro idioms (`BaseHead`, `astro:assets`, Content Collections, `Astro.site`) so fixes are actionable in context:\n\n```\n[FAIL] astro-post-audit\n\n  Errors: 1   Warnings: 1   Info: 0   Files: 12\n\n* blog/post/index.html (2)\n  - Missing canonical tag [canonical/missing] at `head`\n    Remedy: Set `site` in astro.config.mjs and render <link rel=\"canonical\" ... /> in BaseHead.\n  - <img> missing alt attribute [a11y/img-alt] at `img[src='/photo.jpg']`\n    Remedy: Add an `alt` prop to <Image>/<Picture> or the <img> tag.\n```\n\nWhen the result set is large (20 or more findings), the report prepends a top-rule summary so you get an at-a-glance view before the per-file detail:\n\n```\n  Top issue rules:\n       8x  html/meta-description-missing\n       3x  canonical/missing\n       2x  a11y/img-alt\n       1x  links/broken-internal\n```\n\n### Report files\n\nUse `reports` to write one or more report files alongside the terminal output. All four formats can be active at the same time:\n\n```js\npostAudit({\n  reports: {\n    json:     'audit-report.json',   // Machine-readable, one finding per entry\n    markdown: 'audit-summary.md',    // Human-readable table, useful as CI artifact or PR comment\n    sarif:    'audit.sarif',         // SARIF 2.1.0 — consumed by GitHub Code Scanning\n    html:     'audit-report.html',   // Standalone, human-readable HTML report\n  },\n})\n```\n\nThe legacy `output` option (JSON only) remains supported for backwards compatibility.\n\n#### GitHub Code Scanning (SARIF)\n\nUpload the SARIF file with the `github/codeql-action/upload-sarif` action to get inline PR annotations:\n\n```yaml\n- name: Build\n  run: npm run build\n\n- name: Upload SARIF\n  if: always()\n  uses: github/codeql-action/upload-sarif@v3\n  with:\n    sarif_file: audit.sarif\n```\n\nSet `benchmark: true` to see a per-check timing breakdown — useful for identifying slow checks on large sites.\n\n## Maintainer release process\n\nGitHub release assets are published by the tag workflow. The crates.io package and the npm package are intentionally always published manually and must never be added to CI or the release workflow.\n\nAfter the GitHub release assets for the matching version are available:\n\n```bash\ncargo publish --manifest-path crates/astro-post-audit/Cargo.toml\n\ncd packages/astro-post-audit\nnpm ci\nnpm run verify:binary\nnpm test\nnpm publish --access public\n```\n\nThe Cargo package, npm package, lockfiles, README release heading, and `vX.Y.Z` tag must use the same version. The release workflow rejects mismatches before building artifacts.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}