scanoss 0.5.7 → 0.6.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 (66) hide show
  1. package/.idea/workspace.xml +29 -19
  2. package/build/main/cli/bin/cli-bin.js +1 -1
  3. package/build/main/sdk/Dependencies/LocalDependency/DependencyTypes.d.ts +1 -1
  4. package/build/main/sdk/Dependencies/LocalDependency/LocalDependency.js +4 -2
  5. package/build/main/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.d.ts +2 -0
  6. package/build/main/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.js +95 -0
  7. package/build/main/sdk/Dependencies/LocalDependency/parsers/golangParser.d.ts +2 -2
  8. package/build/main/sdk/Dependencies/LocalDependency/parsers/golangParser.js +5 -5
  9. package/build/main/sdk/Dependencies/LocalDependency/parsers/mavenParser.d.ts +1 -1
  10. package/build/main/sdk/Dependencies/LocalDependency/parsers/mavenParser.js +4 -3
  11. package/build/main/sdk/Dependencies/LocalDependency/parsers/npmParser.d.ts +5 -5
  12. package/build/main/sdk/Dependencies/LocalDependency/parsers/npmParser.js +11 -10
  13. package/build/main/sdk/Dependencies/LocalDependency/parsers/nugetParser.d.ts +2 -2
  14. package/build/main/sdk/Dependencies/LocalDependency/parsers/nugetParser.js +4 -4
  15. package/build/main/sdk/Dependencies/LocalDependency/parsers/pyParser.d.ts +1 -1
  16. package/build/main/sdk/Dependencies/LocalDependency/parsers/pyParser.js +3 -3
  17. package/build/main/sdk/Dependencies/LocalDependency/parsers/rubyParser.d.ts +2 -2
  18. package/build/main/sdk/Dependencies/LocalDependency/parsers/rubyParser.js +5 -5
  19. package/build/main/sdk/scanner/Dispatcher/Dispatcher.js +1 -2
  20. package/build/main/sdk/scanner/Scanner.d.ts +12 -12
  21. package/build/main/sdk/scanner/Scanner.js +7 -4
  22. package/build/main/tsconfig.tsbuildinfo +35 -20
  23. package/build/module/cli/bin/cli-bin.js +1 -1
  24. package/build/module/sdk/Dependencies/LocalDependency/DependencyTypes.d.ts +1 -1
  25. package/build/module/sdk/Dependencies/LocalDependency/LocalDependency.js +4 -2
  26. package/build/module/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.d.ts +2 -0
  27. package/build/module/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.js +87 -0
  28. package/build/module/sdk/Dependencies/LocalDependency/parsers/golangParser.d.ts +2 -2
  29. package/build/module/sdk/Dependencies/LocalDependency/parsers/golangParser.js +5 -5
  30. package/build/module/sdk/Dependencies/LocalDependency/parsers/mavenParser.d.ts +1 -1
  31. package/build/module/sdk/Dependencies/LocalDependency/parsers/mavenParser.js +4 -3
  32. package/build/module/sdk/Dependencies/LocalDependency/parsers/npmParser.d.ts +5 -5
  33. package/build/module/sdk/Dependencies/LocalDependency/parsers/npmParser.js +11 -10
  34. package/build/module/sdk/Dependencies/LocalDependency/parsers/nugetParser.d.ts +2 -2
  35. package/build/module/sdk/Dependencies/LocalDependency/parsers/nugetParser.js +4 -4
  36. package/build/module/sdk/Dependencies/LocalDependency/parsers/pyParser.d.ts +1 -1
  37. package/build/module/sdk/Dependencies/LocalDependency/parsers/pyParser.js +3 -3
  38. package/build/module/sdk/Dependencies/LocalDependency/parsers/rubyParser.d.ts +2 -2
  39. package/build/module/sdk/Dependencies/LocalDependency/parsers/rubyParser.js +5 -5
  40. package/build/module/sdk/scanner/Dispatcher/Dispatcher.js +1 -2
  41. package/build/module/sdk/scanner/Scanner.d.ts +12 -12
  42. package/build/module/sdk/scanner/Scanner.js +7 -4
  43. package/build/module/tsconfig.module.tsbuildinfo +35 -20
  44. package/package.json +1 -1
  45. package/src/cli/bin/cli-bin.ts +1 -1
  46. package/src/sdk/Dependencies/LocalDependency/DependencyTypes.ts +1 -1
  47. package/src/sdk/Dependencies/LocalDependency/LocalDependency.ts +4 -1
  48. package/src/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.ts +115 -0
  49. package/src/sdk/Dependencies/LocalDependency/parsers/golangParser.ts +6 -6
  50. package/src/sdk/Dependencies/LocalDependency/parsers/mavenParser.ts +4 -3
  51. package/src/sdk/Dependencies/LocalDependency/parsers/npmParser.ts +16 -15
  52. package/src/sdk/Dependencies/LocalDependency/parsers/nugetParser.ts +5 -5
  53. package/src/sdk/Dependencies/LocalDependency/parsers/pyParser.ts +3 -3
  54. package/src/sdk/Dependencies/LocalDependency/parsers/rubyParser.ts +6 -6
  55. package/src/sdk/scanner/Dispatcher/Dispatcher.ts +0 -1
  56. package/src/sdk/scanner/Scanner.ts +21 -17
  57. package/tests/sdk/Dependencies/LocalDependency/Parsers/buildGradle.spec.ts +48 -0
  58. package/tests/sdk/Dependencies/LocalDependency/Parsers/golangParser.spec.ts +4 -4
  59. package/tests/sdk/Dependencies/LocalDependency/Parsers/npmParser.spec.ts +14 -14
  60. package/tests/sdk/Dependencies/LocalDependency/Parsers/nugetParser.spec.ts +10 -7
  61. package/tests/sdk/Dependencies/LocalDependency/Parsers/pomParser.spec.ts +2 -2
  62. package/tests/sdk/Dependencies/LocalDependency/Parsers/samples/gradle/1/build.gradle +26 -0
  63. package/tests/sdk/Dependencies/LocalDependency/Parsers/samples/gradle/2/build.gradle +16 -0
  64. package/tests/sdk/Dependencies/LocalDependency/Parsers/samples/yarn-lock/generate_expected_output.sh +1 -1
  65. package/yarn.lock +7 -0
  66. package/package-lock.json +0 -17030
