mcp-filter 0.1.0 → 0.2.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 +61 -13
- package/dist/cli.d.ts +5 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -6
- package/dist/cli.js.map +1 -1
- package/dist/filter.d.ts +4 -3
- package/dist/filter.d.ts.map +1 -1
- package/dist/filter.js +15 -16
- package/dist/filter.js.map +1 -1
- package/dist/index.js +8 -7
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -36,12 +36,14 @@ npx mcp-filter --exclude "debug*" -- node my-mcp-server.js
|
|
|
36
36
|
|
|
37
37
|
## Options
|
|
38
38
|
|
|
39
|
-
- `--exclude <pattern>` - Exclude tools/resources/prompts matching this pattern
|
|
40
|
-
- `--include <pattern>` - Include ONLY tools/resources/prompts matching this pattern (
|
|
39
|
+
- `--exclude <pattern>` - Exclude tools/resources/prompts matching this pattern
|
|
40
|
+
- `--include <pattern>` - Include ONLY tools/resources/prompts matching this pattern (whitelist mode)
|
|
41
41
|
- `--` - Separates filter options from upstream server command
|
|
42
42
|
|
|
43
43
|
Both options can be specified multiple times and combined together.
|
|
44
44
|
|
|
45
|
+
**Filtering style:** rsync-style evaluation where patterns are evaluated in the order specified, and first match wins.
|
|
46
|
+
|
|
45
47
|
## Filtering Modes
|
|
46
48
|
|
|
47
49
|
### Exclude Mode (--exclude only)
|
|
@@ -64,30 +66,72 @@ npx mcp-filter --include "browser_navigate" --include "browser_screenshot" -- np
|
|
|
64
66
|
|
|
65
67
|
### Combination Mode (--include + --exclude)
|
|
66
68
|
|
|
67
|
-
|
|
69
|
+
**Rsync-style filtering**: patterns evaluated in order, first match wins.
|
|
68
70
|
|
|
69
71
|
```bash
|
|
70
|
-
#
|
|
71
|
-
npx mcp-filter --include "browser_*" --exclude "browser_close" --
|
|
72
|
+
# Example 1: Include first, then exclude
|
|
73
|
+
npx mcp-filter --include "browser_*" --exclude "browser_close" -- npx @playwright/mcp
|
|
74
|
+
# Result: All browser_* tools are INCLUDED (browser_* matched first)
|
|
75
|
+
# browser_close is also included because it matches browser_* first
|
|
76
|
+
|
|
77
|
+
# Example 2: Exclude first, then include (different result!)
|
|
78
|
+
npx mcp-filter --exclude "browser_close" --include "browser_*" -- npx @playwright/mcp
|
|
79
|
+
# Result: browser_close is EXCLUDED (matched exclude first)
|
|
80
|
+
# Other browser_* tools are included
|
|
81
|
+
|
|
82
|
+
# Example 3: More specific patterns first
|
|
83
|
+
npx mcp-filter --exclude "browser_close" --exclude "browser_evaluate" --include "browser_*" -- npx @playwright/mcp
|
|
84
|
+
# Result: browser_close and browser_evaluate excluded (matched first)
|
|
85
|
+
# All other browser_* tools included
|
|
72
86
|
```
|
|
73
87
|
|
|
74
|
-
**
|
|
75
|
-
|
|
76
|
-
When a tool matches both `--include` and `--exclude`, it will be **excluded** (rsync-style behavior).
|
|
88
|
+
**Key principle**: Order matters! The first pattern that matches determines if the item is included or excluded.
|
|
77
89
|
|
|
78
90
|
## Pattern Examples
|
|
79
91
|
|
|
92
|
+
Patterns use glob syntax (via minimatch):
|
|
93
|
+
|
|
80
94
|
- `playwright*` - Match all items starting with "playwright"
|
|
81
95
|
- `*_admin` - Match all items ending with "\_admin"
|
|
82
96
|
- `test_*_debug` - Match items with pattern in middle
|
|
83
97
|
- `exact_name` - Match exact name
|
|
84
98
|
- `browser_*` - Match all browser-related tools
|
|
99
|
+
- `*` - Match everything
|
|
100
|
+
|
|
101
|
+
## Rsync-Style Filtering
|
|
102
|
+
|
|
103
|
+
mcp-filter uses rsync-style pattern evaluation:
|
|
104
|
+
|
|
105
|
+
1. **Order matters**: Patterns are evaluated in the order you specify them
|
|
106
|
+
2. **First match wins**: Once a pattern matches, that determines the outcome
|
|
107
|
+
3. **Default behavior**:
|
|
108
|
+
- If no patterns specified: allow everything (passthrough)
|
|
109
|
+
- If only `--include`: items not matching any include are excluded (whitelist mode)
|
|
110
|
+
- If only `--exclude`: items not matching any exclude are included
|
|
111
|
+
- If mixed: items not matching any pattern use whitelist mode if includes exist
|
|
112
|
+
|
|
113
|
+
**Example workflow**:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# Put more specific patterns first
|
|
117
|
+
npx mcp-filter \
|
|
118
|
+
--exclude "browser_close" \
|
|
119
|
+
--exclude "browser_evaluate" \
|
|
120
|
+
--include "browser_*" \
|
|
121
|
+
-- npx @playwright/mcp
|
|
122
|
+
|
|
123
|
+
# This works because:
|
|
124
|
+
# 1. browser_close matches --exclude "browser_close" first → excluded
|
|
125
|
+
# 2. browser_evaluate matches --exclude "browser_evaluate" first → excluded
|
|
126
|
+
# 3. browser_navigate matches --include "browser_*" → included
|
|
127
|
+
# 4. other_tool doesn't match any pattern, but --include exists → excluded (whitelist mode)
|
|
128
|
+
```
|
|
85
129
|
|
|
86
130
|
## Using with Cursor IDE
|
|
87
131
|
|
|
88
132
|
Add to your `.cursor/mcp.json` or `~/.cursor/mcp.json`:
|
|
89
133
|
|
|
90
|
-
### Example 1: Exclude dangerous tools
|
|
134
|
+
### Example 1: Exclude specific dangerous tools
|
|
91
135
|
|
|
92
136
|
```json
|
|
93
137
|
{
|
|
@@ -133,7 +177,7 @@ Add to your `.cursor/mcp.json` or `~/.cursor/mcp.json`:
|
|
|
133
177
|
}
|
|
134
178
|
```
|
|
135
179
|
|
|
136
|
-
### Example 3: Include category with exceptions
|
|
180
|
+
### Example 3: Include category with exceptions (rsync-style)
|
|
137
181
|
|
|
138
182
|
```json
|
|
139
183
|
{
|
|
@@ -142,10 +186,12 @@ Add to your `.cursor/mcp.json` or `~/.cursor/mcp.json`:
|
|
|
142
186
|
"command": "npx",
|
|
143
187
|
"args": [
|
|
144
188
|
"mcp-filter",
|
|
145
|
-
"--include",
|
|
146
|
-
"browser_*",
|
|
147
189
|
"--exclude",
|
|
148
190
|
"browser_close",
|
|
191
|
+
"--exclude",
|
|
192
|
+
"browser_evaluate",
|
|
193
|
+
"--include",
|
|
194
|
+
"browser_*",
|
|
149
195
|
"--",
|
|
150
196
|
"npx",
|
|
151
197
|
"@playwright/mcp@latest"
|
|
@@ -155,6 +201,8 @@ Add to your `.cursor/mcp.json` or `~/.cursor/mcp.json`:
|
|
|
155
201
|
}
|
|
156
202
|
```
|
|
157
203
|
|
|
204
|
+
Note: Exclude patterns come first to match before the broader include pattern.
|
|
205
|
+
|
|
158
206
|
After adding the configuration, restart Cursor completely to apply the changes.
|
|
159
207
|
|
|
160
208
|
## How It Works
|
|
@@ -180,7 +228,7 @@ pnpm run build
|
|
|
180
228
|
pnpm test
|
|
181
229
|
|
|
182
230
|
# Test locally
|
|
183
|
-
./dist/index.js --
|
|
231
|
+
./dist/index.js --exclude "playwright*" -- npx tsx test-server.ts
|
|
184
232
|
```
|
|
185
233
|
|
|
186
234
|
## Links
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
export interface FilterPattern {
|
|
2
|
+
type: "include" | "exclude";
|
|
3
|
+
pattern: string;
|
|
4
|
+
}
|
|
1
5
|
export interface FilterConfig {
|
|
2
|
-
|
|
3
|
-
includePatterns: string[];
|
|
6
|
+
patterns: FilterPattern[];
|
|
4
7
|
upstreamCommand: string[];
|
|
5
8
|
}
|
|
6
9
|
export declare function parseArgs(args: string[]): FilterConfig;
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAkDtD"}
|
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export function parseArgs(args) {
|
|
2
|
-
const
|
|
3
|
-
const includePatterns = [];
|
|
2
|
+
const patterns = [];
|
|
4
3
|
const upstreamCommand = [];
|
|
5
4
|
let inUpstreamCommand = false;
|
|
6
5
|
for (let i = 0; i < args.length; i++) {
|
|
@@ -18,7 +17,7 @@ export function parseArgs(args) {
|
|
|
18
17
|
if (!pattern) {
|
|
19
18
|
throw new Error("--exclude requires a pattern argument");
|
|
20
19
|
}
|
|
21
|
-
|
|
20
|
+
patterns.push({ type: "exclude", pattern });
|
|
22
21
|
continue;
|
|
23
22
|
}
|
|
24
23
|
if (arg === "--include") {
|
|
@@ -26,7 +25,7 @@ export function parseArgs(args) {
|
|
|
26
25
|
if (!pattern) {
|
|
27
26
|
throw new Error("--include requires a pattern argument");
|
|
28
27
|
}
|
|
29
|
-
|
|
28
|
+
patterns.push({ type: "include", pattern });
|
|
30
29
|
continue;
|
|
31
30
|
}
|
|
32
31
|
throw new Error(`Unknown argument: ${arg}`);
|
|
@@ -35,8 +34,7 @@ export function parseArgs(args) {
|
|
|
35
34
|
throw new Error("No upstream command specified. Use -- to separate filter args from upstream command");
|
|
36
35
|
}
|
|
37
36
|
return {
|
|
38
|
-
|
|
39
|
-
includePatterns,
|
|
37
|
+
patterns,
|
|
40
38
|
upstreamCommand,
|
|
41
39
|
};
|
|
42
40
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,iBAAiB,EAAE,CAAC;YACtB,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1B,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,iBAAiB,GAAG,IAAI,CAAC;YACzB,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,SAAS;QACX,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ;QACR,eAAe;KAChB,CAAC;AACJ,CAAC"}
|
package/dist/filter.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { FilterPattern } from "./cli.js";
|
|
1
2
|
export declare class Filter {
|
|
2
|
-
private
|
|
3
|
-
private
|
|
4
|
-
constructor(
|
|
3
|
+
private patterns;
|
|
4
|
+
private hasIncludePatterns;
|
|
5
|
+
constructor(patterns: FilterPattern[]);
|
|
5
6
|
shouldExclude(name: string): boolean;
|
|
6
7
|
filterList<T extends {
|
|
7
8
|
name: string;
|
package/dist/filter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,qBAAa,MAAM;IAGL,OAAO,CAAC,QAAQ;IAF5B,OAAO,CAAC,kBAAkB,CAAU;gBAEhB,QAAQ,EAAE,aAAa,EAAE;IAI7C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAepC,UAAU,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;CAGxD"}
|
package/dist/filter.js
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
import { minimatch } from "minimatch";
|
|
2
2
|
export class Filter {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
constructor(
|
|
6
|
-
this.
|
|
7
|
-
this.
|
|
3
|
+
patterns;
|
|
4
|
+
hasIncludePatterns;
|
|
5
|
+
constructor(patterns) {
|
|
6
|
+
this.patterns = patterns;
|
|
7
|
+
this.hasIncludePatterns = patterns.some((p) => p.type === "include");
|
|
8
8
|
}
|
|
9
9
|
shouldExclude(name) {
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return
|
|
10
|
+
// Evaluate patterns in order - first match wins (rsync-style)
|
|
11
|
+
for (const pattern of this.patterns) {
|
|
12
|
+
if (minimatch(name, pattern.pattern)) {
|
|
13
|
+
// First pattern that matches determines the outcome
|
|
14
|
+
return pattern.type === "exclude";
|
|
15
|
+
}
|
|
15
16
|
}
|
|
16
|
-
//
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
// Step 3: Default allow
|
|
21
|
-
return false;
|
|
17
|
+
// No pattern matched - determine default behavior
|
|
18
|
+
// If there are include patterns, default is exclude (whitelist mode)
|
|
19
|
+
// Otherwise, default is include (allow all)
|
|
20
|
+
return this.hasIncludePatterns;
|
|
22
21
|
}
|
|
23
22
|
filterList(items) {
|
|
24
23
|
return items.filter((item) => !this.shouldExclude(item.name));
|
package/dist/filter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,MAAM,OAAO,MAAM;IAGG;IAFZ,kBAAkB,CAAU;IAEpC,YAAoB,QAAyB;QAAzB,aAAQ,GAAR,QAAQ,CAAiB;QAC3C,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IACvE,CAAC;IAED,aAAa,CAAC,IAAY;QACxB,8DAA8D;QAC9D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,oDAAoD;gBACpD,OAAO,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC;YACpC,CAAC;QACH,CAAC;QAED,kDAAkD;QAClD,qEAAqE;QACrE,4CAA4C;QAC5C,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,UAAU,CAA6B,KAAU;QAC/C,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;CACF"}
|
package/dist/index.js
CHANGED
|
@@ -21,20 +21,21 @@ async function main() {
|
|
|
21
21
|
console.error(' mcp-filter --include "browser_*" --exclude "browser_close" -- npx @playwright/mcp');
|
|
22
22
|
process.exit(1);
|
|
23
23
|
}
|
|
24
|
-
console.error(`Starting MCP filter with ${config.
|
|
25
|
-
config.
|
|
26
|
-
config.
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
console.error(`Starting MCP filter with ${config.patterns.length} pattern(s)`);
|
|
25
|
+
config.patterns.forEach((p) => console.error(` ${p.type === "include" ? "Include" : "Exclude"}: ${p.pattern}`));
|
|
26
|
+
const hasInclude = config.patterns.some((p) => p.type === "include");
|
|
27
|
+
const hasExclude = config.patterns.some((p) => p.type === "exclude");
|
|
28
|
+
if (hasInclude && hasExclude) {
|
|
29
|
+
console.error("Note: Using rsync-style filtering - patterns evaluated in order, first match wins.");
|
|
29
30
|
}
|
|
30
31
|
// Spawn upstream server
|
|
31
32
|
const upstreamProcess = spawnUpstream(config.upstreamCommand);
|
|
32
33
|
// Create filter
|
|
33
|
-
const filter = new Filter(config.
|
|
34
|
+
const filter = new Filter(config.patterns);
|
|
34
35
|
// Create proxy server
|
|
35
36
|
const proxy = new ProxyServer({
|
|
36
37
|
name: "mcp-filter",
|
|
37
|
-
version: "0.
|
|
38
|
+
version: "0.2.0",
|
|
38
39
|
}, filter);
|
|
39
40
|
// Connect client to upstream server via subprocess stdio
|
|
40
41
|
const clientTransport = new StdioClientTransport({
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,KAAK,EAAkC,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,KAAK,UAAU,IAAI;IACjB,+BAA+B;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAW,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,KAAK,CACX,qGAAqG,CACtG,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAK,CACX,6DAA6D,CAC9D,CAAC;QACF,OAAO,CAAC,KAAK,CACX,iGAAiG,CAClG,CAAC;QACF,OAAO,CAAC,KAAK,CACX,qFAAqF,CACtF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,KAAK,CACX,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|