scanoss 0.40.0 → 0.40.2
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 +8 -0
- package/build/main/cli/commands/helpers.js +5 -1
- package/build/main/cli/commands/helpers.spec.d.ts +1 -0
- package/build/main/cli/commands/helpers.spec.js +51 -0
- package/build/main/cli/commands/wfp.js +7 -3
- package/build/main/cli/commands/wfp.spec.d.ts +1 -0
- package/build/main/cli/commands/wfp.spec.js +56 -0
- package/build/main/tsconfig.tsbuildinfo +1 -1
- package/build/module/cli/commands/helpers.js +5 -1
- package/build/module/cli/commands/helpers.spec.d.ts +1 -0
- package/build/module/cli/commands/helpers.spec.js +46 -0
- package/build/module/cli/commands/wfp.js +7 -3
- package/build/module/cli/commands/wfp.spec.d.ts +1 -0
- package/build/module/cli/commands/wfp.spec.js +51 -0
- package/build/module/tsconfig.module.tsbuildinfo +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
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
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
|
+
## [0.40.2] (2026-06-08)
|
|
7
|
+
### Fixed
|
|
8
|
+
- `scanoss-js wfp <file>` no longer emits an empty path in the `file=` line when fingerprinting a single file.
|
|
9
|
+
|
|
10
|
+
## [0.40.1] (2026-06-05)
|
|
11
|
+
### Fixed
|
|
12
|
+
- `scanoss-js scan <file>` no longer fails with `ENOTDIR` when the scan target is a single file. The automatic `scanoss.json` settings lookup now resolves the file's parent directory instead of calling `readdir` on the file itself.
|
|
13
|
+
|
|
6
14
|
## [0.40.0] (2026-04-28)
|
|
7
15
|
### Fixed
|
|
8
16
|
- `WfpCalculator` no longer crashes with `RangeError: Invalid array length` when fingerprinting large binary files.
|
|
@@ -32,6 +32,10 @@ async function getSettingsFilePath(settingsFilePath, scanPath) {
|
|
|
32
32
|
if (settingsFilePath) {
|
|
33
33
|
return settingsFilePath;
|
|
34
34
|
}
|
|
35
|
+
const stats = await fs_1.default.promises.stat(scanPath);
|
|
36
|
+
if (!stats.isDirectory()) {
|
|
37
|
+
scanPath = path_2.default.dirname(scanPath);
|
|
38
|
+
}
|
|
35
39
|
const files = await fs_1.default.promises.readdir(scanPath);
|
|
36
40
|
if (files.some((f) => f === exports.DEFAULT_SETTINGS_FILE)) {
|
|
37
41
|
return path_2.default.join(scanPath, exports.DEFAULT_SETTINGS_FILE);
|
|
@@ -73,4 +77,4 @@ function validateSettingsFile(settings) {
|
|
|
73
77
|
}
|
|
74
78
|
return true;
|
|
75
79
|
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jbGkvY29tbWFuZHMvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUF1QkEsd0RBRUM7QUFFRCxrREFjQztBQUVELG9EQTBDQztBQXJGRCxnREFBMkI7QUFDM0IsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQU1YLFFBQUEscUJBQXFCLEdBQUcsY0FBYyxDQUFDO0FBRXBELDBHQUEwRztBQUNuRyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQVksRUFBb0IsRUFBRTtJQUN6RCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3JDLFlBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzNCLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUMvQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQTtBQVZZLFFBQUEsUUFBUSxZQVVwQjtBQUVELFNBQWdCLHNCQUFzQixDQUFDLElBQVk7SUFDakQsT0FBTyxjQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBQyxjQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDckQsQ0FBQztBQUVNLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxnQkFBK0IsRUFBRSxRQUFlO0lBRXhGLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNyQixPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQUUsQ0FBQyxRQUFRLENBQUMsSUFB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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
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
|
+
const chai_1 = require("chai");
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const os_1 = __importDefault(require("os"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const helpers_1 = require("./helpers");
|
|
11
|
+
describe('Suit test for CLI helpers', () => {
|
|
12
|
+
describe('getSettingsFilePath', () => {
|
|
13
|
+
let tmpDir;
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'scanoss-helpers-'));
|
|
16
|
+
});
|
|
17
|
+
afterEach(() => {
|
|
18
|
+
fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
|
|
19
|
+
});
|
|
20
|
+
it('Returns the explicit settings path when provided', async () => {
|
|
21
|
+
const explicitPath = '/some/path/scanoss.json';
|
|
22
|
+
const result = await (0, helpers_1.getSettingsFilePath)(explicitPath, tmpDir);
|
|
23
|
+
(0, chai_1.expect)(result).to.equal(explicitPath);
|
|
24
|
+
});
|
|
25
|
+
it('Finds the default settings file in a scanned directory', async () => {
|
|
26
|
+
const settingsFile = path_1.default.join(tmpDir, helpers_1.DEFAULT_SETTINGS_FILE);
|
|
27
|
+
fs_1.default.writeFileSync(settingsFile, '{}');
|
|
28
|
+
const result = await (0, helpers_1.getSettingsFilePath)(null, tmpDir);
|
|
29
|
+
(0, chai_1.expect)(result).to.equal(settingsFile);
|
|
30
|
+
});
|
|
31
|
+
it('Returns null when the scanned directory has no settings file', async () => {
|
|
32
|
+
const result = await (0, helpers_1.getSettingsFilePath)(null, tmpDir);
|
|
33
|
+
(0, chai_1.expect)(result).to.equal(null);
|
|
34
|
+
});
|
|
35
|
+
it('Does not throw ENOTDIR when scanning a single file', async () => {
|
|
36
|
+
const scannedFile = path_1.default.join(tmpDir, 'user-agreement.pdf');
|
|
37
|
+
fs_1.default.writeFileSync(scannedFile, 'dummy content');
|
|
38
|
+
const result = await (0, helpers_1.getSettingsFilePath)(null, scannedFile);
|
|
39
|
+
(0, chai_1.expect)(result).to.equal(null);
|
|
40
|
+
});
|
|
41
|
+
it('Finds the default settings file next to a scanned single file', async () => {
|
|
42
|
+
const scannedFile = path_1.default.join(tmpDir, 'user-agreement.pdf');
|
|
43
|
+
fs_1.default.writeFileSync(scannedFile, 'dummy content');
|
|
44
|
+
const settingsFile = path_1.default.join(tmpDir, helpers_1.DEFAULT_SETTINGS_FILE);
|
|
45
|
+
fs_1.default.writeFileSync(settingsFile, '{}');
|
|
46
|
+
const result = await (0, helpers_1.getSettingsFilePath)(null, scannedFile);
|
|
47
|
+
(0, chai_1.expect)(result).to.equal(settingsFile);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NsaS9jb21tYW5kcy9oZWxwZXJzLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrQkFBOEI7QUFDOUIsNENBQW9CO0FBQ3BCLDRDQUFvQjtBQUNwQixnREFBd0I7QUFDeEIsdUNBQXVFO0FBRXZFLFFBQVEsQ0FBQywyQkFBMkIsRUFBRSxHQUFHLEVBQUU7SUFFekMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtRQUVuQyxJQUFJLE1BQWMsQ0FBQztRQUVuQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSxHQUFHLFlBQUUsQ0FBQyxXQUFXLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxZQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLFlBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNoRSxNQUFNLFlBQVksR0FBRyx5QkFBeUIsQ0FBQztZQUMvQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsNkJBQW1CLEVBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQy9ELElBQUEsYUFBTSxFQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsd0RBQXdELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdEUsTUFBTSxZQUFZLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsK0JBQXFCLENBQUMsQ0FBQztZQUM5RCxZQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNyQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsNkJBQW1CLEVBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZELElBQUEsYUFBTSxFQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOERBQThELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDNUUsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLDZCQUFtQixFQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN2RCxJQUFBLGFBQU0sRUFBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2xFLE1BQU0sV0FBVyxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7WUFDNUQsWUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDL0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLDZCQUFtQixFQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztZQUM1RCxJQUFBLGFBQU0sRUFBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzdFLE1BQU0sV0FBVyxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7WUFDNUQsWUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDL0MsTUFBTSxZQUFZLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsK0JBQXFCLENBQUMsQ0FBQztZQUM5RCxZQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNyQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsNkJBQW1CLEVBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzVELElBQUEsYUFBTSxFQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDLENBQUMsQ0FBQztBQUVMLENBQUMsQ0FBQyxDQUFDIn0=
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.wfpHandler = wfpHandler;
|
|
7
7
|
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
8
9
|
const cli_progress_1 = __importDefault(require("cli-progress"));
|
|
9
10
|
const helpers_1 = require("./helpers");
|
|
10
11
|
const ScannerTypes_1 = require("../../sdk/scanner/ScannerTypes");
|
|
@@ -17,13 +18,16 @@ async function wfpHandler(rootPath, options) {
|
|
|
17
18
|
const pathIsFolder = await (0, helpers_1.isFolder)(rootPath);
|
|
18
19
|
const wfpCalculator = new WfpCalculator_1.WfpCalculator();
|
|
19
20
|
let filesToFingerprint = [];
|
|
21
|
+
let folderRoot = rootPath;
|
|
20
22
|
if (pathIsFolder) {
|
|
21
23
|
const tree = new Tree_1.Tree(rootPath);
|
|
22
24
|
tree.build();
|
|
23
25
|
filesToFingerprint = tree.getFileList(new ScanFilter_1.ScanFilter(""));
|
|
24
26
|
}
|
|
25
27
|
else {
|
|
26
|
-
|
|
28
|
+
const absoluteFilePath = path_1.default.resolve(rootPath);
|
|
29
|
+
filesToFingerprint.push(absoluteFilePath);
|
|
30
|
+
folderRoot = path_1.default.dirname(absoluteFilePath);
|
|
27
31
|
}
|
|
28
32
|
const optBar1 = { format: 'Fingerprinting Progress: [{bar}] {percentage}% | Fingerprinted {value} files of {total}' };
|
|
29
33
|
const bar1 = new cli_progress_1.default.SingleBar(optBar1, cli_progress_1.default.Presets.shades_classic);
|
|
@@ -46,9 +50,9 @@ async function wfpHandler(rootPath, options) {
|
|
|
46
50
|
console.log(fingerprints);
|
|
47
51
|
}
|
|
48
52
|
});
|
|
49
|
-
const wfpInput = { fileList: filesToFingerprint, folderRoot
|
|
53
|
+
const wfpInput = { fileList: filesToFingerprint, folderRoot, obfuscate: options.obfuscate };
|
|
50
54
|
if (options.hpsm)
|
|
51
55
|
wfpInput.winnowingMode = ScannerTypes_1.WinnowingMode.FULL_WINNOWING_HPSM;
|
|
52
56
|
await wfpCalculator.start(wfpInput);
|
|
53
57
|
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ZwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NsaS9jb21tYW5kcy93ZnAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFjQSxnQ0FpREM7QUEvREQsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUV4QixnRUFBdUM7QUFFdkMsdUNBQXFDO0FBQ3JDLGlFQUE4RTtBQUU5RSw2RkFBMEY7QUFFMUYsOENBQTJDO0FBQzNDLGtFQUErRDtBQUd4RCxLQUFLLFVBQVUsVUFBVSxDQUFDLFFBQWdCLEVBQUUsT0FBWTtJQUU3RCxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBRSxrQ0FBa0M7SUFDM0UsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBRSwwQ0FBMEM7SUFDaEcsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFBLGtCQUFRLEVBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUMsTUFBTSxhQUFhLEdBQUcsSUFBSSw2QkFBYSxFQUFFLENBQUM7SUFFMUMsSUFBSSxrQkFBa0IsR0FBYSxFQUFFLENBQUM7SUFDdEMsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDO0lBQzFCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2Isa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLHVCQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sZ0JBQWdCLEdBQUcsY0FBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMxQyxVQUFVLEdBQUcsY0FBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFHRCxNQUFNLE9BQU8sR0FBRyxFQUFFLE1BQU0sRUFBRSx5RkFBeUYsRUFBRSxDQUFDO0lBQ3RILE1BQU0sSUFBSSxHQUFHLElBQUksc0JBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLHNCQUFXLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BGLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXpDLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN0QixhQUFhLENBQUMsRUFBRSxDQUFDLDRCQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxrQkFBc0MsRUFBRSxFQUFFO1FBQy9GLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFFLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxDQUFFLENBQUM7SUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLE9BQU8sQ0FBQyxPQUFPO1FBQ2pCLGFBQWEsQ0FBQyxFQUFFLENBQUMsNEJBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxHQUFXLEVBQUUsRUFBRTtZQUMzRCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBRUwsYUFBYSxDQUFDLEVBQUUsQ0FBQyw0QkFBYSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtRQUN0RCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixJQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixZQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDakQsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFzQixFQUFDLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUM3RyxJQUFHLE9BQU8sQ0FBQyxJQUFJO1FBQUUsUUFBUSxDQUFDLGFBQWEsR0FBRyw0QkFBYSxDQUFDLG1CQUFtQixDQUFDO0lBQzVFLE1BQU0sYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUd0QyxDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
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
|
+
const chai_1 = require("chai");
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const os_1 = __importDefault(require("os"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const wfp_1 = require("./wfp");
|
|
11
|
+
describe('Suit test for wfp command', () => {
|
|
12
|
+
let tmpDir;
|
|
13
|
+
let cwd;
|
|
14
|
+
let pwd;
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'scanoss-wfp-'));
|
|
17
|
+
cwd = process.cwd();
|
|
18
|
+
pwd = process.env.PWD;
|
|
19
|
+
});
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
process.chdir(cwd);
|
|
22
|
+
process.env.PWD = pwd;
|
|
23
|
+
fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
|
|
24
|
+
});
|
|
25
|
+
// SP-4442: fingerprinting a single file must emit a non-empty path in the
|
|
26
|
+
// file= line. Previously folderRoot was set to the file path itself, so the
|
|
27
|
+
// relative-path strip produced an empty path, which the scan server rejects
|
|
28
|
+
// ("no files found in .wfp content") and the C engine crashes on.
|
|
29
|
+
it('Emits a non-empty file path when fingerprinting a single file', async () => {
|
|
30
|
+
const sampleFile = path_1.default.join(tmpDir, 'sample.js');
|
|
31
|
+
fs_1.default.writeFileSync(sampleFile, 'function hello() { return "world"; }\n');
|
|
32
|
+
const outputFile = path_1.default.join(tmpDir, 'out.wfp');
|
|
33
|
+
await (0, wfp_1.wfpHandler)(sampleFile, { output: outputFile });
|
|
34
|
+
const wfp = fs_1.default.readFileSync(outputFile, 'utf-8');
|
|
35
|
+
const fileLine = wfp.split('\n').find((l) => l.startsWith('file='));
|
|
36
|
+
(0, chai_1.expect)(fileLine, 'expected a file= line in the wfp output').to.not.be.undefined;
|
|
37
|
+
// file=<md5>,<size>,<path>
|
|
38
|
+
const filePath = fileLine.split(',')[2];
|
|
39
|
+
(0, chai_1.expect)(filePath, 'file= path should not be empty for a single file').to.equal('/sample.js');
|
|
40
|
+
});
|
|
41
|
+
// SP-4442: the customer ran `cd <dir> && scanoss-js wfp <name>`. A bare
|
|
42
|
+
// relative filename must still resolve to a correct path, not get mangled by
|
|
43
|
+
// the relative-path strip (folderRoot must be a real prefix, not ".").
|
|
44
|
+
it('Emits a correct file path for a bare relative filename', async () => {
|
|
45
|
+
fs_1.default.writeFileSync(path_1.default.join(tmpDir, 'jquery-1.8.1-min.js'), 'function hello() { return "world"; }\n');
|
|
46
|
+
process.chdir(tmpDir);
|
|
47
|
+
process.env.PWD = tmpDir;
|
|
48
|
+
const outputFile = path_1.default.join(tmpDir, 'out.wfp');
|
|
49
|
+
await (0, wfp_1.wfpHandler)('jquery-1.8.1-min.js', { output: outputFile });
|
|
50
|
+
const wfp = fs_1.default.readFileSync(outputFile, 'utf-8');
|
|
51
|
+
const fileLine = wfp.split('\n').find((l) => l.startsWith('file='));
|
|
52
|
+
const filePath = fileLine.split(',')[2];
|
|
53
|
+
(0, chai_1.expect)(filePath, 'bare relative filename should not be corrupted').to.equal('/jquery-1.8.1-min.js');
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ZwLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xpL2NvbW1hbmRzL3dmcC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0JBQThCO0FBQzlCLDRDQUFvQjtBQUNwQiw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLCtCQUFtQztBQUVuQyxRQUFRLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO0lBRXpDLElBQUksTUFBYyxDQUFDO0lBQ25CLElBQUksR0FBVyxDQUFDO0lBQ2hCLElBQUksR0FBdUIsQ0FBQztJQUU1QixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsTUFBTSxHQUFHLFlBQUUsQ0FBQyxXQUFXLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxZQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNoRSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUN4QixDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUN0QixZQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQyxDQUFDLENBQUM7SUFFSCwwRUFBMEU7SUFDMUUsNEVBQTRFO0lBQzVFLDRFQUE0RTtJQUM1RSxrRUFBa0U7SUFDbEUsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzdFLE1BQU0sVUFBVSxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELFlBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUM7UUFDdkUsTUFBTSxVQUFVLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFaEQsTUFBTSxJQUFBLGdCQUFVLEVBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFFckQsTUFBTSxHQUFHLEdBQUcsWUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakQsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNwRSxJQUFBLGFBQU0sRUFBQyxRQUFRLEVBQUUseUNBQXlDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFFaEYsMkJBQTJCO1FBQzNCLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBQSxhQUFNLEVBQUMsUUFBUSxFQUFFLGtEQUFrRCxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM5RixDQUFDLENBQUMsQ0FBQztJQUVILHdFQUF3RTtJQUN4RSw2RUFBNkU7SUFDN0UsdUVBQXVFO0lBQ3ZFLEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN0RSxZQUFFLENBQUMsYUFBYSxDQUFDLGNBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLHFCQUFxQixDQUFDLEVBQUUsd0NBQXdDLENBQUMsQ0FBQztRQUNyRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUN6QixNQUFNLFVBQVUsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUVoRCxNQUFNLElBQUEsZ0JBQVUsRUFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sR0FBRyxHQUFHLFlBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDcEUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFBLGFBQU0sRUFBQyxRQUFRLEVBQUUsZ0RBQWdELENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDdEcsQ0FBQyxDQUFDLENBQUM7QUFFTCxDQUFDLENBQUMsQ0FBQyJ9
|