@@ -527,7 +527,7 @@
527
527
  "affectsGlobalScope": false
528
528
  },
529
529
  "../../src/sdk/scanner/Dispatcher/Dispatcher.ts": {
530
- "version": "22dd6f2a5b8315c16b59f1285d4ffc3c5095fd03422e9a5ba35daf96d873265c",
530
+ "version": "c0e48eb8ea6f97d7433648377d3f2a32815b302422d64f6b736422a722ca249e",
531
531
  "signature": "060f7710dc3ecddc5678e67a21cdfdb67bb3a7ca2632a0f4d3305e20fb71595c",
532
532
  "affectsGlobalScope": false
533
533
  },
@@ -552,8 +552,8 @@
552
552
  "affectsGlobalScope": false
553
553
  },
554
554
  "../../src/sdk/scanner/Scanner.ts": {
555
- "version": "63747e3d29d2198573344612198558ddff999dd26969581404f22a5fc44d6c4c",
556
- "signature": "33c0b9bba28cd75f3849a9c7a3f744127b8b82a2f0ab6f0433c58676428d278d",
555
+ "version": "8b2de158c5298c4040d61de6c577bb2691793048483f342456fcbaa2297321d3",
556
+ "signature": "8b6c6e21d6e4c91ad92cfe30b13cb928c806b893ec1c6952cf58fc3b4ac74925",
557
557
  "affectsGlobalScope": false
558
558
  },
559
559
  "../../src/sdk/Dependencies/DependencyTypes.ts": {
@@ -567,8 +567,8 @@
567
567
  "affectsGlobalScope": false
568
568
  },
569
569
  "../../src/sdk/Dependencies/LocalDependency/DependencyTypes.ts": {
570
- "version": "f1a4f6f3fb1e433d7217b2d67d9f760dbe587628a87d12f701d8e08786691473",
571
- "signature": "84922ec028c922e8e140c2173c1d1c9847075724ae1e29b5be4c4692d41e3725",
570
+ "version": "97bc88c00e7f7b15c0b3c2abd28920cc4ee01d994bd80e604191982198fac839",
571
+ "signature": "219c0332248e4d656e2a66b8e85d073b773f26fed90809fdda2db372b17f142e",
572
572
  "affectsGlobalScope": false
573
573
  },
574
574
  "../../node_modules/@grpc/grpc-js/build/src/metadata.d.ts": {
@@ -997,28 +997,28 @@
997
997
  "affectsGlobalScope": false
998
998
  },
999
999
  "../../src/sdk/Dependencies/LocalDependency/parsers/pyParser.ts": {
1000
- "version": "1f7e79bdaa7a123838776483f417eb3262312b766a5e1f2080fe054559108174",
1001
- "signature": "960d2bc987adc163b5279f705a6f328273327958e37ea33a73dc8f3a9c961baa",
1000
+ "version": "8731a14b6efeb98c379502e89bce1215f960a2b455931d53cd4c6fa86cadd064",
1001
+ "signature": "60a2d5fa0cc89f7dc1f0fadec78c4aec40e1711796650bfaf01e4d72afd12653",
1002
1002
  "affectsGlobalScope": false
1003
1003
  },
