retire 3.2.3 → 4.0.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/CHANGELOG.md +9 -0
- package/README.md +1 -9
- package/lib/cli.d.ts +2 -0
- package/lib/cli.js +195 -0
- package/lib/repo.d.ts +4 -0
- package/lib/repo.js +148 -103
- package/lib/reporters/console.d.ts +3 -0
- package/lib/reporters/console.js +66 -39
- package/lib/reporters/cyclonedx-json.d.ts +3 -0
- package/lib/reporters/cyclonedx-json.js +71 -42
- package/lib/reporters/cyclonedx.d.ts +3 -0
- package/lib/reporters/cyclonedx.js +62 -34
- package/lib/reporters/depcheck.d.ts +3 -0
- package/lib/reporters/depcheck.js +79 -51
- package/lib/reporters/json.d.ts +3 -0
- package/lib/reporters/json.js +56 -28
- package/lib/reporting.d.ts +36 -0
- package/lib/reporting.js +107 -88
- package/lib/resolve.d.ts +4 -0
- package/lib/resolve.js +52 -100
- package/lib/retire.js +1 -10
- package/lib/scanner.d.ts +4 -0
- package/lib/scanner.js +113 -119
- package/lib/types.d.ts +83 -0
- package/lib/types.js +10 -0
- package/lib/utils.d.ts +11 -0
- package/lib/utils.js +27 -53
- package/package.json +31 -10
- package/bin/retire +0 -236
|
@@ -1,45 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/*jshint esversion: 6 */
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
20
|
+
if (mod && mod.__esModule) return mod;
|
|
21
|
+
var result = {};
|
|
22
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
23
|
+
__setModuleDefault(result, mod);
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
const retire = __importStar(require("../retire"));
|
|
28
|
+
const fs = __importStar(require("fs"));
|
|
29
|
+
const uuid_1 = require("uuid");
|
|
7
30
|
function configureCycloneDXJSONLogger(logger, writer, config, hash) {
|
|
8
|
-
|
|
9
|
-
|
|
31
|
+
let vulnsFound = false;
|
|
32
|
+
const finalResults = {
|
|
33
|
+
version: retire.version,
|
|
34
|
+
start: new Date().toISOString(),
|
|
35
|
+
data: [],
|
|
36
|
+
messages: [],
|
|
37
|
+
errors: []
|
|
38
|
+
};
|
|
10
39
|
logger.info = finalResults.messages.push;
|
|
11
|
-
logger.debug = config.verbose ? finalResults.messages.push : function() {};
|
|
40
|
+
logger.debug = config.verbose ? finalResults.messages.push : function () { return; };
|
|
12
41
|
logger.warn = logger.error = finalResults.errors.push;
|
|
13
|
-
logger.logVulnerableDependency = function(finding) {
|
|
42
|
+
logger.logVulnerableDependency = function (finding) {
|
|
14
43
|
vulnsFound = true;
|
|
15
44
|
finalResults.data.push(finding);
|
|
16
45
|
};
|
|
17
|
-
logger.logDependency = function(finding) {
|
|
46
|
+
logger.logDependency = function (finding) {
|
|
18
47
|
if (finding.results.length > 0) {
|
|
19
|
-
|
|
48
|
+
finalResults.data.push(finding);
|
|
20
49
|
}
|
|
21
50
|
};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
var seen = {};
|
|
27
|
-
var components = finalResults.data.filter(d => d.results).map(r => r.results.map(dep => {
|
|
51
|
+
logger.close = function (callback) {
|
|
52
|
+
const write = vulnsFound ? writer.err : writer.out;
|
|
53
|
+
const seen = new Set();
|
|
54
|
+
const components = finalResults.data.filter(d => d.results).map(r => r.results.map(dep => {
|
|
28
55
|
dep.version = (dep.version.split(".").length >= 3 ? dep.version : dep.version + ".0").replace(/-/g, ".");
|
|
29
|
-
|
|
30
|
-
|
|
56
|
+
let hashes;
|
|
57
|
+
const filepath = r.file;
|
|
31
58
|
if (filepath) {
|
|
32
|
-
|
|
59
|
+
const file = fs.readFileSync(filepath);
|
|
33
60
|
hashes = [
|
|
34
|
-
{ "alg"
|
|
35
|
-
{ "alg"
|
|
36
|
-
{ "alg"
|
|
37
|
-
{ "alg"
|
|
61
|
+
{ "alg": "MD5", "content": hash.md5(file) },
|
|
62
|
+
{ "alg": "SHA-1", "content": hash.sha1(file) },
|
|
63
|
+
{ "alg": "SHA-256", "content": hash.sha256(file) },
|
|
64
|
+
{ "alg": "SHA-512", "content": hash.sha512(file) },
|
|
38
65
|
];
|
|
39
66
|
}
|
|
40
|
-
|
|
41
|
-
if (seen
|
|
42
|
-
|
|
67
|
+
const purl = `pkg:npm/${dep.component}@${dep.version}`;
|
|
68
|
+
if (seen.has(purl))
|
|
69
|
+
return undefined;
|
|
70
|
+
seen.add(purl);
|
|
43
71
|
return {
|
|
44
72
|
type: "library",
|
|
45
73
|
name: dep.component,
|
|
@@ -47,26 +75,27 @@ function configureCycloneDXJSONLogger(logger, writer, config, hash) {
|
|
|
47
75
|
purl: purl,
|
|
48
76
|
hashes: hashes
|
|
49
77
|
};
|
|
50
|
-
}).filter(x => x != undefined)).reduce((a,b) => a.concat(b));
|
|
78
|
+
}).filter(x => x != undefined)).reduce((a, b) => a.concat(b));
|
|
51
79
|
write(JSON.stringify({
|
|
52
|
-
bomFormat
|
|
53
|
-
specVersion
|
|
54
|
-
serialNumber
|
|
55
|
-
version
|
|
56
|
-
metadata
|
|
57
|
-
timestamp
|
|
58
|
-
tools
|
|
80
|
+
bomFormat: "CycloneDX",
|
|
81
|
+
specVersion: "1.4",
|
|
82
|
+
serialNumber: `urn:uuid:${(0, uuid_1.v4)()}`,
|
|
83
|
+
version: 1,
|
|
84
|
+
metadata: {
|
|
85
|
+
timestamp: finalResults.start,
|
|
86
|
+
tools: [
|
|
59
87
|
{
|
|
60
|
-
vendor
|
|
61
|
-
name
|
|
62
|
-
version
|
|
88
|
+
vendor: "RetireJS",
|
|
89
|
+
name: "retire.js",
|
|
90
|
+
version: retire.version
|
|
63
91
|
}
|
|
64
92
|
]
|
|
65
93
|
},
|
|
66
|
-
components
|
|
94
|
+
components: components
|
|
67
95
|
}, undefined, 2));
|
|
68
|
-
writer.close(callback);
|
|
96
|
+
writer.close(callback);
|
|
69
97
|
};
|
|
70
98
|
}
|
|
71
|
-
|
|
72
|
-
|
|
99
|
+
exports.default = {
|
|
100
|
+
configure: configureCycloneDXJSONLogger
|
|
101
|
+
};
|
|
@@ -1,64 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/*jshint esversion: 6 */
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
20
|
+
if (mod && mod.__esModule) return mod;
|
|
21
|
+
var result = {};
|
|
22
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
23
|
+
__setModuleDefault(result, mod);
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
const retire = __importStar(require("../retire"));
|
|
28
|
+
const fs = __importStar(require("fs"));
|
|
29
|
+
const uuid_1 = require("uuid");
|
|
8
30
|
function configureCycloneDXLogger(logger, writer, config, hash) {
|
|
9
|
-
|
|
10
|
-
|
|
31
|
+
let vulnsFound = false;
|
|
32
|
+
const finalResults = {
|
|
33
|
+
version: retire.version,
|
|
34
|
+
start: new Date(),
|
|
35
|
+
data: [],
|
|
36
|
+
messages: [],
|
|
37
|
+
errors: []
|
|
38
|
+
};
|
|
11
39
|
logger.info = finalResults.messages.push;
|
|
12
|
-
logger.debug = config.verbose ? finalResults.messages.push :
|
|
40
|
+
logger.debug = config.verbose ? finalResults.messages.push : () => { return; };
|
|
13
41
|
logger.warn = logger.error = finalResults.errors.push;
|
|
14
|
-
logger.logVulnerableDependency = function(finding) {
|
|
42
|
+
logger.logVulnerableDependency = function (finding) {
|
|
15
43
|
vulnsFound = true;
|
|
16
44
|
finalResults.data.push(finding);
|
|
17
45
|
};
|
|
18
|
-
logger.logDependency = function(finding) {
|
|
46
|
+
logger.logDependency = function (finding) {
|
|
19
47
|
if (finding.results.length > 0) {
|
|
20
|
-
|
|
48
|
+
finalResults.data.push(finding);
|
|
21
49
|
}
|
|
22
50
|
};
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
hashes = `
|
|
51
|
+
logger.close = function (callback) {
|
|
52
|
+
const write = vulnsFound ? writer.err : writer.out;
|
|
53
|
+
const seen = new Set();
|
|
54
|
+
const components = finalResults.data.filter(d => d.results).map(r => r.results.map(dep => {
|
|
55
|
+
dep.version = (dep.version.split(".").length >= 3 ? dep.version : dep.version + ".0").replace(/-/g, ".");
|
|
56
|
+
const filepath = r.file;
|
|
57
|
+
let hashes = "";
|
|
58
|
+
if (filepath) {
|
|
59
|
+
const file = fs.readFileSync(filepath);
|
|
60
|
+
hashes = `
|
|
34
61
|
<hashes>
|
|
35
62
|
<hash alg="MD5">${hash.md5(file)}</hash>
|
|
36
63
|
<hash alg="SHA-1">${hash.sha1(file)}</hash>
|
|
37
64
|
<hash alg="SHA-256">${hash.sha256(file)}</hash>
|
|
38
65
|
<hash alg="SHA-512">${hash.sha512(file)}</hash>
|
|
39
66
|
</hashes>`;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
67
|
+
}
|
|
68
|
+
const purl = `pkg:npm/${dep.component}@${dep.version}`;
|
|
69
|
+
if (seen.has(purl))
|
|
70
|
+
return '';
|
|
71
|
+
seen.add(purl);
|
|
72
|
+
return `
|
|
46
73
|
<component type="library">
|
|
47
74
|
<name>${dep.component}</name>
|
|
48
75
|
<version>${dep.version}</version>${hashes}
|
|
49
76
|
<purl>${purl}</purl>
|
|
50
77
|
<modified>false</modified>
|
|
51
78
|
</component>`;
|
|
52
|
-
|
|
79
|
+
}).join("")).join("");
|
|
53
80
|
write(`<?xml version="1.0"?>
|
|
54
|
-
<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:${
|
|
81
|
+
<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:${(0, uuid_1.v4)()}" version="1">
|
|
55
82
|
<metadata>
|
|
56
83
|
<timestamp>${finalResults.start.toISOString()}</timestamp>
|
|
57
84
|
<tools>
|
|
58
85
|
<tool>
|
|
59
86
|
<vendor>RetireJS</vendor>
|
|
60
87
|
<name>retire.js</name>
|
|
61
|
-
<version>${
|
|
88
|
+
<version>${retire.version}</version>
|
|
62
89
|
</tool>
|
|
63
90
|
</tools>
|
|
64
91
|
</metadata>
|
|
@@ -68,5 +95,6 @@ function configureCycloneDXLogger(logger, writer, config, hash) {
|
|
|
68
95
|
writer.close(callback);
|
|
69
96
|
};
|
|
70
97
|
}
|
|
71
|
-
|
|
72
|
-
|
|
98
|
+
exports.default = {
|
|
99
|
+
configure: configureCycloneDXLogger
|
|
100
|
+
};
|
|
@@ -1,34 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/*jshint esversion: 6 */
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
20
|
+
if (mod && mod.__esModule) return mod;
|
|
21
|
+
var result = {};
|
|
22
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
23
|
+
__setModuleDefault(result, mod);
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
const retire = __importStar(require("../retire"));
|
|
28
|
+
const fs = __importStar(require("fs"));
|
|
7
29
|
function configureDepCheckLogger(logger, writer, config, hash) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
30
|
+
let vulnsFound = false;
|
|
31
|
+
const finalResults = {
|
|
32
|
+
version: retire.version,
|
|
33
|
+
start: new Date().toISOString().replace("Z", "+0000"),
|
|
34
|
+
data: [],
|
|
35
|
+
messages: [],
|
|
36
|
+
errors: []
|
|
37
|
+
};
|
|
38
|
+
logger.info = finalResults.messages.push;
|
|
39
|
+
logger.debug = config.verbose ? finalResults.messages.push : () => { return; };
|
|
40
|
+
logger.warn = logger.error = finalResults.errors.push;
|
|
41
|
+
logger.logVulnerableDependency = (finding) => {
|
|
42
|
+
vulnsFound = true;
|
|
43
|
+
finalResults.data.push(finding);
|
|
44
|
+
};
|
|
45
|
+
logger.logDependency = (finding) => {
|
|
46
|
+
if (config.verbose && finding.results.length > 0) {
|
|
47
|
+
finalResults.data.push(finding);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
logger.close = (callback) => {
|
|
51
|
+
const write = vulnsFound ? writer.err : writer.out;
|
|
52
|
+
write(`<?xml version="1.0"?>
|
|
27
53
|
<analysis xmlns="https://jeremylong.github.io/DependencyCheck/dependency-check.2.3.xsd">
|
|
28
54
|
<scanInfo>
|
|
29
55
|
<engineVersion>${retire.version}</engineVersion>
|
|
30
56
|
<dataSource><name>${config.jsRepo || "Retire.js github js repo"}</name><timestamp>${finalResults.start}</timestamp></dataSource>
|
|
31
|
-
<dataSource><name>${config.nodeRepo || "Retire.js github node repo"}</name><timestamp>${finalResults.start}</timestamp></dataSource>
|
|
32
57
|
</scanInfo>
|
|
33
58
|
<projectInfo>
|
|
34
59
|
<name>${config.path}</name>
|
|
@@ -36,14 +61,16 @@ function configureDepCheckLogger(logger, writer, config, hash) {
|
|
|
36
61
|
<credits>retire.js</credits>
|
|
37
62
|
</projectInfo>
|
|
38
63
|
<dependencies>`);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
64
|
+
write(finalResults.data.filter(d => d.results).map(r => r.results.map((dep, i) => {
|
|
65
|
+
const filepath = r.file;
|
|
66
|
+
if (!filepath)
|
|
67
|
+
return;
|
|
68
|
+
const filename = filepath.split("/").slice(-1);
|
|
69
|
+
const file = fs.readFileSync(filepath);
|
|
70
|
+
const md5 = hash.md5(file);
|
|
71
|
+
const sha1 = hash.sha1(file);
|
|
72
|
+
const sha256 = hash.sha256(file);
|
|
73
|
+
const evidence = `
|
|
47
74
|
<evidence type="product" confidence="HIGH">
|
|
48
75
|
<source>file</source>
|
|
49
76
|
<name>name</name>
|
|
@@ -54,22 +81,22 @@ function configureDepCheckLogger(logger, writer, config, hash) {
|
|
|
54
81
|
<name>version</name>
|
|
55
82
|
<value>${dep.version}</value>
|
|
56
83
|
</evidence>`;
|
|
57
|
-
|
|
84
|
+
const identifiers = `
|
|
58
85
|
<package confidence="HIGH">
|
|
59
86
|
<description>(${dep.component}:${dep.version})</description>
|
|
60
87
|
<id>${i}</id>
|
|
61
88
|
</package>`;
|
|
62
|
-
|
|
63
|
-
|
|
89
|
+
const vulns = dep.vulnerabilities && dep.vulnerabilities.length > 0 ? dep.vulnerabilities.map(v => {
|
|
90
|
+
const references = v.info.map(i => `
|
|
64
91
|
<reference>
|
|
65
92
|
<source>Retire.js</source>
|
|
66
93
|
<url>${i}</url>
|
|
67
94
|
<name>${i}</name>
|
|
68
95
|
</reference>`).join("");
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
96
|
+
// const id = [v.identifiers && v.identifiers.CVE && v.identifiers.CVE[0], v.identifiers && v.identifiers.issue, dep.component + '@' + v.info[0]]
|
|
97
|
+
// .filter(n => n !== null)[0];
|
|
98
|
+
//TODO: Fix CVSS stuff - add to repo? add id to every bug in repo?
|
|
99
|
+
return `
|
|
73
100
|
<vulnerability source="retire">
|
|
74
101
|
<name>${dep.component}:${dep.version}</name>
|
|
75
102
|
<cvssV2>
|
|
@@ -86,11 +113,11 @@ function configureDepCheckLogger(logger, writer, config, hash) {
|
|
|
86
113
|
<references>${references}
|
|
87
114
|
</references>
|
|
88
115
|
<vulnerableSoftware>
|
|
89
|
-
<software>${
|
|
116
|
+
<software>${v.atOrAbove ? ">= " + v.atOrAbove : ""} < ${v.below}</software>
|
|
90
117
|
</vulnerableSoftware>
|
|
91
|
-
</vulnerability>`;
|
|
92
|
-
|
|
93
|
-
|
|
118
|
+
</vulnerability>`;
|
|
119
|
+
}).join('') : "";
|
|
120
|
+
return ` <dependency>
|
|
94
121
|
<fileName>${filename}</fileName>
|
|
95
122
|
<filePath>${filepath}</filePath>
|
|
96
123
|
<md5>${md5}</md5>
|
|
@@ -102,12 +129,13 @@ function configureDepCheckLogger(logger, writer, config, hash) {
|
|
|
102
129
|
</identifiers>
|
|
103
130
|
<vulnerabilities>${vulns}
|
|
104
131
|
</vulnerabilities>
|
|
105
|
-
</dependency>`;
|
|
106
|
-
|
|
132
|
+
</dependency>`;
|
|
133
|
+
}).join("\n")).join("\n"));
|
|
134
|
+
write(` </dependencies>
|
|
107
135
|
</analysis>`);
|
|
108
|
-
|
|
109
|
-
|
|
136
|
+
writer.close(callback);
|
|
137
|
+
};
|
|
110
138
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
139
|
+
exports.default = {
|
|
140
|
+
configure: configureDepCheckLogger
|
|
141
|
+
};
|
package/lib/reporters/json.js
CHANGED
|
@@ -1,29 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/*jshint esversion: 6 */
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
20
|
+
if (mod && mod.__esModule) return mod;
|
|
21
|
+
var result = {};
|
|
22
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
23
|
+
__setModuleDefault(result, mod);
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
const retire = __importStar(require("../retire"));
|
|
28
|
+
exports.default = {
|
|
29
|
+
configure: (logger, writer, config) => {
|
|
30
|
+
const scanStart = Date.now();
|
|
31
|
+
const finalResults = {
|
|
32
|
+
version: retire.version,
|
|
33
|
+
start: new Date(),
|
|
34
|
+
data: [],
|
|
35
|
+
messages: [],
|
|
36
|
+
errors: [],
|
|
37
|
+
time: undefined
|
|
38
|
+
};
|
|
39
|
+
logger.info = finalResults.messages.push;
|
|
40
|
+
logger.debug = config.verbose ? finalResults.messages.push : () => { return; };
|
|
41
|
+
logger.warn = logger.error = (message) => finalResults.errors.push(message);
|
|
42
|
+
logger.logVulnerableDependency = (finding) => {
|
|
43
|
+
finalResults.data.push(finding);
|
|
44
|
+
};
|
|
45
|
+
logger.logDependency = function (finding) {
|
|
46
|
+
if (config.verbose && finding.results.length > 0) {
|
|
47
|
+
finalResults.data.push(finding);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
logger.close = function (callback) {
|
|
51
|
+
finalResults.time = (Date.now() - scanStart) / 1000;
|
|
52
|
+
const res = (config.outputformat === "jsonsimple") ? finalResults.data : finalResults;
|
|
53
|
+
writer.out(JSON.stringify(res));
|
|
54
|
+
writer.close(callback);
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Finding } from "./types";
|
|
3
|
+
export type LoggerOptions = {
|
|
4
|
+
outputpath: string;
|
|
5
|
+
verbose: boolean;
|
|
6
|
+
colors: boolean;
|
|
7
|
+
outputformat: string;
|
|
8
|
+
jsRepo: string;
|
|
9
|
+
path: string;
|
|
10
|
+
colorwarn: (s: string) => string;
|
|
11
|
+
};
|
|
12
|
+
export type Hasher = {
|
|
13
|
+
md5: (file: Buffer | string) => string;
|
|
14
|
+
sha1: (file: Buffer | string) => string;
|
|
15
|
+
sha256: (file: Buffer | string) => string;
|
|
16
|
+
sha512: (file: Buffer | string) => string;
|
|
17
|
+
};
|
|
18
|
+
export declare const hash: Hasher;
|
|
19
|
+
export type Writer = {
|
|
20
|
+
out: (...args: Parameters<typeof console["log"]>) => void;
|
|
21
|
+
err: (x: string) => void;
|
|
22
|
+
close: (callback?: () => void) => void;
|
|
23
|
+
};
|
|
24
|
+
export type Logger = {
|
|
25
|
+
info: (x: string) => void;
|
|
26
|
+
debug: (x: string) => void;
|
|
27
|
+
warn: (x: string) => void;
|
|
28
|
+
error: (x: string) => void;
|
|
29
|
+
logDependency: (finding: Finding) => void;
|
|
30
|
+
logVulnerableDependency: (finding: Finding) => void;
|
|
31
|
+
close: (callback?: () => void) => void;
|
|
32
|
+
};
|
|
33
|
+
export interface ConfigurableLogger {
|
|
34
|
+
configure: (logger: Logger, writer: Writer, config: LoggerOptions, hash: Hasher) => void;
|
|
35
|
+
}
|
|
36
|
+
export declare function open(config: LoggerOptions): Logger;
|