scanoss 0.9.3 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/README.md +23 -15
  2. package/assets/ReportHTMLTemplate/index.html +74 -59
  3. package/build/main/cli/commands/scan.js +29 -18
  4. package/build/main/index.d.ts +10 -6
  5. package/build/main/index.js +11 -8
  6. package/build/main/sdk/Constants.d.ts +4 -0
  7. package/build/main/sdk/Constants.js +7 -0
  8. package/build/main/sdk/Dependencies/DependencyScanner.d.ts +2 -2
  9. package/build/main/sdk/Dependencies/DependencyScanner.js +6 -6
  10. package/build/main/sdk/Errors.d.ts +1 -0
  11. package/build/main/sdk/Errors.js +4 -0
  12. package/build/main/sdk/FileCount/FileCount.d.ts +1 -1
  13. package/build/main/sdk/FileCount/FileCount.js +10 -3
  14. package/build/main/sdk/{DataLayer → Report/DataLayer}/DataLayerTypes.d.ts +11 -4
  15. package/build/main/sdk/{DataLayer → Report/DataLayer}/DataLayerTypes.js +1 -4
  16. package/build/main/sdk/{DataLayer → Report/DataLayer}/DataProviderManager.d.ts +1 -1
  17. package/build/main/sdk/Report/DataLayer/DataProviderManager.js +25 -0
  18. package/build/main/sdk/{DataLayer → Report/DataLayer}/DataProviders/ComponentDataProvider.d.ts +3 -3
  19. package/build/main/sdk/Report/DataLayer/DataProviders/ComponentDataProvider.js +175 -0
  20. package/build/main/sdk/{DataLayer → Report/DataLayer}/DataProviders/DependencyDataProvider.d.ts +2 -2
  21. package/build/main/sdk/Report/DataLayer/DataProviders/DependencyDataProvider.js +42 -0
  22. package/build/main/sdk/{DataLayer → Report/DataLayer}/DataProviders/LicenseDataProvider.d.ts +3 -5
  23. package/build/main/sdk/Report/DataLayer/DataProviders/LicenseDataProvider.js +118 -0
  24. package/build/main/sdk/Report/DataLayer/DataProviders/LicenseObligationDataProvider.d.ts +13 -0
  25. package/build/main/sdk/Report/DataLayer/DataProviders/LicenseObligationDataProvider.js +65 -0
  26. package/build/{module/sdk → main/sdk/Report}/DataLayer/DataProviders/SummaryDataProvider.d.ts +4 -2
  27. package/build/main/sdk/Report/DataLayer/DataProviders/SummaryDataProvider.js +38 -0
  28. package/build/main/sdk/Report/Report.d.ts +7 -1
  29. package/build/main/sdk/Report/Report.js +19 -6
  30. package/build/main/sdk/Services/Grpc/BaseService.d.ts +18 -0
  31. package/build/main/sdk/Services/Grpc/BaseService.js +94 -0
  32. package/build/main/sdk/Services/Grpc/CryptographyService.d.ts +9 -0
  33. package/build/main/sdk/Services/Grpc/CryptographyService.js +35 -0
  34. package/build/{module/sdk/grpc/GrpcDependencyService.d.ts → main/sdk/Services/Grpc/DependencyService.d.ts} +1 -1
  35. package/build/main/sdk/{grpc/GrpcDependencyService.js → Services/Grpc/DependencyService.js} +4 -4
  36. package/build/main/sdk/Services/Grpc/scanoss/api/common/v2/scanoss-common_grpc_pb.js +2 -0
  37. package/build/main/sdk/Services/Grpc/scanoss/api/common/v2/scanoss-common_pb.js +746 -0
  38. package/build/main/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_grpc_pb.d.ts +39 -0
  39. package/build/main/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_grpc_pb.js +98 -0
  40. package/build/main/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_pb.js +562 -0
  41. package/build/{module/sdk/grpc → main/sdk/Services/Grpc}/scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb.js +2 -2
  42. package/build/main/sdk/Services/Grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.js +1397 -0
  43. package/build/main/tsconfig.tsbuildinfo +295 -213
  44. package/build/module/cli/commands/scan.js +31 -20
  45. package/build/module/index.d.ts +10 -6
  46. package/build/module/index.js +11 -8
  47. package/build/module/sdk/Constants.d.ts +4 -0
  48. package/build/module/sdk/Constants.js +5 -0
  49. package/build/module/sdk/Dependencies/DependencyScanner.d.ts +2 -2
  50. package/build/module/sdk/Dependencies/DependencyScanner.js +9 -9
  51. package/build/module/sdk/Errors.d.ts +1 -0
  52. package/build/module/sdk/Errors.js +2 -0
  53. package/build/module/sdk/FileCount/FileCount.d.ts +1 -1
  54. package/build/module/sdk/FileCount/FileCount.js +13 -6
  55. package/build/module/sdk/{DataLayer → Report/DataLayer}/DataLayerTypes.d.ts +11 -4
  56. package/build/module/sdk/Report/DataLayer/DataLayerTypes.js +2 -0
  57. package/build/module/sdk/{DataLayer → Report/DataLayer}/DataProviderManager.d.ts +1 -1
  58. package/build/module/sdk/Report/DataLayer/DataProviderManager.js +22 -0
  59. package/build/module/sdk/{DataLayer → Report/DataLayer}/DataProviders/ComponentDataProvider.d.ts +3 -3
  60. package/build/module/sdk/Report/DataLayer/DataProviders/ComponentDataProvider.js +170 -0
  61. package/build/module/sdk/{DataLayer → Report/DataLayer}/DataProviders/DependencyDataProvider.d.ts +2 -2
  62. package/build/module/sdk/Report/DataLayer/DataProviders/DependencyDataProvider.js +39 -0
  63. package/build/module/sdk/{DataLayer → Report/DataLayer}/DataProviders/LicenseDataProvider.d.ts +3 -5
  64. package/build/module/sdk/Report/DataLayer/DataProviders/LicenseDataProvider.js +115 -0
  65. package/build/module/sdk/Report/DataLayer/DataProviders/LicenseObligationDataProvider.d.ts +13 -0
  66. package/build/module/sdk/Report/DataLayer/DataProviders/LicenseObligationDataProvider.js +60 -0
  67. package/build/{main/sdk → module/sdk/Report}/DataLayer/DataProviders/SummaryDataProvider.d.ts +4 -2
  68. package/build/module/sdk/Report/DataLayer/DataProviders/SummaryDataProvider.js +35 -0
  69. package/build/module/sdk/Report/Report.d.ts +7 -1
  70. package/build/module/sdk/Report/Report.js +19 -6
  71. package/build/module/sdk/Services/Grpc/BaseService.d.ts +18 -0
  72. package/build/module/sdk/Services/Grpc/BaseService.js +61 -0
  73. package/build/module/sdk/Services/Grpc/CryptographyService.d.ts +9 -0
  74. package/build/module/sdk/Services/Grpc/CryptographyService.js +32 -0
  75. package/build/{main/sdk/grpc/GrpcDependencyService.d.ts → module/sdk/Services/Grpc/DependencyService.d.ts} +1 -1
  76. package/build/module/sdk/Services/Grpc/DependencyService.js +62 -0
  77. package/build/module/sdk/Services/Grpc/scanoss/api/common/v2/scanoss-common_grpc_pb.js +2 -0
  78. package/build/module/sdk/Services/Grpc/scanoss/api/common/v2/scanoss-common_pb.js +746 -0
  79. package/build/module/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_grpc_pb.d.ts +39 -0
  80. package/build/module/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_grpc_pb.js +98 -0
  81. package/build/module/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_pb.js +562 -0
  82. package/build/{main/sdk/grpc → module/sdk/Services/Grpc}/scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb.js +2 -2
  83. package/build/module/sdk/Services/Grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.js +1397 -0
  84. package/build/module/tsconfig.module.tsbuildinfo +295 -213
  85. package/package.json +2 -2
  86. package/build/main/sdk/DataLayer/DataProviderManager.js +0 -24
  87. package/build/main/sdk/DataLayer/DataProviders/ComponentDataProvider.js +0 -164
  88. package/build/main/sdk/DataLayer/DataProviders/DependencyDataProvider.js +0 -37
  89. package/build/main/sdk/DataLayer/DataProviders/LicenseDataProvider.js +0 -148
  90. package/build/main/sdk/DataLayer/DataProviders/SummaryDataProvider.js +0 -33
  91. package/build/main/sdk/grpc/scanoss/api/common/v2/scanoss-common_grpc_pb.js +0 -2
  92. package/build/main/sdk/grpc/scanoss/api/common/v2/scanoss-common_pb.js +0 -404
  93. package/build/main/sdk/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.js +0 -1197
  94. package/build/main/sdk/grpc/scanoss/api/scanning/v2/scanoss-scanning_grpc_pb.d.ts +0 -19
  95. package/build/main/sdk/grpc/scanoss/api/scanning/v2/scanoss-scanning_grpc_pb.js +0 -66
  96. package/build/main/sdk/grpc/scanoss/api/scanning/v2/scanoss-scanning_pb.js +0 -14
  97. package/build/module/sdk/DataLayer/DataLayerTypes.js +0 -5
  98. package/build/module/sdk/DataLayer/DataProviderManager.js +0 -21
  99. package/build/module/sdk/DataLayer/DataProviders/ComponentDataProvider.js +0 -159
  100. package/build/module/sdk/DataLayer/DataProviders/DependencyDataProvider.js +0 -34
  101. package/build/module/sdk/DataLayer/DataProviders/LicenseDataProvider.js +0 -145
  102. package/build/module/sdk/DataLayer/DataProviders/SummaryDataProvider.js +0 -30
  103. package/build/module/sdk/grpc/GrpcDependencyService.js +0 -62
  104. package/build/module/sdk/grpc/scanoss/api/common/v2/scanoss-common_grpc_pb.js +0 -2
  105. package/build/module/sdk/grpc/scanoss/api/common/v2/scanoss-common_pb.js +0 -404
  106. package/build/module/sdk/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.js +0 -1197
  107. package/build/module/sdk/grpc/scanoss/api/scanning/v2/scanoss-scanning_grpc_pb.d.ts +0 -19
  108. package/build/module/sdk/grpc/scanoss/api/scanning/v2/scanoss-scanning_grpc_pb.js +0 -66
  109. package/build/module/sdk/grpc/scanoss/api/scanning/v2/scanoss-scanning_pb.js +0 -14
  110. /package/build/main/sdk/{grpc → Services/Grpc}/scanoss/api/common/v2/scanoss-common_grpc_pb.d.ts +0 -0
  111. /package/build/main/sdk/{grpc → Services/Grpc}/scanoss/api/common/v2/scanoss-common_pb.d.ts +0 -0
  112. /package/build/main/sdk/{grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.d.ts → Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_pb.d.ts} +0 -0
  113. /package/build/main/sdk/{grpc → Services/Grpc}/scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb.d.ts +0 -0
  114. /package/build/{module/sdk/grpc → main/sdk/Services/Grpc}/scanoss/api/dependencies/v2/scanoss-dependencies_pb.d.ts +0 -0
  115. /package/build/module/sdk/{grpc → Services/Grpc}/scanoss/api/common/v2/scanoss-common_grpc_pb.d.ts +0 -0
  116. /package/build/module/sdk/{grpc → Services/Grpc}/scanoss/api/common/v2/scanoss-common_pb.d.ts +0 -0
  117. /package/build/{main/sdk/grpc/scanoss/api/scanning/v2/scanoss-scanning_pb.d.ts → module/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_pb.d.ts} +0 -0
  118. /package/build/module/sdk/{grpc → Services/Grpc}/scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb.d.ts +0 -0
  119. /package/build/module/sdk/{grpc/scanoss/api/scanning/v2/scanoss-scanning_pb.d.ts → Services/Grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.d.ts} +0 -0