1004
1004
  "../../src/sdk/Dependencies/LocalDependency/parsers/mavenParser.ts": {
1005
- "version": "17340660eacbbd7a938d49b2a860ac8bc158819dd648bf12300b1624cce53412",
1006
- "signature": "d76692a60f75532369ef01f17adce560f200588001779b17bea72e8838f05c65",
1005
+ "version": "90fcbe4a637dfc6c47afe4894f778561c80828d173d6d287675d5c0932501387",
1006
+ "signature": "e1867fe84d4367ae35b518735018ed9500236d2b8025730a9a583d6dbeb250f8",
1007
1007
  "affectsGlobalScope": false
1008
1008
  },
1009
1009
  "../../src/sdk/Dependencies/LocalDependency/parsers/npmParser.ts": {
1010
- "version": "1082b627a88df0fd0e320e143e32618d7387ca5b2cf87a321679770cf2230d92",
1011
- "signature": "5d59ccb2986c9f40ed0be0aa2dd393f94d4fb82de307336af405cca5fb61f9f0",
1010
+ "version": "373fe307703f18152a11b3a4cbdd6e0c9b5e8e180951a405ff372858a79f0a64",
1011
+ "signature": "42f317f68c7debfec90d4435f03d13069d06e1150e89d09041951cc4da9c49b2",
1012
1012
  "affectsGlobalScope": false
1013
1013
  },
1014
1014
  "../../src/sdk/Dependencies/LocalDependency/parsers/rubyParser.ts": {
1015
- "version": "88382d6080687a3b1fecc11fdde83e7e9aae5cb36f94d861195a10a89155525f",
1016
- "signature": "6f41a90738bec7303c47dc8b0bea830bfe5209f0c348240898f06765cd7e1e7f",
1015
+ "version": "ba96c46b7dbec51bd0e022c61677a6beae63f2af0c017188cbf73ad0a2b92b20",
1016
+ "signature": "d7cf3d36988a27b67513ed325168938038babd43a260c7bdf501dd3368e4de98",
1017
1017
  "affectsGlobalScope": false
1018
1018
  },
1019
1019
  "../../src/sdk/Dependencies/LocalDependency/parsers/golangParser.ts": {
1020
- "version": "1e413d859791cc795ffc28506db761f8b5b74f3ab335cc9aa9e3f20b131d003c",
1021
- "signature": "8207472fb82d3f0accb54c1fdb3d28515ac837b8026973faf5721622b7eb24e6",
1020
+ "version": "f7f52b8132533c6199aa2024a1345f839020c6a0e3b08056c1f4b688a023f553",
1021
+ "signature": "a3c3cf8ad915027c8112973f3d2aacd8faca3b117732e61e97bab6663fdfb190",
1022
1022
  "affectsGlobalScope": false
1023
1023
  },
1024
1024
  "../../node_modules/xml-js/types/index.d.ts": {
@@ -1027,12 +1027,17 @@
1027
1027
  "affectsGlobalScope": false
1028
1028
  },
1029
1029
  "../../src/sdk/Dependencies/LocalDependency/parsers/nugetParser.ts": {
1030
- "version": "84046eb4f484e9856e500d425f8a658f69e7df19a56c8ca8d923b1b0c6dc143c",
1031
- "signature": "8897c55586c566f99ab3895257777e234ca08def80d523b63471f34b6bc870a3",
1030
+ "version": "0b7590b7f965bbbc44d37b7aa25c0680ac83a3202ae1f4dcd1da24252ee9da23",
1031
+ "signature": "3edc8c93883a02c7ba71d31afb26d6affe4367b411d5db2779b76c21cbead170",
1032
+ "affectsGlobalScope": false
1033
+ },
1034
+ "../../src/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.ts": {
1035
+ "version": "7615bd12f5dca897cfd5477583fffaabb21e4b9929d30dfb90e832bfa82e30bf",
1036
+ "signature": "5be0bf1b37a315973ea4791db74c473fccfc81e3b76bfea738c2dba011d6868b",
1032
1037
  "affectsGlobalScope": false
1033
1038
  },
1034
1039
  "../../src/sdk/Dependencies/LocalDependency/LocalDependency.ts": {
1035
- "version": "9f77db90ec485557fbd2182750f4b8b79547875ad7008eab6116feda415df307",
1040
+ "version": "fbd412a873faf06f15d60c02dd2f556165150e4b13fb42b669e06952684dc786",
1036
1041
  "signature": "839144fdad988ceefaf7893c3554b9a7ac98f67a736a070443e52c0f9ca77663",
1037
1042
  "affectsGlobalScope": false
1038
1043
  },
@@ -1197,7 +1202,7 @@
1197
1202
  "affectsGlobalScope": false
