{"_id":"@daveparslow/perf-cascade","_rev":"4-2c086b97b864b8dacb1eb8d3c45aff25","name":"@daveparslow/perf-cascade","dist-tags":{"latest":"2.8.3"},"versions":{"2.8.0":{"name":"@daveparslow/perf-cascade","version":"2.8.0","description":"Har file visualizer","main":"./main/index.js","module":"./main/index.js","style":"./dist/perf-cascade.css","scripts":{"test":"echo \"Error: no test specified\" && exit 1","lint":"grunt tslint","watch":"tsc -w","build":"tsc","start":"live-server --watch=build/stage/,src/index.html --ignore=build/stage/temp/ --open=src/index.html","clearJS":"find ./src/ts -iname \"*.js\" -delete && find ./src/ts -iname \"*.map\" -delete","ghPages":"grunt ghPages","release-patch":"grunt release","release-minor":"grunt release --release-increment=minor","release-major":"grunt release --release-increment=major","tsc":"tsc"},"author":{"name":"Michael Mrowetz","email":"me@michaelmrowetz.com","url":"https://github.com/micmro"},"repository":{"type":"git","url":"git+https://github.com/micmro/PerfCascade.git"},"directories":{"lib":"./lib","dist":"./dist"},"license":"MIT","devDependencies":{"@types/react":"^16.9.0","@types/react-dom":"^16.9.0","conventional-changelog":"^3.0.5","grunt":"^1.0.4","grunt-banner":"^0.6.0","grunt-browserify":"^5.3.0","grunt-bump":"^0.8.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-concat":"^1.0.1","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^3.4.0","grunt-contrib-watch":"^1.1.0","grunt-gh-pages":"^3.1.0","grunt-run":"^0.8.1","grunt-tslint":"^5.0.2","live-server":"^1.2.1","load-grunt-config":"^3.0.0","tsify":"^4.0.0","tslint":"~5.11.0","tslint-eslint-rules":"^5.4.0","typescript":"^4.0.2","whatwg-fetch":"^2.0.4","react":"^16.13.1","react-dom":"^16.13.1","eslint":"^7.6.0","eslint-plugin-import":"^2.20.0","eslint-plugin-prettier":"^3.1.4","eslint-plugin-react":"^7.21.2","eslint-plugin-react-hooks":"^4.2.0-rc.2","@typescript-eslint/eslint-plugin":"^3.9.0","@typescript-eslint/parser":"^3.9.0","@fluentui/react":"^7.139.2"},"peerDependencies":{"@fluentui/react":"^7.139.2","react":"^16.13.1","react-dom":"^16.13.1"},"dependencies":{"@types/har-format":"^1.2.3"},"gitHead":"cd457ce2be60ddf7d781869ee9a23c8bb17ecc3e","bugs":{"url":"https://github.com/micmro/PerfCascade/issues"},"homepage":"https://github.com/micmro/PerfCascade#readme","_id":"@daveparslow/perf-cascade@2.8.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-loeWAqTFr3mbG2anNRLu1R/XMD2qkpSgb39gBNZd49U7ZSM0I60nHZGxrc95GZ+QwcmVflacV3UX/XH4ySv6wg==","shasum":"9a40047eed5e20325c56dfd93a897d5e1c8cc57d","tarball":"https://registry.npmjs.org/@daveparslow/perf-cascade/-/perf-cascade-2.8.0.tgz","fileCount":160,"unpackedSize":354379,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkhfUCRA9TVsSAnZWagAAeRQP/jl3SCK3aLJn0qW3LZKy\nNaeuu+n4QFUkEwoI8QhihuVnFc0W45dSF4XnWh4QKJGKozkSpUTvqHNe0QZ7\nT+464ncTsPcIzkI9bFp8XEk3d3vZzoGSV2nXn1xamoFHYf8zSTtnCc8dUd+W\nFxC4dAS7tvmUI3x1536txQk7K+4eY5KWzljMYZiX3mDj6j189HeBm9mae/2X\nkep3OpXOJESnl121zh3SwqVc2fxoG8fSqgeMM2rd3Fz0H0Ehe4rOTR4TwiiN\nuN5nWFn3FhcbO8NrOQBbxxqEaD8p7F7PB521SarFWMIy3PPKdbP7jh0QeDoG\nYpNQACE7WO8aCBMtBLGeXx6GFH/5chk2VPLvWtmcIxJ5IOSk10oRNWTSTP5S\n1AGoihmy4LVi0ysrzR3ry9955jAjeQ/w2tW4CLB3a/SB3aNxB4rvORVOCzGb\nsTkwmX3JPBTlZdCOlrKsitMSk6+MfJKzp0oZHEifyOroTtCOMH7wboUfco2J\nXZRWNvC4wCUhmoC/YOYk4FqE3OpEw7+XyIB1jppkvB5A6xiGAzxk3jrVLn8G\nt4FkXY+jNqcKpw9OkhhPZBtlJPoggy//tBlYgxVOrs29NlDNcfU+53pyH70T\nuhLB1v9U50UflVoTqV9sBfHO6fAcr4qTJHa1GIap94So9Fb/xa+7zoRHpbEk\nTgvA\r\n=gGM5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBZvL9okUCts3Q6XHNiz1lRN1JPlKsCxF0kUAlOeKXMUAiADAyySDmVBoM9aUUpeGjl0SRssudXSmUakKkZGpFYeYQ=="}]},"maintainers":[{"name":"daveparslow","email":"daveparslow@gmail.com"}],"_npmUser":{"name":"daveparslow","email":"daveparslow@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perf-cascade_2.8.0_1603409875904_0.803336327187266"},"_hasShrinkwrap":false},"2.8.1":{"name":"@daveparslow/perf-cascade","version":"2.8.1","description":"Har file visualizer","main":"./main/index.js","module":"./main/index.js","style":"./dist/perf-cascade.css","scripts":{"test":"echo \"Error: no test specified\" && exit 1","lint":"grunt tslint","watch":"tsc -w","build":"tsc","start":"live-server --watch=build/stage/,src/index.html --ignore=build/stage/temp/ --open=src/index.html","clearJS":"find ./src/ts -iname \"*.js\" -delete && find ./src/ts -iname \"*.map\" -delete","ghPages":"grunt ghPages","release-patch":"grunt release","release-minor":"grunt release --release-increment=minor","release-major":"grunt release --release-increment=major","tsc":"tsc"},"author":{"name":"Michael Mrowetz","email":"me@michaelmrowetz.com","url":"https://github.com/micmro"},"repository":{"type":"git","url":"git+https://github.com/micmro/PerfCascade.git"},"directories":{"lib":"./lib","dist":"./dist"},"license":"MIT","devDependencies":{"@types/react":"^16.9.0","@types/react-dom":"^16.9.0","conventional-changelog":"^3.0.5","grunt":"^1.0.4","grunt-banner":"^0.6.0","grunt-browserify":"^5.3.0","grunt-bump":"^0.8.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-concat":"^1.0.1","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^3.4.0","grunt-contrib-watch":"^1.1.0","grunt-gh-pages":"^3.1.0","grunt-run":"^0.8.1","grunt-tslint":"^5.0.2","live-server":"^1.2.1","load-grunt-config":"^3.0.0","tsify":"^4.0.0","tslint":"~5.11.0","tslint-eslint-rules":"^5.4.0","typescript":"^4.0.2","whatwg-fetch":"^2.0.4","react":"^16.13.1","react-dom":"^16.13.1","eslint":"^7.6.0","eslint-plugin-import":"^2.20.0","eslint-plugin-prettier":"^3.1.4","eslint-plugin-react":"^7.21.2","eslint-plugin-react-hooks":"^4.2.0-rc.2","@typescript-eslint/eslint-plugin":"^3.9.0","@typescript-eslint/parser":"^3.9.0","@fluentui/react":"^7.139.2"},"peerDependencies":{"@fluentui/react":"^7.139.2","react":"^16.13.1","react-dom":"^16.13.1"},"dependencies":{"@types/har-format":"^1.2.3"},"gitHead":"cd457ce2be60ddf7d781869ee9a23c8bb17ecc3e","bugs":{"url":"https://github.com/micmro/PerfCascade/issues"},"homepage":"https://github.com/micmro/PerfCascade#readme","_id":"@daveparslow/perf-cascade@2.8.1","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-CGeh+TBf6szjvQvququJduAulDib55nWNaj/tZBM7Zc8aRJH1Rn9507gD6adHXwobVtUF7kw8KaQC8kelV7LkA==","shasum":"4a7e219104e89671e59e1b7fb302e417b48fecc3","tarball":"https://registry.npmjs.org/@daveparslow/perf-cascade/-/perf-cascade-2.8.1.tgz","fileCount":160,"unpackedSize":354670,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkiE+CRA9TVsSAnZWagAA2ZkP/15Ei0MpoO1kDSmMEsRF\nEBUpm9/SrqpQ3RJxGYpoEWIuZ1mTqIujUoOMACMIkGtwPmtLZC/BgbOM0fc2\nZLUmpQEtRNKHTkvYLYSTwLnMz1WOto1/PpOdjQT2IJVBmdqpRrZo3pODSXXG\ni6WRcrI6g9NT9UEUtTrrts/BMJpLNVzF5Zwr1DwYix+Dfq06UVeZrV9P70bm\naOWiUGhF10F+c9l3EDkRN9D8eqJHpkazd7Fp4UGbzFOpcikdjrkja1/q5J61\njSQSXkwWaQMYJ0/6ucFhOLKJuW56B2b/rPqgN1P262WuwusWkQ6Ko7dOp84Y\nJ1SHNgyTXkChecGl4TMF3IZGsAb1rXaHFnPv3F9rcovrOPMJJ4li4WNQ7WK1\nV8zQSyRp5AjJmgphCeH3Q5Py+6Fuv3ueq1XIDl1MoSSBXMyN5xECM56BGYxO\nvIC1AI9RA3s0iRLRuDJiDn+OUHbpSu59U4mJgyGkvtwvmjkdUkwc6cK+UB49\n2h+uiFQzzyOZcX09C+n2XhoDe/HOhrlHvUkR3Ale8DDF7Ag3QA0jfGOcwOVg\nT+9Ki/mxe+RLJKZECNSbCMzijOqlmURfwB5WUgBBY1kwR70zAhXu3WFqBpog\nbpee5SAoN1VT2KXRjpVZ1C6ubEYKd9rhh57p6R5BvrW3rKgIFb9Q9Wpv8OpB\nKau5\r\n=sVj4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJthhRu6+LrKmhh0R+ZzfnrINbOSJbdppuslo3IKq54AIgbUf4+GV3jmqkBB3GmZIaSuNXE3LnqS1cxA4/w6LmIQs="}]},"maintainers":[{"name":"daveparslow","email":"daveparslow@gmail.com"}],"_npmUser":{"name":"daveparslow","email":"daveparslow@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perf-cascade_2.8.1_1603412285555_0.02967616455136679"},"_hasShrinkwrap":false},"2.8.2":{"name":"@daveparslow/perf-cascade","version":"2.8.2","description":"Har file visualizer","main":"./main/index.js","module":"./main/index.js","style":"./dist/perf-cascade.css","scripts":{"test":"echo \"Error: no test specified\" && exit 1","lint":"grunt tslint","watch":"tsc -w","build":"tsc","start":"live-server --watch=build/stage/,src/index.html --ignore=build/stage/temp/ --open=src/index.html","clearJS":"find ./src/ts -iname \"*.js\" -delete && find ./src/ts -iname \"*.map\" -delete","ghPages":"grunt ghPages","release-patch":"grunt release","release-minor":"grunt release --release-increment=minor","release-major":"grunt release --release-increment=major","tsc":"tsc"},"author":{"name":"Michael Mrowetz","email":"me@michaelmrowetz.com","url":"https://github.com/micmro"},"repository":{"type":"git","url":"git+https://github.com/micmro/PerfCascade.git"},"directories":{"lib":"./lib","dist":"./dist"},"license":"MIT","devDependencies":{"@types/react":"^16.9.0","@types/react-dom":"^16.9.0","conventional-changelog":"^3.0.5","grunt":"^1.0.4","grunt-banner":"^0.6.0","grunt-browserify":"^5.3.0","grunt-bump":"^0.8.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-concat":"^1.0.1","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^3.4.0","grunt-contrib-watch":"^1.1.0","grunt-gh-pages":"^3.1.0","grunt-run":"^0.8.1","grunt-tslint":"^5.0.2","live-server":"^1.2.1","load-grunt-config":"^3.0.0","tsify":"^4.0.0","tslint":"~5.11.0","tslint-eslint-rules":"^5.4.0","typescript":"^4.0.2","whatwg-fetch":"^2.0.4","react":"^16.13.1","react-dom":"^16.13.1","eslint":"^7.6.0","eslint-plugin-import":"^2.20.0","eslint-plugin-prettier":"^3.1.4","eslint-plugin-react":"^7.21.2","eslint-plugin-react-hooks":"^4.2.0-rc.2","@typescript-eslint/eslint-plugin":"^3.9.0","@typescript-eslint/parser":"^3.9.0","@fluentui/react":"^7.139.2"},"peerDependencies":{"@fluentui/react":"^7.139.2","react":"^16.13.1","react-dom":"^16.13.1"},"dependencies":{"@types/har-format":"^1.2.3"},"gitHead":"a4bd443aa8f3b212fe178d591cd679a05b115a98","bugs":{"url":"https://github.com/micmro/PerfCascade/issues"},"homepage":"https://github.com/micmro/PerfCascade#readme","_id":"@daveparslow/perf-cascade@2.8.2","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-mfHhCfH1/STCedxAdvE6GvE3vWwCDLGpeqwyK1CDnOMOOp9UpTYt7IEIaUsI5WzSMuMmJeAhemIqOSCKTf05pw==","shasum":"f1c21e35b2b5783406fcd60053fa2ac0bba392c6","tarball":"https://registry.npmjs.org/@daveparslow/perf-cascade/-/perf-cascade-2.8.2.tgz","fileCount":223,"unpackedSize":10320733,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpM5lCRA9TVsSAnZWagAA5hgP/iBpVQRY/HD3BVXgS9pB\n/oCs+kwVz/4rEECfXLf5oz0IF2zxogGqVz/TWEymYi/PNU3JrnL5dloOQe3L\n8feNjbsIdjq3pqbBEUabyXMQuWkjFJWPMZ3goQZFJf117Hpa/uNSfi1KxJcX\nZKWpDKl7OnYKL5pqyvh/Fb8MYqJNKs0x7zwkzImPdTPjYMuA8OiRcSDZmjSX\nXmESgcUeXlRWpC4FalBPYbzJONN4U8+2bnZBDW9OVLpSyLg698RRyu9vDyZh\nywFAl5M02dRHtluOTbxHx9qt06wUihi+qgeH41IcQs2NG76wM7mIjcuNSOvX\nZyW0YhgrVy4TVum5wU+r3dkixgmeaYWcld52PApTJMmSavXVIOwbBLUo61PF\n+FRh1qhhQu/Y0kzMeoQljRmFWtB9YbQex29bUsQG+LSTnFpKRHpjwBcdIahU\nGXElHeKoEerML9+EYmlOmfrzGmeD5kOgmwMy/GRJASJyDTZcRnaPWjj7+9aP\nH6jEu2wFODcBgE7CZvhn0JOcFjSPKgb0g/piR7jK5I5iuziVnjaeTtUMT8Nj\n2LFW6EMyyk1a5BqbbZ3dJ2GtPXndfNFDskAOagdb6CjIKrTn41UDhpKM9xIQ\nE3vnknemNNZco4tPB7Pf+ZCJWy/er2zzMv19AfPn8UPU4mkRowiNbz7ImUhs\nLFnW\r\n=ody+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmDui/psHX5pRIFT4h0hovx2UyKwKSGZsBiPFQkBci0wIgP43K9k5IhVCSqNO+lfZFL8dK7gevIg1wi8nhrIBBudY="}]},"_npmUser":{"name":"daveparslow","email":"daveparslow@gmail.com"},"maintainers":[{"name":"daveparslow","email":"daveparslow@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perf-cascade_2.8.2_1604636261206_0.5670115345306754"},"_hasShrinkwrap":false},"2.8.3":{"name":"@daveparslow/perf-cascade","version":"2.8.3","description":"Har file visualizer","main":"./main/index.js","module":"./main/index.js","style":"./dist/perf-cascade.css","scripts":{"test":"echo \"Error: no test specified\" && exit 1","lint":"grunt tslint","watch":"tsc -w","build":"tsc","start":"live-server --watch=build/stage/,src/index.html --ignore=build/stage/temp/ --open=src/index.html","clearJS":"find ./src/ts -iname \"*.js\" -delete && find ./src/ts -iname \"*.map\" -delete","ghPages":"grunt ghPages","release-patch":"grunt release","release-minor":"grunt release --release-increment=minor","release-major":"grunt release --release-increment=major","tsc":"tsc"},"author":{"name":"Michael Mrowetz","email":"me@michaelmrowetz.com","url":"https://github.com/micmro"},"repository":{"type":"git","url":"git+https://github.com/micmro/PerfCascade.git"},"directories":{"lib":"./lib","dist":"./dist"},"license":"MIT","devDependencies":{"@types/react":"^16.9.0","@types/react-dom":"^16.9.0","conventional-changelog":"^3.0.5","grunt":"^1.0.4","grunt-banner":"^0.6.0","grunt-browserify":"^5.3.0","grunt-bump":"^0.8.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-concat":"^1.0.1","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^3.4.0","grunt-contrib-watch":"^1.1.0","grunt-gh-pages":"^3.1.0","grunt-run":"^0.8.1","grunt-tslint":"^5.0.2","live-server":"^1.2.1","load-grunt-config":"^3.0.0","tsify":"^4.0.0","tslint":"~5.11.0","tslint-eslint-rules":"^5.4.0","typescript":"^4.0.2","whatwg-fetch":"^2.0.4","react":"^16.13.1","react-dom":"^16.13.1","eslint":"^7.6.0","eslint-plugin-import":"^2.20.0","eslint-plugin-prettier":"^3.1.4","eslint-plugin-react":"^7.21.2","eslint-plugin-react-hooks":"^4.2.0-rc.2","@typescript-eslint/eslint-plugin":"^3.9.0","@typescript-eslint/parser":"^3.9.0","@fluentui/react":"^7.139.2"},"peerDependencies":{"@fluentui/react":"^7.139.2","react":"^16.13.1","react-dom":"^16.13.1"},"dependencies":{"@types/har-format":"^1.2.3"},"gitHead":"0deeead0328fe7dbf9b7df380c78d9b98cedcfa1","bugs":{"url":"https://github.com/micmro/PerfCascade/issues"},"homepage":"https://github.com/micmro/PerfCascade#readme","_id":"@daveparslow/perf-cascade@2.8.3","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-ihsUCinuoeGxk4hW4+BK7esS6bnKHECaZ/ZmBgF7C7CGoF9fz61zAwu6hyOtoiuU8TDYTE3ibVvTyaKfZiwBfg==","shasum":"48c455b02445ed4a6ea94012d94d82b42b92e8e0","tarball":"https://registry.npmjs.org/@daveparslow/perf-cascade/-/perf-cascade-2.8.3.tgz","fileCount":223,"unpackedSize":10320520,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpM9rCRA9TVsSAnZWagAAWRQP/jw9iqz6ZbjhwCeseWmR\n6LD3jZpdFnNu5gzueHdEUdiTDAyWrO4ZhNDcYf9GVkEOJQGMqlF6mSyPkG1q\n1ODcNdpbtAg0+ac8YH9NVmQlfgrQnMAT/FkbMQPICH+93tcscuekzGaksWU3\n+nnxXYCrTIPQ8B4/2y/B46cqyH2FSVkfgRPK5V39QmDbqKJPHX86ygbXxhEw\nD1qicHA8JrYiauWCOK35nY/AtzbmcZEwE5hijNJngWQZ1kiuwgxVvX2gTiyt\nFieFegUW/uJEnFDTgFp8g3KMuy13RF8xMJ1aAgiGYO7DaCvEV0Us7UVq5M3Q\nTPS1lluVZiYuaPip41B8hUUcFgKUcZywF2STUVdWYr5kK9PfwEsZQI+nIsP9\nTaCOsLId7appG+3jSKTEwOxcdJaSZq7h7R4bp/5Xm2VmVdSlbYV5I8pIibAy\nVwMVAzbrekwxwhd2UrCVE+03UIc+GukNXY7gJPm1Ke9HONhO8inAgMmDiCrA\noLWorWzHOor95mGpfPeurrheL8KN7czyGCP5gk2As2aDBGkx2RrOARKeoBgz\naTQGQBDudLGysL+cHRVQ/gOJNa9+oT5VCdEt+Y1hGw4df69K2WSqT2mXFdTn\ncmS9/ZCZSJOLpzSq2F448jufI63PLuiRYFqQrRex4hdT/KfwvuwHeMYxrLZC\n7Yda\r\n=VJhM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGCCcNvRACL6zkedU4mDFMWyRK6URsGjcdZ0txKBhbfpAiEA1ie1oIBpk2A1PUAmY2x+c9M4eRjLy49zUTSMHEh9U64="}]},"_npmUser":{"name":"daveparslow","email":"daveparslow@gmail.com"},"maintainers":[{"name":"daveparslow","email":"daveparslow@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perf-cascade_2.8.3_1604636523222_0.9293487241621328"},"_hasShrinkwrap":false}},"time":{"created":"2020-10-22T23:37:55.850Z","2.8.0":"2020-10-22T23:37:56.014Z","modified":"2022-04-05T03:05:18.995Z","2.8.1":"2020-10-23T00:18:05.805Z","2.8.2":"2020-11-06T04:17:41.377Z","2.8.3":"2020-11-06T04:22:03.475Z"},"maintainers":[{"name":"daveparslow","email":"daveparslow@gmail.com"}],"description":"Har file visualizer","homepage":"https://github.com/micmro/PerfCascade#readme","repository":{"type":"git","url":"git+https://github.com/micmro/PerfCascade.git"},"author":{"name":"Michael Mrowetz","email":"me@michaelmrowetz.com","url":"https://github.com/micmro"},"bugs":{"url":"https://github.com/micmro/PerfCascade/issues"},"license":"MIT","readme":"# PerfCascade\r\nResponsive, SVG based [HAR](http://www.softwareishard.com/blog/har-12-spec/) waterfall viewer .\r\n\r\n[![npm version](https://img.shields.io/npm/v/perf-cascade.svg?style=flat-square)](https://www.npmjs.com/package/perf-cascade)\r\n[![npm downloads](https://img.shields.io/npm/dt/perf-cascade.svg?style=flat-square)](https://www.npmjs.com/package/perf-cascade)\r\n[![Build status][travis-image]][travis-url]\r\n\r\nInstall via `npm install perf-cascade`<br/>\r\nLive example: https://micmro.github.io/PerfCascade/\r\n\r\n<img src=\"https://raw.githubusercontent.com/micmro/PerfCascade/gh-pages/img/PerfCascade-sample2.png\" alt=\"example screenshot\" width=\"704\" height=\"707\">\r\n\r\n## Contents\r\n\r\n- [How to use PerfCascade](#how-to-use-perfcascade)\r\n  * [With ES6 Compatible Module Loader (Webpack, Babel, Typescript...)](#with-es6-compatible-module-loader--webpack--babel--typescript-)\r\n  * [As Global Object](#as-global-object)\r\n  * [Use via npm](#use-via-npm)\r\n- [Options](#options)\r\n- [`*.zhar` - zipped HAR files](#--zhar----zipped-har-files)\r\n- [Rendering other formats (than HAR)](#rendering-other-formats--than-har-)\r\n- [Dev](#dev)\r\n- [Specs and resources](#specs-and-resources)\r\n\r\n## How to use PerfCascade\r\nPerfCascade is exported with [UMD](https://github.com/umdjs/umd), so you can use it as global object, via AMD (e.g. requireJS) or commonJS (internally it uses ES6 modules).\r\n\r\n### With ES6 Compatible Module Loader (Webpack, Babel, Typescript...)\r\nInstall the package\r\n```\r\nnpm install perf-cascade --save\r\n````\r\n\r\n```javascript\r\nimport {fromHar} from 'perf-cascade'\r\n\r\n// `myHarDoc` represents your HAR doc\r\n\r\nconst perfCascadeSvg = fromHar(myHarDoc)\r\ndocument.appendChild(perfCascadeSvg)\r\n```\r\n\r\n_With TypeScript you can additionally import TypeDefinitions for `ChartOptions` (PerfCascade Options) and `harFormat` (namespace for HAR Typings)_\r\n\r\n### As Global Object\r\nWhen using PerfCascade without any module system it just exports as a global object `perfCascade`, you can use as following:\r\n```javascript\r\n/** pass HAR `perfCascade.fromHar` to generate the SVG element*/\r\nvar perfCascadeSvg =  perfCascade.fromHar(harData)\r\ndocument.appendChild(perfCascadeSvg)\r\n```\r\n\r\nOr with options:\r\n```javascript\r\n/** override selected options for PerfCascade (all have defaults) */\r\nvar options = {\r\n  showIndicatorIcons: false, //default: true\r\n  leftColumnWidth: 30 //default: 25\r\n}\r\n\r\nvar perfCascadeSvg =  perfCascade.fromHar(harData, options)\r\ndocument.appendChild(perfCascadeSvg)\r\n```\r\n\r\nYou can find the compiled (and minified) JS in the [releases tab](https://github.com/micmro/PerfCascade/releases). For the basic version without zHAR support you need [`perf-cascade.min.js`](https://github.com/micmro/PerfCascade/blob/release/perf-cascade.min.js) and some basic CSS styles [`perf-cascade.css`](https://github.com/micmro/PerfCascade/blob/release/perf-cascade.css).\r\n\r\n### Use via npm\r\nYou can install PerfCascade via NPM as well:\r\n```\r\nnpm install perf-cascade\r\n```\r\n\r\nDirectories:\r\n- `node_modules/perf-cascade/dist/`: bundled UMD modules and the css file in the directory.\r\n- `node_modules/perf-cascade/lib`: contains the full project exported as separate ES6 modules\r\n- `node_modules/perf-cascade/types`: Typescript typings\r\n\r\n## Options\r\nsee [options.d.ts](https://github.com/micmro/PerfCascade/blob/master/src/ts/typing/options.ts) for source\r\n\r\n| Option      | Type | Default Value | Description |\r\n| ----------- | ---- | ------- | ----------- |\r\n| `rowHeight` | `number` | `23` | Height of every request bar block plus spacer pixel (in px) default: 23 |\r\n| `showAlignmentHelpers` | `boolean` | `true` | Show vertical lines to easier spot potential dependencies/blocking between requests |\r\n| `showMimeTypeIcon` | `boolean` | `true` |  Show mime type icon on the left |\r\n| `showIndicatorIcons` | `boolean` | `true` |  Show warning icons for potential issues on the left |\r\n| `leftColumnWidth` | `number` | `25` | Relative width of the info column on the left (in percent) |\r\n| `pageSelector` | `HTMLSelectElement` | `undefined` | DOM `<select>` element to use to select a run if the HAR contains multiple runs. |\r\n| `selectedPage` | `number` | `0` | Zero-based index of the page to initially render.<br/>If `selectedPage` is larger than the number of pages the last page will be selected. |\r\n| `legendHolder` | `HTMLElement`<br/>(DOM element) | `undefined` <br/>(not shown) | If set a legend explaining the waterfall colours is rendered in the `legendHolder` DOM element. |\r\n| `showUserTiming` | `boolean` | `false` | If enabled the [UserTiming](https://developer.mozilla.org/en-US/docs/Web/API/User_Timing_API) data in WebPageTest's format `_userTime.*` get parsed and rendered as well.<br/>Matching `_userTime.startTimer-*` and `_userTime.endTimer-*` entries get combined into one block. |\r\n| `showUserTimingEndMarker` | `boolean` | `false` (requires `showUserTiming` to be `true`) | If `showUserTiming` is enabled all `_userTime.endTimer-*` marker are hidden by default, only the UserTiming's start and duration is shown. This option also adds an `_userTime.endTimer-*` marker.\r\n\r\n## `*.zhar` - zipped HAR files\r\nBy loading `/perf-cascade-file-reader.min.js` as in [this example](https://github.com/micmro/PerfCascade/blob/master/src/index.html#L78-L86) you can use `perfCascadeFileReader.readFile` to read a zip file and convert it to a JSON HAR object.\r\n\r\n```javascript\r\nperfCascadeFileReader.readFile(fileFromTheFileInput, fileName, function(error, data){\r\n  if(error){\r\n    // handle error\r\n    console.error(error)\r\n  }else{\r\n    // handle success\r\n    renderPerfCascadeChart(data)\r\n  }\r\n})\r\n```\r\n\r\nOptionally `perfCascadeFileReader.readFile` also takes a callback (`(progress:number) => void`) as a forth argument\r\nthat gets called whenever a new unzip progress status is available.\r\n\r\n## Rendering other formats (than HAR)\r\nPerfCascade is composed of a parser [`src/ts/transformers/har.ts`](https://github.com/micmro/PerfCascade/blob/master/src/ts/transformers/har.ts) that parsed HAR into PerfCascade's agnostic [`WaterfallDocs`](https://github.com/micmro/PerfCascade/blob/master/src/ts/typing/waterfall.ts) format and the renderer (see `PerfCascade()` in [`src/ts/main.ts`](https://github.com/micmro/PerfCascade/blob/master/src/ts/main.ts) that creates the chart SVG.\r\n\r\nIf you want to render another format, you could fork the repo and create a new parser in [`src/ts/transformers/`](https://github.com/micmro/PerfCascade/blob/master/src/ts/transformers/) and implement a new `fromMyNewFormat` function similar to `fromHar()`in [`src/ts/main.ts`](https://github.com/micmro/PerfCascade/blob/master/src/ts/main.ts) that takes your format, calls its parser and then calls the main `PerfCascade()` function with it and returns it.\r\n\r\nIt would also be possible to separate the renderer into a separate package, if there is enough interest to justify the effort (create an issue and we can discuss it).\r\n\r\n## Dev\r\n- Start live-reload server and Typescript compiler with watch: `npm run watch`\r\n- Create uglified version: `npm run build`\r\n\r\n_See `package.json` for other useful tasks like linting, release etc._\r\n\r\n## Specs and resources\r\n\r\n- [W3C HAR Spec](https://w3c.github.io/web-performance/specs/HAR/Overview.html)\r\n- [HAR 1.2 Spec](http://www.softwareishard.com/blog/har-12-spec)\r\n- [HAR Resources](https://github.com/ahmadnassri/har-resources)\r\n\r\n[travis-image]: https://img.shields.io/travis/micmro/PerfCascade.svg?style=flat-square\r\n[travis-url]: https://travis-ci.org/micmro/PerfCascade\r\n","readmeFilename":"README.md"}