toolip 1.0.5 → 1.0.6
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 +1 -1
- package/dist/src/commands/alternatives.d.ts +0 -2
- package/dist/src/commands/alternatives.js +0 -17
- package/dist/src/commands/alternatives.js.map +0 -1
- package/dist/src/commands/compare.d.ts +0 -2
- package/dist/src/commands/compare.js +0 -19
- package/dist/src/commands/compare.js.map +0 -1
- package/dist/src/commands/doctor.d.ts +0 -2
- package/dist/src/commands/doctor.js +0 -42
- package/dist/src/commands/doctor.js.map +0 -1
- package/dist/src/commands/git-audit.d.ts +0 -2
- package/dist/src/commands/git-audit.js +0 -37
- package/dist/src/commands/git-audit.js.map +0 -1
- package/dist/src/commands/hook.d.ts +0 -2
- package/dist/src/commands/hook.js +0 -16
- package/dist/src/commands/hook.js.map +0 -1
- package/dist/src/commands/inspect.d.ts +0 -2
- package/dist/src/commands/inspect.js +0 -24
- package/dist/src/commands/inspect.js.map +0 -1
- package/dist/src/commands/learn.d.ts +0 -2
- package/dist/src/commands/learn.js +0 -42
- package/dist/src/commands/learn.js.map +0 -1
- package/dist/src/commands/licenses.d.ts +0 -2
- package/dist/src/commands/licenses.js +0 -40
- package/dist/src/commands/licenses.js.map +0 -1
- package/dist/src/commands/pre-commit.d.ts +0 -2
- package/dist/src/commands/pre-commit.js +0 -37
- package/dist/src/commands/pre-commit.js.map +0 -1
- package/dist/src/commands/profile.d.ts +0 -2
- package/dist/src/commands/profile.js +0 -18
- package/dist/src/commands/profile.js.map +0 -1
- package/dist/src/commands/scan.d.ts +0 -2
- package/dist/src/commands/scan.js +0 -48
- package/dist/src/commands/scan.js.map +0 -1
- package/dist/src/commands/score.d.ts +0 -2
- package/dist/src/commands/score.js +0 -24
- package/dist/src/commands/score.js.map +0 -1
- package/dist/src/commands/self-test.d.ts +0 -2
- package/dist/src/commands/self-test.js +0 -63
- package/dist/src/commands/self-test.js.map +0 -1
- package/dist/src/commands/tree.d.ts +0 -2
- package/dist/src/commands/tree.js +0 -21
- package/dist/src/commands/tree.js.map +0 -1
- package/dist/src/commands/vault.d.ts +0 -2
- package/dist/src/commands/vault.js +0 -86
- package/dist/src/commands/vault.js.map +0 -1
- package/dist/src/config/version.d.ts +0 -6
- package/dist/src/config/version.js +0 -7
- package/dist/src/config/version.js.map +0 -1
- package/dist/src/core/alternatives.d.ts +0 -8
- package/dist/src/core/alternatives.js +0 -35
- package/dist/src/core/alternatives.js.map +0 -1
- package/dist/src/core/analyze-package.d.ts +0 -2
- package/dist/src/core/analyze-package.js +0 -49
- package/dist/src/core/analyze-package.js.map +0 -1
- package/dist/src/core/compare-packages.d.ts +0 -7
- package/dist/src/core/compare-packages.js +0 -19
- package/dist/src/core/compare-packages.js.map +0 -1
- package/dist/src/core/dependency-scan.d.ts +0 -17
- package/dist/src/core/dependency-scan.js +0 -70
- package/dist/src/core/dependency-scan.js.map +0 -1
- package/dist/src/core/dependency-tree.d.ts +0 -16
- package/dist/src/core/dependency-tree.js +0 -19
- package/dist/src/core/dependency-tree.js.map +0 -1
- package/dist/src/core/dependency-types.d.ts +0 -17
- package/dist/src/core/dependency-types.js +0 -2
- package/dist/src/core/dependency-types.js.map +0 -1
- package/dist/src/core/file-walker.d.ts +0 -6
- package/dist/src/core/file-walker.js +0 -27
- package/dist/src/core/file-walker.js.map +0 -1
- package/dist/src/core/git-audit.d.ts +0 -12
- package/dist/src/core/git-audit.js +0 -111
- package/dist/src/core/git-audit.js.map +0 -1
- package/dist/src/core/hooks.d.ts +0 -1
- package/dist/src/core/hooks.js +0 -14
- package/dist/src/core/hooks.js.map +0 -1
- package/dist/src/core/learn.d.ts +0 -11
- package/dist/src/core/learn.js +0 -163
- package/dist/src/core/learn.js.map +0 -1
- package/dist/src/core/license-analysis.d.ts +0 -18
- package/dist/src/core/license-analysis.js +0 -98
- package/dist/src/core/license-analysis.js.map +0 -1
- package/dist/src/core/load-toolip-ignore.d.ts +0 -5
- package/dist/src/core/load-toolip-ignore.js +0 -35
- package/dist/src/core/load-toolip-ignore.js.map +0 -1
- package/dist/src/core/npm-registry.d.ts +0 -3
- package/dist/src/core/npm-registry.js +0 -5
- package/dist/src/core/npm-registry.js.map +0 -1
- package/dist/src/core/pre-commit.d.ts +0 -11
- package/dist/src/core/pre-commit.js +0 -22
- package/dist/src/core/pre-commit.js.map +0 -1
- package/dist/src/core/profile-project.d.ts +0 -23
- package/dist/src/core/profile-project.js +0 -119
- package/dist/src/core/profile-project.js.map +0 -1
- package/dist/src/core/read-dependencies.d.ts +0 -2
- package/dist/src/core/read-dependencies.js +0 -24
- package/dist/src/core/read-dependencies.js.map +0 -1
- package/dist/src/core/report-writer.d.ts +0 -5
- package/dist/src/core/report-writer.js +0 -61
- package/dist/src/core/report-writer.js.map +0 -1
- package/dist/src/core/report.d.ts +0 -34
- package/dist/src/core/report.js +0 -26
- package/dist/src/core/report.js.map +0 -1
- package/dist/src/core/risk-score.d.ts +0 -5
- package/dist/src/core/risk-score.js +0 -14
- package/dist/src/core/risk-score.js.map +0 -1
- package/dist/src/core/scanner-context.d.ts +0 -12
- package/dist/src/core/scanner-context.js +0 -27
- package/dist/src/core/scanner-context.js.map +0 -1
- package/dist/src/core/score.d.ts +0 -13
- package/dist/src/core/score.js +0 -44
- package/dist/src/core/score.js.map +0 -1
- package/dist/src/core/security-doctor.d.ts +0 -12
- package/dist/src/core/security-doctor.js +0 -106
- package/dist/src/core/security-doctor.js.map +0 -1
- package/dist/src/core/security-patterns.d.ts +0 -14
- package/dist/src/core/security-patterns.js +0 -130
- package/dist/src/core/security-patterns.js.map +0 -1
- package/dist/src/core/typosquat.d.ts +0 -6
- package/dist/src/core/typosquat.js +0 -50
- package/dist/src/core/typosquat.js.map +0 -1
- package/dist/src/core/vault.d.ts +0 -48
- package/dist/src/core/vault.js +0 -127
- package/dist/src/core/vault.js.map +0 -1
- package/dist/src/errors/toolip-error.d.ts +0 -8
- package/dist/src/errors/toolip-error.js +0 -11
- package/dist/src/errors/toolip-error.js.map +0 -1
- package/dist/src/index.d.ts +0 -2
- package/dist/src/index.js +0 -51
- package/dist/src/index.js.map +0 -1
- package/dist/src/utils/error-handler.d.ts +0 -1
- package/dist/src/utils/error-handler.js +0 -24
- package/dist/src/utils/error-handler.js.map +0 -1
- package/dist/src/utils/output.d.ts +0 -6
- package/dist/src/utils/output.js +0 -72
- package/dist/src/utils/output.js.map +0 -1
- package/dist/src/utils/package-output.d.ts +0 -4
- package/dist/src/utils/package-output.js +0 -40
- package/dist/src/utils/package-output.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { findAlternatives } from '../core/alternatives.js';
|
|
3
|
-
export function registerAlternativesCommand(program) {
|
|
4
|
-
program
|
|
5
|
-
.command('alternatives <package>')
|
|
6
|
-
.description('Suggest safer or better-maintained package alternatives.')
|
|
7
|
-
.action((packageName) => {
|
|
8
|
-
const result = findAlternatives(packageName);
|
|
9
|
-
console.log(chalk.bold(`Alternatives for ${result.package}`));
|
|
10
|
-
console.log('');
|
|
11
|
-
for (const alternative of result.alternatives) {
|
|
12
|
-
console.log(`${chalk.green('✓')} ${chalk.bold(alternative.name)}`);
|
|
13
|
-
console.log(` ${alternative.reason}`);
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=alternatives.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"alternatives.js","sourceRoot":"","sources":["../../../src/commands/alternatives.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,UAAU,2BAA2B,CAAC,OAAgB;IAC1D,OAAO;SACJ,OAAO,CAAC,wBAAwB,CAAC;SACjC,WAAW,CAAC,0DAA0D,CAAC;SACvE,MAAM,CAAC,CAAC,WAAmB,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAE7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { comparePackages } from '../core/compare-packages.js';
|
|
2
|
-
import { printPackageComparison } from '../utils/package-output.js';
|
|
3
|
-
import { ToolipError } from '../errors/toolip-error.js';
|
|
4
|
-
export function registerCompareCommand(program) {
|
|
5
|
-
program
|
|
6
|
-
.command('compare <packages...>')
|
|
7
|
-
.description('Compare npm packages by maintenance and risk signals.')
|
|
8
|
-
.action(async (packageNames) => {
|
|
9
|
-
if (packageNames.length < 2) {
|
|
10
|
-
throw new ToolipError('Please provide at least two packages to compare.', {
|
|
11
|
-
code: 'COMPARE_REQUIRES_TWO_PACKAGES',
|
|
12
|
-
exitCode: 1
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
const comparison = await comparePackages(packageNames);
|
|
16
|
-
printPackageComparison(comparison);
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=compare.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compare.js","sourceRoot":"","sources":["../../../src/commands/compare.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,uBAAuB,CAAC;SAChC,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,YAAsB,EAAE,EAAE;QACvC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,WAAW,CAAC,kDAAkD,EAAE;gBACxE,IAAI,EAAE,+BAA+B;gBACrC,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC;QACvD,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { createScannerContext } from '../core/scanner-context.js';
|
|
3
|
-
import { createReport } from '../core/report.js';
|
|
4
|
-
import { writeReport } from '../core/report-writer.js';
|
|
5
|
-
import { runSecurityDoctor } from '../core/security-doctor.js';
|
|
6
|
-
import { TOOLIP_VERSION } from '../config/version.js';
|
|
7
|
-
import { printReportSummary, printScannerContext } from '../utils/output.js';
|
|
8
|
-
export function registerDoctorCommand(program) {
|
|
9
|
-
program
|
|
10
|
-
.command('doctor')
|
|
11
|
-
.description('Run a full project security hygiene audit.')
|
|
12
|
-
.option('-p, --path <path>', 'Project path to audit.', process.cwd())
|
|
13
|
-
.option('-o, --output <file>', 'Write doctor report to JSON or Markdown.')
|
|
14
|
-
.action(async (options) => {
|
|
15
|
-
console.log(chalk.bold('Toolip Doctor'));
|
|
16
|
-
console.log('');
|
|
17
|
-
const context = await createScannerContext(options.path);
|
|
18
|
-
printScannerContext(context);
|
|
19
|
-
const doctor = await runSecurityDoctor(context.root);
|
|
20
|
-
const report = createReport({
|
|
21
|
-
version: TOOLIP_VERSION,
|
|
22
|
-
command: 'doctor',
|
|
23
|
-
root: context.root,
|
|
24
|
-
findings: doctor.findings
|
|
25
|
-
});
|
|
26
|
-
console.log('');
|
|
27
|
-
console.log(chalk.bold('Security Hygiene'));
|
|
28
|
-
console.log(`${chalk.dim('Files Scanned:')} ${doctor.summary.filesScanned}`);
|
|
29
|
-
console.log(`${chalk.dim('Secrets:')} ${doctor.summary.secrets}`);
|
|
30
|
-
console.log(`${chalk.dim('Dangerous Code:')} ${doctor.summary.dangerousCode}`);
|
|
31
|
-
console.log(`${chalk.dim('Configuration:')} ${doctor.summary.configuration}`);
|
|
32
|
-
console.log(`${chalk.dim('Security Headers:')} ${doctor.summary.headers}`);
|
|
33
|
-
console.log('');
|
|
34
|
-
printReportSummary(report);
|
|
35
|
-
if (options.output) {
|
|
36
|
-
await writeReport(options.output, report);
|
|
37
|
-
console.log('');
|
|
38
|
-
console.log(`${chalk.green('✓')} Report written to ${options.output}`);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=doctor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/commands/doctor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACpE,MAAM,CAAC,qBAAqB,EAAE,0CAA0C,CAAC;SACzE,MAAM,CAAC,KAAK,EAAE,OAA0C,EAAE,EAAE;QAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzD,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAE7B,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAE3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAE3B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { runGitAudit } from '../core/git-audit.js';
|
|
3
|
-
import { createReport } from '../core/report.js';
|
|
4
|
-
import { writeReport } from '../core/report-writer.js';
|
|
5
|
-
import { TOOLIP_VERSION } from '../config/version.js';
|
|
6
|
-
import { printReportSummary } from '../utils/output.js';
|
|
7
|
-
export function registerGitAuditCommand(program) {
|
|
8
|
-
program
|
|
9
|
-
.command('git-audit')
|
|
10
|
-
.description('Audit Git safety, ignored files, and dangerous committed-file patterns.')
|
|
11
|
-
.option('-p, --path <path>', 'Project path to audit.', process.cwd())
|
|
12
|
-
.option('-o, --output <file>', 'Write Git audit report to JSON or Markdown.')
|
|
13
|
-
.action(async (options) => {
|
|
14
|
-
const result = await runGitAudit(options.path);
|
|
15
|
-
console.log(chalk.bold('Toolip Git Audit'));
|
|
16
|
-
console.log('');
|
|
17
|
-
console.log(`${chalk.dim('Files Checked:')} ${result.summary.filesChecked}`);
|
|
18
|
-
console.log(`${chalk.dim('Dangerous Files:')} ${result.summary.dangerousFiles}`);
|
|
19
|
-
console.log(`${chalk.dim('.gitignore Present:')} ${result.summary.gitignorePresent ? 'yes' : 'no'}`);
|
|
20
|
-
console.log(`${chalk.dim('.env Ignored:')} ${result.summary.envIgnored ? 'yes' : 'no'}`);
|
|
21
|
-
console.log(`${chalk.dim('PEM Ignored:')} ${result.summary.pemIgnored ? 'yes' : 'no'}`);
|
|
22
|
-
const report = createReport({
|
|
23
|
-
version: TOOLIP_VERSION,
|
|
24
|
-
command: 'git-audit',
|
|
25
|
-
root: options.path,
|
|
26
|
-
findings: result.findings
|
|
27
|
-
});
|
|
28
|
-
console.log('');
|
|
29
|
-
printReportSummary(report);
|
|
30
|
-
if (options.output) {
|
|
31
|
-
await writeReport(options.output, report);
|
|
32
|
-
console.log('');
|
|
33
|
-
console.log(`${chalk.green('✓')} Report written to ${options.output}`);
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=git-audit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git-audit.js","sourceRoot":"","sources":["../../../src/commands/git-audit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,yEAAyE,CAAC;SACtF,MAAM,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACpE,MAAM,CAAC,qBAAqB,EAAE,6CAA6C,CAAC;SAC5E,MAAM,CAAC,KAAK,EAAE,OAA0C,EAAE,EAAE;QAC3D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACrG,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAExF,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,WAAW;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAE3B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { installPreCommitHook } from '../core/hooks.js';
|
|
3
|
-
export function registerHookCommand(program) {
|
|
4
|
-
const hook = program
|
|
5
|
-
.command('hook')
|
|
6
|
-
.description('Install Toolip Git hooks.');
|
|
7
|
-
hook
|
|
8
|
-
.command('install')
|
|
9
|
-
.description('Install Toolip pre-commit hook.')
|
|
10
|
-
.option('-p, --path <path>', 'Project path.', process.cwd())
|
|
11
|
-
.action(async (options) => {
|
|
12
|
-
const hookPath = await installPreCommitHook(options.path);
|
|
13
|
-
console.log(`${chalk.green('✓')} Installed pre-commit hook at ${hookPath}`);
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=hook.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../src/commands/hook.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,2BAA2B,CAAC,CAAC;IAE5C,IAAI;SACD,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,mBAAmB,EAAE,eAAe,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,OAAyB,EAAE,EAAE;QAC1C,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { analyzePackage } from '../core/analyze-package.js';
|
|
3
|
-
import { detectTyposquat } from '../core/typosquat.js';
|
|
4
|
-
import { printPackageHealth } from '../utils/package-output.js';
|
|
5
|
-
export function registerInspectCommand(program) {
|
|
6
|
-
program
|
|
7
|
-
.command('inspect <package>')
|
|
8
|
-
.description('Inspect a package from npm registry.')
|
|
9
|
-
.action(async (packageName) => {
|
|
10
|
-
const typo = detectTyposquat(packageName);
|
|
11
|
-
if (typo.suspected) {
|
|
12
|
-
console.log(chalk.yellow('Potential typosquatting signal detected.'));
|
|
13
|
-
console.log(`Did you mean: ${typo.suggestions.join(', ')}`);
|
|
14
|
-
console.log('');
|
|
15
|
-
}
|
|
16
|
-
const result = await analyzePackage({
|
|
17
|
-
name: packageName,
|
|
18
|
-
version: 'latest',
|
|
19
|
-
type: 'dependency'
|
|
20
|
-
});
|
|
21
|
-
printPackageHealth(result);
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=inspect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/commands/inspect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,WAAmB,EAAE,EAAE;QACpC,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAE1C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0CAA0C,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;YAClC,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC;QAEH,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { getLearnTopic, listLearnTopics } from '../core/learn.js';
|
|
3
|
-
import { ToolipError } from '../errors/toolip-error.js';
|
|
4
|
-
export function registerLearnCommand(program) {
|
|
5
|
-
program
|
|
6
|
-
.command('learn [topic]')
|
|
7
|
-
.description('Learn secure development concepts while using Toolip.')
|
|
8
|
-
.option('--list', 'List available learning topics.')
|
|
9
|
-
.action((topic, options) => {
|
|
10
|
-
if (options.list || !topic) {
|
|
11
|
-
console.log(chalk.bold('Toolip Learning Topics'));
|
|
12
|
-
console.log('');
|
|
13
|
-
for (const item of listLearnTopics()) {
|
|
14
|
-
console.log(`${chalk.green('✓')} ${item.id} ${chalk.dim(`— ${item.title}`)}`);
|
|
15
|
-
}
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
const lesson = getLearnTopic(topic);
|
|
19
|
-
if (!lesson) {
|
|
20
|
-
throw new ToolipError(`Unknown learning topic: ${topic}`, {
|
|
21
|
-
code: 'LEARN_TOPIC_NOT_FOUND',
|
|
22
|
-
exitCode: 1
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
console.log(chalk.bold(lesson.title));
|
|
26
|
-
console.log('');
|
|
27
|
-
console.log(lesson.explanation);
|
|
28
|
-
console.log('');
|
|
29
|
-
printSection('Risks', lesson.risks);
|
|
30
|
-
printSection('Common Mistakes', lesson.mistakes);
|
|
31
|
-
printSection('Secure Examples', lesson.secureExamples);
|
|
32
|
-
printSection('Best Practices', lesson.bestPractices);
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
function printSection(title, items) {
|
|
36
|
-
console.log(chalk.bold(title));
|
|
37
|
-
for (const item of items) {
|
|
38
|
-
console.log(`${chalk.green('•')} ${item}`);
|
|
39
|
-
}
|
|
40
|
-
console.log('');
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=learn.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"learn.js","sourceRoot":"","sources":["../../../src/commands/learn.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,QAAQ,EAAE,iCAAiC,CAAC;SACnD,MAAM,CAAC,CAAC,KAAyB,EAAE,OAA2B,EAAE,EAAE;QACjE,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,EAAE,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAChF,CAAC;YAED,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAEpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,WAAW,CAAC,2BAA2B,KAAK,EAAE,EAAE;gBACxD,IAAI,EAAE,uBAAuB;gBAC7B,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjD,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;QACvD,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,KAAe;IAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { analyzeLicenses } from '../core/license-analysis.js';
|
|
3
|
-
import { createReport } from '../core/report.js';
|
|
4
|
-
import { writeReport } from '../core/report-writer.js';
|
|
5
|
-
import { TOOLIP_VERSION } from '../config/version.js';
|
|
6
|
-
import { printReportSummary } from '../utils/output.js';
|
|
7
|
-
export function registerLicensesCommand(program) {
|
|
8
|
-
program
|
|
9
|
-
.command('licenses')
|
|
10
|
-
.description('Analyze dependency license inventory and restrictive license signals.')
|
|
11
|
-
.option('-p, --path <path>', 'Project path to analyze.', process.cwd())
|
|
12
|
-
.option('-o, --output <file>', 'Write license report to JSON or Markdown.')
|
|
13
|
-
.action(async (options) => {
|
|
14
|
-
const result = await analyzeLicenses(options.path);
|
|
15
|
-
console.log(chalk.bold('Toolip License Analysis'));
|
|
16
|
-
console.log('');
|
|
17
|
-
console.log(`${chalk.dim('Total Packages:')} ${result.summary.total}`);
|
|
18
|
-
console.log(`${chalk.dim('Unknown Licenses:')} ${result.summary.unknown}`);
|
|
19
|
-
console.log(`${chalk.dim('Restrictive Licenses:')} ${result.summary.restrictive}`);
|
|
20
|
-
console.log('');
|
|
21
|
-
console.log(chalk.bold('License Distribution'));
|
|
22
|
-
for (const [license, count] of Object.entries(result.summary.distribution)) {
|
|
23
|
-
console.log(`${chalk.green('✓')} ${license}: ${count}`);
|
|
24
|
-
}
|
|
25
|
-
const report = createReport({
|
|
26
|
-
version: TOOLIP_VERSION,
|
|
27
|
-
command: 'licenses',
|
|
28
|
-
root: options.path,
|
|
29
|
-
findings: result.findings
|
|
30
|
-
});
|
|
31
|
-
console.log('');
|
|
32
|
-
printReportSummary(report);
|
|
33
|
-
if (options.output) {
|
|
34
|
-
await writeReport(options.output, report);
|
|
35
|
-
console.log('');
|
|
36
|
-
console.log(`${chalk.green('✓')} Report written to ${options.output}`);
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=licenses.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"licenses.js","sourceRoot":"","sources":["../../../src/commands/licenses.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,uEAAuE,CAAC;SACpF,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACtE,MAAM,CAAC,qBAAqB,EAAE,2CAA2C,CAAC;SAC1E,MAAM,CAAC,KAAK,EAAE,OAA0C,EAAE,EAAE;QAC3D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAChD,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3E,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,UAAU;YACnB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAE3B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { runPreCommit } from '../core/pre-commit.js';
|
|
3
|
-
export function registerPreCommitCommand(program) {
|
|
4
|
-
program
|
|
5
|
-
.command('pre-commit')
|
|
6
|
-
.description('Run blocking checks before a Git commit.')
|
|
7
|
-
.option('-p, --path <path>', 'Project path to check.', process.cwd())
|
|
8
|
-
.option('--show-findings', 'Print blocking findings.')
|
|
9
|
-
.action(async (options) => {
|
|
10
|
-
const result = await runPreCommit(options.path);
|
|
11
|
-
console.log(chalk.bold('Toolip Pre-Commit'));
|
|
12
|
-
console.log('');
|
|
13
|
-
console.log(`${chalk.dim('Critical:')} ${result.summary.critical}`);
|
|
14
|
-
console.log(`${chalk.dim('High:')} ${result.summary.high}`);
|
|
15
|
-
console.log(`${chalk.dim('Blocking Findings:')} ${result.summary.blocking}`);
|
|
16
|
-
if (options.showFindings && result.findings.length > 0) {
|
|
17
|
-
console.log('');
|
|
18
|
-
console.log(chalk.bold('Blocking Findings'));
|
|
19
|
-
for (const finding of result.findings.filter((item) => item.severity === 'critical' || item.severity === 'high')) {
|
|
20
|
-
console.log(`${chalk.red('✖')} ${finding.title}`);
|
|
21
|
-
if (finding.file)
|
|
22
|
-
console.log(` ${chalk.dim('File:')} ${finding.file}`);
|
|
23
|
-
if (finding.evidence)
|
|
24
|
-
console.log(` ${chalk.dim('Evidence:')} ${finding.evidence}`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
if (!result.passed) {
|
|
28
|
-
console.log('');
|
|
29
|
-
console.log(chalk.red('Pre-commit checks failed. Fix critical/high findings before committing.'));
|
|
30
|
-
process.exitCode = 1;
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
console.log('');
|
|
34
|
-
console.log(chalk.green('Pre-commit checks passed.'));
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=pre-commit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pre-commit.js","sourceRoot":"","sources":["../../../src/commands/pre-commit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,OAAO;SACJ,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACpE,MAAM,CAAC,iBAAiB,EAAE,0BAA0B,CAAC;SACrD,MAAM,CAAC,KAAK,EAAE,OAAiD,EAAE,EAAE;QAClE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEhD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE7E,IAAI,OAAO,CAAC,YAAY,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAE7C,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAC1C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CACnE,EAAE,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;gBAClD,IAAI,OAAO,CAAC,IAAI;oBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;gBACzE,IAAI,OAAO,CAAC,QAAQ;oBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC,CAAC;YAClG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { profileProject } from '../core/profile-project.js';
|
|
2
|
-
import { printProfile } from '../utils/output.js';
|
|
3
|
-
export function registerProfileCommand(program) {
|
|
4
|
-
program
|
|
5
|
-
.command('profile')
|
|
6
|
-
.description('Fingerprint the current project and detect frameworks, languages, and tooling.')
|
|
7
|
-
.option('-p, --path <path>', 'Project path to inspect.', process.cwd())
|
|
8
|
-
.option('--json', 'Print profile as JSON.')
|
|
9
|
-
.action(async (options) => {
|
|
10
|
-
const profile = await profileProject(options.path);
|
|
11
|
-
if (options.json) {
|
|
12
|
-
console.log(JSON.stringify(profile, null, 2));
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
printProfile(profile);
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=profile.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/commands/profile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,gFAAgF,CAAC;SAC7F,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,OAAyC,EAAE,EAAE;QAC1D,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEnD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { createScannerContext } from '../core/scanner-context.js';
|
|
3
|
-
import { createReport } from '../core/report.js';
|
|
4
|
-
import { writeReport } from '../core/report-writer.js';
|
|
5
|
-
import { scanDependencies } from '../core/dependency-scan.js';
|
|
6
|
-
import { calculateDependencyHealth, calculateScore } from '../core/score.js';
|
|
7
|
-
import { TOOLIP_VERSION } from '../config/version.js';
|
|
8
|
-
import { printReportSummary, printScannerContext } from '../utils/output.js';
|
|
9
|
-
export function registerScanCommand(program) {
|
|
10
|
-
program
|
|
11
|
-
.command('scan')
|
|
12
|
-
.description('Scan project dependencies and security hygiene indicators.')
|
|
13
|
-
.option('-p, --path <path>', 'Project path to scan.', process.cwd())
|
|
14
|
-
.option('-o, --output <file>', 'Write scan report to JSON or Markdown.')
|
|
15
|
-
.action(async (options) => {
|
|
16
|
-
console.log(chalk.bold('Toolip Scan'));
|
|
17
|
-
console.log('');
|
|
18
|
-
const context = await createScannerContext(options.path);
|
|
19
|
-
printScannerContext(context);
|
|
20
|
-
const dependencyScan = await scanDependencies(context.root);
|
|
21
|
-
const dependencyHealth = calculateDependencyHealth(dependencyScan.findings);
|
|
22
|
-
const score = calculateScore({ dependencyHealth });
|
|
23
|
-
const report = createReport({
|
|
24
|
-
version: TOOLIP_VERSION,
|
|
25
|
-
command: 'scan',
|
|
26
|
-
root: context.root,
|
|
27
|
-
findings: dependencyScan.findings
|
|
28
|
-
});
|
|
29
|
-
console.log('');
|
|
30
|
-
console.log(chalk.bold('Dependency Intelligence'));
|
|
31
|
-
console.log(`${chalk.dim('Total Dependencies:')} ${dependencyScan.summary.totalDependencies}`);
|
|
32
|
-
console.log(`${chalk.dim('Outdated:')} ${dependencyScan.summary.outdated}`);
|
|
33
|
-
console.log(`${chalk.dim('Deprecated:')} ${dependencyScan.summary.deprecated}`);
|
|
34
|
-
console.log(`${chalk.dim('High Risk:')} ${dependencyScan.summary.highRisk}`);
|
|
35
|
-
console.log(`${chalk.dim('Medium Risk:')} ${dependencyScan.summary.mediumRisk}`);
|
|
36
|
-
console.log(`${chalk.dim('Average Risk:')} ${dependencyScan.summary.averageRiskScore}`);
|
|
37
|
-
console.log(`${chalk.dim('Dependency Health:')} ${dependencyHealth}`);
|
|
38
|
-
console.log(`${chalk.dim('Overall Grade:')} ${score.grade}`);
|
|
39
|
-
console.log('');
|
|
40
|
-
printReportSummary(report);
|
|
41
|
-
if (options.output) {
|
|
42
|
-
await writeReport(options.output, report);
|
|
43
|
-
console.log('');
|
|
44
|
-
console.log(`${chalk.green('✓')} Report written to ${options.output}`);
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=scan.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/commands/scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { scanDependencies } from '../core/dependency-scan.js';
|
|
3
|
-
import { calculateDependencyHealth, calculateScore } from '../core/score.js';
|
|
4
|
-
export function registerScoreCommand(program) {
|
|
5
|
-
program
|
|
6
|
-
.command('score')
|
|
7
|
-
.description('Calculate a Toolip security scorecard for the current project.')
|
|
8
|
-
.option('-p, --path <path>', 'Project path to score.', process.cwd())
|
|
9
|
-
.action(async (options) => {
|
|
10
|
-
const dependencyScan = await scanDependencies(options.path);
|
|
11
|
-
const dependencyHealth = calculateDependencyHealth(dependencyScan.findings);
|
|
12
|
-
const score = calculateScore({ dependencyHealth });
|
|
13
|
-
console.log(chalk.bold('Toolip Security Scorecard'));
|
|
14
|
-
console.log('');
|
|
15
|
-
console.log(`${chalk.dim('Dependency Health ....')} ${score.dependencyHealth}`);
|
|
16
|
-
console.log(`${chalk.dim('Secret Hygiene .......')} ${score.secretHygiene}`);
|
|
17
|
-
console.log(`${chalk.dim('Configuration ........')} ${score.configurationSecurity}`);
|
|
18
|
-
console.log(`${chalk.dim('Git Safety ...........')} ${score.gitSafety}`);
|
|
19
|
-
console.log('');
|
|
20
|
-
console.log(`${chalk.dim('Overall Score ........')} ${score.overall}`);
|
|
21
|
-
console.log(`${chalk.dim('Grade ................')} ${score.grade}`);
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=score.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"score.js","sourceRoot":"","sources":["../../../src/commands/score.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE7E,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,gEAAgE,CAAC;SAC7E,MAAM,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,OAAyB,EAAE,EAAE;QAC1C,MAAM,cAAc,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAEnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { access } from 'node:fs/promises';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { TOOLIP_VERSION } from '../config/version.js';
|
|
5
|
-
async function canAccess(filePath) {
|
|
6
|
-
try {
|
|
7
|
-
await access(filePath);
|
|
8
|
-
return true;
|
|
9
|
-
}
|
|
10
|
-
catch {
|
|
11
|
-
return false;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
export function registerSelfTestCommand(program) {
|
|
15
|
-
program
|
|
16
|
-
.command('self-test')
|
|
17
|
-
.description('Run Toolip internal diagnostics.')
|
|
18
|
-
.action(async () => {
|
|
19
|
-
const checks = [
|
|
20
|
-
{
|
|
21
|
-
label: 'CLI Loaded',
|
|
22
|
-
passed: true
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
label: 'Command Router Ready',
|
|
26
|
-
passed: true
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
label: 'Package Manifest Found',
|
|
30
|
-
passed: await canAccess(path.join(process.cwd(), 'package.json'))
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
label: 'Scanner Foundation Ready',
|
|
34
|
-
passed: true
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
label: 'Report Engine Ready',
|
|
38
|
-
passed: true
|
|
39
|
-
}
|
|
40
|
-
];
|
|
41
|
-
console.log(chalk.bold('Toolip Self-Test'));
|
|
42
|
-
console.log(chalk.dim(`Version: ${TOOLIP_VERSION}`));
|
|
43
|
-
console.log('');
|
|
44
|
-
let failed = 0;
|
|
45
|
-
for (const check of checks) {
|
|
46
|
-
if (check.passed) {
|
|
47
|
-
console.log(`${chalk.green('✓')} ${check.label}`);
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
failed += 1;
|
|
51
|
-
console.log(`${chalk.red('✖')} ${check.label}`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
console.log('');
|
|
55
|
-
if (failed > 0) {
|
|
56
|
-
console.log(chalk.red(`Toolip found ${failed} failed diagnostic check(s).`));
|
|
57
|
-
process.exitCode = 1;
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
console.log(chalk.green('Toolip is healthy.'));
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=self-test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"self-test.js","sourceRoot":"","sources":["../../../src/commands/self-test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,KAAK,UAAU,SAAS,CAAC,QAAgB;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG;YACb;gBACE,KAAK,EAAE,YAAY;gBACnB,MAAM,EAAE,IAAI;aACb;YACD;gBACE,KAAK,EAAE,sBAAsB;gBAC7B,MAAM,EAAE,IAAI;aACb;YACD;gBACE,KAAK,EAAE,wBAAwB;gBAC/B,MAAM,EAAE,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;aAClE;YACD;gBACE,KAAK,EAAE,0BAA0B;gBACjC,MAAM,EAAE,IAAI;aACb;YACD;gBACE,KAAK,EAAE,qBAAqB;gBAC5B,MAAM,EAAE,IAAI;aACb;SACF,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,cAAc,EAAE,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,MAAM,8BAA8B,CAAC,CAAC,CAAC;YAC7E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { buildDependencyTree } from '../core/dependency-tree.js';
|
|
3
|
-
export function registerTreeCommand(program) {
|
|
4
|
-
program
|
|
5
|
-
.command('tree')
|
|
6
|
-
.description('Display a dependency tree summary.')
|
|
7
|
-
.option('-p, --path <path>', 'Project path to analyze.', process.cwd())
|
|
8
|
-
.action(async (options) => {
|
|
9
|
-
const tree = await buildDependencyTree(options.path);
|
|
10
|
-
console.log(chalk.bold('Toolip Dependency Tree'));
|
|
11
|
-
console.log('');
|
|
12
|
-
console.log(`${chalk.dim('Direct Dependencies:')} ${tree.summary.direct}`);
|
|
13
|
-
console.log(`${chalk.dim('Transitive Dependencies:')} ${tree.summary.transitive}`);
|
|
14
|
-
console.log(`${chalk.dim('Max Depth:')} ${tree.summary.maxDepth}`);
|
|
15
|
-
console.log('');
|
|
16
|
-
for (const dependency of tree.dependencies) {
|
|
17
|
-
console.log(`${chalk.green('├─')} ${dependency.name}@${dependency.version} ${chalk.dim(`(${dependency.type})`)}`);
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=tree.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../../src/commands/tree.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACtE,MAAM,CAAC,KAAK,EAAE,OAAyB,EAAE,EAAE;QAC1C,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAErD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;QACpH,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|