1198
1203
  },
1199
1204
  "../../src/cli/bin/cli-bin.ts": {
1200
- "version": "3e1cc746fa9225655306723d4d6626fb3a6c1b16f7dbdf5ea7bec585d788679d",
1205
+ "version": "70926ff24ff0a5dafacab5124fc427d99384049bde65c2d991e27e1717ebfbfc",
1201
1206
  "signature": "43e818adf60173644896298637f47b01d5819b17eda46eaa32d0c7d64724d012",
1202
1207
  "affectsGlobalScope": false
1203
1208
  },
@@ -2451,6 +2456,7 @@
2451
2456
  "../../node_modules/@types/node/path.d.ts",
2452
2457
  "../../node_modules/@types/node/util.d.ts",
2453
2458
  "../../src/sdk/Dependencies/LocalDependency/DependencyTypes.ts",
2459
+ "../../src/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.ts",
2454
2460
  "../../src/sdk/Dependencies/LocalDependency/parsers/golangParser.ts",
2455
2461
  "../../src/sdk/Dependencies/LocalDependency/parsers/mavenParser.ts",
2456
2462
  "../../src/sdk/Dependencies/LocalDependency/parsers/npmParser.ts",
@@ -2458,6 +2464,12 @@
2458
2464
  "../../src/sdk/Dependencies/LocalDependency/parsers/pyParser.ts",
2459
2465
  "../../src/sdk/Dependencies/LocalDependency/parsers/rubyParser.ts"
2460
2466
  ],
2467
+ "../../src/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.ts": [
2468
+ "../../node_modules/@types/node/path.d.ts",
2469
+ "../../node_modules/@types/node/util.d.ts",
2470
+ "../../node_modules/packageurl-js/src/package-url.d.ts",
2471
+ "../../src/sdk/Dependencies/LocalDependency/DependencyTypes.ts"
2472
+ ],
2461
2473
  "../../src/sdk/Dependencies/LocalDependency/parsers/golangParser.ts": [
2462
2474
  "../../node_modules/@types/node/path.d.ts",
2463
2475
  "../../node_modules/@types/node/util.d.ts",
@@ -3780,6 +3792,9 @@
3780
3792
  "../../src/sdk/Dependencies/LocalDependency/LocalDependency.ts": [
3781
3793
  "../../src/sdk/Dependencies/LocalDependency/DependencyTypes.ts"
3782
3794
  ],
3795
+ "../../src/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.ts": [
3796
+ "../../src/sdk/Dependencies/LocalDependency/DependencyTypes.ts"
3797
+ ],
3783
3798
  "../../src/sdk/Dependencies/LocalDependency/parsers/golangParser.ts": [
3784
3799
  "../../src/sdk/Dependencies/LocalDependency/DependencyTypes.ts"
3785
3800
  ],
@@ -3864,7 +3879,6 @@
3864
3879
  ],
3865
3880
  "../../src/sdk/scanner/Scanner.ts": [
3866
3881
  "../../node_modules/eventemitter3/index.d.ts",
3867
- "../../src/sdk/scanner/Dispatcher/DispatcherResponse.ts",
3868
3882
  "../../src/sdk/scanner/ScannerCfg.ts",
3869
3883
  "../../src/sdk/scanner/ScannerTypes.ts"
3870
3884
  ],
@@ -4123,6 +4137,7 @@
4123
4137
  "../../src/sdk/Dependencies/DependencyTypes.ts",
4124
4138
  "../../src/sdk/Dependencies/LocalDependency/DependencyTypes.ts",
4125
4139
  "../../src/sdk/Dependencies/LocalDependency/LocalDependency.ts",
4140
+ "../../src/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.ts",
4126
4141
  "../../src/sdk/Dependencies/LocalDependency/parsers/golangParser.ts",
4127
4142
  "../../src/sdk/Dependencies/LocalDependency/parsers/mavenParser.ts",
4128
4143
  "../../src/sdk/Dependencies/LocalDependency/parsers/npmParser.ts",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scanoss",
3
- "version": "0.5.7",
3
+ "version": "0.6.0",
4
4
  "description": "The SCANOSS JS package provides a simple, easy to consume module for interacting with SCANOSS APIs/Engine.",
5
5
  "main": "build/main/index.js",
6
6
  "typings": "build/main/index.d.ts",
