{"_id":"@a11ygato/audit-engine","_rev":"5-f89444a34caa19a3797e76f9c6a863c5","name":"@a11ygato/audit-engine","dist-tags":{"latest":"1.0.0"},"versions":{"0.1.0":{"name":"@a11ygato/audit-engine","version":"0.1.0","description":"@a11ygato/audit-engine is a node API to create accessibility reports using the axe-core engine into a Chrome container","main":"lib/AuditEngine.js","keywords":["a11y","accessibility","pa11y","pally","engine","audit","axe","analysis","report"],"license":"MIT","engines":{"node":"8"},"author":{"name":"Jean Dat","email":"jean.dat@orange.com"},"scripts":{"lint":"eslint --ignore-path=.gitignore --fix --color --format codeframe *.js **/*.js","watch":"npm run lint && npm run watch:js","watch:js":"chokidar '**/*.js' '*.js' -c 'npm run lint'"},"dependencies":{"async":"~2.3","axe-core":"^2.6.1","chalk":"~1.1","commander":"~2.9.0","fetch-cookie":"^0.7.0","generic-pool":"^3.4.2","https-proxy-agent":"^2.2.1","joi":"~10.4.1","lodash":"^4.17.10","mkdirp":"~0.5.1","mongodb":"^2.2.35","node-fetch":"^1.7.3","phantom-pool":"~1.2.0","portscanner":"^2.2.0","pretty-ms":"^3.2.0","proxy-agent":"^2.3.1","puppeteer":"^1.8.0","q":"^1.5.1","rimraf":"^2.6.2","shortid":"~2.2.6","verror":"~1.9.0","vm2":"^3.6.0"},"devDependencies":{"chokidar-cli":"^1.2.0","eslint":"^4.19.1"},"_id":"@a11ygato/audit-engine@0.1.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"a11ygato-user","email":"jean.dat@orange.com"},"dist":{"integrity":"sha512-10gFaGOhjfaJ4zTy/8UdjnOFm0lwctS9d9tJEf2occKwClbFGIfgVpc1e2/x9XP40dSIVZ/DkDI8UsEZQdAj5A==","shasum":"5bada75947b0494ffef9aba05fdb61431c837ac9","tarball":"https://registry.npmjs.org/@a11ygato/audit-engine/-/audit-engine-0.1.0.tgz","fileCount":35,"unpackedSize":119340,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0GvuCRA9TVsSAnZWagAAiD4P/3X4yTihC0Rhz1X5g2Mw\n3ILaMSysOF/cVWwEwykW/2xL5/Hu+1rCS0iH+zr4FhyX4Bhj1HHXwgkKRJmH\nlQ2ctC2iVkmNHlI1T+CvZtUCJlKVkkJq1AiX0gVLwT5i0uK2QYlmfOr1/+jv\nXAxTd50cQuXNCQ+TGipHBl15A3AfnH+19KIFncMoOdsxZYU1j+9F5qr3Yz9q\njjSdhB7MZu9wmguJ7Cy3A98nyyhYE8QAzAK0zCpl+2EP035kGSNCQ6O3EU0C\nsCJxn1sIZSQ8Zf6JFbLPOWJdFwNjYVnUEki6kVsO6TJZHyKQF3k9+CC2+goy\nrD0dgFSSOpbDzVZrppUuHVdcAQLLqhloBPxmnU7Pw/mwRyODJQvLPRbEZDzk\njVXGKKZKgaoGJCo8CWmfGxMosNDT5wn5e5LftwAyPrcBBaN64eTtGk0NzoLP\nJgHFgklwzofsckGt3Nh7ybif8s9xMBWICZI2NKJj3TmWO9uV/HM9cfWdN8ms\nfTaTxnfWhx8irGyC1a/un3Q2ci03YCur7rcOxA9Mapcx0+O8P2aNKMCqXviI\nLYAKkPu1iEhuhA1KdV6m1UVyY8s2gP5uJ63Qd5S2tQq4ddPNJYiNkNRAC3vd\n3EIvsuiuD/agFTwCkQxLsCaSKoBXLPxrd4y/2jsI6do16w/i3PPlSY37zEiK\nNnTX\r\n=p37f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDLGwvzHRBK8adAwX+4yRrUy62Ar037GfiqFHlWfpwvpwIhAJPLh8lAJ3VV7j/X8aUQhBPPQafU0o/brk5c8Knqo0D5"}]},"maintainers":[{"name":"a11ygato-user","email":"jean.dat@orange.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/audit-engine_0.1.0_1540385774245_0.5669025219004618"},"_hasShrinkwrap":false},"0.2.0-rc.1":{"name":"@a11ygato/audit-engine","version":"0.2.0-rc.1","description":"@a11ygato/audit-engine is a node API to create accessibility reports using the axe-core engine into a Chrome container","main":"lib/AuditEngine.js","keywords":["a11y","accessibility","pa11y","pally","engine","audit","axe","analysis","report"],"license":"MIT","engines":{"node":"8"},"author":{"name":"Jean Dat","email":"jean.dat@orange.com"},"scripts":{"lint":"eslint --ignore-path=.gitignore --fix --color --format codeframe *.js **/*.js","watch":"npm run lint && npm run watch:js","watch:js":"chokidar '**/*.js' '*.js' -c 'npm run lint'"},"dependencies":{"async":"~2.3","axe-core":"^2.6.1","chalk":"~1.1","commander":"~2.9.0","fetch-cookie":"^0.7.0","generic-pool":"^3.4.2","https-proxy-agent":"^2.2.1","joi":"~10.4.1","lodash":"^4.17.10","mkdirp":"~0.5.1","mongodb":"^2.2.35","node-fetch":"^1.7.3","phantom-pool":"~1.2.0","portscanner":"^2.2.0","pretty-ms":"^3.2.0","proxy-agent":"^2.3.1","puppeteer":"^1.8.0","q":"^1.5.1","rimraf":"^2.6.2","shortid":"~2.2.6","verror":"~1.9.0","vm2":"^3.6.0"},"devDependencies":{"chokidar-cli":"^1.2.0","eslint":"^4.19.1"},"_id":"@a11ygato/audit-engine@0.2.0-rc.1","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"a11ygato-user","email":"jean.dat@orange.com"},"dist":{"integrity":"sha512-s4i1IkF4nTRWnOnkZDjJOLpTvbdNvIEBek9D3ZlazWJDkSNOzv2E4i16kAEJZ0nMvMIBAxB7O5Z5OUsxQDSWnA==","shasum":"390398db42823efd9815083fbecaef740e2c1738","tarball":"https://registry.npmjs.org/@a11ygato/audit-engine/-/audit-engine-0.2.0-rc.1.tgz","fileCount":36,"unpackedSize":169982,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb4bZaCRA9TVsSAnZWagAAfT0P/3ANOPUzi8snTtQ+d9Ds\nkcWVpaAOlMOZOSyHV4tYuAmgGRBwnpImudrmCfEh3stvjk0Wi7/UXuQkDsRH\nBwwIgHGcaOMzXLDtdRIQFhW4JKYSz3cCmj3xnqyLzVzxCpLQIFYiHSb5CHQl\nylWOxtV7ovXohW07sI2TgZV8GGBnN91rbbjMa39DIxYu8C3pcZ55usKBeVk3\neoqGap1LanFZ7w5A/1h9oRhgm/iRj32PTm2nhcruFAD8EVsfKm/OTCtam8Nv\njzwS+q191dqgCL4LPc4AHy7YERIec+XT7lDmg9TKdccjPcCZmCAie4cAHK5Q\n/YV8ONmfsLhcplSOvWSZRb42MQG7++pe3IYCbSaebM+q3DSBlobu301IP6ji\nEfstV8b0w7v0XIwkDSHp0oTsdZOABRFiw3o9i5QXdOz+/yJ01SVTLE07P2TA\nsRowbXlk0Vt0MphT5vV7ZMb7xVcposk1Y0l9QlfMrHNnKm/AT0sGlnGhpMQn\nDBhRxTb+zHXrFHQ2Ek2CFvYRT88BK9qF5B2s5ARsiaHTNvvjMHEXBKTW46yb\necJpcoTis1jIicRvta44ZPMuTBAzqkArROE1rZaKO+glT9xmE11yZ/xhqzdP\nYA5DiaUvyj37pcCfk6gY2T2zoqkO9OzvnLX3U5CX59T+lEfNGdw7OWpbiNAT\ncyVr\r\n=lzB0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEVMQT/8lpAxxyRl6or36tElbt2pT0u3EeBbH6Y/4gi9AiEA+PPGHxG67bN/oAmuUXy0umt7ZSsI+qPN/u+iFOl90cY="}]},"maintainers":[{"name":"a11ygato-user","email":"jean.dat@orange.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/audit-engine_0.2.0-rc.1_1541518938042_0.5609170145906144"},"_hasShrinkwrap":false},"0.2.0":{"name":"@a11ygato/audit-engine","version":"0.2.0","description":"@a11ygato/audit-engine is a node API to create accessibility reports using the axe-core engine into a Chrome container","main":"lib/AuditEngine.js","keywords":["a11y","accessibility","pa11y","pally","engine","audit","axe","analysis","report"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/Orange-OpenSource/a11ygato-platform.git"},"engines":{"node":">=8"},"author":{"name":"Jean Dat","email":"jean.dat@orange.com"},"scripts":{"lint":"eslint --ignore-path=.gitignore --fix --color --format codeframe *.js **/*.js","watch":"npm run lint && npm run watch:js","watch:js":"chokidar '**/*.js' '*.js' -c 'npm run lint'"},"dependencies":{"async":"~2.3","axe-core":"^3.1.2","chalk":"~1.1","commander":"~2.9.0","fetch-cookie":"^0.7.0","generic-pool":"^3.4.2","https-proxy-agent":"^2.2.1","joi":"~10.4.1","lodash":"^4.17.10","mkdirp":"~0.5.1","mongodb":"^2.2.35","node-fetch":"^1.7.3","phantom-pool":"~1.2.0","portscanner":"^2.2.0","pretty-ms":"^3.2.0","proxy-agent":"^2.3.1","puppeteer":"^1.8.0","q":"^1.5.1","rimraf":"^2.6.2","shortid":"~2.2.6","verror":"~1.9.0","vm2":"^3.6.0"},"devDependencies":{"chokidar-cli":"^1.2.0","eslint":"^4.19.1"},"bugs":{"url":"https://github.com/Orange-OpenSource/a11ygato-platform/issues"},"homepage":"https://github.com/Orange-OpenSource/a11ygato-platform#readme","_id":"@a11ygato/audit-engine@0.2.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"a11ygato-user","email":"jean.dat@orange.com"},"dist":{"integrity":"sha512-Ge2I24lNOw1OHzpcCITPQoxjO6TEtTsk5EwSkiVh/A/lADsqPuleAqI6VA8f8FhdOkHEVktE0DAuNN0iKekhlA==","shasum":"db94a6ef3d5dc5be4f75b534b0d25cab14e8b413","tarball":"https://registry.npmjs.org/@a11ygato/audit-engine/-/audit-engine-0.2.0.tgz","fileCount":36,"unpackedSize":170534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb6u48CRA9TVsSAnZWagAAojQQAKDk8k6gtbUMjy5mrle0\nFwAsukdAtChewkPiAVgDnxJ3QmqWG7039KqjPMZlfLzoSkXhpibCrZ9N1Qc9\n704t0FIizCGWy0EAGmWXRZQqp2NO6vXm6CDiWz3wUHt+nMSIaYsG054dQ3fQ\naz8ZCNADEz+gKjpyTWUtg4ypimrhBB/VkOeajar6qNIa9IZmbi5A8smGKHwa\n1uudXaP9s1c0qTj7ogUXCVbvHPj/7TZBu/aCx6XE2vbV/guK6sgJZp7j8uS+\nGyChlN0TqaGBGWA7efw+UaECGIwcsOtNVacK5jY5lh7xJS4P/hvcSio0ySkY\nwuNgKBFHqQ/fwxVrMxMaqIchX5BsQMkpOZlLHQFyLN3CsVZIDDHhKVvFjWV1\nUYRQzOiYuuVz7xvb6R4XA04JIiqzS74BPlwuJ+8WgBngmdhjm/l3CyeRtSsz\nWw2+O5sMsXcB/qIIA+RLzlsvsUMGP1NZzj7jdBRfnXYbEWYqA97zHzwkqhGZ\nlccML5tIMPdOeY9y99hY0alsr9usba9e1i+fJXeOAQjl1ULuV6RyIqyVCTzK\naXxM77rcBKLrcQm5vhnxwy3Jbe56++L1kXCIEm2x8UYfcbZvbG81UN6fZv93\n/RdMYmXqG/hO/itUkAjjqWsj4kNFMKY8fVMOC+nvLOq+BEhfnikOxr1gtAd9\nChvj\r\n=w5kS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAjP4s2f5+mKmsajtdV87vQH0JxXqp8ITK/c/1fYqsMfAiEA4kShU9OgjCfiWW6YyUoF71SvBIJlB3vQTyLWTij/ed8="}]},"maintainers":[{"name":"a11ygato-user","email":"jean.dat@orange.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/audit-engine_0.2.0_1542123068018_0.67743666450419"},"_hasShrinkwrap":false},"0.3.0":{"name":"@a11ygato/audit-engine","version":"0.3.0","description":"@a11ygato/audit-engine is a node API to create accessibility reports using the axe-core engine into a Chrome container","main":"lib/AuditEngine.js","keywords":["a11y","accessibility","pa11y","pally","engine","audit","axe","analysis","report"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/Orange-OpenSource/a11ygato-platform.git"},"engines":{"node":">=8"},"author":{"name":"Jean Dat","email":"jean.dat@orange.com"},"scripts":{"lint":"eslint --ignore-path=.gitignore --fix --color --format codeframe *.js **/*.js","watch":"npm run lint && npm run watch:js","watch:js":"chokidar '**/*.js' '*.js' -c 'npm run lint'"},"dependencies":{"async":"~2.3","axe-core":"^3.1.2","chalk":"~1.1","commander":"~2.9.0","fetch-cookie":"^0.7.0","generic-pool":"^3.4.2","https-proxy-agent":"^2.2.1","joi":"~10.4.1","lodash":"^4.17.10","mkdirp":"~0.5.1","mongodb":"^2.2.35","node-fetch":"^1.7.3","portscanner":"^2.2.0","pretty-ms":"^3.2.0","proxy-agent":"^2.3.1","puppeteer":"^1.8.0","q":"^1.5.1","rimraf":"^2.6.2","shortid":"~2.2.6","verror":"~1.9.0","vm2":"^3.6.0"},"devDependencies":{"chokidar-cli":"^1.2.0","eslint":"^4.19.1"},"bugs":{"url":"https://github.com/Orange-OpenSource/a11ygato-platform/issues"},"homepage":"https://github.com/Orange-OpenSource/a11ygato-platform#readme","_id":"@a11ygato/audit-engine@0.3.0","_npmVersion":"6.4.1","_nodeVersion":"10.13.0","_npmUser":{"name":"a11ygato-user","email":"jean.dat@orange.com"},"dist":{"integrity":"sha512-6IIecrdVmZ9gH+ESn+Dj5dnalGTg/jd35jXem6m+HwQ1XKJjiJFZVgjTJrxuK56FZ4G7Xuu2dOEevxY1WNrMug==","shasum":"7344c2cb12fd5b9feea887a8ee90b46e52dd6f6f","tarball":"https://registry.npmjs.org/@a11ygato/audit-engine/-/audit-engine-0.3.0.tgz","fileCount":36,"unpackedSize":163791,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb9EYQCRA9TVsSAnZWagAA1VkP/j+BetKbouEvLli7Mm9Z\n7Oqr70UgDlQFHFwR47F6RBdSYFDSSeWsrMmPiyMAltEwAkK3hLWwHdVuouzH\nQWpwapA7AMttLZIHzBpeybhSWDzRGxsMLAPix01egu4lsyaB8n+8k4CreoSX\niNEOYRlhbBRp2uiGCFleso2gkKHLnJT9qYkXPSbAE6OOaVNTA8oGaNxbrA8t\nv1AZG7mQovtgDea1CxA+KrkHeSNzbZ5HWybYW5zLdr4qaR4g1qnLO3QLmzTT\n7CyhbqZySONf9Kzv28cyV/YkxczLEFij8R2pIhr4PSHJgZ81OL6xr3Bk4zNV\nuPd2dZpycKTq3pd4ExOzwvHsF7mVozZipqlUQR9aanqFGAkhq0RHyUJ+V/YR\nf/lF/e9JgNjQUfyRm1cKHHZlcOsTzgsTwcVv4TM0pFtgZr6O1VwZsk71stfc\nF+1ZvxSlPKbU2sMD0T43gQbApCXkQpEgs6EQm8+AD7uFdmxDN4fTXZC56e7l\nmod2LNsE2aSj2K9JwI8BwWwA1urNvtIZqU8aiu+FxhF/ie3XFe0rISUTw9F/\nAF+oDvffYTO/BaiJQnYWrdW2wlFbzLluIgIXjUfEtoqDAKvZ4GeXpF9dV5pG\nLjFSX5CoJQEsrItu2pMGEvMgdvfe6wlN3WXMN+/nuqbQ6GGZAG/ViFVgo+lu\n/9Vo\r\n=kBC2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDeCGGJbEx9ACKOH4CZmcsJ5Ql0dsmXfLCUln1kNU6eVwIhAJQdiA2b7/ddc7i+5+sSWjLKQf9rfba7f74gWCWlVnah"}]},"maintainers":[{"name":"a11ygato-user","email":"jean.dat@orange.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/audit-engine_0.3.0_1542735375074_0.47805454805736436"},"_hasShrinkwrap":false},"1.0.0":{"name":"@a11ygato/audit-engine","version":"1.0.0","description":"@a11ygato/audit-engine is a node API to create accessibility reports using the axe-core engine into a Chrome container","main":"lib/AuditEngine.js","keywords":["a11y","accessibility","pa11y","pally","engine","audit","axe","analysis","report"],"license":"GPL-3.0-or-later","repository":{"type":"git","url":"git+https://github.com/Orange-OpenSource/a11ygato-platform.git"},"engines":{"node":">=8"},"author":{"name":"Jean Dat","email":"jean.dat@orange.com"},"scripts":{"lint":"eslint --ignore-path=.gitignore --fix --color --format codeframe *.js **/*.js","watch":"npm run lint && npm run watch:js","watch:js":"chokidar '**/*.js' '*.js' -c 'npm run lint'"},"dependencies":{"async":"~2.3","axe-core":"^3.1.2","chalk":"~1.1","commander":"~2.9.0","fetch-cookie":"^0.7.0","generic-pool":"^3.4.2","https-proxy-agent":"^2.2.1","joi":"~10.4.1","lodash":"^4.17.10","mkdirp":"~0.5.1","mongodb":"^2.2.35","node-fetch":"^1.7.3","portscanner":"^2.2.0","pretty-ms":"^3.2.0","proxy-agent":"^2.3.1","puppeteer":"^1.8.0","q":"^1.5.1","rimraf":"^2.6.2","shortid":"~2.2.6","verror":"~1.9.0","vm2":"^3.6.0"},"devDependencies":{"chokidar-cli":"^1.2.0","eslint":"^4.19.1"},"bugs":{"url":"https://github.com/Orange-OpenSource/a11ygato-platform/issues"},"homepage":"https://github.com/Orange-OpenSource/a11ygato-platform#readme","_id":"@a11ygato/audit-engine@1.0.0","_npmVersion":"6.4.1","_nodeVersion":"10.13.0","_npmUser":{"name":"a11ygato-user","email":"jean.dat@orange.com"},"dist":{"integrity":"sha512-PXNkvPGKcuzGrG8L5AiSG6Eo0sOGnqGxP8mziPcnq5v+vaHu4zQdgDpw2PjP4t1iypobBf8JyS1NSdoN6ymHzg==","shasum":"5eeb9b92716466adc37b51e601791f19fb913dfd","tarball":"https://registry.npmjs.org/@a11ygato/audit-engine/-/audit-engine-1.0.0.tgz","fileCount":36,"unpackedSize":211366,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcEOJJCRA9TVsSAnZWagAA0DEP+wdlvYuMGmG3GVKgJIvr\n7d6u5avMiL/ViLbZl4o8/FugPQ6SW9ftvM9Elm10ldjMePA77YynRu/EIAui\nVzIjlRu2NpKQs8VRnYiNvwlRzB17ExdqaefPY6p4SSFQTQPPBr+6NHCk7//7\nuJUjsK4XcVxvaiake6Ppu8dvBYWE2HzawVGF7O7pm3f2LOL+foMyZjPrrt7o\nAzjITAJWvIZWxKeDFQnZCnQvwI2EzQ75xcj4Ow9jyMy87j6Afe3MMOxYdyzN\neijldRKbElD3zQLNsAljw6Io+oy/+t1buSV1O4uWOaUWZzu7f16Lz88wpN0v\n4X7C9E5F0WoUBinWjQKnRy8IPZL9vGDZgmXNhJLStp3kRMpyzecgtpOYmkfO\ns2N1MjvZ0UA4eDbtHtPwUaztau2ehy75kCeaaaXcZoBWSR2kQFPxBA9VgORd\nsO4xwku1LgaNDp2eF9KE3rwyZXrC7ZtDDSILVILDyDuzTKD/OqQXFGy90VE+\n5RjH7dBKJvop4sS3eFY3Qeo7tt3KHUpNg9pVO0QmOm/wB+BEAyGWEUJM0J3V\nPJOEfvWx1ozgD1lt2R2FHscVOw7vUTbAm7x3cr0vC1QZZmQ0clmoQGbOY4Q0\nKpZSvFvLV5M+c99X9mT66kjG4l9WmfEWGMAUaeGWwYICs6tFrxgVULrZ5QHi\nIN2U\r\n=9can\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCnxUwFg7G+0U0xyh+o5+zXHxFgjgcjSr+ooMbZKxLoYgIgF6Nqi6m0ctpIHe5syCry3gl62SVZ5Smh+hgSLFAQ96w="}]},"maintainers":[{"name":"a11ygato-user","email":"jean.dat@orange.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/audit-engine_1.0.0_1544610376413_0.1243449616644885"},"_hasShrinkwrap":false}},"time":{"created":"2018-10-24T12:56:14.087Z","0.1.0":"2018-10-24T12:56:14.342Z","modified":"2022-04-04T10:52:48.431Z","0.2.0-rc.1":"2018-11-06T15:42:18.195Z","0.2.0":"2018-11-13T15:31:08.122Z","0.3.0":"2018-11-20T17:36:15.237Z","1.0.0":"2018-12-12T10:26:16.618Z"},"maintainers":[{"name":"a11ygato-user","email":"jean.dat@orange.com"}],"description":"@a11ygato/audit-engine is a node API to create accessibility reports using the axe-core engine into a Chrome container","keywords":["a11y","accessibility","pa11y","pally","engine","audit","axe","analysis","report"],"author":{"name":"Jean Dat","email":"jean.dat@orange.com"},"license":"GPL-3.0-or-later","readme":"# @a11ygato/audit-engine\n\n## Overview\n\nThis project is the engine responsible to audit a URL, a tree of URLs or a puppeteer script in a browser container.\n\nBehind the scene, we are using axe-core to analyze pages. But we don't exclude the possibility to add other accessibility engines in the future. \n\nThere is one browser container: Chrome Headless. There was also Phantom (Webkit) before, but it has been abandonned.\n\nThis is the node API. There is a CLI named `@a11ygato/cli`.\n\nAxe is configured with these accessibility norms: \n\n- WCAG2A \n- WCAG2AA\n\nThese rules are also deactivated:\n\n- bypass\n- video-caption\n- audio-caption\n- object-alt\n- video-description\n\nThe browser container is installed and instantiated by this module automatically as a dependency.\n\n## Installation\n\n```bash\nnpm i -S @a11ygato/audit-engine\n```\n\n## Initialize the engine \n\nYou must first initialize once and for all the audit engine package:\n\n```js\nconst auditEngine = require('@a11ygato/audit-engine');\nconst settings = {...};\nawait auditEngine.init(settings);\n```\n\n### Trigger an audit or a scenario \n\nAfter that, you can trigger how many audits or scenarii you want.\n\nAn audit always have a root URL. You may enable crawling to find new URLs.\n\n```js\nconst auditEngine = require('@a11ygato/audit-engine');\nconst task = {url: 'https://...', depth, limit, ...};\nconst audit =  auditEngine.createAudit(task);\nconst report = await audit.run();\n```\n\nAnother way to analyze pages is to create a scenario. A scenario regroup one or more audits via scripting. A script is simply javascript code using the Puppeteer API with a few specificities.\n\n```js\nconst auditEngine = require('@a11ygato/audit-engine');\nconst task = {scenario: '...'};\nconst scenario = auditEngine.createScenario(task)\nconst report = await scenario.run();\n```\n\nYou may `catch` errors with a `try/catch` statement but you will only receive uncaught errors. An audit or a scenario always complete and store eventually in the `exception` field the cause of failure if needed.\n\n### API\n\n<!-- toc -->\n\n- [auditEngine.init(options)](#init)\n- [auditEngine.getSettings()](#getSettings)\n- [auditEngine.createAudit(task)](#createAudit)\n- [auditEngine.createScenario(task)](#createScenario)\n- [auditEngine.shutdown()](#shutdown)\n- [class: Audit](#class-audit)\n- [class: Scenario](#class-scenario)\n- [Report](#class-report)\n- [URLResult](#urlresult)\n- [Violation](#violation)\n\n#### auditEngine.init(settings)\n\nModify settings for the whole engine.\n\n- `settings` <[Object]>\n  * `publicFolder` <[String]> Absolute or relative path to the folder that will store screen captures and source codes. Default: `./public`.\n  * `axeScript` <[String]> Absolute or relative path to the javascript axe file. If not provided, the `axe-core` package will be searched in `node_modules`.\n  * `includeRawAxeResults` <[boolean]> Whether raw results returned by axe should be included too? Default: false.\n  * `screenshotFilename` <[String]> Basename for the captured screenshot. Default: `page.png`.\n  * `sourceFilename` <[String]> Basename for the captured source code. Default: `source.html`.\n  * `concurrentInstances` <[Number]> Max number of concurrent browser instances. Default: `15`.\n  The maximum concurrent jobs for one audit being 5, we can have between 3 (each task having 5 concurrents jobs) and 15 tasks (each task having one concurrent job) in parallel.\n  * `proxy` <[String]> Proxy address. Default: `null`.\n- returns <[Promise]>\n\nThe engine manage a pool of connections per browser container. \nToday, only Chrome is left, but before there was also Phantom. \nThere is a limit to the maximum number of connections you can have at the same time. \nEven if you launch 20 audits with a concurrency of 5, when the max is reached, you will have to wait for a free connection. \nThis is obviously automatic but still good to know. It may explains why an audit take much more time than usual.\n\n#### auditEngine.getSettings(settings)\n\nGet engine settings.\n\n- returns <[Object]>.\n\n#### auditEngine.createAudit(task)\n\n- `task` <[Object]>\n  * `url` <[String]> Only mandatory argument. Root URL to audit from which we may start crawling.\n  * `limit` <[Number]> Maximum number of URL that may be audited independently of the depth. Default: 1. Max: 200.\n  * `depth` <number> Define how many levels of crawling may be done. When a URL is audited, if `depth` is > 0 and/or\n  `limit` > 1, the engine will parse the source in search of new URL from the same domain and add them (protocol, hostname and port must match). Default: 5.\n  * `concurrency` <[Number]> Maximum number of URL audited in parallel. Default: 5. Max: 5.\n  * `timeout` <[Number]> Timeout (in ms) used in several places notably when running axe tests. \n  Be aware that some very large site might solicit axe for several minutes before getting the results back. Default: 90000. \n  * `urlFilter` <[String]> Regular expression content (without // or flags) that allows you to bypass the default crawling algorithm and decide precisely which urls are selected by the crawler.\n- returns <[Audit]>\n\n#### auditEngine.createScenario(task)\n\n- `task` <[Object]>\n  * `scenario` <[String]> A puppeteer script. Mandatory argument.\n- returns <[Scenario]>\n\nA scenario is javascript code (ES6) using the [Puppeteer API](puppeteer-api).\n\nYou can use the modern `async/await` keywords if you want and you DON'T need any IIEFor async wrapper function to start using it right away.\n\nWhatever code style you like, your should always return a `Promise` as your last expression:\n\n```js\nreturn new Promise((resolve, reject) => {\n    // Do something\n    resolve(); // or reject()\n});\n\n// OR\n\nreturn audit(...).then(() => {\n    return audit(...);\n}).then(() => {\n    return audit(...);\n});\n\n// OR\n\nawait audit(...);\nawait audit(...);\n\n// OR\n\nreturn Promise.all(audit(...), audit(...), audit(...));\n```\n\n##### Examples\n\n###### A simple example with BASIC authentication\n\n```js\n/************************************************************************************/\n// BASIC AUTH\n/************************************************************************************/\n\nconst username = 'foo';\nconst password = 'bar';\n\nconst url = `https://httpbin.org/basic-auth/${username}/${password}`;\n\nawait page.goto(url);\nawait page.authenticate({ username, password });\n\n// Trigger an audit using the current state (current page url).\nawait audit(page);\n\n\n// This is another way to set HTTP headers but be aware they will be preserved between navigations.\n// const headers = new Map();\n// headers.set(\n//     'Authorization',\n//     `Basic ${new Buffer(`${username}:${password}`).toString('base64')}`\n// );\n// await page.setExtraHTTPHeaders(headers);\n```\n\n###### A more advanced example\n\n```js\n/************************************************************************************/\n// FORM AUTH\n/************************************************************************************/\n\nconst login = 'foo';\nconst password = 'bar';\nconst timeout = 90000;\n\nawait page.goto('http://www.orange.fr/portail');\n\n// Click the customer space button\nawait page.waitForSelector('.espace-client-left', { visible: true, timeout });\nawait page.click('.espace-client-left');\n\n// Click the identification button\nawait page.waitForSelector('#sc-identification .ec_button5', { visible: true, timeout });\nawait page.click('#sc-identification .ec_button5');\n\n// Set username and password\nawait page.waitForSelector('#default_f_credential', { visible: true, timeout });\nawait page.$eval('#default_f_credential', el => el.value = '');\nawait page.focus('#default_f_credential');\nawait page.type(login);\nawait page.waitForSelector('#default_f_password', { visible: true, timeout });\nawait page.focus('#default_f_password');\nawait page.type(password);\n\n// Submit form\nawait page.click('#AuthentForm input[type=submit].sc_button_content_2.submit');\nawait page.waitForNavigation({ timeout });\n\n// Audit current page and another one (crawl).\nawait audit(page, { limit: 2, depth: 1 });\n\n// Audit another site entirely with the same connection.\n// URLs will be audited sequentially because there is only one connection.\nawait audit(page, { url: 'http://www.orange.es', limit:5 });\n\n// Audit another site without reusing the same connection (will use a shared pool of connections).\n// A maximum of 5 URLs can be audited in parallel.\nawait audit({ url: 'https://twitter.com', concurrency: 5, limit: 3, depth: 2 });\n```\n\n##### Globals\n\n###### page:Page\n\n`page` is an instance of the Puppeteer `Page` class. You can use it normally even though some methods are frozen for obvious security reasons.\nYou can see `page` as a tab in Chrome.\n\n###### audit([page], task)\n\n- `page` <[Page]> Optional Puppeteer Page instance.\n- `task` <[Object]> Task configuration:\n    - `url` <[String]> URL to audit\n    - `limit` <[Number]> Maximum number of URL that will be audited. Default `1`.\n    - `depth` <[Number]> Maximum depth when crawling (searching new urls). Default `5`.\n    - `concurrency` <[Number]> Maximum number of URL audited in parallel (between 1 and 5). Default `5`.\n    - `timeout` <[Number]> Timeout used during an audit for specific tasks like loading the page, executing axe tests, etc. Default `180000`.\n    - `urlFilter` <[String]> Regular expression content (without // or flags) that allows you to bypass the default crawling algorithm and decide precisely which urls are selected by the crawler.\n\nWhen `page` is omitted, you must provide at least this minimalist task configuration: `{ url:'https://...' }`.\nTransmitting only the current `page` is equivalent to transmitting a minimalist task configuration with only a URL (the current one).\n\n##### Accessible modules\n\nThere is not much you can require. Here is the current whitelist:\n\n- `q`\n- `url`\n- `async`\n- `lodash`\n- `util`\n\nYou have access to classic ES6 globals plus node `Buffer` class.\n\n#### auditEngine.shutdown()\n\n- returns <[Promise]>\n\nI encourage you to close properly the engine on shutdown. For instance:\n\n```js\nprocess.once('SIGINT', function () {\n    console.log('Received SIGINT');\n    return gracefulShutdown(0);\n});\n\n////////\n\nfunction gracefulShutdown(exitCode) {\n    // Destroying pools.\n    return auditEngine.shutdown().then(function() {\n        console.log('Pools drained');\n        process.exit(exitCode);\n    });\n}\n```\n\n#### class: Audit\n\n- `run` <[function]> Start auditing. Each url in error is tried two more times before being marked in error.\n    * returns <[Promise]<[Report]>>\n\n#### class: Scenario\n\n- `run` <[function]> Start auditing\n    * returns <[Promise]<[Report]>>\n\n#### Report\n\nAn audit or a scenario return a report with the following structure (which is essentially legacy).\n\n- `count` <[Object]>\n  * `total` <[Number]> Aggregated number of tests\n  * `pass` <[Number]> Aggregated number of successes\n  * `error` <[Number]> Aggregated number of errors\n  * `warning` <[Number]> Aggregated number of warnings\n  * `notice` <[Number]> Aggregated number of notices\n- `numElements` <[Number]> Aggregated number of HTML elements in all audited pages\n- `urls` <[Array<[URLResult]>]> List of url results (one per url audited). Contains axe results.\n- `root` <[String]> First URL that triggered the audit\n\n#### URLResult\n\nA URLResult contains axe results for one URL.\n\n- `count` <[Object]>\n  * `total` <[Number]> Aggregated number of tests\n  * `pass` <[Number]> Aggregated number of successes\n  * `error` <[Number]> Aggregated number of errors\n  * `warning` <[Number]> Aggregated number of warnings\n  * `notice` <[Number]> Aggregated number of notices\n- `numElements` <[Number]> Number of HTML elements in the page.\n- `results` <[Array<[Violation]>]> List of violations (yes it contains only violations).\n- `local` <[String]> Relative filepath to source code from public folder root. Default: `''`.\n- `image` <[String]> Relative filepath to screen capture from public folder root. Default: `''`.\n- `exception` <[String]> Error message if this url failed during audition.\n\n#### Violation\n\nA violation represent an axe error on a specific node.\n\n- `code` <[String]> Error label.\n- `type` <[String]>. Fixed to `error`.\n- `message` <[String]> Error message.\n- `selector` <[Array<[String]>]> List of HTML node elements. \n\n\n\n[Array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array \"Array\"\n[boolean]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type \"Boolean\"\n[Buffer]: https://nodejs.org/api/buffer.html#buffer_class_buffer \"Buffer\"\n[function]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function \"Function\"\n[Number]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type \"Number\"\n[Object]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object \"Object\"\n[Promise]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise \"Promise\"\n[String]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type \"String\"\n[Error]: https://nodejs.org/api/errors.html#errors_class_error \"Error\"\n[iterator]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols \"Iterator\"\n[Audit]: #class-audit \"Audit\"\n[Scenario]: #class-scenario \"Scenario\"\n[Report]: #report \"Report\"\n[URLResult]: #urlresult \"URLResult\"\n[Page]: https://github.com/GoogleChrome/puppeteer/blob/v0.11.0/docs/api.md#class-page \"Page\"\n[puppeteer-api]: https://github.com/GoogleChrome/puppeteer/blob/v0.11.0/docs/api.md \"Puppeteer\"\n[Promise]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise \"Promise\"\n","readmeFilename":"README.md","homepage":"https://github.com/Orange-OpenSource/a11ygato-platform#readme","repository":{"type":"git","url":"git+https://github.com/Orange-OpenSource/a11ygato-platform.git"},"bugs":{"url":"https://github.com/Orange-OpenSource/a11ygato-platform/issues"}}