@nestia/sdk 11.2.0 → 11.3.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/assets/bundle/distribute/package.json +1 -1
- package/lib/NestiaSdkApplication.js +17 -2
- package/lib/NestiaSdkApplication.js.map +1 -1
- package/lib/NestiaSwaggerComposer.js +2 -0
- package/lib/NestiaSwaggerComposer.js.map +1 -1
- package/lib/analyses/AccessorAnalyzer.d.ts +4 -1
- package/lib/analyses/AccessorAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectControllerAnalyzer.js +3 -2
- package/lib/analyses/ReflectControllerAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectMcpOperationAnalyzer.d.ts +20 -0
- package/lib/analyses/ReflectMcpOperationAnalyzer.js +84 -0
- package/lib/analyses/ReflectMcpOperationAnalyzer.js.map +1 -0
- package/lib/analyses/TypedMcpRouteAnalyzer.d.ts +15 -0
- package/lib/analyses/TypedMcpRouteAnalyzer.js +40 -0
- package/lib/analyses/TypedMcpRouteAnalyzer.js.map +1 -0
- package/lib/executable/internal/NestiaConfigLoader.js +3 -2
- package/lib/executable/internal/NestiaConfigLoader.js.map +1 -1
- package/lib/generates/SdkGenerator.js +48 -0
- package/lib/generates/SdkGenerator.js.map +1 -1
- package/lib/generates/internal/ImportDictionary.d.ts +1 -0
- package/lib/generates/internal/ImportDictionary.js +5 -4
- package/lib/generates/internal/ImportDictionary.js.map +1 -1
- package/lib/generates/internal/SdkDistributionComposer.d.ts +1 -0
- package/lib/generates/internal/SdkDistributionComposer.js +8 -1
- package/lib/generates/internal/SdkDistributionComposer.js.map +1 -1
- package/lib/generates/internal/SdkFileProgrammer.js +4 -1
- package/lib/generates/internal/SdkFileProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkMcpRouteProgrammer.d.ts +25 -0
- package/lib/generates/internal/SdkMcpRouteProgrammer.js +192 -0
- package/lib/generates/internal/SdkMcpRouteProgrammer.js.map +1 -0
- package/lib/generates/internal/SdkRouteDirectory.d.ts +2 -1
- package/lib/generates/internal/SdkRouteDirectory.js.map +1 -1
- package/lib/structures/IReflectController.d.ts +2 -1
- package/lib/structures/IReflectMcpOperation.d.ts +37 -0
- package/lib/structures/IReflectMcpOperation.js +3 -0
- package/lib/structures/IReflectMcpOperation.js.map +1 -0
- package/lib/structures/IReflectMcpOperationParameter.d.ts +21 -0
- package/lib/structures/IReflectMcpOperationParameter.js +3 -0
- package/lib/structures/IReflectMcpOperationParameter.js.map +1 -0
- package/lib/structures/ITypedApplication.d.ts +2 -1
- package/lib/structures/ITypedMcpRoute.d.ts +33 -0
- package/lib/structures/ITypedMcpRoute.js +3 -0
- package/lib/structures/ITypedMcpRoute.js.map +1 -0
- package/package.json +5 -4
- package/src/NestiaSdkApplication.ts +23 -3
- package/src/NestiaSwaggerComposer.ts +1 -0
- package/src/analyses/AccessorAnalyzer.ts +7 -10
- package/src/analyses/ReflectControllerAnalyzer.ts +8 -1
- package/src/analyses/ReflectMcpOperationAnalyzer.ts +124 -0
- package/src/analyses/TypedMcpRouteAnalyzer.ts +40 -0
- package/src/executable/internal/NestiaConfigLoader.ts +2 -1
- package/src/generates/SdkGenerator.ts +55 -0
- package/src/generates/internal/ImportDictionary.ts +10 -8
- package/src/generates/internal/SdkDistributionComposer.ts +6 -0
- package/src/generates/internal/SdkFileProgrammer.ts +6 -2
- package/src/generates/internal/SdkMcpRouteProgrammer.ts +469 -0
- package/src/generates/internal/SdkRouteDirectory.ts +4 -1
- package/src/structures/IReflectController.ts +4 -1
- package/src/structures/IReflectMcpOperation.ts +40 -0
- package/src/structures/IReflectMcpOperationParameter.ts +29 -0
- package/src/structures/ITypedApplication.ts +2 -1
- package/src/structures/ITypedMcpRoute.ts +35 -0
|
@@ -74,6 +74,8 @@ var SdkDistributionComposer;
|
|
|
74
74
|
execute("npm install --save-dev rimraf");
|
|
75
75
|
execute(`npm install --save @nestia/fetcher@${v.version}`);
|
|
76
76
|
execute(`npm install --save typia@${v.typia}`);
|
|
77
|
+
if (props.mcp)
|
|
78
|
+
execute(`npm install --save @modelcontextprotocol/sdk@${v["@modelcontextprotocol/sdk"]}`);
|
|
77
79
|
if (props.websocket)
|
|
78
80
|
execute(`npm install --save tgrid@${v.tgrid}`);
|
|
79
81
|
execute("npx typia setup --manager npm");
|
|
@@ -108,7 +110,12 @@ var SdkDistributionComposer;
|
|
|
108
110
|
const dependencies = () => __awaiter(this, void 0, void 0, function* () {
|
|
109
111
|
const content = yield fs_1.default.promises.readFile(__dirname + "/../../../package.json", "utf8");
|
|
110
112
|
const json = JSON.parse(content);
|
|
111
|
-
return (() => { const _io0 = input => "string" === typeof input.version && "string" === typeof input.typia && "string" === typeof input.tgrid; const _ao0 = (input, _path, _exceptionable = true) => ("string" === typeof input
|
|
113
|
+
return (() => { const _io0 = input => "string" === typeof input["@modelcontextprotocol/sdk"] && "string" === typeof input.version && "string" === typeof input.typia && "string" === typeof input.tgrid; const _ao0 = (input, _path, _exceptionable = true) => ("string" === typeof input["@modelcontextprotocol/sdk"] || __typia_transform__assertGuard._assertGuard(_exceptionable, {
|
|
114
|
+
method: "typia.assert",
|
|
115
|
+
path: _path + "[\"@modelcontextprotocol/sdk\"]",
|
|
116
|
+
expected: "string",
|
|
117
|
+
value: input["@modelcontextprotocol/sdk"]
|
|
118
|
+
}, _errorFactory)) && ("string" === typeof input.version || __typia_transform__assertGuard._assertGuard(_exceptionable, {
|
|
112
119
|
method: "typia.assert",
|
|
113
120
|
path: _path + ".version",
|
|
114
121
|
expected: "string",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SdkDistributionComposer.js","sourceRoot":"","sources":["../../../src/generates/internal/SdkDistributionComposer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kEAA+B;AAC/B,4CAAoB;AACpB,gDAAwB;AACxB,kDAA0B;AAI1B,IAAiB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"SdkDistributionComposer.js","sourceRoot":"","sources":["../../../src/generates/internal/SdkDistributionComposer.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ const MapUtil_1 = require("../../utils/MapUtil");
|
|
|
19
19
|
const FilePrinter_1 = require("./FilePrinter");
|
|
20
20
|
const ImportDictionary_1 = require("./ImportDictionary");
|
|
21
21
|
const SdkHttpRouteProgrammer_1 = require("./SdkHttpRouteProgrammer");
|
|
22
|
+
const SdkMcpRouteProgrammer_1 = require("./SdkMcpRouteProgrammer");
|
|
22
23
|
const SdkRouteDirectory_1 = require("./SdkRouteDirectory");
|
|
23
24
|
const SdkWebSocketRouteProgrammer_1 = require("./SdkWebSocketRouteProgrammer");
|
|
24
25
|
var SdkFileProgrammer;
|
|
@@ -66,7 +67,9 @@ var SdkFileProgrammer;
|
|
|
66
67
|
importer.declarations(route.imports);
|
|
67
68
|
statements.push(...(route.protocol === "http"
|
|
68
69
|
? SdkHttpRouteProgrammer_1.SdkHttpRouteProgrammer.write(project)(importer)(route)
|
|
69
|
-
:
|
|
70
|
+
: route.protocol === "websocket"
|
|
71
|
+
? SdkWebSocketRouteProgrammer_1.SdkWebSocketRouteProgrammer.write(project)(importer)(route)
|
|
72
|
+
: SdkMcpRouteProgrammer_1.SdkMcpRouteProgrammer.write(project)(importer)(route)));
|
|
70
73
|
if (i !== directory.routes.length - 1)
|
|
71
74
|
statements.push(FilePrinter_1.FilePrinter.enter());
|
|
72
75
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SdkFileProgrammer.js","sourceRoot":"","sources":["../../../src/generates/internal/SdkFileProgrammer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,4DAA4B;
|
|
1
|
+
{"version":3,"file":"SdkFileProgrammer.js","sourceRoot":"","sources":["../../../src/generates/internal/SdkFileProgrammer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { INestiaProject } from "../../structures/INestiaProject";
|
|
3
|
+
import { ITypedMcpRoute } from "../../structures/ITypedMcpRoute";
|
|
4
|
+
import { ImportDictionary } from "./ImportDictionary";
|
|
5
|
+
/**
|
|
6
|
+
* Emits a typed client wrapper for an MCP tool.
|
|
7
|
+
*
|
|
8
|
+
* Output mirrors `SdkHttpRouteProgrammer` conventions: a top-level async
|
|
9
|
+
* function paired with a namespace that exposes `Input`, `Output`, and
|
|
10
|
+
* `METADATA`. Object output types are wrapped in `Primitive<T>` from typia
|
|
11
|
+
* because MCP round-trips values through JSON, matching the semantics of
|
|
12
|
+
* `Primitive`. Void MCP tools return `Promise<void>`.
|
|
13
|
+
*
|
|
14
|
+
* The response is typed via `CallToolResult` from `@modelcontextprotocol/sdk`
|
|
15
|
+
* and narrowed structurally (`isError === true`, `type === "text"`) rather than
|
|
16
|
+
* asserted with `as any`. The single unavoidable cast is on the `arguments`
|
|
17
|
+
* field of `client.callTool(...)`, which the MCP SDK types as `Record<string,
|
|
18
|
+
* unknown> | undefined`; a user interface without an index signature is not
|
|
19
|
+
* structurally assignable to that record.
|
|
20
|
+
*
|
|
21
|
+
* @author wildduck - https://github.com/wildduck2
|
|
22
|
+
*/
|
|
23
|
+
export declare namespace SdkMcpRouteProgrammer {
|
|
24
|
+
const write: (project: INestiaProject) => (importer: ImportDictionary) => (route: ITypedMcpRoute) => ts.Statement[];
|
|
25
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SdkMcpRouteProgrammer = void 0;
|
|
7
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
8
|
+
const FilePrinter_1 = require("./FilePrinter");
|
|
9
|
+
/**
|
|
10
|
+
* Emits a typed client wrapper for an MCP tool.
|
|
11
|
+
*
|
|
12
|
+
* Output mirrors `SdkHttpRouteProgrammer` conventions: a top-level async
|
|
13
|
+
* function paired with a namespace that exposes `Input`, `Output`, and
|
|
14
|
+
* `METADATA`. Object output types are wrapped in `Primitive<T>` from typia
|
|
15
|
+
* because MCP round-trips values through JSON, matching the semantics of
|
|
16
|
+
* `Primitive`. Void MCP tools return `Promise<void>`.
|
|
17
|
+
*
|
|
18
|
+
* The response is typed via `CallToolResult` from `@modelcontextprotocol/sdk`
|
|
19
|
+
* and narrowed structurally (`isError === true`, `type === "text"`) rather than
|
|
20
|
+
* asserted with `as any`. The single unavoidable cast is on the `arguments`
|
|
21
|
+
* field of `client.callTool(...)`, which the MCP SDK types as `Record<string,
|
|
22
|
+
* unknown> | undefined`; a user interface without an index signature is not
|
|
23
|
+
* structurally assignable to that record.
|
|
24
|
+
*
|
|
25
|
+
* @author wildduck - https://github.com/wildduck2
|
|
26
|
+
*/
|
|
27
|
+
var SdkMcpRouteProgrammer;
|
|
28
|
+
(function (SdkMcpRouteProgrammer) {
|
|
29
|
+
SdkMcpRouteProgrammer.write = (project) => (importer) => (route) => [
|
|
30
|
+
FilePrinter_1.FilePrinter.description(writeFunction(project)(importer)(route), writeDescription(route)),
|
|
31
|
+
writeNamespace(project)(importer)(route),
|
|
32
|
+
];
|
|
33
|
+
/* ---------------------------------------------------------
|
|
34
|
+
FUNCTION
|
|
35
|
+
--------------------------------------------------------- */
|
|
36
|
+
const writeFunction = (_project) => (importer) => (route) => {
|
|
37
|
+
const clientType = typescript_1.default.factory.createTypeReferenceNode(importer.external({
|
|
38
|
+
declaration: true,
|
|
39
|
+
file: "@modelcontextprotocol/sdk/client/index.js",
|
|
40
|
+
type: "element",
|
|
41
|
+
name: "Client",
|
|
42
|
+
alias: "McpClient",
|
|
43
|
+
}));
|
|
44
|
+
const callToolResultTypeName = importer.external({
|
|
45
|
+
declaration: true,
|
|
46
|
+
file: "@modelcontextprotocol/sdk/types.js",
|
|
47
|
+
type: "element",
|
|
48
|
+
name: "CallToolResult",
|
|
49
|
+
alias: "McpCallToolResult",
|
|
50
|
+
});
|
|
51
|
+
const isVoid = isVoidReturn(route);
|
|
52
|
+
// Register Primitive import so Output type resolves.
|
|
53
|
+
if (!isVoid)
|
|
54
|
+
importer.external({
|
|
55
|
+
declaration: true,
|
|
56
|
+
file: "typia",
|
|
57
|
+
type: "element",
|
|
58
|
+
name: "Primitive",
|
|
59
|
+
});
|
|
60
|
+
const inputRef = route.input
|
|
61
|
+
? typescript_1.default.factory.createTypeReferenceNode(`${route.name}.Input`)
|
|
62
|
+
: typescript_1.default.factory.createTypeLiteralNode([]);
|
|
63
|
+
const outputRef = typescript_1.default.factory.createTypeReferenceNode(`${route.name}.Output`);
|
|
64
|
+
const params = [
|
|
65
|
+
typescript_1.default.factory.createParameterDeclaration(undefined, undefined, "client", undefined, clientType),
|
|
66
|
+
];
|
|
67
|
+
if (route.input) {
|
|
68
|
+
params.push(typescript_1.default.factory.createParameterDeclaration(undefined, undefined, "args", undefined, inputRef));
|
|
69
|
+
}
|
|
70
|
+
const toolNameExpr = typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier(route.name), "METADATA"), "tool");
|
|
71
|
+
const callToolParams = [
|
|
72
|
+
typescript_1.default.factory.createPropertyAssignment("name", toolNameExpr),
|
|
73
|
+
];
|
|
74
|
+
if (route.input) {
|
|
75
|
+
callToolParams.push(typescript_1.default.factory.createPropertyAssignment("arguments", typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createIdentifier("args"), typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword)), typescript_1.default.factory.createTypeReferenceNode("Record", [
|
|
76
|
+
typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.StringKeyword),
|
|
77
|
+
typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword),
|
|
78
|
+
]))));
|
|
79
|
+
}
|
|
80
|
+
const body = typescript_1.default.factory.createBlock([
|
|
81
|
+
// const raw = await client.callTool({ ... });
|
|
82
|
+
// NOTE: callTool returns `CallToolResult | CompatibilityCallToolResult`
|
|
83
|
+
// (the pre-2024-11-05 compat variant has `toolResult`, no
|
|
84
|
+
// `content`). TypeScript cannot narrow the union structurally
|
|
85
|
+
// because both variants carry an `[x: string]: unknown` index
|
|
86
|
+
// signature. Branch at runtime, then cast to CallToolResult
|
|
87
|
+
// once for the modern path.
|
|
88
|
+
typescript_1.default.factory.createVariableStatement(undefined, typescript_1.default.factory.createVariableDeclarationList([
|
|
89
|
+
typescript_1.default.factory.createVariableDeclaration("raw", undefined, undefined, typescript_1.default.factory.createAwaitExpression(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("client"), "callTool"), undefined, [
|
|
90
|
+
typescript_1.default.factory.createObjectLiteralExpression(callToolParams, true),
|
|
91
|
+
]))),
|
|
92
|
+
], typescript_1.default.NodeFlags.Const)),
|
|
93
|
+
// if ("toolResult" in raw) throw ...;
|
|
94
|
+
typescript_1.default.factory.createIfStatement(typescript_1.default.factory.createBinaryExpression(typescript_1.default.factory.createStringLiteral("toolResult"), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.InKeyword), typescript_1.default.factory.createIdentifier("raw")), typescript_1.default.factory.createThrowStatement(typescript_1.default.factory.createNewExpression(typescript_1.default.factory.createIdentifier("Error"), undefined, [
|
|
95
|
+
typescript_1.default.factory.createTemplateExpression(typescript_1.default.factory.createTemplateHead('MCP tool "'), [
|
|
96
|
+
typescript_1.default.factory.createTemplateSpan(toolNameExpr, typescript_1.default.factory.createTemplateTail('" returned a legacy (pre-2024-11-05) compatibility result')),
|
|
97
|
+
]),
|
|
98
|
+
]))),
|
|
99
|
+
// const result: CallToolResult = raw;
|
|
100
|
+
// Safe: preceding branch rejected the compat variant.
|
|
101
|
+
typescript_1.default.factory.createVariableStatement(undefined, typescript_1.default.factory.createVariableDeclarationList([
|
|
102
|
+
typescript_1.default.factory.createVariableDeclaration("result", undefined, typescript_1.default.factory.createTypeReferenceNode(callToolResultTypeName), typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createIdentifier("raw"), typescript_1.default.factory.createTypeReferenceNode(callToolResultTypeName))),
|
|
103
|
+
], typescript_1.default.NodeFlags.Const)),
|
|
104
|
+
// if (result.isError === true) throw ...;
|
|
105
|
+
typescript_1.default.factory.createIfStatement(typescript_1.default.factory.createBinaryExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("result"), "isError"), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsEqualsEqualsToken), typescript_1.default.factory.createTrue()), typescript_1.default.factory.createThrowStatement(typescript_1.default.factory.createNewExpression(typescript_1.default.factory.createIdentifier("Error"), undefined, [
|
|
106
|
+
typescript_1.default.factory.createTemplateExpression(typescript_1.default.factory.createTemplateHead('MCP tool "'), [
|
|
107
|
+
typescript_1.default.factory.createTemplateSpan(toolNameExpr, typescript_1.default.factory.createTemplateTail('" returned isError')),
|
|
108
|
+
]),
|
|
109
|
+
]))),
|
|
110
|
+
...(isVoid
|
|
111
|
+
? [typescript_1.default.factory.createReturnStatement()]
|
|
112
|
+
: [
|
|
113
|
+
// const first = result.content[0];
|
|
114
|
+
typescript_1.default.factory.createVariableStatement(undefined, typescript_1.default.factory.createVariableDeclarationList([
|
|
115
|
+
typescript_1.default.factory.createVariableDeclaration("first", undefined, undefined, typescript_1.default.factory.createElementAccessExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("result"), "content"), typescript_1.default.factory.createNumericLiteral(0))),
|
|
116
|
+
], typescript_1.default.NodeFlags.Const)),
|
|
117
|
+
typescript_1.default.factory.createIfStatement(typescript_1.default.factory.createBinaryExpression(typescript_1.default.factory.createBinaryExpression(typescript_1.default.factory.createIdentifier("first"), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsEqualsEqualsToken), typescript_1.default.factory.createIdentifier("undefined")), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.BarBarToken), typescript_1.default.factory.createBinaryExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("first"), "type"), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.ExclamationEqualsEqualsToken), typescript_1.default.factory.createStringLiteral("text"))), typescript_1.default.factory.createThrowStatement(typescript_1.default.factory.createNewExpression(typescript_1.default.factory.createIdentifier("Error"), undefined, [
|
|
118
|
+
typescript_1.default.factory.createTemplateExpression(typescript_1.default.factory.createTemplateHead('MCP tool "'), [
|
|
119
|
+
typescript_1.default.factory.createTemplateSpan(toolNameExpr, typescript_1.default.factory.createTemplateTail('" returned no text content')),
|
|
120
|
+
]),
|
|
121
|
+
]))),
|
|
122
|
+
typescript_1.default.factory.createReturnStatement(typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("JSON"), "parse"), undefined, [
|
|
123
|
+
typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("first"), "text"),
|
|
124
|
+
]), outputRef)),
|
|
125
|
+
]),
|
|
126
|
+
], true);
|
|
127
|
+
return typescript_1.default.factory.createFunctionDeclaration([
|
|
128
|
+
typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword),
|
|
129
|
+
typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.AsyncKeyword),
|
|
130
|
+
], undefined, route.name, undefined, params, typescript_1.default.factory.createTypeReferenceNode("Promise", [outputRef]), body);
|
|
131
|
+
};
|
|
132
|
+
/* ---------------------------------------------------------
|
|
133
|
+
NAMESPACE
|
|
134
|
+
--------------------------------------------------------- */
|
|
135
|
+
const writeNamespace = (_project) => (importer) => (route) => {
|
|
136
|
+
const statements = [];
|
|
137
|
+
// Input type alias
|
|
138
|
+
if (route.input) {
|
|
139
|
+
statements.push(typescript_1.default.factory.createTypeAliasDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], "Input", undefined, typescript_1.default.factory.createTypeReferenceNode(route.input.type.name)));
|
|
140
|
+
}
|
|
141
|
+
// Output type alias
|
|
142
|
+
const isVoid = isVoidReturn(route);
|
|
143
|
+
const outputType = !isVoid && route.returnType !== null
|
|
144
|
+
? typescript_1.default.factory.createTypeReferenceNode(importer.external({
|
|
145
|
+
declaration: true,
|
|
146
|
+
file: "typia",
|
|
147
|
+
type: "element",
|
|
148
|
+
name: "Primitive",
|
|
149
|
+
}), [
|
|
150
|
+
typescript_1.default.factory.createTypeReferenceNode(unwrapPromise(route.returnType.name)),
|
|
151
|
+
])
|
|
152
|
+
: typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.VoidKeyword);
|
|
153
|
+
statements.push(typescript_1.default.factory.createTypeAliasDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], "Output", undefined, outputType));
|
|
154
|
+
// METADATA const
|
|
155
|
+
const metadataProps = [
|
|
156
|
+
typescript_1.default.factory.createPropertyAssignment("protocol", typescript_1.default.factory.createStringLiteral("mcp")),
|
|
157
|
+
typescript_1.default.factory.createPropertyAssignment("tool", typescript_1.default.factory.createStringLiteral(route.toolName)),
|
|
158
|
+
typescript_1.default.factory.createPropertyAssignment("title", route.title === null
|
|
159
|
+
? typescript_1.default.factory.createNull()
|
|
160
|
+
: typescript_1.default.factory.createStringLiteral(route.title)),
|
|
161
|
+
typescript_1.default.factory.createPropertyAssignment("description", route.toolDescription === null
|
|
162
|
+
? typescript_1.default.factory.createNull()
|
|
163
|
+
: typescript_1.default.factory.createStringLiteral(route.toolDescription)),
|
|
164
|
+
];
|
|
165
|
+
statements.push(typescript_1.default.factory.createVariableStatement([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createVariableDeclarationList([
|
|
166
|
+
typescript_1.default.factory.createVariableDeclaration("METADATA", undefined, undefined, typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createObjectLiteralExpression(metadataProps, true), typescript_1.default.factory.createTypeReferenceNode("const"))),
|
|
167
|
+
], typescript_1.default.NodeFlags.Const)));
|
|
168
|
+
return typescript_1.default.factory.createModuleDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createIdentifier(route.name), typescript_1.default.factory.createModuleBlock(statements), typescript_1.default.NodeFlags.Namespace);
|
|
169
|
+
};
|
|
170
|
+
/* ---------------------------------------------------------
|
|
171
|
+
DESCRIPTION
|
|
172
|
+
--------------------------------------------------------- */
|
|
173
|
+
const writeDescription = (route) => {
|
|
174
|
+
const lines = [];
|
|
175
|
+
if (route.toolDescription)
|
|
176
|
+
lines.push(...route.toolDescription.split("\n"));
|
|
177
|
+
else if (route.description)
|
|
178
|
+
lines.push(...route.description.split("\n"));
|
|
179
|
+
if (lines.length)
|
|
180
|
+
lines.push("");
|
|
181
|
+
lines.push(`@controller ${route.controller.class.name}.${route.function.name || route.name}`, `@tool ${route.toolName}`, `@accessor ${["api", "functional", ...route.accessor].join(".")}`, `@protocol mcp`, `@nestia Generated by Nestia - https://github.com/samchon/nestia`);
|
|
182
|
+
return lines.join("\n");
|
|
183
|
+
};
|
|
184
|
+
const unwrapPromise = (name) => {
|
|
185
|
+
const m = /^Promise<(.+)>$/.exec(name);
|
|
186
|
+
return m ? m[1] : name;
|
|
187
|
+
};
|
|
188
|
+
const isVoidReturn = (route) => route.returnType === null ||
|
|
189
|
+
isVoidName(unwrapPromise(route.returnType.name));
|
|
190
|
+
const isVoidName = (name) => name === "void" || name === "undefined";
|
|
191
|
+
})(SdkMcpRouteProgrammer || (exports.SdkMcpRouteProgrammer = SdkMcpRouteProgrammer = {}));
|
|
192
|
+
//# sourceMappingURL=SdkMcpRouteProgrammer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SdkMcpRouteProgrammer.js","sourceRoot":"","sources":["../../../src/generates/internal/SdkMcpRouteProgrammer.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA4B;AAI5B,+CAA4C;AAG5C;;;;;;;;;;;;;;;;;GAiBG;AACH,IAAiB,qBAAqB,CA2brC;AA3bD,WAAiB,qBAAqB;IACvB,2BAAK,GAChB,CAAC,OAAuB,EAAE,EAAE,CAC5B,CAAC,QAA0B,EAAE,EAAE,CAC/B,CAAC,KAAqB,EAAkB,EAAE,CAAC;QACzC,yBAAW,CAAC,WAAW,CACrB,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EACvC,gBAAgB,CAAC,KAAK,CAAC,CACxB;QACD,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;KACzC,CAAC;IAEJ;;gEAE4D;IAC5D,MAAM,aAAa,GACjB,CAAC,QAAwB,EAAE,EAAE,CAC7B,CAAC,QAA0B,EAAE,EAAE,CAC/B,CAAC,KAAqB,EAA0B,EAAE;QAChD,MAAM,UAAU,GAAG,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CACnD,QAAQ,CAAC,QAAQ,CAAC;YAChB,WAAW,EAAE,IAAI;YACjB,IAAI,EAAE,2CAA2C;YACjD,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,WAAW;SACnB,CAAC,CACH,CAAC;QACF,MAAM,sBAAsB,GAAG,QAAQ,CAAC,QAAQ,CAAC;YAC/C,WAAW,EAAE,IAAI;YACjB,IAAI,EAAE,oCAAoC;YAC1C,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,mBAAmB;SAC3B,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,qDAAqD;QACrD,IAAI,CAAC,MAAM;YACT,QAAQ,CAAC,QAAQ,CAAC;gBAChB,WAAW,EAAE,IAAI;gBACjB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,WAAW;aAClB,CAAC,CAAC;QAEL,MAAM,QAAQ,GAAgB,KAAK,CAAC,KAAK;YACvC,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,GAAG,KAAK,CAAC,IAAI,QAAQ,CAAC;YAC3D,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,SAAS,GAAgB,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAC/D,GAAG,KAAK,CAAC,IAAI,SAAS,CACvB,CAAC;QAEF,MAAM,MAAM,GAA8B;YACxC,oBAAE,CAAC,OAAO,CAAC,0BAA0B,CACnC,SAAS,EACT,SAAS,EACT,QAAQ,EACR,SAAS,EACT,UAAU,CACX;SACF,CAAC;QACF,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CACT,oBAAE,CAAC,OAAO,CAAC,0BAA0B,CACnC,SAAS,EACT,SAAS,EACT,MAAM,EACN,SAAS,EACT,QAAQ,CACT,CACF,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,oBAAE,CAAC,OAAO,CAAC,8BAA8B,CAC5D,oBAAE,CAAC,OAAO,CAAC,8BAA8B,CACvC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,EACvC,UAAU,CACX,EACD,MAAM,CACP,CAAC;QAEF,MAAM,cAAc,GAAkC;YACpD,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC;SAC1D,CAAC;QACF,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,cAAc,CAAC,IAAI,CACjB,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACjC,WAAW,EACX,oBAAE,CAAC,OAAO,CAAC,kBAAkB,CAC3B,oBAAE,CAAC,OAAO,CAAC,kBAAkB,CAC3B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACnC,oBAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,oBAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAC/D,EACD,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,QAAQ,EAAE;gBAC3C,oBAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,oBAAE,CAAC,UAAU,CAAC,aAAa,CAAC;gBAC7D,oBAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,oBAAE,CAAC,UAAU,CAAC,cAAc,CAAC;aAC/D,CAAC,CACH,CACF,CACF,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,oBAAE,CAAC,OAAO,CAAC,WAAW,CACjC;YACE,8CAA8C;YAC9C,wEAAwE;YACxE,gEAAgE;YAChE,oEAAoE;YACpE,oEAAoE;YACpE,kEAAkE;YAClE,kCAAkC;YAClC,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAChC,SAAS,EACT,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CACtC;gBACE,oBAAE,CAAC,OAAO,CAAC,yBAAyB,CAClC,KAAK,EACL,SAAS,EACT,SAAS,EACT,oBAAE,CAAC,OAAO,CAAC,qBAAqB,CAC9B,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAC7B,oBAAE,CAAC,OAAO,CAAC,8BAA8B,CACvC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EACrC,UAAU,CACX,EACD,SAAS,EACT;oBACE,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CACtC,cAAc,EACd,IAAI,CACL;iBACF,CACF,CACF,CACF;aACF,EACD,oBAAE,CAAC,SAAS,CAAC,KAAK,CACnB,CACF;YACD,sCAAsC;YACtC,oBAAE,CAAC,OAAO,CAAC,iBAAiB,CAC1B,oBAAE,CAAC,OAAO,CAAC,sBAAsB,CAC/B,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAC5C,oBAAE,CAAC,OAAO,CAAC,WAAW,CAAC,oBAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAC/C,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CACnC,EACD,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAC7B,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAC5B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EACpC,SAAS,EACT;gBACE,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACjC,oBAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAC3C;oBACE,oBAAE,CAAC,OAAO,CAAC,kBAAkB,CAC3B,YAAY,EACZ,oBAAE,CAAC,OAAO,CAAC,kBAAkB,CAC3B,2DAA2D,CAC5D,CACF;iBACF,CACF;aACF,CACF,CACF,CACF;YACD,sCAAsC;YACtC,wDAAwD;YACxD,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAChC,SAAS,EACT,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CACtC;gBACE,oBAAE,CAAC,OAAO,CAAC,yBAAyB,CAClC,QAAQ,EACR,SAAS,EACT,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,EAC1D,oBAAE,CAAC,OAAO,CAAC,kBAAkB,CAC3B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAClC,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,CAC3D,CACF;aACF,EACD,oBAAE,CAAC,SAAS,CAAC,KAAK,CACnB,CACF;YACD,0CAA0C;YAC1C,oBAAE,CAAC,OAAO,CAAC,iBAAiB,CAC1B,oBAAE,CAAC,OAAO,CAAC,sBAAsB,CAC/B,oBAAE,CAAC,OAAO,CAAC,8BAA8B,CACvC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EACrC,SAAS,CACV,EACD,oBAAE,CAAC,OAAO,CAAC,WAAW,CAAC,oBAAE,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAC7D,oBAAE,CAAC,OAAO,CAAC,UAAU,EAAE,CACxB,EACD,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAC7B,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAC5B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EACpC,SAAS,EACT;gBACE,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACjC,oBAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAC3C;oBACE,oBAAE,CAAC,OAAO,CAAC,kBAAkB,CAC3B,YAAY,EACZ,oBAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CACpD;iBACF,CACF;aACF,CACF,CACF,CACF;YACD,GAAG,CAAC,MAAM;gBACR,CAAC,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;gBACtC,CAAC,CAAC;oBACE,mCAAmC;oBACnC,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAChC,SAAS,EACT,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CACtC;wBACE,oBAAE,CAAC,OAAO,CAAC,yBAAyB,CAClC,OAAO,EACP,SAAS,EACT,SAAS,EACT,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CACtC,oBAAE,CAAC,OAAO,CAAC,8BAA8B,CACvC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EACrC,SAAS,CACV,EACD,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CACnC,CACF;qBACF,EACD,oBAAE,CAAC,SAAS,CAAC,KAAK,CACnB,CACF;oBACD,oBAAE,CAAC,OAAO,CAAC,iBAAiB,CAC1B,oBAAE,CAAC,OAAO,CAAC,sBAAsB,CAC/B,oBAAE,CAAC,OAAO,CAAC,sBAAsB,CAC/B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EACpC,oBAAE,CAAC,OAAO,CAAC,WAAW,CACpB,oBAAE,CAAC,UAAU,CAAC,uBAAuB,CACtC,EACD,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,CACzC,EACD,oBAAE,CAAC,OAAO,CAAC,WAAW,CAAC,oBAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EACjD,oBAAE,CAAC,OAAO,CAAC,sBAAsB,CAC/B,oBAAE,CAAC,OAAO,CAAC,8BAA8B,CACvC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EACpC,MAAM,CACP,EACD,oBAAE,CAAC,OAAO,CAAC,WAAW,CACpB,oBAAE,CAAC,UAAU,CAAC,4BAA4B,CAC3C,EACD,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CACvC,CACF,EACD,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAC7B,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAC5B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EACpC,SAAS,EACT;wBACE,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACjC,oBAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAC3C;4BACE,oBAAE,CAAC,OAAO,CAAC,kBAAkB,CAC3B,YAAY,EACZ,oBAAE,CAAC,OAAO,CAAC,kBAAkB,CAC3B,4BAA4B,CAC7B,CACF;yBACF,CACF;qBACF,CACF,CACF,CACF;oBACD,oBAAE,CAAC,OAAO,CAAC,qBAAqB,CAC9B,oBAAE,CAAC,OAAO,CAAC,kBAAkB,CAC3B,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAC7B,oBAAE,CAAC,OAAO,CAAC,8BAA8B,CACvC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACnC,OAAO,CACR,EACD,SAAS,EACT;wBACE,oBAAE,CAAC,OAAO,CAAC,8BAA8B,CACvC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EACpC,MAAM,CACP;qBACF,CACF,EACD,SAAS,CACV,CACF;iBACF,CAAC;SACP,EACD,IAAI,CACL,CAAC;QAEF,OAAO,oBAAE,CAAC,OAAO,CAAC,yBAAyB,CACzC;YACE,oBAAE,CAAC,OAAO,CAAC,cAAc,CAAC,oBAAE,CAAC,UAAU,CAAC,aAAa,CAAC;YACtD,oBAAE,CAAC,OAAO,CAAC,cAAc,CAAC,oBAAE,CAAC,UAAU,CAAC,YAAY,CAAC;SACtD,EACD,SAAS,EACT,KAAK,CAAC,IAAI,EACV,SAAS,EACT,MAAM,EACN,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC,EAC1D,IAAI,CACL,CAAC;IACJ,CAAC,CAAC;IAEJ;;gEAE4D;IAC5D,MAAM,cAAc,GAClB,CAAC,QAAwB,EAAE,EAAE,CAC7B,CAAC,QAA0B,EAAE,EAAE,CAC/B,CAAC,KAAqB,EAAwB,EAAE;QAC9C,MAAM,UAAU,GAAmB,EAAE,CAAC;QAEtC,mBAAmB;QACnB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,UAAU,CAAC,IAAI,CACb,oBAAE,CAAC,OAAO,CAAC,0BAA0B,CACnC,CAAC,oBAAE,CAAC,OAAO,CAAC,cAAc,CAAC,oBAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,EACxD,OAAO,EACP,SAAS,EACT,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAC1D,CACF,CAAC;QACJ,CAAC;QAED,oBAAoB;QACpB,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,UAAU,GACd,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI;YAClC,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAChC,QAAQ,CAAC,QAAQ,CAAC;gBAChB,WAAW,EAAE,IAAI;gBACjB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,WAAW;aAClB,CAAC,EACF;gBACE,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAChC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CACrC;aACF,CACF;YACH,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,oBAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAClE,UAAU,CAAC,IAAI,CACb,oBAAE,CAAC,OAAO,CAAC,0BAA0B,CACnC,CAAC,oBAAE,CAAC,OAAO,CAAC,cAAc,CAAC,oBAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,EACxD,QAAQ,EACR,SAAS,EACT,UAAU,CACX,CACF,CAAC;QAEF,iBAAiB;QACjB,MAAM,aAAa,GAAkC;YACnD,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACjC,UAAU,EACV,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CACtC;YACD,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACjC,MAAM,EACN,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAC/C;YACD,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACjC,OAAO,EACP,KAAK,CAAC,KAAK,KAAK,IAAI;gBAClB,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,UAAU,EAAE;gBACzB,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAChD;YACD,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACjC,aAAa,EACb,KAAK,CAAC,eAAe,KAAK,IAAI;gBAC5B,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,UAAU,EAAE;gBACzB,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,eAAe,CAAC,CAC1D;SACF,CAAC;QACF,UAAU,CAAC,IAAI,CACb,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAChC,CAAC,oBAAE,CAAC,OAAO,CAAC,cAAc,CAAC,oBAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,EACxD,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CACtC;YACE,oBAAE,CAAC,OAAO,CAAC,yBAAyB,CAClC,UAAU,EACV,SAAS,EACT,SAAS,EACT,oBAAE,CAAC,OAAO,CAAC,kBAAkB,CAC3B,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC,aAAa,EAAE,IAAI,CAAC,EAC7D,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAC5C,CACF;SACF,EACD,oBAAE,CAAC,SAAS,CAAC,KAAK,CACnB,CACF,CACF,CAAC;QAEF,OAAO,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CACvC,CAAC,oBAAE,CAAC,OAAO,CAAC,cAAc,CAAC,oBAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,EACxD,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,EACvC,oBAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,EACxC,oBAAE,CAAC,SAAS,CAAC,SAAS,CACvB,CAAC;IACJ,CAAC,CAAC;IAEJ;;gEAE4D;IAC5D,MAAM,gBAAgB,GAAG,CAAC,KAAqB,EAAU,EAAE;QACzD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,eAAe;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;aACvE,IAAI,KAAK,CAAC,WAAW;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACzE,IAAI,KAAK,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CACR,eAAe,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,EACjF,SAAS,KAAK,CAAC,QAAQ,EAAE,EACzB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EACjE,eAAe,EACf,iEAAiE,CAClE,CAAC;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAU,EAAE;QAC7C,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,KAAqB,EAAW,EAAE,CACtD,KAAK,CAAC,UAAU,KAAK,IAAI;QACzB,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnD,MAAM,UAAU,GAAG,CAAC,IAAY,EAAW,EAAE,CAC3C,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,WAAW,CAAC;AAC5C,CAAC,EA3bgB,qBAAqB,qCAArB,qBAAqB,QA2brC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { ITypedHttpRoute } from "../../structures/ITypedHttpRoute";
|
|
2
|
+
import { ITypedMcpRoute } from "../../structures/ITypedMcpRoute";
|
|
2
3
|
import { ITypedWebSocketRoute } from "../../structures/ITypedWebSocketRoute";
|
|
3
4
|
export declare class SdkRouteDirectory {
|
|
4
5
|
readonly parent: SdkRouteDirectory | null;
|
|
5
6
|
readonly name: string;
|
|
6
7
|
readonly module: string;
|
|
7
8
|
readonly children: Map<string, SdkRouteDirectory>;
|
|
8
|
-
readonly routes: Array<ITypedHttpRoute | ITypedWebSocketRoute>;
|
|
9
|
+
readonly routes: Array<ITypedHttpRoute | ITypedWebSocketRoute | ITypedMcpRoute>;
|
|
9
10
|
constructor(parent: SdkRouteDirectory | null, name: string);
|
|
10
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SdkRouteDirectory.js","sourceRoot":"","sources":["../../../src/generates/internal/SdkRouteDirectory.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"SdkRouteDirectory.js","sourceRoot":"","sources":["../../../src/generates/internal/SdkRouteDirectory.ts"],"names":[],"mappings":";;;AAIA,MAAa,iBAAiB;IAO5B,YACW,MAAgC,EAChC,IAAY;QADZ,WAAM,GAAN,MAAM,CAA0B;QAChC,SAAI,GAAJ,IAAI,CAAQ;QAErB,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,MAAM;YACT,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;IAC3E,CAAC;CACF;AAhBD,8CAgBC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { VERSION_NEUTRAL } from "@nestjs/common/interfaces";
|
|
2
2
|
import { IReflectHttpOperation } from "./IReflectHttpOperation";
|
|
3
|
+
import { IReflectMcpOperation } from "./IReflectMcpOperation";
|
|
3
4
|
import { IReflectWebSocketOperation } from "./IReflectWebSocketOperation";
|
|
4
5
|
export interface IReflectController {
|
|
5
6
|
class: Function;
|
|
@@ -7,7 +8,7 @@ export interface IReflectController {
|
|
|
7
8
|
paths: string[];
|
|
8
9
|
file: string;
|
|
9
10
|
versions: Array<string | typeof VERSION_NEUTRAL> | undefined;
|
|
10
|
-
operations: Array<IReflectHttpOperation | IReflectWebSocketOperation>;
|
|
11
|
+
operations: Array<IReflectHttpOperation | IReflectWebSocketOperation | IReflectMcpOperation>;
|
|
11
12
|
security: Record<string, string[]>[];
|
|
12
13
|
tags: string[];
|
|
13
14
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { IReflectImport } from "./IReflectImport";
|
|
3
|
+
import { IReflectMcpOperationParameter } from "./IReflectMcpOperationParameter";
|
|
4
|
+
import { IReflectType } from "./IReflectType";
|
|
5
|
+
/**
|
|
6
|
+
* Reflected operation metadata for a method decorated with `@McpRoute`.
|
|
7
|
+
*
|
|
8
|
+
* Produced by {@link ReflectMcpOperationAnalyzer.analyze}; consumed by
|
|
9
|
+
* {@link TypedMcpRouteAnalyzer.analyze} to produce the final
|
|
10
|
+
* {@link ITypedMcpRoute}.
|
|
11
|
+
*
|
|
12
|
+
* @author wildduck - https://github.com/wildduck2
|
|
13
|
+
*/
|
|
14
|
+
export interface IReflectMcpOperation {
|
|
15
|
+
protocol: "mcp";
|
|
16
|
+
name: string;
|
|
17
|
+
toolName: string;
|
|
18
|
+
title: string | null;
|
|
19
|
+
toolDescription: string | null;
|
|
20
|
+
inputSchema: object;
|
|
21
|
+
outputSchema: object | null;
|
|
22
|
+
annotations: IReflectMcpOperation.IAnnotations | null;
|
|
23
|
+
function: Function;
|
|
24
|
+
parameters: IReflectMcpOperationParameter[];
|
|
25
|
+
returnType: IReflectType | null;
|
|
26
|
+
imports: IReflectImport[];
|
|
27
|
+
description: string | null;
|
|
28
|
+
jsDocTags: ts.JSDocTagInfo[];
|
|
29
|
+
}
|
|
30
|
+
export declare namespace IReflectMcpOperation {
|
|
31
|
+
interface IAnnotations {
|
|
32
|
+
readOnlyHint?: boolean;
|
|
33
|
+
destructiveHint?: boolean;
|
|
34
|
+
idempotentHint?: boolean;
|
|
35
|
+
openWorldHint?: boolean;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IReflectMcpOperation.js","sourceRoot":"","sources":["../../src/structures/IReflectMcpOperation.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { IJsDocTagInfo } from "typia";
|
|
2
|
+
import { IReflectImport } from "./IReflectImport";
|
|
3
|
+
import { IReflectType } from "./IReflectType";
|
|
4
|
+
/**
|
|
5
|
+
* Parameter descriptor for an MCP tool method. Reflected from
|
|
6
|
+
* `"nestia/McpRoute/Parameters"` metadata plus compile-time type information
|
|
7
|
+
* collected by the nestia transformer.
|
|
8
|
+
*
|
|
9
|
+
* @author wildduck - https://github.com/wildduck2
|
|
10
|
+
*/
|
|
11
|
+
export interface IReflectMcpOperationParameter {
|
|
12
|
+
category: "params";
|
|
13
|
+
name: string;
|
|
14
|
+
index: number;
|
|
15
|
+
type: IReflectType;
|
|
16
|
+
imports: IReflectImport[];
|
|
17
|
+
description: string | null;
|
|
18
|
+
jsDocTags: IJsDocTagInfo[];
|
|
19
|
+
}
|
|
20
|
+
export declare namespace IReflectMcpOperationParameter {
|
|
21
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IReflectMcpOperationParameter.js","sourceRoot":"","sources":["../../src/structures/IReflectMcpOperationParameter.ts"],"names":[],"mappings":""}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { IMetadataDictionary } from "@typia/core";
|
|
2
2
|
import { INestiaProject } from "./INestiaProject";
|
|
3
3
|
import { ITypedHttpRoute } from "./ITypedHttpRoute";
|
|
4
|
+
import { ITypedMcpRoute } from "./ITypedMcpRoute";
|
|
4
5
|
import { ITypedWebSocketRoute } from "./ITypedWebSocketRoute";
|
|
5
6
|
export interface ITypedApplication {
|
|
6
7
|
project: INestiaProject;
|
|
7
8
|
collection: IMetadataDictionary;
|
|
8
|
-
routes: Array<ITypedHttpRoute | ITypedWebSocketRoute>;
|
|
9
|
+
routes: Array<ITypedHttpRoute | ITypedWebSocketRoute | ITypedMcpRoute>;
|
|
9
10
|
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { IReflectController } from "./IReflectController";
|
|
3
|
+
import { IReflectImport } from "./IReflectImport";
|
|
4
|
+
import { IReflectMcpOperation } from "./IReflectMcpOperation";
|
|
5
|
+
import { IReflectMcpOperationParameter } from "./IReflectMcpOperationParameter";
|
|
6
|
+
import { IReflectType } from "./IReflectType";
|
|
7
|
+
/**
|
|
8
|
+
* Final typed representation of an MCP tool route.
|
|
9
|
+
*
|
|
10
|
+
* Carries everything the SDK generator needs to emit a typed client function:
|
|
11
|
+
* the controller reference, accessor path, typia-derived input schema, and
|
|
12
|
+
* input/output type info.
|
|
13
|
+
*
|
|
14
|
+
* @author wildduck - https://github.com/wildduck2
|
|
15
|
+
*/
|
|
16
|
+
export interface ITypedMcpRoute {
|
|
17
|
+
protocol: "mcp";
|
|
18
|
+
controller: IReflectController;
|
|
19
|
+
name: string;
|
|
20
|
+
toolName: string;
|
|
21
|
+
title: string | null;
|
|
22
|
+
toolDescription: string | null;
|
|
23
|
+
accessor: string[];
|
|
24
|
+
function: Function;
|
|
25
|
+
input: IReflectMcpOperationParameter | null;
|
|
26
|
+
returnType: IReflectType | null;
|
|
27
|
+
inputSchema: object;
|
|
28
|
+
outputSchema: object | null;
|
|
29
|
+
annotations: IReflectMcpOperation.IAnnotations | null;
|
|
30
|
+
imports: IReflectImport[];
|
|
31
|
+
description: string | null;
|
|
32
|
+
jsDocTags: ts.JSDocTagInfo[];
|
|
33
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ITypedMcpRoute.js","sourceRoot":"","sources":["../../src/structures/ITypedMcpRoute.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nestia/sdk",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.3.0",
|
|
4
4
|
"description": "Nestia SDK and Swagger generator",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -58,13 +58,14 @@
|
|
|
58
58
|
"tsconfig-paths": "^4.1.1",
|
|
59
59
|
"tstl": "^3.0.0",
|
|
60
60
|
"typia": "12.1.0",
|
|
61
|
-
"@nestia/core": "^11.
|
|
62
|
-
"@nestia/fetcher": "^11.
|
|
61
|
+
"@nestia/core": "^11.3.0",
|
|
62
|
+
"@nestia/fetcher": "^11.3.0"
|
|
63
63
|
},
|
|
64
64
|
"peerDependencies": {
|
|
65
|
-
"@nestia/core": "^11.
|
|
65
|
+
"@nestia/core": "^11.3.0"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
|
+
"@modelcontextprotocol/sdk": "^1.18.0",
|
|
68
69
|
"@nestjs/common": "^11.1.6",
|
|
69
70
|
"@nestjs/core": "^11.1.6",
|
|
70
71
|
"@types/cli": "^0.11.21",
|
|
@@ -9,6 +9,7 @@ import { ConfigAnalyzer } from "./analyses/ConfigAnalyzer";
|
|
|
9
9
|
import { PathAnalyzer } from "./analyses/PathAnalyzer";
|
|
10
10
|
import { ReflectControllerAnalyzer } from "./analyses/ReflectControllerAnalyzer";
|
|
11
11
|
import { TypedHttpRouteAnalyzer } from "./analyses/TypedHttpRouteAnalyzer";
|
|
12
|
+
import { TypedMcpRouteAnalyzer } from "./analyses/TypedMcpRouteAnalyzer";
|
|
12
13
|
import { TypedWebSocketRouteAnalyzer } from "./analyses/TypedWebSocketRouteAnalyzer";
|
|
13
14
|
import { E2eGenerator } from "./generates/E2eGenerator";
|
|
14
15
|
import { SdkGenerator } from "./generates/SdkGenerator";
|
|
@@ -18,6 +19,7 @@ import { IReflectController } from "./structures/IReflectController";
|
|
|
18
19
|
import { IReflectOperationError } from "./structures/IReflectOperationError";
|
|
19
20
|
import { ITypedApplication } from "./structures/ITypedApplication";
|
|
20
21
|
import { ITypedHttpRoute } from "./structures/ITypedHttpRoute";
|
|
22
|
+
import { ITypedMcpRoute } from "./structures/ITypedMcpRoute";
|
|
21
23
|
import { ITypedWebSocketRoute } from "./structures/ITypedWebSocketRoute";
|
|
22
24
|
import { IOperationMetadata } from "./transformers/IOperationMetadata";
|
|
23
25
|
import { StringUtil } from "./utils/StringUtil";
|
|
@@ -162,7 +164,11 @@ export class NestiaSdkApplication {
|
|
|
162
164
|
const set: HashSet<Pair<string, string>> = new HashSet();
|
|
163
165
|
for (const controller of controllers)
|
|
164
166
|
for (const controllerPath of controller.paths)
|
|
165
|
-
for (const operation of controller.operations)
|
|
167
|
+
for (const operation of controller.operations) {
|
|
168
|
+
if (operation.protocol === "mcp") {
|
|
169
|
+
set.insert(new Pair(`mcp:${operation.toolName}`, "mcp"));
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
166
172
|
for (const operationPath of operation.paths)
|
|
167
173
|
set.insert(
|
|
168
174
|
new Pair(
|
|
@@ -170,6 +176,7 @@ export class NestiaSdkApplication {
|
|
|
170
176
|
operation.protocol === "http" ? operation.method : "",
|
|
171
177
|
),
|
|
172
178
|
);
|
|
179
|
+
}
|
|
173
180
|
return set.size();
|
|
174
181
|
})();
|
|
175
182
|
|
|
@@ -180,7 +187,9 @@ export class NestiaSdkApplication {
|
|
|
180
187
|
.map(
|
|
181
188
|
(c) =>
|
|
182
189
|
c.paths.length *
|
|
183
|
-
c.operations
|
|
190
|
+
c.operations
|
|
191
|
+
.map((f) => (f.protocol === "mcp" ? 1 : f.paths.length))
|
|
192
|
+
.reduce((a, b) => a + b, 0),
|
|
184
193
|
)
|
|
185
194
|
.reduce((a, b) => a + b, 0)}`,
|
|
186
195
|
);
|
|
@@ -196,9 +205,20 @@ export class NestiaSdkApplication {
|
|
|
196
205
|
|
|
197
206
|
// CONVERT TO TYPED OPERATIONS
|
|
198
207
|
const globalPrefix: string = project.input.globalPrefix?.prefix ?? "";
|
|
199
|
-
const routes: Array<
|
|
208
|
+
const routes: Array<
|
|
209
|
+
ITypedHttpRoute | ITypedWebSocketRoute | ITypedMcpRoute
|
|
210
|
+
> = [];
|
|
200
211
|
for (const c of controllers)
|
|
201
212
|
for (const o of c.operations) {
|
|
213
|
+
if (o.protocol === "mcp") {
|
|
214
|
+
routes.push(
|
|
215
|
+
...TypedMcpRouteAnalyzer.analyze({
|
|
216
|
+
controller: c,
|
|
217
|
+
operation: o,
|
|
218
|
+
}),
|
|
219
|
+
);
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
202
222
|
const pathList: Set<string> = new Set();
|
|
203
223
|
const versions: string[] = VersioningStrategy.merge(project)([
|
|
204
224
|
...(c.versions ?? []),
|
|
@@ -68,6 +68,7 @@ export namespace NestiaSwaggerComposer {
|
|
|
68
68
|
const routes: ITypedHttpRoute[] = [];
|
|
69
69
|
for (const c of controllers)
|
|
70
70
|
for (const o of c.operations) {
|
|
71
|
+
if (o.protocol === "mcp") continue;
|
|
71
72
|
const pathList: Set<string> = new Set();
|
|
72
73
|
const versions: string[] = VersioningStrategy.merge(project)([
|
|
73
74
|
...(c.versions ?? []),
|