@trustify-da/trustify-da-javascript-client 0.3.0-ea.e645720 → 0.3.0-ea.ec6824b
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/dist/package.json +19 -19
- package/dist/src/analysis.d.ts +7 -7
- package/dist/src/cyclone_dx_sbom.js +11 -3
- package/dist/src/index.d.ts +9 -9
- package/dist/src/index.js +5 -2
- package/dist/src/license/index.d.ts +3 -3
- package/dist/src/license/index.js +4 -1
- package/dist/src/license/license_utils.js +4 -1
- package/dist/src/license/licenses_api.d.ts +2 -2
- package/dist/src/oci_image/images.d.ts +1 -1
- package/dist/src/oci_image/utils.d.ts +5 -5
- package/dist/src/provider.d.ts +4 -3
- package/dist/src/provider.js +3 -1
- package/dist/src/providers/base_java.d.ts +14 -3
- package/dist/src/providers/base_java.js +16 -6
- package/dist/src/providers/base_javascript.d.ts +20 -9
- package/dist/src/providers/base_javascript.js +10 -3
- package/dist/src/providers/base_pyproject.d.ts +10 -5
- package/dist/src/providers/base_pyproject.js +7 -0
- package/dist/src/providers/golang_gomodules.d.ts +2 -1
- package/dist/src/providers/golang_gomodules.js +1 -1
- package/dist/src/providers/java_gradle_groovy.d.ts +1 -1
- package/dist/src/providers/java_gradle_kotlin.d.ts +1 -1
- package/dist/src/providers/java_maven.d.ts +2 -2
- package/dist/src/providers/java_maven.js +72 -0
- package/dist/src/providers/javascript_bun.d.ts +10 -0
- package/dist/src/providers/javascript_bun.js +100 -0
- package/dist/src/providers/javascript_npm.d.ts +6 -1
- package/dist/src/providers/processors/yarn_berry_processor.d.ts +2 -2
- package/dist/src/providers/processors/yarn_classic_processor.d.ts +2 -2
- package/dist/src/providers/python_controller.js +57 -3
- package/dist/src/providers/python_pip.d.ts +1 -0
- package/dist/src/providers/python_pip.js +1 -1
- package/dist/src/providers/python_pip_pyproject.js +3 -1
- package/dist/src/providers/python_poetry.d.ts +31 -8
- package/dist/src/providers/python_poetry.js +62 -14
- package/dist/src/providers/python_uv.d.ts +5 -14
- package/dist/src/providers/python_uv.js +44 -2
- package/dist/src/providers/rust_cargo.d.ts +6 -2
- package/dist/src/providers/rust_cargo.js +31 -4
- package/dist/src/tools.d.ts +2 -2
- package/package.json +20 -20
|
@@ -32,6 +32,17 @@ export default class Python_poetry extends Base_pyproject {
|
|
|
32
32
|
_cmdName() {
|
|
33
33
|
return 'poetry';
|
|
34
34
|
}
|
|
35
|
+
_verifyPoetryAccessible(poetryBin) {
|
|
36
|
+
try {
|
|
37
|
+
invokeCommand(poetryBin, ['--version']);
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
if (error.code === 'ENOENT') {
|
|
41
|
+
throw new Error(`poetry is not accessible at "${poetryBin}"`, { cause: error });
|
|
42
|
+
}
|
|
43
|
+
throw new Error('failed to check for poetry binary', { cause: error });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
35
46
|
/**
|
|
36
47
|
* @param {string} manifestDir
|
|
37
48
|
* @param {string} _workspaceDir - unused (poetry has no workspace support)
|
|
@@ -41,9 +52,15 @@ export default class Python_poetry extends Base_pyproject {
|
|
|
41
52
|
*/
|
|
42
53
|
// eslint-disable-next-line no-unused-vars
|
|
43
54
|
async _getDependencyData(manifestDir, _workspaceDir, parsed, opts) {
|
|
55
|
+
let poetryBin = getCustomPath('poetry', opts);
|
|
56
|
+
let envBypass = environmentVariableIsPopulated('TRUSTIFY_DA_POETRY_SHOW_TREE')
|
|
57
|
+
&& environmentVariableIsPopulated('TRUSTIFY_DA_POETRY_SHOW_ALL');
|
|
58
|
+
if (!envBypass) {
|
|
59
|
+
this._verifyPoetryAccessible(poetryBin);
|
|
60
|
+
}
|
|
44
61
|
let hasDevGroup = !!(parsed.tool?.poetry?.group?.dev || parsed.tool?.poetry?.['dev-dependencies']);
|
|
45
|
-
let treeOutput = this._getPoetryShowTreeOutput(manifestDir, hasDevGroup,
|
|
46
|
-
let showAllOutput = this._getPoetryShowAllOutput(manifestDir,
|
|
62
|
+
let treeOutput = this._getPoetryShowTreeOutput(manifestDir, hasDevGroup, poetryBin);
|
|
63
|
+
let showAllOutput = this._getPoetryShowAllOutput(manifestDir, poetryBin);
|
|
47
64
|
let versionMap = this._parsePoetryShowAll(showAllOutput);
|
|
48
65
|
let lockDir = this._findLockFileDir(manifestDir, opts);
|
|
49
66
|
let markerData = this._extractMarkerData(lockDir, parsed);
|
|
@@ -53,14 +70,13 @@ export default class Python_poetry extends Base_pyproject {
|
|
|
53
70
|
* Get poetry show --tree output.
|
|
54
71
|
* @param {string} manifestDir
|
|
55
72
|
* @param {boolean} hasDevGroup
|
|
56
|
-
* @param {
|
|
73
|
+
* @param {string} poetryBin
|
|
57
74
|
* @returns {string}
|
|
58
75
|
*/
|
|
59
|
-
_getPoetryShowTreeOutput(manifestDir, hasDevGroup,
|
|
76
|
+
_getPoetryShowTreeOutput(manifestDir, hasDevGroup, poetryBin) {
|
|
60
77
|
if (environmentVariableIsPopulated('TRUSTIFY_DA_POETRY_SHOW_TREE')) {
|
|
61
78
|
return Buffer.from(process.env['TRUSTIFY_DA_POETRY_SHOW_TREE'], 'base64').toString('utf-8');
|
|
62
79
|
}
|
|
63
|
-
let poetryBin = getCustomPath('poetry', opts);
|
|
64
80
|
let args = ['show', '--tree', '--no-ansi'];
|
|
65
81
|
if (hasDevGroup) {
|
|
66
82
|
args.push('--without', 'dev');
|
|
@@ -70,14 +86,13 @@ export default class Python_poetry extends Base_pyproject {
|
|
|
70
86
|
/**
|
|
71
87
|
* Get poetry show --all output (flat list with resolved versions).
|
|
72
88
|
* @param {string} manifestDir
|
|
73
|
-
* @param {
|
|
89
|
+
* @param {string} poetryBin
|
|
74
90
|
* @returns {string}
|
|
75
91
|
*/
|
|
76
|
-
_getPoetryShowAllOutput(manifestDir,
|
|
92
|
+
_getPoetryShowAllOutput(manifestDir, poetryBin) {
|
|
77
93
|
if (environmentVariableIsPopulated('TRUSTIFY_DA_POETRY_SHOW_ALL')) {
|
|
78
94
|
return Buffer.from(process.env['TRUSTIFY_DA_POETRY_SHOW_ALL'], 'base64').toString('utf-8');
|
|
79
95
|
}
|
|
80
|
-
let poetryBin = getCustomPath('poetry', opts);
|
|
81
96
|
return invokeCommand(poetryBin, ['show', '--no-ansi', '--all'], { cwd: manifestDir }).toString();
|
|
82
97
|
}
|
|
83
98
|
/**
|
|
@@ -111,11 +126,12 @@ export default class Python_poetry extends Base_pyproject {
|
|
|
111
126
|
* → transitiveMarkers['click']['colorama'] = "sys_platform == 'win32'"
|
|
112
127
|
* @param {string|null} lockDir
|
|
113
128
|
* @param {object} parsed - parsed pyproject.toml
|
|
114
|
-
* @returns {{directMarkers: Map<string, string>, transitiveMarkers: Map<string, Map<string, string>>}}
|
|
129
|
+
* @returns {{directMarkers: Map<string, string>, transitiveMarkers: Map<string, Map<string, string>>, hashMap: Map<string, Array<{alg: string, content: string}>>}}
|
|
115
130
|
*/
|
|
116
131
|
_extractMarkerData(lockDir, parsed) {
|
|
117
132
|
let directMarkers = new Map();
|
|
118
133
|
let transitiveMarkers = new Map();
|
|
134
|
+
let hashMap = new Map();
|
|
119
135
|
// Extract markers from PEP 621 dependency strings: "name[extras]>=ver ; marker"
|
|
120
136
|
let deps = parsed.project?.dependencies || [];
|
|
121
137
|
for (let dep of deps) {
|
|
@@ -142,18 +158,40 @@ export default class Python_poetry extends Base_pyproject {
|
|
|
142
158
|
transitiveMarkers.get(pkgKey).set(this._canonicalize(depName), markers);
|
|
143
159
|
}
|
|
144
160
|
}
|
|
161
|
+
let sha256Hex = this._extractSha256FromFiles(pkg.files);
|
|
162
|
+
if (sha256Hex) {
|
|
163
|
+
hashMap.set(pkgKey, [{ alg: "SHA-256", content: sha256Hex }]);
|
|
164
|
+
}
|
|
145
165
|
}
|
|
146
166
|
}
|
|
147
167
|
}
|
|
148
|
-
return { directMarkers, transitiveMarkers };
|
|
168
|
+
return { directMarkers, transitiveMarkers, hashMap };
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Extract a SHA-256 hex digest from poetry.lock files array.
|
|
172
|
+
* Prefers the sdist (.tar.gz) hash; falls back to the first wheel hash.
|
|
173
|
+
* @param {Array<{file: string, hash: string}>} [files]
|
|
174
|
+
* @returns {string|null}
|
|
175
|
+
*/
|
|
176
|
+
_extractSha256FromFiles(files) {
|
|
177
|
+
if (!Array.isArray(files) || files.length === 0) {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
let sdist = files.find(f => f.file.endsWith('.tar.gz'));
|
|
181
|
+
let entry = sdist || files[0];
|
|
182
|
+
let hash = entry.hash;
|
|
183
|
+
if (hash && hash.startsWith('sha256:')) {
|
|
184
|
+
return hash.slice(7);
|
|
185
|
+
}
|
|
186
|
+
return null;
|
|
149
187
|
}
|
|
150
188
|
/**
|
|
151
189
|
* Parse poetry show --tree output into a dependency graph structure.
|
|
152
190
|
*
|
|
153
191
|
* @param {string} treeOutput
|
|
154
192
|
* @param {Map<string, string>} versionMap - canonical name -> resolved version
|
|
155
|
-
* @param {{directMarkers: Map<string, string>, transitiveMarkers: Map<string, Map<string, string>>}} markerData
|
|
156
|
-
* @returns {{directDeps: string[], graph: Map<string, {name: string, version: string, children: string[]}>}}
|
|
193
|
+
* @param {{directMarkers: Map<string, string>, transitiveMarkers: Map<string, Map<string, string>>, hashMap: Map<string, Array<{alg: string, content: string}>>}} markerData
|
|
194
|
+
* @returns {{directDeps: string[], graph: Map<string, {name: string, version: string, children: string[], hashes?: Array<{alg: string, content: string}>}>}}
|
|
157
195
|
*/
|
|
158
196
|
_parsePoetryTree(treeOutput, versionMap, markerData) {
|
|
159
197
|
let lines = treeOutput.split(/\r?\n/);
|
|
@@ -179,7 +217,12 @@ export default class Python_poetry extends Base_pyproject {
|
|
|
179
217
|
}
|
|
180
218
|
directDeps.push(key);
|
|
181
219
|
if (!graph.has(key)) {
|
|
182
|
-
|
|
220
|
+
let entry = { name, version, children: [] };
|
|
221
|
+
let hashes = markerData.hashMap.get(key);
|
|
222
|
+
if (hashes) {
|
|
223
|
+
entry.hashes = hashes;
|
|
224
|
+
}
|
|
225
|
+
graph.set(key, entry);
|
|
183
226
|
}
|
|
184
227
|
currentDirectDep = key;
|
|
185
228
|
stack = [{ key, depth: -1 }];
|
|
@@ -223,7 +266,12 @@ export default class Python_poetry extends Base_pyproject {
|
|
|
223
266
|
throw new Error(`poetry: package '${depName}' has no resolved version`);
|
|
224
267
|
}
|
|
225
268
|
if (!graph.has(depKey)) {
|
|
226
|
-
|
|
269
|
+
let entry = { name: depName, version, children: [] };
|
|
270
|
+
let hashes = markerData.hashMap.get(depKey);
|
|
271
|
+
if (hashes) {
|
|
272
|
+
entry.hashes = hashes;
|
|
273
|
+
}
|
|
274
|
+
graph.set(depKey, entry);
|
|
227
275
|
}
|
|
228
276
|
if (parentKey) {
|
|
229
277
|
let parentEntry = graph.get(parentKey);
|
|
@@ -13,27 +13,18 @@ export function discoverUvWorkspaceMembers(workspaceRoot: string, opts?: {
|
|
|
13
13
|
}): Promise<string[]>;
|
|
14
14
|
export default class Python_uv extends Base_pyproject {
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
17
|
-
* @param {string}
|
|
18
|
-
* @param {
|
|
19
|
-
* @param {Object} opts
|
|
20
|
-
* @returns {Promise<{directDeps: string[], graph: Map<string, {name: string, version: string, children: string[]}>}>}
|
|
16
|
+
* Parse uv.lock and attach SHA-256 hashes to graph entries.
|
|
17
|
+
* @param {string} lockFilePath - path to uv.lock
|
|
18
|
+
* @param {Map<string, import('./base_pyproject.js').GraphEntry>} graph
|
|
21
19
|
*/
|
|
22
|
-
|
|
23
|
-
directDeps: string[];
|
|
24
|
-
graph: Map<string, {
|
|
25
|
-
name: string;
|
|
26
|
-
version: string;
|
|
27
|
-
children: string[];
|
|
28
|
-
}>;
|
|
29
|
-
}>;
|
|
20
|
+
_attachHashesFromLockFile(lockFilePath: string, graph: Map<string, import("./base_pyproject.js").GraphEntry>): Promise<void>;
|
|
30
21
|
/**
|
|
31
22
|
* Get the uv export output, either from env var or by running the command.
|
|
32
23
|
* @param {string} manifestDir
|
|
33
24
|
* @param {Object} opts
|
|
34
25
|
* @returns {string}
|
|
35
26
|
*/
|
|
36
|
-
_getUvExportOutput(manifestDir: string, opts:
|
|
27
|
+
_getUvExportOutput(manifestDir: string, opts: Object): string;
|
|
37
28
|
/**
|
|
38
29
|
* Parse uv export output into a dependency graph using tree-sitter-requirements
|
|
39
30
|
* for package/version extraction and string parsing for "# via" comments.
|
|
@@ -21,12 +21,54 @@ export default class Python_uv extends Base_pyproject {
|
|
|
21
21
|
* @param {string} workspaceDir - workspace root (for resolving editable install paths)
|
|
22
22
|
* @param {object} parsed - parsed pyproject.toml
|
|
23
23
|
* @param {Object} opts
|
|
24
|
-
* @returns {Promise<{directDeps: string[], graph: Map<string,
|
|
24
|
+
* @returns {Promise<{directDeps: string[], graph: Map<string, import('./base_pyproject.js').GraphEntry>}>}
|
|
25
25
|
*/
|
|
26
26
|
async _getDependencyData(manifestDir, workspaceDir, parsed, opts) {
|
|
27
27
|
let projectName = this._getProjectName(parsed);
|
|
28
28
|
let uvOutput = this._getUvExportOutput(manifestDir, opts);
|
|
29
|
-
|
|
29
|
+
let { directDeps, graph } = await this._parseUvExport(uvOutput, projectName, workspaceDir);
|
|
30
|
+
await this._attachHashesFromLockFile(path.join(workspaceDir, 'uv.lock'), graph);
|
|
31
|
+
return { directDeps, graph };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Parse uv.lock and attach SHA-256 hashes to graph entries.
|
|
35
|
+
* @param {string} lockFilePath - path to uv.lock
|
|
36
|
+
* @param {Map<string, import('./base_pyproject.js').GraphEntry>} graph
|
|
37
|
+
*/
|
|
38
|
+
async _attachHashesFromLockFile(lockFilePath, graph) {
|
|
39
|
+
let lockContent;
|
|
40
|
+
try {
|
|
41
|
+
lockContent = await fs.promises.readFile(lockFilePath, 'utf-8');
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
let parsed;
|
|
47
|
+
try {
|
|
48
|
+
parsed = parseToml(lockContent);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
let packages = parsed.package;
|
|
54
|
+
if (!Array.isArray(packages)) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
for (let pkg of packages) {
|
|
58
|
+
if (!pkg.name) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
let hashStr = pkg.sdist?.hash || pkg.wheels?.[0]?.hash;
|
|
62
|
+
if (!hashStr || !hashStr.startsWith('sha256:')) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
let key = this._canonicalize(pkg.name);
|
|
66
|
+
let entry = graph.get(key);
|
|
67
|
+
if (!entry || entry.hashes) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
entry.hashes = [{ alg: "SHA-256", content: hashStr.slice(7) }];
|
|
71
|
+
}
|
|
30
72
|
}
|
|
31
73
|
/**
|
|
32
74
|
* Get the uv export output, either from env var or by running the command.
|
|
@@ -4,9 +4,10 @@ declare namespace _default {
|
|
|
4
4
|
export { provideComponent };
|
|
5
5
|
export { provideStack };
|
|
6
6
|
export { readLicenseFromManifest };
|
|
7
|
+
export function packageManagerName(): string;
|
|
7
8
|
}
|
|
8
9
|
export default _default;
|
|
9
|
-
export type Provided =
|
|
10
|
+
export type Provided = any;
|
|
10
11
|
/**
|
|
11
12
|
* @param {string} manifestName - the subject manifest name-type
|
|
12
13
|
* @returns {boolean} - return true if `Cargo.toml` is the manifest name-type
|
|
@@ -46,7 +47,10 @@ declare function provideStack(manifest: string, opts?: {}): Provided;
|
|
|
46
47
|
* Read project license from Cargo.toml, with fallback to LICENSE file.
|
|
47
48
|
* Supports the `license` field under `[package]` (single crate / workspace
|
|
48
49
|
* with root) and under `[workspace.package]` (virtual workspaces).
|
|
50
|
+
* When a member crate uses `license = { workspace = true }`, the actual
|
|
51
|
+
* license is resolved from the workspace root Cargo.toml.
|
|
49
52
|
* @param {string} manifestPath - path to Cargo.toml
|
|
53
|
+
* @param {object} [metadata] - cargo metadata output (needed for workspace license resolution)
|
|
50
54
|
* @returns {string|null} SPDX identifier or null
|
|
51
55
|
*/
|
|
52
|
-
declare function readLicenseFromManifest(manifestPath: string): string | null;
|
|
56
|
+
declare function readLicenseFromManifest(manifestPath: string, metadata?: object): string | null;
|
|
@@ -5,7 +5,7 @@ import { parse as parseToml } from 'smol-toml';
|
|
|
5
5
|
import { getLicense } from '../license/license_utils.js';
|
|
6
6
|
import Sbom from '../sbom.js';
|
|
7
7
|
import { getCustom, getCustomPath, invokeCommand } from '../tools.js';
|
|
8
|
-
export default { isSupported, validateLockFile, provideComponent, provideStack, readLicenseFromManifest };
|
|
8
|
+
export default { isSupported, validateLockFile, provideComponent, provideStack, readLicenseFromManifest, packageManagerName() { return 'cargo'; } };
|
|
9
9
|
/** @typedef {import('../provider').Provider} */
|
|
10
10
|
/** @typedef {import('../provider').Provided} Provided */
|
|
11
11
|
/**
|
|
@@ -71,15 +71,22 @@ function isSupported(manifestName) {
|
|
|
71
71
|
* Read project license from Cargo.toml, with fallback to LICENSE file.
|
|
72
72
|
* Supports the `license` field under `[package]` (single crate / workspace
|
|
73
73
|
* with root) and under `[workspace.package]` (virtual workspaces).
|
|
74
|
+
* When a member crate uses `license = { workspace = true }`, the actual
|
|
75
|
+
* license is resolved from the workspace root Cargo.toml.
|
|
74
76
|
* @param {string} manifestPath - path to Cargo.toml
|
|
77
|
+
* @param {object} [metadata] - cargo metadata output (needed for workspace license resolution)
|
|
75
78
|
* @returns {string|null} SPDX identifier or null
|
|
76
79
|
*/
|
|
77
|
-
function readLicenseFromManifest(manifestPath) {
|
|
80
|
+
function readLicenseFromManifest(manifestPath, metadata) {
|
|
78
81
|
let fromManifest = null;
|
|
79
82
|
try {
|
|
80
83
|
let content = fs.readFileSync(manifestPath, 'utf-8');
|
|
81
84
|
let parsed = parseToml(content);
|
|
82
|
-
|
|
85
|
+
let packageLicense = parsed.package?.license;
|
|
86
|
+
if (typeof packageLicense === 'object' && packageLicense?.workspace === true) {
|
|
87
|
+
packageLicense = resolveWorkspaceLicense(parsed, metadata);
|
|
88
|
+
}
|
|
89
|
+
fromManifest = packageLicense
|
|
83
90
|
|| parsed.workspace?.package?.license
|
|
84
91
|
|| null;
|
|
85
92
|
}
|
|
@@ -88,6 +95,26 @@ function readLicenseFromManifest(manifestPath) {
|
|
|
88
95
|
}
|
|
89
96
|
return getLicense(fromManifest, manifestPath);
|
|
90
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Resolve a workspace-inherited license from the workspace root Cargo.toml.
|
|
100
|
+
* @param {object} parsed - the parsed member crate Cargo.toml
|
|
101
|
+
* @param {object} [metadata] - cargo metadata output with workspace_root
|
|
102
|
+
* @returns {string|null} resolved license string or null
|
|
103
|
+
*/
|
|
104
|
+
function resolveWorkspaceLicense(parsed, metadata) {
|
|
105
|
+
if (metadata?.workspace_root) {
|
|
106
|
+
let cargoTomlPath = path.join(metadata.workspace_root, 'Cargo.toml');
|
|
107
|
+
try {
|
|
108
|
+
let content = fs.readFileSync(cargoTomlPath, 'utf-8');
|
|
109
|
+
let workspaceParsed = parseToml(content);
|
|
110
|
+
return workspaceParsed.workspace?.package?.license || null;
|
|
111
|
+
}
|
|
112
|
+
catch (_) {
|
|
113
|
+
// fall through
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return parsed.workspace?.package?.license || null;
|
|
117
|
+
}
|
|
91
118
|
/**
|
|
92
119
|
* Validates that Cargo.lock exists in the manifest directory or in a parent
|
|
93
120
|
* workspace root directory. In Cargo workspaces the lock file always lives at
|
|
@@ -173,7 +200,7 @@ function getSBOM(manifest, opts = {}, includeTransitive) {
|
|
|
173
200
|
let metadata = executeCargoMetadata(cargoBin, manifestDir);
|
|
174
201
|
let ignoredDeps = getIgnoredDeps(manifest, metadata);
|
|
175
202
|
let crateType = detectCrateType(metadata);
|
|
176
|
-
let license = readLicenseFromManifest(manifest);
|
|
203
|
+
let license = readLicenseFromManifest(manifest, metadata);
|
|
177
204
|
let sbom;
|
|
178
205
|
if (crateType === CrateType.WORKSPACE_VIRTUAL) {
|
|
179
206
|
sbom = handleVirtualWorkspace(manifest, metadata, ignoredDeps, includeTransitive, opts, license);
|
package/dist/src/tools.d.ts
CHANGED
|
@@ -100,13 +100,13 @@ export function invokeCommand(bin: string, args: Array<string>, opts?: import("c
|
|
|
100
100
|
* @param {import("index.js").Options} opts - The trustify DA options that may contain proxy configuration
|
|
101
101
|
* @returns {RequestInit} The fetch options with proxy agent if applicable
|
|
102
102
|
*/
|
|
103
|
-
export function addProxyAgent(options: RequestInit, opts:
|
|
103
|
+
export function addProxyAgent(options: RequestInit, opts: any): RequestInit;
|
|
104
104
|
/**
|
|
105
105
|
* Utility function for fetching vendor tokens
|
|
106
106
|
* @param {import("index.js").Options} [opts={}] - optional various options to pass along the application
|
|
107
107
|
* @returns {{}}
|
|
108
108
|
*/
|
|
109
|
-
export function getTokenHeaders(opts?:
|
|
109
|
+
export function getTokenHeaders(opts?: any): {};
|
|
110
110
|
export const RegexNotToBeLogged: RegExp;
|
|
111
111
|
export const TRUSTIFY_DA_TOKEN_HEADER: "trust-da-token";
|
|
112
112
|
export const TRUSTIFY_DA_TELEMETRY_ID_HEADER: "telemetry-anonymous-id";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trustify-da/trustify-da-javascript-client",
|
|
3
|
-
"version": "0.3.0-ea.
|
|
3
|
+
"version": "0.3.0-ea.ec6824b",
|
|
4
4
|
"description": "Code-Ready Dependency Analytics JavaScript API.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://github.com/guacsec/trustify-da-javascript-client#README.md",
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
"config/**/*"
|
|
36
36
|
],
|
|
37
37
|
"scripts": {
|
|
38
|
-
"lint": "eslint src test
|
|
39
|
-
"lint:fix": "eslint src test --
|
|
38
|
+
"lint": "eslint src test",
|
|
39
|
+
"lint:fix": "eslint src test --fix",
|
|
40
40
|
"test": "c8 npm run tests",
|
|
41
41
|
"tests": "mocha --config .mocharc.json",
|
|
42
42
|
"tests:rep": "mocha --reporter-option maxDiffSize=0 --reporter json > unit-tests-result.json",
|
|
@@ -48,16 +48,17 @@
|
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@babel/core": "^7.23.2",
|
|
51
|
-
"@cyclonedx/cyclonedx-library": "^
|
|
51
|
+
"@cyclonedx/cyclonedx-library": "^10.0.0",
|
|
52
52
|
"eslint-import-resolver-typescript": "^4.4.4",
|
|
53
53
|
"fast-glob": "^3.3.3",
|
|
54
54
|
"fast-xml-parser": "^5.3.4",
|
|
55
55
|
"help": "^3.0.2",
|
|
56
|
-
"https-proxy-agent": "^
|
|
56
|
+
"https-proxy-agent": "^9.0.0",
|
|
57
57
|
"js-yaml": "^4.1.1",
|
|
58
|
+
"jsonc-parser": "^3.3.1",
|
|
58
59
|
"micromatch": "^4.0.8",
|
|
59
60
|
"node-fetch": "^3.3.2",
|
|
60
|
-
"p-limit": "^
|
|
61
|
+
"p-limit": "^7.3.0",
|
|
61
62
|
"packageurl-js": "~1.0.2",
|
|
62
63
|
"smol-toml": "^1.6.0",
|
|
63
64
|
"tree-sitter-gomod": "github:strum355/tree-sitter-go-mod#56326f2ad478892ace58ff247a97d492a3cbcdda",
|
|
@@ -67,23 +68,24 @@
|
|
|
67
68
|
},
|
|
68
69
|
"devDependencies": {
|
|
69
70
|
"@babel/core": "^7.23.2",
|
|
70
|
-
"@trustify-da/trustify-da-api-model": "^2.0.
|
|
71
|
-
"@types/node": "^
|
|
71
|
+
"@trustify-da/trustify-da-api-model": "^2.0.8",
|
|
72
|
+
"@types/node": "^25.9.1",
|
|
72
73
|
"@types/which": "^3.0.4",
|
|
73
74
|
"babel-plugin-rewire": "^1.2.0",
|
|
74
75
|
"c8": "^11.0.0",
|
|
75
|
-
"chai": "^
|
|
76
|
-
"eslint": "^
|
|
76
|
+
"chai": "^6.2.2",
|
|
77
|
+
"@eslint/js": "^10.0.0",
|
|
78
|
+
"eslint": "^10.4.1",
|
|
77
79
|
"eslint-import-resolver-typescript": "^4.4.4",
|
|
78
|
-
"eslint-plugin-
|
|
79
|
-
"
|
|
80
|
+
"eslint-plugin-import-x": "^4.16.2",
|
|
81
|
+
"globals": "^17.6.0",
|
|
80
82
|
"esmock": "^2.6.2",
|
|
81
|
-
"mocha": "^
|
|
83
|
+
"mocha": "^11.7.6",
|
|
82
84
|
"msw": "^2.12.7",
|
|
83
|
-
"sinon": "^
|
|
84
|
-
"sinon-chai": "^
|
|
85
|
-
"typescript": "^
|
|
86
|
-
"which": "^
|
|
85
|
+
"sinon": "^22.0.0",
|
|
86
|
+
"sinon-chai": "^4.0.1",
|
|
87
|
+
"typescript": "^6.0.3",
|
|
88
|
+
"which": "^7.0.0"
|
|
87
89
|
},
|
|
88
90
|
"mocha": {
|
|
89
91
|
"check-leaks": false,
|
|
@@ -111,12 +113,10 @@
|
|
|
111
113
|
"reporter": [
|
|
112
114
|
"html",
|
|
113
115
|
"json",
|
|
116
|
+
"lcov",
|
|
114
117
|
"text"
|
|
115
118
|
]
|
|
116
119
|
},
|
|
117
|
-
"eslintIgnore": [
|
|
118
|
-
"index.js"
|
|
119
|
-
],
|
|
120
120
|
"resolutions": {
|
|
121
121
|
"@hapi/joi": "17.1.1"
|
|
122
122
|
}
|