scanoss 0.9.3 → 0.10.1

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
@@ -0,0 +1,170 @@
1
+ export class ComponentDataProvider {
2
+ constructor(scanRawResults, dependencies) {
3
+ this.scanRawResults = scanRawResults;
4
+ this.dependencies = dependencies;
5
+ }
6
+ getLayerName() {
7
+ return this.constructor.name;
8
+ }
9
+ async getData() {
10
+ const componentLayer = { component: null };
11
+ if (!this.scanRawResults && !this.dependencies)
12
+ return componentLayer;
13
+ //Extract all components from scanRawResults, does not matter if there are duplicated
14
+ //And removes all no match results.
15
+ this.componentList = Object.values(this.scanRawResults).flat();
16
+ this.componentList = this.componentList.filter((component) => component.id !== 'none');
17
+ const scannerComponentLayer = this.parseComponentsFromScanner(this.componentList);
18
+ const dependenciesComponentLayer = this.parseComponentsFromDependencies(this.dependencies);
19
+ componentLayer.component = [
20
+ ...scannerComponentLayer,
21
+ ...dependenciesComponentLayer,
22
+ ].sort((itemA, itemB) => {
23
+ if (itemA.name < itemB.name)
24
+ return -1;
25
+ else if (itemA.name > itemB.name)
26
+ return 1;
27
+ return 0;
28
+ });
29
+ if (!componentLayer.component.length)
30
+ componentLayer.component = null;
31
+ return componentLayer;
32
+ }
33
+ parseComponentsFromDependencies(dependencies) {
34
+ const componentLayer = [];
35
+ if (!dependencies)
36
+ return componentLayer;
37
+ dependencies.filesList.forEach((file) => {
38
+ file.dependenciesList.forEach((dependency) => {
39
+ const newComponent = {};
40
+ newComponent.key = dependency.purl;
41
+ newComponent.purls = [dependency.purl];
42
+ newComponent.name = dependency.component;
43
+ newComponent.url = null;
44
+ newComponent.vendor = null;
45
+ newComponent.health = null;
46
+ newComponent.versions = [
47
+ {
48
+ version: dependency.version,
49
+ licenses: dependency.licensesList.map((license) => license.spdxId),
50
+ copyrights: null,
51
+ cryptography: null,
52
+ quality: null,
53
+ },
54
+ ];
55
+ const existingComponent = componentLayer.find((component) => component.key === newComponent.key);
56
+ if (existingComponent) {
57
+ const existingVersion = existingComponent.versions.find((version) => version.version === newComponent.versions[0].version);
58
+ if (!existingVersion)
59
+ existingComponent.versions.push({
60
+ version: newComponent.versions[0].version,
61
+ licenses: newComponent.versions[0].licenses,
62
+ copyrights: newComponent.versions[0].copyrights,
63
+ quality: null,
64
+ cryptography: null,
65
+ });
66
+ }
67
+ else {
68
+ //Component does not exist, insert as it is.
69
+ componentLayer.push(newComponent);
70
+ }
71
+ });
72
+ });
73
+ return componentLayer;
74
+ }
75
+ parseComponentsFromScanner(scanComponents) {
76
+ const componentLayer = [];
77
+ if (!scanComponents)
78
+ return componentLayer;
79
+ for (let i = 0; i < scanComponents.length; i++) {
80
+ try {
81
+ // qualityValue would have a number from 0 to 5 or undefined.
82
+ const qualityValue = Number(scanComponents[i]?.quality?.shift()?.score?.split('/').shift());
83
+ //Generates a new component
84
+ const newComponent = {
85
+ key: scanComponents[i].purl[0],
86
+ purls: scanComponents[i].purl,
87
+ name: scanComponents[i].component,
88
+ url: scanComponents[i].url,
89
+ vendor: scanComponents[i].vendor,
90
+ health: scanComponents[i].health,
91
+ versions: [
92
+ {
93
+ version: scanComponents[i].version,
94
+ licenses: scanComponents[i].licenses.map((license) => license.name),
95
+ copyrights: scanComponents[i].copyrights,
96
+ quality: { sum: 0, scoreAvg: 0, count: 0 },
97
+ cryptography: scanComponents[i]?.cryptography,
98
+ },
99
+ ],
100
+ };
101
+ //Removes duplicated licenses
102
+ newComponent.versions[0].licenses = [
103
+ ...new Set(newComponent.versions[0].licenses),
104
+ ];
105
+ if (qualityValue) {
106
+ newComponent.versions[0].quality.count = 1;
107
+ newComponent.versions[0].quality.sum = qualityValue;
108
+ newComponent.versions[0].quality.scoreAvg = qualityValue;
109
+ }
110
+ //Merge new component in componentList
111
+ const componentTarget = componentLayer.find((component) => component.key === newComponent.key);
112
+ if (componentTarget) {
113
+ const versionTarget = componentTarget.versions.find((item) => item.version === newComponent.versions[0].version);
114
+ if (versionTarget) {
115
+ //Insert licenses
116
+ newComponent.versions[0].licenses.forEach((licence) => {
117
+ if (!versionTarget.licenses.includes(licence))
118
+ versionTarget.licenses.push(licence);
119
+ });
120
+ //Insert copyright
121
+ newComponent.versions[0]?.copyrights?.forEach((newCopyright) => {
122
+ if (versionTarget.copyrights.every((copyright) => newCopyright.name != copyright.name)) {
123
+ versionTarget.copyrights.push(newCopyright);
124
+ }
125
+ });
126
+ //Insert cryptography
127
+ newComponent.versions[0]?.cryptography?.forEach((newCryptoAlgo) => {
128
+ if (versionTarget.cryptography.every((cryptoAlgorithm) => cryptoAlgorithm.algorithm != newCryptoAlgo.algorithm)) {
129
+ versionTarget.cryptography.push(newCryptoAlgo);
130
+ }
131
+ });
132
+ //recalculate quality average in case we have a quality value
133
+ if (qualityValue) {
134
+ versionTarget.quality.count++;
135
+ versionTarget.quality.sum += Number(qualityValue);
136
+ versionTarget.quality.scoreAvg =
137
+ versionTarget.quality.sum / versionTarget.quality.count;
138
+ }
139
+ }
140
+ else {
141
+ //newComponent version is not included in the component with same purl key
142
+ componentTarget.versions = componentTarget.versions.concat(newComponent.versions);
143
+ }
144
+ }
145
+ else
146
+ componentLayer.push(newComponent);
147
+ }
148
+ catch (e) {
149
+ console.error(`Problem inserting new component building Component Data Layer - `, e);
150
+ }
151
+ }
152
+ //Replace [] for null in versions
153
+ for (let i = 0; i < componentLayer.length; i++) {
154
+ if (!componentLayer[i].health)
155
+ componentLayer[i].health = null;
156
+ componentLayer[i].versions.forEach((version) => {
157
+ if (version.copyrights?.length == 0)
158
+ version.copyrights = null;
159
+ if (version.licenses?.length == 0)
160
+ version.licenses = null;
161
+ if (version.cryptography?.length === 0)
162
+ version.cryptography = null;
163
+ if (version.quality.count === 0)
164
+ version.quality = null;
165
+ });
166
+ }
167
+ return componentLayer;
168
+ }
169
+ }
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50RGF0YVByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3Nkay9SZXBvcnQvRGF0YUxheWVyL0RhdGFQcm92aWRlcnMvQ29tcG9uZW50RGF0YVByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE1BQU0sT0FBTyxxQkFBcUI7SUFPaEMsWUFDRSxjQUE4QixFQUM5QixZQUFrQztRQUVsQyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRU0sWUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTztRQUNsQixNQUFNLGNBQWMsR0FBZ0IsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU8sY0FBYyxDQUFDO1FBRXRFLHFGQUFxRjtRQUNyRixtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUM1QyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQ3ZDLENBQUM7UUFDRixNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FDM0QsSUFBSSxDQUFDLGFBQWEsQ0FDbkIsQ0FBQztRQUNGLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUNyRSxJQUFJLENBQUMsWUFBWSxDQUNsQixDQUFDO1FB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
@@ -1,9 +1,9 @@
1
1
  import { DataProvider, IDataLayers, DependencyDataLayer } from '../DataLayerTypes';
