@cyclonedx/cdxgen 10.3.4 → 10.4.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyclonedx/cdxgen",
3
- "version": "10.3.4",
3
+ "version": "10.4.0",
4
4
  "description": "Creates CycloneDX Software Bill of Materials (SBOM) from source or container image",
5
5
  "homepage": "http://github.com/cyclonedx/cdxgen",
6
6
  "author": "Prabhu Subramanian <prabhu@appthreat.com>",
@@ -43,8 +43,8 @@
43
43
  "docs": "docsify serve docs",
44
44
  "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js --inject-globals false docker.test.js utils.test.js display.test.js postgen.test.js",
45
45
  "watch": "node --experimental-vm-modules node_modules/jest/bin/jest.js --watch --inject-globals false",
46
- "lint": "eslint *.js *.test.js bin/*.js --fix",
47
- "pretty": "prettier --write jsr.json deno.json *.js data/*.json bin/*.js *.md docs/*.md data/*.md",
46
+ "lint:check": "biome check *",
47
+ "lint": "biome check --apply *",
48
48
  "gen-types": "npx -p typescript tsc"
49
49
  },
50
50
  "engines": {
@@ -60,7 +60,7 @@
60
60
  "dependencies": {
61
61
  "@babel/parser": "^7.24.4",
62
62
  "@babel/traverse": "^7.24.1",
63
- "@npmcli/arborist": "7.4.1",
63
+ "@npmcli/arborist": "7.4.2",
64
64
  "ajv": "^8.12.0",
65
65
  "ajv-formats": "^3.0.1",
66
66
  "cheerio": "^1.0.0-rc.12",
@@ -86,7 +86,7 @@
86
86
  },
87
87
  "optionalDependencies": {
88
88
  "@appthreat/atom": "2.0.9",
89
- "@appthreat/cdx-proto": "^0.0.4",
89
+ "@appthreat/cdx-proto": "1.0.1",
90
90
  "@cyclonedx/cdxgen-plugins-bin": "^1.5.8",
91
91
  "@cyclonedx/cdxgen-plugins-bin-arm64": "^1.5.8",
92
92
  "@cyclonedx/cdxgen-plugins-bin-darwin-amd64": "^1.5.8",
@@ -101,19 +101,11 @@
101
101
  "sequelize": "^6.37.2",
102
102
  "sqlite3": "^5.1.7"
103
103
  },
104
- "files": [
105
- "*.js",
106
- "bin/",
107
- "data/",
108
- "types/"
109
- ],
104
+ "files": ["*.js", "bin/", "data/", "types/"],
110
105
  "devDependencies": {
106
+ "@biomejs/biome": "1.6.4",
111
107
  "docsify-cli": "^4.4.4",
112
- "eslint": "^8.57.0",
113
- "eslint-config-prettier": "^9.1.0",
114
- "eslint-plugin-prettier": "^5.1.3",
115
108
  "jest": "^29.7.0",
116
- "prettier": "3.2.5",
117
- "typescript": "^5.4.4"
109
+ "typescript": "^5.4.5"
118
110
  }
119
111
  }
