{"_id":"@acahet/playwright-history-dashboard","_rev":"8-adf7142da25e9a6e6b09811fd09ae350","name":"@acahet/playwright-history-dashboard","dist-tags":{"latest":"3.1.1"},"versions":{"2.0.0":{"name":"@acahet/playwright-history-dashboard","version":"2.0.0","keywords":["playwright","playwright-reporter","test-history","test-automation","dashboard","testing","typescript"],"author":{"name":"acahet"},"license":"MIT","_id":"@acahet/playwright-history-dashboard@2.0.0","maintainers":[{"name":"acahet","email":"anderson.cahet@gmail.com"}],"homepage":"https://github.com/acahet-automation-org/playwright-toolbox#readme","bugs":{"url":"https://github.com/acahet-automation-org/playwright-toolbox/issues"},"bin":{"pw-history-init":"dist/scripts/init.js"},"dist":{"shasum":"2fb178574c33a8e992a6fd6fef62b035aa908e9b","tarball":"https://registry.npmjs.org/@acahet/playwright-history-dashboard/-/playwright-history-dashboard-2.0.0.tgz","fileCount":11,"integrity":"sha512-U7ed9u3HMPZ6wu0hHfbRo0TyANdjYYMBSlYfzJ4Qjz91LIKcSqVSI95qeBuOrr3nYyBF3W/H1WSFZfC1w4eDkA==","signatures":[{"sig":"MEQCIHJ/G/vUvIInpFVcFZ3/9syL/h3qttYODqPbCccsDn0TAiA7kHBG3Kwr2jxXqjA9sFlIFSFCJTLDQwBMR9QUHRX44A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130949},"type":"module","exports":{"./reporter":{"types":"./dist/src/reporter.d.ts","import":"./dist/src/reporter.js"}},"gitHead":"0fcad76ef541cfb8bb02480f7842a80ec1baedaf","scripts":{"build":"tsc --project tsconfig.json","build:watch":"tsc --project tsconfig.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"acahet","email":"anderson.cahet@gmail.com"},"repository":{"url":"git+https://github.com/acahet-automation-org/playwright-toolbox.git","type":"git","directory":"packages/playwright-history-dashboard"},"_npmVersion":"11.11.0","description":"Self-hosted Playwright test history dashboard — custom reporter + single-file HTML dashboard. No SaaS, no subscriptions.","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@playwright/test":"^1.50.0"},"peerDependencies":{"@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"@playwright/test":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/playwright-history-dashboard_2.0.0_1774218433886_0.5910337193544697","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@acahet/playwright-history-dashboard","version":"3.0.0","keywords":["playwright","playwright-reporter","test-history","test-automation","dashboard","testing","typescript"],"author":{"name":"acahet"},"license":"MIT","_id":"@acahet/playwright-history-dashboard@3.0.0","maintainers":[{"name":"acahet","email":"anderson.cahet@gmail.com"}],"homepage":"https://github.com/acahet-automation-org/playwright-toolbox#readme","bugs":{"url":"https://github.com/acahet-automation-org/playwright-toolbox/issues"},"bin":{"pw-history-init":"dist/scripts/init.js"},"dist":{"shasum":"c3db6123498bd0fdddcc99174692cbdc9bfb6df5","tarball":"https://registry.npmjs.org/@acahet/playwright-history-dashboard/-/playwright-history-dashboard-3.0.0.tgz","fileCount":11,"integrity":"sha512-jm6XIQHQo27r1SGBhdLyYqFnoj+XtAs03tg4hEk7paUWXxR9pu9fmlJmTR0e+sxIIO/eFRtj9qEfVYdep1CH/w==","signatures":[{"sig":"MEYCIQDMoSMApvpzgUyn6RlNwfG+HkU41nYJZeIyeXAv4jc0sAIhAOx0DycecLFxnVNIVC8qAeJJLXxSy6LUmK3kn8XAK/Ng","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131125},"main":"./dist/src/reporter.js","type":"module","types":"./dist/src/reporter.d.ts","exports":{".":{"types":"./dist/src/reporter.d.ts","import":"./dist/src/reporter.js"},"./reporter":{"types":"./dist/src/reporter.d.ts","import":"./dist/src/reporter.js"}},"gitHead":"fa9865974629fce6a01fb10d7bfc950dde5ae7a8","scripts":{"build":"tsc --project tsconfig.json","build:watch":"tsc --project tsconfig.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"acahet","email":"anderson.cahet@gmail.com"},"repository":{"url":"git+https://github.com/acahet-automation-org/playwright-toolbox.git","type":"git","directory":"packages/playwright-history-dashboard"},"_npmVersion":"11.11.0","description":"Self-hosted Playwright test history dashboard — custom reporter + single-file HTML dashboard. No SaaS, no subscriptions.","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@playwright/test":"^1.50.0"},"peerDependencies":{"@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"@playwright/test":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/playwright-history-dashboard_3.0.0_1774249110867_0.18189667191944658","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@acahet/playwright-history-dashboard","version":"3.0.1","keywords":["playwright","playwright-reporter","test-history","test-automation","dashboard","testing","typescript"],"author":{"name":"acahet"},"license":"MIT","_id":"@acahet/playwright-history-dashboard@3.0.1","maintainers":[{"name":"acahet","email":"anderson.cahet@gmail.com"}],"homepage":"https://github.com/acahet-automation-org/playwright-toolbox#readme","bugs":{"url":"https://github.com/acahet-automation-org/playwright-toolbox/issues"},"bin":{"pw-history-init":"dist/scripts/init.js"},"dist":{"shasum":"bfb912d643ecad7ddff552558aecfca7a3c74866","tarball":"https://registry.npmjs.org/@acahet/playwright-history-dashboard/-/playwright-history-dashboard-3.0.1.tgz","fileCount":11,"integrity":"sha512-HrmORavqLNikNPFdM4iqPHa7Kf1pNciEIYlv/tdhb+ULJ4cLDCxbAy9Y/9Yh97eLgF5XfP6eKCtFRLwqHlpFRw==","signatures":[{"sig":"MEUCIHq3gCoshynwd6b+GhmIPsNK9K9lIKZOmCcitswNm6LVAiEA7SkD2X6Wli6nQenEIA9EkJ9vn+VWxuKgjFC8sVosKcA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131125},"main":"./dist/src/reporter.js","type":"module","types":"./dist/src/reporter.d.ts","exports":{".":{"types":"./dist/src/reporter.d.ts","import":"./dist/src/reporter.js"},"./reporter":{"types":"./dist/src/reporter.d.ts","import":"./dist/src/reporter.js"}},"gitHead":"fa9865974629fce6a01fb10d7bfc950dde5ae7a8","scripts":{"build":"tsc --project tsconfig.json","build:watch":"tsc --project tsconfig.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"acahet","email":"anderson.cahet@gmail.com"},"repository":{"url":"git+https://github.com/acahet-automation-org/playwright-toolbox.git","type":"git","directory":"packages/playwright-history-dashboard"},"_npmVersion":"11.11.0","description":"Self-hosted Playwright test history dashboard — custom reporter + single-file HTML dashboard. No SaaS, no subscriptions.","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@playwright/test":"^1.50.0"},"peerDependencies":{"@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"@playwright/test":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/playwright-history-dashboard_3.0.1_1774249200666_0.5260144863983451","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"@acahet/playwright-history-dashboard","version":"3.0.2","keywords":["playwright","playwright-reporter","test-history","test-automation","dashboard","testing","typescript"],"author":{"name":"acahet"},"license":"MIT","_id":"@acahet/playwright-history-dashboard@3.0.2","maintainers":[{"name":"acahet","email":"anderson.cahet@gmail.com"}],"homepage":"https://github.com/acahet-automation-org/playwright-toolbox#readme","bugs":{"url":"https://github.com/acahet-automation-org/playwright-toolbox/issues"},"bin":{"pw-history-init":"dist/scripts/init.js"},"dist":{"shasum":"d5dade0da6c4f5f753128abf1de9ad8eee2cbc29","tarball":"https://registry.npmjs.org/@acahet/playwright-history-dashboard/-/playwright-history-dashboard-3.0.2.tgz","fileCount":11,"integrity":"sha512-kUN1+J7f/XGQ8hwLtRoEAhSvN/abzWIMOyHjqWKb/WF1Gws3vk83+fBvoI6f7mkIKCQgX1Nn0ioJrQcYq5wyHg==","signatures":[{"sig":"MEYCIQC8cYHSSJPH+mOCADtUblwj6NpiWWMrN+lcet8+mYWfpwIhAJ+3mozYv3faIuq/aoRfYethnLvcg5lLzW+gcPEMJEhx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134238},"main":"./dist/src/reporter.js","types":"./dist/src/reporter.d.ts","exports":{".":{"types":"./dist/src/reporter.d.ts","import":"./dist/src/reporter.js","require":"./dist/src/reporter.js"},"./reporter":{"types":"./dist/src/reporter.d.ts","import":"./dist/src/reporter.js","require":"./dist/src/reporter.js"}},"gitHead":"3d9278e4e4af4b440553c3f6e794784703eaba0d","scripts":{"build":"tsc --project tsconfig.json","build:watch":"tsc --project tsconfig.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"acahet","email":"anderson.cahet@gmail.com"},"repository":{"url":"git+https://github.com/acahet-automation-org/playwright-toolbox.git","type":"git","directory":"packages/playwright-history-dashboard"},"_npmVersion":"11.11.0","description":"Self-hosted Playwright test history dashboard — custom reporter + single-file HTML dashboard. No SaaS, no subscriptions.","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@playwright/test":"^1.50.0"},"peerDependencies":{"@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"@playwright/test":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/playwright-history-dashboard_3.0.2_1774250174040_0.365918475636003","host":"s3://npm-registry-packages-npm-production"}},"3.0.3":{"name":"@acahet/playwright-history-dashboard","version":"3.0.3","keywords":["playwright","playwright-reporter","test-history","test-automation","dashboard","testing","typescript"],"author":{"name":"acahet"},"license":"MIT","_id":"@acahet/playwright-history-dashboard@3.0.3","maintainers":[{"name":"acahet","email":"anderson.cahet@gmail.com"}],"homepage":"https://github.com/acahet-automation-org/playwright-toolbox#readme","bugs":{"url":"https://github.com/acahet-automation-org/playwright-toolbox/issues"},"bin":{"pw-history-init":"dist/scripts/init.js"},"dist":{"shasum":"9098f0814ec10fbf214f1571843d7f3f6f64c95e","tarball":"https://registry.npmjs.org/@acahet/playwright-history-dashboard/-/playwright-history-dashboard-3.0.3.tgz","fileCount":11,"integrity":"sha512-5IVEE9b59E2kzQi+by+8Do9OrVl7bw2/BDD9GS0fvfROU+X67DdpGiggMdGbo0mUJqINBljpSMc7EJAxCXp6hA==","signatures":[{"sig":"MEUCIGBIolSagZ2hZIMYqikL1ZwvWfoOJL4Gf0QaTACAJG8aAiEAkAkiXI2mOoR820t8xstvkYH7jJDcf7ooVlA7LhnYXy8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134279},"main":"./dist/src/reporter.js","types":"./dist/src/reporter.d.ts","exports":{".":{"types":"./dist/src/reporter.d.ts","import":"./dist/src/reporter.js","require":"./dist/src/reporter.js"},"./reporter":{"types":"./dist/src/reporter.d.ts","import":"./dist/src/reporter.js","require":"./dist/src/reporter.js"}},"gitHead":"3d9278e4e4af4b440553c3f6e794784703eaba0d","scripts":{"build":"tsc --project tsconfig.json","build:watch":"tsc --project tsconfig.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"acahet","email":"anderson.cahet@gmail.com"},"repository":{"url":"git+https://github.com/acahet-automation-org/playwright-toolbox.git","type":"git","directory":"packages/playwright-history-dashboard"},"_npmVersion":"11.11.0","description":"Self-hosted Playwright test history dashboard — custom reporter + single-file HTML dashboard. No SaaS, no subscriptions.","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@playwright/test":"^1.50.0"},"peerDependencies":{"@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"@playwright/test":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/playwright-history-dashboard_3.0.3_1774250284144_0.37076351483608816","host":"s3://npm-registry-packages-npm-production"}},"3.0.4":{"name":"@acahet/playwright-history-dashboard","version":"3.0.4","keywords":["playwright","playwright-reporter","test-history","test-automation","dashboard","testing","typescript"],"author":{"name":"acahet"},"license":"MIT","_id":"@acahet/playwright-history-dashboard@3.0.4","maintainers":[{"name":"acahet","email":"anderson.cahet@gmail.com"}],"homepage":"https://github.com/acahet-automation-org/playwright-toolbox#readme","bugs":{"url":"https://github.com/acahet-automation-org/playwright-toolbox/issues"},"bin":{"pw-history-init":"dist/scripts/init.js"},"dist":{"shasum":"76e47665414adcf4784296184618a0d671bc0c92","tarball":"https://registry.npmjs.org/@acahet/playwright-history-dashboard/-/playwright-history-dashboard-3.0.4.tgz","fileCount":11,"integrity":"sha512-1kCjt8KiGE6NcpcuMJ7QBu7TM3tcCx0xbG2x/ZP+JvaPJSKepftDBp1hq2+EZwemuovWe7B1dTrGB3NPuecZmA==","signatures":[{"sig":"MEUCIE/r434z8pELHs6+MNMuHAVpGAwbh8m6x6FlambKIcIWAiEA65lkEFfY3MwzOOYMhCv3wRiBsxloRl7dSeAaTweEesU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134160},"main":"./dist/src/reporter.js","types":"./dist/src/reporter.d.ts","exports":{".":{"types":"./dist/src/reporter.d.ts","import":"./dist/src/reporter.js","require":"./dist/src/reporter.js"},"./reporter":{"types":"./dist/src/reporter.d.ts","import":"./dist/src/reporter.js","require":"./dist/src/reporter.js"}},"gitHead":"3d9278e4e4af4b440553c3f6e794784703eaba0d","scripts":{"build":"tsc --project tsconfig.json","build:watch":"tsc --project tsconfig.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"acahet","email":"anderson.cahet@gmail.com"},"repository":{"url":"git+https://github.com/acahet-automation-org/playwright-toolbox.git","type":"git","directory":"packages/playwright-history-dashboard"},"_npmVersion":"11.11.0","description":"Self-hosted Playwright test history dashboard — custom reporter + single-file HTML dashboard. No SaaS, no subscriptions.","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@playwright/test":"^1.50.0"},"peerDependencies":{"@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"@playwright/test":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/playwright-history-dashboard_3.0.4_1774251065421_0.7568679862101724","host":"s3://npm-registry-packages-npm-production"}},"3.0.5":{"name":"@acahet/playwright-history-dashboard","version":"3.0.5","keywords":["playwright","playwright-reporter","test-history","test-automation","dashboard","testing","typescript"],"author":{"name":"acahet"},"license":"MIT","_id":"@acahet/playwright-history-dashboard@3.0.5","maintainers":[{"name":"acahet","email":"anderson.cahet@gmail.com"}],"homepage":"https://github.com/acahet-automation-org/playwright-toolbox#readme","bugs":{"url":"https://github.com/acahet-automation-org/playwright-toolbox/issues"},"bin":{"pw-history-init":"dist/scripts/init.js"},"dist":{"shasum":"c8d5d090df480b24f541cf8308b6e32f63c65bb6","tarball":"https://registry.npmjs.org/@acahet/playwright-history-dashboard/-/playwright-history-dashboard-3.0.5.tgz","fileCount":11,"integrity":"sha512-g3lOCa4hjh8MlMZxd8ueqE/nhADsy8GgHTMip+7+YyRtaacr6EwCPOaR6XACUmeecnUN7ZV9HeUUePnD93SDJQ==","signatures":[{"sig":"MEYCIQCLK5HIzfIpQ3nNRudTpp33nuNH+C+eDXzs2SzC8lWCvAIhAN92a164cfOaKGrRpCcSeioY6iHG0Un8T+NpzisZj1f+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139547},"main":"./dist/src/reporter.js","types":"./dist/src/reporter.d.ts","exports":{".":{"types":"./dist/src/reporter.d.ts","import":"./dist/src/reporter.js","require":"./dist/src/reporter.js"},"./reporter":{"types":"./dist/src/reporter.d.ts","import":"./dist/src/reporter.js","require":"./dist/src/reporter.js"}},"gitHead":"3d9278e4e4af4b440553c3f6e794784703eaba0d","scripts":{"build":"tsc --project tsconfig.json","build:watch":"tsc --project tsconfig.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"acahet","email":"anderson.cahet@gmail.com"},"repository":{"url":"git+https://github.com/acahet-automation-org/playwright-toolbox.git","type":"git","directory":"packages/playwright-history-dashboard"},"_npmVersion":"11.11.0","description":"Self-hosted Playwright test history dashboard — custom reporter + single-file HTML dashboard. No SaaS, no subscriptions.","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@playwright/test":"^1.50.0"},"peerDependencies":{"@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"@playwright/test":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/playwright-history-dashboard_3.0.5_1774255915340_0.498943209783675","host":"s3://npm-registry-packages-npm-production"}},"3.1.1":{"name":"@acahet/playwright-history-dashboard","version":"3.1.1","description":"Self-hosted Playwright test history dashboard — custom reporter + single-file HTML dashboard. No SaaS, no subscriptions.","keywords":["playwright","playwright-reporter","test-history","test-automation","dashboard","testing","typescript"],"homepage":"https://github.com/acahet-automation-org/playwright-toolbox#readme","bugs":{"url":"https://github.com/acahet-automation-org/playwright-toolbox/issues"},"repository":{"type":"git","url":"git+https://github.com/acahet-automation-org/playwright-toolbox.git","directory":"packages/playwright-history-dashboard"},"license":"MIT","author":{"name":"acahet"},"main":"./dist/src/reporter.js","types":"./dist/src/reporter.d.ts","exports":{".":{"require":"./dist/src/reporter.js","import":"./dist/src/reporter.js","types":"./dist/src/reporter.d.ts"},"./reporter":{"require":"./dist/src/reporter.js","import":"./dist/src/reporter.js","types":"./dist/src/reporter.d.ts"}},"bin":{"pw-history-init":"dist/scripts/init.js"},"scripts":{"build":"tsc --project tsconfig.json","build:watch":"tsc --project tsconfig.json --watch","prepublishOnly":"npm run build"},"peerDependencies":{"@playwright/test":">=1.40.0"},"peerDependenciesMeta":{"@playwright/test":{"optional":false}},"devDependencies":{"@playwright/test":"^1.50.0","typescript":"^5.4.0"},"gitHead":"2c9dd5496bc927817ef0d272049b09afa27b4949","_id":"@acahet/playwright-history-dashboard@3.1.1","_nodeVersion":"22.14.0","_npmVersion":"11.11.0","dist":{"integrity":"sha512-g56OhDR5YoQMzyoRFjV3+SoF6yQkPmPtg0XCNlOdNmPrwWE85tI91nShVYP9yl7dHl/86QWkL14jlkxKIz/XIw==","shasum":"e32b8fca7ade92c6e2596de2709eba2dc4bf77e5","tarball":"https://registry.npmjs.org/@acahet/playwright-history-dashboard/-/playwright-history-dashboard-3.1.1.tgz","fileCount":11,"unpackedSize":143978,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGjzAHpNio4qXMXAZ7VAkeWlQr33qfm0a9JpWudqSqCcAiEA2fWuIDY6J83A74pRalI/TGTkdTZIPeXj8+NNiSCbzCI="}]},"_npmUser":{"name":"acahet","email":"anderson.cahet@gmail.com"},"directories":{},"maintainers":[{"name":"acahet","email":"anderson.cahet@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/playwright-history-dashboard_3.1.1_1774259001847_0.8759849908352142"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-22T22:27:13.770Z","modified":"2026-03-23T09:43:22.140Z","2.0.0":"2026-03-22T22:27:14.030Z","3.0.0":"2026-03-23T06:58:31.010Z","3.0.1":"2026-03-23T07:00:00.799Z","3.0.2":"2026-03-23T07:16:14.174Z","3.0.3":"2026-03-23T07:18:04.437Z","3.0.4":"2026-03-23T07:31:05.576Z","3.0.5":"2026-03-23T08:51:55.499Z","3.1.1":"2026-03-23T09:43:22.003Z"},"bugs":{"url":"https://github.com/acahet-automation-org/playwright-toolbox/issues"},"author":{"name":"acahet"},"license":"MIT","homepage":"https://github.com/acahet-automation-org/playwright-toolbox#readme","keywords":["playwright","playwright-reporter","test-history","test-automation","dashboard","testing","typescript"],"repository":{"type":"git","url":"git+https://github.com/acahet-automation-org/playwright-toolbox.git","directory":"packages/playwright-history-dashboard"},"description":"Self-hosted Playwright test history dashboard — custom reporter + single-file HTML dashboard. No SaaS, no subscriptions.","maintainers":[{"name":"acahet","email":"anderson.cahet@gmail.com"}],"readme":"# @acahet/playwright-history-dashboard\r\n\r\nA self-hosted Playwright test history dashboard — no SaaS, no subscriptions, no external services. A custom reporter writes a local JSON index after every run, and a single-file HTML dashboard reads it directly from disk.\r\n\r\nIn this workspace, the package source is located at `packages/playwright-history-dashboard`.\r\n\r\n## Install\r\n\r\n```bash\r\nnpm install -D @acahet/playwright-history-dashboard\r\n```\r\n\r\n## Quick start\r\n\r\n### 1. Configure (optional but recommended)\r\n\r\nCreate one of these in your project root:\r\n\r\n- `pw-dashboard.config.js`\r\n- `pw-dashboard.config.cjs` (recommended if your project uses `\"type\": \"module\"`)\r\n- `pw-dashboard.config.mjs`\r\n- `pw_dashboard.config.js` (legacy underscore alias)\r\n\r\n```js\r\n// pw-dashboard.config.js\r\nmodule.exports = {\r\n\tprojectName: 'Acme E2E', // shown in topbar and footer\r\n\tbrandName: 'pw_dashboard', // top-left brand label\r\n\tpageTitle: 'Acme Test Dashboard', // browser tab title\r\n\thistoryDir: 'dashboard/test-history', // must match playwright.config.ts\r\n\tmaxRuns: 30, // optional, default is 30\r\n};\r\n```\r\n\r\nA starter config file is included in the package at `pw-dashboard.config.js`.\r\n\r\n### 2. Generate the dashboard\r\n\r\n```bash\r\nnpx pw-history-init\r\n```\r\n\r\nReads your config file, injects your settings, and writes `index.html` into `historyDir`. Re-run after upgrading the package to pick up dashboard updates; your config is always preserved.\r\n\r\n### 3. Register the reporter in `playwright.config.ts`\r\n\r\n```ts\r\nimport { defineConfig } from '@playwright/test';\r\n\r\nexport default defineConfig({\r\n\treporter: [\r\n\t\t['html'],\r\n\t\t[\r\n\t\t\t'@acahet/playwright-history-dashboard/reporter',\r\n\t\t\t{\r\n\t\t\t\thistoryDir: 'dashboard/test-history', // must match pw-dashboard.config.*\r\n\t\t\t\tmaxRuns: 30, // optional, default is 30\r\n\t\t\t},\r\n\t\t],\r\n\t],\r\n\tuse: {\r\n\t\ttrace: 'on-first-retry',\r\n\t\tscreenshot: 'on', // required for the gallery page\r\n\t},\r\n});\r\n```\r\n\r\nImportant: `pw-history-init` uses `pw-dashboard.config.*` to generate `index.html`, while the reporter options in `playwright.config.*` control where `history-index.json` and `runs/` are written. Keep `historyDir` identical in both.\r\n\r\n### 4. Run tests and serve the dashboard\r\n\r\n```bash\r\nnpx playwright test\r\nnpx serve dashboard/test-history\r\n```\r\n\r\nOpen `http://localhost:3000` — the dashboard always shows the latest run.\r\n\r\n---\r\n\r\n## Features\r\n\r\n### Reporter\r\n\r\n- Records every test run to `history-index.json`\r\n- Captures pass, fail, flaky, skipped counts and total duration per run\r\n- Stores per-test: title, file, project, duration, status, error message, tags, and Playwright annotations\r\n- Detects flaky tests automatically — passed on retry after a prior failure\r\n- Copies failure artifacts (trace + screenshot) into a per-run directory scoped to the specific failing test\r\n- Retains the last **N runs** (default 30) as the single retention policy — index and disk stay in sync\r\n- Orphan guard removes any run directories not referenced in the index\r\n- Error boundary in `onEnd` — reporter failures never affect test exit codes\r\n- Skips `setup` project tests\r\n- Requires Playwright ≥ 1.42\r\n\r\n### Dashboard pages\r\n\r\n**Dashboard**\r\n\r\n- Suite health grade (A–F) on the latest run: 60% pass rate, 30% stability, 10% performance\r\n- Latest run stat cards: pass rate, passed, failed, flaky, skipped, total, duration\r\n- Clicking passed / failed / flaky / skipped filters that run's test list instantly\r\n- Stacked bar chart across last 30 runs with hover tooltip\r\n- Run duration line chart\r\n- Per-test view: search by name, project, or tag; sparkline of last 10 runs per card\r\n\r\n**Test detail** (click any test card)\r\n\r\n- Full run history with date, runId, status, duration\r\n- Duration-over-time mini chart with min / avg / max and `±% vs prev` delta\r\n- Failure reason grouping — normalises error messages to surface recurring patterns\r\n- Annotation support: `title` shown before the error, `description` in the header\r\n- Playwright error collapsed by default, expandable on click\r\n\r\n**Trends**\r\n\r\n- 4 charts across last 30 runs: Pass rate, Duration, Flaky count, Slow count\r\n- Each panel shows current value, delta vs previous run, and min / avg / max\r\n\r\n**Gallery**\r\n\r\n- Grid of failure screenshots grouped by run\r\n- Lightbox on click, Escape to close\r\n\r\n**Sidebar**\r\n\r\n- Navigate: Dashboard, Trends, Search tests, Gallery\r\n- Tag and Spec filter chips auto-populated from your test data\r\n- Recent runs list — click any run to scroll and auto-expand it\r\n\r\n**Run cards**\r\n\r\n- Collapsed by default, showing failed + flaky only\r\n- `SLOW` badge on tests above 1.5× the P75 duration of that run\r\n- Errors collapsed inline, expandable per test\r\n- Artifact links: download trace or screenshot per test\r\n\r\n---\r\n\r\n## Options\r\n\r\n| Option        | Type     | Default                         | Description                                             |\r\n| ------------- | -------- | ------------------------------- | ------------------------------------------------------- |\r\n| `projectName` | `string` | `''`                            | Label shown in topbar/footer                            |\r\n| `brandName`   | `string` | `'pw_dashboard'`               | Brand label shown in top-left                           |\r\n| `pageTitle`   | `string` | `'Test History Dashboard'`      | Browser tab title                                      |\r\n| `historyDir`  | `string` | `'./tests/report/test-history'` | Where to write/read dashboard files and run history     |\r\n| `maxRuns`     | `number` | `30`                            | How many runs to keep in the index and on disk          |\r\n\r\nNotes:\r\n\r\n- `projectName`, `brandName`, and `pageTitle` are applied to `index.html` by `npx pw-history-init`.\r\n- `historyDir` and `maxRuns` should be set in both `pw-dashboard.config.*` and reporter options for consistent behavior.\r\n\r\n---\r\n\r\n## Troubleshooting\r\n\r\n- `history-index.json` is missing: run `npx playwright test` at least once. `npx pw-history-init` only generates `index.html`.\r\n- Config ignored in module projects: use `pw-dashboard.config.cjs` instead of `.js` with `module.exports`.\r\n- Values not updated in `index.html`: re-run `npx pw-history-init` after upgrading the package.\r\n- Dashboard loads but shows no data: ensure `historyDir` is exactly the same in both config files.\r\n\r\n---\r\n\r\n## Using annotations\r\n\r\n```ts\r\ntest('checkout fails with expired card', async ({ page }) => {\r\n\ttest.info().annotations.push(\r\n\t\t{ type: 'title', description: 'Known payment gateway timeout' },\r\n\t\t{\r\n\t\t\ttype: 'description',\r\n\t\t\tdescription: 'Card validation times out after 30s under load',\r\n\t\t},\r\n\t);\r\n\t// test body\r\n});\r\n```\r\n\r\nThe `title` annotation appears as a prominent label before the Playwright error in run history. The `description` appears in the test detail header. Any other annotation types appear as chips under the test name.\r\n\r\n---\r\n\r\n## Using with Azure App Testing\r\n\r\nCreate a thin wrapper config — your reporter and test code stay untouched:\r\n\r\n```ts\r\n// playwright.service.config.ts\r\nimport { defineConfig } from '@playwright/test';\r\nimport { getServiceConfig } from '@azure/microsoft-playwright-testing';\r\nimport baseConfig from './playwright.config';\r\n\r\nexport default defineConfig(baseConfig, getServiceConfig(baseConfig), {\r\n\treporter: [\r\n\t\t['list'],\r\n\t\t['@azure/microsoft-playwright-testing/reporter'],\r\n\t\t['@acahet/playwright-history-dashboard'],\r\n\t],\r\n});\r\n```\r\n\r\nRun with Azure: `npx playwright test --config=playwright.service.config.ts`\r\n\r\nTo detach: delete the service config, remove the package. Zero changes to tests.\r\n\r\n---\r\n\r\n## File structure after setup\r\n\r\n```\r\nyour-project/\r\n└── <historyDir>/\r\n\t├── index.html              ← generated by pw-history-init\r\n\t├── history-index.json      ← generated by reporter after test runs\r\n\t└── runs/\r\n\t\t└── <run-id>/\r\n\t\t\t├── <test>-trace.zip\r\n\t\t\t└── <test>-screenshot.png\r\n```\r\n\r\nAdd to `.gitignore`:\r\n\r\n```\r\n<historyDir>/runs/\r\n<historyDir>/history-index.json\r\n```\r\n\r\n---\r\n\r\n## Requirements\r\n\r\n- Playwright ≥ 1.42\r\n- Node.js ≥ 18\r\n\r\n## License\r\n\r\nMIT\r\n","readmeFilename":"README.md"}