2
- import { IDependencyResponse } from '../../Dependencies/DependencyTypes';
2
+ import { IDependencyResponse } from '../../../Dependencies/DependencyTypes';
3
3
  export declare class DependencyDataProvider implements DataProvider {
4
4
  private dependencies;
5
5
  constructor(dependencies: IDependencyResponse);
6
6
  getLayerName(): string;
7
- getData(): IDataLayers;
7
+ getData(): Promise<IDataLayers>;
8
8
  parseDependencyData(dependencies: IDependencyResponse): DependencyDataLayer[];
9
9
  }
@@ -0,0 +1,39 @@
1
+ export class DependencyDataProvider {
2
+ constructor(dependencies) {
3
+ this.dependencies = dependencies;
4
+ }
5
+ getLayerName() {
6
+ return this.constructor.name;
7
+ }
8
+ async getData() {
9
+ const dependencyLayer = { dependencies: null };
10
+ if (!this.dependencies)
11
+ return dependencyLayer;
12
+ const parsedDepLayer = this.parseDependencyData(this.dependencies);
13
+ dependencyLayer.dependencies = parsedDepLayer;
14
+ if (!dependencyLayer.dependencies.length)
15
+ dependencyLayer.dependencies = null;
16
+ return dependencyLayer;
17
+ }
18
+ parseDependencyData(dependencies) {
19
+ const dependencyLayer = [];
20
+ dependencies.filesList.forEach((file) => {
21
+ const newDependencies = [];
22
+ file.dependenciesList.forEach((dependency) => {
23
+ const newLicenses = [];
24
+ dependency.licensesList.forEach((license) => {
25
+ newLicenses.push({ name: license.name, spdxid: license.spdxId });
26
+ });
27
+ newDependencies.push({
28
+ purl: dependency.purl,
29
+ licenses: newLicenses,
30
+ version: dependency.version,
31
+ component: dependency.component,
32
+ });
33
+ });
34
+ dependencyLayer.push({ file: file.file, dependencies: newDependencies });
35
+ });
36
+ return dependencyLayer;
37
+ }
38
+ }
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeURhdGFQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9zZGsvUmVwb3J0L0RhdGFMYXllci9EYXRhUHJvdmlkZXJzL0RlcGVuZGVuY3lEYXRhUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsTUFBTSxPQUFPLHNCQUFzQjtJQUdqQyxZQUFZLFlBQWlDO1FBQzNDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFTSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLE1BQU0sZUFBZSxHQUFnQixFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM1RCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPLGVBQWUsQ0FBQztRQUMvQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25FLGVBQWUsQ0FBQyxZQUFZLEdBQUcsY0FBYyxDQUFDO1FBQzlDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLE1BQU07WUFDdEMsZUFBZSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFFdEMsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVNLG1CQUFtQixDQUN4QixZQUFpQztRQUVqQyxNQUFNLGVBQWUsR0FBK0IsRUFBRSxDQUFDO1FBRXZELFlBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEMsTUFBTSxlQUFlLEdBQXNCLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7Z0JBQzNDLE1BQU0sV0FBVyxHQUFtQixFQUFFLENBQUM7Z0JBQ3ZDLFVBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQzFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ25FLENBQUMsQ0FBQyxDQUFDO2dCQUNILGVBQWUsQ0FBQyxJQUFJLENBQUM7b0JBQ25CLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtvQkFDckIsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztvQkFDM0IsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTO2lCQUNoQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7Q0FDRiJ9
@@ -1,6 +1,6 @@
1
1
  import { DataProvider, IDataLayers } from '../DataLayerTypes';
