scanoss 0.2.20 → 0.2.23

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 (75) hide show
  1. package/.cspell.json +3 -1
  2. package/build/main/bin/cli-bin.js +3 -3
  3. package/build/main/commands/scan.js +4 -5
  4. package/build/main/index.d.ts +2 -0
  5. package/build/main/index.js +3 -1
  6. package/build/main/lib/dependencies/DependencyScanner.js +5 -3
  7. package/build/main/lib/dependencies/LocalDependency/DependencyTypes.d.ts +1 -1
  8. package/build/main/lib/dependencies/LocalDependency/parsers/npmParser.js +3 -3
  9. package/build/main/lib/dependencies/LocalDependency/parsers/pyParser.js +7 -3
  10. package/build/main/lib/grpc/GrpcDependencyService.d.ts +4 -3
  11. package/build/main/lib/grpc/GrpcDependencyService.js +6 -2
  12. package/build/main/lib/scanner/Dispatcher/DispatchableItem.d.ts +4 -4
  13. package/build/main/lib/scanner/Dispatcher/DispatchableItem.js +5 -5
  14. package/build/main/lib/scanner/Scanner.d.ts +17 -19
  15. package/build/main/lib/scanner/Scanner.js +44 -33
  16. package/build/main/lib/scanner/ScannerCfg.js +2 -2
  17. package/build/main/lib/scanner/ScannerTypes.d.ts +1 -0
  18. package/build/main/lib/scanner/ScannerTypes.js +1 -1
  19. package/build/main/lib/scanner/WfpProvider/FingerprintPacket.d.ts +11 -0
  20. package/build/main/lib/scanner/WfpProvider/FingerprintPacket.js +32 -0
  21. package/build/main/lib/scanner/WfpProvider/WfpCalculator/WfpCalculator.d.ts +20 -0
  22. package/build/main/lib/scanner/WfpProvider/WfpCalculator/WfpCalculator.js +334 -0
  23. package/build/main/lib/scanner/WfpProvider/WfpProvider.d.ts +32 -0
  24. package/build/main/lib/scanner/WfpProvider/WfpProvider.js +62 -0
  25. package/build/main/lib/scanner/WfpProvider/WfpSplitter/WfpSplitter.d.ts +20 -0
  26. package/build/main/lib/scanner/WfpProvider/WfpSplitter/WfpSplitter.js +96 -0
  27. package/build/main/lib/scanner/Winnower/WinnowerExtractor.js +1 -1
  28. package/build/module/bin/cli-bin.js +3 -3
  29. package/build/module/commands/scan.js +4 -5
  30. package/build/module/index.d.ts +2 -0
  31. package/build/module/index.js +3 -1
  32. package/build/module/lib/dependencies/DependencyScanner.js +5 -3
  33. package/build/module/lib/dependencies/LocalDependency/DependencyTypes.d.ts +1 -1
  34. package/build/module/lib/dependencies/LocalDependency/parsers/npmParser.js +3 -3
  35. package/build/module/lib/dependencies/LocalDependency/parsers/pyParser.js +7 -3
  36. package/build/module/lib/grpc/GrpcDependencyService.d.ts +4 -3
  37. package/build/module/lib/grpc/GrpcDependencyService.js +7 -2
  38. package/build/module/lib/scanner/Dispatcher/DispatchableItem.d.ts +4 -4
  39. package/build/module/lib/scanner/Dispatcher/DispatchableItem.js +6 -6
  40. package/build/module/lib/scanner/Scanner.d.ts +17 -19
  41. package/build/module/lib/scanner/Scanner.js +50 -39
  42. package/build/module/lib/scanner/ScannerCfg.js +2 -2
  43. package/build/module/lib/scanner/ScannerTypes.d.ts +1 -0
  44. package/build/module/lib/scanner/ScannerTypes.js +1 -1
  45. package/build/module/lib/scanner/WfpProvider/FingerprintPacket.d.ts +11 -0
  46. package/build/module/lib/scanner/WfpProvider/FingerprintPacket.js +31 -0
  47. package/build/module/lib/scanner/WfpProvider/WfpCalculator/WfpCalculator.d.ts +20 -0
  48. package/build/module/lib/scanner/WfpProvider/WfpCalculator/WfpCalculator.js +330 -0
  49. package/build/module/lib/scanner/WfpProvider/WfpProvider.d.ts +32 -0
  50. package/build/module/lib/scanner/WfpProvider/WfpProvider.js +64 -0
  51. package/build/module/lib/scanner/WfpProvider/WfpSplitter/WfpSplitter.d.ts +20 -0
  52. package/build/module/lib/scanner/WfpProvider/WfpSplitter/WfpSplitter.js +95 -0
  53. package/build/module/lib/scanner/Winnower/WinnowerExtractor.js +1 -1
  54. package/build/tsconfig.module.tsbuildinfo +1 -1
  55. package/build/tsconfig.tsbuildinfo +1 -1
  56. package/package-lock.json +19948 -0
  57. package/package.json +1 -1
  58. package/src/bin/cli-bin.ts +3 -3
  59. package/src/commands/scan.ts +3 -3
  60. package/src/index.js +1 -0
  61. package/src/index.ts +4 -0
  62. package/src/lib/dependencies/DependencyScanner.ts +4 -2
  63. package/src/lib/dependencies/LocalDependency/DependencyTypes.ts +1 -1
  64. package/src/lib/dependencies/LocalDependency/parsers/npmParser.ts +2 -2
  65. package/src/lib/dependencies/LocalDependency/parsers/pyParser.ts +5 -2
  66. package/src/lib/grpc/GrpcDependencyService.ts +9 -3
  67. package/src/lib/scanner/Dispatcher/DispatchableItem.ts +7 -8
  68. package/src/lib/scanner/Scanner.ts +64 -53
  69. package/src/lib/scanner/ScannerCfg.ts +2 -2
  70. package/src/lib/scanner/ScannerTypes.ts +1 -0
  71. package/src/lib/scanner/{Winnower/WinnowerResponse.ts → WfpProvider/FingerprintPacket.ts} +5 -5
  72. package/src/lib/scanner/{Winnower/Winnower.ts → WfpProvider/WfpCalculator/WfpCalculator.ts} +33 -119
  73. package/src/lib/scanner/WfpProvider/WfpProvider.ts +90 -0
  74. package/src/lib/scanner/WfpProvider/WfpSplitter/WfpSplitter.ts +122 -0
  75. package/src/lib/scanner/Winnower/WinnowerExtractor.ts +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scanoss",