package/README.md CHANGED
@@ -123,26 +123,34 @@ These events are listed in the table above and were previously mentioned.
123
123
  | RESULTS_APPENDED | Results added to scan report file |
124
124
 
125
125
 
126
- ### Dependency Scanning
127
- ```typescript
128
- import { DependencyScanner, DependencyScannerCfg } from "scanoss";
129
126
 
130
- const main = async () => {
131
127
 
132
- const dependencyScanner = new DependencyScanner();
128
+ ## Local Development and Usage
129
+ If you want to develop this package and use it locally in your project (without publishing it), follow these steps:
130
+
131
+ #### 1 - Creating a Symbolic Link for the Development Package:
132
+ In the root of the scanoss.js package, run the command:
133
+
134
+ ```bash
135
+ npm install && npm run build && npm link .
136
+ ```
137
+ This command creates a global symbolic link in your system that points to the local location of your package. This means you can use the package in any other Node.js project on your machine as if it were installed globally.
133
138
 
134
- //Scan a full folder
135
- const results = await dependencyScanner.scanFolder("./node_modules")
139
+ #### 2 - Using the Package in Your Project:
140
+
141
+ In the root of the project where you want to use the scanoss package, run the command:
142
+
143
+ ```bash
144
+ npm link scanoss
145
+ ```
146
+ This will create a symbolic link in your project to the globally linked scanoss package. Any changes made in the package will be immediately reflected in the consuming project.
136
147
 
137
- //Scan specific files
138
- //const results = await dependencyScanner.scan(["./package.json", "package-lock.json"])
148
+ #### 3 - Disconnecting the Link:
139
149
 
140
- }
150
+ Remember that once you finish developing or using the package locally, you should break the link to avoid potential issues with future versions or with installing other packages. To do this, simply run:
141
151
 
142
- main();
152
+ ```bash
153
+ npm unlink scanoss
143
154
  ```
144
- # Build and test the module
155
+ in both the project and the scanoss package. This will remove the symbolic links and restore the normal state of the packages.
145
156
 
146
- - `npm install` will install the dependencies.
147
- - `npm run build` will build the module.
148
- - `npm run test` will publish the module.
@@ -3,10 +3,10 @@
3
3
 
4
4
  <head>
5
5
  <meta charset="UTF-8">
6
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
7
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
- <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"
9
- integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
6
+ <meta content="IE=edge" http-equiv="X-UA-Compatible">
7
+ <meta content="width=device-width, initial-scale=1.0" name="viewport">
8
+ <link crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
9
+ integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" rel="stylesheet">
10
10
  <title>SCANOSS Detected Report</title>
11
11
  </head>
12
12
 
@@ -124,6 +124,14 @@
124
124
  }
125
125
 
126
126
 
127
+ .section__license-obligation {
128
+ display: none;
129
+ }
130
+
131
+ .visible--block {
132
+ display: block;
133
+ }
134
+
127
135
  .incompatible-license-table td:first-child {
128
136
  text-align: left;
129
137
  font-size: 14px;
@@ -440,13 +448,15 @@
440
448
  }
441
449
  </style>
442
450
 
451
+
452
+ <!--See Bootstrap example: https://getbootstrap.com/docs/5.0/components/navs-tabs/#javascript-behavior-->
443
453
  <body>
444
454
  <header>
445
455
  <div class="header-title">
446
456
  <img
447
457
  src="data:image/png;base64,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">
448
458
  <div>
449
- <h5>Detected Report</h5>
459
+ <h5 id='header__report_title'></h5>
450
460
  <h5 id="date"></h5>
451
461
  </div>
452
462
  </div>
@@ -463,24 +473,24 @@
463
473
 
464
474
  <nav>
465
475
  <div class="nav nav-pills d-flex justify-content-center mb-5" id="nav-tab" role="tablist">
466
- <button class="nav-link active" id="nav-licenses-tab" data-bs-toggle="tab" data-bs-target="#nav-licenses"
467
- type="button" role="tab" aria-controls="nav-licenses" aria-selected="true">Licenses</button>
468
- <button class="nav-link" id="nav-components-tab" data-bs-toggle="tab" data-bs-target="#nav-components"
469
- type="button" role="tab" aria-controls="nav-components" aria-selected="false">Components</button>
470
- <button class="nav-link" id="nav-vulnerabilities-tab" data-bs-toggle="tab" data-bs-target="#nav-vulnerabilities"
471
- type="button" role="tab" aria-controls="nav-vulnerabilities" aria-selected="false">Vulnerabilities</button>
472
- <button class="nav-link" id="nav-dependencies-tab" data-bs-toggle="tab" data-bs-target="#nav-dependencies"
473
- type="button" role="tab" aria-controls="nav-dependencies" aria-selected="false">Dependencies</button>
474
- <button class="nav-link" id="nav-copyrights-tab" data-bs-toggle="tab" data-bs-target="#nav-copyrights"
475
- type="button" role="tab" aria-controls="nav-copyrights" aria-selected="false">Copyrights</button>
476
- <button class="nav-link" id="nav-cryptography-tab" data-bs-toggle="tab" data-bs-target="#nav-cryptography"
477
- type="button" role="tab" aria-controls="nav-cryptography" aria-selected="false">Cryptography</button>
478
- <button class="nav-link" id="nav-quality-tab" data-bs-toggle="tab" data-bs-target="#nav-quality"
479
- type="button" role="tab" aria-controls="nav-quality" aria-selected="false">Quality</button>
480
- <button class="nav-link" id="nav-health-tab" data-bs-toggle="tab" data-bs-target="#nav-health"
481
- type="button" role="tab" aria-controls="nav-health" aria-selected="false">Health</button>
482
- <button class="nav-link" id="nav-summary-tab" data-bs-toggle="tab" data-bs-target="#nav-summary" type="button"
483
- role="tab" aria-controls="nav-summary" aria-selected="false">Summary</button>
476
+ <button aria-controls="nav-licenses" aria-selected="true" class="nav-link active" data-bs-target="#nav-licenses"
477
+ data-bs-toggle="tab" id="nav-licenses-tab" role="tab" type="button">Licenses</button>
478
+ <button aria-controls="nav-components" aria-selected="false" class="nav-link" data-bs-target="#nav-components"
479
+ data-bs-toggle="tab" id="nav-components-tab" role="tab" type="button">Components</button>
480
+ <button aria-controls="nav-vulnerabilities" aria-selected="false" class="nav-link" data-bs-target="#nav-vulnerabilities"
481
+ data-bs-toggle="tab" id="nav-vulnerabilities-tab" role="tab" type="button">Vulnerabilities</button>
482
+ <button aria-controls="nav-dependencies" aria-selected="false" class="nav-link" data-bs-target="#nav-dependencies"
483
+ data-bs-toggle="tab" id="nav-dependencies-tab" role="tab" type="button">Dependencies</button>
484
+ <button aria-controls="nav-copyrights" aria-selected="false" class="nav-link" data-bs-target="#nav-copyrights"
485
+ data-bs-toggle="tab" id="nav-copyrights-tab" role="tab" type="button">Copyrights</button>
486
+ <button aria-controls="nav-cryptography" aria-selected="false" class="nav-link" data-bs-target="#nav-cryptography"
487
+ data-bs-toggle="tab" id="nav-cryptography-tab" role="tab" type="button">Cryptography</button>
488
+ <button aria-controls="nav-quality" aria-selected="false" class="nav-link" data-bs-target="#nav-quality"
489
+ data-bs-toggle="tab" id="nav-quality-tab" role="tab" type="button">Quality</button>
490
+ <button aria-controls="nav-health" aria-selected="false" class="nav-link" data-bs-target="#nav-health"
491
+ data-bs-toggle="tab" id="nav-health-tab" role="tab" type="button">Health</button>
492
+ <button aria-controls="nav-summary" aria-selected="false" class="nav-link" data-bs-target="#nav-summary" data-bs-toggle="tab"
493
+ id="nav-summary-tab" role="tab" type="button">Summary</button>
484
494
  </div>
485
495
  </nav>
486
496
 
@@ -490,7 +500,7 @@
490
500
  <div class="tab-content" id="nav-tabContent">
491
501
 
492
502
  <!-- licenses -->
493
- <div class="tab-pane fade show active" id="nav-licenses" role="tabpanel" aria-labelledby="nav-licenses-tab"
503
+ <div aria-labelledby="nav-licenses-tab" class="tab-pane fade show active" id="nav-licenses" role="tabpanel"
494
504
  tabindex="0">
495
505
  <section class="mt-5">
496
506
  <div class="pie-chart-container">
@@ -507,7 +517,7 @@
507
517
  </table>
508
518
  </div>
509
519
  </section>
510
- <section class="mt-5">
520
+ <section class="mt-5 section__license-obligation" id="section__license-obligation">
511
521
  <h4>License obligations</h4>
512
522
  <div class="incompatibilities-table-container">
513
523
  <table class="table incompatible-license-table main-table">
@@ -526,9 +536,9 @@
526
536
  </div>
527
537
 
528
538
  <!-- components -->
529
- <section class="tab-pane fade" id="nav-components" role="tabpanel" aria-labelledby="nav-components-tab"
539
+ <section aria-labelledby="nav-components-tab" class="tab-pane fade" id="nav-components" role="tabpanel"
530
540
  tabindex="0">
531
- <table id="table-components" class="table main-table">
541
+ <table class="table main-table" id="table-components">
532
542
  <thead>
533
543
  <tr>
534
544
  <th>Component</th>
@@ -552,9 +562,9 @@
552
562
  </section>
553
563
 
554
564
  <!-- vulnerabilities -->
555
- <section class="tab-pane fade" id="nav-vulnerabilities" role="tabpanel" aria-labelledby="nav-vulnerabilities-tab"
565
+ <section aria-labelledby="nav-vulnerabilities-tab" class="tab-pane fade" id="nav-vulnerabilities" role="tabpanel"
556
566
  tabindex="0">
557
- <table id="table-vulnerabilities" class="table main-table">
567
+ <table class="table main-table" id="table-vulnerabilities">
558
568
  <thead>
559
569
  <tr>
560
570
  <th>Component</th>
@@ -584,9 +594,9 @@
584
594
  </section>
585
595
 
586
596
  <!-- dependencies -->
587
- <section class="tab-pane fade" id="nav-dependencies" role="tabpanel" aria-labelledby="nav-dependencies-tab"
597
+ <section aria-labelledby="nav-dependencies-tab" class="tab-pane fade" id="nav-dependencies" role="tabpanel"
588
598
  tabindex="0">
589
- <table id="table-dependencies" class="table main-table">
599
+ <table class="table main-table" id="table-dependencies">
590
600
  <thead>
591
601
  <tr>
592
602
  <th>Dependency</th>
@@ -610,9 +620,9 @@
610
620
  </section>
611
621
 
612
622
  <!-- copyright -->
613
- <section class="tab-pane fade" id="nav-copyrights" role="tabpanel" aria-labelledby="nav-copyrights-tab"
623
+ <section aria-labelledby="nav-copyrights-tab" class="tab-pane fade" id="nav-copyrights" role="tabpanel"
614
624
  tabindex="0">
615
- <table id="table-copyrights" class="table main-table">
625
+ <table class="table main-table" id="table-copyrights">
616
626
  <thead>
617
627
  <tr>
618
628
  <th>Component</th>
@@ -634,9 +644,9 @@
634
644
  </section>
635
645
 
636
646
  <!-- cryptography -->
637
- <section class="tab-pane fade" id="nav-cryptography" role="tabpanel" aria-labelledby="nav-cryptography-tab"
647
+ <section aria-labelledby="nav-cryptography-tab" class="tab-pane fade" id="nav-cryptography" role="tabpanel"
638
648
  tabindex="0">
639
- <table id="table-cryptography" class="table main-table">
649
+ <table class="table main-table" id="table-cryptography">
640
650
  <thead>
641
651
  <tr>
642
652
  <th>Component</th>
@@ -658,9 +668,9 @@
658
668
  </section>
659
669
 
660
670
  <!-- quality -->
661
- <section class="tab-pane fade" id="nav-quality" role="tabpanel" aria-labelledby="nav-quality-tab"
671
+ <section aria-labelledby="nav-quality-tab" class="tab-pane fade" id="nav-quality" role="tabpanel"
662
672
  tabindex="0">
663
- <table id="table-quality" class="table main-table">
673
+ <table class="table main-table" id="table-quality">
664
674
  <thead>
665
675
  <tr>
666
676
  <th>Component</th>
@@ -682,9 +692,9 @@
682
692
  </section>
683
693
 
684
694
  <!-- health -->
685
- <section class="tab-pane fade" id="nav-health" role="tabpanel" aria-labelledby="nav-health-tab"
695
+ <section aria-labelledby="nav-health-tab" class="tab-pane fade" id="nav-health" role="tabpanel"
686
696
  tabindex="0">
687
- <table id="table-health" class="table main-table">
697
+ <table class="table main-table" id="table-health">
688
698
  <thead>
689
699
  <tr>
690
700
  <th>Component</th>
@@ -718,7 +728,7 @@
718
728
  </section>
719
729
 
720
730
  <!-- summary -->
721
- <div class="tab-pane fade" id="nav-summary" role="tabpanel" aria-labelledby="nav-summary-tab" tabindex="0">
731
+ <div aria-labelledby="nav-summary-tab" class="tab-pane fade" id="nav-summary" role="tabpanel" tabindex="0">
722
732
  SUMMARY
723
733
  </div>
724
734
  </div>
@@ -732,9 +742,9 @@
732
742
  <p class="text-center"><a href="https://www.scanoss.com" target="_blank">www.scanoss.com</a></p>
733
743
  </footer>
734
744
 
735
- <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.1/dist/js/bootstrap.bundle.min.js"
745
+ <script crossorigin="anonymous"
736
746
  integrity="sha384-u1OknCvxWvY5kfmNBILK2hRnQC3Pr17a+RTT6rIHI7NnikvbZlHgTPOOmMi466C8"
737
- crossorigin="anonymous"></script>
747
+ src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.1/dist/js/bootstrap.bundle.min.js"></script>
738
748
  <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
739
749
  <script>
740
750
  addEventListener('DOMContentLoaded', (event) => {
@@ -832,7 +842,8 @@
832
842
  const p = document.querySelector('#project-name');
833
843
  p.innerHTML += data.summary.projectName ? data.summary.projectName : '-';
834
844
 
835
-
845
+ const rh = document.querySelector('#header__report_title')
846
+ rh.innerHTML += data.summary.reportTitle ? data.summary.reportTitle : "Report"
836
847
  // summary
837
848
  const s = document.querySelector('.scan-summary');
838
849
  s.innerHTML += `