2
- import { ScannerResults } from '../../scanner/ScannerTypes';
3
- import { IDependencyResponse } from '../../Dependencies/DependencyTypes';
2
+ import { ScannerResults } from '../../../scanner/ScannerTypes';
3
+ import { IDependencyResponse } from '../../../Dependencies/DependencyTypes';
4
4
  export declare class LicenseDataProvider implements DataProvider {
5
5
  private scanResults;
6
6
  private componentList;
@@ -9,10 +9,8 @@ export declare class LicenseDataProvider implements DataProvider {
9
9
  private licenseLayer;
10
10
  constructor(scanResults: ScannerResults, dependencies?: IDependencyResponse);
11
11
  getLayerName(): string;
12
- getData(): IDataLayers;
12
+ getData(): Promise<IDataLayers>;
13
13
  private updateLicenseStorageFromComponentList;
14
14
  private updateLicenseStorageFromDependencies;
15
- private updateIncompatibilities;
16
15
  private insertComponentIntoLicense;
17
- private unknownLicensesToEnd;
18
16
  }
@@ -0,0 +1,115 @@
1
+ export class LicenseDataProvider {
2
+ constructor(scanResults, dependencies) {
3
+ this.scanResults = scanResults;
4
+ this.dependencies = dependencies;
5
+ //Maps a license name to its own data
6
+ this.licenseStorage = {};
7
+ this.licenseLayer = [];
8
+ }
9
+ getLayerName() {
10
+ return this.constructor.name;
11
+ }
12
+ async getData() {
13
+ this.componentList = Object.values(this.scanResults).flat();
14
+ this.componentList = this.componentList.filter((component) => component.id !== 'none');
15
+ if (this.componentList.length > 0)
16
+ this.updateLicenseStorageFromComponentList();
17
+ if (this.dependencies && this.dependencies.filesList.length > 0)
18
+ this.updateLicenseStorageFromDependencies();
19
+ this.licenseLayer = Object.values(this.licenseStorage);
20
+ this.licenseLayer.sort((itemA, itemB) => {
21
+ if (itemA.value > itemB.value)
22
+ return -1;
23
+ else if (itemA.value < itemB.value)
24
+ return 1;
25
+ return 0;
26
+ });
27
+ return { licenses: this.licenseLayer };
28
+ }
29
+ //Gets all license from the result of scan and stores in this.licenseStorage map
30
+ updateLicenseStorageFromComponentList() {
31
+ this.componentList.forEach((component) => {
32
+ component.licenses.forEach((license) => {
33
+ const newLicenseComponent = {};
34
+ newLicenseComponent.purl = component.purl[0];
35
+ newLicenseComponent.vendor = component.vendor;
36
+ newLicenseComponent.versions = [component.version];
37
+ newLicenseComponent.name = component.component;
38
+ newLicenseComponent.url = component.url;
39
+ const licenseExist = !!this.licenseStorage[license.name];
40
+ if (!licenseExist) {
41
+ const newLicense = {};
42
+ newLicense.value = 1;
43
+ newLicense.label = license.name;
44
+ newLicense.components = [newLicenseComponent];
45
+ this.licenseStorage[license.name] = newLicense;
46
+ }
47
+ else {
48
+ this.licenseStorage[license.name] = this.insertComponentIntoLicense(this.licenseStorage[license.name], newLicenseComponent);
49
+ }
50
+ });
51
+ });
52
+ }
53
+ //Gets all licenses from results of dependency analysis
54
+ updateLicenseStorageFromDependencies() {
55
+ this.dependencies.filesList.forEach((file) => {
56
+ file.dependenciesList.forEach((dependency) => {
57
+ dependency.licensesList.forEach((license) => {
58
+ const newLicenseComponent = {};
59
+ newLicenseComponent.purl = dependency.purl;
60
+ newLicenseComponent.versions = [dependency.version];
61
+ newLicenseComponent.name = dependency.component;
62
+ newLicenseComponent.vendor = null;
63
+ newLicenseComponent.url = null;
64
+ if (license.spdxId !== '') {
65
+ license.spdxId.split(/;|\//g).forEach((license_name) => {
66
+ const licenseExist = !!this.licenseStorage[license_name];
67
+ if (!licenseExist) {
68
+ const newLicense = {};
69
+ newLicense.value = 1;
70
+ newLicense.label = license_name;
71
+ newLicense.components = [newLicenseComponent];
72
+ this.licenseStorage[license_name] = newLicense;
73
+ }
74
+ else {
75
+ this.licenseStorage[license_name] =
76
+ this.insertComponentIntoLicense(this.licenseStorage[license_name], newLicenseComponent);
77
+ }
78
+ });
79
+ }
80
+ else {
81
+ // Unknown license
82
+ const licenseExist = !!this.licenseStorage['unknown'];
83
+ if (!licenseExist) {
84
+ const newLicense = {};
85
+ newLicense.value = 1;
86
+ newLicense.label = 'unknown';
87
+ newLicense.components = [newLicenseComponent];
88
+ this.licenseStorage['unknown'] = newLicense;
89
+ }
90
+ else {
91
+ this.licenseStorage['unknown'] = this.insertComponentIntoLicense(this.licenseStorage['unknown'], newLicenseComponent);
92
+ }
93
+ }
94
+ });
95
+ });
96
+ });
97
+ }
98
+ insertComponentIntoLicense(license, newComponent) {
99
+ const componentIndex = license.components.findIndex((c) => c.purl === newComponent.purl);
100
+ if (componentIndex >= 0) {
101
+ //if newComponent exist in license
102
+ const versionExist = !!license.components[componentIndex].versions.find((version) => version === newComponent.versions[0]);
103
+ if (!versionExist) {
104
+ license.components[componentIndex].versions.push(newComponent.versions[0]);
105
+ license.value++;
106
+ }
107
+ }
108
+ else {
109
+ license.components.push(newComponent);
110
+ license.value++;
111
+ }
112
+ return license;
113
+ }
114
+ }
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGljZW5zZURhdGFQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9zZGsvUmVwb3J0L0RhdGFMYXllci9EYXRhUHJvdmlkZXJzL0xpY2Vuc2VEYXRhUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWUEsTUFBTSxPQUFPLG1CQUFtQjtJQVc5QixZQUFZLFdBQTJCLEVBQUUsWUFBa0M7UUFDekUsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFFakMscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FDNUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUN2QyxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQy9CLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxDQUFDO1FBRS9DLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUM3RCxJQUFJLENBQUMsb0NBQW9DLEVBQUUsQ0FBQztRQUU5QyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0s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
@@ -0,0 +1,13 @@
1
+ import { DataProvider, IDataLayers } from '../DataLayerTypes';
2
+ import { ScannerResults } from '../../../scanner/ScannerTypes';
3
+ import { IDependencyResponse } from '../../../Dependencies/DependencyTypes';
4
+ export declare class LicenseObligationDataProvider implements DataProvider {
5
+ private scanResults;
6
+ private dependencies;
7
+ private licenseLayer;
8
+ private componentList;
9
+ private licenseSet;
10
+ constructor(scanResults: ScannerResults, dependencies?: IDependencyResponse);
11
+ getLayerName(): string;
12
+ getData(): Promise<IDataLayers>;
13
+ }
@@ -0,0 +1,60 @@
1
+ export class LicenseObligationDataProvider {
2
+ constructor(scanResults, dependencies) {
3
+ this.scanResults = scanResults;
4
+ this.dependencies = dependencies;
5
+ //Maps a license name to its own data
6
+ this.licenseSet = {};
7
+ this.licenseLayer = [];
8
+ }
9
+ getLayerName() {
10
+ return 'License Obligation Layer';
11
+ }
12
+ async getData() {
13
+ /* Get licenses from Scan Results */
14
+ this.componentList = Object.values(this.scanResults).flat();
15
+ this.componentList = this.componentList.filter((component) => component.id !== 'none');
16
+ if (this.componentList.length > 0) {
17
+ this.componentList.forEach((component) => {
18
+ component.licenses.forEach((license) => {
19
+ if (!this.licenseSet[license.name]) {
20
+ this.licenseSet[license.name] = {
21
+ copyleft: license.copyleft?.toLowerCase() === 'yes' ? true : false,
22
+ label: license.name,
23
+ hasIncompatibles: [],
24
+ incompatibleWith: license.incompatible_with
25
+ ? license.incompatible_with.split('')
26
+ : [],
27
+ };
28
+ }
29
+ });
30
+ });
31
+ }
32
+ /* Get licenses from Dependencies Results */
33
+ if (this.dependencies && this.dependencies.filesList.length > 0) {
34
+ this.dependencies.filesList.forEach((file) => {
35
+ file.dependenciesList.forEach((dependency) => {
36
+ dependency.licensesList.forEach((license) => {
37
+ license.spdxId?.split(/;|\//g).forEach((spdxid) => {
38
+ if (spdxid !== '' && !this.licenseSet[spdxid]) {
39
+ this.licenseSet[spdxid] = {
40
+ copyleft: false,
41
+ label: spdxid,
42
+ hasIncompatibles: [],
43
+ incompatibleWith: [],
44
+ };
45
+ }
46
+ });
47
+ });
48
+ });
49
+ });
50
+ }
51
+ const allSpdxid = Object.keys(this.licenseSet);
52
+ const allLicenses = Object.values(this.licenseSet);
53
+ const licensesObligations = allLicenses.map((l) => {
54
+ l.incompatibleWith = l.incompatibleWith.filter((spdxid) => allSpdxid.includes(spdxid));
55
+ return l;
56
+ });
57
+ return { licensesObligations };
58
+ }
59
+ }
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGljZW5zZU9ibGlnYXRpb25EYXRhUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvc2RrL1JlcG9ydC9EYXRhTGF5ZXIvRGF0YVByb3ZpZGVycy9MaWNlbnNlT2JsaWdhdGlvbkRhdGFQcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFhQSxNQUFNLE9BQU8sNkJBQTZCO0lBUXhDLFlBQVksV0FBMkIsRUFBRSxZQUFrQztRQUN6RSxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUVqQyxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVNLFlBQVk7UUFDakIsT0FBTywwQkFBMEIsQ0FBQztJQUNwQyxDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQU87UUFDbEIsb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FDNUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUN2QyxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDdkMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRzs0QkFDOUIsUUFBUSxFQUNOLE9BQU8sQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7NEJBQzFELEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSTs0QkFDbkIsZ0JBQWdCLEVBQUUsRUFBRTs0QkFDcEIsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLGlCQUFpQjtnQ0FDekMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dDQUNyQyxDQUFDLENBQUMsRUFBRTt5QkFDUCxDQUFDO3FCQUNIO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELDRDQUE0QztRQUM1QyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvRCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO29CQUMzQyxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO3dCQUMxQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTs0QkFDaEQsSUFBSSxNQUFNLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQ0FDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRztvQ0FDeEIsUUFBUSxFQUFFLEtBQUs7b0NBQ2YsS0FBSyxFQUFFLE1BQU07b0NBQ2IsZ0JBQWdCLEVBQUUsRUFBRTtvQ0FDcEIsZ0JBQWdCLEVBQUUsRUFBRTtpQ0FDckIsQ0FBQzs2QkFDSDt3QkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVuRCxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNoRCxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ3hELFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQzNCLENBQUM7WUFDRixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxFQUFFLG1CQUFtQixFQUFpQixDQUFDO0lBQ2hELENBQUM7Q0FDRiJ9
@@ -1,11 +1,13 @@
1
1
  import { DataProvider, IDataLayers } from '../DataLayerTypes';
