tuandad-test 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.js +126 -0
- package/package.json +21 -0
- package/src/index.d.ts +3 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +129 -0
- package/src/index.js.map +1 -0
- package/src/index.ts +172 -0
- package/tsconfig.json +19 -0
package/build/index.js
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
/* =====================================================
|
|
6
|
+
INIT MCP SERVER
|
|
7
|
+
===================================================== */
|
|
8
|
+
const server = new McpServer({
|
|
9
|
+
name: "eservice",
|
|
10
|
+
version: "1.0.0",
|
|
11
|
+
});
|
|
12
|
+
/* =====================================================
|
|
13
|
+
TOOL: search_eservice
|
|
14
|
+
===================================================== */
|
|
15
|
+
server.tool("search_eservice", "Tìm kiếm và định tuyến câu hỏi eService khi chưa xác định rõ lĩnh vực (hóa đơn điện tử, chứng từ điện tử, chữ ký số, TVAN…).", {
|
|
16
|
+
text: z
|
|
17
|
+
.string()
|
|
18
|
+
.describe("Câu hỏi tổng quát của người dùng về hệ thống eService"),
|
|
19
|
+
}, async ({ text }) => ({
|
|
20
|
+
content: [
|
|
21
|
+
{
|
|
22
|
+
type: "text",
|
|
23
|
+
text: `[SEARCH_ESERVICE]\n${text}`,
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
}));
|
|
27
|
+
/* =====================================================
|
|
28
|
+
TOOL: answer_ehoadon
|
|
29
|
+
===================================================== */
|
|
30
|
+
server.tool("answer_ehoadon", "Trả lời các câu hỏi liên quan đến HÓA ĐƠN ĐIỆN TỬ: phát hành, tra cứu, điều chỉnh, thay thế, hủy hóa đơn theo quy định thuế Việt Nam.", {
|
|
31
|
+
text: z
|
|
32
|
+
.string()
|
|
33
|
+
.describe("Câu hỏi cụ thể của người dùng về hóa đơn điện tử"),
|
|
34
|
+
}, async ({ text }) => ({
|
|
35
|
+
content: [
|
|
36
|
+
{
|
|
37
|
+
type: "text",
|
|
38
|
+
text: `[ANSWER_EHOADON]\n${text}`,
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
}));
|
|
42
|
+
/* =====================================================
|
|
43
|
+
TOOL: answer_eqlhd
|
|
44
|
+
===================================================== */
|
|
45
|
+
server.tool("answer_eqlhd", "Trả lời câu hỏi về QUẢN LÝ HÓA ĐƠN ĐIỆN TỬ: danh sách hóa đơn, trạng thái, báo cáo, phân quyền và xử lý sai sót.", {
|
|
46
|
+
text: z
|
|
47
|
+
.string()
|
|
48
|
+
.describe("Câu hỏi của người dùng về quản lý hóa đơn điện tử"),
|
|
49
|
+
}, async ({ text }) => ({
|
|
50
|
+
content: [
|
|
51
|
+
{
|
|
52
|
+
type: "text",
|
|
53
|
+
text: `[ANSWER_EQLHD]\n${text}`,
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
}));
|
|
57
|
+
/* =====================================================
|
|
58
|
+
TOOL: answer_echungtu
|
|
59
|
+
===================================================== */
|
|
60
|
+
server.tool("answer_echungtu", "Trả lời các câu hỏi về CHỨNG TỪ ĐIỆN TỬ: chứng từ khấu trừ thuế TNCN, chứng từ thuế theo Nghị định 123 và Thông tư 78.", {
|
|
61
|
+
text: z
|
|
62
|
+
.string()
|
|
63
|
+
.describe("Câu hỏi chi tiết của người dùng về chứng từ điện tử"),
|
|
64
|
+
}, async ({ text }) => ({
|
|
65
|
+
content: [
|
|
66
|
+
{
|
|
67
|
+
type: "text",
|
|
68
|
+
text: `[ANSWER_ECHUNGTU]\n${text}`,
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
}));
|
|
72
|
+
/* =====================================================
|
|
73
|
+
TOOL: answer_cks
|
|
74
|
+
===================================================== */
|
|
75
|
+
server.tool("answer_cks", "Trả lời câu hỏi liên quan đến CHỮ KÝ SỐ: đăng ký, gia hạn, cài đặt và sử dụng trong hóa đơn điện tử và thuế điện tử.", {
|
|
76
|
+
text: z.string().describe("Câu hỏi của người dùng về chữ ký số"),
|
|
77
|
+
}, async ({ text }) => ({
|
|
78
|
+
content: [
|
|
79
|
+
{
|
|
80
|
+
type: "text",
|
|
81
|
+
text: `[ANSWER_CKS]\n${text}`,
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
}));
|
|
85
|
+
/* =====================================================
|
|
86
|
+
TOOL: answer_ivan
|
|
87
|
+
===================================================== */
|
|
88
|
+
server.tool("answer_ivan", "Trả lời câu hỏi về dịch vụ IVAN – trung gian truyền nhận dữ liệu hóa đơn điện tử với cơ quan thuế.", {
|
|
89
|
+
text: z
|
|
90
|
+
.string()
|
|
91
|
+
.describe("Câu hỏi của người dùng về dịch vụ IVAN hoặc chứng thư số"),
|
|
92
|
+
}, async ({ text }) => ({
|
|
93
|
+
content: [
|
|
94
|
+
{
|
|
95
|
+
type: "text",
|
|
96
|
+
text: `[ANSWER_IVAN]\n${text}`,
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
}));
|
|
100
|
+
/* =====================================================
|
|
101
|
+
TOOL: answer_tvan
|
|
102
|
+
===================================================== */
|
|
103
|
+
server.tool("answer_tvan", "Trả lời các câu hỏi về TVAN và THUẾ ĐIỆN TỬ: kê khai, nộp thuế, tra cứu tờ khai và nghĩa vụ thuế.", {
|
|
104
|
+
text: z
|
|
105
|
+
.string()
|
|
106
|
+
.describe("Câu hỏi của người dùng về thuế điện tử hoặc TVAN"),
|
|
107
|
+
}, async ({ text }) => ({
|
|
108
|
+
content: [
|
|
109
|
+
{
|
|
110
|
+
type: "text",
|
|
111
|
+
text: `[ANSWER_TVAN]\n${text}`,
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
}));
|
|
115
|
+
/* =====================================================
|
|
116
|
+
START MCP SERVER
|
|
117
|
+
===================================================== */
|
|
118
|
+
async function main() {
|
|
119
|
+
console.log("✅ MCP eService server started");
|
|
120
|
+
const transport = new StdioServerTransport();
|
|
121
|
+
await server.connect(transport);
|
|
122
|
+
}
|
|
123
|
+
main().catch((err) => {
|
|
124
|
+
console.error("❌ Error starting MCP server:", err);
|
|
125
|
+
process.exit(1);
|
|
126
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tuandad-test",
|
|
3
|
+
"version": "1.0.6",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"bin": {
|
|
6
|
+
"mcp-server": "build/index.js"
|
|
7
|
+
},
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "tsc && chmod 755 build/index.js",
|
|
10
|
+
"start": "node build/index.js",
|
|
11
|
+
"prepublishOnly": "npm run build"
|
|
12
|
+
},
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"@modelcontextprotocol/sdk": "^1.25.2",
|
|
15
|
+
"zod": "^4.3.5"
|
|
16
|
+
},
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"@types/node": "^25.0.9",
|
|
19
|
+
"typescript": "^5.9.3"
|
|
20
|
+
}
|
|
21
|
+
}
|
package/src/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":""}
|
package/src/index.js
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
/* =========================================
|
|
6
|
+
INIT MCP SERVER
|
|
7
|
+
========================================= */
|
|
8
|
+
const server = new McpServer({
|
|
9
|
+
name: "eservice",
|
|
10
|
+
version: "1.0.0",
|
|
11
|
+
});
|
|
12
|
+
/* =========================================
|
|
13
|
+
TOOL: search_eservice
|
|
14
|
+
========================================= */
|
|
15
|
+
server.tool("search_eservice", {
|
|
16
|
+
text: z.string().describe("Câu hỏi tìm kiếm eservice"),
|
|
17
|
+
}, async ({ text }) => {
|
|
18
|
+
return {
|
|
19
|
+
content: [
|
|
20
|
+
{
|
|
21
|
+
type: "text",
|
|
22
|
+
text: `[TOOL: search_eservice]\nCâu hỏi: ${text}`,
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
/* =========================================
|
|
28
|
+
TOOL: answer_ehoadon
|
|
29
|
+
========================================= */
|
|
30
|
+
server.tool("answer_ehoadon", {
|
|
31
|
+
text: z.string().describe("Câu hỏi liên quan đến hóa đơn điện tử"),
|
|
32
|
+
}, async ({ text }) => {
|
|
33
|
+
return {
|
|
34
|
+
content: [
|
|
35
|
+
{
|
|
36
|
+
type: "text",
|
|
37
|
+
text: `[TOOL: answer_ehoadon]\nCâu hỏi: ${text}`,
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
/* =========================================
|
|
43
|
+
TOOL: answer_cks
|
|
44
|
+
========================================= */
|
|
45
|
+
server.tool("answer_cks", {
|
|
46
|
+
text: z.string().describe("Câu hỏi liên quan đến chữ ký số"),
|
|
47
|
+
}, async ({ text }) => {
|
|
48
|
+
return {
|
|
49
|
+
content: [
|
|
50
|
+
{
|
|
51
|
+
type: "text",
|
|
52
|
+
text: `[TOOL: answer_cks]\nCâu hỏi: ${text}`,
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
/* =========================================
|
|
58
|
+
TOOL: answer_ivan
|
|
59
|
+
========================================= */
|
|
60
|
+
server.tool("answer_ivan", {
|
|
61
|
+
text: z.string().describe("Câu hỏi liên quan đến chứng thư số"),
|
|
62
|
+
}, async ({ text }) => {
|
|
63
|
+
return {
|
|
64
|
+
content: [
|
|
65
|
+
{
|
|
66
|
+
type: "text",
|
|
67
|
+
text: `[TOOL: answer_ivan]\nCâu hỏi: ${text}`,
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
/* =========================================
|
|
73
|
+
TOOL: answer_eqlhd
|
|
74
|
+
========================================= */
|
|
75
|
+
server.tool("answer_eqlhd", {
|
|
76
|
+
text: z.string().describe("Câu hỏi liên quan đến quản lý hóa đơn điện tử"),
|
|
77
|
+
}, async ({ text }) => {
|
|
78
|
+
return {
|
|
79
|
+
content: [
|
|
80
|
+
{
|
|
81
|
+
type: "text",
|
|
82
|
+
text: `[TOOL: answer_eqlhd]\nCâu hỏi: ${text}`,
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
};
|
|
86
|
+
});
|
|
87
|
+
/* =========================================
|
|
88
|
+
TOOL: answer_echungtu
|
|
89
|
+
========================================= */
|
|
90
|
+
server.tool("answer_echungtu", {
|
|
91
|
+
text: z.string().describe("Câu hỏi liên quan đến chứng từ điện tử"),
|
|
92
|
+
}, async ({ text }) => {
|
|
93
|
+
return {
|
|
94
|
+
content: [
|
|
95
|
+
{
|
|
96
|
+
type: "text",
|
|
97
|
+
text: `[TOOL: answer_echungtu]\nCâu hỏi: ${text}`,
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
|
+
/* =========================================
|
|
103
|
+
TOOL: answer_tvan
|
|
104
|
+
========================================= */
|
|
105
|
+
server.tool("answer_tvan", {
|
|
106
|
+
text: z.string().describe("Câu hỏi liên quan đến thuế điện tử"),
|
|
107
|
+
}, async ({ text }) => {
|
|
108
|
+
return {
|
|
109
|
+
content: [
|
|
110
|
+
{
|
|
111
|
+
type: "text",
|
|
112
|
+
text: `[TOOL: answer_tvan]\nCâu hỏi: ${text}`,
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
};
|
|
116
|
+
});
|
|
117
|
+
/* =========================================
|
|
118
|
+
START MCP SERVER
|
|
119
|
+
========================================= */
|
|
120
|
+
async function main() {
|
|
121
|
+
console.log("✅ MCP eservice server started");
|
|
122
|
+
const transport = new StdioServerTransport();
|
|
123
|
+
await server.connect(transport);
|
|
124
|
+
}
|
|
125
|
+
main().catch((err) => {
|
|
126
|
+
console.error("❌ Error starting server:", err);
|
|
127
|
+
process.exit(1);
|
|
128
|
+
});
|
|
129
|
+
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
|
|
7
|
+
/* =====================================================
|
|
8
|
+
INIT MCP SERVER
|
|
9
|
+
===================================================== */
|
|
10
|
+
const server = new McpServer({
|
|
11
|
+
name: "eservice",
|
|
12
|
+
version: "1.0.0",
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
/* =====================================================
|
|
16
|
+
TOOL: search_eservice
|
|
17
|
+
===================================================== */
|
|
18
|
+
server.tool(
|
|
19
|
+
"search_eservice",
|
|
20
|
+
"Tìm kiếm và định tuyến câu hỏi eService khi chưa xác định rõ lĩnh vực (hóa đơn điện tử, chứng từ điện tử, chữ ký số, TVAN…).",
|
|
21
|
+
{
|
|
22
|
+
text: z
|
|
23
|
+
.string()
|
|
24
|
+
.describe("Câu hỏi tổng quát của người dùng về hệ thống eService"),
|
|
25
|
+
},
|
|
26
|
+
async ({ text }) => ({
|
|
27
|
+
content: [
|
|
28
|
+
{
|
|
29
|
+
type: "text",
|
|
30
|
+
text: `[SEARCH_ESERVICE]\n${text}`,
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
})
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
/* =====================================================
|
|
37
|
+
TOOL: answer_ehoadon
|
|
38
|
+
===================================================== */
|
|
39
|
+
server.tool(
|
|
40
|
+
"answer_ehoadon",
|
|
41
|
+
"Trả lời các câu hỏi liên quan đến HÓA ĐƠN ĐIỆN TỬ: phát hành, tra cứu, điều chỉnh, thay thế, hủy hóa đơn theo quy định thuế Việt Nam.",
|
|
42
|
+
{
|
|
43
|
+
text: z
|
|
44
|
+
.string()
|
|
45
|
+
.describe("Câu hỏi cụ thể của người dùng về hóa đơn điện tử"),
|
|
46
|
+
},
|
|
47
|
+
async ({ text }) => ({
|
|
48
|
+
content: [
|
|
49
|
+
{
|
|
50
|
+
type: "text",
|
|
51
|
+
text: `[ANSWER_EHOADON]\n${text}`,
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
})
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
/* =====================================================
|
|
58
|
+
TOOL: answer_eqlhd
|
|
59
|
+
===================================================== */
|
|
60
|
+
server.tool(
|
|
61
|
+
"answer_eqlhd",
|
|
62
|
+
"Trả lời câu hỏi về QUẢN LÝ HÓA ĐƠN ĐIỆN TỬ: danh sách hóa đơn, trạng thái, báo cáo, phân quyền và xử lý sai sót.",
|
|
63
|
+
{
|
|
64
|
+
text: z
|
|
65
|
+
.string()
|
|
66
|
+
.describe("Câu hỏi của người dùng về quản lý hóa đơn điện tử"),
|
|
67
|
+
},
|
|
68
|
+
async ({ text }) => ({
|
|
69
|
+
content: [
|
|
70
|
+
{
|
|
71
|
+
type: "text",
|
|
72
|
+
text: `[ANSWER_EQLHD]\n${text}`,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
})
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
/* =====================================================
|
|
79
|
+
TOOL: answer_echungtu
|
|
80
|
+
===================================================== */
|
|
81
|
+
server.tool(
|
|
82
|
+
"answer_echungtu",
|
|
83
|
+
"Trả lời các câu hỏi về CHỨNG TỪ ĐIỆN TỬ: chứng từ khấu trừ thuế TNCN, chứng từ thuế theo Nghị định 123 và Thông tư 78.",
|
|
84
|
+
{
|
|
85
|
+
text: z
|
|
86
|
+
.string()
|
|
87
|
+
.describe("Câu hỏi chi tiết của người dùng về chứng từ điện tử"),
|
|
88
|
+
},
|
|
89
|
+
async ({ text }) => ({
|
|
90
|
+
content: [
|
|
91
|
+
{
|
|
92
|
+
type: "text",
|
|
93
|
+
text: `[ANSWER_ECHUNGTU]\n${text}`,
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
})
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
/* =====================================================
|
|
100
|
+
TOOL: answer_cks
|
|
101
|
+
===================================================== */
|
|
102
|
+
server.tool(
|
|
103
|
+
"answer_cks",
|
|
104
|
+
"Trả lời câu hỏi liên quan đến CHỮ KÝ SỐ: đăng ký, gia hạn, cài đặt và sử dụng trong hóa đơn điện tử và thuế điện tử.",
|
|
105
|
+
{
|
|
106
|
+
text: z.string().describe("Câu hỏi của người dùng về chữ ký số"),
|
|
107
|
+
},
|
|
108
|
+
async ({ text }) => ({
|
|
109
|
+
content: [
|
|
110
|
+
{
|
|
111
|
+
type: "text",
|
|
112
|
+
text: `[ANSWER_CKS]\n${text}`,
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
})
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
/* =====================================================
|
|
119
|
+
TOOL: answer_ivan
|
|
120
|
+
===================================================== */
|
|
121
|
+
server.tool(
|
|
122
|
+
"answer_ivan",
|
|
123
|
+
"Trả lời câu hỏi về dịch vụ IVAN – trung gian truyền nhận dữ liệu hóa đơn điện tử với cơ quan thuế.",
|
|
124
|
+
{
|
|
125
|
+
text: z
|
|
126
|
+
.string()
|
|
127
|
+
.describe("Câu hỏi của người dùng về dịch vụ IVAN hoặc chứng thư số"),
|
|
128
|
+
},
|
|
129
|
+
async ({ text }) => ({
|
|
130
|
+
content: [
|
|
131
|
+
{
|
|
132
|
+
type: "text",
|
|
133
|
+
text: `[ANSWER_IVAN]\n${text}`,
|
|
134
|
+
},
|
|
135
|
+
],
|
|
136
|
+
})
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
/* =====================================================
|
|
140
|
+
TOOL: answer_tvan
|
|
141
|
+
===================================================== */
|
|
142
|
+
server.tool(
|
|
143
|
+
"answer_tvan",
|
|
144
|
+
"Trả lời các câu hỏi về TVAN và THUẾ ĐIỆN TỬ: kê khai, nộp thuế, tra cứu tờ khai và nghĩa vụ thuế.",
|
|
145
|
+
{
|
|
146
|
+
text: z
|
|
147
|
+
.string()
|
|
148
|
+
.describe("Câu hỏi của người dùng về thuế điện tử hoặc TVAN"),
|
|
149
|
+
},
|
|
150
|
+
async ({ text }) => ({
|
|
151
|
+
content: [
|
|
152
|
+
{
|
|
153
|
+
type: "text",
|
|
154
|
+
text: `[ANSWER_TVAN]\n${text}`,
|
|
155
|
+
},
|
|
156
|
+
],
|
|
157
|
+
})
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
/* =====================================================
|
|
161
|
+
START MCP SERVER
|
|
162
|
+
===================================================== */
|
|
163
|
+
async function main() {
|
|
164
|
+
console.log("✅ MCP eService server started");
|
|
165
|
+
const transport = new StdioServerTransport();
|
|
166
|
+
await server.connect(transport);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
main().catch((err) => {
|
|
170
|
+
console.error("❌ Error starting MCP server:", err);
|
|
171
|
+
process.exit(1);
|
|
172
|
+
});
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "NodeNext",
|
|
5
|
+
"moduleResolution": "NodeNext",
|
|
6
|
+
"rootDir": "src",
|
|
7
|
+
"outDir": "build",
|
|
8
|
+
"types": [
|
|
9
|
+
"node"
|
|
10
|
+
],
|
|
11
|
+
"esModuleInterop": true,
|
|
12
|
+
"forceConsistentCasingInFileNames": true,
|
|
13
|
+
"strict": false,
|
|
14
|
+
"skipLibCheck": true
|
|
15
|
+
},
|
|
16
|
+
"include": [
|
|
17
|
+
"src"
|
|
18
|
+
]
|
|
19
|
+
}
|