depguard.ai 1.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/LICENSE +190 -0
- package/README.md +173 -0
- package/dist/advisor.d.ts +13 -0
- package/dist/advisor.d.ts.map +1 -0
- package/dist/advisor.js +68 -0
- package/dist/advisor.js.map +1 -0
- package/dist/audit.d.ts +7 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +86 -0
- package/dist/audit.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +140 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/license.d.ts +11 -0
- package/dist/license.d.ts.map +1 -0
- package/dist/license.js +133 -0
- package/dist/license.js.map +1 -0
- package/dist/mcp.d.ts +11 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +174 -0
- package/dist/mcp.js.map +1 -0
- package/dist/registry.d.ts +12 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +109 -0
- package/dist/registry.js.map +1 -0
- package/dist/scorer.d.ts +11 -0
- package/dist/scorer.d.ts.map +1 -0
- package/dist/scorer.js +92 -0
- package/dist/scorer.js.map +1 -0
- package/dist/search.d.ts +7 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +22 -0
- package/dist/search.js.map +1 -0
- package/dist/types.d.ts +168 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/scorer.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { FetchFn, ScoreResult, ScoreWeights } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Score a package from 0-100 based on security, maintenance, popularity,
|
|
4
|
+
* license compatibility, and dependency health.
|
|
5
|
+
*/
|
|
6
|
+
export declare function score(name: string, options?: {
|
|
7
|
+
targetLicense?: string;
|
|
8
|
+
weights?: Partial<ScoreWeights>;
|
|
9
|
+
fetcher?: FetchFn;
|
|
10
|
+
}): Promise<ScoreResult>;
|
|
11
|
+
//# sourceMappingURL=scorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scorer.d.ts","sourceRoot":"","sources":["../src/scorer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAWjF;;;GAGG;AACH,wBAAsB,KAAK,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAA;CACb,GACL,OAAO,CAAC,WAAW,CAAC,CAmCtB"}
|
package/dist/scorer.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { audit } from './audit.js';
|
|
2
|
+
const DEFAULT_WEIGHTS = {
|
|
3
|
+
security: 30,
|
|
4
|
+
maintenance: 25,
|
|
5
|
+
popularity: 20,
|
|
6
|
+
license: 15,
|
|
7
|
+
dependencies: 10,
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Score a package from 0-100 based on security, maintenance, popularity,
|
|
11
|
+
* license compatibility, and dependency health.
|
|
12
|
+
*/
|
|
13
|
+
export async function score(name, options = {}) {
|
|
14
|
+
const { targetLicense = 'MIT', weights: customWeights, fetcher = globalThis.fetch, } = options;
|
|
15
|
+
const weights = { ...DEFAULT_WEIGHTS, ...customWeights };
|
|
16
|
+
const report = await audit(name, targetLicense, fetcher);
|
|
17
|
+
const breakdown = {
|
|
18
|
+
security: computeSecurityScore(report),
|
|
19
|
+
maintenance: computeMaintenanceScore(report),
|
|
20
|
+
popularity: computePopularityScore(report),
|
|
21
|
+
license: computeLicenseScore(report),
|
|
22
|
+
dependencies: computeDependencyScore(report),
|
|
23
|
+
};
|
|
24
|
+
const totalWeight = weights.security + weights.maintenance + weights.popularity +
|
|
25
|
+
weights.license + weights.dependencies;
|
|
26
|
+
const total = Math.round((breakdown.security * weights.security +
|
|
27
|
+
breakdown.maintenance * weights.maintenance +
|
|
28
|
+
breakdown.popularity * weights.popularity +
|
|
29
|
+
breakdown.license * weights.license +
|
|
30
|
+
breakdown.dependencies * weights.dependencies) / totalWeight);
|
|
31
|
+
return {
|
|
32
|
+
name,
|
|
33
|
+
total,
|
|
34
|
+
breakdown,
|
|
35
|
+
warnings: report.warnings,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/** Security: 100 = no vulns, deduct for each severity level */
|
|
39
|
+
function computeSecurityScore(report) {
|
|
40
|
+
const v = report.vulnerabilities;
|
|
41
|
+
let s = 100;
|
|
42
|
+
s -= v.critical * 40;
|
|
43
|
+
s -= v.high * 20;
|
|
44
|
+
s -= v.moderate * 10;
|
|
45
|
+
s -= v.low * 5;
|
|
46
|
+
return Math.max(0, s);
|
|
47
|
+
}
|
|
48
|
+
/** Maintenance: based on recency of last publish and version count */
|
|
49
|
+
function computeMaintenanceScore(report) {
|
|
50
|
+
if (!report.lastPublish)
|
|
51
|
+
return 0;
|
|
52
|
+
const daysSincePublish = Math.floor((Date.now() - new Date(report.lastPublish).getTime()) / (1000 * 60 * 60 * 24));
|
|
53
|
+
// Recency score: 100 if published today, 0 if >2 years ago
|
|
54
|
+
let recency = 100 - Math.min(100, Math.floor(daysSincePublish / 7.3));
|
|
55
|
+
// Bonus for having multiple versions (active development)
|
|
56
|
+
if (report.versionCount >= 10)
|
|
57
|
+
recency = Math.min(100, recency + 10);
|
|
58
|
+
if (report.versionCount >= 50)
|
|
59
|
+
recency = Math.min(100, recency + 10);
|
|
60
|
+
// Penalty for deprecation
|
|
61
|
+
if (report.deprecated)
|
|
62
|
+
recency = Math.floor(recency * 0.3);
|
|
63
|
+
return Math.max(0, recency);
|
|
64
|
+
}
|
|
65
|
+
/** Popularity: logarithmic scale based on weekly downloads */
|
|
66
|
+
function computePopularityScore(report) {
|
|
67
|
+
if (report.weeklyDownloads <= 0)
|
|
68
|
+
return 0;
|
|
69
|
+
// log10 scale: 100 downloads = ~20, 10k = ~40, 1M = ~60, 100M = ~80, 1B = ~100
|
|
70
|
+
const logDownloads = Math.log10(report.weeklyDownloads);
|
|
71
|
+
return Math.min(100, Math.round(logDownloads * 10));
|
|
72
|
+
}
|
|
73
|
+
/** License: 100 if compatible, 0 if not */
|
|
74
|
+
function computeLicenseScore(report) {
|
|
75
|
+
return report.licenseCompatibility.compatible ? 100 : 0;
|
|
76
|
+
}
|
|
77
|
+
/** Dependencies: fewer deps = better, install scripts are a big red flag */
|
|
78
|
+
function computeDependencyScore(report) {
|
|
79
|
+
let s = 100;
|
|
80
|
+
// Deduct for dependency count
|
|
81
|
+
if (report.dependencyCount > 5)
|
|
82
|
+
s -= 10;
|
|
83
|
+
if (report.dependencyCount > 15)
|
|
84
|
+
s -= 15;
|
|
85
|
+
if (report.dependencyCount > 30)
|
|
86
|
+
s -= 25;
|
|
87
|
+
// Major penalty for install scripts
|
|
88
|
+
if (report.hasInstallScripts)
|
|
89
|
+
s -= 30;
|
|
90
|
+
return Math.max(0, s);
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=scorer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scorer.js","sourceRoot":"","sources":["../src/scorer.ts"],"names":[],"mappings":"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"}
|
package/dist/search.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SearchEntry, SearchOptions } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Search npm for packages matching keywords, sorted by quality score.
|
|
4
|
+
* Results can be filtered by minimum score and license compatibility.
|
|
5
|
+
*/
|
|
6
|
+
export declare function search(keywords: string, options?: SearchOptions): Promise<SearchEntry[]>;
|
|
7
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAG5D;;;GAGG;AACH,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,WAAW,EAAE,CAAC,CAsBxB"}
|
package/dist/search.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { searchPackages } from './registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Search npm for packages matching keywords, sorted by quality score.
|
|
4
|
+
* Results can be filtered by minimum score and license compatibility.
|
|
5
|
+
*/
|
|
6
|
+
export async function search(keywords, options = {}) {
|
|
7
|
+
const { limit = 10, minScore = 0, fetcher = globalThis.fetch, } = options;
|
|
8
|
+
const result = await searchPackages(keywords, Math.min(limit * 2, 50), fetcher);
|
|
9
|
+
const entries = result.objects.map(obj => ({
|
|
10
|
+
name: obj.package.name,
|
|
11
|
+
version: obj.package.version,
|
|
12
|
+
description: obj.package.description ?? '',
|
|
13
|
+
score: Math.round(obj.score.final * 100),
|
|
14
|
+
keywords: obj.package.keywords ?? [],
|
|
15
|
+
date: obj.package.date,
|
|
16
|
+
}));
|
|
17
|
+
return entries
|
|
18
|
+
.filter(e => e.score >= minScore)
|
|
19
|
+
.sort((a, b) => b.score - a.score)
|
|
20
|
+
.slice(0, limit);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,QAAgB,EAChB,UAAyB,EAAE;IAE3B,MAAM,EACJ,KAAK,GAAG,EAAE,EACV,QAAQ,GAAG,CAAC,EACZ,OAAO,GAAG,UAAU,CAAC,KAAK,GAC3B,GAAG,OAAO,CAAA;IAEX,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;IAE/E,MAAM,OAAO,GAAkB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxD,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI;QACtB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO;QAC5B,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE;QAC1C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;QACxC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE;QACpC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI;KACvB,CAAC,CAAC,CAAA;IAEH,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC;SAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AACpB,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/** Fetch function signature, injectable for testing */
|
|
2
|
+
export type FetchFn = typeof globalThis.fetch;
|
|
3
|
+
/** npm registry package metadata (abbreviated) */
|
|
4
|
+
export interface NpmPackageData {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
'dist-tags': Record<string, string>;
|
|
8
|
+
time: Record<string, string>;
|
|
9
|
+
license?: string;
|
|
10
|
+
versions: Record<string, NpmVersionData>;
|
|
11
|
+
keywords?: string[];
|
|
12
|
+
homepage?: string;
|
|
13
|
+
repository?: {
|
|
14
|
+
type: string;
|
|
15
|
+
url: string;
|
|
16
|
+
};
|
|
17
|
+
maintainers?: Array<{
|
|
18
|
+
name: string;
|
|
19
|
+
email?: string;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
export interface NpmVersionData {
|
|
23
|
+
name: string;
|
|
24
|
+
version: string;
|
|
25
|
+
license?: string;
|
|
26
|
+
dependencies?: Record<string, string>;
|
|
27
|
+
devDependencies?: Record<string, string>;
|
|
28
|
+
scripts?: Record<string, string>;
|
|
29
|
+
deprecated?: string;
|
|
30
|
+
}
|
|
31
|
+
/** npm registry search result */
|
|
32
|
+
export interface NpmSearchResult {
|
|
33
|
+
objects: Array<{
|
|
34
|
+
package: {
|
|
35
|
+
name: string;
|
|
36
|
+
version: string;
|
|
37
|
+
description: string;
|
|
38
|
+
keywords?: string[];
|
|
39
|
+
date: string;
|
|
40
|
+
links: {
|
|
41
|
+
npm?: string;
|
|
42
|
+
homepage?: string;
|
|
43
|
+
repository?: string;
|
|
44
|
+
};
|
|
45
|
+
publisher: {
|
|
46
|
+
username: string;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
score: {
|
|
50
|
+
final: number;
|
|
51
|
+
detail: {
|
|
52
|
+
quality: number;
|
|
53
|
+
popularity: number;
|
|
54
|
+
maintenance: number;
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
}>;
|
|
58
|
+
total: number;
|
|
59
|
+
}
|
|
60
|
+
/** npm audit advisory */
|
|
61
|
+
export interface NpmAdvisory {
|
|
62
|
+
id: number;
|
|
63
|
+
title: string;
|
|
64
|
+
severity: 'info' | 'low' | 'moderate' | 'high' | 'critical';
|
|
65
|
+
url: string;
|
|
66
|
+
vulnerable_versions: string;
|
|
67
|
+
patched_versions: string | null;
|
|
68
|
+
}
|
|
69
|
+
/** npm downloads response */
|
|
70
|
+
export interface NpmDownloadsResponse {
|
|
71
|
+
downloads: number;
|
|
72
|
+
package: string;
|
|
73
|
+
start: string;
|
|
74
|
+
end: string;
|
|
75
|
+
}
|
|
76
|
+
/** Audit report for a package */
|
|
77
|
+
export interface AuditReport {
|
|
78
|
+
name: string;
|
|
79
|
+
version: string;
|
|
80
|
+
license: string | null;
|
|
81
|
+
description: string;
|
|
82
|
+
lastPublish: string | null;
|
|
83
|
+
weeklyDownloads: number;
|
|
84
|
+
versionCount: number;
|
|
85
|
+
dependencyCount: number;
|
|
86
|
+
hasInstallScripts: boolean;
|
|
87
|
+
deprecated: boolean;
|
|
88
|
+
vulnerabilities: VulnerabilitySummary;
|
|
89
|
+
licenseCompatibility: LicenseCompatibility;
|
|
90
|
+
warnings: string[];
|
|
91
|
+
}
|
|
92
|
+
export interface VulnerabilitySummary {
|
|
93
|
+
total: number;
|
|
94
|
+
critical: number;
|
|
95
|
+
high: number;
|
|
96
|
+
moderate: number;
|
|
97
|
+
low: number;
|
|
98
|
+
advisories: NpmAdvisory[];
|
|
99
|
+
}
|
|
100
|
+
export interface LicenseCompatibility {
|
|
101
|
+
compatible: boolean;
|
|
102
|
+
license: string | null;
|
|
103
|
+
targetLicense: string;
|
|
104
|
+
reason: string;
|
|
105
|
+
}
|
|
106
|
+
/** Score breakdown */
|
|
107
|
+
export interface ScoreResult {
|
|
108
|
+
name: string;
|
|
109
|
+
total: number;
|
|
110
|
+
breakdown: {
|
|
111
|
+
security: number;
|
|
112
|
+
maintenance: number;
|
|
113
|
+
popularity: number;
|
|
114
|
+
license: number;
|
|
115
|
+
dependencies: number;
|
|
116
|
+
};
|
|
117
|
+
warnings: string[];
|
|
118
|
+
}
|
|
119
|
+
/** Weight configuration for scoring */
|
|
120
|
+
export interface ScoreWeights {
|
|
121
|
+
security: number;
|
|
122
|
+
maintenance: number;
|
|
123
|
+
popularity: number;
|
|
124
|
+
license: number;
|
|
125
|
+
dependencies: number;
|
|
126
|
+
}
|
|
127
|
+
/** Search result entry */
|
|
128
|
+
export interface SearchEntry {
|
|
129
|
+
name: string;
|
|
130
|
+
version: string;
|
|
131
|
+
description: string;
|
|
132
|
+
score: number;
|
|
133
|
+
keywords: string[];
|
|
134
|
+
date: string;
|
|
135
|
+
}
|
|
136
|
+
/** Search options */
|
|
137
|
+
export interface SearchOptions {
|
|
138
|
+
limit?: number;
|
|
139
|
+
targetLicense?: string;
|
|
140
|
+
minScore?: number;
|
|
141
|
+
fetcher?: FetchFn;
|
|
142
|
+
}
|
|
143
|
+
/** Advisor recommendation */
|
|
144
|
+
export interface Recommendation {
|
|
145
|
+
intent: string;
|
|
146
|
+
action: 'install' | 'caution' | 'write-from-scratch';
|
|
147
|
+
package: string | null;
|
|
148
|
+
score: number | null;
|
|
149
|
+
alternatives: Array<{
|
|
150
|
+
name: string;
|
|
151
|
+
score: number;
|
|
152
|
+
}>;
|
|
153
|
+
reasoning: string;
|
|
154
|
+
warnings: string[];
|
|
155
|
+
}
|
|
156
|
+
/** Advisor options */
|
|
157
|
+
export interface AdvisorOptions {
|
|
158
|
+
threshold?: number;
|
|
159
|
+
targetLicense?: string;
|
|
160
|
+
limit?: number;
|
|
161
|
+
fetcher?: FetchFn;
|
|
162
|
+
}
|
|
163
|
+
/** Cache entry with TTL */
|
|
164
|
+
export interface CacheEntry<T> {
|
|
165
|
+
data: T;
|
|
166
|
+
expiresAt: number;
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "depguard.ai",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Audit npm packages for security, maintenance, licenses and dependencies. Recommends install or write-from-scratch.",
|
|
5
|
+
"author": "Jorge Morais",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"bin": {
|
|
11
|
+
"depguard": "./dist/cli.js",
|
|
12
|
+
"depguard-mcp": "./dist/mcp.js"
|
|
13
|
+
},
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"import": "./dist/index.js",
|
|
17
|
+
"types": "./dist/index.d.ts"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc",
|
|
25
|
+
"test": "node --import tsx --test tests/*.test.ts",
|
|
26
|
+
"lint": "eslint src/ tests/",
|
|
27
|
+
"audit:security": "npm audit --audit-level=high",
|
|
28
|
+
"check": "npm run build && npm run lint && npm test && npm run audit:security",
|
|
29
|
+
"prepublishOnly": "npm run check"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@eslint/js": "^9.39.4",
|
|
33
|
+
"@types/node": "^22.0.0",
|
|
34
|
+
"eslint": "^9.39.4",
|
|
35
|
+
"tsx": "^4.19.0",
|
|
36
|
+
"typescript": "^5.7.0",
|
|
37
|
+
"typescript-eslint": "^8.57.0"
|
|
38
|
+
},
|
|
39
|
+
"keywords": [
|
|
40
|
+
"npm",
|
|
41
|
+
"audit",
|
|
42
|
+
"security",
|
|
43
|
+
"license",
|
|
44
|
+
"dependency",
|
|
45
|
+
"package",
|
|
46
|
+
"vulnerability",
|
|
47
|
+
"maintenance",
|
|
48
|
+
"advisor"
|
|
49
|
+
],
|
|
50
|
+
"repository": {
|
|
51
|
+
"type": "git",
|
|
52
|
+
"url": "https://github.com/mopanc/depguard"
|
|
53
|
+
},
|
|
54
|
+
"engines": {
|
|
55
|
+
"node": ">=18"
|
|
56
|
+
}
|
|
57
|
+
}
|