diff --git a/README.md b/README.md index 919bd61e..c66744c7 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ ReportGenerator supports merging several coverage files into a single report. ## License - ReportGenerator is licensed under the [Apache License, Version 2.0](https://opensource.org/licenses/Apache-2.0) -- You can support the project by becoming a sponsor. Sponsors have exclusive access to [additional features](https://reportgenerator.io/pro). +- You can support the project by buying a [PRO license](https://reportgenerator.io/pro) or by becoming a [GitHub sponsor](https://github.com/sponsors/danielpalme). Sponsors have exclusive access to [additional features](https://reportgenerator.io/pro). ## Getting started *ReportGenerator* is a commandline tool which works with full .NET Framework and .NET Core. @@ -102,6 +102,7 @@ Explanations: Title: Optional title. Tag: Optional tag or build version. License: Optional license for PRO version. Get your license here: https://reportgenerator.io/pro + License can also be supplied via 'REPORTGENERATOR_LICENSE' environment variable. Default values: -reporttypes:Html @@ -147,7 +148,7 @@ All the plural options can also be specified as multiple singular entries, like: classfilter = -Test2 filefilter = +cs filefilter = -vb - riskhotspotassemblyfilter = +Test + riskhotspotassemblyfilter = +Test riskhotspotassemblyfilter = -Test riskhotspotclassfilter = +Test2 riskhotspotclassfilter = -Test2 diff --git a/docs/main-PKRGEOQU.js b/docs/main-PKRGEOQU.js index d2a0c6c0..1eca00f4 100644 --- a/docs/main-PKRGEOQU.js +++ b/docs/main-PKRGEOQU.js @@ -89,4 +89,4 @@ ${n}-${e}:${r}${n}`}formatArguments(e,r){return this.formatArgument(e,r.filter(n dotnet tool install dotnet-reportgenerator-globaltool --tool-path tools --version ${Re.version}\r \r dotnet new tool-manifest\r -dotnet tool install dotnet-reportgenerator-globaltool --version ${Re.version}`)],[new yn(".NET Core","reportgenerator")]),new Ta("Azure DevOps","https://marketplace.visualstudio.com/items?itemName=Palmmedia.reportgenerator",["Azure DevOps"],"Use this package within Azure DevOps",[],[new yn("Azure DevOps","reportgenerator")]),new Na("GitHub Action","https://github.com/marketplace/actions/reportgenerator",["Github Action"],"Use this package within Github Actions",[],[new yn("Github Action","danielpalme/ReportGenerator-GitHub-Action")])],this.selectedEnvironment=this.environments[0],this.selectedPackage=this.packages[0]}selectedEnvironmentChanged(){this.selectedPackage=this.packages.find(n=>n.runtimes.indexOf(this.selectedEnvironment.name)>-1)}severalPackagesAvailable(){return this.packages.filter(n=>n.runtimes.indexOf(this.selectedEnvironment.name)>-1).length>1}getUsage(){let n=this.configuration.getUsage(this.selectedPackage,this.selectedEnvironment.name);return this.lastResult!==n&&(this.lastResult=n,this.usageCopied=!1),n}copy(){try{navigator.clipboard.writeText(this.getUsage()),this.usageCopied=!0}catch(n){console.error("Failed to copy license",n)}}scrollToHistoryDir(){return document.querySelector("#historydir").scrollIntoView(!0),!1}trackByIndex(n,i){return n}};e.\u0275fac=function(i){return new(i||e)},e.\u0275cmp=ce({type:e,selectors:[["app-usage-component"]],standalone:!0,features:[de],decls:276,vars:43,consts:[[1,"container"],[1,"mb-4"],["href","https://github.com/danielpalme/ReportGenerator/wiki/Settings","target","_blank"],[1,"row"],[1,"col-md-7"],["class","form-check",4,"ngFor","ngForOf"],[4,"ngIf"],[1,"alert","alert-info"],["class","mb-3",4,"ngFor","ngForOf","ngForTrackBy"],[1,"input-group","mb-3"],["href","",3,"click"],[1,"fa","fa-plus-circle"],["type","text","name","targetdir","placeholder","The target directory","required","",1,"form-control",3,"ngModelChange","ngModel"],["href","https://danielpalme.github.io/ReportGenerator/resources/SampleReports.zip"],[1,"me-2"],["type","button","class","btn btn-sm me-1 mb-1",3,"ngClass","click",4,"ngFor","ngForOf","ngForTrackBy"],[4,"ngFor","ngForOf","ngForTrackBy"],["class","input-group mb-3",4,"ngFor","ngForOf","ngForTrackBy"],["id","historydir"],["type","text","name","historydir","placeholder","The history directory",1,"form-control",3,"ngModelChange","ngModel","required"],["href","https://github.com/danielpalme/ReportGenerator/wiki/Custom-reports"],["href","https://github.com/danielpalme/ReportGenerator/wiki/Custom-history-storage"],["name","verbosity",1,"form-select",3,"ngModelChange","ngModel"],[3,"value",4,"ngFor","ngForOf","ngForTrackBy"],["type","text","name","title","placeholder","Title",1,"form-control",3,"ngModelChange","ngModel"],["type","text","name","tag","placeholder","Optional tag or build version",1,"form-control",3,"ngModelChange","ngModel"],[3,"routerLink"],["type","text","name","license","placeholder","Optional license for PRO version","rows","4",1,"form-control",3,"ngModelChange","ngModel"],[1,"col-md-5"],[1,"d-md-none","mt-5"],["target","_blank",3,"href"],["class","mt-2",4,"ngFor","ngForOf"],[1,"mt-4"],[1,"text-dark","bg-light","p-2","border"],[1,"btn","btn-outline-dark","mt-2",3,"click"],[1,"d-none","d-md-block","sticky"],[1,"form-check"],[1,"form-check-label"],["type","radio","name","environment",1,"form-check-input",3,"ngModelChange","ngModel","value","checked"],[1,"mb-3"],[4,"ngFor","ngForOf"],["class","form-check",4,"ngIf"],["type","radio","name","package",1,"form-check-input",3,"ngModelChange","ngModel","value"],[3,"ngClass"],["type","text","placeholder","The path of the coverage file","required","",1,"form-control",3,"ngModelChange","name","ngModel"],["class","input-group-text",3,"click",4,"ngIf"],[1,"input-group-text",3,"click"],["href",""],[1,"fa","fa-trash","text-danger"],["type","button",1,"btn","btn-sm","me-1","mb-1",3,"click","ngClass"],["class","form-check mt-1",4,"ngIf"],[1,"form-check","mt-1"],["type","checkbox","name","reporttype",1,"form-check-input",3,"change","checked"],["class","text-danger ms-2",4,"ngIf"],[1,"text-danger","ms-2"],[1,"fa-solid","fa-triangle-exclamation"],[1,"mt-1"],[1,"fa-solid","fa-arrow-up-right-from-square"],[1,"input-group"],["type","text","placeholder","The source directory","required","",1,"form-control",3,"ngModelChange","name","ngModel"],["type","text","placeholder","The path of the plugin","required","",1,"form-control",3,"ngModelChange","name","ngModel"],["type","text","placeholder","The include or exclude filter for assemlies","pattern","^[+-].+$","required","",1,"form-control",3,"ngModelChange","name","ngModel"],["type","text","placeholder","The include or exclude filter for classes","pattern","^[+-].+$","required","",1,"form-control",3,"ngModelChange","name","ngModel"],["type","text","placeholder","The include or exclude filter for files","pattern","^[+-].+$","required","",1,"form-control",3,"ngModelChange","name","ngModel"],[3,"value"],[1,"mt-2"],[1,"fa-solid","fa-check","text-success"],[1,"fa-solid","fa-copy"]],template:function(i,o){i&1&&(u(0,"div",0)(1,"h1",1),c(2,"Usage"),f(),u(3,"p"),c(4,"The more advanced settings are documented in the "),u(5,"a",2),c(6,"wiki"),f(),c(7,"."),f(),u(8,"div",3)(9,"div",4)(10,"form")(11,"h3"),c(12,"Environment"),f(),P(13,oS,8,5,"div",5),p(14,"hr"),P(15,lS,4,1,"ng-container",6),p(16,"hr"),u(17,"h3"),c(18,"Reports"),f(),u(19,"div",7),c(20,"Path to the coverage report(s) that should be parsed."),p(21,"br"),c(22,"Globbing is supported."),f(),P(23,uS,4,7,"div",8),u(24,"div",9)(25,"a",10),A("click",function(){return o.configuration.addReport()}),p(26,"i",11),c(27," Add report"),f()(),p(28,"br"),u(29,"h3"),c(30,"Target directory"),f(),u(31,"div",7),c(32,"The directory where the generated report(s) should be saved."),f(),u(33,"div",9)(34,"input",12),le("ngModelChange",function(a){return ue(o.configuration.targetdir,a)||(o.configuration.targetdir=a),a}),f()(),p(35,"br"),u(36,"h3"),c(37,"Report types"),f(),u(38,"div",7),c(39,"Download "),u(40,"a",13),c(41,"sample reports"),f()(),u(42,"span",14),c(43,"Filter:"),f(),P(44,dS,2,5,"button",15),p(45,"br"),P(46,mS,2,1,"ng-container",16),u(47,"h3"),c(48,"Source directories"),f(),u(49,"div",7),c(50,"Optional directories which contain the corresponding source code."),p(51,"br"),c(52,"The source directories are used if coverage report contains classes without path information."),f(),P(53,gS,6,3,"div",17),u(54,"div",9)(55,"a",10),A("click",function(){return o.configuration.addSourceDirectory()}),p(56,"i",11),c(57," Add source directory"),f()(),p(58,"br"),u(59,"h3",18),c(60,"History directory"),f(),u(61,"div",7),c(62,"Optional directory for storing "),u(63,"b"),c(64,"persistent"),f(),c(65," coverage information. Choose a directory which does not get deleted between builds."),p(66,"br"),c(67,"Required to show the history chart in the HTML reports."),f(),u(68,"div",9)(69,"input",19),le("ngModelChange",function(a){return ue(o.configuration.historydir,a)||(o.configuration.historydir=a),a}),f()(),p(70,"br"),u(71,"h3"),c(72,"Plugins"),f(),u(73,"div",7),c(74,"Optional plugin files for "),u(75,"a",20),c(76,"custom reports"),f(),c(77," or "),u(78,"a",21),c(79,"custom history storage"),f(),c(80,"."),f(),P(81,vS,6,3,"div",17),u(82,"div",9)(83,"a",10),A("click",function(){return o.configuration.addPlugin()}),p(84,"i",11),c(85," Add plugin"),f()(),p(86,"br"),u(87,"h3"),c(88,"Assembly filters"),f(),u(89,"div",7),c(90,"Optional list of "),u(91,"b"),c(92,"assemblies"),f(),c(93," that should be included or excluded in the report. "),p(94,"br"),c(95,"Exclusion filters take precedence over inclusion filters. "),p(96,"br"),c(97,"Wildcards are allowed."),p(98,"br"),u(99,"p"),c(100,"Examples:"),p(101,"br"),u(102,"code"),c(103,"+Included"),f(),p(104,"br"),u(105,"code"),c(106,"-Excluded"),f()()(),P(107,yS,6,3,"div",17),u(108,"div",9)(109,"a",10),A("click",function(){return o.configuration.addAssemblyFilter()}),p(110,"i",11),c(111," Add assembly filter"),f()(),p(112,"br"),u(113,"h3"),c(114,"Class filters"),f(),u(115,"div",7),c(116,"Optional list of "),u(117,"b"),c(118,"classes"),f(),c(119," that should be included or excluded in the report. "),p(120,"br"),c(121,"Exclusion filters take precedence over inclusion filters. "),p(122,"br"),c(123,"Wildcards are allowed."),p(124,"br"),u(125,"p"),c(126,"Examples:"),p(127,"br"),u(128,"code"),c(129,"+Included"),f(),p(130,"br"),u(131,"code"),c(132,"-Excluded"),f()()(),P(133,DS,6,3,"div",17),u(134,"div",9)(135,"a",10),A("click",function(){return o.configuration.addClassFilter()}),p(136,"i",11),c(137," Add class filter"),f()(),p(138,"br"),u(139,"h3"),c(140,"File filters"),f(),u(141,"div",7),c(142,"Optional list of "),u(143,"b"),c(144,"files"),f(),c(145," that should be included or excluded in the report. "),p(146,"br"),c(147,"Exclusion filters take precedence over inclusion filters. "),p(148,"br"),c(149,"Wildcards are allowed."),p(150,"br"),u(151,"p"),c(152,"Examples:"),p(153,"br"),u(154,"code"),c(155,"+Included"),f(),p(156,"br"),u(157,"code"),c(158,"-Excluded"),f()()(),P(159,CS,6,3,"div",17),u(160,"div",9)(161,"a",10),A("click",function(){return o.configuration.addFileFilter()}),p(162,"i",11),c(163," Add file filter"),f()(),p(164,"br"),u(165,"h3"),c(166,"Risk Hotspots: Assembly filters"),f(),u(167,"div",7),c(168,"Optional list of "),u(169,"b"),c(170,"assemblies"),f(),c(171," that should be included or excluded in the risk hotspots. "),p(172,"br"),c(173,"Exclusion filters take precedence over inclusion filters. "),p(174,"br"),c(175,"Wildcards are allowed."),p(176,"br"),u(177,"p"),c(178,"Examples:"),p(179,"br"),u(180,"code"),c(181,"+Included"),f(),p(182,"br"),u(183,"code"),c(184,"-Excluded"),f()()(),P(185,wS,6,3,"div",17),u(186,"div",9)(187,"a",10),A("click",function(){return o.configuration.addRiskHotspotAssemblyFilter()}),p(188,"i",11),c(189," Add assembly filter"),f()(),p(190,"br"),u(191,"h3"),c(192,"Risk Hotspots: Class filters"),f(),u(193,"div",7),c(194,"Optional list of "),u(195,"b"),c(196,"classes"),f(),c(197," that should be included or excluded in the risk hotspots. "),p(198,"br"),c(199,"Exclusion filters take precedence over inclusion filters. "),p(200,"br"),c(201,"Wildcards are allowed."),p(202,"br"),u(203,"p"),c(204,"Examples:"),p(205,"br"),u(206,"code"),c(207,"+Included"),f(),p(208,"br"),u(209,"code"),c(210,"-Excluded"),f()()(),P(211,bS,6,3,"div",17),u(212,"div",9)(213,"a",10),A("click",function(){return o.configuration.addRiskHotspotClassFilter()}),p(214,"i",11),c(215," Add class filter"),f()(),p(216,"br"),u(217,"h3"),c(218,"Verbosity"),f(),u(219,"div",7),c(220,"The verbosity level of the log messages."),f(),u(221,"div",9)(222,"select",22),le("ngModelChange",function(a){return ue(o.configuration.selectedverbosity,a)||(o.configuration.selectedverbosity=a),a}),P(223,ES,2,2,"option",23),f()(),p(224,"br"),u(225,"h3"),c(226,"Title"),f(),u(227,"div",7),c(228,"Optional title."),f(),u(229,"div",9)(230,"input",24),le("ngModelChange",function(a){return ue(o.configuration.title,a)||(o.configuration.title=a),a}),f()(),p(231,"br"),u(232,"h3"),c(233,"Tag"),f(),u(234,"div",7),c(235,"Optional tag or build version."),f(),u(236,"div",9)(237,"input",25),le("ngModelChange",function(a){return ue(o.configuration.tag,a)||(o.configuration.tag=a),a}),f()(),p(238,"br"),u(239,"h3"),c(240,"License"),f(),u(241,"div",7),c(242,"Optional license. Get your license here: "),u(243,"a",26),c(244,"https://reportgenerator.io/pro"),f()(),u(245,"div",9)(246,"textarea",27),le("ngModelChange",function(a){return ue(o.configuration.license,a)||(o.configuration.license=a),a}),f()()()(),u(247,"div",28)(248,"div",29)(249,"h3"),c(250,"Instructions"),f(),c(251," Install "),u(252,"a",30),c(253),f(),P(254,_S,6,2,"div",31),u(255,"h4",32),c(256,"Usage"),f(),u(257,"pre",33),c(258),f(),u(259,"button",34),A("click",function(){return o.copy()}),P(260,IS,2,0)(261,xS,2,0),f()(),u(262,"div",35)(263,"h3"),c(264,"Instructions"),f(),c(265," Install "),u(266,"a",30),c(267),f(),P(268,SS,6,2,"div",31),u(269,"h4",32),c(270,"Usage"),f(),u(271,"pre",33),c(272),f(),u(273,"button",34),A("click",function(){return o.copy()}),P(274,MS,2,0)(275,TS,2,0),f()()()()()),i&2&&(v(13),y("ngForOf",o.environments),v(2),y("ngIf",o.severalPackagesAvailable()),v(8),y("ngForOf",o.configuration.reports)("ngForTrackBy",o.trackByIndex),v(11),ae("ngModel",o.configuration.targetdir),v(10),y("ngForOf",o.configuration.types)("ngForTrackBy",o.trackByIndex),v(2),y("ngForOf",o.configuration.reporttypes)("ngForTrackBy",o.trackByIndex),v(7),y("ngForOf",o.configuration.sourcedirectories)("ngForTrackBy",o.trackByIndex),v(16),ae("ngModel",o.configuration.historydir),y("required",o.configuration.historyDirRequired()),v(12),y("ngForOf",o.configuration.plugins)("ngForTrackBy",o.trackByIndex),v(26),y("ngForOf",o.configuration.assemblyfilters)("ngForTrackBy",o.trackByIndex),v(26),y("ngForOf",o.configuration.classfilters)("ngForTrackBy",o.trackByIndex),v(26),y("ngForOf",o.configuration.filefilters)("ngForTrackBy",o.trackByIndex),v(26),y("ngForOf",o.configuration.riskhotspotassemblyfilters)("ngForTrackBy",o.trackByIndex),v(26),y("ngForOf",o.configuration.riskhotspotclassfilters)("ngForTrackBy",o.trackByIndex),v(11),ae("ngModel",o.configuration.selectedverbosity),v(),y("ngForOf",o.configuration.verbosities)("ngForTrackBy",o.trackByIndex),v(7),ae("ngModel",o.configuration.title),v(7),ae("ngModel",o.configuration.tag),v(6),y("routerLink",B(42,nS)),v(3),ae("ngModel",o.configuration.license),v(6),y("href",o.selectedPackage.url,_r),v(),se(o.selectedPackage.name),v(),y("ngForOf",o.selectedPackage.installOptions),v(4),se(o.getUsage()),v(2),On(o.usageCopied?260:261),v(6),y("href",o.selectedPackage.url,_r),v(),se(o.selectedPackage.name),v(),y("ngForOf",o.selectedPackage.installOptions),v(4),se(o.getUsage()),v(2),On(o.usageCopied?274:275))},dependencies:[vn,Zr,ev,nv,gn,wa,gd,qr,Wr,Bn,yd,Un,jn,Ps,Fs,Sr,Ne],styles:[".sticky[_ngcontent-%COMP%]{position:sticky;top:100px}"]});let t=e;return t})();var Gn=" | ReportGenerator - Code coverage reports",AS=[{path:"",component:av,pathMatch:"full",title:"Home"+Gn,data:{canonical:"/"}},{path:"features",component:ov,title:"Features"+Gn,data:{canonical:"/features"}},{path:"features.html",redirectTo:"/features"},{path:"getstarted",component:sv,title:"Get started"+Gn,data:{canonical:"/getstarted"}},{path:"getstarted.html",redirectTo:"/getstarted"},{path:"usage",component:fv,title:"Usage"+Gn,data:{canonical:"/usage"}},{path:"usage.html",redirectTo:"/usage"},{path:"pro",component:dv,title:"PRO"+Gn,data:{canonical:"/pro"}},{path:"pro.html",redirectTo:"/pro"},{path:"contact",component:rv,title:"Contact"+Gn,data:{canonical:"/contact"}},{path:"contact.html",redirectTo:"/contact"},{path:"404",component:lv,title:"404 - Not found"+Gn},{path:"**",redirectTo:"/404"}],hv=(()=>{let e=class e{};e.\u0275fac=function(i){return new(i||e)},e.\u0275mod=ze({type:e}),e.\u0275inj=Ge({imports:[ud.forRoot(AS,{scrollPositionRestoration:"enabled",scrollOffset:[0,0],anchorScrolling:"enabled"}),ud]});let t=e;return t})();Q.production&&void 0;Om(Rg,{providers:[hc(Fm,hv,vn),Sa,Ma,_a,_m(Im())]}).catch(t=>console.error(t)); +dotnet tool install dotnet-reportgenerator-globaltool --version ${Re.version}`)],[new yn(".NET Core","reportgenerator")]),new Ta("Azure DevOps","https://marketplace.visualstudio.com/items?itemName=Palmmedia.reportgenerator",["Azure DevOps"],"Use this package within Azure DevOps",[],[new yn("Azure DevOps","reportgenerator")]),new Na("GitHub Action","https://github.com/marketplace/actions/reportgenerator",["Github Action"],"Use this package within Github Actions",[],[new yn("Github Action","danielpalme/ReportGenerator-GitHub-Action")])],this.selectedEnvironment=this.environments[0],this.selectedPackage=this.packages[0]}selectedEnvironmentChanged(){this.selectedPackage=this.packages.find(n=>n.runtimes.indexOf(this.selectedEnvironment.name)>-1)}severalPackagesAvailable(){return this.packages.filter(n=>n.runtimes.indexOf(this.selectedEnvironment.name)>-1).length>1}getUsage(){let n=this.configuration.getUsage(this.selectedPackage,this.selectedEnvironment.name);return this.lastResult!==n&&(this.lastResult=n,this.usageCopied=!1),n}copy(){try{navigator.clipboard.writeText(this.getUsage()),this.usageCopied=!0}catch(n){console.error("Failed to copy license",n)}}scrollToHistoryDir(){return document.querySelector("#historydir").scrollIntoView(!0),!1}trackByIndex(n,i){return n}};e.\u0275fac=function(i){return new(i||e)},e.\u0275cmp=ce({type:e,selectors:[["app-usage-component"]],standalone:!0,features:[de],decls:281,vars:43,consts:[[1,"container"],[1,"mb-4"],["href","https://github.com/danielpalme/ReportGenerator/wiki/Settings","target","_blank"],[1,"row"],[1,"col-md-7"],["class","form-check",4,"ngFor","ngForOf"],[4,"ngIf"],[1,"alert","alert-info"],["class","mb-3",4,"ngFor","ngForOf","ngForTrackBy"],[1,"input-group","mb-3"],["href","",3,"click"],[1,"fa","fa-plus-circle"],["type","text","name","targetdir","placeholder","The target directory","required","",1,"form-control",3,"ngModelChange","ngModel"],["href","https://danielpalme.github.io/ReportGenerator/resources/SampleReports.zip"],[1,"me-2"],["type","button","class","btn btn-sm me-1 mb-1",3,"ngClass","click",4,"ngFor","ngForOf","ngForTrackBy"],[4,"ngFor","ngForOf","ngForTrackBy"],["class","input-group mb-3",4,"ngFor","ngForOf","ngForTrackBy"],["id","historydir"],["type","text","name","historydir","placeholder","The history directory",1,"form-control",3,"ngModelChange","ngModel","required"],["href","https://github.com/danielpalme/ReportGenerator/wiki/Custom-reports"],["href","https://github.com/danielpalme/ReportGenerator/wiki/Custom-history-storage"],["name","verbosity",1,"form-select",3,"ngModelChange","ngModel"],[3,"value",4,"ngFor","ngForOf","ngForTrackBy"],["type","text","name","title","placeholder","Title",1,"form-control",3,"ngModelChange","ngModel"],["type","text","name","tag","placeholder","Optional tag or build version",1,"form-control",3,"ngModelChange","ngModel"],[3,"routerLink"],["type","text","name","license","placeholder","Optional license for PRO version","rows","4",1,"form-control",3,"ngModelChange","ngModel"],[1,"col-md-5"],[1,"d-md-none","mt-5"],["target","_blank",3,"href"],["class","mt-2",4,"ngFor","ngForOf"],[1,"mt-4"],[1,"text-dark","bg-light","p-2","border"],[1,"btn","btn-outline-dark","mt-2",3,"click"],[1,"d-none","d-md-block","sticky"],[1,"form-check"],[1,"form-check-label"],["type","radio","name","environment",1,"form-check-input",3,"ngModelChange","ngModel","value","checked"],[1,"mb-3"],[4,"ngFor","ngForOf"],["class","form-check",4,"ngIf"],["type","radio","name","package",1,"form-check-input",3,"ngModelChange","ngModel","value"],[3,"ngClass"],["type","text","placeholder","The path of the coverage file","required","",1,"form-control",3,"ngModelChange","name","ngModel"],["class","input-group-text",3,"click",4,"ngIf"],[1,"input-group-text",3,"click"],["href",""],[1,"fa","fa-trash","text-danger"],["type","button",1,"btn","btn-sm","me-1","mb-1",3,"click","ngClass"],["class","form-check mt-1",4,"ngIf"],[1,"form-check","mt-1"],["type","checkbox","name","reporttype",1,"form-check-input",3,"change","checked"],["class","text-danger ms-2",4,"ngIf"],[1,"text-danger","ms-2"],[1,"fa-solid","fa-triangle-exclamation"],[1,"mt-1"],[1,"fa-solid","fa-arrow-up-right-from-square"],[1,"input-group"],["type","text","placeholder","The source directory","required","",1,"form-control",3,"ngModelChange","name","ngModel"],["type","text","placeholder","The path of the plugin","required","",1,"form-control",3,"ngModelChange","name","ngModel"],["type","text","placeholder","The include or exclude filter for assemlies","pattern","^[+-].+$","required","",1,"form-control",3,"ngModelChange","name","ngModel"],["type","text","placeholder","The include or exclude filter for classes","pattern","^[+-].+$","required","",1,"form-control",3,"ngModelChange","name","ngModel"],["type","text","placeholder","The include or exclude filter for files","pattern","^[+-].+$","required","",1,"form-control",3,"ngModelChange","name","ngModel"],[3,"value"],[1,"mt-2"],[1,"fa-solid","fa-check","text-success"],[1,"fa-solid","fa-copy"]],template:function(i,o){i&1&&(u(0,"div",0)(1,"h1",1),c(2,"Usage"),f(),u(3,"p"),c(4,"The more advanced settings are documented in the "),u(5,"a",2),c(6,"wiki"),f(),c(7,"."),f(),u(8,"div",3)(9,"div",4)(10,"form")(11,"h3"),c(12,"Environment"),f(),P(13,oS,8,5,"div",5),p(14,"hr"),P(15,lS,4,1,"ng-container",6),p(16,"hr"),u(17,"h3"),c(18,"Reports"),f(),u(19,"div",7),c(20,"Path to the coverage report(s) that should be parsed."),p(21,"br"),c(22,"Globbing is supported."),f(),P(23,uS,4,7,"div",8),u(24,"div",9)(25,"a",10),A("click",function(){return o.configuration.addReport()}),p(26,"i",11),c(27," Add report"),f()(),p(28,"br"),u(29,"h3"),c(30,"Target directory"),f(),u(31,"div",7),c(32,"The directory where the generated report(s) should be saved."),f(),u(33,"div",9)(34,"input",12),le("ngModelChange",function(a){return ue(o.configuration.targetdir,a)||(o.configuration.targetdir=a),a}),f()(),p(35,"br"),u(36,"h3"),c(37,"Report types"),f(),u(38,"div",7),c(39,"Download "),u(40,"a",13),c(41,"sample reports"),f()(),u(42,"span",14),c(43,"Filter:"),f(),P(44,dS,2,5,"button",15),p(45,"br"),P(46,mS,2,1,"ng-container",16),u(47,"h3"),c(48,"Source directories"),f(),u(49,"div",7),c(50,"Optional directories which contain the corresponding source code."),p(51,"br"),c(52,"The source directories are used if coverage report contains classes without path information."),f(),P(53,gS,6,3,"div",17),u(54,"div",9)(55,"a",10),A("click",function(){return o.configuration.addSourceDirectory()}),p(56,"i",11),c(57," Add source directory"),f()(),p(58,"br"),u(59,"h3",18),c(60,"History directory"),f(),u(61,"div",7),c(62,"Optional directory for storing "),u(63,"b"),c(64,"persistent"),f(),c(65," coverage information. Choose a directory which does not get deleted between builds."),p(66,"br"),c(67,"Required to show the history chart in the HTML reports."),f(),u(68,"div",9)(69,"input",19),le("ngModelChange",function(a){return ue(o.configuration.historydir,a)||(o.configuration.historydir=a),a}),f()(),p(70,"br"),u(71,"h3"),c(72,"Plugins"),f(),u(73,"div",7),c(74,"Optional plugin files for "),u(75,"a",20),c(76,"custom reports"),f(),c(77," or "),u(78,"a",21),c(79,"custom history storage"),f(),c(80,"."),f(),P(81,vS,6,3,"div",17),u(82,"div",9)(83,"a",10),A("click",function(){return o.configuration.addPlugin()}),p(84,"i",11),c(85," Add plugin"),f()(),p(86,"br"),u(87,"h3"),c(88,"Assembly filters"),f(),u(89,"div",7),c(90,"Optional list of "),u(91,"b"),c(92,"assemblies"),f(),c(93," that should be included or excluded in the report. "),p(94,"br"),c(95,"Exclusion filters take precedence over inclusion filters. "),p(96,"br"),c(97,"Wildcards are allowed."),p(98,"br"),u(99,"p"),c(100,"Examples:"),p(101,"br"),u(102,"code"),c(103,"+Included"),f(),p(104,"br"),u(105,"code"),c(106,"-Excluded"),f()()(),P(107,yS,6,3,"div",17),u(108,"div",9)(109,"a",10),A("click",function(){return o.configuration.addAssemblyFilter()}),p(110,"i",11),c(111," Add assembly filter"),f()(),p(112,"br"),u(113,"h3"),c(114,"Class filters"),f(),u(115,"div",7),c(116,"Optional list of "),u(117,"b"),c(118,"classes"),f(),c(119," that should be included or excluded in the report. "),p(120,"br"),c(121,"Exclusion filters take precedence over inclusion filters. "),p(122,"br"),c(123,"Wildcards are allowed."),p(124,"br"),u(125,"p"),c(126,"Examples:"),p(127,"br"),u(128,"code"),c(129,"+Included"),f(),p(130,"br"),u(131,"code"),c(132,"-Excluded"),f()()(),P(133,DS,6,3,"div",17),u(134,"div",9)(135,"a",10),A("click",function(){return o.configuration.addClassFilter()}),p(136,"i",11),c(137," Add class filter"),f()(),p(138,"br"),u(139,"h3"),c(140,"File filters"),f(),u(141,"div",7),c(142,"Optional list of "),u(143,"b"),c(144,"files"),f(),c(145," that should be included or excluded in the report. "),p(146,"br"),c(147,"Exclusion filters take precedence over inclusion filters. "),p(148,"br"),c(149,"Wildcards are allowed."),p(150,"br"),u(151,"p"),c(152,"Examples:"),p(153,"br"),u(154,"code"),c(155,"+Included"),f(),p(156,"br"),u(157,"code"),c(158,"-Excluded"),f()()(),P(159,CS,6,3,"div",17),u(160,"div",9)(161,"a",10),A("click",function(){return o.configuration.addFileFilter()}),p(162,"i",11),c(163," Add file filter"),f()(),p(164,"br"),u(165,"h3"),c(166,"Risk Hotspots: Assembly filters"),f(),u(167,"div",7),c(168,"Optional list of "),u(169,"b"),c(170,"assemblies"),f(),c(171," that should be included or excluded in the risk hotspots. "),p(172,"br"),c(173,"Exclusion filters take precedence over inclusion filters. "),p(174,"br"),c(175,"Wildcards are allowed."),p(176,"br"),u(177,"p"),c(178,"Examples:"),p(179,"br"),u(180,"code"),c(181,"+Included"),f(),p(182,"br"),u(183,"code"),c(184,"-Excluded"),f()()(),P(185,wS,6,3,"div",17),u(186,"div",9)(187,"a",10),A("click",function(){return o.configuration.addRiskHotspotAssemblyFilter()}),p(188,"i",11),c(189," Add assembly filter"),f()(),p(190,"br"),u(191,"h3"),c(192,"Risk Hotspots: Class filters"),f(),u(193,"div",7),c(194,"Optional list of "),u(195,"b"),c(196,"classes"),f(),c(197," that should be included or excluded in the risk hotspots. "),p(198,"br"),c(199,"Exclusion filters take precedence over inclusion filters. "),p(200,"br"),c(201,"Wildcards are allowed."),p(202,"br"),u(203,"p"),c(204,"Examples:"),p(205,"br"),u(206,"code"),c(207,"+Included"),f(),p(208,"br"),u(209,"code"),c(210,"-Excluded"),f()()(),P(211,bS,6,3,"div",17),u(212,"div",9)(213,"a",10),A("click",function(){return o.configuration.addRiskHotspotClassFilter()}),p(214,"i",11),c(215," Add class filter"),f()(),p(216,"br"),u(217,"h3"),c(218,"Verbosity"),f(),u(219,"div",7),c(220,"The verbosity level of the log messages."),f(),u(221,"div",9)(222,"select",22),le("ngModelChange",function(a){return ue(o.configuration.selectedverbosity,a)||(o.configuration.selectedverbosity=a),a}),P(223,ES,2,2,"option",23),f()(),p(224,"br"),u(225,"h3"),c(226,"Title"),f(),u(227,"div",7),c(228,"Optional title."),f(),u(229,"div",9)(230,"input",24),le("ngModelChange",function(a){return ue(o.configuration.title,a)||(o.configuration.title=a),a}),f()(),p(231,"br"),u(232,"h3"),c(233,"Tag"),f(),u(234,"div",7),c(235,"Optional tag or build version."),f(),u(236,"div",9)(237,"input",25),le("ngModelChange",function(a){return ue(o.configuration.tag,a)||(o.configuration.tag=a),a}),f()(),p(238,"br"),u(239,"h3"),c(240,"License"),f(),u(241,"div",7)(242,"p"),c(243,"Optional license. Get your license here: "),u(244,"a",26),c(245,"https://reportgenerator.io/pro"),f()(),c(246," License can also be supplied via "),u(247,"code"),c(248,"REPORTGENERATOR_LICENSE"),f(),c(249," environment variable. "),f(),u(250,"div",9)(251,"textarea",27),le("ngModelChange",function(a){return ue(o.configuration.license,a)||(o.configuration.license=a),a}),f()()()(),u(252,"div",28)(253,"div",29)(254,"h3"),c(255,"Instructions"),f(),c(256," Install "),u(257,"a",30),c(258),f(),P(259,_S,6,2,"div",31),u(260,"h4",32),c(261,"Usage"),f(),u(262,"pre",33),c(263),f(),u(264,"button",34),A("click",function(){return o.copy()}),P(265,IS,2,0)(266,xS,2,0),f()(),u(267,"div",35)(268,"h3"),c(269,"Instructions"),f(),c(270," Install "),u(271,"a",30),c(272),f(),P(273,SS,6,2,"div",31),u(274,"h4",32),c(275,"Usage"),f(),u(276,"pre",33),c(277),f(),u(278,"button",34),A("click",function(){return o.copy()}),P(279,MS,2,0)(280,TS,2,0),f()()()()()),i&2&&(v(13),y("ngForOf",o.environments),v(2),y("ngIf",o.severalPackagesAvailable()),v(8),y("ngForOf",o.configuration.reports)("ngForTrackBy",o.trackByIndex),v(11),ae("ngModel",o.configuration.targetdir),v(10),y("ngForOf",o.configuration.types)("ngForTrackBy",o.trackByIndex),v(2),y("ngForOf",o.configuration.reporttypes)("ngForTrackBy",o.trackByIndex),v(7),y("ngForOf",o.configuration.sourcedirectories)("ngForTrackBy",o.trackByIndex),v(16),ae("ngModel",o.configuration.historydir),y("required",o.configuration.historyDirRequired()),v(12),y("ngForOf",o.configuration.plugins)("ngForTrackBy",o.trackByIndex),v(26),y("ngForOf",o.configuration.assemblyfilters)("ngForTrackBy",o.trackByIndex),v(26),y("ngForOf",o.configuration.classfilters)("ngForTrackBy",o.trackByIndex),v(26),y("ngForOf",o.configuration.filefilters)("ngForTrackBy",o.trackByIndex),v(26),y("ngForOf",o.configuration.riskhotspotassemblyfilters)("ngForTrackBy",o.trackByIndex),v(26),y("ngForOf",o.configuration.riskhotspotclassfilters)("ngForTrackBy",o.trackByIndex),v(11),ae("ngModel",o.configuration.selectedverbosity),v(),y("ngForOf",o.configuration.verbosities)("ngForTrackBy",o.trackByIndex),v(7),ae("ngModel",o.configuration.title),v(7),ae("ngModel",o.configuration.tag),v(7),y("routerLink",B(42,nS)),v(7),ae("ngModel",o.configuration.license),v(6),y("href",o.selectedPackage.url,_r),v(),se(o.selectedPackage.name),v(),y("ngForOf",o.selectedPackage.installOptions),v(4),se(o.getUsage()),v(2),On(o.usageCopied?265:266),v(6),y("href",o.selectedPackage.url,_r),v(),se(o.selectedPackage.name),v(),y("ngForOf",o.selectedPackage.installOptions),v(4),se(o.getUsage()),v(2),On(o.usageCopied?279:280))},dependencies:[vn,Zr,ev,nv,gn,wa,gd,qr,Wr,Bn,yd,Un,jn,Ps,Fs,Sr,Ne],styles:[".sticky[_ngcontent-%COMP%]{position:sticky;top:100px}"]});let t=e;return t})();var Gn=" | ReportGenerator - Code coverage reports",AS=[{path:"",component:av,pathMatch:"full",title:"Home"+Gn,data:{canonical:"/"}},{path:"features",component:ov,title:"Features"+Gn,data:{canonical:"/features"}},{path:"features.html",redirectTo:"/features"},{path:"getstarted",component:sv,title:"Get started"+Gn,data:{canonical:"/getstarted"}},{path:"getstarted.html",redirectTo:"/getstarted"},{path:"usage",component:fv,title:"Usage"+Gn,data:{canonical:"/usage"}},{path:"usage.html",redirectTo:"/usage"},{path:"pro",component:dv,title:"PRO"+Gn,data:{canonical:"/pro"}},{path:"pro.html",redirectTo:"/pro"},{path:"contact",component:rv,title:"Contact"+Gn,data:{canonical:"/contact"}},{path:"contact.html",redirectTo:"/contact"},{path:"404",component:lv,title:"404 - Not found"+Gn},{path:"**",redirectTo:"/404"}],hv=(()=>{let e=class e{};e.\u0275fac=function(i){return new(i||e)},e.\u0275mod=ze({type:e}),e.\u0275inj=Ge({imports:[ud.forRoot(AS,{scrollPositionRestoration:"enabled",scrollOffset:[0,0],anchorScrolling:"enabled"}),ud]});let t=e;return t})();Q.production&&void 0;Om(Rg,{providers:[hc(Fm,hv,vn),Sa,Ma,_a,_m(Im())]}).catch(t=>console.error(t));