@@ -997,26 +1008,30 @@
997
1008
  }
998
1009
 
999
1010
  function incompatibleLicenses() {
1000
- const licenseMapper = new Set();
1001
- data.licenses.forEach((l) => licenseMapper.add(l.label));
1002
- const body = document.querySelector('#incompatible-license');
1003
- data.licenses.forEach((l) => {
1004
- body.innerHTML += `
1005
- <tr>
1006
- <td>${l.label}</td>
1007
- <td>${l.copyleft === true ? '&#10004' : '&#10006'}</td>
1008
- <td><div class="incompatible-license-container">${l.incompatibleWith.map((i) => {
1009
- return `<div class="license-block ${licenseMapper.has(i) === true ? 'incompatible-ref' : ''}">
1010
- <p>${i}</p>
1011
- </div>`;
1012
- }).join(' ')}</div></td>
1013
- </tr>`;
1014
- });
1011
+ if (data.licensesObligations) {
1012
+ document.querySelector('.section__license-obligation').classList.add('visible--block');
1013
+
1014
+ const licenseMapper = new Set();
1015
+ data.licensesObligations.forEach((l) => licenseMapper.add(l.label));
1016
+ const body = document.querySelector('#incompatible-license');
1017
+ data.licensesObligations.forEach((l) => {
1018
+ body.innerHTML += `
1019
+ <tr>
1020
+ <td>${l.label}</td>
1021
+ <td>${l.copyleft === true ? '&#10004' : '&#10006'}</td>
1022
+ <td><div class="incompatible-license-container">${l.incompatibleWith.map((i) => {
1023
+ return `<div class="license-block ${licenseMapper.has(i) === true ? 'incompatible-ref' : ''}">
1024
+ <p>${i}</p>
1025
+ </div>`;
1026
+ }).join(' ')}</div></td>
1027
+ </tr>`;
1028
+ });
1029
+ }
1015
1030
  }
