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
|
@@ -0,0 +1,76 @@
|
|
|
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.Tree = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const Node_1 = require("./Node");
|
|
10
|
+
const File_1 = __importDefault(require("./File"));
|
|
11
|
+
const Folder_1 = __importDefault(require("./Folder"));
|
|
12
|
+
class Tree {
|
|
13
|
+
constructor(path) {
|
|
14
|
+
const pathParts = path.split(path_1.default.sep);
|
|
15
|
+
this.rootName = path_1.default.basename(path);
|
|
16
|
+
this.rootPath = path;
|
|
17
|
+
this.rootFolder = new Folder_1.default('/', this.rootName);
|
|
18
|
+
}
|
|
19
|
+
buildTree() {
|
|
20
|
+
this.buildTreeRec(this.rootPath, this.rootFolder);
|
|
21
|
+
return this.rootFolder;
|
|
22
|
+
}
|
|
23
|
+
loadFilter(f) {
|
|
24
|
+
this.filter = f;
|
|
25
|
+
}
|
|
26
|
+
buildTreeRec(path, root) {
|
|
27
|
+
const dirEntries = fs_1.default
|
|
28
|
+
.readdirSync(path, { withFileTypes: true }) // Returns a list of files and folders
|
|
29
|
+
.sort(this.dirFirstFileAfter)
|
|
30
|
+
.filter((dirent) => !dirent.isSymbolicLink());
|
|
31
|
+
for (const dirEntry of dirEntries) {
|
|
32
|
+
const fullPath = `${path}/${dirEntry.name}`;
|
|
33
|
+
const relativePath = `${path}/${dirEntry.name}`.replace(this.rootPath, '');
|
|
34
|
+
if (!this.filter || this.filter.include(fullPath))
|
|
35
|
+
if (dirEntry.isDirectory()) {
|
|
36
|
+
const f = new Folder_1.default(relativePath, dirEntry.name);
|
|
37
|
+
const subTree = this.buildTreeRec(`${path}/${dirEntry.name}`, f);
|
|
38
|
+
root.addChild(subTree);
|
|
39
|
+
}
|
|
40
|
+
else
|
|
41
|
+
root.addChild(new File_1.default(relativePath, dirEntry.name));
|
|
42
|
+
}
|
|
43
|
+
return root;
|
|
44
|
+
}
|
|
45
|
+
// This is a sorter that will sort folders before files in alphabetical order.
|
|
46
|
+
dirFirstFileAfter(a, b) {
|
|
47
|
+
if (!a.isDirectory() && b.isDirectory())
|
|
48
|
+
return 1;
|
|
49
|
+
if (a.isDirectory() && !b.isDirectory())
|
|
50
|
+
return -1;
|
|
51
|
+
return 0;
|
|
52
|
+
}
|
|
53
|
+
loadTree(data) {
|
|
54
|
+
this.rootFolder = this.deserialize(data);
|
|
55
|
+
}
|
|
56
|
+
deserialize(data) {
|
|
57
|
+
if (data.type === Node_1.NodeType.FILE) {
|
|
58
|
+
return Object.assign(Object.create(File_1.default.prototype), data);
|
|
59
|
+
}
|
|
60
|
+
const children = data.children.map((child) => this.deserialize(child));
|
|
61
|
+
return Object.assign(Object.create(Folder_1.default.prototype), Object.assign(Object.assign({}, data), { children }));
|
|
62
|
+
}
|
|
63
|
+
getRootFolder() {
|
|
64
|
+
return this.rootFolder;
|
|
65
|
+
}
|
|
66
|
+
getRootPath() {
|
|
67
|
+
return this.rootPath;
|
|
68
|
+
}
|
|
69
|
+
getFileList() {
|
|
70
|
+
const rootPath = this.rootPath.substring(0, this.rootPath.length);
|
|
71
|
+
const fList = this.rootFolder.getFiles();
|
|
72
|
+
return fList.map((fileRelativePath) => { return (rootPath + fileRelativePath); });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.Tree = Tree;
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdHJlZS9UcmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLDRDQUFvQjtBQUNwQixnREFBMkI7QUFHM0IsaUNBQWtDO0FBRWxDLGtEQUEwQjtBQUMxQixzREFBOEI7QUFJOUIsTUFBYSxJQUFJO0lBU2YsWUFBWSxJQUFZO1FBQ3RCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsY0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksZ0JBQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSxTQUFTO1FBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxDQUFhO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFTyxZQUFZLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDN0MsTUFBTSxVQUFVLEdBQUcsWUFBRTthQUNsQixXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsc0NBQXNDO2FBQ2pGLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7YUFDNUIsTUFBTSxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBRXJE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
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { program } from 'commander';
|
|
3
|
+
import { depHandler } from '../commands/dep';
|
|
4
|
+
import { fingerprintHandler } from '../commands/fingerprint';
|
|
5
|
+
import { scanHandler } from '../commands/scan';
|
|
6
|
+
function CLIErrorHandler(e) {
|
|
7
|
+
console.error(' ');
|
|
8
|
+
console.error(e);
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
async function main() {
|
|
12
|
+
program
|
|
13
|
+
.version("0.2.3")
|
|
14
|
+
.description('The SCANOSS JS package provides a simple, easy to consume module for interacting with SCANOSS APIs/Engine.');
|
|
15
|
+
program
|
|
16
|
+
.command('scan <source>')
|
|
17
|
+
.description('Scan a folder/file')
|
|
18
|
+
.option('-w, --wfp', 'Scan a .wfp file instead of a folder')
|
|
19
|
+
.option('-c, --concurrency <number>', 'Number of concurrent connections to use while scanning (optional -default 10)')
|
|
20
|
+
.option('-n, --ignore <ignore>', 'Ignore components specified in the SBOM file')
|
|
21
|
+
.option('-f, --filter <path>', 'Loads an user defined filter (optional)')
|
|
22
|
+
.option('-o, --output <filename>', 'Output result file name (optional - default stdout)')
|
|
23
|
+
.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)')
|
|
24
|
+
.option('-P, --post-size <postsize>', 'Number of kilobytes to limit the post to while scanning (optional - default 64)')
|
|
25
|
+
.option('-R, --max-retry <retry>', 'Max number of retries for each POST (optional -default 5)')
|
|
26
|
+
.option('-M, --timeout <timeout>', 'Timeout (in seconds) for API communication (optional -default 120)')
|
|
27
|
+
.option('-a, --apiurl <apiurl>', 'SCANOSS API URL (optional - default: https://osskb.org/api/scan/direct)')
|
|
28
|
+
.option('-k, --key <key>', 'SCANOSS API Key token (optional - not required for default OSSKB URL)')
|
|
29
|
+
.option('-v, --verbose', 'Makes scan operation verbose')
|
|
30
|
+
.action((source, options) => { scanHandler(source, options).catch((e) => { CLIErrorHandler(e); }); })
|
|
31
|
+
.addHelpText('after', `
|
|
32
|
+
Examples:
|
|
33
|
+
$ scanoss-js scan -o scan-output.json <source-folder>`);
|
|
34
|
+
program
|
|
35
|
+
.command('dep <source>')
|
|
36
|
+
.description('Scan for dependencies')
|
|
37
|
+
.option('-o, --output <filename>', 'Output result file name (optional - default stdout)')
|
|
38
|
+
.option('-a, --grpc-host <host>', 'SCANOSS GRPC HOST (optional - default: scanoss.com)')
|
|
39
|
+
.option('-p, --grpc-port <port>', 'SCANOSS GRPC PORT (optional - default: 443)')
|
|
40
|
+
.action((source, options) => { depHandler(source, options).catch((e) => { CLIErrorHandler(e); }); });
|
|
41
|
+
program
|
|
42
|
+
.command('fingerprint <source>')
|
|
43
|
+
.description('Generates fingerprints for a folder/file')
|
|
44
|
+
.option('-o, --output <filename>', 'Output result file name (optional - default stdout)')
|
|
45
|
+
.option('-p, --block-size <size>', 'Maximum size in Kb for each fingerprint block (optional - default 64Kb)')
|
|
46
|
+
.action((source, options) => { fingerprintHandler(source, options).catch((e) => { CLIErrorHandler(e); }); });
|
|
47
|
+
await program.parseAsync(process.argv);
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
main();
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
console.error(e);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLWJpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaW4vY2xpLWJpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLFNBQVMsZUFBZSxDQUFDLENBQVE7SUFDL0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQztBQUtELEtBQUssVUFBVSxJQUFJO0lBQ2pCLE9BQU87U0FDSixPQUFPLENBQUMsT0FBTyxDQUFDO1NBQ2hCLFdBQVcsQ0FBQyw0R0FBNEcsQ0FBQyxDQUFBO0lBRTVILE9BQU87U0FDSixPQUFPLENBQUMsZUFBZSxDQUFDO1NBQ3hCLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQztTQUNqQyxNQUFNLENBQUMsV0FBVyxFQUFFLHNDQUFzQyxDQUFDO1NBQzNELE1BQU0sQ0FBQyw0QkFBNEIsRUFBRSwrRUFBK0UsQ0FBQztTQUNySCxNQUFNLENBQUMsdUJBQXVCLEVBQUcsOENBQThDLENBQUM7U0FDaEYsTUFBTSxDQUFDLHFCQUFxQixFQUFFLHlDQUF5QyxDQUFDO1NBQ3hFLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxxREFBcUQsQ0FBQztTQUN4RixNQUFNLENBQUMscUJBQXFCLEVBQUUsbVJBQW1SLENBQUM7U0FDbFQsTUFBTSxDQUFDLDRCQUE0QixFQUFFLGlGQUFpRixDQUFDO1NBQ3ZILE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSwyREFBMkQsQ0FBQztTQUM5RixNQUFNLENBQUMseUJBQXlCLEVBQUUsb0VBQW9FLENBQUM7U0FDdkcsTUFBTSxDQUFDLHVCQUF1QixFQUFFLHlFQUF5RSxDQUFDO1NBQzFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSx1RUFBdUUsQ0FBQztTQUNsRyxNQUFNLENBQUMsZUFBZSxFQUFFLDhCQUE4QixDQUFDO1NBQ3ZELE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQSxDQUFDLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQztTQUM5RixXQUFXLENBQUMsT0FBTyxFQUFFOzswREFFZ0MsQ0FDckQsQ0FBQztJQUVGLE9BQU87U0FDTixPQUFPLENBQUMsY0FBYyxDQUFDO1NBQ3ZCLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQztTQUNwQyxNQUFNLENBQUMseUJBQXlCLEVBQUUscURBQXFELENBQUM7U0FDeEYsTUFBTSxDQUFDLHdCQUF3QixFQUFFLHFEQUFxRCxDQUFDO1NBQ3ZGLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSw4Q0FBOEMsQ0FBQztTQUNoRixNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRSxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUEsQ0FBQyxDQUFDLENBQUEsQ0FBQSxDQUFDLENBQUMsQ0FBQTtJQUU5RixPQUFPO1NBQ04sT0FBTyxDQUFDLHNCQUFzQixDQUFDO1NBQy9CLFdBQVcsQ0FBQywwQ0FBMEMsQ0FBQztTQUN2RCxNQUFNLENBQUMseUJBQXlCLEVBQUUscURBQXFELENBQUM7U0FDeEYsTUFBTSxDQUFDLHlCQUF5QixFQUFFLHlFQUF5RSxDQUFDO1NBQzVHLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFFLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQyxDQUFBLENBQUEsQ0FBQyxDQUFDLENBQUE7SUFFdEcsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBR0QsSUFBSTtJQUNGLElBQUksRUFBRSxDQUFDO0NBQ1I7QUFBQyxPQUFPLENBQUMsRUFBRTtJQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNqQiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function depHandler(rootPath: string, options: any): Promise<void>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import { DependencyScanner } from "../lib/dependencies/DependencyScanner";
|
|
3
|
+
import { DependencyScannerCfg } from "../lib/dependencies/DependencyScannerCfg";
|
|
4
|
+
import { Tree } from "../lib/tree/Tree";
|
|
5
|
+
import { isFolder } from "./helpers";
|
|
6
|
+
export async function depHandler(rootPath, options) {
|
|
7
|
+
rootPath = rootPath.replace(/\/$/, ''); // Remove trailing slash if exists
|
|
8
|
+
rootPath = rootPath.replace(/^\./, process.env.PWD); // Convert relative path to absolute path.
|
|
9
|
+
const pathIsFolder = await isFolder(rootPath);
|
|
10
|
+
const dependencyScannerCfg = new DependencyScannerCfg();
|
|
11
|
+
if (options.grpcHost)
|
|
12
|
+
dependencyScannerCfg.DEFAULT_GRPC_HOST = options.grpcHost;
|
|
13
|
+
if (options.grpcPort)
|
|
14
|
+
dependencyScannerCfg.DEFAULT_GRPC_PORT = options.grpcPort;
|
|
15
|
+
const dependencyScanner = new DependencyScanner(dependencyScannerCfg);
|
|
16
|
+
let fileList = [];
|
|
17
|
+
fileList.push(rootPath);
|
|
18
|
+
if (pathIsFolder) {
|
|
19
|
+
const tree = new Tree(rootPath);
|
|
20
|
+
tree.buildTree();
|
|
21
|
+
fileList = tree.getRootFolder().getFiles().map((path) => { return rootPath + path; });
|
|
22
|
+
}
|
|
23
|
+
const results = await dependencyScanner.scan(fileList);
|
|
24
|
+
if (options.output) {
|
|
25
|
+
fs.promises.writeFile(options.output, JSON.stringify(results, null, 2));
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
console.log(JSON.stringify(results, null, 2));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFckMsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVLENBQUMsUUFBZ0IsRUFBRSxPQUFZO0lBRTdELFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFFLGtDQUFrQztJQUMzRSxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFFLDBDQUEwQztJQUNoRyxNQUFNLFlBQVksR0FBRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QyxNQUFNLG9CQUFvQixHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztJQUN4RCxJQUFHLE9BQU8sQ0FBQyxRQUFRO1FBQUUsb0JBQW9CLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUMvRSxJQUFHLE9BQU8sQ0FBQyxRQUFRO1FBQUUsb0JBQW9CLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUUvRSxNQUFNLGlCQUFpQixHQUFHLElBQUksaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUV0RSxJQUFJLFFBQVEsR0FBa0IsRUFBRSxDQUFDO0lBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFeEIsSUFBSSxZQUFZLEVBQUU7UUFDaEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRSxPQUFPLFFBQVEsR0FBQyxJQUFJLENBQUEsQ0FBQSxDQUFDLENBQUMsQ0FBQztLQUNsRjtJQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0saUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXZELElBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRTtRQUNqQixFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pFO1NBQU07UUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9DO0FBRUgsQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function fingerprintHandler(rootPath: string, options: any): Promise<void>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { isFolder } from "./helpers";
|
|
2
|
+
import { ScannerEvents, WfpCalculator } from "..";
|
|
3
|
+
import { Tree } from "../lib/tree/Tree";
|
|
4
|
+
import { FilterList } from "../lib/filters/filtering";
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import { defaultFilter } from "../lib/filters/defaultFilter";
|
|
7
|
+
import cliProgress from 'cli-progress';
|
|
8
|
+
export async function fingerprintHandler(rootPath, options) {
|
|
9
|
+
rootPath = rootPath.replace(/\/$/, ''); // Remove trailing slash if exists
|
|
10
|
+
rootPath = rootPath.replace(/^\./, process.env.PWD); // Convert relative path to absolute path.
|
|
11
|
+
const pathIsFolder = await isFolder(rootPath);
|
|
12
|
+
const wfpCalculator = new WfpCalculator();
|
|
13
|
+
const tree = new Tree(rootPath);
|
|
14
|
+
const filter = new FilterList('');
|
|
15
|
+
filter.load(defaultFilter);
|
|
16
|
+
tree.loadFilter(filter);
|
|
17
|
+
tree.buildTree();
|
|
18
|
+
const filesToFingerprint = tree.getFileList();
|
|
19
|
+
const optBar1 = { format: 'Fingerprinting Progress: [{bar}] {percentage}% | Fingerprinted {value} files of {total}' };
|
|
20
|
+
const bar1 = new cliProgress.SingleBar(optBar1, cliProgress.Presets.shades_classic);
|
|
21
|
+
bar1.start(filesToFingerprint.length, 0);
|
|
22
|
+
let fingerprints = '';
|
|
23
|
+
wfpCalculator.on(ScannerEvents.WINNOWING_NEW_CONTENT, (fingerprintPackage) => {
|
|
24
|
+
bar1.increment(fingerprintPackage.getNumberFilesFingerprinted());
|
|
25
|
+
fingerprints = fingerprints.concat(fingerprintPackage.getContent());
|
|
26
|
+
});
|
|
27
|
+
if (options.verbose)
|
|
28
|
+
wfpCalculator.on(ScannerEvents.WINNOWER_LOG, (log) => {
|
|
29
|
+
console.error(log);
|
|
30
|
+
});
|
|
31
|
+
wfpCalculator.on(ScannerEvents.WINNOWING_FINISHED, () => {
|
|
32
|
+
bar1.stop();
|
|
33
|
+
if (options.output) {
|
|
34
|
+
fs.writeFileSync(options.output, fingerprints);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
console.log(fingerprints);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
wfpCalculator.start({ fileList: filesToFingerprint, folderRoot: rootPath });
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZ2VycHJpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvZmluZ2VycHJpbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLElBQUksQ0FBQztBQUNsRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRELE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxXQUFXLE1BQU0sY0FBYyxDQUFDO0FBR3ZDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxPQUFZO0lBRXJFLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFFLGtDQUFrQztJQUMzRSxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFFLDBDQUEwQztJQUNoRyxNQUFNLFlBQVksR0FBRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QyxNQUFNLGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0lBRTFDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBMkIsQ0FBQyxDQUFDO0lBRXpDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBRWpCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRTlDLE1BQU0sT0FBTyxHQUFHLEVBQUUsTUFBTSxFQUFFLHlGQUF5RixFQUFFLENBQUM7SUFDdEgsTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BGLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXpDLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN0QixhQUFhLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLGtCQUFzQyxFQUFFLEVBQUU7UUFDL0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLENBQUM7UUFDakUsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUUsa0JBQWtCLENBQUMsVUFBVSxFQUFFLENBQUUsQ0FBQztJQUN4RSxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksT0FBTyxDQUFDLE9BQU87UUFDakIsYUFBYSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUU7WUFDM0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUVMLGFBQWEsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtRQUN0RCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixJQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDakIsRUFBRSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ2hEO2FBQU07WUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFHSCxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUMsUUFBUSxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO0FBRzVFLENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const isFolder: (path: string) => Promise<boolean>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
// Async function that verify if a path is a folder. If the path is not valid the promise will be rejected
|
|
3
|
+
export const isFolder = (path) => {
|
|
4
|
+
return new Promise((resolve, reject) => {
|
|
5
|
+
fs.stat(path, (err, stats) => {
|
|
6
|
+
if (err) {
|
|
7
|
+
reject(err);
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
resolve(stats.isDirectory());
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUVwQiwwR0FBMEc7QUFDMUcsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBWSxFQUFvQixFQUFFO0lBQ3pELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2FBQzlCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQSJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function scanHandler(rootPath: string, options: any): Promise<void>;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Scanner } from '../lib/scanner/Scanner';
|
|
2
|
+
import { SbomMode, ScannerEvents } from '../lib/scanner/ScannerTypes';
|
|
3
|
+
import { ScannerCfg } from '../lib/scanner/ScannerCfg';
|
|
4
|
+
import { Tree } from '../lib/tree/Tree';
|
|
5
|
+
import cliProgress from 'cli-progress';
|
|
6
|
+
import { defaultFilter } from '../lib/filters/defaultFilter';
|
|
7
|
+
import { FilterList } from '../lib/filters/filtering';
|
|
8
|
+
import { isFolder } from './helpers';
|
|
9
|
+
import fs from 'fs';
|
|
10
|
+
export async function scanHandler(rootPath, options) {
|
|
11
|
+
let scannerInput = { fileList: [] };
|
|
12
|
+
rootPath = rootPath.replace(/\/$/, ''); // Remove trailing slash if exists
|
|
13
|
+
rootPath = rootPath.replace(/^\./, process.env.PWD); // Convert relative path to absolute path.
|
|
14
|
+
const pathIsFolder = await isFolder(rootPath);
|
|
15
|
+
// Create scanner and set connections parameters
|
|
16
|
+
const scannerCfg = new ScannerCfg();
|
|
17
|
+
if (options.concurrency)
|
|
18
|
+
scannerCfg.CONCURRENCY_LIMIT = parseInt(options.concurrency);
|
|
19
|
+
if (options.postSize)
|
|
20
|
+
scannerCfg.WFP_FILE_MAX_SIZE = parseInt(options.postSize) * 1024;
|
|
21
|
+
if (options.apiurl)
|
|
22
|
+
scannerCfg.API_URL = options.apiurl;
|
|
23
|
+
if (options.key)
|
|
24
|
+
scannerCfg.API_KEY = options.key;
|
|
25
|
+
if (options.timeout)
|
|
26
|
+
scannerCfg.TIMEOUT = options.timeout * 1000;
|
|
27
|
+
if (options.maxRetry)
|
|
28
|
+
scannerCfg.MAX_RETRIES_FOR_RECOVERABLES_ERRORS = options.maxRetry;
|
|
29
|
+
const scanner = new Scanner(scannerCfg);
|
|
30
|
+
scannerInput.folderRoot = rootPath + '/'; // This will remove the project root path from the results.
|
|
31
|
+
if (options.flags)
|
|
32
|
+
scannerInput.engineFlags = options.flags;
|
|
33
|
+
if (!options.wfp) {
|
|
34
|
+
if (pathIsFolder) {
|
|
35
|
+
const tree = new Tree(rootPath);
|
|
36
|
+
const filter = new FilterList('');
|
|
37
|
+
if (options.filter) {
|
|
38
|
+
console.error('Loading filter from file: ' + options.filter);
|
|
39
|
+
filter.loadFromFile(options.filter);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
console.error('Loading default filters...');
|
|
43
|
+
filter.load(defaultFilter);
|
|
44
|
+
}
|
|
45
|
+
console.error('Reading directory... ');
|
|
46
|
+
tree.loadFilter(filter);
|
|
47
|
+
tree.buildTree();
|
|
48
|
+
scannerInput.fileList = tree.getFileList();
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
scannerInput.fileList = [rootPath];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
const winnowing = fs.readFileSync(rootPath, { encoding: 'utf-8' });
|
|
56
|
+
scannerInput.fileList.length = [...winnowing.matchAll(/file=/g)].length;
|
|
57
|
+
}
|
|
58
|
+
if (!options.verbose) {
|
|
59
|
+
const optBar1 = { format: 'Scan Progress: [{bar}] {percentage}% | Scanned {value} files of {total}' };
|
|
60
|
+
const bar1 = new cliProgress.SingleBar(optBar1, cliProgress.Presets.shades_classic);
|
|
61
|
+
bar1.start(scannerInput.fileList.length, 0);
|
|
62
|
+
scanner.on(ScannerEvents.DISPATCHER_NEW_DATA, (dispResp) => {
|
|
63
|
+
bar1.increment(dispResp.getFilesScanned().length);
|
|
64
|
+
});
|
|
65
|
+
scanner.on(ScannerEvents.SCAN_DONE, async (resultPath) => { bar1.stop(); });
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
scanner.on(ScannerEvents.SCANNER_LOG, (logText) => console.error(logText));
|
|
69
|
+
}
|
|
70
|
+
scanner.on(ScannerEvents.SCAN_DONE, async (resultPath) => {
|
|
71
|
+
if (options.output)
|
|
72
|
+
await fs.promises.copyFile(resultPath, options.output);
|
|
73
|
+
else
|
|
74
|
+
console.log(await fs.promises.readFile(resultPath, 'utf8'));
|
|
75
|
+
});
|
|
76
|
+
if (options.wfp)
|
|
77
|
+
scannerInput.wfpPath = rootPath;
|
|
78
|
+
if (options.ignore) {
|
|
79
|
+
scannerInput.sbom = fs.readFileSync(options.ignore, 'utf-8');
|
|
80
|
+
scannerInput.sbomMode = SbomMode.SBOM_IGNORE;
|
|
81
|
+
}
|
|
82
|
+
await scanner.scan([scannerInput]);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zY2FuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBZ0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhDLE9BQU8sV0FBVyxNQUFNLGNBQWMsQ0FBQztBQUV2QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFckMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBR3BCLE1BQU0sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUFDLFFBQWdCLEVBQUUsT0FBWTtJQUU5RCxJQUFJLFlBQVksR0FBaUIsRUFBQyxRQUFRLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFaEQsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUUsa0NBQWtDO0lBQzNFLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUUsMENBQTBDO0lBQ2hHLE1BQU0sWUFBWSxHQUFHLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTlDLGdEQUFnRDtJQUNoRCxNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQ3BDLElBQUcsT0FBTyxDQUFDLFdBQVc7UUFBRSxVQUFVLENBQUMs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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,8 @@
|
|
|
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';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDBCQUEwQixDQUFBO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUE7QUFDckMsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxzQ0FBc0MsQ0FBQyJ9
|
|
@@ -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,92 @@
|
|
|
1
|
+
import { GrpcDependencyService } from "../grpc/GrpcDependencyService";
|
|
2
|
+
import { DependencyRequest } from "../grpc/scanoss/api/dependencies/v2/scanoss-dependencies_pb";
|
|
3
|
+
import { LocalDependencies } from "./LocalDependency/LocalDependency";
|
|
4
|
+
import { DependencyScannerCfg } from "./DependencyScannerCfg";
|
|
5
|
+
import { PackageURL } from "packageurl-js";
|
|
6
|
+
export class DependencyScanner {
|
|
7
|
+
localDependency;
|
|
8
|
+
grpcDependencyService;
|
|
9
|
+
constructor(cfg = new DependencyScannerCfg()) {
|
|
10
|
+
this.grpcDependencyService = new GrpcDependencyService(cfg.DEFAULT_GRPC_HOST, cfg.DEFAULT_GRPC_PORT);
|
|
11
|
+
this.localDependency = new LocalDependencies();
|
|
12
|
+
}
|
|
13
|
+
async scan(files) {
|
|
14
|
+
let localDependencies = await this.localDependency.search(files);
|
|
15
|
+
if (localDependencies.files.length === 0)
|
|
16
|
+
return { filesList: [] };
|
|
17
|
+
localDependencies = this.purlAdapter(localDependencies);
|
|
18
|
+
const request = this.buildRequest(localDependencies);
|
|
19
|
+
const grpcResponse = await this.grpcDependencyService.get(request);
|
|
20
|
+
const response = grpcResponse.toObject();
|
|
21
|
+
// Extract scope from localDependencies and add it to response
|
|
22
|
+
// Also adds the requirements field from localDependency to the response if the server didn't
|
|
23
|
+
// replay back a version
|
|
24
|
+
this.repairOutput(localDependencies, response);
|
|
25
|
+
return response;
|
|
26
|
+
}
|
|
27
|
+
purlAdapter(localDependencies) {
|
|
28
|
+
for (const file of localDependencies.files) {
|
|
29
|
+
for (const purl of file.purls) {
|
|
30
|
+
const version = PackageURL.fromString(purl.purl).version;
|
|
31
|
+
purl.requirement = version;
|
|
32
|
+
purl.purl = purl.purl.replace('@' + version, '');
|
|
33
|
+
if (purl.purl.includes('%2F'))
|
|
34
|
+
purl.purl = purl.purl.replace(/%2F/g, '/');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return localDependencies;
|
|
38
|
+
}
|
|
39
|
+
buildRequest(localDependencies) {
|
|
40
|
+
try {
|
|
41
|
+
const depRequest = new DependencyRequest();
|
|
42
|
+
depRequest.setDepth(1);
|
|
43
|
+
for (const file of localDependencies.files) {
|
|
44
|
+
const fileMsg = new DependencyRequest.Files();
|
|
45
|
+
fileMsg.setFile(file.file);
|
|
46
|
+
for (const purl of file.purls) {
|
|
47
|
+
const purlMsg = new DependencyRequest.Purls();
|
|
48
|
+
purlMsg.setPurl(purl.purl);
|
|
49
|
+
if (purl?.requirement)
|
|
50
|
+
purlMsg.setRequirement(purl.requirement);
|
|
51
|
+
fileMsg.addPurls(purlMsg);
|
|
52
|
+
}
|
|
53
|
+
depRequest.addFiles(fileMsg);
|
|
54
|
+
}
|
|
55
|
+
return depRequest;
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
console.error(e);
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
repairOutput(localdependency, serverResponse) {
|
|
63
|
+
// Create a map with key = [filename + purl] and the value is an object containing:
|
|
64
|
+
// * The scope of the local dependency
|
|
65
|
+
// * The requirement of the local dependency
|
|
66
|
+
// Later this map is used to add information in the server response
|
|
67
|
+
const localDependencyInfo = {};
|
|
68
|
+
for (const file of localdependency.files) {
|
|
69
|
+
const filename = file.file;
|
|
70
|
+
for (const localDependency of file.purls) {
|
|
71
|
+
const localInfo = {};
|
|
72
|
+
if (localDependency?.scope)
|
|
73
|
+
localInfo['scope'] = localDependency.scope;
|
|
74
|
+
if (localDependency?.requirement)
|
|
75
|
+
localInfo['requirement'] = localDependency.requirement;
|
|
76
|
+
localDependencyInfo[filename + localDependency.purl] = localInfo;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
for (const file of serverResponse.filesList) {
|
|
80
|
+
const filename = file.file;
|
|
81
|
+
for (const dependency of file.dependenciesList) {
|
|
82
|
+
const localDependencyData = localDependencyInfo[filename + dependency.purl];
|
|
83
|
+
if (localDependencyData?.scope)
|
|
84
|
+
dependency['scope'] = localDependencyData.scope;
|
|
85
|
+
if (localDependencyData?.requirement && dependency.version == "") {
|
|
86
|
+
dependency.version = localDependencyData.requirement;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeVNjYW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2RlcGVuZGVuY2llcy9EZXBlbmRlbmN5U2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQXNCLE1BQU0sNkRBQTZELENBQUM7QUFDcEgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxNQUFNLE9BQU8saUJBQWlCO0lBRXBCLGVBQWUsQ0FBb0I7SUFFbkMscUJBQXFCLENBQXdCO0lBRXJELFlBQVksR0FBRyxHQUFHLElBQUksb0JBQW9CLEVBQUU7UUFDMUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUkscUJBQXFCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3JHLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFHTSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQW9CO1FBQ3BDLElBQUksaUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRSxJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sRUFBQyxTQUFTLEVBQUUsRUFBRSxFQUFDLENBQUM7UUFDakUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZ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
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export class DependencyScannerCfg {
|
|
2
|
+
DEFAULT_GRPC_PORT = '443';
|
|
3
|
+
DEFAULT_GRPC_HOST = 'scanoss.com';
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeVNjYW5uZXJDZmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2RlcGVuZGVuY2llcy9EZXBlbmRlbmN5U2Nhbm5lckNmZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sb0JBQW9CO0lBRS9CLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUUxQixpQkFBaUIsR0FBRyxhQUFhLENBQUM7Q0FFbkMifQ==
|
|
@@ -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,16 @@
|
|
|
1
|
+
export interface ILocalPurl {
|
|
2
|
+
purl: string;
|
|
3
|
+
requirement?: string;
|
|
4
|
+
scope?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ILocalDependency {
|
|
7
|
+
file: string;
|
|
8
|
+
purls: Array<ILocalPurl>;
|
|
9
|
+
}
|
|
10
|
+
export interface ILocalDependencies {
|
|
11
|
+
files: Array<ILocalDependency>;
|
|
12
|
+
}
|
|
13
|
+
export declare type ParserFuncType = (fileContent: string, filePath: string) => ILocalDependency;
|
|
14
|
+
export interface ParserDefinitions {
|
|
15
|
+
[key: string]: ParserFuncType;
|
|
16
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeVR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9kZXBlbmRlbmNpZXMvTG9jYWxEZXBlbmRlbmN5L0RlcGVuZGVuY3lUeXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import { requirementsParser } from "./parsers/pyParser";
|
|
4
|
+
import { pomParser } from "./parsers/mavenParser";
|
|
5
|
+
import { packagelockParser, packageParser } from "./parsers/npmParser";
|
|
6
|
+
import { gemfilelockParser, gemfileParser } from "./parsers/rubyParser";
|
|
7
|
+
import { goModParser } from './parsers/golangParser';
|
|
8
|
+
export class LocalDependencies {
|
|
9
|
+
parserMap;
|
|
10
|
+
constructor() {
|
|
11
|
+
/*
|
|
12
|
+
This is a hash map that connect a filename with it's own parser function
|
|
13
|
+
Any parser function must return a ILocalDependencies object (See DependencyTypes.ts)
|
|
14
|
+
*/
|
|
15
|
+
this.parserMap = {
|
|
16
|
+
'requirements.txt': requirementsParser,
|
|
17
|
+
'pom.xml': pomParser,
|
|
18
|
+
'package.json': packageParser,
|
|
19
|
+
'package-lock.json': packagelockParser,
|
|
20
|
+
'Gemfile': gemfileParser,
|
|
21
|
+
'Gemfile.lock': gemfilelockParser,
|
|
22
|
+
'go.mod': goModParser,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
async search(files) {
|
|
26
|
+
let results = { files: [] };
|
|
27
|
+
for (const filePath of files) {
|
|
28
|
+
const fileName = path.basename(filePath);
|
|
29
|
+
if (this.parserMap[fileName] != null) {
|
|
30
|
+
try {
|
|
31
|
+
const fileContent = await fs.promises.readFile(filePath, 'utf8');
|
|
32
|
+
const dependency = this.parserMap[fileName](fileContent, filePath);
|
|
33
|
+
if (dependency.purls.length != 0)
|
|
34
|
+
results.files.push(dependency);
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
console.error(e);
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return results;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jYWxEZXBlbmRlbmN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9kZXBlbmRlbmNpZXMvTG9jYWxEZXBlbmRlbmN5L0xvY2FsRGVwZW5kZW5jeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXBCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxNQUFNLE9BQU8saUJBQWlCO0lBRXBCLFNBQVMsQ0FBaUM7SUFFbEQ7UUFDSTs7O1VBR0U7UUFDRixJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2Ysa0JBQWtCLEVBQUUsa0JBQWtCO1lBQ3RDLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLGNBQWMsRUFBRSxhQUFhO1lBQzdCLG1CQUFtQixFQUFFLGlCQUFpQjtZQUN0QyxTQUFTLEVBQUUsYUFBYTtZQUN4QixjQUFjLEVBQUUsaUJBQWlCO1lBQ2pDLFFBQVEsRUFBRSxXQUFXO1NBQ3RCLENBQUM7SUFDTixDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFvQjtRQUN0QyxJQUFJLE9BQU8sR0FBdUIsRUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFDLENBQUM7UUFDOUMsS0FBSyxNQUFNLFFBQVEsSUFBSSxLQUFLLEVBQUU7WUFDMUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6QyxJQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFO2dCQUNuQyxJQUFHO29CQUNELE1BQU0sV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUNqRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDbkUsSUFBRyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO3dCQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDcEM7Z0JBQUMsT0FBTSxDQUFDLEVBQUU7b0JBQ1QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDakIsU0FBUztpQkFDVjthQUNGO1NBQ0o7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YifQ==
|