2
- import { ScannerResults } from '../../scanner/ScannerTypes';
2
+ import { ScannerResults } from '../../../scanner/ScannerTypes';
3
3
  export declare class SummaryDataProvider implements DataProvider {
4
4
  private scannerResults;
5
5
  private summary;
6
6
  private projectName;
7
7
  private projectCreateAt;
8
+ private reportTitle;
8
9
  constructor(projectName: string, projectCreatedAt: Date, scannerResults: ScannerResults);
9
10
  getLayerName(): string;
10
- getData(): IDataLayers;
11
+ getData(): Promise<IDataLayers>;
12
+ getReportTitle(): string;
11
13
  }
@@ -0,0 +1,35 @@
1
+ import { ScannerComponentId, } from '../../../scanner/ScannerTypes';
2
+ export class SummaryDataProvider {
3
+ constructor(projectName, projectCreatedAt, scannerResults) {
4
+ this.reportTitle = 'Detected Report';
5
+ this.scannerResults = scannerResults;
6
+ this.projectName = projectName;
7
+ this.projectCreateAt = projectCreatedAt;
8
+ this.summary = {};
9
+ }
10
+ getLayerName() {
11
+ return this.constructor.name;
12
+ }
13
+ async getData() {
14
+ this.summary.projectName = this.projectName;
15
+ this.summary.timestamp = this.projectCreateAt;
16
+ this.summary.totalFiles = 0;
17
+ this.summary.noMatchFiles = 0;
18
+ this.summary.matchedFiles = 0;
19
+ this.summary.reportTitle = this.getReportTitle();
20
+ for (const [file, components] of Object.entries(this.scannerResults)) {
21
+ components.forEach((component) => {
22
+ if (component.id == ScannerComponentId.NONE)
23
+ this.summary.noMatchFiles++;
24
+ else
25
+ this.summary.matchedFiles++;
26
+ this.summary.totalFiles++;
27
+ });
28
+ }
29
+ return { summary: this.summary };
30
+ }
31
+ getReportTitle() {
32
+ return this.reportTitle;
33
+ }
34
+ }
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3VtbWFyeURhdGFQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9zZGsvUmVwb3J0L0RhdGFMYXllci9EYXRhUHJvdmlkZXJzL1N1bW1hcnlEYXRhUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUVMLGtCQUFrQixHQUVuQixNQUFNLCtCQUErQixDQUFDO0FBRXZDLE1BQU0sT0FBTyxtQkFBbUI7SUFVOUIsWUFDRSxXQUFtQixFQUNuQixnQkFBc0IsRUFDdEIsY0FBOEI7UUFKeEIsZ0JBQVcsR0FBVyxpQkFBaUIsQ0FBQztRQU05QyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsZUFBZSxHQUFHLGdCQUFnQixDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQXFCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRU0sWUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTztRQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRWpELEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUNwRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQy9CLElBQUksU0FBUyxDQUFDLEVBQUUsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJO29CQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDOztvQkFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBb0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFTSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0NBQ0YifQ==
@@ -1,8 +1,14 @@
1
- import { DataProviderManager } from '../../sdk/DataLayer/DataProviderManager';
1
+ import { DataProviderManager } from './DataLayer/DataProviderManager';
2
2
  export declare class Report {
3
3
  private dataProviderManager;
4
4
  private dataLayer;
5
+ private report;
6
+ private templatePath;
7
+ private dataPlaceholder;
5
8
  constructor(dpm?: DataProviderManager);
6
9
  setDataProviderManager(dpm: DataProviderManager): void;
10
+ setTemplatePath(filePath: string): void;
11
+ getTemplatePath(): string;
7
12
  getHTML(): Promise<string>;
13
+ saveToFile(fsPath: string): Promise<void>;
8
14
  }