1016
1031
 
1017
1032
  pieChart();
1018
1033
  licenseDetail();
1019
- incompatibleLicenses()
1034
+ incompatibleLicenses();
1020
1035
 
1021
1036
  }
1022
1037
 
@@ -15,14 +15,15 @@ const DependencyScanner_1 = require("../../sdk/Dependencies/DependencyScanner");
15
15
  const ScanFilter_1 = require("../../sdk/tree/Filters/ScanFilter");
16
16
  const DependencyFilter_1 = require("../../sdk/tree/Filters/DependencyFilter");
17
17
  const Report_1 = require("../../sdk/Report/Report");
18
- const DataProviderManager_1 = require("../../sdk/DataLayer/DataProviderManager");
19
- const ComponentDataProvider_1 = require("../../sdk/DataLayer/DataProviders/ComponentDataProvider");
20
- const DependencyDataProvider_1 = require("../../sdk/DataLayer/DataProviders/DependencyDataProvider");
21
- const LicenseDataProvider_1 = require("../../sdk/DataLayer/DataProviders/LicenseDataProvider");
22
- const SummaryDataProvider_1 = require("../../sdk/DataLayer/DataProviders/SummaryDataProvider");
18
+ const DataProviderManager_1 = require("../../sdk/Report/DataLayer/DataProviderManager");
19
+ const ComponentDataProvider_1 = require("../../sdk/Report/DataLayer/DataProviders/ComponentDataProvider");
20
+ const DependencyDataProvider_1 = require("../../sdk/Report/DataLayer/DataProviders/DependencyDataProvider");
21
+ const LicenseDataProvider_1 = require("../../sdk/Report/DataLayer/DataProviders/LicenseDataProvider");
22
+ const SummaryDataProvider_1 = require("../../sdk/Report/DataLayer/DataProviders/SummaryDataProvider");
23
23
  const DecompressionFilter_1 = require("../../sdk/tree/Filters/DecompressionFilter");