@@ -16,7 +16,7 @@ function CLIErrorHandler(e: Error) {
16
16
 
17
17
  async function main() {
18
18
  program
19
- .version("0.5.7")
19
+ .version("0.6.0")
20
20
  .description('The SCANOSS JS package provides a simple, easy to consume module for interacting with SCANOSS APIs/Engine.')
21
21
 
22
22
  program
@@ -14,7 +14,7 @@ export interface ILocalDependencies{
14
14
  }
15
15
 
16
16
  /* Parser funcion definition */
17
- export type ParserFuncType = (fileContent: string, filePath: string) => ILocalDependency;
17
+ export type ParserFuncType = (fileContent: string, filePath: string) => Promise<ILocalDependency>;
18
18
 
19
19
  export interface ParserDefinitions {
20
20
  [key: string]: ParserFuncType;
@@ -11,6 +11,7 @@ import {
11
11
  import { gemfilelockParser, gemfileParser } from "./parsers/rubyParser";
12
12
  import { goModParser, goSumParser } from './parsers/golangParser';
13
13
  import { csprojParser, packagesConfigParser } from './parsers/nugetParser';
14
+ import { buildGradleParser } from './parsers/buildGradleParser';
14
15
 
15
16
  export class LocalDependencies {
16
17
 
@@ -32,6 +33,7 @@ export class LocalDependencies {
32
33
  'yarn.lock': yarnLockParser,
33
34
  '*.csproj': csprojParser,
34
35
  'packages.config': packagesConfigParser,
36
+ 'build.gradle': buildGradleParser,
35
37
  };
36
38
 
37
39
  }
@@ -44,7 +46,7 @@ export class LocalDependencies {
44
46
  if(parser != null) {
45
47
  try {
46
48
  const fileContent = await fs.promises.readFile(filePath, 'utf8');
47
- const dependency = parser(fileContent, filePath);
49
+ const dependency = await parser(fileContent, filePath);
48
50
  if(dependency.purls.length != 0)
49
51
  results.files.push(dependency);
50
52
  } catch(e) {
@@ -66,6 +68,7 @@ export class LocalDependencies {
66
68
  //Check for a wildcard string match
67
69
  const filesPatterns = Object.keys(this.parserMap).filter((item) => item.includes("*"));
68
70
  for (const pattern of filesPatterns) {
71
+
69
72
  if (this.stringMatchWithWildcard(filename, pattern)) return this.parserMap[pattern];
70
73
  }
71
74
 
@@ -0,0 +1,115 @@
1
+ import { ILocalDependency } from '../DependencyTypes';
2
+ import path from 'path';
3
+ import { PackageURL } from 'packageurl-js';
4
+
5
+
6
+ const MANIFEST_FILE = 'build.gradle';
7
+ const depBlockRex = /dependencies\s*{\s*(?<dependencies>(.|\n)*?)}/gm;
8
+
9
+ enum GRADLE_STATES {
10
+ WALKING,
11
+ SINGLELINE_DEPENDENCY,
12
+ MULTILINE_DEPENDENCY
13
+ }
14
+ export async function buildGradleParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
15
+
16
+
17
+ // If the file is not a manifest file, return an empty results
18
+ const results: ILocalDependency = {file: filePath, purls: []};
19
+ if(path.basename(filePath) != MANIFEST_FILE)
20
+ return results;
21
+
22
+ //For each dependency block, generate purls
23
+ let gradle;
24
+ while ((gradle = depBlockRex.exec(fileContent)) !== null) {
25
+ let depBlock = gradle?.groups?.dependencies;
26
+
27
+
28
+ let current_config_name = ""; //Config name is placed in the scope
29
+ let lines = depBlock.split(/\r?\n/) as string;
30
+ for (let i = 0; i<lines.length; i++) {
31
+ let line = lines[i];
32
+
33
+ if (line.includes("//")) line = line.replace(/\/\/.*$/gm, "");
34
+ line = line.trim();
35
+ if (line == '') continue;
36
+
37
+
38
+ current_config_name = getConfigNameFromLine(line);
39
+
40
+ //Multiline dependency
41
+ if(current_config_name && line.includes("(")) {
42
+
43
+ while( i<lines.length && !lines[i].includes(")")) {
44
+ const componentData = createPurlNameFromLine(lines[i]);
45
+ if (componentData != null) {
46
+ results.purls.push({
47
+ purl: componentData.purlName,
48
+ requirement: componentData.version,
49
+ scope: current_config_name
50
+ });
51
+ }
52
+ i++;
53
+ }
54
+ current_config_name='';
55
+ } else { //Single line dependency
56
+ const componentData = createPurlNameFromLine(line);
57
+ if (componentData == null) {
58
+ current_config_name = '';
59
+ continue;
60
+ }
61
+
62
+ results.purls.push({purl: componentData.purlName, requirement: componentData.version, scope: current_config_name});
63
+ }
64
+
65
+ }
66
+
67
+
68
+ }
69
+
70
+ return Promise.resolve(results);
71
+
72
+ }
73
+
74
+ function getConfigNameFromLine(line): string {
75
+ let configName = ""
76
+
77
+ const dep = line.split(/\s/);
78
+ if (dep.length) configName = dep[0].replace("(", "").trim();
79
+
80
+ return configName;
81
+ }
82
+
83
+ //Takes a line and generate a purl when possible.
84
+ // There are three ways of declaring dependencies
85
+ interface componentData{
86
+ purlName: string;
87
+ version: string;
88
+ }
89
+
90
+ function createPurlNameFromLine(line: string): componentData {
91
+
92
+ let namespace = undefined;
93
+ let name = undefined;
94
+ let version = undefined;
95
+
96
+ //Enters when line = implementation 'org.scala-lang:scala-library:2.11.12'
97
+ let dep = line.match(/(?<namespace>[\w\.\-]+):(?<name>[\w\.\-]+):(?<version>[\d\.]+)/);
98
+ if (dep?.length) {
99
+ namespace = dep.groups.namespace
100
+ name = dep.groups.name
101
+ version = dep.groups.version
102
+ } else if (line.includes("group") && line.includes("name") && line.includes("version")) {
103
+ version = line.match(/version:\s+['"](?<version>[\w\.\-\d]+)['"]/).groups.version
104
+ name = line.match(/name:\s+['"](?<name>[\w\.\-\d]+)['"]/).groups?.name
105
+ namespace = line.match(/group:\s+['"](?<group>[\w\.\-\d]+)['"]/).groups?.group
106
+ }
107
+
108
+ let purlName = "";
109
+ if(name && namespace) {
110
+ const purlObj = new PackageURL('maven', namespace, name, undefined, undefined, undefined);
111
+ return { purlName: purlObj.toString(), version }
112
+ }
113
+
114
+ return null;
115
+ }
@@ -36,12 +36,12 @@ const PURL_TYPE = 'golang';
36
36
 
37
37
  // See reference on: https://go.dev/ref/mod#go-mod-file
38
38
  const MANIFEST_FILE = 'go.mod';
39
- export function goModParser(fileContent: string, filePath: string): ILocalDependency {
39
+ export function goModParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
40
40
 
41
41
  // If the file is not a go.mod manifest file, return an empty results
42
42
  const results: ILocalDependency = {file: filePath, purls: []};
43
43
  if(path.basename(filePath) != MANIFEST_FILE)
44
- return results;
44
+ return Promise.resolve(results);
45
45
 
46
46
  const lines = fileContent.split('\n');
47
47
 
@@ -70,7 +70,7 @@ export function goModParser(fileContent: string, filePath: string): ILocalDepend
70
70
  }
71
71
  }
72
72
 
73
- return results;
73
+ return Promise.resolve(results);
74
74
  }
75
75
 
76
76
 
@@ -99,12 +99,12 @@ function getDepDataGoSumFromLine(line: string) {
99
99
  }
100
100
 
101
101
  // See reference on: https://go.dev/ref/mod#go-mod-file
102
- export function goSumParser(fileContent: string, filePath: string): ILocalDependency {
102
+ export function goSumParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
103
103
 
104
104
  // If the file is not a go.mod manifest file, return an empty results
105
105
  const results: ILocalDependency = { file: filePath, purls: [] };
106
106
  if (path.basename(filePath) != 'go.sum')
107
- return results;
107
+ return Promise.resolve(results);
108
108
 
109
109
 
110
110
  const lines = fileContent.split('\n');
@@ -123,7 +123,7 @@ export function goSumParser(fileContent: string, filePath: string): ILocalDepend
123
123
  results.purls.push({purl: purlString, requirement: version})
124
124
  }
125
125
 
126
- return results;
126
+ return Promise.resolve(results);
127
127
 
128
128
 
129
129
  }
@@ -8,12 +8,12 @@ const PURL_TYPE = 'maven';
8
8
  // See reference on: https://maven.apache.org/guides/introduction/introduction-to-the-pom.html
9
9
  // and https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
10
10
  const MANIFEST_FILE = 'pom.xml';
11
- export function pomParser(fileContent: string, filePath: string): ILocalDependency {
11
+ export function pomParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
12
12
 
13
13
  // If the file is not a python manifest file, return an empty results
14
14
  const results: ILocalDependency = {file: filePath, purls: []};
15
15
  if(path.basename(filePath) != MANIFEST_FILE)
16
- return results;
16
+ return Promise.resolve(results);
17
17
 
18
18
  const dependencies = fileContent.match(/<dependency>((?:.|\n)*?)<\/dependency>/gm);
19
19
  if(dependencies) {
@@ -58,7 +58,8 @@ export function pomParser(fileContent: string, filePath: string): ILocalDependen
58
58
  }
59
59
 
60
60
  //Remove purls duplicated
61
- return removeDuplicated(results);
61
+ const nonDuplicatedResults = removeDuplicated(results);
62
+ return Promise.resolve(nonDuplicatedResults);
62
63
  }
63
64
 
64
65
  function removeDuplicated(results: ILocalDependency): ILocalDependency {
@@ -8,11 +8,12 @@ const PURL_TYPE = 'npm';
8
8
  // Parse a package.json file from node projects
9
9
  // See reference on: https://docs.npmjs.com/cli/v8/configuring-npm/package-json
10
10
  const MANIFEST_FILE = 'package.json';
11
- export function packageParser(fileContent: string, filePath: string): ILocalDependency {
11
+ export function packageParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
12
12
  // If the file is not manifest file, return an empty results
13
13
  const results: ILocalDependency = {file: filePath, purls: []};
14
14
  if(path.basename(filePath) != MANIFEST_FILE)
15
- return results;
15
+ return Promise.resolve(results);
16
+
16
17
  const o = JSON.parse(fileContent);
17
18
  let devDeps = Object.keys(o.devDependencies || {});
18
19
  let deps = Object.keys(o.dependencies || {});
@@ -27,22 +28,22 @@ export function packageParser(fileContent: string, filePath: string): ILocalDepe
27
28
  results.purls.push({purl: purlString, scope: "devDependencies", requirement: o.devDependencies[name]});
28
29
  }
29
30
 
30
- return results;
31
+ return Promise.resolve(results);
31
32
  }
32
33
 
33
34
 
34
35
  // Parse a package-lock.json file from node projects
35
36
  // See reference on: https://docs.npmjs.com/cli/v8/configuring-npm/package-json
36
- export function packagelockParser(fileContent: string, filePath: string): ILocalDependency {
37
+ export function packagelockParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
37
38
 
38
39
  const results: ILocalDependency = {file: filePath, purls: []};
39
40
 
40
41
  if(path.basename(filePath) != 'package-lock.json')
41
- return results;
42
+ return Promise.resolve(results);
42
43
 
43
44
  const packages = JSON.parse(fileContent)?.packages;
44
45
 
45
- if(!packages) return results;
46
+ if(!packages) return Promise.resolve(results);
46
47
 
47
48
  for (const [key, value] of Object.entries(packages)) {
48
49
  if(!key) continue;
@@ -55,22 +56,22 @@ export function packagelockParser(fileContent: string, filePath: string): ILocal
55
56
  results.purls.push({purl: purl, requirement: req});
56
57
  }
57
58
 
58
- return results;
59
+ return Promise.resolve(results);
59
60
  }
60
61
 
61
62
 
62
63
 
63
- export function yarnLockParser(fileContent: string, filePath: string): ILocalDependency {
64
+ export function yarnLockParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
64
65
  const results: ILocalDependency = {file: filePath, purls: []};
65
66
 
66
67
  if(path.basename(filePath) != 'yarn.lock')
67
- return results;
68
+ return Promise.resolve(results);
68
69
 
69
70
  const yarnVersion = yarnLockRecognizeVersion(fileContent)
70
71
  if (yarnVersion === YarnLockVersionEnum.V1) return yarnLockV1Parser(fileContent, filePath)
71
72
  else if (yarnVersion === YarnLockVersionEnum.V2) return yarnLockV2Parser(fileContent, filePath)
72
73
 
73
- return results;
74
+ return Promise.resolve(results);
74
75
  }
75
76
 
76
77
  enum YarnLockVersionEnum {
@@ -100,7 +101,7 @@ export function yarnLockRecognizeVersion(fileContent: string): YarnLockVersionEn
100
101
  return YarnLockVersionEnum.UnknownYarnLockFormat
101
102
  }
102
103
 
103
- export function yarnLockV1Parser(fileContent: string, filePath: string): ILocalDependency {
104
+ export function yarnLockV1Parser(fileContent: string, filePath: string): Promise <ILocalDependency> {
104
105
 
105
106
  const results: ILocalDependency = {file: filePath, purls: []};
106
107
 
@@ -210,17 +211,17 @@ export function yarnLockV1Parser(fileContent: string, filePath: string): ILocalD
210
211
  }
211
212
 
212
213
 
213
- return results;
214
-
214
+ return Promise.resolve(results);
215
215
 
216
216
  }
217
217
 
218
218
 
219
- export function yarnLockV2Parser(fileContent: string, filePath: string): ILocalDependency {
219
+ //TODO: Implement yarn lock V2 parser
220
+ export function yarnLockV2Parser(fileContent: string, filePath: string): Promise<ILocalDependency> {
220
221
 
221
222
  const results: ILocalDependency = {file: filePath, purls: []};
222
223
 
223
224
 
224
- return results;
225
+ return Promise.resolve(results);
225
226
 
226
227
  }
@@ -4,7 +4,7 @@ import { PackageURL } from 'packageurl-js';
4
4
 
5
5
  const PURL_TYPE = "nuget";
6
6
 
7
- export function csprojParser(fileContent: string, filePath: string): ILocalDependency {
7
+ export function csprojParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
8
8
 
9
9
  const results: ILocalDependency = {file: filePath, purls: []};
10
10
 
@@ -34,14 +34,14 @@ export function csprojParser(fileContent: string, filePath: string): ILocalDepen
34
34
 
35
35
  } catch (e) {
36
36
  console.error(e);
37
- return {file: filePath, purls: []};
37
+ return Promise.resolve({file: filePath, purls: []});
38
38
  }
39
39
 
40
- return results
40
+ return Promise.resolve(results)
41
41
  }
42
42
 
43
43
 
44
- export function packagesConfigParser(fileContent: string, filePath: string): ILocalDependency {
44
+ export function packagesConfigParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
45
45
 
46
46
  const results: ILocalDependency = { file: filePath, purls: [] };
47
47
  const packageConfig = xml.xml2js(fileContent);
@@ -60,5 +60,5 @@ export function packagesConfigParser(fileContent: string, filePath: string): ILo
60
60
  })
61
61
  });
62
62
 
63
- return results;
63
+ return Promise.resolve(results);
64
64
  }
@@ -18,12 +18,12 @@ const PURL_TYPE = 'pypi';
18
18
  // Parse a requirements.txt file from python projects
19
19
  // See reference on: https://pip.pypa.io/en/stable/reference/requirements-file-format/
20
20
  const MANIFEST_FILE = 'requirements.txt';
21
- export function requirementsParser(fileContent: string, filePath: string): ILocalDependency {
21
+ export function requirementsParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
22
22
 
23
23
  // If the file is not a python manifest file, return an empty results
24
24
  const results: ILocalDependency = {file: filePath, purls: []};
25
25
  if(path.basename(filePath) != MANIFEST_FILE)
26
- return results;
26
+ return Promise.resolve(results);
27
27
 
28
28
  const lines: Array<string> = fileContent.split('\n');
29
29
 
@@ -54,5 +54,5 @@ export function requirementsParser(fileContent: string, filePath: string): ILoca
54
54
  }
55
55
  }
56
56
  }
57
- return results;
57
+ return Promise.resolve(results);
58
58
  }
@@ -10,12 +10,12 @@ const PURL_TYPE = 'gem';
10
10
  // See reference on: https://bundler.io/gemfile.html
11
11
  // and https://bundler.io/man/gemfile.5.html
12
12
  const MANIFEST_FILE = 'Gemfile';
13
- export function gemfileParser(fileContent: string, filePath: string): ILocalDependency {
13
+ export function gemfileParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
14
14
 
15
15
  // If the file is not a manifest file, return an empty results
16
16
  const results: ILocalDependency = {file: filePath, purls: []};
17
17
  if(path.basename(filePath) != MANIFEST_FILE)
18
- return results;
18
+ return Promise.resolve(results);
19
19
 
20
20
 
21
21
  const lines: Array<string> = fileContent.split('\n');
@@ -34,24 +34,24 @@ export function gemfileParser(fileContent: string, filePath: string): ILocalDepe
34
34
  }
35
35
  }
36
36
  }
37
- return results;
37
+ return Promise.resolve(results);
38
38
  }
