{"_id":"my-bad","_rev":"16-78771af14053c693978d9cd69eb07a13","name":"my-bad","dist-tags":{"latest":"0.2.11"},"versions":{"0.0.0":{"name":"my-bad","version":"0.0.0","author":{"name":"Daniel Roe","email":"daniel@roe.dev"},"_id":"my-bad@0.0.0","maintainers":[{"name":"danielroe","email":"daniel@roe.dev"}],"dist":{"shasum":"2d36f668884605fa00fdeed29583ccce70715741","tarball":"https://registry.npmjs.org/my-bad/-/my-bad-0.0.0.tgz","fileCount":2,"integrity":"sha512-oputvE2Kz1WYfR8t6PauLA9onHjtPr+IEdzHisp4paLF/Zh+xzHOUz/uWHDm4Qwx1g16J2uEJnNvFLjD8n4H0A==","signatures":[{"sig":"MEUCIQCAJIKjgowuJiW4B5qjXhkWGudsVaAkJRTa8BxEGn0e3wIgCFcJv8gwc2VS1uT5cBR73o7YZkzH1j/XeRV0WdlvgGo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":116},"gitHead":"738cca0bf06ba0e95a87271b86342ccfb78122b7","_npmUser":{"name":"danielroe","email":"daniel@roe.dev"},"_npmVersion":"11.19.0","directories":{},"_nodeVersion":"26.8.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/my-bad_0.0.0_1788371662731_0.1434387465617637","host":"s3://npm-registry-packages-npm-production"}},"0.0.1":{"name":"my-bad","version":"0.0.1","license":"MIT","_id":"my-bad@0.0.1","maintainers":[{"name":"danielroe","email":"daniel@roe.dev"}],"homepage":"https://github.com/danielroe/my-bad#readme","bugs":{"url":"https://github.com/danielroe/my-bad/issues"},"dist":{"shasum":"e42344d5eebdc8606ac4f948f163181940baa9e8","tarball":"https://registry.npmjs.org/my-bad/-/my-bad-0.0.1.tgz","fileCount":23,"integrity":"sha512-h3jeKr5e4JzjMtYZxreRybs3mAsI+0TMS7cZh/qVXcn9NbCwBE9F+5RtDUL9/MgQD/H1V65XfNsWH6fUv7iI1w==","signatures":[{"sig":"MEYCIQDK2Er0/b1xVPBsKt0DjaeJtVKFvdRy8i98DOu2yrhSGQIhAPmG8mcQzKHDZbpSXVdtgzT+ZGkFLVohONYqZ7CovTeF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/my-bad@0.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":180427},"type":"module","_from":"file:/home/runner/work/_temp/uppt-tarballs/my-bad-0.0.1.tgz","types":"./dist/index.d.mts","engines":{"node":">=22.12.0"},"exports":{".":"./dist/index.mjs","./vite":"./dist/vite/index.mjs","./sinks":"./dist/sinks/index.mjs","./channel":"./dist/channel/index.mjs","./presets":"./dist/presets/index.mjs","./vite/client":"./dist/vite/client.mjs","./package.json":"./package.json"},"scripts":{"dev":"vitest dev","lint":"eslint . --fix","play":"pnpm build && node playground/dev.ts","test":"pnpm test:unit && pnpm test:types","build":"tsdown","assets":"pnpm build && playwright test -u changed","play:vite":"pnpm build && node playground/vite/server.ts","test:a11y":"vitest run test/a11y.test.ts test/browser.test.ts","test:knip":"knip","test:pack":"pnpm build && node scripts/check-pack.ts","test:unit":"vitest","screenshot":"pnpm build && node playground/screenshot.ts","test:types":"tsc --noEmit","test:versions":"installed-check -d --no-workspaces","release:preview":"pkg-pr-new publish --compact --pnpm"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"danielroe","email":"daniel@roe.dev"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:27bb25c8-4cb6-49e9-b011-219ed065784f"}},"_resolved":"/home/runner/work/_temp/uppt-tarballs/my-bad-0.0.1.tgz","_integrity":"sha512-h3jeKr5e4JzjMtYZxreRybs3mAsI+0TMS7cZh/qVXcn9NbCwBE9F+5RtDUL9/MgQD/H1V65XfNsWH6fUv7iI1w==","repository":{"url":"git+https://github.com/danielroe/my-bad.git","type":"git"},"_npmVersion":"12.0.2","description":"Beautiful dev-server error pages: HTML, ANSI and JSON from one sourcemapped report","directories":{},"nano-staged":{"*.{js,ts,mjs,cjs,json,.*rc}":["npx eslint --fix"]},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"errx":"^0.2.0","fnv1a-64":"^0.1.2","clickable-path":"^0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.34.0","vite":"8.2.2","eslint":"10.9.1","tsdown":"0.22.14","vitest":"4.1.11","consola":"3.4.2","axe-core":"4.13.0","rolldown":"1.2.7","ansivision":"0.4.0","fast-check":"4.9.0","pkg-pr-new":"0.0.88","playwright":"1.62.1","typescript":"6.0.3","@types/node":"26.4.1","nano-staged":"1.0.2","installed-check":"11.0.0","simple-git-hooks":"2.14.0","@vitest/coverage-v8":"4.1.11","@antfu/eslint-config":"9.5.1"},"peerDependencies":{"vite":">=6"},"simple-git-hooks":{"pre-commit":"npx nano-staged"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/my-bad_0.0.1_1788460300630_0.10711592394957781","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"my-bad","version":"0.1.0","license":"MIT","_id":"my-bad@0.1.0","maintainers":[{"name":"danielroe","email":"daniel@roe.dev"}],"homepage":"https://github.com/danielroe/my-bad#readme","bugs":{"url":"https://github.com/danielroe/my-bad/issues"},"dist":{"shasum":"98740f76220066c09d1f6e3afe86e81440e096ad","tarball":"https://registry.npmjs.org/my-bad/-/my-bad-0.1.0.tgz","fileCount":23,"integrity":"sha512-LgjuKzMTVWzXHYgM48ztiBsegdoCo53lUADXOYSUZo3amrRvp2OMvpwFfHhLDYsavK2aFPNfbc2YKaWSNa9bkQ==","signatures":[{"sig":"MEQCID1FzvbP0v6rM/IJ9/1CWTq2BTqhlXlTz2X030qqmHwHAiBA6helgGqdntltMqhHNZPHBRc4VIEiOoKup2OVSkImZQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/my-bad@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":199148},"type":"module","_from":"file:/home/runner/work/_temp/uppt-tarballs/my-bad-0.1.0.tgz","types":"./dist/index.d.mts","engines":{"node":">=22.12.0"},"exports":{".":"./dist/index.mjs","./vite":"./dist/vite/index.mjs","./sinks":"./dist/sinks/index.mjs","./channel":"./dist/channel/index.mjs","./presets":"./dist/presets/index.mjs","./vite/client":"./dist/vite/client.mjs","./package.json":"./package.json"},"scripts":{"dev":"vitest dev","lint":"eslint .","play":"pnpm build && node playground/dev.ts","test":"pnpm test:unit && pnpm test:types","build":"tsdown","assets":"pnpm build && playwright test -u changed","play:vite":"pnpm build && node playground/vite/server.ts","test:a11y":"vitest run test/a11y.test.ts test/browser.test.ts","test:knip":"knip","test:pack":"pnpm build && node scripts/check-pack.ts","test:unit":"vitest","screenshot":"pnpm build && node playground/screenshot.ts","test:types":"tsc --noEmit","test:versions":"installed-check -d --no-workspaces","release:preview":"pkg-pr-new publish --compact --pnpm"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"danielroe","email":"daniel@roe.dev"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:27bb25c8-4cb6-49e9-b011-219ed065784f"}},"_resolved":"/home/runner/work/_temp/uppt-tarballs/my-bad-0.1.0.tgz","_integrity":"sha512-LgjuKzMTVWzXHYgM48ztiBsegdoCo53lUADXOYSUZo3amrRvp2OMvpwFfHhLDYsavK2aFPNfbc2YKaWSNa9bkQ==","repository":{"url":"git+https://github.com/danielroe/my-bad.git","type":"git"},"_npmVersion":"12.0.2","description":"Beautiful dev-server error pages: HTML, ANSI and JSON from one sourcemapped report","directories":{},"nano-staged":{"*.{js,ts,mjs,cjs,json,.*rc}":["npx eslint --fix"]},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"errx":"^0.2.0","fnv1a-64":"^0.1.2","clickable-path":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.34.0","vite":"8.2.2","eslint":"10.10.0","tsdown":"0.23.0","vitest":"5.0.0","consola":"3.4.2","axe-core":"4.13.0","rolldown":"1.2.7","ansivision":"0.4.0","fast-check":"4.9.0","pkg-pr-new":"0.0.88","playwright":"1.63.0","typescript":"6.0.3","@types/node":"26.4.1","nano-staged":"1.0.2","installed-check":"11.0.0","simple-git-hooks":"2.14.0","@vitest/coverage-v8":"5.0.0","@antfu/eslint-config":"9.5.1"},"peerDependencies":{"vite":">=6"},"simple-git-hooks":{"pre-commit":"npx nano-staged"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/my-bad_0.1.0_1788867811758_0.309534452811292","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"my-bad","version":"0.2.0","license":"MIT","_id":"my-bad@0.2.0","maintainers":[{"name":"danielroe","email":"daniel@roe.dev"}],"homepage":"https://github.com/danielroe/my-bad#readme","bugs":{"url":"https://github.com/danielroe/my-bad/issues"},"dist":{"shasum":"6a641620c63ebf9de138990fa9870e9e4b367450","tarball":"https://registry.npmjs.org/my-bad/-/my-bad-0.2.0.tgz","fileCount":24,"integrity":"sha512-7Dc7Mk/RAVvcRevKTUEVxCENeOtc98e5+cp/14OZOiL+c2Ng9LyWt5rItl/4xA0VfD6vKB/FWQhl1hbnTNJPpQ==","signatures":[{"sig":"MEQCIFr92MaF2CXm8H6OzIU87x2W3I6rszXXK8rPlnehCWHRAiAtqxajcX45IJMpIR0mfbg31YCjiFvJDx+NOS3PqBCjhQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/my-bad@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":220815},"type":"module","_from":"file:/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.0.tgz","types":"./dist/index.d.mts","engines":{"node":">=22.12.0"},"exports":{".":"./dist/index.mjs","./vite":"./dist/vite/index.mjs","./sinks":"./dist/sinks/index.mjs","./channel":"./dist/channel/index.mjs","./presets":"./dist/presets/index.mjs","./vite/client":"./dist/vite/client.mjs","./package.json":"./package.json"},"scripts":{"dev":"vitest dev","lint":"eslint .","play":"pnpm build && node playground/dev.ts","test":"pnpm test:unit && pnpm test:types","build":"tsdown","assets":"pnpm build && playwright test -u changed","play:vite":"pnpm build && node playground/vite/server.ts","test:a11y":"vitest run test/a11y.test.ts test/browser.test.ts","test:knip":"knip","test:pack":"pnpm build && node scripts/check-pack.ts","test:unit":"vitest","screenshot":"pnpm build && node playground/screenshot.ts","test:types":"tsc --noEmit","test:versions":"installed-check -d --no-workspaces","release:preview":"pkg-pr-new publish --compact --pnpm"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"danielroe","email":"daniel@roe.dev"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:27bb25c8-4cb6-49e9-b011-219ed065784f"}},"_resolved":"/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.0.tgz","_integrity":"sha512-7Dc7Mk/RAVvcRevKTUEVxCENeOtc98e5+cp/14OZOiL+c2Ng9LyWt5rItl/4xA0VfD6vKB/FWQhl1hbnTNJPpQ==","devEngines":{"runtime":{"name":"node","onFail":"download","version":"^24.0.0"},"packageManager":{"name":"pnpm","onFail":"download","version":"12.3.4"}},"repository":{"url":"git+https://github.com/danielroe/my-bad.git","type":"git"},"_npmVersion":"12.0.2","description":"Beautiful dev-server error pages: HTML, ANSI and JSON from one sourcemapped report","directories":{},"nano-staged":{"*.{js,ts,mjs,cjs,json,.*rc}":["pnpm eslint --fix"]},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"errx":"^0.2.1","fnv1a-64":"^0.1.2","clickable-path":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.35.1","vite":"8.3.0","eslint":"10.10.0","tsdown":"0.23.0","vitest":"5.0.0","consola":"3.4.2","axe-core":"4.13.0","rolldown":"1.2.8","ansivision":"0.4.0","fast-check":"4.10.0","pkg-pr-new":"0.0.88","playwright":"1.63.0","typescript":"6.0.3","@types/node":"26.5.1","nano-staged":"1.0.2","installed-check":"11.0.0","simple-git-hooks":"2.14.0","@vitest/coverage-v8":"5.0.0","@antfu/eslint-config":"9.5.1"},"peerDependencies":{"vite":">=6"},"simple-git-hooks":{"pre-commit":"pnpm nano-staged"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/my-bad_0.2.0_1789599296373_0.5808848574768752","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"my-bad","version":"0.2.1","license":"MIT","_id":"my-bad@0.2.1","maintainers":[{"name":"danielroe","email":"daniel@roe.dev"}],"homepage":"https://github.com/danielroe/my-bad#readme","bugs":{"url":"https://github.com/danielroe/my-bad/issues"},"dist":{"shasum":"10f7c5d42ac20e7da2a2e66e18a15a12b6cd4316","tarball":"https://registry.npmjs.org/my-bad/-/my-bad-0.2.1.tgz","fileCount":24,"integrity":"sha512-G2/CvDSoY204Hl9p5s7ZXegzNMqqlabPv11dgeKR8e8+XH33P21JRkg1KpTGmLVn/6rO0GZYgkaoypO1AD0ZFg==","signatures":[{"sig":"MEUCIQDsgY9gHoj3+T3HcBCqhVrh1OIAiZ2njc1Ljnox1/R2bQIgV0f9mxgvgCnm+5Idwu+7RqhYXhe3UrU6I0sh6DXYSTY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/my-bad@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":223414},"type":"module","_from":"file:/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.1.tgz","types":"./dist/index.d.mts","engines":{"node":">=22.12.0"},"exports":{".":"./dist/index.mjs","./vite":"./dist/vite/index.mjs","./sinks":"./dist/sinks/index.mjs","./channel":"./dist/channel/index.mjs","./presets":"./dist/presets/index.mjs","./vite/client":"./dist/vite/client.mjs","./package.json":"./package.json"},"scripts":{"dev":"vitest dev","lint":"eslint .","play":"pnpm build && node playground/dev.ts","test":"pnpm test:unit && pnpm test:types","build":"tsdown","assets":"pnpm build && playwright test -u changed","play:vite":"pnpm build && node playground/vite/server.ts","test:a11y":"vitest run test/a11y.test.ts test/browser.test.ts","test:knip":"knip","test:pack":"pnpm build && node scripts/check-pack.ts","test:unit":"vitest","screenshot":"pnpm build && node playground/screenshot.ts","test:types":"tsc --noEmit","test:versions":"installed-check -d --no-workspaces","release:preview":"pkg-pr-new publish --compact --pnpm"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"danielroe","email":"daniel@roe.dev"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:27bb25c8-4cb6-49e9-b011-219ed065784f"}},"_resolved":"/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.1.tgz","_integrity":"sha512-G2/CvDSoY204Hl9p5s7ZXegzNMqqlabPv11dgeKR8e8+XH33P21JRkg1KpTGmLVn/6rO0GZYgkaoypO1AD0ZFg==","devEngines":{"runtime":{"name":"node","onFail":"download","version":"^24.0.0"},"packageManager":{"name":"pnpm","onFail":"download","version":"12.3.4"}},"repository":{"url":"git+https://github.com/danielroe/my-bad.git","type":"git"},"_npmVersion":"12.0.2","description":"Beautiful dev-server error pages: HTML, ANSI and JSON from one sourcemapped report","directories":{},"nano-staged":{"*.{js,ts,mjs,cjs,json,.*rc}":["pnpm eslint --fix"]},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"errx":"^0.2.2","fnv1a-64":"^0.1.2","clickable-path":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.35.1","vite":"8.3.0","eslint":"10.10.0","tsdown":"0.23.0","vitest":"5.0.0","consola":"3.4.2","axe-core":"4.13.0","rolldown":"1.2.8","ansivision":"0.4.0","fast-check":"4.10.0","pkg-pr-new":"0.0.88","playwright":"1.63.0","typescript":"6.0.3","@types/node":"26.5.1","nano-staged":"1.0.2","installed-check":"11.0.0","simple-git-hooks":"2.14.0","@vitest/coverage-v8":"5.0.0","@antfu/eslint-config":"9.5.1"},"peerDependencies":{"vite":">=6"},"simple-git-hooks":{"pre-commit":"pnpm nano-staged"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/my-bad_0.2.1_1789637322269_0.3894571081832734","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"my-bad","version":"0.2.2","license":"MIT","_id":"my-bad@0.2.2","maintainers":[{"name":"danielroe","email":"daniel@roe.dev"}],"homepage":"https://github.com/danielroe/my-bad#readme","bugs":{"url":"https://github.com/danielroe/my-bad/issues"},"dist":{"shasum":"455f23d406a533c45db4b150f666b983bfa09add","tarball":"https://registry.npmjs.org/my-bad/-/my-bad-0.2.2.tgz","fileCount":24,"integrity":"sha512-K2HJ7QFFYZkfFTwAk1wqzBAbk1Na2lKNPg6EwJ2iDYqkyFhYfDrGpIuG+NpwVMxvI0yUoN20SWyTkBATu7PeAQ==","signatures":[{"sig":"MEUCIFNtVj8u2NRa8HzCB0JVJUSlPPOzaQ2q/ZVO5TmabO+YAiEA8edPEOhyiRXVV8WQ4RQuvdOKv76BpUBmMLGrJnkDx8s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/my-bad@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":223916},"type":"module","_from":"file:/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.2.tgz","types":"./dist/index.d.mts","engines":{"node":">=22.12.0"},"exports":{".":"./dist/index.mjs","./vite":"./dist/vite/index.mjs","./sinks":"./dist/sinks/index.mjs","./channel":"./dist/channel/index.mjs","./presets":"./dist/presets/index.mjs","./vite/client":"./dist/vite/client.mjs","./package.json":"./package.json"},"scripts":{"dev":"vitest dev","lint":"eslint .","play":"pnpm build && node playground/dev.ts","test":"pnpm test:unit && pnpm test:types","build":"tsdown","assets":"pnpm build && playwright test -u changed","play:vite":"pnpm build && node playground/vite/server.ts","test:a11y":"vitest run test/a11y.test.ts test/browser.test.ts","test:knip":"knip","test:pack":"pnpm build && node scripts/check-pack.ts","test:unit":"vitest","screenshot":"pnpm build && node playground/screenshot.ts","test:types":"tsc --noEmit","test:versions":"installed-check -d --no-workspaces","release:preview":"pkg-pr-new publish --compact --pnpm"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"danielroe","email":"daniel@roe.dev"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:27bb25c8-4cb6-49e9-b011-219ed065784f"}},"_resolved":"/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.2.tgz","_integrity":"sha512-K2HJ7QFFYZkfFTwAk1wqzBAbk1Na2lKNPg6EwJ2iDYqkyFhYfDrGpIuG+NpwVMxvI0yUoN20SWyTkBATu7PeAQ==","devEngines":{"runtime":{"name":"node","onFail":"download","version":"^24.0.0"},"packageManager":{"name":"pnpm","onFail":"download","version":"12.3.4"}},"repository":{"url":"git+https://github.com/danielroe/my-bad.git","type":"git"},"_npmVersion":"12.0.2","description":"Beautiful dev-server error pages: HTML, ANSI and JSON from one sourcemapped report","directories":{},"nano-staged":{"*.{js,ts,mjs,cjs,json,.*rc}":["pnpm eslint --fix"]},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"errx":"^0.2.2","fnv1a-64":"^0.1.2","clickable-path":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.35.1","vite":"8.3.0","eslint":"10.10.0","tsdown":"0.23.0","vitest":"5.0.0","consola":"3.4.2","axe-core":"4.13.0","rolldown":"1.2.8","ansivision":"0.4.0","fast-check":"4.10.0","pkg-pr-new":"0.0.88","playwright":"1.63.0","typescript":"6.0.3","@types/node":"26.5.1","nano-staged":"1.0.2","installed-check":"11.0.0","simple-git-hooks":"2.14.0","@vitest/coverage-v8":"5.0.0","@antfu/eslint-config":"9.5.1"},"peerDependencies":{"vite":">=6"},"simple-git-hooks":{"pre-commit":"pnpm nano-staged"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/my-bad_0.2.2_1789641001669_0.32871102764524096","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"my-bad","version":"0.2.3","license":"MIT","_id":"my-bad@0.2.3","maintainers":[{"name":"danielroe","email":"daniel@roe.dev"}],"homepage":"https://github.com/danielroe/my-bad#readme","bugs":{"url":"https://github.com/danielroe/my-bad/issues"},"dist":{"shasum":"b009e03bcece0bf7db09cea57f8d201156ad2ef7","tarball":"https://registry.npmjs.org/my-bad/-/my-bad-0.2.3.tgz","fileCount":24,"integrity":"sha512-Ob3Z5dp0O5IJpDFvggvkGtQA94ebYBlai0FTw6XZP7FhQHXsYM2IJWLuJ7+2kUAarVeHuIX/Um9F3/1hK1xcdw==","signatures":[{"sig":"MEYCIQDWAz4elLRC2x5kh2FI1QKrB8q5csWYMupdffQa5DdNAgIhAJB06qUeuvaDSLiM9zEZSsgUgbuNY7X60vE3kHzyTwFg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/my-bad@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":227594},"type":"module","_from":"file:/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.3.tgz","types":"./dist/index.d.mts","engines":{"node":">=22.12.0"},"exports":{".":"./dist/index.mjs","./vite":"./dist/vite/index.mjs","./sinks":"./dist/sinks/index.mjs","./channel":"./dist/channel/index.mjs","./presets":"./dist/presets/index.mjs","./vite/client":"./dist/vite/client.mjs","./package.json":"./package.json"},"scripts":{"dev":"vitest dev","lint":"eslint .","play":"pnpm build && node playground/dev.ts","test":"pnpm test:unit && pnpm test:types","build":"tsdown","assets":"pnpm build && playwright test -u changed","play:vite":"pnpm build && node playground/vite/server.ts","test:a11y":"vitest run test/a11y.test.ts test/browser.test.ts","test:knip":"knip","test:pack":"pnpm build && node scripts/check-pack.ts","test:unit":"vitest","screenshot":"pnpm build && node playground/screenshot.ts","test:types":"tsc --noEmit","test:versions":"installed-check -d --no-workspaces","release:preview":"pkg-pr-new publish --compact --pnpm"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"danielroe","email":"daniel@roe.dev"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:27bb25c8-4cb6-49e9-b011-219ed065784f"}},"_resolved":"/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.3.tgz","_integrity":"sha512-Ob3Z5dp0O5IJpDFvggvkGtQA94ebYBlai0FTw6XZP7FhQHXsYM2IJWLuJ7+2kUAarVeHuIX/Um9F3/1hK1xcdw==","devEngines":{"runtime":{"name":"node","onFail":"download","version":"^24.0.0"},"packageManager":{"name":"pnpm","onFail":"download","version":"12.3.4"}},"repository":{"url":"git+https://github.com/danielroe/my-bad.git","type":"git"},"_npmVersion":"12.0.2","description":"Beautiful dev-server error pages: HTML, ANSI and JSON from one sourcemapped report","directories":{},"nano-staged":{"*.{js,ts,mjs,cjs,json,.*rc}":["pnpm eslint --fix"]},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"errx":"^0.2.2","fnv1a-64":"^0.1.2","clickable-path":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.35.1","vite":"8.3.0","eslint":"10.10.0","tsdown":"0.23.0","vitest":"5.0.0","consola":"3.4.2","axe-core":"4.13.0","rolldown":"1.2.8","ansivision":"0.4.0","fast-check":"4.10.0","pkg-pr-new":"0.0.88","playwright":"1.63.0","typescript":"6.0.3","@types/node":"26.5.1","nano-staged":"1.0.2","installed-check":"11.0.0","simple-git-hooks":"2.14.0","@vitest/coverage-v8":"5.0.0","@antfu/eslint-config":"9.5.1"},"peerDependencies":{"vite":">=6"},"simple-git-hooks":{"pre-commit":"pnpm nano-staged"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/my-bad_0.2.3_1789663130655_0.3719048570460184","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"my-bad","version":"0.2.4","license":"MIT","_id":"my-bad@0.2.4","maintainers":[{"name":"danielroe","email":"daniel@roe.dev"}],"homepage":"https://github.com/danielroe/my-bad#readme","bugs":{"url":"https://github.com/danielroe/my-bad/issues"},"dist":{"shasum":"8c2abab4591aa3a4f8f4afb472402def79a1f52f","tarball":"https://registry.npmjs.org/my-bad/-/my-bad-0.2.4.tgz","fileCount":24,"integrity":"sha512-pjS/LE1ftd7zuQRmwRa3g0Mb2TlhXe4mzs+jJxaTi67IEYEONKEp9UxVuM9GT+3aIG7FmsU6Anmr99+PXZh0Iw==","signatures":[{"sig":"MEUCICXt+Pe6K+I7Cn0PTnT6ngrinQz9qkoTZqpA0h0HzzQIAiEA6Kc4mAT3Sicd1B2Ao/raKgl1nA9phhRRjx7p+WWzU1E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/my-bad@0.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":234681},"type":"module","_from":"file:/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.4.tgz","types":"./dist/index.d.mts","engines":{"node":">=22.12.0"},"exports":{".":"./dist/index.mjs","./vite":"./dist/vite/index.mjs","./sinks":"./dist/sinks/index.mjs","./channel":"./dist/channel/index.mjs","./presets":"./dist/presets/index.mjs","./vite/client":"./dist/vite/client.mjs","./package.json":"./package.json"},"scripts":{"dev":"vitest dev","lint":"eslint .","play":"pnpm build && node playground/dev.ts","test":"pnpm test:unit && pnpm test:types","build":"tsdown","assets":"pnpm build && playwright test -u changed","play:vite":"pnpm build && node playground/vite/server.ts","test:a11y":"vitest run test/a11y.test.ts test/browser.test.ts","test:knip":"knip","test:pack":"pnpm build && node scripts/check-pack.ts","test:unit":"vitest","screenshot":"pnpm build && node playground/screenshot.ts","test:types":"tsc --noEmit","test:versions":"installed-check -d --no-workspaces","release:preview":"pkg-pr-new publish --compact --pnpm"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"danielroe","email":"daniel@roe.dev"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:27bb25c8-4cb6-49e9-b011-219ed065784f"}},"_resolved":"/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.4.tgz","_integrity":"sha512-pjS/LE1ftd7zuQRmwRa3g0Mb2TlhXe4mzs+jJxaTi67IEYEONKEp9UxVuM9GT+3aIG7FmsU6Anmr99+PXZh0Iw==","devEngines":{"runtime":{"name":"node","onFail":"download","version":"^24.0.0"},"packageManager":{"name":"pnpm","onFail":"download","version":"12.3.4"}},"repository":{"url":"git+https://github.com/danielroe/my-bad.git","type":"git"},"_npmVersion":"12.0.2","description":"Beautiful dev-server error pages: HTML, ANSI and JSON from one sourcemapped report","directories":{},"nano-staged":{"*.{js,ts,mjs,cjs,json,.*rc}":["pnpm eslint --fix"]},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"errx":"^0.2.2","fnv1a-64":"^0.1.2","clickable-path":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.35.1","vite":"8.3.0","eslint":"10.10.0","tsdown":"0.23.0","vitest":"5.0.0","consola":"3.4.2","axe-core":"4.13.0","rolldown":"1.2.8","ansivision":"0.4.0","fast-check":"4.10.0","pkg-pr-new":"0.0.88","playwright":"1.63.0","typescript":"6.0.3","@types/node":"26.5.1","nano-staged":"1.0.2","installed-check":"11.0.0","simple-git-hooks":"2.14.0","@vitest/coverage-v8":"5.0.0","@antfu/eslint-config":"9.5.1"},"peerDependencies":{"vite":">=6"},"simple-git-hooks":{"pre-commit":"pnpm nano-staged"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/my-bad_0.2.4_1789898162835_0.14283984197687238","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"my-bad","version":"0.2.5","license":"MIT","_id":"my-bad@0.2.5","maintainers":[{"name":"danielroe","email":"daniel@roe.dev"}],"homepage":"https://github.com/danielroe/my-bad#readme","bugs":{"url":"https://github.com/danielroe/my-bad/issues"},"dist":{"shasum":"d10181231b299f50723018da461685deaf453cb1","tarball":"https://registry.npmjs.org/my-bad/-/my-bad-0.2.5.tgz","fileCount":24,"integrity":"sha512-jS1CLPZSsHrzyTDZq+5s+uxG8OIjq5+RIxQHRQPedzX5NjjtYzyCVee22tw/zfN4t403S22fF3+t3wVqk7/c4Q==","signatures":[{"sig":"MEYCIQDKTakrjHC5EEddKAsGhVpycSBAmnonsgWN13bQ1yiLOAIhAJN8Igq04KOEZlbzlhBTj3JFNKFhk957ht+JTWqBJSQT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/my-bad@0.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":237899},"type":"module","_from":"file:/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.5.tgz","types":"./dist/index.d.mts","engines":{"node":">=22.12.0"},"exports":{".":"./dist/index.mjs","./vite":"./dist/vite/index.mjs","./sinks":"./dist/sinks/index.mjs","./channel":"./dist/channel/index.mjs","./presets":"./dist/presets/index.mjs","./vite/client":"./dist/vite/client.mjs","./package.json":"./package.json"},"scripts":{"dev":"vitest dev","lint":"eslint .","play":"pnpm build && node playground/dev.ts","test":"pnpm test:unit && pnpm test:types","build":"tsdown","assets":"pnpm build && playwright test -u changed","play:vite":"pnpm build && node playground/vite/server.ts","test:a11y":"vitest run test/a11y.test.ts test/browser.test.ts","test:knip":"knip","test:pack":"pnpm build && node scripts/check-pack.ts","test:unit":"vitest","screenshot":"pnpm build && node playground/screenshot.ts","test:types":"tsc --noEmit","test:versions":"installed-check -d --no-workspaces","release:preview":"pkg-pr-new publish --compact --pnpm"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"danielroe","email":"daniel@roe.dev"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:27bb25c8-4cb6-49e9-b011-219ed065784f"}},"_resolved":"/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.5.tgz","_integrity":"sha512-jS1CLPZSsHrzyTDZq+5s+uxG8OIjq5+RIxQHRQPedzX5NjjtYzyCVee22tw/zfN4t403S22fF3+t3wVqk7/c4Q==","devEngines":{"runtime":{"name":"node","onFail":"download","version":"^24.0.0"},"packageManager":{"name":"pnpm","onFail":"download","version":"12.3.4"}},"repository":{"url":"git+https://github.com/danielroe/my-bad.git","type":"git"},"_npmVersion":"12.0.2","description":"Beautiful dev-server error pages: HTML, ANSI and JSON from one sourcemapped report","directories":{},"nano-staged":{"*.{js,ts,mjs,cjs,json,.*rc}":["pnpm eslint --fix"]},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"errx":"^0.2.2","fnv1a-64":"^0.1.2","clickable-path":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.35.1","vite":"8.3.0","eslint":"10.10.0","tsdown":"0.23.0","vitest":"5.0.0","consola":"3.4.2","axe-core":"4.13.0","rolldown":"1.2.8","ansivision":"0.4.0","fast-check":"4.10.0","pkg-pr-new":"0.0.88","playwright":"1.63.0","typescript":"6.0.3","@types/node":"26.5.1","nano-staged":"1.0.2","installed-check":"11.0.0","simple-git-hooks":"2.14.0","@vitest/coverage-v8":"5.0.0","@antfu/eslint-config":"9.5.1"},"peerDependencies":{"vite":">=6"},"simple-git-hooks":{"pre-commit":"pnpm nano-staged"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/my-bad_0.2.5_1789904597460_0.8982586952773741","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"my-bad","version":"0.2.6","license":"MIT","_id":"my-bad@0.2.6","maintainers":[{"name":"danielroe","email":"daniel@roe.dev"}],"homepage":"https://github.com/danielroe/my-bad#readme","bugs":{"url":"https://github.com/danielroe/my-bad/issues"},"dist":{"shasum":"4834d115b0213926f58339bf0abab6f8e04d09a2","tarball":"https://registry.npmjs.org/my-bad/-/my-bad-0.2.6.tgz","fileCount":24,"integrity":"sha512-afKIOyZQa3KlFBOqPeDBuBNNVdqX8Dr+lSUoduKgmVfzvpQ/bB4D2NZEGetqcprZYmmVnl0RYEygh3eWD9S26Q==","signatures":[{"sig":"MEUCIEYOIhNBviBbdfbvEHsq71dmMRzSBtfZmxT721k6ScOWAiEAp2xudQdBTtoKmFAyUSr1w53HZqU/ZIs1euCqUC9neaQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/my-bad@0.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":240953},"type":"module","_from":"file:/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.6.tgz","types":"./dist/index.d.mts","engines":{"node":">=22.12.0"},"exports":{".":"./dist/index.mjs","./vite":"./dist/vite/index.mjs","./sinks":"./dist/sinks/index.mjs","./channel":"./dist/channel/index.mjs","./presets":"./dist/presets/index.mjs","./vite/client":"./dist/vite/client.mjs","./package.json":"./package.json"},"scripts":{"dev":"vitest dev","lint":"eslint .","play":"pnpm build && node playground/dev.ts","test":"pnpm test:unit && pnpm test:types","build":"tsdown","assets":"pnpm build && playwright test -u changed","play:vite":"pnpm build && node playground/vite/server.ts","test:a11y":"vitest run test/a11y.test.ts test/browser.test.ts","test:knip":"knip","test:pack":"pnpm build && node scripts/check-pack.ts","test:unit":"vitest","screenshot":"pnpm build && node playground/screenshot.ts","test:types":"tsc --noEmit","test:versions":"installed-check -d --no-workspaces","release:preview":"pkg-pr-new publish --compact --pnpm"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"danielroe","email":"daniel@roe.dev"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:27bb25c8-4cb6-49e9-b011-219ed065784f"}},"_resolved":"/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.6.tgz","_integrity":"sha512-afKIOyZQa3KlFBOqPeDBuBNNVdqX8Dr+lSUoduKgmVfzvpQ/bB4D2NZEGetqcprZYmmVnl0RYEygh3eWD9S26Q==","devEngines":{"runtime":{"name":"node","onFail":"download","version":"^24.0.0"},"packageManager":{"name":"pnpm","onFail":"download","version":"12.3.4"}},"repository":{"url":"git+https://github.com/danielroe/my-bad.git","type":"git"},"_npmVersion":"12.0.2","description":"Beautiful dev-server error pages: HTML, ANSI and JSON from one sourcemapped report","directories":{},"nano-staged":{"*.{js,ts,mjs,cjs,json,.*rc}":["pnpm eslint --fix"]},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"errx":"^0.2.2","fnv1a-64":"^0.1.2","clickable-path":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.37.0","vite":"8.3.0","eslint":"10.11.0","tsdown":"0.23.0","vitest":"5.0.1","consola":"3.4.2","axe-core":"4.13.0","rolldown":"1.2.9","ansivision":"0.4.0","fast-check":"4.10.2","pkg-pr-new":"0.0.88","playwright":"1.63.0","typescript":"6.0.3","@types/node":"26.6.2","nano-staged":"1.0.2","installed-check":"11.0.0","simple-git-hooks":"2.14.0","@vitest/coverage-v8":"5.0.1","@antfu/eslint-config":"9.5.1"},"peerDependencies":{"vite":">=6"},"simple-git-hooks":{"pre-commit":"pnpm nano-staged"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/my-bad_0.2.6_1790069694658_0.3710707838089402","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"my-bad","version":"0.2.7","license":"MIT","_id":"my-bad@0.2.7","maintainers":[{"name":"danielroe","email":"daniel@roe.dev"}],"homepage":"https://github.com/danielroe/my-bad#readme","bugs":{"url":"https://github.com/danielroe/my-bad/issues"},"dist":{"shasum":"b07e5b19d9ee9a55418b256663133241f70bde96","tarball":"https://registry.npmjs.org/my-bad/-/my-bad-0.2.7.tgz","fileCount":24,"integrity":"sha512-tI/Lvgd78tocwu2hPmvAsdr0b1lTunOMrsnKtm4VH+leR3kS69v+gpMCOh5Ty5KIgPV5GH/HOBbzYogQB9Pvpw==","signatures":[{"sig":"MEUCIHJcKgI8xruM0YLxyUSDO13H+jkAD2TNFd7q+7LZFq0XAiEA8LRyCFMNfg4mWyAB/cWNL6NmmyE7DYJuvIdM8W28i0A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/my-bad@0.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":241746},"type":"module","_from":"file:/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.7.tgz","types":"./dist/index.d.mts","engines":{"node":">=22.12.0"},"exports":{".":"./dist/index.mjs","./vite":"./dist/vite/index.mjs","./sinks":"./dist/sinks/index.mjs","./channel":"./dist/channel/index.mjs","./presets":"./dist/presets/index.mjs","./vite/client":"./dist/vite/client.mjs","./package.json":"./package.json"},"scripts":{"dev":"vitest dev","lint":"eslint .","play":"pnpm build && node playground/dev.ts","test":"pnpm test:unit && pnpm test:types","build":"tsdown","assets":"pnpm build && playwright test -u changed","play:vite":"pnpm build && node playground/vite/server.ts","test:a11y":"vitest run test/a11y.test.ts test/browser.test.ts","test:knip":"knip","test:pack":"pnpm build && node scripts/check-pack.ts","test:unit":"vitest","screenshot":"pnpm build && node playground/screenshot.ts","test:types":"tsc --noEmit","test:versions":"installed-check -d --no-workspaces","release:preview":"pkg-pr-new publish --compact --pnpm"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"danielroe","email":"daniel@roe.dev"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:27bb25c8-4cb6-49e9-b011-219ed065784f"}},"_resolved":"/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.7.tgz","_integrity":"sha512-tI/Lvgd78tocwu2hPmvAsdr0b1lTunOMrsnKtm4VH+leR3kS69v+gpMCOh5Ty5KIgPV5GH/HOBbzYogQB9Pvpw==","devEngines":{"runtime":{"name":"node","onFail":"download","version":"^24.0.0"},"packageManager":{"name":"pnpm","onFail":"download","version":"12.3.4"}},"repository":{"url":"git+https://github.com/danielroe/my-bad.git","type":"git"},"_npmVersion":"12.0.2","description":"Beautiful dev-server error pages: HTML, ANSI and JSON from one sourcemapped report","directories":{},"nano-staged":{"*.{js,ts,mjs,cjs,json,.*rc}":["pnpm eslint --fix"]},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"errx":"^0.2.2","fnv1a-64":"^0.1.2","clickable-path":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.37.0","vite":"8.3.0","eslint":"10.11.0","tsdown":"0.23.0","vitest":"5.0.1","consola":"3.4.2","axe-core":"4.13.0","rolldown":"1.2.9","ansivision":"0.4.0","fast-check":"4.10.2","pkg-pr-new":"0.0.88","playwright":"1.63.0","typescript":"6.0.3","@types/node":"26.6.2","nano-staged":"1.0.2","installed-check":"11.0.0","simple-git-hooks":"2.14.0","@vitest/coverage-v8":"5.0.1","@antfu/eslint-config":"9.5.1"},"peerDependencies":{"vite":">=6"},"simple-git-hooks":{"pre-commit":"pnpm nano-staged"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/my-bad_0.2.7_1790087042384_0.3406449925420152","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"my-bad","version":"0.2.8","license":"MIT","_id":"my-bad@0.2.8","maintainers":[{"name":"danielroe","email":"daniel@roe.dev"}],"homepage":"https://github.com/danielroe/my-bad#readme","bugs":{"url":"https://github.com/danielroe/my-bad/issues"},"dist":{"shasum":"0aa1821dceb89ef709d25a6e55ec941a8193a5a9","tarball":"https://registry.npmjs.org/my-bad/-/my-bad-0.2.8.tgz","fileCount":24,"integrity":"sha512-cJE39jKmqz/B1D2/vbDAuHUiwIGyGTqF4M7yxfj1txWx0W4TaJNE6ach1kyMrN5XgewsYU95DsnyTgXZdVTA9Q==","signatures":[{"sig":"MEQCIFY4sT1V0clgGj1z4oeA09rnYqj+9VVwc7aZqxI07vOQAiA3CYJd/doYOB6rMYslti+a1XS9ZPwybovlWRWhGHK8MQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/my-bad@0.2.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":244389},"type":"module","_from":"file:/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.8.tgz","types":"./dist/index.d.mts","engines":{"node":">=22.12.0"},"exports":{".":"./dist/index.mjs","./vite":"./dist/vite/index.mjs","./sinks":"./dist/sinks/index.mjs","./channel":"./dist/channel/index.mjs","./presets":"./dist/presets/index.mjs","./vite/client":"./dist/vite/client.mjs","./package.json":"./package.json"},"scripts":{"dev":"vitest dev","lint":"eslint .","play":"pnpm build && node playground/dev.ts","test":"pnpm test:unit && pnpm test:types","build":"tsdown","assets":"pnpm build && playwright test -u changed","play:vite":"pnpm build && node playground/vite/server.ts","test:a11y":"vitest run test/a11y.test.ts test/browser.test.ts","test:knip":"knip","test:pack":"pnpm build && node scripts/check-pack.ts","test:unit":"vitest","screenshot":"pnpm build && node playground/screenshot.ts","test:types":"tsc --noEmit","test:runtime":"node --test test/runtime/runtime.test.mjs","test:versions":"installed-check -d --no-workspaces","release:preview":"pkg-pr-new publish --compact --pnpm"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"danielroe","email":"daniel@roe.dev"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:27bb25c8-4cb6-49e9-b011-219ed065784f"}},"_resolved":"/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.8.tgz","_integrity":"sha512-cJE39jKmqz/B1D2/vbDAuHUiwIGyGTqF4M7yxfj1txWx0W4TaJNE6ach1kyMrN5XgewsYU95DsnyTgXZdVTA9Q==","devEngines":{"runtime":{"name":"node","onFail":"download","version":"^24.0.0"},"packageManager":{"name":"pnpm","onFail":"download","version":"12.3.4"}},"repository":{"url":"git+https://github.com/danielroe/my-bad.git","type":"git"},"_npmVersion":"12.1.0","description":"Beautiful dev-server error pages: HTML, ANSI and JSON from one sourcemapped report","directories":{},"nano-staged":{"*.{js,ts,mjs,cjs,json,.*rc}":["pnpm eslint --fix"]},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"errx":"^0.2.2","fnv1a-64":"^0.1.2","clickable-path":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.37.0","vite":"8.3.0","eslint":"10.11.0","tsdown":"0.23.0","vitest":"5.0.1","consola":"3.4.2","axe-core":"4.13.0","rolldown":"1.2.9","ansivision":"0.4.0","fast-check":"4.10.2","pkg-pr-new":"0.0.88","playwright":"1.63.0","typescript":"6.0.3","@types/node":"26.6.2","nano-staged":"1.0.2","installed-check":"11.0.0","simple-git-hooks":"2.14.0","@vitest/coverage-v8":"5.0.1","@antfu/eslint-config":"9.5.1"},"peerDependencies":{"vite":">=6"},"simple-git-hooks":{"pre-commit":"pnpm nano-staged"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/my-bad_0.2.8_1790242988003_0.7819792843435271","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"my-bad","version":"0.2.9","license":"MIT","_id":"my-bad@0.2.9","maintainers":[{"name":"danielroe","email":"daniel@roe.dev"}],"homepage":"https://github.com/danielroe/my-bad#readme","bugs":{"url":"https://github.com/danielroe/my-bad/issues"},"dist":{"shasum":"c5c6ad4056a53d96f4ed253710a88fe836abfdb9","tarball":"https://registry.npmjs.org/my-bad/-/my-bad-0.2.9.tgz","fileCount":24,"integrity":"sha512-Aa24qKJ506aElWe0x1C55flgeZOnQYm6BE3SG8bz4vbGrOkXnwvEqZNVF/L/HrUrKAvu/BlvK9bD1G5EU3QfbA==","signatures":[{"sig":"MEUCIQCya9uq1BfxvMdLol1xxwUXvBJ6BwsxNFmNnqADyll9bwIgPLiCZqfYVBQnDzYWnBucyJzitiq0McvQP7/Fr1wMGpE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/my-bad@0.2.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":243165},"type":"module","_from":"file:/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.9.tgz","types":"./dist/index.d.mts","engines":{"node":">=22.12.0"},"exports":{".":"./dist/index.mjs","./vite":"./dist/vite/index.mjs","./sinks":"./dist/sinks/index.mjs","./channel":"./dist/channel/index.mjs","./presets":"./dist/presets/index.mjs","./vite/client":"./dist/vite/client.mjs","./package.json":"./package.json"},"scripts":{"dev":"vitest dev","lint":"eslint .","play":"pnpm build && node playground/dev.ts","test":"pnpm test:unit && pnpm test:types","build":"tsdown","assets":"pnpm build && playwright test -u changed","play:vite":"pnpm build && node playground/vite/server.ts","test:a11y":"vitest run test/a11y.test.ts test/browser.test.ts","test:knip":"knip","test:pack":"pnpm build && node scripts/check-pack.ts","test:unit":"vitest","screenshot":"pnpm build && node playground/screenshot.ts","test:types":"tsc --noEmit","test:runtime":"node --test test/runtime/runtime.test.mjs","test:versions":"installed-check -d --no-workspaces","release:preview":"pkg-pr-new publish --compact --pnpm"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"danielroe","email":"daniel@roe.dev"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:27bb25c8-4cb6-49e9-b011-219ed065784f"}},"_resolved":"/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.9.tgz","_integrity":"sha512-Aa24qKJ506aElWe0x1C55flgeZOnQYm6BE3SG8bz4vbGrOkXnwvEqZNVF/L/HrUrKAvu/BlvK9bD1G5EU3QfbA==","devEngines":{"runtime":{"name":"node","onFail":"download","version":"^24.0.0"},"packageManager":{"name":"pnpm","onFail":"download","version":"12.3.4"}},"repository":{"url":"git+https://github.com/danielroe/my-bad.git","type":"git"},"_npmVersion":"12.1.0","description":"Beautiful dev-server error pages: HTML, ANSI and JSON from one sourcemapped report","directories":{},"nano-staged":{"*.{js,ts,mjs,cjs,json,.*rc}":["pnpm eslint --fix"]},"sideEffects":false,"_nodeVersion":"24.21.0","dependencies":{"errx":"^0.2.2","fnv1a-64":"^0.1.2","clickable-path":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.37.0","vite":"8.3.0","eslint":"10.11.0","tsdown":"0.23.0","vitest":"5.0.1","consola":"3.4.2","axe-core":"4.13.0","rolldown":"1.2.9","ansivision":"0.4.0","fast-check":"4.10.2","pkg-pr-new":"0.0.88","playwright":"1.63.0","typescript":"6.0.3","@types/node":"26.6.2","nano-staged":"1.0.2","installed-check":"11.0.0","simple-git-hooks":"2.14.0","@vitest/coverage-v8":"5.0.1","@antfu/eslint-config":"9.5.1"},"peerDependencies":{"vite":">=6"},"simple-git-hooks":{"pre-commit":"pnpm nano-staged"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/my-bad_0.2.9_1790428353697_0.8873254859906259","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"my-bad","version":"0.2.10","license":"MIT","_id":"my-bad@0.2.10","maintainers":[{"name":"danielroe","email":"daniel@roe.dev"},{"name":"hugo_rcd","email":"hrichard206@gmail.com"}],"homepage":"https://github.com/danielroe/my-bad#readme","bugs":{"url":"https://github.com/danielroe/my-bad/issues"},"dist":{"shasum":"8fcfcf70cb2e0f981eecae2fae3036e6a3256a31","tarball":"https://registry.npmjs.org/my-bad/-/my-bad-0.2.10.tgz","fileCount":24,"integrity":"sha512-BScLZZ0ymA14Q37kYTMWWg6KxCKM0U63do5Z2Gqsb2DjFbgFtbY4kTA+cv4RdCwM3NCEub2CZUTTIUo1Blu29w==","signatures":[{"sig":"MEUCIQDTtZVXyHnZ2SJK6IFglqEVpU/CIRyOPKbcIdp0YrCcNgIgIO/M34WjGGYT8dkae6+J2zy2aOPhTqDweVh4FsW9dQo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/my-bad@0.2.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":264113},"type":"module","_from":"file:/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.10.tgz","types":"./dist/index.d.mts","engines":{"node":">=22.12.0"},"exports":{".":"./dist/index.mjs","./vite":"./dist/vite/index.mjs","./sinks":"./dist/sinks/index.mjs","./channel":"./dist/channel/index.mjs","./presets":"./dist/presets/index.mjs","./vite/client":"./dist/vite/client.mjs","./package.json":"./package.json"},"scripts":{"dev":"vitest dev","lint":"eslint .","play":"pnpm build && node playground/dev.ts","test":"pnpm test:unit && pnpm test:types","build":"tsdown","assets":"pnpm build && playwright test -u changed","play:vite":"pnpm build && node playground/vite/server.ts","test:a11y":"vitest run test/a11y.test.ts test/browser.test.ts","test:knip":"knip","test:pack":"pnpm build && node scripts/check-pack.ts","test:unit":"vitest","screenshot":"pnpm build && node playground/screenshot.ts","test:types":"tsc --noEmit","test:runtime":"node --test test/runtime/runtime.test.mjs","test:versions":"installed-check -d --no-workspaces","release:preview":"pkg-pr-new publish --compact --pnpm"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"danielroe","email":"daniel@roe.dev"},"trustedPublisher":{"id":"github","oidcConfigId":"27bb25c8-4cb6-49e9-b011-219ed065784f"}},"_resolved":"/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.10.tgz","_integrity":"sha512-BScLZZ0ymA14Q37kYTMWWg6KxCKM0U63do5Z2Gqsb2DjFbgFtbY4kTA+cv4RdCwM3NCEub2CZUTTIUo1Blu29w==","devEngines":{"runtime":{"name":"node","onFail":"download","version":"^24.0.0"},"packageManager":{"name":"pnpm","onFail":"download","version":"12.3.4"}},"repository":{"url":"git+https://github.com/danielroe/my-bad.git","type":"git"},"_npmVersion":"12.2.0","description":"Beautiful dev-server error pages: HTML, ANSI and JSON from one sourcemapped report","directories":{},"nano-staged":{"*.{js,ts,mjs,cjs,json,.*rc}":["pnpm eslint --fix"]},"sideEffects":false,"_nodeVersion":"24.21.0","dependencies":{"errx":"^0.2.2","fnv1a-64":"^0.1.2","clickable-path":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"knip":"6.38.0","vite":"8.3.1","eslint":"10.11.0","tsdown":"0.23.0","vitest":"5.0.3","consola":"3.4.2","axe-core":"4.13.0","rolldown":"1.2.11","ansivision":"0.4.0","fast-check":"4.10.2","pkg-pr-new":"0.0.88","playwright":"1.63.0","typescript":"6.0.3","@types/node":"26.6.3","nano-staged":"1.0.2","installed-check":"11.0.0","simple-git-hooks":"2.14.0","@vitest/coverage-v8":"5.0.3","@antfu/eslint-config":"9.5.1"},"peerDependencies":{"vite":">=6"},"simple-git-hooks":{"pre-commit":"pnpm nano-staged"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/my-bad_0.2.10_1791135051795_0.5719019441417736","host":"s3://npm-registry-packages-npm-production"}},"0.2.11":{"_id":"my-bad@0.2.11","bugs":{"url":"https://github.com/danielroe/my-bad/issues"},"dist":{"shasum":"1e773a551f761844fb7bc40173d3b6bcb9726846","tarball":"https://registry.npmjs.org/my-bad/-/my-bad-0.2.11.tgz","integrity":"sha512-K1R6DRz31BR7YYaDDLRr97XWKWku3SQhHKpDgz7i/VS3O3pvphIzbJIrrEXupSEmPtZElY9UzCrDc0nWvG4HyA==","fileCount":24,"unpackedSize":266280,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/my-bad@0.2.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCMlWeIJ1HtvdeeSMNXrR2W1SYrTFDjpQsglXbEi05ZigIhAKsB+vDqj9CHW3BWr0zZSaKFRPvMPA7mWYESJkY7A2rT"}]},"name":"my-bad","type":"module","_from":"file:/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.11.tgz","types":"./dist/index.d.mts","engines":{"node":">=22.12.0"},"exports":{".":"./dist/index.mjs","./vite":"./dist/vite/index.mjs","./sinks":"./dist/sinks/index.mjs","./channel":"./dist/channel/index.mjs","./presets":"./dist/presets/index.mjs","./vite/client":"./dist/vite/client.mjs","./package.json":"./package.json"},"license":"MIT","scripts":{"dev":"vitest dev","lint":"eslint .","play":"pnpm build && node playground/dev.ts","test":"pnpm test:unit && pnpm test:types","build":"tsdown","assets":"pnpm build && playwright test -u changed","play:vite":"pnpm build && node playground/vite/server.ts","test:a11y":"vitest run test/a11y.test.ts test/browser.test.ts","test:knip":"knip","test:pack":"pnpm build && node scripts/check-pack.ts","test:unit":"vitest","screenshot":"pnpm build && node playground/screenshot.ts","test:types":"tsc --noEmit","test:runtime":"node --test test/runtime/runtime.test.mjs","test:versions":"installed-check -d --no-workspaces","release:preview":"pkg-pr-new publish --compact --pnpm"},"version":"0.2.11","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"27bb25c8-4cb6-49e9-b011-219ed065784f"},"approver":{"name":"danielroe","email":"daniel@roe.dev"}},"homepage":"https://github.com/danielroe/my-bad#readme","_resolved":"/home/runner/work/_temp/uppt-tarballs/my-bad-0.2.11.tgz","_integrity":"sha512-K1R6DRz31BR7YYaDDLRr97XWKWku3SQhHKpDgz7i/VS3O3pvphIzbJIrrEXupSEmPtZElY9UzCrDc0nWvG4HyA==","devEngines":{"runtime":{"name":"node","onFail":"download","version":"^24.0.0"},"packageManager":{"name":"pnpm","onFail":"download","version":"12.9.1"}},"repository":{"url":"git+https://github.com/danielroe/my-bad.git","type":"git"},"_npmVersion":"12.2.0","description":"Beautiful dev-server error pages: HTML, ANSI and JSON from one sourcemapped report","directories":{},"maintainers":[{"name":"danielroe","email":"daniel@roe.dev"},{"name":"hugo_rcd","email":"hrichard206@gmail.com"}],"nano-staged":{"*.{js,ts,mjs,cjs,json,.*rc}":["pnpm eslint --fix"]},"sideEffects":false,"_nodeVersion":"24.21.0","dependencies":{"errx":"^0.2.2","fnv1a-64":"^0.1.2","clickable-path":"^0.1.1"},"devDependencies":{"knip":"6.39.0","vite":"8.3.2","eslint":"10.12.0","tsdown":"0.23.0","vitest":"5.0.3","consola":"3.4.2","axe-core":"4.14.0","rolldown":"1.2.12","ansivision":"0.4.0","fast-check":"4.10.2","pkg-pr-new":"0.0.90","playwright":"1.63.0","typescript":"6.0.3","@types/node":"26.6.4","nano-staged":"1.0.2","installed-check":"11.0.0","simple-git-hooks":"2.14.0","@vitest/coverage-v8":"5.0.3","@antfu/eslint-config":"9.5.1"},"peerDependencies":{"vite":">=6"},"simple-git-hooks":{"pre-commit":"pnpm nano-staged"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/my-bad_0.2.11_1791366305922_0.20215404994470787"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-02T17:54:22.474Z","modified":"2026-10-07T09:45:06.409Z","0.0.0":"2026-09-02T17:54:22.884Z","0.0.1":"2026-09-03T18:31:40.755Z","0.1.0":"2026-09-08T11:43:31.866Z","0.2.0":"2026-09-16T22:54:56.474Z","0.2.1":"2026-09-17T09:28:42.400Z","0.2.2":"2026-09-17T10:30:01.766Z","0.2.3":"2026-09-17T16:38:50.792Z","0.2.4":"2026-09-20T09:56:02.951Z","0.2.5":"2026-09-20T11:43:17.560Z","0.2.6":"2026-09-22T09:34:54.745Z","0.2.7":"2026-09-22T14:24:02.527Z","0.2.8":"2026-09-24T09:43:08.095Z","0.2.9":"2026-09-26T13:12:33.771Z","0.2.10":"2026-10-04T17:30:51.887Z","0.2.11":"2026-10-07T09:45:06.035Z"},"bugs":{"url":"https://github.com/danielroe/my-bad/issues"},"license":"MIT","homepage":"https://github.com/danielroe/my-bad#readme","repository":{"url":"git+https://github.com/danielroe/my-bad.git","type":"git"},"description":"Beautiful dev-server error pages: HTML, ANSI and JSON from one sourcemapped report","maintainers":[{"name":"danielroe","email":"daniel@roe.dev"},{"name":"hugo_rcd","email":"hrichard206@gmail.com"}],"readme":"# my-bad\n\n[![npm version][npm-version-src]][npm-version-href]\n[![npm downloads][npm-downloads-src]][npm-downloads-href]\n[![Github Actions][github-actions-src]][github-actions-href]\n[![Codecov][codecov-src]][codecov-href]\n\n> Beautiful dev-server error pages rendered to HTML, ANSI or JSON and live updated over SSE. ✨\n\n`my-bad` turns an error into a plain JSON error report with sourcemapped frames, snippets, causes, component trace and request context.\n\nYou can then use `my-bad` to render that report as a full HTML page, a shadow-DOM overlay for an existing page, or ANSI for the terminal. A small SSE channel keeps browser-based pages live, meaning errors can be updated, the page can reload when the error is fixed, and additional warnings and server logs are surfaced as they occur.\n\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/danielroe/my-bad/main/assets/page-dark.png\">\n  <img src=\"https://raw.githubusercontent.com/danielroe/my-bad/main/assets/page-light.png\" alt=\"An error page showing the error name, message, hint, component trace and a syntax-highlighted source snippet with the failing line marked\">\n</picture>\n\nThe same report, rendered to the terminal with `renderAnsi`:\n\n<img src=\"https://raw.githubusercontent.com/danielroe/my-bad/main/assets/ansi.svg\" alt=\"Terminal output showing the error, a hint, the component trace, source snippets for the error and its cause, and the collapsed stack frames\">\n\n## Install\n\n```sh\nnpm install my-bad\n```\n\n## Usage\n\n```ts\nimport { createReport, fsLoader, renderAnsi, renderPage } from 'my-bad'\nimport { nuxtPreset } from 'my-bad/presets'\n\nconst report = await createReport(error, {\n  cwd: process.cwd(),\n  loaders: [fsLoader()],\n  presets: [nuxtPreset({ versions: { nuxt: '4.0.0' } })],\n  context: { event },\n})\n\nconsole.error(renderAnsi(report))\n\nif (req.headers.accept?.includes('text/html')) {\n  res.end(renderPage(report, { cwd: process.cwd(), channel: '/__my-bad' }))\n}\nelse {\n  res.end(JSON.stringify(report))\n}\n```\n\n### Diagnostics\n\nAn error that carries its own guidance is read without any configuration. `fix` becomes the report's `hint`, a `docs` URL becomes `docsUrl`, and `sources` (`file:line:column` strings) become app frames with snippets, or a `Sources` section when they cannot be resolved to a readable file. An error named after its own `code` is treated as self-describing: the heading shows the code once, and presets leave its `docsUrl` alone, including when it has none.\n\n```ts\nclass Diagnostic extends Error {\n  name = 'NUXT_E1001'\n  code = 'NUXT_E1001'\n  fix = 'Pass a non-empty `name` prop to `<Widget>`.'\n  docs = 'https://nuxt.com/docs/4.x/errors/e1001'\n  sources = ['pages/index.vue:2:16']\n}\n```\n\n`environment` labels where the error happened (`'Server'`, `'Client'`, or whatever your integration calls it) next to the error name.\n\n### Overlay\n\nInject the error UI into an existing page (for example a framework's rendered error page). It renders in a shadow root, so host styles cannot leak in, and can be minimised to a picture-in-picture thumbnail so the user can see the page behind it.\n\n```ts\nimport { injectOverlay } from 'my-bad'\n\nhtml = injectOverlay(html, report, { channel: '/__my-bad', startMinimized: status < 500 })\n```\n\n`startMinimized: true` always mounts minimised, even if the user last expanded an overlay in this origin. Errors arriving over the channel leave the current minimised state alone.\n\nPass `requestId` alongside the same id given to `channel.setError` so the channel only sends this page the errors its own request produced. Without it the page's path is matched against the request instead. Errors published with no request (compile errors, client runtime errors) reach every page.\n\nUse `injectOverlay` rather than `html.replace('</body>', ...)`: the inlined client contains `$` sequences that a string replacement would interpret.\n\n### Serving the client separately\n\n`renderPage` and `renderOverlay` inline the client script and stylesheet, which makes the output self-contained at the cost of ~60kB per response. Serve `clientAssets` yourself and pass the URLs to keep them out of the HTML and let the browser cache them:\n\n```ts\nimport { clientAssets, renderPage } from 'my-bad'\n\n// GET /__my-bad/client.js  -> clientAssets.script (text/javascript)\n// GET /__my-bad/client.css -> clientAssets.styles (text/css)\nrenderPage(report, { assets: { script: '/__my-bad/client.js', styles: '/__my-bad/client.css' } })\n```\n\nTheme overrides stay inline, so a shared stylesheet still themes per response.\n\n### Theming\n\nThe page is dark by default and follows `prefers-color-scheme`. Everything is derived from a handful of CSS custom properties, so it's possible to restyle it without forking the stylesheet:\n\n```ts\nimport { renderPage } from 'my-bad'\nimport { nuxtTheme } from 'my-bad/presets'\n\nrenderPage(report, { theme: nuxtTheme })\n\nrenderPage(report, {\n  theme: {\n    name: 'Acme',\n    url: 'https://acme.dev',\n    logo: '<svg viewBox=\"0 0 32 32\">…</svg>', // drawn at 20px in currentColor\n    accent: '#ff4f81',\n    vars: { '--mb-bg': '#0b0b12', '--mb-font-sans': 'Inter, sans-serif' },\n    css: '.mb-name { text-transform: uppercase }',\n    scheme: 'dark', // force a scheme instead of following the user\n  },\n})\n```\n\nTokens: `--mb-accent`, `--mb-bg`, `--mb-fg`, `--mb-font-sans`, `--mb-font-mono`, `--mb-radius`, plus the `--mb-tk-*` syntax colours. Text tiers, hairlines and surfaces are mixed from those, and the accent is deepened automatically for small text on light backgrounds.\n\n### Sourcemaps\n\nFrames are mapped by loaders, tried in order:\n\n- `fsLoader()` reads `.map` sidecars and inline `sourceMappingURL` comments (Nitro dev builds, tsdown/rollup output). When the frames can come from an untrusted source, such as a browser-submitted stack, confine it with `fsLoader({ roots: [cwd] })` or `fsLoader({ canRead })`; it reads any absolute path by default.\n- `sourceMapLoader({ getSourceMap })` takes maps from memory, for module runners (`nitroApp.ssrSourceMaps.getSourceMap` in Nuxt, `runner.moduleCache.getSourceMap` in vite-node).\n- `viteLoader(server)` from `my-bad/vite` uses the module graph of a `ViteDevServer`.\n- `passthroughLoader()` only reads sources, for processes whose stacks are already mapped.\n\nA frame is only mapped when the map has a segment on that exact generated line, so already-mapped stacks are never mapped twice.\n\nCompile errors from a bundler often point into the module it transformed while naming the source file (rolldown failing to parse a compiled render function, say). Their position and code frame then move to `frame.compiled`, so the generated code is labelled as such rather than shown as the source of your file.\n\nThat is detected by comparing the frame's **caret line**, the one line the frame asserts describes the reported position, against the file on disk at the line number the frame gives it. Indentation is ignored, and a line Vite truncated for width is matched on the part that survived. If it matches, the frame is source; if it does not, the frame is generated. Neighbouring lines are not compared, because a bare `}` or `})` matches almost any file by chance. Nothing changes when the file cannot be read, or the caret line is only punctuation, or there is no caret at all.\n\nA thrower that already knows better can say so, and is believed without any comparison. This is honoured wherever the error sits in the chain, including as a `cause` at any depth, which is how a compile error wrapped in an `HTTPError` gets it right:\n\n```ts\nthrow Object.assign(error, { compiled: true })\n```\n\nThe same thing is available as an option for the top-level input, where `compiled: { sourceLoc }` also supplies a position you have mapped back to source yourself, to get a source snippet alongside the generated one:\n\n```ts\nawait createReport(error, { kind: 'compile', compiled: { sourceLoc: { line: 6, column: 16 } } })\n```\n\nA marker on the error wins over the option, and both win over detection in either direction (`false` opts out entirely, and the file is not read).\n\n### Terminal\n\n```ts\nconsole.error(renderAnsi(report, { cwd, icon: false })) // `icon: false` when your logger prints its own badge\n```\n\nFile locations are OSC 8 hyperlinks (via `clickable-path`) in terminals that support them.\n\n### Syntax highlighting\n\nSnippets use a small built-in tokenizer. Plug in your own for richer colours in both HTML and ANSI:\n\n```ts\nconst report = await createReport(error, {\n  tokenizer: (line, lang) => myHighlighter(line, lang).map(token => ({ type: 'keyword', text: token.value })),\n})\n```\n\n\n### Live channel\n\n```ts\nimport { createChannel } from 'my-bad/channel'\nimport { fileSink } from 'my-bad/sinks'\n\nconst channel = createChannel({ open: true, sink: fileSink('.nuxt/my-bad.jsonl') })\n// `open: true` launches `LAUNCH_EDITOR` / `VISUAL` / `EDITOR` at the frame's line, falling back to the OS default app\n// `open` requests are confined to `root` (default `process.cwd()`; the Vite plugin uses `server.fs.allow`),\n// must name an existing file, and must be `application/json`; pass `root: false` to allow any path\n// `open` may be a function instead, returning `false` to refuse a request\n\n// The channel refuses requests a page on another origin made (`Sec-Fetch-Site`, else `Origin` must match the\n// host addressed), and browser requests addressed to a host that is neither an IP literal, `localhost`,\n// `*.localhost`, nor listed in `allowedHosts` (the Vite plugin passes `server.allowedHosts`).\n// Requests with neither header (`curl`, editor integrations) are allowed.\n\n// Node: mount at the channel base path\nserver.on('request', (req, res) => channel.handler(req, res).then(handled => handled || next()))\n// or fetch-style: await channel.fetchHandler(request)\n\n// Callers are trusted by default and may browse every retained report. Pass `{ trusted: false }` for a peer\n// the host cannot vouch for (a connection forwarded into a container, a `--host` binding): the channel still\n// connects and streams, but its `hello.history` and the `history` payloads hold only the reports that concern\n// the page (a report naming a request id is matched by that id alone, never by path), `/history/:id` answers\n// 404 for any other report, log entries reach it only when attributed to a request that concerns it, and\n// privileged actions such as `open` are neither advertised nor accepted, so the\n// page opens an `editor://` URL on the machine running the browser instead.\nawait channel.handler(req, res, { trusted: isLoopback(req) })\n\nchannel.setError(report) // pages swap content in place\nchannel.setError(report, requestId, `${method} ${url}`) // only pages rendered for that request swap; the rest list it in their history\nchannel.clearError() // pages reload, overlays dismiss\nchannel.warn(report) // toast\nchannel.log({ level: 'warn', text: 'careful' }) // streamed to the log drawer of trusted callers\nchannel.log({ level: 'warn', text: 'careful' }, requestId, `${method} ${url}`) // also streamed to the pages that request concerns\nchannel.progress({ phase: 'build', percent: 40, message: 'Building server' }) // progress bar\n```\n\n### Vite\n\n```ts\nimport { myBad, useMyBad } from 'my-bad/vite'\n\nexport default defineConfig({ plugins: [myBad()] })\n```\n\nThe plugin maps frames through Vite's module graph, forwards compile errors from the HMR channel as `kind: 'compile'` reports, mounts the channel at `/__my-bad`, injects a tiny client into `index.html` so a running app shows the overlay, and clears it when the next update succeeds. Use `useMyBad(server)` from your own SSR middleware to build reports and pages with the same configuration.\n\nThe client script and stylesheet are served from `/__my-bad/client.js` and `/__my-bad/client.css` with content-hashed URLs, rather than inlined into every error page. Pass `inlineClient: true` for self-contained output.\n\n## Presets\n\n`my-bad/presets` exports `envPreset`, `vuePreset`, `requestPreset` (alias `h3Preset`), `nitroPreset` and `nuxtPreset`. Presets contribute frame classification, sections (request, headers with redaction, route, environment), component traces and docs links for error codes.\n\n`nuxtPreset` links codes such as `E1001` or `NUXT_E1001` to `https://nuxt.com/docs/errors/e1001`, which redirects to the current version; pass `docsBase` to point elsewhere.\n\n## 💻 Development\n\n```bash\ngit clone git@github.com:danielroe/my-bad.git\ncorepack enable\n\n# run interactive tests\npnpm dev\n# run accessibility audit (computed contrast, axe-core, target sizes, focus, motion, reflow)\npnpm test:a11y\n# render screenshots of the ui\npnpm screenshot\n\n# re-render the README assets in assets/ (autofix.ci keeps these current)\npnpm assets\n# experiment in the playground\npnpm play\npnpm play:vite\n```\n\n## Credits\n\nThis was inspired by [youch](https://github.com/poppinss/youch), which is a phenomenal error page generator, and I would highly recommend it!\n\n## License\n\nMade with ❤️\n\nPublished under [MIT License](./LICENCE).\n\n<!-- Badges -->\n\n[npm-version-src]: https://npmx.dev/api/registry/badge/version/my-bad\n[npm-version-href]: https://npmx.dev/package/my-bad\n[npm-downloads-src]: https://npmx.dev/api/registry/badge/downloads/my-bad\n[npm-downloads-href]: https://npm.chart.dev/my-bad\n[github-actions-src]: https://img.shields.io/github/actions/workflow/status/danielroe/my-bad/ci.yml?branch=main&style=flat-square\n[github-actions-href]: https://github.com/danielroe/my-bad/actions?query=workflow%3Aci\n[codecov-src]: https://img.shields.io/codecov/c/gh/danielroe/my-bad/main?style=flat-square\n[codecov-href]: https://codecov.io/gh/danielroe/my-bad\n","readmeFilename":"README.md"}