package/piptree.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { spawnSync } from "node:child_process";
1
2
  /**
2
3
  * The idea behind this plugin came from the excellent pipdeptree package
3
4
  * https://github.com/tox-dev/pipdeptree
@@ -9,11 +10,10 @@ import {
9
10
  mkdtempSync,
10
11
  readFileSync,
11
12
  rmSync,
12
- writeFileSync
13
+ writeFileSync,
13
14
  } from "node:fs";
14
- import { join } from "node:path";
15
15
  import { tmpdir } from "node:os";
16
- import { spawnSync } from "node:child_process";
16
+ import { join } from "node:path";
17
17
 
18
18
  const PIP_TREE_PLUGIN_CONTENT = `
19
19
  import importlib.metadata as importlib_metadata
@@ -129,7 +129,7 @@ export const getTreeWithPlugin = (env, python_cmd, basePath) => {
129
129
  const result = spawnSync(python_cmd, pipPluginArgs, {
130
130
  cwd: basePath,
131
131
  encoding: "utf-8",
132
- env
132
+ env,
133
133
  });
134
134
  if (result.status !== 0 || result.error) {
135
135
  console.log(result.stdout, result.stderr);
@@ -137,8 +137,8 @@ export const getTreeWithPlugin = (env, python_cmd, basePath) => {
137
137
  if (existsSync(pipTreeJson)) {
138
138
  tree = JSON.parse(
139
139
  readFileSync(pipTreeJson, {
140
- encoding: "utf-8"
141
- })
140
+ encoding: "utf-8",
141
+ }),
142
142
  );
143
143
  }
144
144
  if (rmSync) {
package/postgen.js CHANGED
@@ -87,7 +87,7 @@ export const filterBom = (bomJson, options) => {
87
87
  const newdepson = (adep.dependsOn || []).filter((d) => newPkgMap[d]);
88
88
  const obj = {
89
89
  ref: adep.ref,
90
- dependsOn: newdepson
90
+ dependsOn: newdepson,
91
91
  };
92
92
  // Filter provides array if needed
93
93
  if (adep.provides && adep.provides.length) {
@@ -110,7 +110,7 @@ export const filterBom = (bomJson, options) => {
110
110
  }
111
111
  bomJson.compositions.push({
112
112
  "bom-ref": bomJson.metadata.component["bom-ref"],
113
- aggregate: options.only ? "incomplete_first_party_only" : "incomplete"
113
+ aggregate: options.only ? "incomplete_first_party_only" : "incomplete",
114
114
  });
115
115
  }
116
116
  }
package/postgen.test.js CHANGED
@@ -5,7 +5,7 @@ import { expect, test } from "@jest/globals";
5
5
 
6
6
  test("filter bom tests", () => {
7
7
  const bomJson = JSON.parse(
8
- readFileSync("./test/data/bom-postgen-test.json", "utf-8")
8
+ readFileSync("./test/data/bom-postgen-test.json", "utf-8"),
9
9
  );
10
10
  let newBom = filterBom(bomJson, {});
11
11
  expect(bomJson).toEqual(newBom);
@@ -21,7 +21,7 @@ test("filter bom tests", () => {
21
21
 
22
22
  test("filter bom tests2", () => {
23
23
  const bomJson = JSON.parse(
24
- readFileSync("./test/data/bom-postgen-test2.json", "utf-8")
24
+ readFileSync("./test/data/bom-postgen-test2.json", "utf-8"),
25
25
  );
26
26
  let newBom = filterBom(bomJson, {});
27
27
  expect(bomJson).toEqual(newBom);
@@ -53,7 +53,7 @@ test("filter bom tests2", () => {
53
53
  newBom = filterBom(bomJson, {
54
54
  only: ["org.springframework"],
55
55
  specVersion: 1.5,
56
- autoCompositions: true
56
+ autoCompositions: true,
57
57
  });
58
58
  for (const comp of newBom.components) {
59
59
  if (!comp.purl.includes("org.springframework")) {
@@ -64,7 +64,7 @@ test("filter bom tests2", () => {
64
64
  expect(newBom.compositions).toEqual([
65
65
  {
66
66
  aggregate: "incomplete_first_party_only",
67
- "bom-ref": "pkg:maven/sec/java-sec-code@1.0.0?type=jar"
68
- }
67
+ "bom-ref": "pkg:maven/sec/java-sec-code@1.0.0?type=jar",
68
+ },
69
69
  ]);
70
70
  });
package/protobom.js CHANGED
@@ -1,6 +1,12 @@
1
- import { Bom } from "@appthreat/cdx-proto";
2
1
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { cdx_15, cdx_16 } from "@appthreat/cdx-proto";
3
3
 
4
+ /**
5
+ * Stringify the given bom json based on the type.
6
+ *
7
+ * @param {string | Object} bomJson string or object
8
+ * @returns {string} BOM json string
9
+ */
4
10
  const stringifyIfNeeded = (bomJson) => {
5
11
  if (typeof bomJson === "string" || bomJson instanceof String) {
6
12
  return bomJson;
@@ -8,26 +14,50 @@ const stringifyIfNeeded = (bomJson) => {
8
14
  return JSON.stringify(bomJson);
9
15
  };
10
16
 
17
+ /**
18
+ * Method to convert the given bom json to proto binary
19
+ *
20
+ * @param {string | Object} bomJson BOM Json
21
+ * @param {string} binFile Binary file name
22
+ */
11
23
  export const writeBinary = (bomJson, binFile) => {
12
24
  if (bomJson && binFile) {
13
- const bomObject = new Bom();
25
+ let bomObject = undefined;
26
+ if (+bomJson.specVersion === 1.6) {
27
+ bomObject = new cdx_16.Bom();
28
+ } else {
29
+ bomObject = new cdx_15.Bom();
30
+ }
14
31
  writeFileSync(
15
32
  binFile,
16
33
  bomObject
17
34
  .fromJsonString(stringifyIfNeeded(bomJson), {
18
- ignoreUnknownFields: true
35
+ ignoreUnknownFields: true,
19
36
  })
20
- .toBinary({ writeUnknownFields: true })
37
+ .toBinary({ writeUnknownFields: true }),
21
38
  );
22
39
  }
23
40
  };
24
41
 
25
- export const readBinary = (binFile, asJson = true) => {
42
+ /**
43
+ * Method to read a serialized binary
44
+ *
45
+ * @param {string} binFile Binary file name
46
+ * @param {boolean} asJson Convert to JSON
47
+ * @param {number} specVersion Specification version. Defaults to 1.5
48
+ */
49
+ export const readBinary = (binFile, asJson = true, specVersion = 1.5) => {
26
50
  if (!existsSync(binFile)) {
27
51
  return undefined;
28
52
  }
29
- const bomObject = new Bom().fromBinary(readFileSync(binFile), {
30
- readUnknownFields: true
53
+ let bomLib = undefined;
54
+ if (specVersion === 1.6) {
55
+ bomLib = new cdx_16.Bom();
56
+ } else {
57
+ bomLib = new cdx_15.Bom();
58
+ }
59
+ const bomObject = bomLib.fromBinary(readFileSync(binFile), {
60
+ readUnknownFields: true,
31
61
  });
32
62
  if (asJson) {
33
63
  return bomObject.toJson({ emitDefaultValues: true });
package/protobom.test.js CHANGED
@@ -1,13 +1,13 @@
1
- import { expect, test } from "@jest/globals";
2
- import { tmpdir } from "node:os";
3
1
  import { existsSync, mkdtempSync, readFileSync, rmSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
4
3
  import { join } from "node:path";
4
+ import { expect, test } from "@jest/globals";
5
5
 
6
6
  import { readBinary, writeBinary } from "./protobom.js";
7
7
 
8
8
  const tempDir = mkdtempSync(join(tmpdir(), "bin-tests-"));
9
9
  const testBom = JSON.parse(
10
- readFileSync("./test/data/bom-java.json", { encoding: "utf-8" })
10
+ readFileSync("./test/data/bom-java.json", { encoding: "utf-8" }),
11
11
  );
12
12
 
13
13
  test("proto binary tests", () => {
@@ -19,12 +19,12 @@ test("proto binary tests", () => {
19
19
  let bomObject = readBinary(binFile);
20
20
  expect(bomObject).toBeDefined();
21
21
  expect(bomObject.serialNumber).toEqual(
22
- "urn:uuid:cc8b5a04-2698-4375-b04c-cedfa4317fee"
22
+ "urn:uuid:cc8b5a04-2698-4375-b04c-cedfa4317fee",
23
23
  );
24
- bomObject = readBinary(binFile, false);
24
+ bomObject = readBinary(binFile, false, 1.5);
25
25
  expect(bomObject).toBeDefined();
26
26
  expect(bomObject.serialNumber).toEqual(
27
- "urn:uuid:cc8b5a04-2698-4375-b04c-cedfa4317fee"
27
+ "urn:uuid:cc8b5a04-2698-4375-b04c-cedfa4317fee",
28
28
  );
29
29
  if (tempDir && tempDir.startsWith(tmpdir()) && rmSync) {
30
30
  rmSync(tempDir, { recursive: true, force: true });
package/server.js CHANGED
@@ -1,12 +1,12 @@
1
- import connect from "connect";
2
- import http from "node:http";
3
- import bodyParser from "body-parser";
4
- import url from "node:url";
5
1
  import { spawnSync } from "node:child_process";
6
- import os from "node:os";
7
2
  import fs from "node:fs";
3
+ import http from "node:http";
4
+ import os from "node:os";
8
5
  import path from "node:path";
9
6
  import process from "node:process";
7
+ import url from "node:url";
8
+ import bodyParser from "body-parser";
9
+ import connect from "connect";
10
10
  import { createBom, submitBom } from "./index.js";
11
11
  import { postProcess } from "./postgen.js";
12
12
 
@@ -14,21 +14,21 @@ import compression from "compression";
14
14
 
15
15
  // Timeout milliseconds. Default 10 mins
16
16
  const TIMEOUT_MS =
17
- parseInt(process.env.CDXGEN_SERVER_TIMEOUT_MS) || 10 * 60 * 1000;
17
+ Number.parseInt(process.env.CDXGEN_SERVER_TIMEOUT_MS) || 10 * 60 * 1000;
18
18
 
19
19
  const app = connect();
20
20
 
21
21
  app.use(
22
22
  bodyParser.json({
23
23
  deflate: true,
24
- limit: "1mb"
25
- })
24
+ limit: "1mb",
25
+ }),
26
26
  );
27
27
  app.use(compression());
28
28
 
29
29
  const gitClone = (repoUrl, branch = null) => {
30
30
  const tempDir = fs.mkdtempSync(
31
- path.join(os.tmpdir(), path.basename(repoUrl))
31
+ path.join(os.tmpdir(), path.basename(repoUrl)),
32
32
  );
33
33
 
34
34
  if (branch == null) {
@@ -38,8 +38,8 @@ const gitClone = (repoUrl, branch = null) => {
38
38
  ["clone", repoUrl, "--depth", "1", tempDir],
39
39
  {
40
40
  encoding: "utf-8",
41
- shell: false
42
- }
41
+ shell: false,
42
+ },
43
43
  );
44
44
  if (result.status !== 0 || result.error) {
45
45
  console.log(result.error);
@@ -51,8 +51,8 @@ const gitClone = (repoUrl, branch = null) => {
51
51
  ["clone", repoUrl, "--branch", branch, "--depth", "1", tempDir],
52
52
  {
53
53
  encoding: "utf-8",
54
- shell: false
55
- }
54
+ shell: false,
55
+ },
56
56
  );
57
57
  if (result.status !== 0 || result.error) {
58
58
  console.log(result.error);
@@ -85,7 +85,7 @@ const parseQueryString = (q, body, options = {}) => {
85
85
  "only",
86
86
  "autoCompositions",
87
87
  "gitBranch",
88
- "active"
88
+ "active",
89
89
  ];
90
90
 
91
91
  for (const param of queryParams) {
@@ -125,13 +125,13 @@ const start = (options) => {
125
125
  const reqOptions = parseQueryString(
126
126
  q,
127
127
  req.body,
128
- Object.assign({}, options)
128
+ Object.assign({}, options),
129
129
  );
130
130
  const filePath = q.path || q.url || req.body.path || req.body.url;
131
131
  if (!filePath) {
132
132
  res.writeHead(500, { "Content-Type": "application/json" });
133
133
  return res.end(
134
- "{'error': 'true', 'message': 'path or url is required.'}\n"
134
+ "{'error': 'true', 'message': 'path or url is required.'}\n",
135
135
  );
136
136
  }
137
137
  res.writeHead(200, { "Content-Type": "application/json" });
@@ -1,5 +1,8 @@
1
- export function findJSImportsExports(src: any, deep: any): Promise<{
2
- allImports: {};
3
- allExports: {};
1
+ export function findJSImportsExports(
2
+ src: any,
3
+ deep: any,
4
+ ): Promise<{
5
+ allImports: {};
6
+ allExports: {};
4
7
  }>;
5
- //# sourceMappingURL=analyzer.d.ts.map
8
+ //# sourceMappingURL=analyzer.d.ts.map
package/types/binary.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  export function getGoBuildInfo(src: any): string;
2
2
  export function getCargoAuditableInfo(src: any): string;
3
3
  export function getOSPackages(src: any): {
4
- osPackages: any[];
5
- dependenciesList: {
6
- ref: any;
7
- dependsOn: any[];
8
- }[];
9
- allTypes: any[];
4
+ osPackages: any[];
5
+ dependenciesList: {
6
+ ref: any;
7
+ dependsOn: any[];
8
+ }[];
9
+ allTypes: any[];
10
10
  };
11
11
  export function executeOsQuery(query: any): any;
12
12
  /**
@@ -26,5 +26,9 @@ export function getDotnetSlices(src: string, slicesFile: string): boolean;
26
26
  *
27
27
  * @return {boolean} Result of the generation
28
28
  */
29
- export function getBinaryBom(src: string, binaryBomFile: string, deepMode: boolean): boolean;
30
- //# sourceMappingURL=binary.d.ts.map
29
+ export function getBinaryBom(
30
+ src: string,
31
+ binaryBomFile: string,
32
+ deepMode: boolean,
33
+ ): boolean;
34
+ //# sourceMappingURL=binary.d.ts.map
@@ -12,4 +12,4 @@ export function collectOSCryptoLibs(options: any): any[];
12
12
  * @returns {Array} Arary of crypto algorithm objects with oid and description
13
13
  */
14
14
  export function findCryptoAlgos(code: any): any[];
15
- //# sourceMappingURL=cbomutils.d.ts.map
15
+ //# sourceMappingURL=cbomutils.d.ts.map
package/types/db.d.ts CHANGED
@@ -1,19 +1,31 @@
1
- export function createOrLoad(dbName: any, dbPath: any, logging?: boolean): Promise<{
2
- sequelize: Sequelize;
3
- Namespaces: typeof Namespaces;
4
- Usages: typeof Usages;
5
- DataFlows: typeof DataFlows;
1
+ export function createOrLoad(
2
+ dbName: any,
3
+ dbPath: any,
4
+ logging?: boolean,
5
+ ): Promise<{
6
+ sequelize: Sequelize;
7
+ Namespaces: typeof Namespaces;
8
+ Usages: typeof Usages;
9
+ DataFlows: typeof DataFlows;
6
10
  }>;
7
- import { Sequelize } from "sequelize";
11
+ import type { Sequelize } from "sequelize";
8
12
  declare class Namespaces extends Model<any, any> {
9
- constructor(values?: import("sequelize").Optional<any, string>, options?: import("sequelize").BuildOptions);
13
+ constructor(
14
+ values?: import("sequelize").Optional<any, string>,
15
+ options?: import("sequelize").BuildOptions,
16
+ );
10
17
  }
11
18
  declare class Usages extends Model<any, any> {
12
- constructor(values?: import("sequelize").Optional<any, string>, options?: import("sequelize").BuildOptions);
19
+ constructor(
20
+ values?: import("sequelize").Optional<any, string>,
21
+ options?: import("sequelize").BuildOptions,
22
+ );
13
23
  }
14
24
  declare class DataFlows extends Model<any, any> {
15
- constructor(values?: import("sequelize").Optional<any, string>, options?: import("sequelize").BuildOptions);
25
+ constructor(
26
+ values?: import("sequelize").Optional<any, string>,
27
+ options?: import("sequelize").BuildOptions,
28
+ );
16
29
  }
17
30
  import { Model } from "sequelize";
18
- export {};
19
- //# sourceMappingURL=db.d.ts.map
31
+ //# sourceMappingURL=db.d.ts.map
@@ -5,4 +5,4 @@ export function printOccurrences(bomJson: any): void;
5
5
  export function printCallStack(bomJson: any): void;
6
6
  export function printDependencyTree(bomJson: any): void;
7
7
  export function printReachables(sliceArtefacts: any): void;
8
- //# sourceMappingURL=display.d.ts.map
8
+ //# sourceMappingURL=display.d.ts.map
package/types/docker.d.ts CHANGED
@@ -1,44 +1,64 @@
1
1
  export const isWin: boolean;
2
- export function getDirs(dirPath: string, dirName: string, hidden?: boolean, recurse?: boolean): string[];
2
+ export function getDirs(
3
+ dirPath: string,
4
+ dirName: string,
5
+ hidden?: boolean,
6
+ recurse?: boolean,
7
+ ): string[];
3
8
  export function getOnlyDirs(srcpath: any, dirName: any): any;
4
9
  export function getConnection(options: any, forRegistry: any): Promise<any>;
5
- export function makeRequest(path: any, method: string, forRegistry: any): Promise<any>;
10
+ export function makeRequest(
11
+ path: any,
12
+ method: string,
13
+ forRegistry: any,
14
+ ): Promise<any>;
6
15
  export function parseImageName(fullImageName: any): {
7
- registry: string;
8
- repo: string;
9
- tag: string;
10
- digest: string;
11
- platform: string;
12
- group: string;
13
- name: string;
16
+ registry: string;
17
+ repo: string;
18
+ tag: string;
19
+ digest: string;
20
+ platform: string;
21
+ group: string;
22
+ name: string;
14
23
  };
15
24
  export function getImage(fullImageName: any): Promise<any>;
16
25
  export function extractTar(fullImageName: any, dir: any): Promise<boolean>;
17
- export function exportArchive(fullImageName: any): Promise<{
18
- manifest: {};
19
- allLayersDir: string;
20
- allLayersExplodedDir: string;
21
- lastLayerConfig: {};
22
- lastWorkingDir: string;
23
- } | {
24
- inspectData: any;
25
- manifest: any;
26
- allLayersDir: any;
27
- allLayersExplodedDir: any;
28
- lastLayerConfig: {};
29
- lastWorkingDir: string;
30
- }>;
31
- export function extractFromManifest(manifestFile: any, localData: any, tempDir: any, allLayersExplodedDir: any): Promise<{
32
- inspectData: any;
33
- manifest: any;
34
- allLayersDir: any;
35
- allLayersExplodedDir: any;
36
- lastLayerConfig: {};
37
- lastWorkingDir: string;
26
+ export function exportArchive(fullImageName: any): Promise<
27
+ | {
28
+ manifest: {};
29
+ allLayersDir: string;
30
+ allLayersExplodedDir: string;
31
+ lastLayerConfig: {};
32
+ lastWorkingDir: string;
33
+ }
34
+ | {
35
+ inspectData: any;
36
+ manifest: any;
37
+ allLayersDir: any;
38
+ allLayersExplodedDir: any;
39
+ lastLayerConfig: {};
40
+ lastWorkingDir: string;
41
+ }
42
+ >;
43
+ export function extractFromManifest(
44
+ manifestFile: any,
45
+ localData: any,
46
+ tempDir: any,
47
+ allLayersExplodedDir: any,
48
+ ): Promise<{
49
+ inspectData: any;
50
+ manifest: any;
51
+ allLayersDir: any;
52
+ allLayersExplodedDir: any;
53
+ lastLayerConfig: {};
54
+ lastWorkingDir: string;
38
55
  }>;
39
56
  export function exportImage(fullImageName: any): Promise<any>;
40
57
  export function getPkgPathList(exportData: any, lastWorkingDir: any): any[];
41
58
  export function removeImage(fullImageName: any, force?: boolean): Promise<any>;
42
59
  export function getCredsFromHelper(exeSuffix: any, serverAddress: any): any;
43
- export function addSkippedSrcFiles(skippedImageSrcs: any, components: any): void;
44
- //# sourceMappingURL=docker.d.ts.map
60
+ export function addSkippedSrcFiles(
61
+ skippedImageSrcs: any,
62
+ components: any,
63
+ ): void;
64
+ //# sourceMappingURL=docker.d.ts.map
@@ -5,58 +5,58 @@ export function gitTreeHashes(dir: string): {};
5
5
  export function listFiles(dir: string): any[];
6
6
  export function execGitCommand(dir: string, args: any[]): string;
7
7
  export function collectJavaInfo(dir: string): {
8
- type: string;
9
- name: string;
10
- version: string;
11
- description: string;
12
- properties: {
13
- name: string;
14
- value: any;
15
- }[];
8
+ type: string;
9
+ name: string;
10
+ version: string;
11
+ description: string;
12
+ properties: {
13
+ name: string;
14
+ value: any;
15
+ }[];
16
16
  };
17
17
  export function collectDotnetInfo(dir: string): {
18
- type: string;
19
- name: string;
20
- version: string;
21
- description: any;
18
+ type: string;
19
+ name: string;
20
+ version: string;
21
+ description: any;
22
22
  };
23
23
  export function collectPythonInfo(dir: string): {
24
- type: string;
25
- name: string;
26
- version: string;
27
- description: any;
24
+ type: string;
25
+ name: string;
26
+ version: string;
27
+ description: any;
28
28
  };
29
29
  export function collectNodeInfo(dir: string): {
30
- type: string;
31
- name: string;
32
- version: string;
33
- description: string;
30
+ type: string;
31
+ name: string;
32
+ version: string;
33
+ description: string;
34
34
  };
35
35
  export function collectGccInfo(dir: string): {
36
- type: string;
37
- name: string;
38
- version: string;
39
- description: any;
36
+ type: string;
37
+ name: string;
38
+ version: string;
39
+ description: any;
40
40
  };
41
41
  export function collectRustInfo(dir: string): {
42
- type: string;
43
- name: string;
44
- version: string;
45
- description: string;
42
+ type: string;
43
+ name: string;
44
+ version: string;
45
+ description: string;
46
46
  };
47
47
  export function collectGoInfo(dir: string): {
48
- type: string;
49
- name: string;
50
- version: string;
48
+ type: string;
49
+ name: string;
50
+ version: string;
51
51
  };
52
52
  export function collectEnvInfo(dir: any): {
53
- type: string;
54
- name: string;
55
- version: string;
56
- description: string;
57
- properties: {
58
- name: string;
59
- value: any;
60
- }[];
53
+ type: string;
54
+ name: string;
55
+ version: string;
56
+ description: string;
57
+ properties: {
58
+ name: string;
59
+ value: any;
60
+ }[];
61
61
  }[];
62
- //# sourceMappingURL=envcontext.d.ts.map
62
+ //# sourceMappingURL=envcontext.d.ts.map