scanoss 0.40.0 → 0.40.1
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 +4 -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/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/tsconfig.module.tsbuildinfo +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
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.1] (2026-06-05)
|
|
7
|
+
### Fixed
|
|
8
|
+
- `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.
|
|
9
|
+
|
|
6
10
|
## [0.40.0] (2026-04-28)
|
|
7
11
|
### Fixed
|
|
8
12
|
- `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=
|