{"_id":"15lyzers","_rev":"10-85e72fccf5b0eca3434e7d021bad8f9e","name":"15lyzers","dist-tags":{"latest":"2.1.6"},"versions":{"1.0.0":{"name":"15lyzers","version":"1.0.0","keywords":["angular","angular15","http","testing","cli","http-testing","angular-http"],"license":"MIT","_id":"15lyzers@1.0.0","maintainers":[{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"}],"bin":{"15lyzer":"bin/15lyzer.js","15lyzer-generate":"bin/15lyzer-generate.js"},"dist":{"shasum":"df0a98859fe54a46f8345391bd61fdf5f0676f7f","tarball":"https://registry.npmjs.org/15lyzers/-/15lyzers-1.0.0.tgz","fileCount":32,"integrity":"sha512-sftau4xTZB4TgE+UprPA4LEobViPrl96uD0a9YP6nM6KxBVYPliltYdzcCwHSH3DIVzvDkuG9bYZIszRt9Q0ig==","signatures":[{"sig":"MEUCIC8bp2mn6aZRMYlrF/qhPmjWFOXpYOZe8k8pf1VBx/4DAiEAiND/Q+pLFZklawGT67Jonsfz31NGLiCtKxysXDqsvV8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":230290},"jest":{"testMatch":["**/tests/**/*.test.js"],"testEnvironment":"node"},"main":"src/index.js","engines":{"node":">=16.0.0"},"gitHead":"7a060741ced633cbb23984c0e52bff083fc29293","scripts":{"test":"jest --testEnvironment node","test:coverage":"jest --testEnvironment node --coverage"},"_npmUser":{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"},"_npmVersion":"11.11.0","description":"CLI tool to automatically discover and test all HTTP calls in an Angular 15 application","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.13.5","chalk":"^4.1.2","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/15lyzers_1.0.0_1772643192219_0.46793968325620594","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"15lyzers","version":"1.1.0","keywords":["angular","angular15","http","testing","cli","http-testing","angular-http"],"license":"MIT","_id":"15lyzers@1.1.0","maintainers":[{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"}],"bin":{"15lyzer":"bin/15lyzer.js","15lyzer-generate":"bin/15lyzer-generate.js"},"dist":{"shasum":"eb3825945da745cfcc7f23dccee79f2301f06144","tarball":"https://registry.npmjs.org/15lyzers/-/15lyzers-1.1.0.tgz","fileCount":32,"integrity":"sha512-LkLjZ7yl2IlRe0yItzaD3x7+QJwkF8ffb4WxvH0LLa3mNMo+58bde/kFLAIiysBiha7eoc5vh4P4qsd69Y5lNw==","signatures":[{"sig":"MEQCIDqq27GRMZ3v7wk/88JmUPr+ez8dlNnEzutg1KymFDJ5AiApOocOhi3wXB5ZmPiMDewpXj3hfTXqxVhlYBbdFx7sXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191690},"jest":{"testMatch":["**/tests/**/*.test.js"],"testEnvironment":"node"},"main":"src/index.js","engines":{"node":">=16.0.0"},"gitHead":"7a060741ced633cbb23984c0e52bff083fc29293","scripts":{"test":"jest --testEnvironment node","test:coverage":"jest --testEnvironment node --coverage"},"_npmUser":{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"},"_npmVersion":"11.11.0","description":"CLI tool to automatically discover and test all HTTP calls in an Angular 15 application","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.13.5","chalk":"^4.1.2","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/15lyzers_1.1.0_1772645751499_0.5180011779501854","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"15lyzers","version":"2.0.0","keywords":["angular","angular15","http","testing","dashboard","gui","http-analysis","angular-http"],"license":"MIT","_id":"15lyzers@2.0.0","maintainers":[{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"}],"bin":{"15lyzer":"bin/15lyzer.js","15lyzer-generate":"bin/15lyzer-generate.js","15lyzer-dashboard":"src/server.js"},"dist":{"shasum":"7ffcdb0322467708b664e3c7955d505d4ed4632d","tarball":"https://registry.npmjs.org/15lyzers/-/15lyzers-2.0.0.tgz","fileCount":36,"integrity":"sha512-lvcLENtGp/HaQ/30q6+7Tl6jEb9ZbX/4qSDigIL+dHCpLcB3Z3gbLmBNburHYSfN0yi38xpRtz/Ikgmfzfdw9g==","signatures":[{"sig":"MEUCIEzc2hoRAhwXrE9OFJq+XfwiuFwlCndy63mVTTr6aMOSAiEAx/vZVdry5VWk2UgQKMDFSwK9QcGaEbTnZl6ewQ7rKpk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214209},"jest":{"testMatch":["**/tests/**/*.test.js"],"testEnvironment":"node"},"main":"src/server.js","engines":{"node":">=16.0.0"},"gitHead":"7a060741ced633cbb23984c0e52bff083fc29293","scripts":{"test":"jest --testEnvironment node","start":"node src/server.js","test:coverage":"jest --testEnvironment node --coverage"},"_npmUser":{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"},"_npmVersion":"11.11.0","description":"GUI Dashboard to analyze and visualize all HTTP calls in Angular 15 applications","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.13.5","chalk":"^4.1.2","multer":"^1.4.5-lts.1","express":"^4.22.1","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/15lyzers_2.0.0_1772648269958_0.7686702025097134","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"15lyzers","version":"2.1.0","keywords":["angular","angular15","http","testing","dashboard","gui","http-analysis","angular-http"],"license":"MIT","_id":"15lyzers@2.1.0","maintainers":[{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"}],"bin":{"15lyzer":"bin/15lyzer.js","15lyzer-generate":"bin/15lyzer-generate.js","15lyzer-dashboard":"src/server.js"},"dist":{"shasum":"41d175d13c8bf7f4b3ed8d87dac41df1aaaf950a","tarball":"https://registry.npmjs.org/15lyzers/-/15lyzers-2.1.0.tgz","fileCount":36,"integrity":"sha512-+u73Aip7YvbrId7RJw3n8uz16eqQeWXm+ntiuQjSM/CCe1Ft2LDAo/O4htHkwUtbrjvnvwv3z8p21GXxcc68Rg==","signatures":[{"sig":"MEUCIEW8HrVpA3nzg26s/HOG2IVsO2NeoEQ/ELuiVmdcDtSiAiEA4uD767PQxoyb7fdUJexTz+ej+x3EvS32q3VJY4riFiw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":228239},"jest":{"testMatch":["**/tests/**/*.test.js"],"testEnvironment":"node"},"main":"src/server.js","engines":{"node":">=16.0.0"},"gitHead":"7a060741ced633cbb23984c0e52bff083fc29293","scripts":{"test":"jest --testEnvironment node","start":"node src/server.js","test:coverage":"jest --testEnvironment node --coverage"},"_npmUser":{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"},"_npmVersion":"11.11.0","description":"GUI Dashboard to analyze and visualize all HTTP calls in Angular 15 applications","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.13.5","chalk":"^4.1.2","multer":"^1.4.5-lts.1","express":"^4.22.1","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/15lyzers_2.1.0_1772649499411_0.7430302251221077","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"15lyzers","version":"2.1.1","keywords":["angular","angular15","http","testing","dashboard","gui","http-analysis","angular-http"],"license":"MIT","_id":"15lyzers@2.1.1","maintainers":[{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"}],"bin":{"15lyzer":"bin/15lyzer.js","15lyzer-generate":"bin/15lyzer-generate.js","15lyzer-dashboard":"src/server.js"},"dist":{"shasum":"30865ff6ac948618613a4b16aa161b7edb80696d","tarball":"https://registry.npmjs.org/15lyzers/-/15lyzers-2.1.1.tgz","fileCount":36,"integrity":"sha512-r3gyTBvPpEzVPUUSZgiZ0aLKRDJSIGflqHYG9C1uC5Y9hqBcxzGI2Y/B9i+aEj0zORfMihZ26lCwiM8I+OPDKw==","signatures":[{"sig":"MEUCIQCUBXvMsrBb7HOURIBiVlTO95Oh3Ab6o+8/S4dyhQ/hGQIgHAmwgYenHjnkV7JzHlfTEXXu7O5LN8SPQL2PYZIybfk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":229061},"jest":{"testMatch":["**/tests/**/*.test.js"],"testEnvironment":"node"},"main":"src/server.js","engines":{"node":">=16.0.0"},"gitHead":"7a060741ced633cbb23984c0e52bff083fc29293","scripts":{"test":"jest --testEnvironment node","start":"node src/server.js","test:coverage":"jest --testEnvironment node --coverage"},"_npmUser":{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"},"_npmVersion":"11.11.0","description":"GUI Dashboard to analyze and visualize all HTTP calls in Angular 15 applications","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.13.5","chalk":"^4.1.2","multer":"^1.4.5-lts.1","express":"^4.22.1","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/15lyzers_2.1.1_1772649752447_0.001337957789867561","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"15lyzers","version":"2.1.2","keywords":["angular","angular15","http","testing","dashboard","gui","http-analysis","angular-http"],"license":"MIT","_id":"15lyzers@2.1.2","maintainers":[{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"}],"bin":{"15lyzer":"bin/15lyzer.js","15lyzer-generate":"bin/15lyzer-generate.js","15lyzer-dashboard":"src/server.js"},"dist":{"shasum":"6114a9c3a5e56f3cb633d897f7cabe67d0e573ef","tarball":"https://registry.npmjs.org/15lyzers/-/15lyzers-2.1.2.tgz","fileCount":36,"integrity":"sha512-yISDB9hZA+SaVjGA6ProP8gNMNlt8xs8AXCKJzqsLDhuJSbeUBjF0SWb93BdmWHNHsoDUzXElO1zzyWgKs3z3Q==","signatures":[{"sig":"MEUCIQD2S2ZM75FsW8zxEdfswZVjNUDbRxZCsh1o9DeIHaYYqgIgVutUvXvVyJXWz7lHSrgVJjeAgeayTTIikHFSGqYqSk8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":242913},"jest":{"testMatch":["**/tests/**/*.test.js"],"testEnvironment":"node"},"main":"src/server.js","engines":{"node":">=16.0.0"},"gitHead":"7a060741ced633cbb23984c0e52bff083fc29293","scripts":{"test":"jest --testEnvironment node","start":"node src/server.js","test:coverage":"jest --testEnvironment node --coverage"},"_npmUser":{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"},"_npmVersion":"11.11.0","description":"GUI Dashboard to analyze and visualize all HTTP calls in Angular 15 applications","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.13.5","chalk":"^4.1.2","multer":"^1.4.5-lts.1","express":"^4.22.1","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/15lyzers_2.1.2_1772650819144_0.24022594448124845","host":"s3://npm-registry-packages-npm-production"}},"2.1.3":{"name":"15lyzers","version":"2.1.3","keywords":["angular","angular15","http","testing","dashboard","gui","http-analysis","angular-http"],"license":"MIT","_id":"15lyzers@2.1.3","maintainers":[{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"}],"bin":{"15lyzer":"bin/15lyzer.js","15lyzer-generate":"bin/15lyzer-generate.js","15lyzer-dashboard":"src/server.js"},"dist":{"shasum":"575b5bf78fa085af090d372557567c67fdc0c0d9","tarball":"https://registry.npmjs.org/15lyzers/-/15lyzers-2.1.3.tgz","fileCount":36,"integrity":"sha512-izdTu+AOCZZqqBsU17jvBUfCivttezFh14mjQl+8Nd6vtYV1skwFJdSszBd0H6fXtviGTfVKYEwEro7pw+dGHg==","signatures":[{"sig":"MEQCIDZsGwkpQYyPzVB55U85w0LQ4kHsrjU8vA/Upy6ZFjULAiADsgQq10c7BeHhKwGlaP4yswVci3Y2hdWfFRiMSaRYFQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":242914},"jest":{"testMatch":["**/tests/**/*.test.js"],"testEnvironment":"node"},"main":"src/server.js","engines":{"node":">=16.0.0"},"gitHead":"7a060741ced633cbb23984c0e52bff083fc29293","scripts":{"test":"jest --testEnvironment node","start":"node src/server.js","test:coverage":"jest --testEnvironment node --coverage"},"_npmUser":{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"},"_npmVersion":"11.11.0","description":"GUI Dashboard to analyze and visualize all HTTP calls in Angular 15 applications","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.13.5","chalk":"^4.1.2","multer":"^1.4.5-lts.1","express":"^4.22.1","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/15lyzers_2.1.3_1772651815799_0.14333165455110453","host":"s3://npm-registry-packages-npm-production"}},"2.1.4":{"name":"15lyzers","version":"2.1.4","keywords":["angular","angular15","http","testing","dashboard","gui","http-analysis","angular-http"],"license":"MIT","_id":"15lyzers@2.1.4","maintainers":[{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"}],"bin":{"15lyzer":"bin/15lyzer.js","15lyzer-generate":"bin/15lyzer-generate.js","15lyzer-dashboard":"src/server.js"},"dist":{"shasum":"0626f151dbefbb8ef4b440c18f4cb6fd52bcccd6","tarball":"https://registry.npmjs.org/15lyzers/-/15lyzers-2.1.4.tgz","fileCount":36,"integrity":"sha512-MedcKH4kDjl7288PpKV0KQ/0mR4u9CLV02Z6uF+qLkquMcbrvxg/rduuYH9tYrRuxbZejL17Xtx1yIAiHEftRQ==","signatures":[{"sig":"MEUCIBIQ1ZwLjBCUfRhebxKlPeytt8Pr2NLW1AJAYYf5RcRSAiEA5u0qE0tHcrI/2q9QLDSYFvR144Q632VwZiTPnpsALeQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":275423},"jest":{"testMatch":["**/tests/**/*.test.js"],"testEnvironment":"node"},"main":"src/server.js","engines":{"node":">=16.0.0"},"gitHead":"7a060741ced633cbb23984c0e52bff083fc29293","scripts":{"test":"jest --testEnvironment node","start":"node src/server.js","test:coverage":"jest --testEnvironment node --coverage"},"_npmUser":{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"},"_npmVersion":"11.11.0","description":"GUI Dashboard to analyze and visualize all HTTP calls in Angular 15 applications","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.13.5","chalk":"^4.1.2","multer":"^1.4.5-lts.1","express":"^4.22.1","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/15lyzers_2.1.4_1772652891981_0.9468931020132687","host":"s3://npm-registry-packages-npm-production"}},"2.1.5":{"name":"15lyzers","version":"2.1.5","keywords":["angular","angular15","http","testing","dashboard","gui","http-analysis","angular-http"],"license":"MIT","_id":"15lyzers@2.1.5","maintainers":[{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"}],"bin":{"15lyzer":"bin/15lyzer.js","15lyzer-generate":"bin/15lyzer-generate.js","15lyzer-dashboard":"src/server.js"},"dist":{"shasum":"1fd5284bac7db053c8df518107cffa6963013bd4","tarball":"https://registry.npmjs.org/15lyzers/-/15lyzers-2.1.5.tgz","fileCount":36,"integrity":"sha512-fSjj4GVx0tUcAhVJFD/SjbZRQc/n+f6bbSva/5lGnizSp/pKS12sbdYwef9ZMQeXfRbiZbFyHRPPStAIgbZRbA==","signatures":[{"sig":"MEUCIQDA71uarg0jEEWhcemSM+fr7PPwzuTnpeDK1ZCyTh8glAIgHt/VMi8lDhUtRP+5+slzb3thBYLS6bxSeWZOR695lgE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":272928},"jest":{"testMatch":["**/tests/**/*.test.js"],"testEnvironment":"node"},"main":"src/server.js","engines":{"node":">=16.0.0"},"gitHead":"7a060741ced633cbb23984c0e52bff083fc29293","scripts":{"test":"jest --testEnvironment node","start":"node src/server.js","test:coverage":"jest --testEnvironment node --coverage"},"_npmUser":{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"},"_npmVersion":"11.11.0","description":"GUI Dashboard to analyze and visualize all HTTP calls in Angular 15 applications","directories":{},"_nodeVersion":"22.17.0","dependencies":{"axios":"^1.13.5","chalk":"^4.1.2","multer":"^1.4.5-lts.1","express":"^4.22.1","commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/15lyzers_2.1.5_1772654248090_0.056798840302267006","host":"s3://npm-registry-packages-npm-production"}},"2.1.6":{"name":"15lyzers","version":"2.1.6","description":"GUI Dashboard to analyze and visualize all HTTP calls in Angular 15 applications","keywords":["angular","angular15","http","testing","dashboard","gui","http-analysis","angular-http"],"license":"MIT","main":"src/server.js","bin":{"15lyzer":"bin/15lyzer.js","15lyzer-generate":"bin/15lyzer-generate.js","15lyzer-dashboard":"src/server.js"},"engines":{"node":">=16.0.0"},"scripts":{"start":"node src/server.js","test":"jest --testEnvironment node","test:coverage":"jest --testEnvironment node --coverage"},"dependencies":{"axios":"^1.13.5","chalk":"^4.1.2","commander":"^12.1.0","express":"^4.22.1","multer":"^1.4.5-lts.1"},"devDependencies":{"jest":"^29.7.0"},"jest":{"testMatch":["**/tests/**/*.test.js"],"testEnvironment":"node"},"gitHead":"7a060741ced633cbb23984c0e52bff083fc29293","_id":"15lyzers@2.1.6","_nodeVersion":"22.17.0","_npmVersion":"11.11.0","dist":{"integrity":"sha512-X2/ou9iJK0fz+9EEcRj8FLNWixAPbdVO9GhXiXjwRQOc+8dI+6xjtuAVGs1e4LAF6TaB4cLxv2BN6P+64EsdCw==","shasum":"6d6fc9ce96c50a4f5b5ce72fb5ce59f22376edaf","tarball":"https://registry.npmjs.org/15lyzers/-/15lyzers-2.1.6.tgz","fileCount":36,"unpackedSize":273794,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICOyOmFOuVRKMU1m7LAGDMAC9FZH/rTR7q0ms59f1h35AiADJzUDEUbMwel8UZgy2m8F2Ecl2YTsPgzT2s+8F5MuTA=="}]},"_npmUser":{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"},"directories":{},"maintainers":[{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/15lyzers_2.1.6_1772655078405_0.5881924738417514"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-04T16:53:12.218Z","modified":"2026-03-04T20:11:18.704Z","1.0.0":"2026-03-04T16:53:12.369Z","1.1.0":"2026-03-04T17:35:51.637Z","2.0.0":"2026-03-04T18:17:50.102Z","2.1.0":"2026-03-04T18:38:19.573Z","2.1.1":"2026-03-04T18:42:32.608Z","2.1.2":"2026-03-04T19:00:19.321Z","2.1.3":"2026-03-04T19:16:55.979Z","2.1.4":"2026-03-04T19:34:52.136Z","2.1.5":"2026-03-04T19:57:28.242Z","2.1.6":"2026-03-04T20:11:18.571Z"},"license":"MIT","keywords":["angular","angular15","http","testing","dashboard","gui","http-analysis","angular-http"],"description":"GUI Dashboard to analyze and visualize all HTTP calls in Angular 15 applications","maintainers":[{"name":"llkretzjnk","email":"llkretzjnk@gmail.com"}],"readme":"# 15Lyzer - Angular HTTP Call Analyzer Dashboard\r\n\r\n<div align=\"center\">\r\n\r\n![15Lyzer](https://img.shields.io/badge/15Lyzer-v2.0.0-blue)\r\n![License](https://img.shields.io/badge/license-MIT-green)\r\n![Node](https://img.shields.io/badge/node-%3E%3D16.0.0-brightgreen)\r\n\r\n**A beautiful GUI dashboard to analyze and visualize all HTTP calls in your Angular 15 applications**\r\n\r\n</div>\r\n\r\n---\r\n\r\n## 🎯 What is 15Lyzer?\r\n\r\n15Lyzer is a powerful web-based dashboard that analyzes your Angular 15 application and provides comprehensive insights into all HTTP calls. Simply upload your Angular project directory, and get instant visualization of:\r\n\r\n- 📊 **HTTP Call Statistics** - Total calls, methods distribution, and more\r\n- 🔍 **Component/Service Analysis** - See which components and services make HTTP calls\r\n- 📡 **HTTP Method Breakdown** - Visual breakdown of GET, POST, PUT, DELETE, PATCH\r\n- 🎨 **Beautiful Visualizations** - Interactive charts and tables\r\n- ⚡ **Real-time Analysis** - Upload and analyze in seconds\r\n\r\n## ✨ Features\r\n\r\n### 🖥️ Web Dashboard\r\n- **Modern UI** - Clean, responsive design built with vanilla HTML/CSS/JS\r\n- **Drag & Drop** - Easy directory upload with progress tracking\r\n- **Interactive Charts** - Visual HTTP method distribution\r\n- **Search & Filter** - Find specific components, services, or methods\r\n- **Detailed Tables** - View all HTTP calls with file locations\r\n\r\n### 🔍 Analysis Capabilities\r\n- **Automatic Detection** - Finds all HTTP calls in TypeScript files\r\n- **Method Recognition** - Detects GET, POST, PUT, DELETE, PATCH\r\n- **Component Mapping** - Links HTTP calls to specific components/services\r\n- **File Tracking** - Shows exact file locations and line numbers\r\n- **Async Detection** - Identifies async/await patterns\r\n\r\n## 📦 Installation\r\n\r\n### Prerequisites\r\n- Node.js >= 16.0.0\r\n- npm or yarn\r\n\r\n### Install from npm\r\n```bash\r\nnpm install -g 15lyzers\r\n```\r\n\r\n### Or install from source\r\n```bash\r\ngit clone https://github.com/lpaszkiewicz/15Lyzer.git\r\ncd 15Lyzer\r\nnpm install\r\n```\r\n\r\n## 🚀 Quick Start\r\n\r\n### Start the Dashboard\r\n```bash\r\nnpm start\r\n```\r\n\r\nOr if installed globally:\r\n```bash\r\n15lyzer-dashboard\r\n```\r\n\r\nThis will start the server at `http://localhost:3000`\r\n\r\n### Using the Dashboard\r\n\r\n1. **Open your browser** and navigate to `http://localhost:3000`\r\n2. **Click \"Choose Directory\"** and select your Angular 15 project root\r\n3. **Wait for analysis** - The dashboard will process all TypeScript files\r\n4. **Explore results** - View statistics, charts, and detailed HTTP call information\r\n\r\n## 📊 Dashboard Features\r\n\r\n### Statistics Cards\r\nView key metrics at a glance:\r\n- Total TypeScript files analyzed\r\n- Total HTTP calls found\r\n- Number of components with HTTP calls\r\n- Number of services with HTTP calls\r\n\r\n### HTTP Method Distribution Chart\r\nVisual bar chart showing:\r\n- GET requests (green)\r\n- POST requests (blue)\r\n- PUT requests (orange)\r\n- PATCH requests (purple)\r\n- DELETE requests (red)\r\n\r\n### Component/Service Browser\r\n- **Search** - Find classes by name\r\n- **Filter** - Show only components or services\r\n- **Expandable** - Click to see all methods with HTTP calls\r\n- **Method Tags** - Color-coded HTTP method indicators\r\n\r\n### Detailed HTTP Calls Table\r\nComprehensive table with:\r\n- Class name\r\n- Method name\r\n- HTTP methods used\r\n- File path\r\n- Component/Service type\r\n- Async indicator\r\n\r\n## 🛠️ Configuration\r\n\r\n### Change Port\r\nSet the `PORT` environment variable:\r\n```bash\r\nPORT=8080 npm start\r\n```\r\n\r\n### Custom Upload Limit\r\nEdit `src/server.js` to change the file size limit:\r\n```javascript\r\nconst upload = multer({\r\n  dest: 'uploads/',\r\n  limits: { fileSize: 200 * 1024 * 1024 }, // 200MB\r\n});\r\n```\r\n\r\n## 📁 Project Structure\r\n\r\n```\r\n15Lyzer/\r\n├── src/\r\n│   ├── server.js          # Express server and API\r\n│   ├── scanner.js         # File system scanner\r\n│   ├── parser.js          # TypeScript parser\r\n│   └── functionAnalyzer.js # HTTP call analyzer\r\n├── public/\r\n│   ├── index.html         # Dashboard UI\r\n│   ├── styles.css         # Styling\r\n│   └── app.js             # Frontend logic\r\n├── uploads/               # Temporary upload directory\r\n└── package.json\r\n```\r\n\r\n## What it detects\r\n\r\n15Lyzer scans every non-spec TypeScript file for Angular `HttpClient` usage including:\r\n\r\n| Pattern | Detected as |\r\n|---|---|\r\n| `this.http.get('/api/resource')` | `GET` method |\r\n| `this.http.post('/api/resource', data)` | `POST` method |\r\n| `` this.http.get(`/api/resource/${id}`) `` | `GET` with template |\r\n| `this.http.put(url, data)` | `PUT` method |\r\n| `this.http.delete(url)` | `DELETE` method |\r\n| `this.http.patch(url, data)` | `PATCH` method |\r\n\r\n## Programmatic API\r\n\r\nYou can also use 15Lyzer programmatically:\r\n\r\n```js\r\nconst { scanFiles } = require('15lyzers');\r\nconst { analyzeMultipleFiles, getStatistics } = require('15lyzers/src/functionAnalyzer');\r\n\r\nconst files = scanFiles('./my-angular-app');\r\nconst functions = analyzeMultipleFiles(files);\r\nconst stats = getStatistics(functions);\r\n\r\nconsole.log(`Found ${stats.withHttpCalls} functions with HTTP calls`);\r\n```\r\n\r\n### Detailed Testing with Click Simulation\r\n\r\n```js\r\nconst { \r\n  scanFiles, \r\n  parseFiles, \r\n  testCallsDetailed, \r\n  reportDetailedResult,\r\n  createClickContext \r\n} = require('15lyzer');\r\n\r\nconst files = scanFiles('./my-angular-app');\r\nconst calls = parseFiles(files);\r\n\r\n// Test with comprehensive data capture\r\nconst results = await testCallsDetailed(calls, 'http://localhost:4200', {\r\n  timeout: 10000,\r\n  headers: { Authorization: 'Bearer token' },\r\n  maxBodySize: 1048576, // 1MB\r\n  detailed: true,\r\n  clickAction: 'User Navigation',\r\n  onResult: (r) => {\r\n    console.log('\\n📊 Detailed Result:');\r\n    console.log(`   Completed: ${r.completed}`);\r\n    console.log(`   Timed Out: ${r.timedOut}`);\r\n    console.log(`   Status: ${r.status}`);\r\n    console.log(`   Duration: ${r.duration}ms`);\r\n    console.log(`   Response Size: ${r.responseData?.size || 0} bytes`);\r\n  },\r\n});\r\n\r\n// Check completion status\r\nconst completed = results.filter((r) => r.completed);\r\nconst timedOut = results.filter((r) => r.timedOut);\r\nconsole.log(`\\nCompleted: ${completed.length}/${results.length}`);\r\nconsole.log(`Timed Out: ${timedOut.length}/${results.length}`);\r\n```\r\n\r\n## Exit codes\r\n\r\n| Code | Meaning |\r\n|---|---|\r\n| `0` | All tested endpoints returned < 500 status |\r\n| `1` | One or more endpoints returned a 5xx or network error |\r\n\r\n## Custom Tool Generation\r\n\r\n15Lyzer can analyze your entire Angular 15 application and generate standalone HTTP endpoint tests with zero external dependencies.\r\n\r\n### Generate Custom Tools\r\n\r\n```bash\r\n15lyzer-generate ./my-app --tool e2e --output ./generated\r\n```\r\n\r\n### Available Tool Type\r\n\r\n#### **Standalone E2E Test Generator** (`e2e`)\r\n\r\nGenerates standalone E2E tests for HTTP endpoints using ONLY Node.js built-in modules (no Cypress, Playwright, or any other framework installation required!):\r\n\r\n```bash\r\n# Generate standalone tests with zero dependencies\r\n15lyzer-generate ./my-app --tool e2e --output ./e2e/generated\r\n```\r\n# Generate Selenium tests\r\n15lyzer-generate ./my-app --tool e2e --framework selenium --output ./selenium-tests\r\n```\r\n\r\n**🎉 NEW: Zero-dependency standalone mode (default)!** No need for Cypress, Playwright, or Selenium! Tests run using 15Lyzer's built-in test runner.\r\n\r\n**Important**: When using Cypress, Playwright, or Selenium, you do **NOT** need them installed to generate the test files. The tool only creates the test code templates. You'll only need the chosen framework when you want to actually run those tests.\r\n\r\n**Features:**\r\n- Creates E2E tests for all components\r\n- **Standalone framework (default)**: Run tests immediately with ZERO dependencies!\r\n- Uses ONLY Node.js built-in modules (`http`, `https`, `url`) - no external packages\r\n- Or choose from: Cypress, Playwright, Selenium\r\n- Generates framework-specific helper functions\r\n- Auto-intercepts API calls for testing\r\n- Includes TypeScript type declarations\r\n- Generates README with setup instructions\r\n\r\n**Example Standalone Output (Default):**\r\n```javascript\r\nconst { describe, it, beforeEach, expect, httpRequest } = require('./runner');\r\n\r\ndescribe('MyComponent E2E', () => {\r\n  let baseUrl;\r\n\r\n  beforeEach(() => {\r\n    baseUrl = 'http://localhost:4200';\r\n  });\r\n\r\n  it('should load component page', async () => {\r\n    const response = await httpRequest({\r\n      method: 'GET',\r\n      url: `${baseUrl}/my-route`,\r\n    });\r\n    expect(response.status).toBe(200);\r\n  });\r\n\r\n  it('should fetch data from API', async () => {\r\n    const response = await httpRequest({\r\n      method: 'GET',\r\n      url: `${baseUrl}/api/data`,\r\n    });\r\n    expect(response.status).toBeGreaterThanOrEqual(200);\r\n    expect(response.status).toBeLessThan(300);\r\n  });\r\n});\r\n```\r\n\r\n**Features:**\r\n- ✅ **Uses ONLY Node.js built-in modules** (`http`, `https`, `url`)\r\n- ✅ **Zero installation required** - no Cypress, Playwright, or Selenium needed\r\n- ✅ **Familiar test API** - describe/it/expect (similar to Jest/Jasmine)\r\n- ✅ **Built-in HTTP testing** - test real API endpoints\r\n- ✅ **Full async/await support**\r\n- ✅ **Comprehensive assertions** - toBe, toEqual, toContain, toBeTruthy, etc.\r\n- ✅ **Smart endpoint detection** - automatically generates tests for services with HTTP calls\r\n\r\n**Run standalone tests:**\r\n```bash\r\n# Run a single test file\r\nnode mycomponent.standalone.js\r\n\r\n## 🔒 Security\r\n\r\n- **Temporary Files** - Uploaded files are automatically deleted after analysis\r\n- **Local Only** - Dashboard runs on localhost by default\r\n- **No Data Storage** - Analysis results are not saved to disk\r\n- **File Validation** - Only TypeScript files are processed\r\n\r\n## 🤝 Contributing\r\n\r\nContributions are welcome! Please feel free to submit a Pull Request.\r\n\r\n1. Fork the repository\r\n2. Create your feature branch (`git checkout -b feature/AmazingFeature`)\r\n3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)\r\n4. Push to the branch (`git push origin feature/AmazingFeature`)\r\n5. Open a Pull Request\r\n\r\n## Development\r\n\r\n```bash\r\n# Install dependencies\r\nnpm install\r\n\r\n# Run tests\r\nnpm test\r\n\r\n# Run tests with coverage\r\nnpm run test:coverage\r\n\r\n# Start development server\r\nnpm start\r\n```\r\n\r\n## 📄 License\r\n\r\nMIT License - see [LICENSE](LICENSE) file for details\r\n\r\n## 🐛 Issues\r\n\r\nFound a bug? Have a feature request? Please open an issue on [GitHub](https://github.com/lpaszkiewicz/15Lyzer/issues)\r\n\r\n## 📝 Changelog\r\n\r\n### v2.0.0 (Current)\r\n- 🎉 **Complete rewrite** as GUI dashboard application\r\n- ✨ Added web-based UI with modern design\r\n- 📊 Added interactive charts and visualizations\r\n- 🔍 Added search and filter capabilities\r\n- ⚡ Improved analysis performance\r\n- 🚀 Real-time directory upload and analysis\r\n\r\n### v1.1.0\r\n- Added standalone test generation\r\n- Improved HTTP call detection\r\n- Bug fixes\r\n\r\n## 🙏 Credits\r\n\r\nCreated by Lisa Paszkiewicz\r\n\r\n---\r\n\r\n<div align=\"center\">\r\n  <strong>Made with ❤️ for the Angular community</strong>\r\n</div>\r\n","readmeFilename":"README.md"}