supply-chain-guard 1.0.0 → 3.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/README.md +62 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.js +181 -5
- package/dist/cli.js.map +1 -1
- package/dist/dependency-confusion.d.ts +25 -0
- package/dist/dependency-confusion.d.ts.map +1 -0
- package/dist/dependency-confusion.js +496 -0
- package/dist/dependency-confusion.js.map +1 -0
- package/dist/github-actions-scanner.d.ts +14 -0
- package/dist/github-actions-scanner.d.ts.map +1 -0
- package/dist/github-actions-scanner.js +420 -0
- package/dist/github-actions-scanner.js.map +1 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/lockfile-checker.d.ts +16 -0
- package/dist/lockfile-checker.d.ts.map +1 -0
- package/dist/lockfile-checker.js +309 -0
- package/dist/lockfile-checker.js.map +1 -0
- package/dist/patterns.d.ts +18 -0
- package/dist/patterns.d.ts.map +1 -1
- package/dist/patterns.js +458 -1
- package/dist/patterns.js.map +1 -1
- package/dist/pypi-scanner.d.ts +26 -0
- package/dist/pypi-scanner.d.ts.map +1 -0
- package/dist/pypi-scanner.js +548 -0
- package/dist/pypi-scanner.js.map +1 -0
- package/dist/reporter.d.ts +2 -2
- package/dist/reporter.d.ts.map +1 -1
- package/dist/reporter.js +76 -1
- package/dist/reporter.js.map +1 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +253 -1
- package/dist/scanner.js.map +1 -1
- package/dist/solana-monitor.d.ts +28 -2
- package/dist/solana-monitor.d.ts.map +1 -1
- package/dist/solana-monitor.js +171 -0
- package/dist/solana-monitor.js.map +1 -1
- package/dist/types.d.ts +20 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/vscode-scanner.d.ts +21 -0
- package/dist/vscode-scanner.d.ts.map +1 -0
- package/dist/vscode-scanner.js +585 -0
- package/dist/vscode-scanner.js.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
# 🛡️ supply-chain-guard
|
|
2
2
|
|
|
3
|
-
Open-source supply-chain security scanner for npm, PyPI,
|
|
3
|
+
Open-source supply-chain security scanner for npm, PyPI, VS Code extensions, GitHub Actions workflows and Solana C2. Detects [GlassWorm](https://www.reversinglabs.com/blog/glassworm-backdoor-campaign-npm-vscode) and similar malware campaigns.
|
|
4
4
|
|
|
5
5
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
6
6
|
[](https://nodejs.org)
|
|
7
|
+
[](https://www.npmjs.com/package/supply-chain-guard)
|
|
8
|
+
|
|
9
|
+
## Background
|
|
10
|
+
|
|
11
|
+
For a deep dive into how GlassWorm infiltrates the software supply chain and the detection techniques behind this tool, read the blog post: [How GlassWorm Gets In and How We Locked It Out](https://blog.elvatis.com/how-glassworm-gets-in-and-how-we-locked-it-out/).
|
|
7
12
|
|
|
8
13
|
## What It Does
|
|
9
14
|
|
|
@@ -19,6 +24,9 @@ supply-chain-guard scans code repositories and npm packages for known indicators
|
|
|
19
24
|
- 🟡 **Solana blockchain C2** (mainnet-beta, Helius RPC references used as command-and-control channels)
|
|
20
25
|
- 🟡 **Git history manipulation** (committer dates far newer than author dates)
|
|
21
26
|
- 🔵 **Typosquatting package names** (known malicious npm package patterns)
|
|
27
|
+
- 🟠 **PyPI malicious install hooks** (setup.py subprocess, base64 exec, download-and-run in cmdclass)
|
|
28
|
+
- 🟠 **GitHub Actions CI/CD attacks** (unpinned actions, secrets exfiltration, encoded payloads in run blocks)
|
|
29
|
+
- 🟡 **Solana C2 wallet watchlist** (persistent monitoring of known command-and-control wallets with webhook alerts)
|
|
22
30
|
|
|
23
31
|
## Installation
|
|
24
32
|
|
|
@@ -32,6 +40,41 @@ Or use directly with npx:
|
|
|
32
40
|
npx supply-chain-guard scan ./my-project
|
|
33
41
|
```
|
|
34
42
|
|
|
43
|
+
## Quickstart
|
|
44
|
+
|
|
45
|
+
**Scan a local directory:**
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
supply-chain-guard scan ./my-project
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Scan a GitHub repository:**
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
supply-chain-guard scan https://github.com/user/repo
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Scan an npm package (without installing it):**
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
supply-chain-guard npm suspicious-package-name
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Example output:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
Risk Score: 68/100 (CRITICAL)
|
|
67
|
+
Findings: 2 critical, 1 high, 1 medium
|
|
68
|
+
|
|
69
|
+
🔴 [CRITICAL] GlassWorm campaign marker variable detected
|
|
70
|
+
Rule: GLASSWORM_MARKER | File: src/index.js:42
|
|
71
|
+
|
|
72
|
+
🔴 [CRITICAL] Base64-encoded eval detected
|
|
73
|
+
Rule: EVAL_ATOB | File: src/loader.js:15
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
See the full [Example Output](#example-output) section below for a complete scan report.
|
|
77
|
+
|
|
35
78
|
## Usage
|
|
36
79
|
|
|
37
80
|
### Scan a Local Directory
|
|
@@ -250,6 +293,24 @@ supply-chain-guard was built to detect these specific attack patterns and make t
|
|
|
250
293
|
|
|
251
294
|
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. The most impactful contribution is adding new detection patterns for emerging threats.
|
|
252
295
|
|
|
296
|
+
|
|
297
|
+
## Changelog
|
|
298
|
+
|
|
299
|
+
### v3.0.0 (2026-03-26)
|
|
300
|
+
- **New:** PyPI scanner detects malicious `setup.py` install hooks (subprocess, base64 exec, cmdclass downloads)
|
|
301
|
+
- **New:** GitHub Actions workflow scanner detects CI/CD pipeline attacks (unpinned actions, secrets exfiltration, encoded payloads)
|
|
302
|
+
- **New:** SARIF 2.1.0 output format for GitHub Code Scanning integration (`--format sarif`)
|
|
303
|
+
- **New:** Solana C2 wallet watchlist with persistent monitoring and webhook alerts (`watchlist` commands)
|
|
304
|
+
- **New:** Blog post reference and improved quickstart guide
|
|
305
|
+
- **Docs:** Example GitHub Actions workflow for SARIF upload at `docs/github-actions-sarif.yml`
|
|
306
|
+
|
|
307
|
+
### v2.0.0
|
|
308
|
+
- Multi-platform scanner (npm, PyPI, VS Code)
|
|
309
|
+
- Dependency confusion detection
|
|
310
|
+
- Lockfile integrity checks
|
|
311
|
+
- Solana C2 monitoring
|
|
312
|
+
|
|
313
|
+
|
|
253
314
|
## License
|
|
254
315
|
|
|
255
316
|
[Apache-2.0](LICENSE) - Copyright 2026 Elvatis - Emre Kohler
|
package/dist/cli.d.ts
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* supply-chain-guard CLI
|
|
4
4
|
*
|
|
5
|
-
* Scan code repositories, npm packages,
|
|
6
|
-
* for supply-chain malware indicators.
|
|
5
|
+
* Scan code repositories, npm packages, PyPI packages, VS Code extensions,
|
|
6
|
+
* and project dependencies for supply-chain malware indicators.
|
|
7
7
|
*/
|
|
8
8
|
export {};
|
|
9
9
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.js
CHANGED
|
@@ -3,26 +3,29 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* supply-chain-guard CLI
|
|
5
5
|
*
|
|
6
|
-
* Scan code repositories, npm packages,
|
|
7
|
-
* for supply-chain malware indicators.
|
|
6
|
+
* Scan code repositories, npm packages, PyPI packages, VS Code extensions,
|
|
7
|
+
* and project dependencies for supply-chain malware indicators.
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
const commander_1 = require("commander");
|
|
11
11
|
const scanner_js_1 = require("./scanner.js");
|
|
12
12
|
const npm_scanner_js_1 = require("./npm-scanner.js");
|
|
13
|
+
const pypi_scanner_js_1 = require("./pypi-scanner.js");
|
|
14
|
+
const vscode_scanner_js_1 = require("./vscode-scanner.js");
|
|
15
|
+
const dependency_confusion_js_1 = require("./dependency-confusion.js");
|
|
13
16
|
const solana_monitor_js_1 = require("./solana-monitor.js");
|
|
14
17
|
const reporter_js_1 = require("./reporter.js");
|
|
15
18
|
const program = new commander_1.Command();
|
|
16
19
|
program
|
|
17
20
|
.name("supply-chain-guard")
|
|
18
|
-
.description("Open-source supply-chain security scanner. Detects GlassWorm and similar malware campaigns in npm packages, code repos,
|
|
21
|
+
.description("Open-source supply-chain security scanner. Detects GlassWorm and similar malware campaigns in npm packages, PyPI packages, code repos, VS Code extensions, and project dependencies.")
|
|
19
22
|
.version("1.0.0");
|
|
20
23
|
// ── scan command ────────────────────────────────────────────────────
|
|
21
24
|
program
|
|
22
25
|
.command("scan")
|
|
23
26
|
.description("Scan a local directory or GitHub repo for malware indicators")
|
|
24
27
|
.argument("<target>", "Local directory path or GitHub repo URL")
|
|
25
|
-
.option("-f, --format <format>", "Output format: text, json, markdown", "text")
|
|
28
|
+
.option("-f, --format <format>", "Output format: text, json, markdown, sarif", "text")
|
|
26
29
|
.option("-s, --min-severity <severity>", "Minimum severity to report: critical, high, medium, low, info")
|
|
27
30
|
.option("-e, --exclude <rules>", "Comma-separated list of rule IDs to exclude")
|
|
28
31
|
.option("-d, --depth <depth>", "Maximum directory depth", "20")
|
|
@@ -56,7 +59,7 @@ program
|
|
|
56
59
|
.command("npm")
|
|
57
60
|
.description("Scan an npm package for malware indicators (downloads without installing)")
|
|
58
61
|
.argument("<package>", "npm package name (e.g., express, lodash)")
|
|
59
|
-
.option("-f, --format <format>", "Output format: text, json, markdown", "text")
|
|
62
|
+
.option("-f, --format <format>", "Output format: text, json, markdown, sarif", "text")
|
|
60
63
|
.option("-s, --min-severity <severity>", "Minimum severity to report")
|
|
61
64
|
.action(async (packageName, opts) => {
|
|
62
65
|
try {
|
|
@@ -79,6 +82,92 @@ program
|
|
|
79
82
|
process.exit(1);
|
|
80
83
|
}
|
|
81
84
|
});
|
|
85
|
+
// ── pypi command ────────────────────────────────────────────────────
|
|
86
|
+
program
|
|
87
|
+
.command("pypi")
|
|
88
|
+
.description("Scan a PyPI package for malware indicators (downloads without installing)")
|
|
89
|
+
.argument("<package>", "PyPI package name (e.g., requests, flask)")
|
|
90
|
+
.option("-f, --format <format>", "Output format: text, json, markdown, sarif", "text")
|
|
91
|
+
.option("-s, --min-severity <severity>", "Minimum severity to report")
|
|
92
|
+
.action(async (packageName, opts) => {
|
|
93
|
+
try {
|
|
94
|
+
const report = await (0, pypi_scanner_js_1.scanPypiPackage)(packageName, {
|
|
95
|
+
target: packageName,
|
|
96
|
+
format: opts.format,
|
|
97
|
+
minSeverity: opts.minSeverity,
|
|
98
|
+
});
|
|
99
|
+
console.log((0, reporter_js_1.formatReport)(report, opts.format));
|
|
100
|
+
if (report.summary.critical > 0) {
|
|
101
|
+
process.exit(2);
|
|
102
|
+
}
|
|
103
|
+
if (report.summary.high > 0) {
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
109
|
+
console.error(`\n Error: ${message}\n`);
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
// ── vscode command ──────────────────────────────────────────────────
|
|
114
|
+
program
|
|
115
|
+
.command("vscode")
|
|
116
|
+
.description("Scan a VS Code extension (.vsix file or marketplace ID) for malware indicators")
|
|
117
|
+
.argument("<target>", "Path to .vsix file or marketplace extension ID (e.g., publisher.extension-name)")
|
|
118
|
+
.option("-f, --format <format>", "Output format: text, json, markdown, sarif", "text")
|
|
119
|
+
.option("-s, --min-severity <severity>", "Minimum severity to report")
|
|
120
|
+
.action(async (target, opts) => {
|
|
121
|
+
try {
|
|
122
|
+
const report = await (0, vscode_scanner_js_1.scanVscodeExtension)({
|
|
123
|
+
target,
|
|
124
|
+
format: opts.format,
|
|
125
|
+
minSeverity: opts.minSeverity,
|
|
126
|
+
});
|
|
127
|
+
console.log((0, reporter_js_1.formatReport)(report, opts.format));
|
|
128
|
+
if (report.summary.critical > 0) {
|
|
129
|
+
process.exit(2);
|
|
130
|
+
}
|
|
131
|
+
if (report.summary.high > 0) {
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
137
|
+
console.error(`\n Error: ${message}\n`);
|
|
138
|
+
process.exit(1);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
// ── confusion command ───────────────────────────────────────────────
|
|
142
|
+
program
|
|
143
|
+
.command("confusion")
|
|
144
|
+
.description("Detect dependency confusion risks in a project's package.json")
|
|
145
|
+
.argument("<target>", "Path to project directory or package.json file")
|
|
146
|
+
.option("-f, --format <format>", "Output format: text, json, markdown, sarif", "text")
|
|
147
|
+
.option("-s, --min-severity <severity>", "Minimum severity to report")
|
|
148
|
+
.option("--no-dev", "Exclude devDependencies from the check")
|
|
149
|
+
.action(async (target, opts) => {
|
|
150
|
+
try {
|
|
151
|
+
const report = await (0, dependency_confusion_js_1.scanDependencyConfusion)({
|
|
152
|
+
target,
|
|
153
|
+
format: opts.format,
|
|
154
|
+
minSeverity: opts.minSeverity,
|
|
155
|
+
includeDevDeps: opts.dev,
|
|
156
|
+
});
|
|
157
|
+
console.log((0, reporter_js_1.formatReport)(report, opts.format));
|
|
158
|
+
if (report.summary.critical > 0) {
|
|
159
|
+
process.exit(2);
|
|
160
|
+
}
|
|
161
|
+
if (report.summary.high > 0) {
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
167
|
+
console.error(`\n Error: ${message}\n`);
|
|
168
|
+
process.exit(1);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
82
171
|
// ── monitor command ─────────────────────────────────────────────────
|
|
83
172
|
program
|
|
84
173
|
.command("monitor")
|
|
@@ -135,5 +224,92 @@ program
|
|
|
135
224
|
process.exit(1);
|
|
136
225
|
}
|
|
137
226
|
});
|
|
227
|
+
// -- watchlist command -------------------------------------------------------
|
|
228
|
+
const watchlist = program
|
|
229
|
+
.command("watchlist")
|
|
230
|
+
.description("Manage a persistent Solana C2 wallet watchlist");
|
|
231
|
+
watchlist
|
|
232
|
+
.command("add")
|
|
233
|
+
.description("Add a Solana wallet address to the watchlist")
|
|
234
|
+
.argument("<address>", "Solana wallet address")
|
|
235
|
+
.requiredOption("-n, --name <name>", "Human-readable label for this wallet")
|
|
236
|
+
.action((address, opts) => {
|
|
237
|
+
try {
|
|
238
|
+
const entry = (0, solana_monitor_js_1.addToWatchlist)(address, opts.name);
|
|
239
|
+
console.log(`\n Added to watchlist:`);
|
|
240
|
+
console.log(` Address: ${entry.address}`);
|
|
241
|
+
console.log(` Name: ${entry.name}`);
|
|
242
|
+
console.log(` Added: ${entry.addedAt}\n`);
|
|
243
|
+
}
|
|
244
|
+
catch (err) {
|
|
245
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
246
|
+
console.error(`\n Error: ${message}\n`);
|
|
247
|
+
process.exit(1);
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
watchlist
|
|
251
|
+
.command("list")
|
|
252
|
+
.description("List all wallets on the watchlist")
|
|
253
|
+
.action(() => {
|
|
254
|
+
const entries = (0, solana_monitor_js_1.listWatchlist)();
|
|
255
|
+
if (entries.length === 0) {
|
|
256
|
+
console.log("\n Watchlist is empty.\n");
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
console.log(`\n Watchlist (${entries.length} wallet(s)):\n`);
|
|
260
|
+
for (const entry of entries) {
|
|
261
|
+
console.log(` Name: ${entry.name}`);
|
|
262
|
+
console.log(` Address: ${entry.address}`);
|
|
263
|
+
console.log(` Added: ${entry.addedAt}`);
|
|
264
|
+
console.log("");
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
watchlist
|
|
268
|
+
.command("remove")
|
|
269
|
+
.description("Remove a wallet from the watchlist")
|
|
270
|
+
.argument("<address>", "Solana wallet address to remove")
|
|
271
|
+
.action((address) => {
|
|
272
|
+
try {
|
|
273
|
+
(0, solana_monitor_js_1.removeFromWatchlist)(address);
|
|
274
|
+
console.log(`\n Removed ${address} from watchlist.\n`);
|
|
275
|
+
}
|
|
276
|
+
catch (err) {
|
|
277
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
278
|
+
console.error(`\n Error: ${message}\n`);
|
|
279
|
+
process.exit(1);
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
watchlist
|
|
283
|
+
.command("monitor")
|
|
284
|
+
.description("Poll all watched wallets for new memo transactions")
|
|
285
|
+
.option("-i, --interval <seconds>", "Polling interval in seconds", "30")
|
|
286
|
+
.option("-l, --limit <count>", "Max transactions per poll per wallet", "20")
|
|
287
|
+
.option("-w, --webhook <url>", "Webhook URL to POST alerts to")
|
|
288
|
+
.action(async (opts) => {
|
|
289
|
+
try {
|
|
290
|
+
await (0, solana_monitor_js_1.monitorWatchlist)({
|
|
291
|
+
interval: parseInt(opts.interval, 10),
|
|
292
|
+
limit: parseInt(opts.limit, 10),
|
|
293
|
+
webhookUrl: opts.webhook,
|
|
294
|
+
}, (alert) => {
|
|
295
|
+
console.log("");
|
|
296
|
+
console.log(" ====================================");
|
|
297
|
+
console.log(" !! WATCHLIST ALERT !!");
|
|
298
|
+
console.log(" ====================================");
|
|
299
|
+
console.log(` Name: ${alert.name}`);
|
|
300
|
+
console.log(` Address: ${alert.address}`);
|
|
301
|
+
console.log(` TxID: ${alert.txid}`);
|
|
302
|
+
console.log(` Memo: ${alert.memo}`);
|
|
303
|
+
console.log(` Timestamp: ${alert.timestamp}`);
|
|
304
|
+
console.log(" ====================================");
|
|
305
|
+
console.log("");
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
catch (err) {
|
|
309
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
310
|
+
console.error(`\n Error: ${message}\n`);
|
|
311
|
+
process.exit(1);
|
|
312
|
+
}
|
|
313
|
+
});
|
|
138
314
|
program.parse();
|
|
139
315
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Confusion Detector
|
|
3
|
+
*
|
|
4
|
+
* Analyzes a project's package.json to detect potential dependency confusion attacks.
|
|
5
|
+
* Checks if dependencies exist on the public npm registry and flags suspicious ones:
|
|
6
|
+
* - Unscoped packages that look like internal names
|
|
7
|
+
* - Packages with no README, very recent publish, or low download counts
|
|
8
|
+
* - Packages where the public version was published AFTER the project started using it
|
|
9
|
+
*/
|
|
10
|
+
import type { ScanReport, Severity } from "./types.js";
|
|
11
|
+
export interface ConfusionScanOptions {
|
|
12
|
+
/** Path to the project directory (containing package.json) */
|
|
13
|
+
target: string;
|
|
14
|
+
/** Output format */
|
|
15
|
+
format: "text" | "json" | "markdown" | "sarif";
|
|
16
|
+
/** Minimum severity to report */
|
|
17
|
+
minSeverity?: Severity;
|
|
18
|
+
/** Include devDependencies in the check */
|
|
19
|
+
includeDevDeps?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Scan a project for dependency confusion risks.
|
|
23
|
+
*/
|
|
24
|
+
export declare function scanDependencyConfusion(options: ConfusionScanOptions): Promise<ScanReport>;
|
|
25
|
+
//# sourceMappingURL=dependency-confusion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-confusion.d.ts","sourceRoot":"","sources":["../src/dependency-confusion.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAW,UAAU,EAAe,QAAQ,EAAE,MAAM,YAAY,CAAC;AAwD7E,MAAM,WAAW,oBAAoB;IACnC,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;IAC/C,iCAAiC;IACjC,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,UAAU,CAAC,CA6DrB"}
|