3
- "version": "0.2.20",
3
+ "version": "0.2.23",
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",
@@ -15,13 +15,13 @@ function CLIErrorHandler(e: Error) {
15
15
 
16
16
  async function main() {
17
17
  program
18
- .version("0.2.20")
18
+ .version("0.2.23")
19
19
  .description('The SCANOSS JS package provides a simple, easy to consume module for interacting with SCANOSS APIs/Engine.')
20
20
 
21
21
  program
22
22
  .command('scan <source>')
23
23
  .description('Scan a folder/file')
24
- //.option('-w, --wfp', 'Scan a .wfp file instead of a folder') // In progress
24
+ .option('-w, --wfp', 'Scan a .wfp file instead of a folder')
25
25
  .option('-c, --concurrency <number>', 'Number of concurrent connections to use while scanning (optional -default 10)')
26
26
  .option('--filter <path>', 'Loads an user defined filter (optional)')
27
27
  .option('-o, --output <filename>', 'Output result file name (optional - default stdout)')
@@ -40,7 +40,7 @@ async function main() {
40
40
 
41
41
  program
42
42
  .command('dep <source>')
43
- .description('Scan for dependencies [ BETA ]')
43
+ .description('Scan for dependencies')
44
44
  .option('-o, --output <filename>', 'Output result file name (optional - default stdout)')
45
45
  .option('-a, --grpc-host <host>', 'SCANOSS GRPC HOST (optional - default: scanoss.com)')
46
46
  .option('-p, --grpc-port <port>', 'SCANOSS GRPC PORT (optional - default: 443)')
@@ -56,7 +56,7 @@ export async function scanHandler(rootPath: string, options: any): Promise<void>
56
56
  }
57
57
  } else {
58
58
  const winnowing = fs.readFileSync(rootPath, {encoding: 'utf-8'});
59
- //filesCounter = [...winnowing.matchAll(/file=/g)].length;
59
+ scannerInput.fileList.length = [...winnowing.matchAll(/file=/g)].length;
60
60
  }
61
61
 
62
62
  if (!options.verbose) {
@@ -80,8 +80,8 @@ export async function scanHandler(rootPath: string, options: any): Promise<void>
80
80
  console.log(await fs.promises.readFile(resultPath, 'utf8'));
81
81
  });