@@ -1,20 +1,33 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
- import { DataProviderManager } from '../../sdk/DataLayer/DataProviderManager';
4
- const reportDefaultPath = path.join(__dirname, "../../../../assets/ReportHTMLTemplate/index.html");
3
+ import { DataProviderManager } from './DataLayer/DataProviderManager';
5
4
  export class Report {
6
5
  constructor(dpm = new DataProviderManager()) {
6
+ this.templatePath = path.join(__dirname, '../../../../assets/ReportHTMLTemplate/index.html');
7
+ this.dataPlaceholder = '#DATA';
7
8
  this.dataProviderManager = dpm;
8
9
  }
9
10
  setDataProviderManager(dpm) {
10
11
  this.dataProviderManager = dpm;
11
12
  }
13
+ setTemplatePath(filePath) {
14
+ this.templatePath = filePath;
15
+ }
16
+ getTemplatePath() {
17
+ return this.templatePath;
18
+ }
12
19
  async getHTML() {
13
- this.dataLayer = this.dataProviderManager.generateData();
14
- const html = (await fs.promises.readFile(reportDefaultPath, 'utf-8'));
20
+ this.dataLayer = await this.dataProviderManager.generateData();
21
+ const html = await fs.promises.readFile(this.getTemplatePath(), 'utf-8');
15
22
  if (!html)
16
23
  throw new Error('Invalid template path');
17
- return html.replace('#DATA', JSON.stringify(this.dataLayer));
24
+ if (!html.includes(this.dataPlaceholder))
25
+ throw new Error(`Placeholder ${this.dataPlaceholder} not found, cannot insert the data`);
26
+ this.report = html.replace(this.dataPlaceholder, JSON.stringify(this.dataLayer).replace(/\\\"/g, '\\\\u0022'));
27
+ return this.report;
28
+ }
29
+ async saveToFile(fsPath) {
30
+ return await fs.promises.writeFile(fsPath, this.report, 'utf-8');
18
31
  }
19
32
  }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Nkay9SZXBvcnQvUmVwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFJOUUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBQyxrREFBa0QsQ0FBQyxDQUFDO0FBRWxHLE1BQU0sT0FBTyxNQUFNO0lBTWpCLFlBQVksTUFBMkIsSUFBSSxtQkFBbUIsRUFBRTtRQUM5RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxHQUF3QjtRQUNwRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTztRQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6RCxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUN0RSxJQUFHLENBQUMsSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztDQUVGIn0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Nkay9SZXBvcnQvUmVwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHdEUsTUFBTSxPQUFPLE1BQU07SUFhakIsWUFBWSxNQUEyQixJQUFJLG1CQUFtQixFQUFFO1FBTnhELGlCQUFZLEdBQVcsSUFBSSxDQUFDLElBQUksQ0FDdEMsU0FBUyxFQUNULGtEQUFrRCxDQUNuRCxDQUFDO1FBRU0sb0JBQWUsR0FBVyxPQUFPLENBQUM7UUFFeEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztJQUNqQyxDQUFDO0lBRU0sc0JBQXNCLENBQUMsR0FBd0I7UUFDcEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztJQUNqQyxDQUFDO0lBRU0sZUFBZSxDQUFDLFFBQWdCO1FBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDO0lBQy9CLENBQUM7SUFFTSxlQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQU87UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvRCxNQUFNLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQ2IsZUFBZSxJQUFJLENBQUMsZUFBZSxvQ0FBb0MsQ0FDeEUsQ0FBQztRQUNKLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FDeEIsSUFBSSxDQUFDLGVBQWUsRUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FDN0QsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFjO1FBQ3BDLE9BQU8sTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuRSxDQUFDO0NBQ0YifQ==
@@ -0,0 +1,18 @@
1
+ import * as grpc from '@grpc/grpc-js';
2
+ import * as CommonMessages from './scanoss/api/common/v2/scanoss-common_pb';
3
+ export interface PurlRequest extends CommonMessages.PurlRequest.AsObject {
4
+ }
5
+ export interface EchoRequest extends CommonMessages.EchoRequest.AsObject {
6
+ }
7
+ export declare class BaseService {
8
+ protected GRPC_ENDPOINT: string;
9
+ protected API_TOKEN: string;
10
+ protected IS_PREMIUM_SERVICE: boolean;
11
+ protected SERVICE_NAME: string;
12
+ protected handleResponse(response: {
13
+ status: CommonMessages.StatusResponse.AsObject;
14
+ }): {};
15
+ protected buildGRPCPurlRequest(purlRequest: PurlRequest): CommonMessages.PurlRequest;
16
+ protected buildGRPCEchoRequest(echoRequest: EchoRequest): CommonMessages.EchoRequest;
17
+ protected generateChannelCredentials(): grpc.ChannelCredentials;
18
+ }