@rekog/mcp-nest 1.0.19 → 1.1.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 +97 -6
- package/coverage/clover.xml +111 -84
- package/coverage/coverage-final.json +6 -6
- package/coverage/lcov-report/index.html +35 -35
- package/coverage/lcov.info +193 -140
- package/dist/controllers/sse.controller.factory.d.ts +6 -4
- package/dist/controllers/sse.controller.factory.d.ts.map +1 -1
- package/dist/controllers/sse.controller.factory.js +21 -10
- package/dist/controllers/sse.controller.factory.js.map +1 -1
- package/dist/decorators/tool.decorator.d.ts +6 -1
- package/dist/decorators/tool.decorator.d.ts.map +1 -1
- package/dist/decorators/tool.decorator.js +6 -2
- package/dist/decorators/tool.decorator.js.map +1 -1
- package/dist/mcp.module.d.ts.map +1 -1
- package/dist/mcp.module.js +6 -8
- package/dist/mcp.module.js.map +1 -1
- package/dist/services/mcp-tools.discovery.d.ts +8 -3
- package/dist/services/mcp-tools.discovery.d.ts.map +1 -1
- package/dist/services/mcp-tools.discovery.js +50 -7
- package/dist/services/mcp-tools.discovery.js.map +1 -1
- package/package.json +1 -1
- package/tests/mcp.e2e.spec.ts +76 -2
- package/tsconfig.tsbuildinfo +1 -1
package/README.md
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
# NestJS MCP Server Module
|
|
2
2
|
|
|
3
|
-
A NestJS module for exposing your services as an MCP (Model Context Protocol) server with Server-Sent Events (SSE) transport. This package simplifies exposing tools that can
|
|
3
|
+
A NestJS module for exposing your services as an MCP (Model Context Protocol) server with Server-Sent Events (SSE) transport. This package simplifies exposing tools that clients can discover and execute via SSE.
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
7
|
- **SSE Transport**: Built-in `/sse` endpoint for streaming and `/messages` for handling tool execution
|
|
8
8
|
- **Tool Discovery**: Automatically discover and register tools using decorators
|
|
9
|
+
- **Tool Request Validation**: Define Zod schemas to validate tool requests.
|
|
10
|
+
- **Progress Notifications**: Send continuous progress updates from tools to clients.
|
|
9
11
|
|
|
10
12
|
## Installation
|
|
11
13
|
|
|
@@ -20,7 +22,7 @@ npm install @rekog/mcp-nest reflect-metadata @modelcontextprotocol/sdk zod
|
|
|
20
22
|
```typescript
|
|
21
23
|
// app.module.ts
|
|
22
24
|
import { Module } from '@nestjs/common';
|
|
23
|
-
import { McpModule } from '@
|
|
25
|
+
import { McpModule } from '@rekog/mcp-nest';
|
|
24
26
|
import { GreetingTool } from './greeting.tool';
|
|
25
27
|
|
|
26
28
|
@Module({
|
|
@@ -28,7 +30,7 @@ import { GreetingTool } from './greeting.tool';
|
|
|
28
30
|
McpModule.forRoot({
|
|
29
31
|
name: 'my-mcp-server',
|
|
30
32
|
version: '1.0.0',
|
|
31
|
-
capabilities: {
|
|
33
|
+
capabilities: {}
|
|
32
34
|
})
|
|
33
35
|
],
|
|
34
36
|
providers: [GreetingTool]
|
|
@@ -41,19 +43,58 @@ export class AppModule {}
|
|
|
41
43
|
```typescript
|
|
42
44
|
// greeting.tool.ts
|
|
43
45
|
import { Injectable } from '@nestjs/common';
|
|
44
|
-
import { Tool } from '@
|
|
46
|
+
import { Tool } from '@rekog/mcp-nest';
|
|
45
47
|
import { z } from 'zod';
|
|
48
|
+
import { RequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
49
|
+
|
|
50
|
+
const ProgressRequestSchema = RequestSchema.extend({
|
|
51
|
+
method: z.literal('progress/request'),
|
|
52
|
+
params: z.object({
|
|
53
|
+
_meta: z.object({
|
|
54
|
+
progressToken: z.union([z.string(), z.number().int()]).optional(),
|
|
55
|
+
}).optional(),
|
|
56
|
+
}).optional(),
|
|
57
|
+
});
|
|
46
58
|
|
|
47
59
|
@Injectable()
|
|
48
60
|
export class GreetingTool {
|
|
49
61
|
@Tool('hello', 'Returns greeting', {
|
|
50
|
-
|
|
62
|
+
schema: {
|
|
63
|
+
name: z.string().default('World')
|
|
64
|
+
}
|
|
51
65
|
})
|
|
52
66
|
greet({ name }: { name: string }) {
|
|
53
67
|
return {
|
|
54
68
|
content: [{ type: 'text', text: `Hello ${name}!` }]
|
|
55
69
|
};
|
|
56
70
|
}
|
|
71
|
+
|
|
72
|
+
@Tool('progress-test', 'A tool that simulates progress', {
|
|
73
|
+
requestSchema: ProgressRequestSchema,
|
|
74
|
+
})
|
|
75
|
+
async progressTest(params, context) {
|
|
76
|
+
const progressToken = params._meta?.progressToken;
|
|
77
|
+
|
|
78
|
+
for (let i = 0; i <= 5; i++) {
|
|
79
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
80
|
+
|
|
81
|
+
if (progressToken) {
|
|
82
|
+
await context.sendNotification({
|
|
83
|
+
method: 'notifications/progress',
|
|
84
|
+
params: {
|
|
85
|
+
progressToken,
|
|
86
|
+
progress: i,
|
|
87
|
+
total: 5,
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
console.log(`Sent progress: \${i}/5`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
message: 'Progress test completed!',
|
|
96
|
+
};
|
|
97
|
+
}
|
|
57
98
|
}
|
|
58
99
|
```
|
|
59
100
|
|
|
@@ -84,7 +125,7 @@ const client = new Client(
|
|
|
84
125
|
);
|
|
85
126
|
|
|
86
127
|
await client.connect(
|
|
87
|
-
new SSEClientTransport(new URL('http://localhost:3000/sse'))
|
|
128
|
+
new SSEClientTransport(new URL('<http://localhost:3000/sse>'))
|
|
88
129
|
);
|
|
89
130
|
|
|
90
131
|
// Execute tool
|
|
@@ -92,6 +133,24 @@ const result = await client.callTool({
|
|
|
92
133
|
name: 'hello',
|
|
93
134
|
arguments: { name: 'World' }
|
|
94
135
|
});
|
|
136
|
+
|
|
137
|
+
// Execute tool with request schema and receive progress notifications
|
|
138
|
+
const progressResult = await client.request(
|
|
139
|
+
{
|
|
140
|
+
method: 'progress/request',
|
|
141
|
+
params: {
|
|
142
|
+
_meta: {
|
|
143
|
+
progressToken: 'test-token',
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
z.object({ message: z.string() }),
|
|
148
|
+
{
|
|
149
|
+
onprogress: (progress) => {
|
|
150
|
+
console.log('Received progress:', progress);
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
);
|
|
95
154
|
```
|
|
96
155
|
|
|
97
156
|
## API Endpoints
|
|
@@ -108,3 +167,35 @@ const result = await client.callTool({
|
|
|
108
167
|
| `name` | string | Server name |
|
|
109
168
|
| `version` | string | Server version |
|
|
110
169
|
| `capabilities` | Record<string, any> | Server capabilities |
|
|
170
|
+
| `sseEndpoint` | string (optional) | Endpoint for SSE connections. Defaults to `'sse'`. |
|
|
171
|
+
| `messagesEndpoint` | string (optional) | Endpoint for handling tool execution. Defaults to `'messages'`. |
|
|
172
|
+
| `globalApiPrefix` | string (optional) | Global API prefix for all endpoints. Defaults to an empty string `''`. |
|
|
173
|
+
|
|
174
|
+
### Tool Decorator
|
|
175
|
+
|
|
176
|
+
The `@Tool` decorator is used to define a method as an MCP tool.
|
|
177
|
+
|
|
178
|
+
```typescript
|
|
179
|
+
@Tool(name: string, description: string, options: { schema?: any, requestSchema?: z.ZodObject<any> })
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
- `name`: The name of the tool.
|
|
183
|
+
- `description`: A description of the tool.
|
|
184
|
+
- `options.schema`: (Optional) A Zod schema defining the expected structure of the tool's input arguments.
|
|
185
|
+
- `options.requestSchema`: (Optional) A Zod schema extending the base `RequestSchema` to validate the entire request structure, including method name and metadata.
|
|
186
|
+
|
|
187
|
+
### Context Object
|
|
188
|
+
|
|
189
|
+
When defining a tool, you can access a context object passed as the second argument to the tool method. This object provides methods for sending notifications, errors, and responses.
|
|
190
|
+
|
|
191
|
+
```typescript
|
|
192
|
+
{
|
|
193
|
+
sendNotification: async (notification: any) => { ... },
|
|
194
|
+
sendError: async (message: string, data?: any) => { ... },
|
|
195
|
+
sendResponse: async (response: any) => { ... }
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
- `sendNotification`: Sends a notification to the client.
|
|
200
|
+
- `sendError`: Sends an error response to the client.
|
|
201
|
+
- `sendResponse`: Sends a successful response to the client.
|
package/coverage/clover.xml
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<coverage generated="
|
|
3
|
-
<project timestamp="
|
|
4
|
-
<metrics statements="
|
|
2
|
+
<coverage generated="1738486475062" clover="3.2.0">
|
|
3
|
+
<project timestamp="1738486475062" name="All files">
|
|
4
|
+
<metrics statements="106" coveredstatements="83" conditionals="35" coveredconditionals="15" methods="27" coveredmethods="19" elements="168" coveredelements="117" complexity="0" loc="106" ncloc="106" packages="5" files="8" classes="8"/>
|
|
5
5
|
<package name="src">
|
|
6
|
-
<metrics statements="
|
|
6
|
+
<metrics statements="32" coveredstatements="16" conditionals="22" coveredconditionals="7" methods="7" coveredmethods="2"/>
|
|
7
7
|
<file name="index.ts" path="/home/rinor/explore/nest-mcp/src/index.ts">
|
|
8
8
|
<metrics statements="3" coveredstatements="3" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
|
|
9
9
|
<line num="1" count="1" type="stmt"/>
|
|
@@ -11,79 +11,87 @@
|
|
|
11
11
|
<line num="3" count="1" type="stmt"/>
|
|
12
12
|
</file>
|
|
13
13
|
<file name="mcp.module.ts" path="/home/rinor/explore/nest-mcp/src/mcp.module.ts">
|
|
14
|
-
<metrics statements="
|
|
15
|
-
<line num="1" count="
|
|
16
|
-
<line num="2" count="
|
|
17
|
-
<line num="3" count="
|
|
18
|
-
<line num="
|
|
19
|
-
<line num="7" count="
|
|
20
|
-
<line num="10" count="
|
|
21
|
-
<line num="12" count="
|
|
22
|
-
<line num="13" count="
|
|
23
|
-
<line num="14" count="
|
|
24
|
-
<line num="16" count="
|
|
25
|
-
<line num="18" count="
|
|
26
|
-
<line num="30" count="
|
|
27
|
-
<line num="34" count="
|
|
28
|
-
<line num="
|
|
29
|
-
<line num="
|
|
30
|
-
<line num="
|
|
31
|
-
<line num="
|
|
32
|
-
<line num="
|
|
33
|
-
<line num="
|
|
34
|
-
<line num="
|
|
35
|
-
<line num="
|
|
36
|
-
<line num="
|
|
37
|
-
<line num="
|
|
38
|
-
<line num="
|
|
39
|
-
<line num="
|
|
40
|
-
<line num="
|
|
41
|
-
<line num="99" count="0" type="
|
|
42
|
-
<line num="
|
|
43
|
-
<line num="
|
|
44
|
-
<line num="104" count="0" type="stmt"/>
|
|
45
|
-
<line num="107" count="0" type="stmt"/>
|
|
14
|
+
<metrics statements="29" coveredstatements="13" conditionals="22" coveredconditionals="7" methods="7" coveredmethods="2"/>
|
|
15
|
+
<line num="1" count="1" type="stmt"/>
|
|
16
|
+
<line num="2" count="1" type="stmt"/>
|
|
17
|
+
<line num="3" count="1" type="stmt"/>
|
|
18
|
+
<line num="6" count="1" type="stmt"/>
|
|
19
|
+
<line num="7" count="1" type="stmt"/>
|
|
20
|
+
<line num="10" count="1" type="stmt"/>
|
|
21
|
+
<line num="12" count="1" type="cond" truecount="2" falsecount="0"/>
|
|
22
|
+
<line num="13" count="1" type="cond" truecount="2" falsecount="0"/>
|
|
23
|
+
<line num="14" count="1" type="cond" truecount="2" falsecount="0"/>
|
|
24
|
+
<line num="16" count="1" type="stmt"/>
|
|
25
|
+
<line num="18" count="1" type="stmt"/>
|
|
26
|
+
<line num="30" count="1" type="stmt"/>
|
|
27
|
+
<line num="34" count="1" type="stmt"/>
|
|
28
|
+
<line num="45" count="0" type="stmt"/>
|
|
29
|
+
<line num="47" count="0" type="stmt"/>
|
|
30
|
+
<line num="56" count="0" type="stmt"/>
|
|
31
|
+
<line num="60" count="0" type="stmt"/>
|
|
32
|
+
<line num="71" count="0" type="cond" truecount="0" falsecount="3"/>
|
|
33
|
+
<line num="72" count="0" type="stmt"/>
|
|
34
|
+
<line num="75" count="0" type="cond" truecount="0" falsecount="1"/>
|
|
35
|
+
<line num="76" count="0" type="stmt"/>
|
|
36
|
+
<line num="79" count="0" type="stmt"/>
|
|
37
|
+
<line num="89" count="0" type="cond" truecount="0" falsecount="1"/>
|
|
38
|
+
<line num="90" count="0" type="stmt"/>
|
|
39
|
+
<line num="97" count="0" type="cond" truecount="0" falsecount="2"/>
|
|
40
|
+
<line num="98" count="0" type="cond" truecount="0" falsecount="1"/>
|
|
41
|
+
<line num="99" count="0" type="stmt"/>
|
|
42
|
+
<line num="102" count="0" type="stmt"/>
|
|
43
|
+
<line num="105" count="0" type="stmt"/>
|
|
46
44
|
</file>
|
|
47
45
|
</package>
|
|
48
46
|
<package name="src.controllers">
|
|
49
|
-
<metrics statements="
|
|
47
|
+
<metrics statements="26" coveredstatements="24" conditionals="3" coveredconditionals="1" methods="5" coveredmethods="4"/>
|
|
50
48
|
<file name="sse.controller.factory.ts" path="/home/rinor/explore/nest-mcp/src/controllers/sse.controller.factory.ts">
|
|
51
|
-
<metrics statements="
|
|
52
|
-
<line num="1" count="
|
|
53
|
-
<line num="4" count="
|
|
54
|
-
<line num="5" count="
|
|
55
|
-
<line num="7" count="
|
|
56
|
-
<line num="
|
|
57
|
-
<line num="
|
|
58
|
-
<line num="
|
|
59
|
-
<line num="
|
|
60
|
-
<line num="19" count="2" type="stmt"/>
|
|
49
|
+
<metrics statements="26" coveredstatements="24" conditionals="3" coveredconditionals="1" methods="5" coveredmethods="4"/>
|
|
50
|
+
<line num="1" count="1" type="stmt"/>
|
|
51
|
+
<line num="4" count="1" type="stmt"/>
|
|
52
|
+
<line num="5" count="1" type="stmt"/>
|
|
53
|
+
<line num="7" count="1" type="stmt"/>
|
|
54
|
+
<line num="10" count="1" type="stmt"/>
|
|
55
|
+
<line num="15" count="1" type="stmt"/>
|
|
56
|
+
<line num="16" count="1" type="stmt"/>
|
|
57
|
+
<line num="17" count="1" type="stmt"/>
|
|
61
58
|
<line num="20" count="1" type="stmt"/>
|
|
62
59
|
<line num="21" count="1" type="stmt"/>
|
|
63
|
-
<line num="25" count="
|
|
64
|
-
<line num="26" count="
|
|
65
|
-
<line num="27" count="
|
|
66
|
-
<line num="29" count="
|
|
67
|
-
<line num="
|
|
60
|
+
<line num="25" count="1" type="stmt"/>
|
|
61
|
+
<line num="26" count="2" type="stmt"/>
|
|
62
|
+
<line num="27" count="2" type="stmt"/>
|
|
63
|
+
<line num="29" count="2" type="stmt"/>
|
|
64
|
+
<line num="35" count="2" type="stmt"/>
|
|
65
|
+
<line num="37" count="2" type="stmt"/>
|
|
66
|
+
<line num="39" count="2" type="stmt"/>
|
|
67
|
+
<line num="40" count="0" type="stmt"/>
|
|
68
|
+
<line num="43" count="2" type="stmt"/>
|
|
69
|
+
<line num="47" count="1" type="stmt"/>
|
|
70
|
+
<line num="48" count="7" type="stmt"/>
|
|
71
|
+
<line num="50" count="7" type="stmt"/>
|
|
72
|
+
<line num="52" count="7" type="cond" truecount="0" falsecount="1"/>
|
|
73
|
+
<line num="53" count="0" type="stmt"/>
|
|
74
|
+
<line num="55" count="7" type="stmt"/>
|
|
75
|
+
<line num="59" count="1" type="stmt"/>
|
|
68
76
|
</file>
|
|
69
77
|
</package>
|
|
70
78
|
<package name="src.decorators">
|
|
71
|
-
<metrics statements="7" coveredstatements="7" conditionals="
|
|
79
|
+
<metrics statements="7" coveredstatements="7" conditionals="1" coveredconditionals="0" methods="1" coveredmethods="1"/>
|
|
72
80
|
<file name="constants.ts" path="/home/rinor/explore/nest-mcp/src/decorators/constants.ts">
|
|
73
81
|
<metrics statements="1" coveredstatements="1" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
|
|
74
|
-
<line num="1" count="
|
|
82
|
+
<line num="1" count="1" type="stmt"/>
|
|
75
83
|
</file>
|
|
76
84
|
<file name="index.ts" path="/home/rinor/explore/nest-mcp/src/decorators/index.ts">
|
|
77
85
|
<metrics statements="2" coveredstatements="2" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
|
|
78
|
-
<line num="1" count="
|
|
79
|
-
<line num="2" count="
|
|
86
|
+
<line num="1" count="1" type="stmt"/>
|
|
87
|
+
<line num="2" count="1" type="stmt"/>
|
|
80
88
|
</file>
|
|
81
89
|
<file name="tool.decorator.ts" path="/home/rinor/explore/nest-mcp/src/decorators/tool.decorator.ts">
|
|
82
|
-
<metrics statements="4" coveredstatements="4" conditionals="
|
|
83
|
-
<line num="1" count="
|
|
84
|
-
<line num="2" count="
|
|
85
|
-
<line num="
|
|
86
|
-
<line num="
|
|
90
|
+
<metrics statements="4" coveredstatements="4" conditionals="1" coveredconditionals="0" methods="1" coveredmethods="1"/>
|
|
91
|
+
<line num="1" count="1" type="stmt"/>
|
|
92
|
+
<line num="2" count="1" type="stmt"/>
|
|
93
|
+
<line num="12" count="1" type="stmt"/>
|
|
94
|
+
<line num="17" count="2" type="stmt"/>
|
|
87
95
|
</file>
|
|
88
96
|
</package>
|
|
89
97
|
<package name="src.interfaces">
|
|
@@ -94,30 +102,49 @@
|
|
|
94
102
|
</file>
|
|
95
103
|
</package>
|
|
96
104
|
<package name="src.services">
|
|
97
|
-
<metrics statements="
|
|
105
|
+
<metrics statements="40" coveredstatements="35" conditionals="9" coveredconditionals="7" methods="14" coveredmethods="12"/>
|
|
98
106
|
<file name="mcp-tools.discovery.ts" path="/home/rinor/explore/nest-mcp/src/services/mcp-tools.discovery.ts">
|
|
99
|
-
<metrics statements="
|
|
100
|
-
<line num="
|
|
101
|
-
<line num="
|
|
102
|
-
<line num="4" count="
|
|
103
|
-
<line num="7" count="
|
|
104
|
-
<line num="
|
|
105
|
-
<line num="
|
|
106
|
-
<line num="
|
|
107
|
-
<line num="
|
|
108
|
-
<line num="
|
|
109
|
-
<line num="
|
|
110
|
-
<line num="
|
|
111
|
-
<line num="
|
|
112
|
-
<line num="
|
|
113
|
-
<line num="
|
|
114
|
-
<line num="
|
|
115
|
-
<line num="
|
|
116
|
-
<line num="
|
|
117
|
-
<line num="
|
|
118
|
-
<line num="
|
|
119
|
-
<line num="
|
|
120
|
-
<line num="
|
|
107
|
+
<metrics statements="40" coveredstatements="35" conditionals="9" coveredconditionals="7" methods="14" coveredmethods="12"/>
|
|
108
|
+
<line num="2" count="1" type="stmt"/>
|
|
109
|
+
<line num="3" count="1" type="stmt"/>
|
|
110
|
+
<line num="4" count="1" type="stmt"/>
|
|
111
|
+
<line num="7" count="1" type="stmt"/>
|
|
112
|
+
<line num="8" count="1" type="stmt"/>
|
|
113
|
+
<line num="15" count="1" type="stmt"/>
|
|
114
|
+
<line num="16" count="1" type="stmt"/>
|
|
115
|
+
<line num="20" count="1" type="stmt"/>
|
|
116
|
+
<line num="24" count="1" type="stmt"/>
|
|
117
|
+
<line num="25" count="1" type="stmt"/>
|
|
118
|
+
<line num="26" count="1" type="stmt"/>
|
|
119
|
+
<line num="27" count="29" type="stmt"/>
|
|
120
|
+
<line num="28" count="27" type="stmt"/>
|
|
121
|
+
<line num="30" count="1" type="stmt"/>
|
|
122
|
+
<line num="31" count="27" type="cond" truecount="2" falsecount="1"/>
|
|
123
|
+
<line num="32" count="0" type="stmt"/>
|
|
124
|
+
<line num="34" count="27" type="stmt"/>
|
|
125
|
+
<line num="35" count="212" type="stmt"/>
|
|
126
|
+
<line num="36" count="212" type="stmt"/>
|
|
127
|
+
<line num="38" count="212" type="cond" truecount="1" falsecount="0"/>
|
|
128
|
+
<line num="39" count="210" type="stmt"/>
|
|
129
|
+
<line num="42" count="2" type="stmt"/>
|
|
130
|
+
<line num="44" count="2" type="stmt"/>
|
|
131
|
+
<line num="54" count="2" type="stmt"/>
|
|
132
|
+
<line num="55" count="4" type="stmt"/>
|
|
133
|
+
<line num="56" count="2" type="stmt"/>
|
|
134
|
+
<line num="58" count="2" type="cond" truecount="2" falsecount="0"/>
|
|
135
|
+
<line num="60" count="1" type="stmt"/>
|
|
136
|
+
<line num="61" count="1" type="cond" truecount="0" falsecount="1"/>
|
|
137
|
+
<line num="63" count="0" type="stmt"/>
|
|
138
|
+
<line num="64" count="0" type="stmt"/>
|
|
139
|
+
<line num="68" count="1" type="stmt"/>
|
|
140
|
+
<line num="75" count="1" type="stmt"/>
|
|
141
|
+
<line num="79" count="4" type="cond" truecount="2" falsecount="0"/>
|
|
142
|
+
<line num="80" count="2" type="stmt"/>
|
|
143
|
+
<line num="86" count="2" type="stmt"/>
|
|
144
|
+
<line num="97" count="2" type="stmt"/>
|
|
145
|
+
<line num="99" count="6" type="stmt"/>
|
|
146
|
+
<line num="102" count="0" type="stmt"/>
|
|
147
|
+
<line num="105" count="0" type="stmt"/>
|
|
121
148
|
</file>
|
|
122
149
|
</package>
|
|
123
150
|
</project>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{"/home/rinor/explore/nest-mcp/src/index.ts": {"path":"/home/rinor/explore/nest-mcp/src/index.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":29}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":29}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":29}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1,"2":1},"f":{},"b":{}}
|
|
2
|
-
,"/home/rinor/explore/nest-mcp/src/mcp.module.ts": {"path":"/home/rinor/explore/nest-mcp/src/mcp.module.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":65}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":47}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":68}},"3":{"start":{"line":
|
|
3
|
-
,"/home/rinor/explore/nest-mcp/src/controllers/sse.controller.factory.ts": {"path":"/home/rinor/explore/nest-mcp/src/controllers/sse.controller.factory.ts","statementMap":{"0":{"start":{"line":
|
|
4
|
-
,"/home/rinor/explore/nest-mcp/src/decorators/constants.ts": {"path":"/home/rinor/explore/nest-mcp/src/decorators/constants.ts","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":48}}},"fnMap":{},"branchMap":{},"s":{"0":
|
|
5
|
-
,"/home/rinor/explore/nest-mcp/src/decorators/index.ts": {"path":"/home/rinor/explore/nest-mcp/src/decorators/index.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":28}}},"fnMap":{},"branchMap":{},"s":{"0":
|
|
6
|
-
,"/home/rinor/explore/nest-mcp/src/decorators/tool.decorator.ts": {"path":"/home/rinor/explore/nest-mcp/src/decorators/tool.decorator.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":45}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":52}},"2":{"start":{"line":
|
|
2
|
+
,"/home/rinor/explore/nest-mcp/src/mcp.module.ts": {"path":"/home/rinor/explore/nest-mcp/src/mcp.module.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":65}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":47}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":68}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":75}},"4":{"start":{"line":7,"column":0},"end":{"line":7,"column":67}},"5":{"start":{"line":10,"column":22},"end":{"line":110,"column":null}},"6":{"start":{"line":12,"column":24},"end":{"line":12,"column":52}},"7":{"start":{"line":13,"column":29},"end":{"line":13,"column":67}},"8":{"start":{"line":14,"column":28},"end":{"line":14,"column":57}},"9":{"start":{"line":16,"column":26},"end":{"line":16,"column":93}},"10":{"start":{"line":18,"column":4},"end":{"line":41,"column":6}},"11":{"start":{"line":30,"column":27},"end":{"line":32,"column":null}},"12":{"start":{"line":34,"column":12},"end":{"line":34,"column":26}},"13":{"start":{"line":45,"column":34},"end":{"line":45,"column":68}},"14":{"start":{"line":47,"column":4},"end":{"line":67,"column":6}},"15":{"start":{"line":56,"column":27},"end":{"line":58,"column":null}},"16":{"start":{"line":60,"column":12},"end":{"line":60,"column":26}},"17":{"start":{"line":71,"column":4},"end":{"line":73,"column":5}},"18":{"start":{"line":72,"column":6},"end":{"line":72,"column":56}},"19":{"start":{"line":75,"column":4},"end":{"line":77,"column":5}},"20":{"start":{"line":76,"column":6},"end":{"line":76,"column":91}},"21":{"start":{"line":79,"column":4},"end":{"line":85,"column":6}},"22":{"start":{"line":89,"column":4},"end":{"line":95,"column":5}},"23":{"start":{"line":90,"column":6},"end":{"line":94,"column":8}},"24":{"start":{"line":97,"column":27},"end":{"line":97,"column":66}},"25":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"26":{"start":{"line":99,"column":6},"end":{"line":99,"column":98}},"27":{"start":{"line":102,"column":4},"end":{"line":107,"column":6}},"28":{"start":{"line":105,"column":8},"end":{"line":105,"column":47}},"29":{"start":{"line":10,"column":13},"end":{"line":10,"column":22}},"30":{"start":{"line":10,"column":13},"end":{"line":110,"column":null}}},"fnMap":{"0":{"name":"(anonymous_1)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":8}},"loc":{"start":{"line":11,"column":36},"end":{"line":42,"column":3}}},"1":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":22},"end":{"line":29,"column":23}},"loc":{"start":{"line":29,"column":49},"end":{"line":35,"column":11}}},"2":{"name":"(anonymous_3)","decl":{"start":{"line":44,"column":2},"end":{"line":44,"column":8}},"loc":{"start":{"line":44,"column":46},"end":{"line":68,"column":3}}},"3":{"name":"(anonymous_4)","decl":{"start":{"line":55,"column":22},"end":{"line":55,"column":23}},"loc":{"start":{"line":55,"column":49},"end":{"line":61,"column":11}}},"4":{"name":"(anonymous_5)","decl":{"start":{"line":70,"column":10},"end":{"line":70,"column":16}},"loc":{"start":{"line":70,"column":62},"end":{"line":86,"column":3}}},"5":{"name":"(anonymous_6)","decl":{"start":{"line":88,"column":10},"end":{"line":88,"column":16}},"loc":{"start":{"line":88,"column":68},"end":{"line":108,"column":3}}},"6":{"name":"(anonymous_7)","decl":{"start":{"line":104,"column":18},"end":{"line":104,"column":23}},"loc":{"start":{"line":105,"column":8},"end":{"line":105,"column":47}}}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":24},"end":{"line":12,"column":52}},"type":"binary-expr","locations":[{"start":{"line":12,"column":24},"end":{"line":12,"column":43}},{"start":{"line":12,"column":47},"end":{"line":12,"column":52}}]},"1":{"loc":{"start":{"line":13,"column":29},"end":{"line":13,"column":67}},"type":"binary-expr","locations":[{"start":{"line":13,"column":29},"end":{"line":13,"column":53}},{"start":{"line":13,"column":57},"end":{"line":13,"column":67}}]},"2":{"loc":{"start":{"line":14,"column":28},"end":{"line":14,"column":57}},"type":"binary-expr","locations":[{"start":{"line":14,"column":28},"end":{"line":14,"column":51}},{"start":{"line":14,"column":55},"end":{"line":14,"column":57}}]},"3":{"loc":{"start":{"line":32,"column":30},"end":{"line":32,"column":70}},"type":"binary-expr","locations":[{"start":{"line":32,"column":30},"end":{"line":32,"column":53}},{"start":{"line":32,"column":57},"end":{"line":32,"column":70}}]},"4":{"loc":{"start":{"line":49,"column":20},"end":{"line":49,"column":41}},"type":"binary-expr","locations":[{"start":{"line":49,"column":20},"end":{"line":49,"column":35}},{"start":{"line":49,"column":39},"end":{"line":49,"column":41}}]},"5":{"loc":{"start":{"line":58,"column":30},"end":{"line":58,"column":70}},"type":"binary-expr","locations":[{"start":{"line":58,"column":30},"end":{"line":58,"column":53}},{"start":{"line":58,"column":57},"end":{"line":58,"column":70}}]},"6":{"loc":{"start":{"line":71,"column":4},"end":{"line":73,"column":5}},"type":"if","locations":[{"start":{"line":71,"column":4},"end":{"line":73,"column":5}}]},"7":{"loc":{"start":{"line":71,"column":8},"end":{"line":71,"column":49}},"type":"binary-expr","locations":[{"start":{"line":71,"column":8},"end":{"line":71,"column":27}},{"start":{"line":71,"column":31},"end":{"line":71,"column":49}}]},"8":{"loc":{"start":{"line":75,"column":4},"end":{"line":77,"column":5}},"type":"if","locations":[{"start":{"line":75,"column":4},"end":{"line":77,"column":5}}]},"9":{"loc":{"start":{"line":89,"column":4},"end":{"line":95,"column":5}},"type":"if","locations":[{"start":{"line":89,"column":4},"end":{"line":95,"column":5}}]},"10":{"loc":{"start":{"line":93,"column":16},"end":{"line":93,"column":36}},"type":"binary-expr","locations":[{"start":{"line":93,"column":16},"end":{"line":93,"column":30}},{"start":{"line":93,"column":34},"end":{"line":93,"column":36}}]},"11":{"loc":{"start":{"line":97,"column":27},"end":{"line":97,"column":66}},"type":"binary-expr","locations":[{"start":{"line":97,"column":27},"end":{"line":97,"column":46}},{"start":{"line":97,"column":50},"end":{"line":97,"column":66}}]},"12":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":5}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":5}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":1,"30":1},"f":{"0":1,"1":1,"2":0,"3":0,"4":0,"5":0,"6":0},"b":{"0":[1,1],"1":[1,1],"2":[1,1],"3":[1,0],"4":[0,0],"5":[0,0],"6":[0],"7":[0,0],"8":[0],"9":[0],"10":[0,0],"11":[0,0],"12":[0]}}
|
|
3
|
+
,"/home/rinor/explore/nest-mcp/src/controllers/sse.controller.factory.ts": {"path":"/home/rinor/explore/nest-mcp/src/controllers/sse.controller.factory.ts","statementMap":{"0":{"start":{"line":10,"column":0},"end":{"line":10,"column":16}},"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":79}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":68}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":77}},"4":{"start":{"line":7,"column":0},"end":{"line":7,"column":68}},"5":{"start":{"line":15,"column":2},"end":{"line":57,"column":null}},"6":{"start":{"line":20,"column":45},"end":{"line":20,"column":64}},"7":{"start":{"line":21,"column":22},"end":{"line":21,"column":41}},"8":{"start":{"line":17,"column":11},"end":{"line":17,"column":62}},"9":{"start":{"line":26,"column":24},"end":{"line":26,"column":93}},"10":{"start":{"line":27,"column":24},"end":{"line":27,"column":43}},"11":{"start":{"line":29,"column":24},"end":{"line":31,"column":null}},"12":{"start":{"line":35,"column":6},"end":{"line":35,"column":54}},"13":{"start":{"line":37,"column":6},"end":{"line":37,"column":48}},"14":{"start":{"line":39,"column":6},"end":{"line":41,"column":8}},"15":{"start":{"line":40,"column":8},"end":{"line":40,"column":42}},"16":{"start":{"line":43,"column":6},"end":{"line":43,"column":41}},"17":{"start":{"line":48,"column":24},"end":{"line":48,"column":53}},"18":{"start":{"line":50,"column":24},"end":{"line":50,"column":54}},"19":{"start":{"line":52,"column":6},"end":{"line":54,"column":7}},"20":{"start":{"line":53,"column":8},"end":{"line":53,"column":57}},"21":{"start":{"line":55,"column":6},"end":{"line":55,"column":56}},"22":{"start":{"line":25,"column":10},"end":{"line":44,"column":null}},"23":{"start":{"line":47,"column":10},"end":{"line":56,"column":null}},"24":{"start":{"line":16,"column":8},"end":{"line":57,"column":null}},"25":{"start":{"line":59,"column":2},"end":{"line":59,"column":23}}},"fnMap":{"0":{"name":"createSseController","decl":{"start":{"line":10,"column":16},"end":{"line":10,"column":35}},"loc":{"start":{"line":13,"column":25},"end":{"line":60,"column":1}}},"1":{"name":"(anonymous_5)","decl":{"start":{"line":19,"column":4},"end":{"line":19,"column":null}},"loc":{"start":{"line":21,"column":58},"end":{"line":22,"column":8}}},"2":{"name":"(anonymous_6)","decl":{"start":{"line":25,"column":4},"end":{"line":25,"column":9}},"loc":{"start":{"line":25,"column":34},"end":{"line":44,"column":5}}},"3":{"name":"(anonymous_7)","decl":{"start":{"line":39,"column":26},"end":{"line":39,"column":29}},"loc":{"start":{"line":39,"column":31},"end":{"line":41,"column":7}}},"4":{"name":"(anonymous_8)","decl":{"start":{"line":47,"column":4},"end":{"line":47,"column":9}},"loc":{"start":{"line":47,"column":83},"end":{"line":56,"column":5}}}},"branchMap":{"0":{"loc":{"start":{"line":31,"column":24},"end":{"line":31,"column":66}},"type":"binary-expr","locations":[{"start":{"line":31,"column":24},"end":{"line":31,"column":49}},{"start":{"line":31,"column":53},"end":{"line":31,"column":66}}]},"1":{"loc":{"start":{"line":52,"column":6},"end":{"line":54,"column":7}},"type":"if","locations":[{"start":{"line":52,"column":6},"end":{"line":54,"column":7}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":2,"10":2,"11":2,"12":2,"13":2,"14":2,"15":0,"16":2,"17":7,"18":7,"19":7,"20":0,"21":7,"22":1,"23":1,"24":1,"25":1},"f":{"0":1,"1":1,"2":2,"3":0,"4":7},"b":{"0":[2,0],"1":[0]}}
|
|
4
|
+
,"/home/rinor/explore/nest-mcp/src/decorators/constants.ts": {"path":"/home/rinor/explore/nest-mcp/src/decorators/constants.ts","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":48}}},"fnMap":{},"branchMap":{},"s":{"0":1},"f":{},"b":{}}
|
|
5
|
+
,"/home/rinor/explore/nest-mcp/src/decorators/index.ts": {"path":"/home/rinor/explore/nest-mcp/src/decorators/index.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":28}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1},"f":{},"b":{}}
|
|
6
|
+
,"/home/rinor/explore/nest-mcp/src/decorators/tool.decorator.ts": {"path":"/home/rinor/explore/nest-mcp/src/decorators/tool.decorator.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":45}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":52}},"2":{"start":{"line":12,"column":20},"end":{"line":22,"column":1}},"3":{"start":{"line":17,"column":2},"end":{"line":21,"column":5}},"4":{"start":{"line":12,"column":13},"end":{"line":12,"column":20}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":20},"end":{"line":12,"column":null}},"loc":{"start":{"line":16,"column":21},"end":{"line":22,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":15,"column":2},"end":{"line":15,"column":66}},"type":"default-arg","locations":[{"start":{"line":15,"column":64},"end":{"line":15,"column":66}}]}},"s":{"0":1,"1":1,"2":1,"3":2,"4":1},"f":{"0":2},"b":{"0":[0]}}
|
|
7
7
|
,"/home/rinor/explore/nest-mcp/src/interfaces/index.ts": {"path":"/home/rinor/explore/nest-mcp/src/interfaces/index.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":40}}},"fnMap":{},"branchMap":{},"s":{"0":1},"f":{},"b":{}}
|
|
8
|
-
,"/home/rinor/explore/nest-mcp/src/services/mcp-tools.discovery.ts": {"path":"/home/rinor/explore/nest-mcp/src/services/mcp-tools.discovery.ts","statementMap":{"0":{"start":{"line":
|
|
8
|
+
,"/home/rinor/explore/nest-mcp/src/services/mcp-tools.discovery.ts": {"path":"/home/rinor/explore/nest-mcp/src/services/mcp-tools.discovery.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":68}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":65}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":68}},"3":{"start":{"line":7,"column":7},"end":{"line":109,"column":null}},"4":{"start":{"line":15,"column":21},"end":{"line":15,"column":32}},"5":{"start":{"line":16,"column":21},"end":{"line":16,"column":38}},"6":{"start":{"line":8,"column":10},"end":{"line":12,"column":10}},"7":{"start":{"line":20,"column":4},"end":{"line":20,"column":24}},"8":{"start":{"line":24,"column":22},"end":{"line":24,"column":51}},"9":{"start":{"line":25,"column":24},"end":{"line":25,"column":55}},"10":{"start":{"line":26,"column":25},"end":{"line":28,"column":41}},"11":{"start":{"line":27,"column":27},"end":{"line":27,"column":43}},"12":{"start":{"line":28,"column":24},"end":{"line":28,"column":40}},"13":{"start":{"line":30,"column":4},"end":{"line":50,"column":7}},"14":{"start":{"line":31,"column":6},"end":{"line":33,"column":7}},"15":{"start":{"line":32,"column":8},"end":{"line":32,"column":15}},"16":{"start":{"line":34,"column":6},"end":{"line":49,"column":9}},"17":{"start":{"line":35,"column":26},"end":{"line":35,"column":46}},"18":{"start":{"line":36,"column":31},"end":{"line":36,"column":68}},"19":{"start":{"line":38,"column":8},"end":{"line":40,"column":9}},"20":{"start":{"line":39,"column":10},"end":{"line":39,"column":17}},"21":{"start":{"line":42,"column":39},"end":{"line":42,"column":92}},"22":{"start":{"line":44,"column":8},"end":{"line":48,"column":11}},"23":{"start":{"line":54,"column":4},"end":{"line":93,"column":7}},"24":{"start":{"line":55,"column":22},"end":{"line":77,"column":7}},"25":{"start":{"line":56,"column":24},"end":{"line":56,"column":60}},"26":{"start":{"line":58,"column":8},"end":{"line":76,"column":9}},"27":{"start":{"line":60,"column":32},"end":{"line":60,"column":78}},"28":{"start":{"line":61,"column":10},"end":{"line":65,"column":11}},"29":{"start":{"line":63,"column":35},"end":{"line":63,"column":79}},"30":{"start":{"line":64,"column":12},"end":{"line":64,"column":72}},"31":{"start":{"line":68,"column":10},"end":{"line":72,"column":12}},"32":{"start":{"line":75,"column":10},"end":{"line":75,"column":86}},"33":{"start":{"line":79,"column":6},"end":{"line":92,"column":7}},"34":{"start":{"line":80,"column":8},"end":{"line":83,"column":10}},"35":{"start":{"line":86,"column":8},"end":{"line":91,"column":10}},"36":{"start":{"line":97,"column":4},"end":{"line":107,"column":6}},"37":{"start":{"line":99,"column":8},"end":{"line":99,"column":58}},"38":{"start":{"line":102,"column":10},"end":{"line":102,"column":65}},"39":{"start":{"line":105,"column":8},"end":{"line":105,"column":35}},"40":{"start":{"line":7,"column":13},"end":{"line":7,"column":30}},"41":{"start":{"line":7,"column":13},"end":{"line":109,"column":null}}},"fnMap":{"0":{"name":"(anonymous_2)","decl":{"start":{"line":14,"column":2},"end":{"line":14,"column":null}},"loc":{"start":{"line":16,"column":53},"end":{"line":17,"column":6}}},"1":{"name":"(anonymous_3)","decl":{"start":{"line":19,"column":2},"end":{"line":19,"column":24}},"loc":{"start":{"line":19,"column":24},"end":{"line":21,"column":3}}},"2":{"name":"(anonymous_4)","decl":{"start":{"line":23,"column":2},"end":{"line":23,"column":14}},"loc":{"start":{"line":23,"column":14},"end":{"line":51,"column":3}}},"3":{"name":"(anonymous_5)","decl":{"start":{"line":27,"column":14},"end":{"line":27,"column":15}},"loc":{"start":{"line":27,"column":27},"end":{"line":27,"column":43}}},"4":{"name":"(anonymous_6)","decl":{"start":{"line":28,"column":11},"end":{"line":28,"column":12}},"loc":{"start":{"line":28,"column":24},"end":{"line":28,"column":40}}},"5":{"name":"(anonymous_7)","decl":{"start":{"line":30,"column":25},"end":{"line":30,"column":26}},"loc":{"start":{"line":30,"column":38},"end":{"line":50,"column":5}}},"6":{"name":"(anonymous_8)","decl":{"start":{"line":34,"column":63},"end":{"line":34,"column":64}},"loc":{"start":{"line":34,"column":78},"end":{"line":49,"column":7}}},"7":{"name":"(anonymous_9)","decl":{"start":{"line":53,"column":2},"end":{"line":53,"column":15}},"loc":{"start":{"line":53,"column":36},"end":{"line":94,"column":3}}},"8":{"name":"(anonymous_10)","decl":{"start":{"line":54,"column":23},"end":{"line":54,"column":24}},"loc":{"start":{"line":54,"column":32},"end":{"line":93,"column":5}}},"9":{"name":"(anonymous_11)","decl":{"start":{"line":55,"column":22},"end":{"line":55,"column":27}},"loc":{"start":{"line":55,"column":57},"end":{"line":77,"column":7}}},"10":{"name":"(anonymous_12)","decl":{"start":{"line":96,"column":10},"end":{"line":96,"column":23}},"loc":{"start":{"line":96,"column":56},"end":{"line":108,"column":3}}},"11":{"name":"(anonymous_13)","decl":{"start":{"line":98,"column":24},"end":{"line":98,"column":29}},"loc":{"start":{"line":98,"column":52},"end":{"line":100,"column":7}}},"12":{"name":"(anonymous_14)","decl":{"start":{"line":101,"column":17},"end":{"line":101,"column":22}},"loc":{"start":{"line":101,"column":55},"end":{"line":103,"column":7}}},"13":{"name":"(anonymous_15)","decl":{"start":{"line":104,"column":20},"end":{"line":104,"column":25}},"loc":{"start":{"line":104,"column":44},"end":{"line":106,"column":7}}}},"branchMap":{"0":{"loc":{"start":{"line":31,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":31,"column":6},"end":{"line":33,"column":7}}]},"1":{"loc":{"start":{"line":31,"column":10},"end":{"line":31,"column":51}},"type":"binary-expr","locations":[{"start":{"line":31,"column":10},"end":{"line":31,"column":19}},{"start":{"line":31,"column":23},"end":{"line":31,"column":51}}]},"2":{"loc":{"start":{"line":38,"column":8},"end":{"line":40,"column":9}},"type":"if","locations":[{"start":{"line":38,"column":8},"end":{"line":40,"column":9}}]},"3":{"loc":{"start":{"line":58,"column":8},"end":{"line":76,"column":9}},"type":"if","locations":[{"start":{"line":58,"column":8},"end":{"line":76,"column":9}},{"start":{"line":73,"column":15},"end":{"line":76,"column":9}}]},"4":{"loc":{"start":{"line":61,"column":10},"end":{"line":65,"column":11}},"type":"if","locations":[{"start":{"line":61,"column":10},"end":{"line":65,"column":11}}]},"5":{"loc":{"start":{"line":79,"column":6},"end":{"line":92,"column":7}},"type":"if","locations":[{"start":{"line":79,"column":6},"end":{"line":92,"column":7}},{"start":{"line":84,"column":13},"end":{"line":92,"column":7}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":29,"12":27,"13":1,"14":27,"15":0,"16":27,"17":212,"18":212,"19":212,"20":210,"21":2,"22":2,"23":2,"24":4,"25":2,"26":2,"27":1,"28":1,"29":0,"30":0,"31":1,"32":1,"33":4,"34":2,"35":2,"36":2,"37":6,"38":0,"39":0,"40":1,"41":1},"f":{"0":1,"1":1,"2":1,"3":29,"4":27,"5":27,"6":212,"7":2,"8":4,"9":2,"10":2,"11":6,"12":0,"13":0},"b":{"0":[0],"1":[27,27],"2":[210],"3":[1,1],"4":[0],"5":[2,2]}}
|
|
9
9
|
}
|