39
39
 
40
40
 
41
41
  const MANIFEST_FILE_1 = 'Gemfile.lock';
42
- export function gemfilelockParser(fileContent: string, filePath: string): ILocalDependency {
42
+ export function gemfilelockParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
43
43
 
44
44
  // If the file is not a manifest file, return an empty results
45
45
  const results: ILocalDependency = {file: filePath, purls: []};
46
46
  if(path.basename(filePath) != MANIFEST_FILE_1)
47
- return results;
47
+ return Promise.resolve(results);
48
48
 
49
49
  const gemlockParser = new GemfileLockParser();
50
50
  const purls = gemlockParser.getDependencies(fileContent);
51
51
  for (const purl of purls) {
52
52
  results.purls.push({purl});
53
53
  }
54
- return results;
54
+ return Promise.resolve(results);
55
55
  }
56
56
 
57
57
 
@@ -161,7 +161,6 @@ export class Dispatcher extends EventEmitter {
161
161
  this.emit(ScannerEvents.DISPATCHER_NEW_DATA, dispatcherResponse);
162
162
  return Promise.resolve();
163
163
  } catch (e) {
164
- console.log(e);
165
164
  clearTimeout(timeoutId);
166
165
  this.globalAbortController.removeAbortController(timeoutController);
167
166
  this.errorHandler(e, item);