24
24
  const DecompressionManager_1 = require("../../sdk/Decompress/DecompressionManager");
25
25
  const path_1 = __importDefault(require("path"));
26
+ const LicenseObligationDataProvider_1 = require("../../sdk/Report/DataLayer/DataProviders/LicenseObligationDataProvider");
26
27
  async function scanHandler(rootPath, options) {
27
28
  rootPath = path_1.default.resolve(rootPath);
28
29
  const pathIsFolder = await helpers_1.isFolder(rootPath);
@@ -70,7 +71,9 @@ async function scanHandler(rootPath, options) {
70
71
  scannerInput.engineFlags = options.flags;
71
72
  if (options.wfp)
72
73
  scannerInput.wfpPath = rootPath;
73
- const wfpMode = options.hpsm ? ScannerTypes_1.WinnowingMode.FULL_WINNOWING_HPSM : ScannerTypes_1.WinnowingMode.FULL_WINNOWING;
74
+ const wfpMode = options.hpsm
75
+ ? ScannerTypes_1.WinnowingMode.FULL_WINNOWING_HPSM
76
+ : ScannerTypes_1.WinnowingMode.FULL_WINNOWING;
74
77
  scannerInput.winnowing = { mode: wfpMode };
75
78
  if (!options.wfp) {
76
79
  if (pathIsFolder) {
@@ -78,20 +81,20 @@ async function scanHandler(rootPath, options) {
78
81
  const tree = new Tree_1.Tree(rootPath);
79
82
  tree.build();
80
83
  if (options.extract) {
81
- const archives = tree.getFileList(new DecompressionFilter_1.DecompressionFilter(""));
82
- console.error("Searching archives files...");
84
+ const archives = tree.getFileList(new DecompressionFilter_1.DecompressionFilter(''));
85
+ console.error('Searching archives files...');
83
86
  if (archives.length) {
84
- console.error("Extracting archives...");
87
+ console.error('Extracting archives...');
85
88
  const decompressionManager = new DecompressionManager_1.DecompressionManager(options.extractDeep, options.extractSuffix, options.extractOverwrite);
86
89
  await decompressionManager.decompress(archives);
87
- console.error("Reindexing files...");
90
+ console.error('Reindexing files...');
88
91
  tree.build();
89
92
  }
90
93
  else
91
- console.error("No archives found.");
94
+ console.error('No archives found.');
92
95
  }
93
- scannerInput.fileList = tree.getFileList(new ScanFilter_1.ScanFilter(""));
94
- dependencyInput = tree.getFileList(new DependencyFilter_1.DependencyFilter(""));
96
+ scannerInput.fileList = tree.getFileList(new ScanFilter_1.ScanFilter(''));
97
+ dependencyInput = tree.getFileList(new DependencyFilter_1.DependencyFilter(''));
95
98
  }
96
99
  else {
97
100
  scannerInput.fileList = [rootPath];
@@ -103,13 +106,17 @@ async function scanHandler(rootPath, options) {
103
106
  scannerInput.fileList.length = [...winnowing.matchAll(/file=/g)].length;
104
107
  }
105
108
  if (!options.verbose) {
106
- const optBar1 = { format: 'Scan Progress: [{bar}] {percentage}% | Scanned {value} files of {total}' };
109
+ const optBar1 = {
110
+ format: 'Scan Progress: [{bar}] {percentage}% | Scanned {value} files of {total}',
111
+ };
107
112
  const bar1 = new cli_progress_1.default.SingleBar(optBar1, cli_progress_1.default.Presets.shades_classic);
108
113
  bar1.start(scannerInput.fileList.length, 0);
109
114
  scanner.on(ScannerTypes_1.ScannerEvents.DISPATCHER_NEW_DATA, (dispResp) => {
110
115
  bar1.increment(dispResp.getFilesScanned().length);
111
116
  });
112
- scanner.on(ScannerTypes_1.ScannerEvents.SCAN_DONE, async (resultPath) => { bar1.stop(); });
117
+ scanner.on(ScannerTypes_1.ScannerEvents.SCAN_DONE, async (resultPath) => {
118
+ bar1.stop();
119
+ });
113
120
  }
114
121
  else {
115
122
  scanner.on(ScannerTypes_1.ScannerEvents.SCANNER_LOG, (logText) => console.error(logText));
@@ -125,17 +132,21 @@ async function scanHandler(rootPath, options) {
125
132
  }
126
133
  //Launch parallel scanners
127
134
  const pScanner = scanner.scan([scannerInput]);
128
- const [scannerResultPath, depResults] = await Promise.all([pScanner, pDependencyScanner]);
135
+ const [scannerResultPath, depResults] = await Promise.all([
136
+ pScanner,
137
+ pDependencyScanner,
138
+ ]);
129
139
  const scannerResults = JSON.parse(await fs_1.default.promises.readFile(scannerResultPath, 'utf-8'));
130
140
  //TODO Unify results.json and dependency.json. What happens with result.json that includes dependencies?
131
141
  const scannersResults = Object.assign({ scanner: scannerResults }, (options.dependencies && { dependencies: depResults }));
132
142
  let scannerResultsString = JSON.stringify(scannersResults, null, 2);
133
- if (options.format && options.format.toLowerCase() === "html") {
143
+ if (options.format && options.format.toLowerCase() === 'html') {
134
144
  const dataProviderManager = new DataProviderManager_1.DataProviderManager();
135
145
  dataProviderManager.addDataProvider(new ComponentDataProvider_1.ComponentDataProvider(scannersResults.scanner, scannersResults.dependencies));
136
146
  dataProviderManager.addDataProvider(new DependencyDataProvider_1.DependencyDataProvider(scannersResults.dependencies));
137
147
  dataProviderManager.addDataProvider(new LicenseDataProvider_1.LicenseDataProvider(scannersResults.scanner, scannersResults.dependencies));
138
148
  dataProviderManager.addDataProvider(new SummaryDataProvider_1.SummaryDataProvider(projectName, new Date(), scannersResults.scanner));
149
+ dataProviderManager.addDataProvider(new LicenseObligationDataProvider_1.LicenseObligationDataProvider(scannersResults.scanner, scannersResults.dependencies));
139
150
  const report = new Report_1.Report(dataProviderManager);
140
151
  scannerResultsString = await report.getHTML();
141
152
  }
@@ -145,4 +156,4 @@ async function scanHandler(rootPath, options) {
145
156
  console.log(scannerResultsString);
146
157
  }
147
158
  exports.scanHandler = scanHandler;
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jbGkvY29tbWFuZHMvc2Nhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDRDQUFvQjtBQUVwQix1REFBb0Q7QUFDcEQsaUVBTXdDO0FBQ3hDLDZEQUEwRDtBQUMxRCw4Q0FBMkM7QUFDM0MsZ0VBQXVDO0FBSXZDLHVDQUE2RDtBQUc3RCxzRkFFcUQ7QUFDckQsZ0ZBQTZFO0FBRTdFLGtFQUErRDtBQUMvRCw4RUFBMkU7QUFDM0Usb0RBQWlEO0FBQ2pELGlGQUE4RTtBQUM5RSxtR0FFaUU7QUFDakUscUdBRWtFO0FBQ2xFLCtGQUUrRDtBQUMvRCwrRkFFK0Q7QUFDL0Qsb0ZBRW9EO0FBQ3BELG9GQUVtRDtBQUNuRCxnREFBd0I7QUFHakIsS0FBSyxVQUFVLFdBQVcsQ0FBQyxRQUFnQixFQUFFLE9BQVk7SUFFOUQsUUFBUSxHQUFHLGNBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFbEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxrQkFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sV0FBVyxHQUFHLGdDQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRXBELCtDQUErQztJQUMvQyxJQUFJLGVBQWUsR0FBa0IsRUFBRSxDQUFDO0lBQ3hDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSwyQ0FBb0IsRUFBRSxDQUFDO0lBQ3hELElBQUksT0FBTyxDQUFDLE9BQU87UUFBRSxvQkFBb0IsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUNwRSxJQUFJLE9BQU8sQ0FBQyxLQUFLO1FBQUUsb0JBQW9CLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDOUQsSUFBRyxPQUFPLENBQUMsR0FBRztRQUFFLG9CQUFvQixDQUFDLEdBQUcsR0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQ3JELE1BQU0sb0JB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
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jbGkvY29tbWFuZHMvc2Nhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDRDQUFvQjtBQUVwQix1REFBb0Q7QUFDcEQsaUVBTXdDO0FBQ3hDLDZEQUEwRDtBQUMxRCw4Q0FBMkM7QUFDM0MsZ0VBQXVDO0FBRXZDLHVDQUE2RDtBQUU3RCxzRkFBbUY7QUFDbkYsZ0ZBQTZFO0FBRTdFLGtFQUErRDtBQUMvRCw4RUFBMkU7QUFDM0Usb0RBQWlEO0FBQ2pELHdGQUFxRjtBQUNyRiwwR0FBdUc7QUFDdkcsNEdBQXlHO0FBQ3pHLHNHQUFtRztBQUNuRyxzR0FBbUc7QUFDbkcsb0ZBQWlGO0FBQ2pGLG9GQUFpRjtBQUNqRixnREFBd0I7QUFDeEIsMEhBQXVIO0FBRWhILEtBQUssVUFBVSxXQUFXLENBQy9CLFFBQWdCLEVBQ2hCLE9BQVk7SUFFWixRQUFRLEdBQUcsY0FBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVsQyxNQUFNLFlBQVksR0FBRyxNQUFNLGtCQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUMsTUFBTSxXQUFXLEdBQUcsZ0NBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFckQsK0NBQStDO0lBQy9DLElBQUksZUFBZSxHQUFrQixFQUFFLENBQUM7SUFDeEMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLDJDQUFvQixFQUFFLENBQUM7SUFDeEQsSUFBSSxPQUFPLENBQUMsT0FBTztRQUFFLG9CQUFvQixDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ3BFLElBQUksT0FBTyxDQUFDLEtBQUs7UUFBRSxvQkFBb0IsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUM5RCxJQUFJLE9BQU8sQ0FBQyxHQUFHO1FBQUUsb0JBQW9CLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7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
@@ -8,13 +8,17 @@ export * from './sdk/Dependencies/DependencyTypes';
8
8
  export * from './sdk/Dependencies/DependencyScannerCfg';
9
9
  export * from './sdk/Dependencies/DependencyScanner';
10
10
  export * from './sdk/Dependencies/LocalDependency/LocalDependency';
11
- export * from './sdk/DataLayer/DataLayerTypes';
12
- export * from './sdk/DataLayer/DataProviderManager';
13
- export * from './sdk/DataLayer/DataProviders/LicenseDataProvider';
14
- export * from './sdk/DataLayer/DataProviders/SummaryDataProvider';
15
- export * from './sdk/DataLayer/DataProviders/DependencyDataProvider';
16
- export * from './sdk/DataLayer/DataProviders/ComponentDataProvider';
11
+ export * from './sdk/Report/Report';
12
+ export * from './sdk/Report/DataLayer/DataLayerTypes';
13
+ export * from './sdk/Report/DataLayer/DataProviderManager';
14
+ export * from './sdk/Report/DataLayer/DataProviders/LicenseDataProvider';
15
+ export * from './sdk/Report/DataLayer/DataProviders/SummaryDataProvider';
16
+ export * from './sdk/Report/DataLayer/DataProviders/DependencyDataProvider';
17
+ export * from './sdk/Report/DataLayer/DataProviders/ComponentDataProvider';
17
18
  export * from './sdk/Decompress/DecompressionManager';
18
19
  export * from './sdk/FileCount/FileCount';
19
20
  export { IDirSummary } from './sdk/FileCount/Interfaces';
21
+ export * from './sdk/Services/Grpc/CryptographyService';
22
+ export * from './sdk/Services/Grpc/DependencyService';
23
+ export { PurlRequest, EchoRequest } from './sdk/Services/Grpc/BaseService';
20
24
  export { logger } from './sdk/Logger';
@@ -22,17 +22,20 @@ __exportStar(require("./sdk/Dependencies/DependencyTypes"), exports);
22
22
  __exportStar(require("./sdk/Dependencies/DependencyScannerCfg"), exports);
23
23
  __exportStar(require("./sdk/Dependencies/DependencyScanner"), exports);
24
24
  __exportStar(require("./sdk/Dependencies/LocalDependency/LocalDependency"), exports);
25
- // *** Data layers export *** //
26
- __exportStar(require("./sdk/DataLayer/DataLayerTypes"), exports);
27
- __exportStar(require("./sdk/DataLayer/DataProviderManager"), exports);
28
- __exportStar(require("./sdk/DataLayer/DataProviders/LicenseDataProvider"), exports);
29
- __exportStar(require("./sdk/DataLayer/DataProviders/SummaryDataProvider"), exports);
30
- __exportStar(require("./sdk/DataLayer/DataProviders/DependencyDataProvider"), exports);
31
- __exportStar(require("./sdk/DataLayer/DataProviders/ComponentDataProvider"), exports);
25
+ // *** Report export *** //
26
+ __exportStar(require("./sdk/Report/Report"), exports);
27
+ __exportStar(require("./sdk/Report/DataLayer/DataLayerTypes"), exports);
28
+ __exportStar(require("./sdk/Report/DataLayer/DataProviderManager"), exports);
29
+ __exportStar(require("./sdk/Report/DataLayer/DataProviders/LicenseDataProvider"), exports);
30
+ __exportStar(require("./sdk/Report/DataLayer/DataProviders/SummaryDataProvider"), exports);
31
+ __exportStar(require("./sdk/Report/DataLayer/DataProviders/DependencyDataProvider"), exports);
32
+ __exportStar(require("./sdk/Report/DataLayer/DataProviders/ComponentDataProvider"), exports);
32
33
  // *** Unzip *** //
33
34
  __exportStar(require("./sdk/Decompress/DecompressionManager"), exports);
34
35
  // *** FileCount *** //
35
36
  __exportStar(require("./sdk/FileCount/FileCount"), exports);
37
+ __exportStar(require("./sdk/Services/Grpc/CryptographyService"), exports);
38
+ __exportStar(require("./sdk/Services/Grpc/DependencyService"), exports);
36
39
  var Logger_1 = require("./sdk/Logger");
37
40
  Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return Logger_1.logger; } });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsa0NBQWtDO0FBQ2xDLHdEQUFzQztBQUN0Qyw2REFBMkM7QUFDM0MsMkRBQXlDO0FBQ3pDLHdGQUFzRTtBQUV0RSxpQ0FBaUM7QUFDakMsNERBQTBDO0FBRzFDLHdDQUF3QztBQUN4QyxxRUFBbUQ7QUFDbkQsMEVBQXdEO0FBQ3hELHVFQUFxRDtBQUNyRCxxRkFBa0U7QUFFbEUsZ0NBQWdDO0FBQ2hDLGlFQUErQztBQUMvQyxzRUFBb0Q7QUFDcEQsb0ZBQWtFO0FBQ2xFLG9GQUFrRTtBQUNsRSx1RkFBcUU7QUFDckUsc0ZBQW9FO0FBRXBFLG1CQUFtQjtBQUNuQix3RUFBc0Q7QUFFdEQsdUJBQXVCO0FBQ3ZCLDREQUEwQztBQUcxQyx1Q0FBc0M7QUFBN0IsZ0dBQUEsTUFBTSxPQUFBIn0=
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsa0NBQWtDO0FBQ2xDLHdEQUFzQztBQUN0Qyw2REFBMkM7QUFDM0MsMkRBQXlDO0FBQ3pDLHdGQUFzRTtBQUV0RSxpQ0FBaUM7QUFDakMsNERBQTBDO0FBRzFDLHdDQUF3QztBQUN4QyxxRUFBbUQ7QUFDbkQsMEVBQXdEO0FBQ3hELHVFQUFxRDtBQUNyRCxxRkFBbUU7QUFFbkUsMkJBQTJCO0FBQzNCLHNEQUFvQztBQUNwQyx3RUFBc0Q7QUFDdEQsNkVBQTJEO0FBQzNELDJGQUF5RTtBQUN6RSwyRkFBeUU7QUFDekUsOEZBQTRFO0FBQzVFLDZGQUEyRTtBQUUzRSxtQkFBbUI7QUFDbkIsd0VBQXNEO0FBRXRELHVCQUF1QjtBQUN2Qiw0REFBMEM7QUFHMUMsMEVBQXdEO0FBQ3hELHdFQUFzRDtBQUd0RCx1Q0FBc0M7QUFBN0IsZ0dBQUEsTUFBTSxPQUFBIn0=
@@ -0,0 +1,4 @@
1
+ export declare const HEADER_NAME_API_TOKEN = "x-api-key";
2
+ export declare const SCANOSS_GRPC_SERVICES_HOST = "scanoss.com";
3
+ export declare const SCANOSS_GRPC_SERVICES_PORT = "443";
4
+ export declare const SCANOSS_GRPC_ENDPOINT: string;
@@ -0,0 +1,7 @@
1
+ Object.defineProperty(exports, "__esModule", { value: true });
2
+ exports.SCANOSS_GRPC_ENDPOINT = exports.SCANOSS_GRPC_SERVICES_PORT = exports.SCANOSS_GRPC_SERVICES_HOST = exports.HEADER_NAME_API_TOKEN = void 0;
3
+ exports.HEADER_NAME_API_TOKEN = 'x-api-key';
4
+ exports.SCANOSS_GRPC_SERVICES_HOST = 'scanoss.com';
5
+ exports.SCANOSS_GRPC_SERVICES_PORT = '443';
6
+ exports.SCANOSS_GRPC_ENDPOINT = exports.SCANOSS_GRPC_SERVICES_HOST + ':' + exports.SCANOSS_GRPC_SERVICES_PORT;
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Nkay9Db25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBYSxRQUFBLHFCQUFxQixHQUFHLFdBQVcsQ0FBQztBQUNwQyxRQUFBLDBCQUEwQixHQUFHLGFBQWEsQ0FBQztBQUMzQyxRQUFBLDBCQUEwQixHQUFHLEtBQUssQ0FBQztBQUVuQyxRQUFBLHFCQUFxQixHQUNoQyxrQ0FBMEIsR0FBRyxHQUFHLEdBQUcsa0NBQTBCLENBQUMifQ==
@@ -1,5 +1,5 @@
1
- import { DependencyScannerCfg } from "./DependencyScannerCfg";
2
- import { IDependencyResponse } from "./DependencyTypes";
1
+ import { DependencyScannerCfg } from './DependencyScannerCfg';
2
+ import { IDependencyResponse } from './DependencyTypes';
3
3
  export declare class DependencyScanner {
4
4
  private localDependency;
5
5
  private grpcDependencyService;