82
82
 
83
- if (options.wfp) await scanner.scanFromWinnowingFile(rootPath);
84
- else await scanner.scan([scannerInput]);
83
+ if (options.wfp) scannerInput.wfpPath = rootPath;
84
+ await scanner.scan([scannerInput]);
85
85
 
86
86
  }
87
87
 
package/src/index.js ADDED
@@ -0,0 +1 @@
1
+ alert("Hello world")
package/src/index.ts CHANGED
@@ -1,5 +1,9 @@
1
1
  export * from './lib/scanner/ScannerTypes';
2
2
  export * from './lib/scanner/ScannerCfg'
3
3
  export * from './lib/scanner/Scanner'
4
+ export * from './lib/dependencies/DependencyTypes';
5
+ export * from './lib/dependencies/DependencyScannerCfg';
4
6
  export * from './lib/dependencies/DependencyScanner';
5
7
 
8
+
9
+
@@ -19,11 +19,12 @@ export class DependencyScanner {
19
19
 
20
20
  public async scan(files: Array<string>): Promise<IDependencyResponse> {
21
21
  const localDependencies = await this.localDependency.search(files);
22
- if (localDependencies.files.length === 0) return null;
22
+ if (localDependencies.files.length === 0) return {filesList: []};
23
23
  const request = this.buildRequest(localDependencies);
24
24
  const grpcResponse = await this.grpcDependencyService.get(request);
25
25
  const response = grpcResponse.toObject();
26
26
 
27
+
27
28
  // Extract scope from localDependencies and add it to response
28
29
  this.mergeScopeField(localDependencies, response);
29
30
  return response;
@@ -33,13 +34,14 @@ export class DependencyScanner {
33
34
  private buildRequest(localDependencies: ILocalDependencies): DependencyRequest {
34
35
  try {
35
36
  const depRequest = new DependencyRequest();
37
+ depRequest.setDepth(1);
36
38
  for (const file of localDependencies.files) {
37
39
  const fileMsg = new DependencyRequest.Files();
38
40
  fileMsg.setFile(file.file);
39
41
  for (const purl of file.purls) {
40
42
  const purlMsg = new DependencyRequest.Purls();
41
43
  purlMsg.setPurl(purl.purl);
42
- purlMsg.setRequirement(purl?.requirements);
44
+ if(purl?.requirement) purlMsg.setRequirement(purl.requirement);
43
45
  fileMsg.addPurls(purlMsg);
44
46
  }
45
47
  depRequest.addFiles(fileMsg);
@@ -1,6 +1,6 @@
1
1
  export interface ILocalPurl {
2
2
  purl: string;
3
- requirements?: string;
3
+ requirement?: string;
4
4
  scope?: string;
5
5
  }
6
6
 
@@ -20,12 +20,12 @@ export function packageParser(fileContent: string, filePath: string): ILocalDepe
20
20
 
21
21
  for(const name of deps){
22
22
  const purlString = new PackageURL(PURL_TYPE, undefined, name, undefined, undefined, undefined).toString();
23
- results.purls.push({purl: purlString, scope: "dependencies", requirements: o.dependencies[name]});
23
+ results.purls.push({purl: purlString, scope: "dependencies", requirement: o.dependencies[name]});
24
24
  }
25
25
 
26
26
  for(const name of devDeps){
27
27
  const purlString = new PackageURL(PURL_TYPE, undefined, name, undefined, undefined, undefined).toString();
28
- results.purls.push({purl: purlString, scope: "devDependencies", requirements: o.devDependencies[name]});
28
+ results.purls.push({purl: purlString, scope: "devDependencies", requirement: o.devDependencies[name]});
29
29
  }
30
30
 
31
31
  return results;
@@ -41,12 +41,15 @@ export function requirementsParser(fileContent: string, filePath: string): ILoca
41
41
  else {
42
42
 
43
43
  const dep = parseDep(line);
44
- if (dep.sym === '==') {
44
+ if (!dep.sym) {
45
+ const purlString = new PackageURL(PURL_TYPE, undefined, dep.name, undefined, undefined, undefined).toString();
46
+ results.purls.push({purl: purlString});
47
+ } else if (dep.sym === '==') {
45
48
  const purlString = new PackageURL(PURL_TYPE, undefined, dep.name, dep.version, undefined, undefined).toString();
46
49
  results.purls.push({purl: purlString});
47
50
  } else {
48
51
  const purlString = new PackageURL(PURL_TYPE, undefined, dep.name, undefined, undefined, undefined).toString();
49
- results.purls.push({purl: purlString, requirements: dep.sym+dep.version});
52
+ results.purls.push({purl: purlString, requirement: dep.sym+dep.version});
50
53
  }
51
54
  }
52
55
  }
@@ -7,8 +7,14 @@ export class GrpcDependencyService {
7
7
 
8
8
  private client: DependenciesClient;
9
9
 
10
- constructor(endpoint: string, port: string) {
10
+ private metadata;
11
+
12
+ constructor(endpoint: string, port: string, apiKey='') {
11
13
  this.client = new DependenciesClient(endpoint + ':' + port, grpc.credentials.createSsl());
14
+ if(apiKey) {
15
+ this.metadata = new grpc.Metadata();
16
+ this.metadata.add('x-api-key', apiKey);
17
+ }
12
18
  }
13
19
 
14
20
  public async get(req: DependenciesMessages.DependencyRequest): Promise<DependenciesMessages.DependencyResponse> {
@@ -20,7 +26,7 @@ export class GrpcDependencyService {
20
26
  });
21
27
  }
22
28
 
23
- public buildDependencyRequestMsg(plainObj: any): DependenciesMessages.DependencyRequest {
29
+ public buildDependencyRequestMsg(plainObj: DependenciesMessages.DependencyRequest.AsObject): DependenciesMessages.DependencyRequest {
24
30
  try {
25
31
  const depMessage = new DependenciesMessages.DependencyRequest();
26
32
  for (const dependency of plainObj.filesList) {
@@ -52,7 +58,7 @@ export class GrpcDependencyService {
52
58
  }
53
59
 
54
60
 
55
- public buildEchoRequestMsg(plainObj: any): CommonMessages.EchoRequest {
61
+ public buildEchoRequestMsg(plainObj: CommonMessages.EchoRequest.AsObject): CommonMessages.EchoRequest {
56
62
  try {
57
63
  const echoMessage = new CommonMessages.EchoRequest();
58
64
  echoMessage.setMessage(plainObj.message);
@@ -1,12 +1,11 @@
1
- import { WinnowerResponse } from "../Winnower/WinnowerResponse";
2
-
1
+ import { FingerprintPacket } from "../WfpProvider/FingerprintPacket";
3
2
  export class DispatchableItem {
4
- private winnowerResponse: WinnowerResponse;
3
+ private fingerprintPacket: FingerprintPacket;
5
4
 
6
5
  private errorCounter: number;
7
6
 
8
- constructor(winnowerResponse) {
9
- this.winnowerResponse = winnowerResponse;
7
+ constructor(fingerprintPacket: FingerprintPacket) {
8
+ this.fingerprintPacket = fingerprintPacket;
10
9
  this.errorCounter = 0;
11
10
  }
12
11
 
@@ -14,12 +13,12 @@ export class DispatchableItem {
14
13
  this.errorCounter += 1;
15
14
  }
16
15
 
17
- public getWinnowerResponse(): WinnowerResponse {
18
- return this.winnowerResponse;
16
+ public getWinnowerResponse(): FingerprintPacket {
17
+ return this.fingerprintPacket;
19
18
  }
20
19
 
21
20
  getContent() {
22
- return this.winnowerResponse.getContent();
21
+ return this.fingerprintPacket.getContent();
23
22
  }
24
23
 
25
24
  getErrorCounter() {
@@ -4,7 +4,7 @@ import EventEmitter from 'eventemitter3';
4
4
  import os from 'os';
5
5
  import fs from 'fs';
6
6
 
7
- import { Winnower } from './Winnower/Winnower';
7
+
8
8
  import { Dispatcher } from './Dispatcher/Dispatcher';
9
9
 
10
10
  import { DispatchableItem } from './Dispatcher/DispatchableItem';
@@ -13,8 +13,11 @@ import { ScannerCfg } from './ScannerCfg';
13
13
  import { ScannerEvents, ScannerInput } from './ScannerTypes';
14
14
 
15
15
  import sortPaths from 'sort-paths';
16
- import { WinnowerResponse } from './Winnower/WinnowerResponse';
17
16
 
17
+ import { WfpProvider } from './WfpProvider/WfpProvider';
18
+ import { FingerprintPacket } from './WfpProvider/FingerprintPacket';
19
+ import { WfpCalculator } from './WfpProvider/WfpCalculator/WfpCalculator';
20
+ import { WfpSplitter } from './WfpProvider/WfpSplitter/WfpSplitter';
18
21
 
19
22
  let finishPromiseResolve;
20
23
  let finishPromiseReject;
@@ -22,44 +25,44 @@ let finishPromiseReject;
22
25
 
23
26
 
24
27
  export class Scanner extends EventEmitter {
25
- scannerCfg;
28
+ private scannerCfg: ScannerCfg;
26
29
 
27
- workDirectory;
30
+ private workDirectory: string;
28
31
 
29
- scanRoot;
32
+ private resultFilePath: string;
30
33
 
31
- scannerId;
34
+ private wfpFilePath: string;
32
35
 
33
- private winnower: Winnower;
36
+ private scanRoot: string;
34
37
 
35
- private dispatcher: Dispatcher;
38
+ private scannerId: string;
36
39
 
37
- resultFilePath;
40
+ private wfpProvider: WfpProvider;
38
41
 
39
- wfpFilePath;
42
+ private dispatcher: Dispatcher;
40
43
 
41
- scanFinished; // Both flags are used to prevent a race condition between DISPATCHER.NEW_DATA and DISPATCHER_FINISHED
44
+ private finishPromise: Promise<void>;
42
45
 
43
- processingNewData; // Both flags are used to prevent a race condition between DISPATCHER.NEW_DATA and DISPATCHER_FINISHED
46
+ private scannerInput: Array<ScannerInput>;
44
47
 
45
- responseBuffer;
48
+ private scanFinished: boolean; // Both flags are used to prevent a race condition between DISPATCHER.NEW_DATA and DISPATCHER_FINISHED
46
49
 
47
- processedFiles;
50
+ private processingNewData: boolean; // Both flags are used to prevent a race condition between DISPATCHER.NEW_DATA and DISPATCHER_FINISHED
48
51
 
49
- running;
52
+ private processedFiles: number;
50
53
 
51
- filesToScan;
54
+ private running: boolean;
52
55
 
53
- filesNotScanned;
56
+ private filesToScan;
54
57
 
55
- finishPromise: Promise<void>;
58
+ private responseBuffer;
56
59
 
57
- private scannerInput: Array<ScannerInput>;
60
+ private filesNotScanned;
58
61
 
59
62
  constructor(scannerCfg = new ScannerCfg()) {
60
63
  super();
61
64
  this.scannerCfg = scannerCfg;
62
- this.scannerId = new Date().getTime();
65
+ this.scannerId = new Date().getTime().toString();
63
66
  }
64
67
 
65
68
  init() {
@@ -70,7 +73,7 @@ export class Scanner extends EventEmitter {
70
73
  this.responseBuffer = [];
71
74
  this.filesToScan = {};
72
75
  this.filesNotScanned = {};
73
- this.winnower = new Winnower(this.scannerCfg);
76
+ this.wfpProvider = new WfpCalculator(this.scannerCfg);
74
77
  this.dispatcher = new Dispatcher(this.scannerCfg);
75
78
 
76
79
  this.finishPromise = new Promise((resolve, reject) =>{
@@ -85,19 +88,19 @@ export class Scanner extends EventEmitter {
85
88
  }
86
89
 
87
90
  setWinnowerListeners() {
88
- this.winnower.on(ScannerEvents.WINNOWING_NEW_CONTENT, (winnowerResponse: WinnowerResponse) => {
89
- this.emit(ScannerEvents.WINNOWING_NEW_CONTENT, winnowerResponse);
91
+ this.wfpProvider.on(ScannerEvents.WINNOWING_NEW_CONTENT, (fingerprintPacket: FingerprintPacket) => {
92
+ this.emit(ScannerEvents.WINNOWING_NEW_CONTENT, fingerprintPacket);
90
93
  this.reportLog(`[ SCANNER ]: New WFP content`);
91
- winnowerResponse.setEngineFlags(this.scannerInput[0].engineFlags);
92
- const disptItem = new DispatchableItem(winnowerResponse);
94
+ fingerprintPacket.setEngineFlags(this.scannerInput[0].engineFlags);
95
+ const disptItem = new DispatchableItem(fingerprintPacket);
93
96
  this.dispatcher.dispatchItem(disptItem);
94
97
  });
95
98
 
96
- this.winnower.on(ScannerEvents.WINNOWER_LOG, (msg) => {
99
+ this.wfpProvider.on(ScannerEvents.WINNOWER_LOG, (msg) => {
97
100
  this.reportLog(msg);
98
101
  });
99
102
 
100
- this.winnower.on(ScannerEvents.ERROR, (error) => {
103
+ this.wfpProvider.on(ScannerEvents.ERROR, (error) => {
101
104
  this.errorHandler(error, ScannerEvents.MODULE_WINNOWER);
102
105
  });
103
106
  }
@@ -105,12 +108,12 @@ export class Scanner extends EventEmitter {
105
108
  setDispatcherListeners() {
106
109
  this.dispatcher.on(ScannerEvents.DISPATCHER_QUEUE_SIZE_MAX_LIMIT, () => {
107
110
  this.reportLog(`[ SCANNER ]: Maximum queue size reached. Winnower will be paused`);
108
- this.winnower.pause();
111
+ this.wfpProvider.pause();
109
112
  });
110
113
 
111
114
  this.dispatcher.on(ScannerEvents.DISPATCHER_QUEUE_SIZE_MIN_LIMIT, () => {
112
115
  this.reportLog(`[ SCANNER ]: Minimum queue size reached. Winnower will be resumed`);
113
- this.winnower.resume();
116
+ this.wfpProvider.resume();
114
117
  });
115
118
 
116
119
  this.dispatcher.on(ScannerEvents.DISPATCHER_NEW_DATA, async (response) => {
@@ -125,7 +128,7 @@ export class Scanner extends EventEmitter {
125
128
  });
126
129
 
127
130
  this.dispatcher.on(ScannerEvents.DISPATCHER_FINISHED, async () => {
128
- if (!this.winnower.hasPendingFiles()) {
131
+ if (!this.wfpProvider.hasPendingFiles()) {
129
132
  if (this.processingNewData) this.scanFinished = true;
130
133
  else await this.finishJob();
131
134
  }
@@ -136,7 +139,7 @@ export class Scanner extends EventEmitter {
136
139
  this.appendFilesToNotScanned(filesNotScanned);
137
140
  });
138
141
 
139
- this.winnower.on(ScannerEvents.DISPATCHER_LOG, (msg) => {
142
+ this.wfpProvider.on(ScannerEvents.DISPATCHER_LOG, (msg) => {
140
143
  this.reportLog(msg);
141
144
  });
142
145
 
@@ -206,8 +209,18 @@ export class Scanner extends EventEmitter {
206
209
  this.scannerInput.shift();
207
210
  this.reportLog(`[ SCANNER ]: Job finished. ${this.scannerInput.length} pendings`);
208
211
 
209
- if(this.scannerInput.length) this.winnower.startWinnowing(this.scannerInput[0]);
210
- else await this.finishScan();
212
+ if(this.scannerInput.length) {
213
+ if (this.scannerInput[0].wfpPath) {
214
+ this.wfpProvider = new WfpSplitter();
215
+ this.setWinnowerListeners();
216
+ this.wfpProvider.start({wfpPath: this.scannerInput[0].wfpPath});
217
+ } else {
218
+ const folderRoot = this.scannerInput[0].folderRoot;
219
+ const winnowingMode = this.scannerInput[0].winnowingMode;
220
+ const fileList = this.scannerInput[0].fileList;
221
+ this.wfpProvider.start({folderRoot, winnowingMode, fileList});
222
+ }
223
+ } else await this.finishScan();
211
224
  }
212
225
 
213
226
  private async finishScan() {
@@ -264,7 +277,6 @@ export class Scanner extends EventEmitter {
264
277
  public scanFromWinnowingFile(wfpFilePath: string): Promise<void> {
265
278
  this.init();
266
279
  this.createOutputFiles();
267
- this.winnower.startWinnowingFromFile(wfpFilePath);
268
280
  return this.finishPromise;
269
281
  }
270
282
 
@@ -274,16 +286,27 @@ export class Scanner extends EventEmitter {
274
286
  this.createOutputFiles();
275
287
  this.scannerInput = scannerInput;
276
288
 
277
- if (!this.isValidInput(scannerInput)) {
278
- this.finishScan();
279
- return this.finishPromise;
289
+ // if (!this.isValidInput(scannerInput)) {
290
+ // this.finishScan();
291
+ // return this.finishPromise;
292
+ // }
293
+
294
+ if (scannerInput[0].wfpPath) {
295
+ this.wfpProvider = new WfpSplitter();
296
+ this.setWinnowerListeners();
297
+ this.wfpProvider.start({wfpPath: scannerInput[0].wfpPath});
298
+ } else {
299
+ const folderRoot = this.scannerInput[0].folderRoot;
300
+ const winnowingMode = this.scannerInput[0].winnowingMode;
301
+ const fileList = this.scannerInput[0].fileList;
302
+ this.wfpProvider.start({folderRoot, winnowingMode, fileList});
280
303
  }
281
-
282
- this.winnower.startWinnowing(this.scannerInput[0]);
283
304
  return this.finishPromise;
284
305
  }
285
306
 
286
307
 
308
+
309
+
287
310
  private isValidInput(scannerInput: Array<ScannerInput>): boolean {
288
311
  if (!scannerInput) {
289
312
  this.reportLog('[ SCANNER ]: No input provided', 'warning');
@@ -313,25 +336,13 @@ export class Scanner extends EventEmitter {
313
336
  return this.scannerId;
314
337
  }
315
338
 
316
- pause() {
317
- this.running = false;
318
- this.winnower.pause();
319
- // this.dispatcher.pause();
320
- }
321
-
322
- resume() {
323
- this.running = true;
324
- this.winnower.resume();
325
- // this.dispatcher.resume();
326
- }
327
-
328
339
  stop() {
329
340
  this.reportLog(`[ SCANNER ]: Stopping scanner`);
330
341
  this.running = false;
331
- this.winnower.removeAllListeners();
342
+ this.wfpProvider.removeAllListeners();
332
343
  this.dispatcher.removeAllListeners();
333
344
  this.dispatcher.stop();
334
- this.winnower.stop();
345
+ this.wfpProvider.stop();
335
346
  }
336
347
 
337
348
  isRunning() {
@@ -23,7 +23,7 @@ export class ScannerCfg {
23
23
  // Persist results after [ X ] number of server responses.
24
24
  MAX_RESPONSES_IN_BUFFER = 300;
25
25
 
26
- DISPATCHER_QUEUE_SIZE_MAX_LIMIT = 50;
26
+ DISPATCHER_QUEUE_SIZE_MAX_LIMIT = 300;
27
27
 
28
- DISPATCHER_QUEUE_SIZE_MIN_LIMIT = 20;
28
+ DISPATCHER_QUEUE_SIZE_MIN_LIMIT = 200;
29
29
  };
@@ -38,4 +38,5 @@ export interface ScannerInput {
38
38
  folderRoot?: string;
39
39
  fileList: Array<string>;
40
40
  winnowingMode?: WinnowingMode; // Enable winnowing algorithm, otherwise is scanned only MD5
41
+ wfpPath?: string;
41
42
  };
@@ -1,17 +1,17 @@
1
- export class WinnowerResponse {
1
+ export class FingerprintPacket {
2
2
  private wfpContent: string;
3
3
 
4
4
  private engineFlags: number;
5
5
 
6
6
  private scanRoot: string;
7
7
 
8
- constructor(wfpContent, scanRoot = '') {
8
+ constructor(wfpContent: string, scanRoot = '') {
9
9
  this.wfpContent = wfpContent;
10
10
  this.scanRoot = scanRoot;
11
11
  }
12
12
 
13
- public isEqual(winnowerResponse) {
14
- return this.getContent() === winnowerResponse.getContent();
13
+ public isEqual(fingerprintPacket: FingerprintPacket): boolean {
14
+ return this.getContent() === fingerprintPacket.getContent();
15
15
  }
16
16
 
17
17
  public getContent() {
@@ -26,7 +26,7 @@ export class WinnowerResponse {
26
26
  return this.engineFlags;
27
27
  }
28
28
 
29
- public getFilesWinnowed() {
29
+ public getFilesFingerprinted() {
30
30
  const files = [];
31
31
  const regExp = new RegExp(/,(\/.*)/g);
32
32
  let result;