scanoss 0.2.3
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.
- package/CHANGELOG.md +21 -0
- package/LICENSE +23 -0
- package/README.md +98 -0
- package/build/main/bin/cli-bin.d.ts +2 -0
- package/build/main/bin/cli-bin.js +58 -0
- package/build/main/commands/dep.d.ts +1 -0
- package/build/main/commands/dep.js +38 -0
- package/build/main/commands/fingerprint.d.ts +1 -0
- package/build/main/commands/fingerprint.js +49 -0
- package/build/main/commands/helpers.d.ts +1 -0
- package/build/main/commands/helpers.js +22 -0
- package/build/main/commands/scan.d.ts +1 -0
- package/build/main/commands/scan.js +91 -0
- package/build/main/index.d.ts +7 -0
- package/build/main/index.js +20 -0
- package/build/main/lib/dependencies/DependencyScanner.d.ts +11 -0
- package/build/main/lib/dependencies/DependencyScanner.js +94 -0
- package/build/main/lib/dependencies/DependencyScannerCfg.d.ts +4 -0
- package/build/main/lib/dependencies/DependencyScannerCfg.js +11 -0
- package/build/main/lib/dependencies/DependencyTypes.d.ts +21 -0
- package/build/main/lib/dependencies/DependencyTypes.js +3 -0
- package/build/main/lib/dependencies/LocalDependency/DependencyTypes.d.ts +16 -0
- package/build/main/lib/dependencies/LocalDependency/DependencyTypes.js +3 -0
- package/build/main/lib/dependencies/LocalDependency/LocalDependency.d.ts +6 -0
- package/build/main/lib/dependencies/LocalDependency/LocalDependency.js +51 -0
- package/build/main/lib/dependencies/LocalDependency/parsers/golangParser.d.ts +2 -0
- package/build/main/lib/dependencies/LocalDependency/parsers/golangParser.js +63 -0
- package/build/main/lib/dependencies/LocalDependency/parsers/mavenParser.d.ts +2 -0
- package/build/main/lib/dependencies/LocalDependency/parsers/mavenParser.js +173 -0
- package/build/main/lib/dependencies/LocalDependency/parsers/npmParser.d.ts +3 -0
- package/build/main/lib/dependencies/LocalDependency/parsers/npmParser.js +50 -0
- package/build/main/lib/dependencies/LocalDependency/parsers/pyParser.d.ts +2 -0
- package/build/main/lib/dependencies/LocalDependency/parsers/pyParser.js +65 -0
- package/build/main/lib/dependencies/LocalDependency/parsers/rubyParser.d.ts +3 -0
- package/build/main/lib/dependencies/LocalDependency/parsers/rubyParser.js +133 -0
- package/build/main/lib/dependencies/LocalDependency/parsers/utils.d.ts +2 -0
- package/build/main/lib/dependencies/LocalDependency/parsers/utils.js +20 -0
- package/build/main/lib/filters/defaultFilter.d.ts +16 -0
- package/build/main/lib/filters/defaultFilter.js +195 -0
- package/build/main/lib/filters/filtering.d.ts +32 -0
- package/build/main/lib/filters/filtering.js +229 -0
- package/build/main/lib/grpc/GrpcDependencyService.d.ts +11 -0
- package/build/main/lib/grpc/GrpcDependencyService.js +87 -0
- package/build/main/lib/grpc/scanoss/api/common/v2/scanoss-common_grpc_pb.d.ts +0 -0
- package/build/main/lib/grpc/scanoss/api/common/v2/scanoss-common_grpc_pb.js +2 -0
- package/build/main/lib/grpc/scanoss/api/common/v2/scanoss-common_pb.d.ts +1 -0
- package/build/main/lib/grpc/scanoss/api/common/v2/scanoss-common_pb.js +404 -0
- package/build/main/lib/grpc/scanoss/api/components/v2/scanoss-components_grpc_pb.d.ts +62 -0
- package/build/main/lib/grpc/scanoss/api/components/v2/scanoss-components_grpc_pb.js +128 -0
- package/build/main/lib/grpc/scanoss/api/components/v2/scanoss-components_pb.d.ts +1 -0
- package/build/main/lib/grpc/scanoss/api/components/v2/scanoss-components_pb.js +1403 -0
- package/build/main/lib/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb.d.ts +42 -0
- package/build/main/lib/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb.js +98 -0
- package/build/main/lib/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.d.ts +1 -0
- package/build/main/lib/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.js +1197 -0
- package/build/main/lib/grpc/scanoss/api/scanning/v2/scanoss-scanning_grpc_pb.d.ts +21 -0
- package/build/main/lib/grpc/scanoss/api/scanning/v2/scanoss-scanning_grpc_pb.js +66 -0
- package/build/main/lib/grpc/scanoss/api/scanning/v2/scanoss-scanning_pb.d.ts +1 -0
- package/build/main/lib/grpc/scanoss/api/scanning/v2/scanoss-scanning_pb.js +14 -0
- package/build/main/lib/scanner/Dispatcher/DispatchableItem.d.ts +19 -0
- package/build/main/lib/scanner/Dispatcher/DispatchableItem.js +44 -0
- package/build/main/lib/scanner/Dispatcher/Dispatcher.d.ts +19 -0
- package/build/main/lib/scanner/Dispatcher/Dispatcher.js +122 -0
- package/build/main/lib/scanner/Dispatcher/DispatcherResponse.d.ts +12 -0
- package/build/main/lib/scanner/Dispatcher/DispatcherResponse.js +34 -0
- package/build/main/lib/scanner/Dispatcher/GlobalControllerAborter.d.ts +10 -0
- package/build/main/lib/scanner/Dispatcher/GlobalControllerAborter.js +33 -0
- package/build/main/lib/scanner/Scannable/ScannableItem.d.ts +15 -0
- package/build/main/lib/scanner/Scannable/ScannableItem.js +28 -0
- package/build/main/lib/scanner/Scanner.d.ts +46 -0
- package/build/main/lib/scanner/Scanner.js +280 -0
- package/build/main/lib/scanner/ScannerCfg.d.ts +13 -0
- package/build/main/lib/scanner/ScannerCfg.js +27 -0
- package/build/main/lib/scanner/ScannerQueue.d.ts +3 -0
- package/build/main/lib/scanner/ScannerQueue.js +8 -0
- package/build/main/lib/scanner/ScannerTypes.d.ts +39 -0
- package/build/main/lib/scanner/ScannerTypes.js +40 -0
- package/build/main/lib/scanner/WfpProvider/FingerprintPackage.d.ts +9 -0
- package/build/main/lib/scanner/WfpProvider/FingerprintPackage.js +32 -0
- package/build/main/lib/scanner/WfpProvider/FingerprintPacket.d.ts +12 -0
- package/build/main/lib/scanner/WfpProvider/FingerprintPacket.js +38 -0
- package/build/main/lib/scanner/WfpProvider/WfpCalculator/WfpCalculator.d.ts +20 -0
- package/build/main/lib/scanner/WfpProvider/WfpCalculator/WfpCalculator.js +334 -0
- package/build/main/lib/scanner/WfpProvider/WfpProvider.d.ts +32 -0
- package/build/main/lib/scanner/WfpProvider/WfpProvider.js +63 -0
- package/build/main/lib/scanner/WfpProvider/WfpProviderFactory.d.ts +6 -0
- package/build/main/lib/scanner/WfpProvider/WfpProviderFactory.js +16 -0
- package/build/main/lib/scanner/WfpProvider/WfpSplitter/WfpSplitter.d.ts +20 -0
- package/build/main/lib/scanner/WfpProvider/WfpSplitter/WfpSplitter.js +94 -0
- package/build/main/lib/scanner/Winnower/Winnower.d.ts +36 -0
- package/build/main/lib/scanner/Winnower/Winnower.js +407 -0
- package/build/main/lib/scanner/Winnower/WinnowerExtractor.d.ts +10 -0
- package/build/main/lib/scanner/Winnower/WinnowerExtractor.js +33 -0
- package/build/main/lib/scanner/Winnower/WinnowerResponse.d.ts +11 -0
- package/build/main/lib/scanner/Winnower/WinnowerResponse.js +32 -0
- package/build/main/lib/tree/File.d.ts +6 -0
- package/build/main/lib/tree/File.js +23 -0
- package/build/main/lib/tree/Folder.d.ts +10 -0
- package/build/main/lib/tree/Folder.js +54 -0
- package/build/main/lib/tree/Node.d.ts +15 -0
- package/build/main/lib/tree/Node.js +23 -0
- package/build/main/lib/tree/Tree.d.ts +19 -0
- package/build/main/lib/tree/Tree.js +76 -0
- package/build/module/bin/cli-bin.d.ts +2 -0
- package/build/module/bin/cli-bin.js +56 -0
- package/build/module/commands/dep.d.ts +1 -0
- package/build/module/commands/dep.js +31 -0
- package/build/module/commands/fingerprint.d.ts +1 -0
- package/build/module/commands/fingerprint.js +42 -0
- package/build/module/commands/helpers.d.ts +1 -0
- package/build/module/commands/helpers.js +15 -0
- package/build/module/commands/scan.d.ts +1 -0
- package/build/module/commands/scan.js +84 -0
- package/build/module/index.d.ts +7 -0
- package/build/module/index.js +8 -0
- package/build/module/lib/dependencies/DependencyScanner.d.ts +11 -0
- package/build/module/lib/dependencies/DependencyScanner.js +92 -0
- package/build/module/lib/dependencies/DependencyScannerCfg.d.ts +4 -0
- package/build/module/lib/dependencies/DependencyScannerCfg.js +5 -0
- package/build/module/lib/dependencies/DependencyTypes.d.ts +21 -0
- package/build/module/lib/dependencies/DependencyTypes.js +2 -0
- package/build/module/lib/dependencies/LocalDependency/DependencyTypes.d.ts +16 -0
- package/build/module/lib/dependencies/LocalDependency/DependencyTypes.js +2 -0
- package/build/module/lib/dependencies/LocalDependency/LocalDependency.d.ts +6 -0
- package/build/module/lib/dependencies/LocalDependency/LocalDependency.js +45 -0
- package/build/module/lib/dependencies/LocalDependency/parsers/golangParser.d.ts +2 -0
- package/build/module/lib/dependencies/LocalDependency/parsers/golangParser.js +55 -0
- package/build/module/lib/dependencies/LocalDependency/parsers/mavenParser.d.ts +2 -0
- package/build/module/lib/dependencies/LocalDependency/parsers/mavenParser.js +166 -0
- package/build/module/lib/dependencies/LocalDependency/parsers/npmParser.d.ts +3 -0
- package/build/module/lib/dependencies/LocalDependency/parsers/npmParser.js +42 -0
- package/build/module/lib/dependencies/LocalDependency/parsers/pyParser.d.ts +2 -0
- package/build/module/lib/dependencies/LocalDependency/parsers/pyParser.js +57 -0
- package/build/module/lib/dependencies/LocalDependency/parsers/rubyParser.d.ts +3 -0
- package/build/module/lib/dependencies/LocalDependency/parsers/rubyParser.js +130 -0
- package/build/module/lib/dependencies/LocalDependency/parsers/utils.d.ts +2 -0
- package/build/module/lib/dependencies/LocalDependency/parsers/utils.js +15 -0
- package/build/module/lib/filters/defaultFilter.d.ts +16 -0
- package/build/module/lib/filters/defaultFilter.js +192 -0
- package/build/module/lib/filters/filtering.d.ts +32 -0
- package/build/module/lib/filters/filtering.js +210 -0
- package/build/module/lib/grpc/GrpcDependencyService.d.ts +11 -0
- package/build/module/lib/grpc/GrpcDependencyService.js +66 -0
- package/build/module/lib/grpc/scanoss/api/common/v2/scanoss-common_grpc_pb.d.ts +0 -0
- package/build/module/lib/grpc/scanoss/api/common/v2/scanoss-common_grpc_pb.js +2 -0
- package/build/module/lib/grpc/scanoss/api/common/v2/scanoss-common_pb.d.ts +1 -0
- package/build/module/lib/grpc/scanoss/api/common/v2/scanoss-common_pb.js +404 -0
- package/build/module/lib/grpc/scanoss/api/components/v2/scanoss-components_grpc_pb.d.ts +62 -0
- package/build/module/lib/grpc/scanoss/api/components/v2/scanoss-components_grpc_pb.js +128 -0
- package/build/module/lib/grpc/scanoss/api/components/v2/scanoss-components_pb.d.ts +1 -0
- package/build/module/lib/grpc/scanoss/api/components/v2/scanoss-components_pb.js +1403 -0
- package/build/module/lib/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb.d.ts +42 -0
- package/build/module/lib/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb.js +98 -0
- package/build/module/lib/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.d.ts +1 -0
- package/build/module/lib/grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb.js +1197 -0
- package/build/module/lib/grpc/scanoss/api/scanning/v2/scanoss-scanning_grpc_pb.d.ts +21 -0
- package/build/module/lib/grpc/scanoss/api/scanning/v2/scanoss-scanning_grpc_pb.js +66 -0
- package/build/module/lib/grpc/scanoss/api/scanning/v2/scanoss-scanning_pb.d.ts +1 -0
- package/build/module/lib/grpc/scanoss/api/scanning/v2/scanoss-scanning_pb.js +14 -0
- package/build/module/lib/scanner/Dispatcher/DispatchableItem.d.ts +19 -0
- package/build/module/lib/scanner/Dispatcher/DispatchableItem.js +43 -0
- package/build/module/lib/scanner/Dispatcher/Dispatcher.d.ts +19 -0
- package/build/module/lib/scanner/Dispatcher/Dispatcher.js +121 -0
- package/build/module/lib/scanner/Dispatcher/DispatcherResponse.d.ts +12 -0
- package/build/module/lib/scanner/Dispatcher/DispatcherResponse.js +33 -0
- package/build/module/lib/scanner/Dispatcher/GlobalControllerAborter.d.ts +10 -0
- package/build/module/lib/scanner/Dispatcher/GlobalControllerAborter.js +28 -0
- package/build/module/lib/scanner/Scannable/ScannableItem.d.ts +15 -0
- package/build/module/lib/scanner/Scannable/ScannableItem.js +29 -0
- package/build/module/lib/scanner/Scanner.d.ts +46 -0
- package/build/module/lib/scanner/Scanner.js +288 -0
- package/build/module/lib/scanner/ScannerCfg.d.ts +13 -0
- package/build/module/lib/scanner/ScannerCfg.js +21 -0
- package/build/module/lib/scanner/ScannerQueue.d.ts +3 -0
- package/build/module/lib/scanner/ScannerQueue.js +4 -0
- package/build/module/lib/scanner/ScannerTypes.d.ts +39 -0
- package/build/module/lib/scanner/ScannerTypes.js +37 -0
- package/build/module/lib/scanner/WfpProvider/FingerprintPackage.d.ts +9 -0
- package/build/module/lib/scanner/WfpProvider/FingerprintPackage.js +30 -0
- package/build/module/lib/scanner/WfpProvider/FingerprintPacket.d.ts +12 -0
- package/build/module/lib/scanner/WfpProvider/FingerprintPacket.js +37 -0
- package/build/module/lib/scanner/WfpProvider/WfpCalculator/WfpCalculator.d.ts +20 -0
- package/build/module/lib/scanner/WfpProvider/WfpCalculator/WfpCalculator.js +330 -0
- package/build/module/lib/scanner/WfpProvider/WfpProvider.d.ts +32 -0
- package/build/module/lib/scanner/WfpProvider/WfpProvider.js +65 -0
- package/build/module/lib/scanner/WfpProvider/WfpProviderFactory.d.ts +6 -0
- package/build/module/lib/scanner/WfpProvider/WfpProviderFactory.js +12 -0
- package/build/module/lib/scanner/WfpProvider/WfpSplitter/WfpSplitter.d.ts +20 -0
- package/build/module/lib/scanner/WfpProvider/WfpSplitter/WfpSplitter.js +93 -0
- package/build/module/lib/scanner/Winnower/Winnower.d.ts +36 -0
- package/build/module/lib/scanner/Winnower/Winnower.js +411 -0
- package/build/module/lib/scanner/Winnower/WinnowerExtractor.d.ts +10 -0
- package/build/module/lib/scanner/Winnower/WinnowerExtractor.js +30 -0
- package/build/module/lib/scanner/Winnower/WinnowerResponse.d.ts +11 -0
- package/build/module/lib/scanner/Winnower/WinnowerResponse.js +31 -0
- package/build/module/lib/tree/File.d.ts +6 -0
- package/build/module/lib/tree/File.js +17 -0
- package/build/module/lib/tree/Folder.d.ts +10 -0
- package/build/module/lib/tree/Folder.js +49 -0
- package/build/module/lib/tree/Node.d.ts +15 -0
- package/build/module/lib/tree/Node.js +23 -0
- package/build/module/lib/tree/Tree.d.ts +19 -0
- package/build/module/lib/tree/Tree.js +73 -0
- package/package.json +121 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
|
+
|
|
5
|
+
### [0.2.18](https://github.com/scanoss/scanoss.js/compare/v0.2.16...v0.2.18) (2022-02-23)
|
|
6
|
+
|
|
7
|
+
### [0.2.16](https://github.com/scanoss/scanoss.js/compare/v0.2.14...v0.2.16) (2022-02-14)
|
|
8
|
+
|
|
9
|
+
### [0.2.14](https://github.com/scanoss/scanoss.js/compare/v0.2.10...v0.2.14) (2022-02-09)
|
|
10
|
+
|
|
11
|
+
### [0.2.10](https://github.com/scanoss/scanoss.js/compare/v0.2.8...v0.2.10) (2022-01-11)
|
|
12
|
+
|
|
13
|
+
### [0.2.8](https://github.com/scanoss/scanoss.js/compare/v0.2.6...v0.2.8) (2022-01-10)
|
|
14
|
+
|
|
15
|
+
### [0.2.6](https://github.com/scanoss/scanoss.js/compare/v0.2.4...v0.2.6) (2022-01-06)
|
|
16
|
+
|
|
17
|
+
### [0.2.4](https://github.com/scanoss/scanoss.js/compare/v0.2.2...v0.2.4) (2022-01-05)
|
|
18
|
+
|
|
19
|
+
### 0.2.2 (2021-12-30)
|
|
20
|
+
|
|
21
|
+
### 0.1.2 (2021-12-28)
|
package/LICENSE
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/\* SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
- The MIT License (MIT)
|
|
4
|
+
- Copyright © 2022 Scan Open Source Solutions SL - https://scanoss.com
|
|
5
|
+
-
|
|
6
|
+
- Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
- of this software and associated documentation files (the “Software”), to
|
|
8
|
+
- deal in the Software \* without restriction, including without limitation
|
|
9
|
+
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
10
|
+
- and/or sell copies of the Software, and to permit persons to whom the
|
|
11
|
+
- Software is furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
- The above copyright notice and this permission notice shall be included in
|
|
14
|
+
- all copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
- THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
21
|
+
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
22
|
+
- IN THE SOFTWARE.
|
|
23
|
+
\*/
|
package/README.md
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<div align='center'>
|
|
2
|
+
|
|
3
|
+
[](https://api.reuse.software/info/github.com/scanoss/scanoss.js)
|
|
4
|
+
|
|
5
|
+
</div>
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# Scanoss JS Package
|
|
11
|
+
|
|
12
|
+
The SCANOSS JS package provides a simple, easy to consume module for interacting with SCANOSS APIs/Engine.
|
|
13
|
+
|
|
14
|
+
It can be installed on your system and used as a CLI or installed directly into your Node.js project.
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
You can install the Scanoss package using npm (the Node Package Manager). Note that you will need to install Node.js and npm. Installing Node.js should install npm as well.
|
|
19
|
+
|
|
20
|
+
To download and install the Scanoss CLI run the following command: `npm install -g scanoss`
|
|
21
|
+
|
|
22
|
+
On the other hand, if you need to install the module in your own Node.js project and consume it as a dependency, execute the following command `npm install scanoss`
|
|
23
|
+
|
|
24
|
+
## CLI Usage
|
|
25
|
+
|
|
26
|
+
Running the bare command will list the available sub-commands:
|
|
27
|
+
|
|
28
|
+
```Usage: scanoss-js [options] [command]
|
|
29
|
+
|
|
30
|
+
The SCANOSS JS package provides a simple, easy to consume module for interacting with SCANOSS APIs/Engine.
|
|
31
|
+
|
|
32
|
+
Options:
|
|
33
|
+
-V, --version output the version number
|
|
34
|
+
-h, --help display help for command
|
|
35
|
+
|
|
36
|
+
Commands:
|
|
37
|
+
scan [options] <source> Scan a folder/file
|
|
38
|
+
help [command] display help for command
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
From there it is possible to scan a source code folder:
|
|
42
|
+
|
|
43
|
+
`scanoss-js scan -o scan-output.json <source-folder>`
|
|
44
|
+
|
|
45
|
+
## Package Usage
|
|
46
|
+
|
|
47
|
+
The Scanoss package can be used programmatically as a standard Node module.
|
|
48
|
+
A simple example that scans two files and writes the result in the project folder is shown below:
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
// Import as ES6
|
|
52
|
+
import { Scanner, ScannerEvents, ScannerTypes } from 'scanoss';
|
|
53
|
+
|
|
54
|
+
// Import as CommonJS
|
|
55
|
+
// const { Scanner, ScannerEvents } = require('scanoss');
|
|
56
|
+
|
|
57
|
+
const scanner = new Scanner();
|
|
58
|
+
|
|
59
|
+
// Set the folder path where the module will save the scan results and fingerprints
|
|
60
|
+
// If is not specified, the module will create a folder on tmp
|
|
61
|
+
// directory using a timestamp as a name
|
|
62
|
+
scanner.setWorkDirectory('/yourProjectFolder/ScanResults/');
|
|
63
|
+
|
|
64
|
+
// Set the scanner log event handler
|
|
65
|
+
scanner.on(ScannerEvents.SCANNER_LOG, (logTxt) => console.log(logTxt));
|
|
66
|
+
|
|
67
|
+
// Set the scanner finish event handler
|
|
68
|
+
scanner.on(ScannerEvents.SCAN_DONE, (resultPath) => {
|
|
69
|
+
console.log('Path to results: ', resultPath);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
const scannerInput = {
|
|
73
|
+
fileList: ['/yourProjectFolder/example1.c', '/yourProjectFolder/example2.c'],
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
// Launch the scanner
|
|
77
|
+
scanner.scan([scannerInput]);
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Events
|
|
81
|
+
|
|
82
|
+
The module provides a set of events that can be used to trigger actions.
|
|
83
|
+
Some events are shown in the example above.
|
|
84
|
+
|
|
85
|
+
| Event Name | Description |
|
|
86
|
+
| ------------------- | ----------------------------------- |
|
|
87
|
+
| SCANNER_LOG | Report any internal scanner events |
|
|
88
|
+
| SCAN_DONE | Scan completed |
|
|
89
|
+
| DISPATCHER_NEW_DATA | New data received but not persisted |
|
|
90
|
+
| RESULTS_APPENDED | Results added to scan report file |
|
|
91
|
+
|
|
92
|
+
# Build and publish the module
|
|
93
|
+
|
|
94
|
+
In order to build and publish the package is a requisite to have installed `yarn`. For more information https://yarnpkg.com/getting-started/install
|
|
95
|
+
|
|
96
|
+
- `yarn install` will install the dependencies.
|
|
97
|
+
- `yarn build` will build the module.
|
|
98
|
+
- `yarn publish` will publish the module.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const dep_1 = require("../commands/dep");
|
|
6
|
+
const fingerprint_1 = require("../commands/fingerprint");
|
|
7
|
+
const scan_1 = require("../commands/scan");
|
|
8
|
+
function CLIErrorHandler(e) {
|
|
9
|
+
console.error(' ');
|
|
10
|
+
console.error(e);
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
async function main() {
|
|
14
|
+
commander_1.program
|
|
15
|
+
.version("0.2.3")
|
|
16
|
+
.description('The SCANOSS JS package provides a simple, easy to consume module for interacting with SCANOSS APIs/Engine.');
|
|
17
|
+
commander_1.program
|
|
18
|
+
.command('scan <source>')
|
|
19
|
+
.description('Scan a folder/file')
|
|
20
|
+
.option('-w, --wfp', 'Scan a .wfp file instead of a folder')
|
|
21
|
+
.option('-c, --concurrency <number>', 'Number of concurrent connections to use while scanning (optional -default 10)')
|
|
22
|
+
.option('-n, --ignore <ignore>', 'Ignore components specified in the SBOM file')
|
|
23
|
+
.option('-f, --filter <path>', 'Loads an user defined filter (optional)')
|
|
24
|
+
.option('-o, --output <filename>', 'Output result file name (optional - default stdout)')
|
|
25
|
+
.option('-F, --flags <flags>', 'Scanning engine flags (1: disable snippet matching, 2 enable snippet ids, 4: disable dependencies, 8: disable licenses, 16: disable copyrights,32: disable vulnerabilities, 64: disable quality, 128: disable cryptography,256: disable best match, 512: Report identified files)')
|
|
26
|
+
.option('-P, --post-size <postsize>', 'Number of kilobytes to limit the post to while scanning (optional - default 64)')
|
|
27
|
+
.option('-R, --max-retry <retry>', 'Max number of retries for each POST (optional -default 5)')
|
|
28
|
+
.option('-M, --timeout <timeout>', 'Timeout (in seconds) for API communication (optional -default 120)')
|
|
29
|
+
.option('-a, --apiurl <apiurl>', 'SCANOSS API URL (optional - default: https://osskb.org/api/scan/direct)')
|
|
30
|
+
.option('-k, --key <key>', 'SCANOSS API Key token (optional - not required for default OSSKB URL)')
|
|
31
|
+
.option('-v, --verbose', 'Makes scan operation verbose')
|
|
32
|
+
.action((source, options) => { (0, scan_1.scanHandler)(source, options).catch((e) => { CLIErrorHandler(e); }); })
|
|
33
|
+
.addHelpText('after', `
|
|
34
|
+
Examples:
|
|
35
|
+
$ scanoss-js scan -o scan-output.json <source-folder>`);
|
|
36
|
+
commander_1.program
|
|
37
|
+
.command('dep <source>')
|
|
38
|
+
.description('Scan for dependencies')
|
|
39
|
+
.option('-o, --output <filename>', 'Output result file name (optional - default stdout)')
|
|
40
|
+
.option('-a, --grpc-host <host>', 'SCANOSS GRPC HOST (optional - default: scanoss.com)')
|
|
41
|
+
.option('-p, --grpc-port <port>', 'SCANOSS GRPC PORT (optional - default: 443)')
|
|
42
|
+
.action((source, options) => { (0, dep_1.depHandler)(source, options).catch((e) => { CLIErrorHandler(e); }); });
|
|
43
|
+
commander_1.program
|
|
44
|
+
.command('fingerprint <source>')
|
|
45
|
+
.description('Generates fingerprints for a folder/file')
|
|
46
|
+
.option('-o, --output <filename>', 'Output result file name (optional - default stdout)')
|
|
47
|
+
.option('-p, --block-size <size>', 'Maximum size in Kb for each fingerprint block (optional - default 64Kb)')
|
|
48
|
+
.action((source, options) => { (0, fingerprint_1.fingerprintHandler)(source, options).catch((e) => { CLIErrorHandler(e); }); });
|
|
49
|
+
await commander_1.program.parseAsync(process.argv);
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
main();
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
console.error(e);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLWJpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaW4vY2xpLWJpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSx5Q0FBb0M7QUFDcEMseUNBQTZDO0FBQzdDLHlEQUE2RDtBQUM3RCwyQ0FBK0M7QUFFL0MsU0FBUyxlQUFlLENBQUMsQ0FBUTtJQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixDQUFDO0FBS0QsS0FBSyxVQUFVLElBQUk7SUFDakIsbUJBQU87U0FDSixPQUFPLENBQUMsT0FBTyxDQUFDO1NBQ2hCLFdBQVcsQ0FBQyw0R0FBNEcsQ0FBQyxDQUFBO0lBRTVILG1CQUFPO1NBQ0osT0FBTyxDQUFDLGVBQWUsQ0FBQztTQUN4QixXQUFXLENBQUMsb0JBQW9CLENBQUM7U0FDakMsTUFBTSxDQUFDLFdBQVcsRUFBRSxzQ0FBc0MsQ0FBQztTQUMzRCxNQUFNLENBQUMsNEJBQTRCLEVBQUUsK0VBQStFLENBQUM7U0FDckgsTUFBTSxDQUFDLHVCQUF1QixFQUFHLDhDQUE4QyxDQUFDO1NBQ2hGLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSx5Q0FBeUMsQ0FBQztTQUN4RSxNQUFNLENBQUMseUJBQXlCLEVBQUUscURBQXFELENBQUM7U0FDeEYsTUFBTSxDQUFDLHFCQUFxQixFQUFFLG1SQUFtUixDQUFDO1NBQ2xULE1BQU0sQ0FBQyw0QkFBNEIsRUFBRSxpRkFBaUYsQ0FBQztTQUN2SCxNQUFNLENBQUMseUJBQXlCLEVBQUUsMkRBQTJELENBQUM7U0FDOUYsTUFBTSxDQUFDLHlCQUF5QixFQUFFLG9FQUFvRSxDQUFDO1NBQ3ZHLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSx5RUFBeUUsQ0FBQztTQUMxRyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsdUVBQXVFLENBQUM7U0FDbEcsTUFBTSxDQUFDLGVBQWUsRUFBRSw4QkFBOEIsQ0FBQztTQUN2RCxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRSxJQUFBLGtCQUFXLEVBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUEsQ0FBQyxDQUFDLENBQUEsQ0FBQSxDQUFDLENBQUM7U0FDOUYsV0FBVyxDQUFDLE9BQU8sRUFBRTs7MERBRWdDLENBQ3JELENBQUM7SUFFRixtQkFBTztTQUNOLE9BQU8sQ0FBQyxjQUFjLENBQUM7U0FDdkIsV0FBVyxDQUFDLHVCQUF1QixDQUFDO1NBQ3BDLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxxREFBcUQsQ0FBQztTQUN4RixNQUFNLENBQUMsd0JBQXdCLEVBQUUscURBQXFELENBQUM7U0FDdkYsTUFBTSxDQUFDLHdCQUF3QixFQUFFLDhDQUE4QyxDQUFDO1NBQ2hGLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFFLElBQUEsZ0JBQVUsRUFBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQSxDQUFDLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQyxDQUFBO0lBRTlGLG1CQUFPO1NBQ04sT0FBTyxDQUFDLHNCQUFzQixDQUFDO1NBQy9CLFdBQVcsQ0FBQywwQ0FBMEMsQ0FBQztTQUN2RCxNQUFNLENBQUMseUJBQXlCLEVBQUUscURBQXFELENBQUM7U0FDeEYsTUFBTSxDQUFDLHlCQUF5QixFQUFFLHlFQUF5RSxDQUFDO1NBQzVHLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFFLElBQUEsZ0NBQWtCLEVBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUEsQ0FBQyxDQUFDLENBQUEsQ0FBQSxDQUFDLENBQUMsQ0FBQTtJQUV0RyxNQUFNLG1CQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBR0QsSUFBSTtJQUNGLElBQUksRUFBRSxDQUFDO0NBQ1I7QUFBQyxPQUFPLENBQUMsRUFBRTtJQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNqQiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function depHandler(rootPath: string, options: any): Promise<void>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.depHandler = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const DependencyScanner_1 = require("../lib/dependencies/DependencyScanner");
|
|
9
|
+
const DependencyScannerCfg_1 = require("../lib/dependencies/DependencyScannerCfg");
|
|
10
|
+
const Tree_1 = require("../lib/tree/Tree");
|
|
11
|
+
const helpers_1 = require("./helpers");
|
|
12
|
+
async function depHandler(rootPath, options) {
|
|
13
|
+
rootPath = rootPath.replace(/\/$/, ''); // Remove trailing slash if exists
|
|
14
|
+
rootPath = rootPath.replace(/^\./, process.env.PWD); // Convert relative path to absolute path.
|
|
15
|
+
const pathIsFolder = await (0, helpers_1.isFolder)(rootPath);
|
|
16
|
+
const dependencyScannerCfg = new DependencyScannerCfg_1.DependencyScannerCfg();
|
|
17
|
+
if (options.grpcHost)
|
|
18
|
+
dependencyScannerCfg.DEFAULT_GRPC_HOST = options.grpcHost;
|
|
19
|
+
if (options.grpcPort)
|
|
20
|
+
dependencyScannerCfg.DEFAULT_GRPC_PORT = options.grpcPort;
|
|
21
|
+
const dependencyScanner = new DependencyScanner_1.DependencyScanner(dependencyScannerCfg);
|
|
22
|
+
let fileList = [];
|
|
23
|
+
fileList.push(rootPath);
|
|
24
|
+
if (pathIsFolder) {
|
|
25
|
+
const tree = new Tree_1.Tree(rootPath);
|
|
26
|
+
tree.buildTree();
|
|
27
|
+
fileList = tree.getRootFolder().getFiles().map((path) => { return rootPath + path; });
|
|
28
|
+
}
|
|
29
|
+
const results = await dependencyScanner.scan(fileList);
|
|
30
|
+
if (options.output) {
|
|
31
|
+
fs_1.default.promises.writeFile(options.output, JSON.stringify(results, null, 2));
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.log(JSON.stringify(results, null, 2));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.depHandler = depHandler;
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBb0I7QUFDcEIsNkVBQTBFO0FBQzFFLG1GQUFnRjtBQUNoRiwyQ0FBd0M7QUFDeEMsdUNBQXFDO0FBRTlCLEtBQUssVUFBVSxVQUFVLENBQUMsUUFBZ0IsRUFBRSxPQUFZO0lBRTdELFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFFLGtDQUFrQztJQUMzRSxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFFLDBDQUEwQztJQUNoRyxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUEsa0JBQVEsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUM5QyxNQUFNLG9CQUFvQixHQUFHLElBQUksMkNBQW9CLEVBQUUsQ0FBQztJQUN4RCxJQUFHLE9BQU8sQ0FBQyxRQUFRO1FBQUUsb0JBQW9CLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUMvRSxJQUFHLE9BQU8sQ0FBQyxRQUFRO1FBQUUsb0JBQW9CLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUUvRSxNQUFNLGlCQUFpQixHQUFHLElBQUkscUNBQWlCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUV0RSxJQUFJLFFBQVEsR0FBa0IsRUFBRSxDQUFDO0lBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFeEIsSUFBSSxZQUFZLEVBQUU7UUFDaEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRSxPQUFPLFFBQVEsR0FBQyxJQUFJLENBQUEsQ0FBQSxDQUFDLENBQUMsQ0FBQztLQUNsRjtJQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0saUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXZELElBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRTtRQUNqQixZQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pFO1NBQU07UUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9DO0FBRUgsQ0FBQztBQTVCRCxnQ0E0QkMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function fingerprintHandler(rootPath: string, options: any): Promise<void>;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.fingerprintHandler = void 0;
|
|
7
|
+
const helpers_1 = require("./helpers");
|
|
8
|
+
const __1 = require("..");
|
|
9
|
+
const Tree_1 = require("../lib/tree/Tree");
|
|
10
|
+
const filtering_1 = require("../lib/filters/filtering");
|
|
11
|
+
const fs_1 = __importDefault(require("fs"));
|
|
12
|
+
const defaultFilter_1 = require("../lib/filters/defaultFilter");
|
|
13
|
+
const cli_progress_1 = __importDefault(require("cli-progress"));
|
|
14
|
+
async function fingerprintHandler(rootPath, options) {
|
|
15
|
+
rootPath = rootPath.replace(/\/$/, ''); // Remove trailing slash if exists
|
|
16
|
+
rootPath = rootPath.replace(/^\./, process.env.PWD); // Convert relative path to absolute path.
|
|
17
|
+
const pathIsFolder = await (0, helpers_1.isFolder)(rootPath);
|
|
18
|
+
const wfpCalculator = new __1.WfpCalculator();
|
|
19
|
+
const tree = new Tree_1.Tree(rootPath);
|
|
20
|
+
const filter = new filtering_1.FilterList('');
|
|
21
|
+
filter.load(defaultFilter_1.defaultFilter);
|
|
22
|
+
tree.loadFilter(filter);
|
|
23
|
+
tree.buildTree();
|
|
24
|
+
const filesToFingerprint = tree.getFileList();
|
|
25
|
+
const optBar1 = { format: 'Fingerprinting Progress: [{bar}] {percentage}% | Fingerprinted {value} files of {total}' };
|
|
26
|
+
const bar1 = new cli_progress_1.default.SingleBar(optBar1, cli_progress_1.default.Presets.shades_classic);
|
|
27
|
+
bar1.start(filesToFingerprint.length, 0);
|
|
28
|
+
let fingerprints = '';
|
|
29
|
+
wfpCalculator.on(__1.ScannerEvents.WINNOWING_NEW_CONTENT, (fingerprintPackage) => {
|
|
30
|
+
bar1.increment(fingerprintPackage.getNumberFilesFingerprinted());
|
|
31
|
+
fingerprints = fingerprints.concat(fingerprintPackage.getContent());
|
|
32
|
+
});
|
|
33
|
+
if (options.verbose)
|
|
34
|
+
wfpCalculator.on(__1.ScannerEvents.WINNOWER_LOG, (log) => {
|
|
35
|
+
console.error(log);
|
|
36
|
+
});
|
|
37
|
+
wfpCalculator.on(__1.ScannerEvents.WINNOWING_FINISHED, () => {
|
|
38
|
+
bar1.stop();
|
|
39
|
+
if (options.output) {
|
|
40
|
+
fs_1.default.writeFileSync(options.output, fingerprints);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.log(fingerprints);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
wfpCalculator.start({ fileList: filesToFingerprint, folderRoot: rootPath });
|
|
47
|
+
}
|
|
48
|
+
exports.fingerprintHandler = fingerprintHandler;
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZ2VycHJpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvZmluZ2VycHJpbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsdUNBQXFDO0FBQ3JDLDBCQUFrRDtBQUNsRCwyQ0FBd0M7QUFDeEMsd0RBQXNEO0FBRXRELDRDQUFvQjtBQUNwQixnRUFBNkQ7QUFDN0QsZ0VBQXVDO0FBR2hDLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxRQUFnQixFQUFFLE9BQVk7SUFFckUsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUUsa0NBQWtDO0lBQzNFLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUUsMENBQTBDO0lBQ2hHLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBQSxrQkFBUSxFQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sYUFBYSxHQUFHLElBQUksaUJBQWEsRUFBRSxDQUFDO0lBRTFDLE1BQU0sSUFBSSxHQUFHLElBQUksV0FBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sTUFBTSxHQUFHLElBQUksc0JBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLDZCQUEyQixDQUFDLENBQUM7SUFFekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFFakIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFOUMsTUFBTSxPQUFPLEdBQUcsRUFBRSxNQUFNLEVBQUUseUZBQXlGLEVBQUUsQ0FBQztJQUN0SCxNQUFNLElBQUksR0FBRyxJQUFJLHNCQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxzQkFBVyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNwRixJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUV6QyxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDdEIsYUFBYSxDQUFDLEVBQUUsQ0FBQyxpQkFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsa0JBQXNDLEVBQUUsRUFBRTtRQUMvRixJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLDJCQUEyQixFQUFFLENBQUMsQ0FBQztRQUNqRSxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBRSxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsQ0FBRSxDQUFDO0lBQ3hFLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxPQUFPLENBQUMsT0FBTztRQUNqQixhQUFhLENBQUMsRUFBRSxDQUFDLGlCQUFhLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUU7WUFDM0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUVMLGFBQWEsQ0FBQyxFQUFFLENBQUMsaUJBQWEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7UUFDdEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osSUFBRyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ2pCLFlBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztTQUNoRDthQUFNO1lBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMzQjtJQUNILENBQUMsQ0FBQyxDQUFDO0lBR0gsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFDLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQztBQUc1RSxDQUFDO0FBNUNELGdEQTRDQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const isFolder: (path: string) => Promise<boolean>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isFolder = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
// Async function that verify if a path is a folder. If the path is not valid the promise will be rejected
|
|
9
|
+
const isFolder = (path) => {
|
|
10
|
+
return new Promise((resolve, reject) => {
|
|
11
|
+
fs_1.default.stat(path, (err, stats) => {
|
|
12
|
+
if (err) {
|
|
13
|
+
reject(err);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
resolve(stats.isDirectory());
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
exports.isFolder = isFolder;
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDRDQUFvQjtBQUVwQiwwR0FBMEc7QUFDbkcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFZLEVBQW9CLEVBQUU7SUFDekQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxZQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMzQixJQUFJLEdBQUcsRUFBRTtnQkFDUCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDYjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7YUFDOUI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFBO0FBVlksUUFBQSxRQUFRLFlBVXBCIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function scanHandler(rootPath: string, options: any): Promise<void>;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.scanHandler = void 0;
|
|
7
|
+
const Scanner_1 = require("../lib/scanner/Scanner");
|
|
8
|
+
const ScannerTypes_1 = require("../lib/scanner/ScannerTypes");
|
|
9
|
+
const ScannerCfg_1 = require("../lib/scanner/ScannerCfg");
|
|
10
|
+
const Tree_1 = require("../lib/tree/Tree");
|
|
11
|
+
const cli_progress_1 = __importDefault(require("cli-progress"));
|
|
12
|
+
const defaultFilter_1 = require("../lib/filters/defaultFilter");
|
|
13
|
+
const filtering_1 = require("../lib/filters/filtering");
|
|
14
|
+
const helpers_1 = require("./helpers");
|
|
15
|
+
const fs_1 = __importDefault(require("fs"));
|
|
16
|
+
async function scanHandler(rootPath, options) {
|
|
17
|
+
let scannerInput = { fileList: [] };
|
|
18
|
+
rootPath = rootPath.replace(/\/$/, ''); // Remove trailing slash if exists
|
|
19
|
+
rootPath = rootPath.replace(/^\./, process.env.PWD); // Convert relative path to absolute path.
|
|
20
|
+
const pathIsFolder = await (0, helpers_1.isFolder)(rootPath);
|
|
21
|
+
// Create scanner and set connections parameters
|
|
22
|
+
const scannerCfg = new ScannerCfg_1.ScannerCfg();
|
|
23
|
+
if (options.concurrency)
|
|
24
|
+
scannerCfg.CONCURRENCY_LIMIT = parseInt(options.concurrency);
|
|
25
|
+
if (options.postSize)
|
|
26
|
+
scannerCfg.WFP_FILE_MAX_SIZE = parseInt(options.postSize) * 1024;
|
|
27
|
+
if (options.apiurl)
|
|
28
|
+
scannerCfg.API_URL = options.apiurl;
|
|
29
|
+
if (options.key)
|
|
30
|
+
scannerCfg.API_KEY = options.key;
|
|
31
|
+
if (options.timeout)
|
|
32
|
+
scannerCfg.TIMEOUT = options.timeout * 1000;
|
|
33
|
+
if (options.maxRetry)
|
|
34
|
+
scannerCfg.MAX_RETRIES_FOR_RECOVERABLES_ERRORS = options.maxRetry;
|
|
35
|
+
const scanner = new Scanner_1.Scanner(scannerCfg);
|
|
36
|
+
scannerInput.folderRoot = rootPath + '/'; // This will remove the project root path from the results.
|
|
37
|
+
if (options.flags)
|
|
38
|
+
scannerInput.engineFlags = options.flags;
|
|
39
|
+
if (!options.wfp) {
|
|
40
|
+
if (pathIsFolder) {
|
|
41
|
+
const tree = new Tree_1.Tree(rootPath);
|
|
42
|
+
const filter = new filtering_1.FilterList('');
|
|
43
|
+
if (options.filter) {
|
|
44
|
+
console.error('Loading filter from file: ' + options.filter);
|
|
45
|
+
filter.loadFromFile(options.filter);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
console.error('Loading default filters...');
|
|
49
|
+
filter.load(defaultFilter_1.defaultFilter);
|
|
50
|
+
}
|
|
51
|
+
console.error('Reading directory... ');
|
|
52
|
+
tree.loadFilter(filter);
|
|
53
|
+
tree.buildTree();
|
|
54
|
+
scannerInput.fileList = tree.getFileList();
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
scannerInput.fileList = [rootPath];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
const winnowing = fs_1.default.readFileSync(rootPath, { encoding: 'utf-8' });
|
|
62
|
+
scannerInput.fileList.length = [...winnowing.matchAll(/file=/g)].length;
|
|
63
|
+
}
|
|
64
|
+
if (!options.verbose) {
|
|
65
|
+
const optBar1 = { format: 'Scan Progress: [{bar}] {percentage}% | Scanned {value} files of {total}' };
|
|
66
|
+
const bar1 = new cli_progress_1.default.SingleBar(optBar1, cli_progress_1.default.Presets.shades_classic);
|
|
67
|
+
bar1.start(scannerInput.fileList.length, 0);
|
|
68
|
+
scanner.on(ScannerTypes_1.ScannerEvents.DISPATCHER_NEW_DATA, (dispResp) => {
|
|
69
|
+
bar1.increment(dispResp.getFilesScanned().length);
|
|
70
|
+
});
|
|
71
|
+
scanner.on(ScannerTypes_1.ScannerEvents.SCAN_DONE, async (resultPath) => { bar1.stop(); });
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
scanner.on(ScannerTypes_1.ScannerEvents.SCANNER_LOG, (logText) => console.error(logText));
|
|
75
|
+
}
|
|
76
|
+
scanner.on(ScannerTypes_1.ScannerEvents.SCAN_DONE, async (resultPath) => {
|
|
77
|
+
if (options.output)
|
|
78
|
+
await fs_1.default.promises.copyFile(resultPath, options.output);
|
|
79
|
+
else
|
|
80
|
+
console.log(await fs_1.default.promises.readFile(resultPath, 'utf8'));
|
|
81
|
+
});
|
|
82
|
+
if (options.wfp)
|
|
83
|
+
scannerInput.wfpPath = rootPath;
|
|
84
|
+
if (options.ignore) {
|
|
85
|
+
scannerInput.sbom = fs_1.default.readFileSync(options.ignore, 'utf-8');
|
|
86
|
+
scannerInput.sbomMode = ScannerTypes_1.SbomMode.SBOM_IGNORE;
|
|
87
|
+
}
|
|
88
|
+
await scanner.scan([scannerInput]);
|
|
89
|
+
}
|
|
90
|
+
exports.scanHandler = scanHandler;
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zY2FuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUFpRDtBQUNqRCw4REFBb0Y7QUFDcEYsMERBQXVEO0FBQ3ZELDJDQUF3QztBQUV4QyxnRUFBdUM7QUFFdkMsZ0VBQTZEO0FBQzdELHdEQUFzRDtBQUV0RCx1Q0FBcUM7QUFFckMsNENBQW9CO0FBR2IsS0FBSyxVQUFVLFdBQVcsQ0FBQyxRQUFnQixFQUFFLE9BQVk7SUFFOUQsSUFBSSxZQUFZLEdBQWlCLEVBQUMsUUFBUSxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRWhELFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFFLGtDQUFrQztJQUMzRSxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFFLDBDQUEwQztJQUNoRyxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUEsa0JBQVEsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUU5QyxnREFBZ0Q7SUFDaEQsTUFBTSxVQUFVLEdBQUcsSUFBSSx1QkFBVSxFQUFFLENBQUM7SUFDcEMsSUFBRyxPQUFPLENBQUMsV0FBVztRQUFFLFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JGLElBQUcsT0FBTyxDQUFDLFFBQVE7UUFBRSxVQUFVLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEYsSUFBRyxPQUFPLENBQUMsTUFBTTtRQUFFLFVBQVUsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUN2RCxJQUFHLE9BQU8sQ0FBQyxHQUFHO1FBQUUsVUFBVSxD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
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './lib/scanner/ScannerTypes';
|
|
2
|
+
export * from './lib/scanner/ScannerCfg';
|
|
3
|
+
export * from './lib/scanner/Scanner';
|
|
4
|
+
export * from './lib/scanner/WfpProvider/WfpCalculator/WfpCalculator';
|
|
5
|
+
export * from './lib/dependencies/DependencyTypes';
|
|
6
|
+
export * from './lib/dependencies/DependencyScannerCfg';
|
|
7
|
+
export * from './lib/dependencies/DependencyScanner';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./lib/scanner/ScannerTypes"), exports);
|
|
14
|
+
__exportStar(require("./lib/scanner/ScannerCfg"), exports);
|
|
15
|
+
__exportStar(require("./lib/scanner/Scanner"), exports);
|
|
16
|
+
__exportStar(require("./lib/scanner/WfpProvider/WfpCalculator/WfpCalculator"), exports);
|
|
17
|
+
__exportStar(require("./lib/dependencies/DependencyTypes"), exports);
|
|
18
|
+
__exportStar(require("./lib/dependencies/DependencyScannerCfg"), exports);
|
|
19
|
+
__exportStar(require("./lib/dependencies/DependencyScanner"), exports);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsNkRBQTJDO0FBQzNDLDJEQUF3QztBQUN4Qyx3REFBcUM7QUFDckMsd0ZBQXNFO0FBQ3RFLHFFQUFtRDtBQUNuRCwwRUFBd0Q7QUFDeEQsdUVBQXFEIn0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DependencyScannerCfg } from "./DependencyScannerCfg";
|
|
2
|
+
import { IDependencyResponse } from "./DependencyTypes";
|
|
3
|
+
export declare class DependencyScanner {
|
|
4
|
+
private localDependency;
|
|
5
|
+
private grpcDependencyService;
|
|
6
|
+
constructor(cfg?: DependencyScannerCfg);
|
|
7
|
+
scan(files: Array<string>): Promise<IDependencyResponse>;
|
|
8
|
+
private purlAdapter;
|
|
9
|
+
private buildRequest;
|
|
10
|
+
private repairOutput;
|
|
11
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DependencyScanner = void 0;
|
|
4
|
+
const GrpcDependencyService_1 = require("../grpc/GrpcDependencyService");
|
|
5
|
+
const scanoss_dependencies_pb_1 = require("../grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb");
|
|
6
|
+
const LocalDependency_1 = require("./LocalDependency/LocalDependency");
|
|
7
|
+
const DependencyScannerCfg_1 = require("./DependencyScannerCfg");
|
|
8
|
+
const packageurl_js_1 = require("packageurl-js");
|
|
9
|
+
class DependencyScanner {
|
|
10
|
+
constructor(cfg = new DependencyScannerCfg_1.DependencyScannerCfg()) {
|
|
11
|
+
this.grpcDependencyService = new GrpcDependencyService_1.GrpcDependencyService(cfg.DEFAULT_GRPC_HOST, cfg.DEFAULT_GRPC_PORT);
|
|
12
|
+
this.localDependency = new LocalDependency_1.LocalDependencies();
|
|
13
|
+
}
|
|
14
|
+
async scan(files) {
|
|
15
|
+
let localDependencies = await this.localDependency.search(files);
|
|
16
|
+
if (localDependencies.files.length === 0)
|
|
17
|
+
return { filesList: [] };
|
|
18
|
+
localDependencies = this.purlAdapter(localDependencies);
|
|
19
|
+
const request = this.buildRequest(localDependencies);
|
|
20
|
+
const grpcResponse = await this.grpcDependencyService.get(request);
|
|
21
|
+
const response = grpcResponse.toObject();
|
|
22
|
+
// Extract scope from localDependencies and add it to response
|
|
23
|
+
// Also adds the requirements field from localDependency to the response if the server didn't
|
|
24
|
+
// replay back a version
|
|
25
|
+
this.repairOutput(localDependencies, response);
|
|
26
|
+
return response;
|
|
27
|
+
}
|
|
28
|
+
purlAdapter(localDependencies) {
|
|
29
|
+
for (const file of localDependencies.files) {
|
|
30
|
+
for (const purl of file.purls) {
|
|
31
|
+
const version = packageurl_js_1.PackageURL.fromString(purl.purl).version;
|
|
32
|
+
purl.requirement = version;
|
|
33
|
+
purl.purl = purl.purl.replace('@' + version, '');
|
|
34
|
+
if (purl.purl.includes('%2F'))
|
|
35
|
+
purl.purl = purl.purl.replace(/%2F/g, '/');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return localDependencies;
|
|
39
|
+
}
|
|
40
|
+
buildRequest(localDependencies) {
|
|
41
|
+
try {
|
|
42
|
+
const depRequest = new scanoss_dependencies_pb_1.DependencyRequest();
|
|
43
|
+
depRequest.setDepth(1);
|
|
44
|
+
for (const file of localDependencies.files) {
|
|
45
|
+
const fileMsg = new scanoss_dependencies_pb_1.DependencyRequest.Files();
|
|
46
|
+
fileMsg.setFile(file.file);
|
|
47
|
+
for (const purl of file.purls) {
|
|
48
|
+
const purlMsg = new scanoss_dependencies_pb_1.DependencyRequest.Purls();
|
|
49
|
+
purlMsg.setPurl(purl.purl);
|
|
50
|
+
if (purl === null || purl === void 0 ? void 0 : purl.requirement)
|
|
51
|
+
purlMsg.setRequirement(purl.requirement);
|
|
52
|
+
fileMsg.addPurls(purlMsg);
|
|
53
|
+
}
|
|
54
|
+
depRequest.addFiles(fileMsg);
|
|
55
|
+
}
|
|
56
|
+
return depRequest;
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
console.error(e);
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
repairOutput(localdependency, serverResponse) {
|
|
64
|
+
// Create a map with key = [filename + purl] and the value is an object containing:
|
|
65
|
+
// * The scope of the local dependency
|
|
66
|
+
// * The requirement of the local dependency
|
|
67
|
+
// Later this map is used to add information in the server response
|
|
68
|
+
const localDependencyInfo = {};
|
|
69
|
+
for (const file of localdependency.files) {
|
|
70
|
+
const filename = file.file;
|
|
71
|
+
for (const localDependency of file.purls) {
|
|
72
|
+
const localInfo = {};
|
|
73
|
+
if (localDependency === null || localDependency === void 0 ? void 0 : localDependency.scope)
|
|
74
|
+
localInfo['scope'] = localDependency.scope;
|
|
75
|
+
if (localDependency === null || localDependency === void 0 ? void 0 : localDependency.requirement)
|
|
76
|
+
localInfo['requirement'] = localDependency.requirement;
|
|
77
|
+
localDependencyInfo[filename + localDependency.purl] = localInfo;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
for (const file of serverResponse.filesList) {
|
|
81
|
+
const filename = file.file;
|
|
82
|
+
for (const dependency of file.dependenciesList) {
|
|
83
|
+
const localDependencyData = localDependencyInfo[filename + dependency.purl];
|
|
84
|
+
if (localDependencyData === null || localDependencyData === void 0 ? void 0 : localDependencyData.scope)
|
|
85
|
+
dependency['scope'] = localDependencyData.scope;
|
|
86
|
+
if ((localDependencyData === null || localDependencyData === void 0 ? void 0 : localDependencyData.requirement) && dependency.version == "") {
|
|
87
|
+
dependency.version = localDependencyData.requirement;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.DependencyScanner = DependencyScanner;
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeVNjYW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2RlcGVuZGVuY2llcy9EZXBlbmRlbmN5U2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5RUFBc0U7QUFDdEUseUdBQW9IO0FBQ3BILHVFQUFzRTtBQUN0RSxpRUFBOEQ7QUFFOUQsaURBQTJDO0FBRTNDLE1BQWEsaUJBQWlCO0lBTTVCLFlBQVksR0FBRyxHQUFHLElBQUksMkNBQW9CLEVBQUU7UUFDMUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksNkNBQXFCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3JHLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxtQ0FBaUIsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFHTSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQW9CO1FBQ3BDLElBQUksaUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRSxJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sRUFBQyxTQUFTLEVBQUUsRUFBRSxFQUFDLENBQUM7UUFDakUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyRCxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkUsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXpDLDhEQUE4RDtRQUM5RCw2RkFBNkY7UUFDN0Ysd0JBQXdCO1FBQ3hCLElBQUks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
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DependencyScannerCfg = void 0;
|
|
4
|
+
class DependencyScannerCfg {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.DEFAULT_GRPC_PORT = '443';
|
|
7
|
+
this.DEFAULT_GRPC_HOST = 'scanoss.com';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.DependencyScannerCfg = DependencyScannerCfg;
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeVNjYW5uZXJDZmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2RlcGVuZGVuY2llcy9EZXBlbmRlbmN5U2Nhbm5lckNmZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFhLG9CQUFvQjtJQUFqQztRQUVFLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUUxQixzQkFBaUIsR0FBRyxhQUFhLENBQUM7SUFFcEMsQ0FBQztDQUFBO0FBTkQsb0RBTUMifQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface LicensesList {
|
|
2
|
+
name: string;
|
|
3
|
+
spdxId: string;
|
|
4
|
+
isSpdxApproved: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface DependenciesList {
|
|
7
|
+
component: string;
|
|
8
|
+
purl: string;
|
|
9
|
+
version?: string;
|
|
10
|
+
scope?: string;
|
|
11
|
+
licensesList: LicensesList[];
|
|
12
|
+
}
|
|
13
|
+
export interface FilesList {
|
|
14
|
+
file: string;
|
|
15
|
+
id: string;
|
|
16
|
+
status: string;
|
|
17
|
+
dependenciesList: DependenciesList[];
|
|
18
|
+
}
|
|
19
|
+
export interface IDependencyResponse {
|
|
20
|
+
filesList: FilesList[];
|
|
21
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeVR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kZXBlbmRlbmNpZXMvRGVwZW5kZW5jeVR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|