swagshot 0.1.0 → 0.1.1
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 +4 -0
- package/dist/lib/configManager.js +1 -1
- package/dist/lib/configManager.js.map +1 -1
- package/package.json +9 -4
- package/src/lib/configManager.ts +1 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -71
- package/dist/index.js.map +0 -1
- package/dist/tools/configUpdate.d.ts +0 -2
- package/dist/tools/configUpdate.d.ts.map +0 -1
- package/dist/tools/configUpdate.js +0 -25
- package/dist/tools/configUpdate.js.map +0 -1
- package/dist/tools/setup.d.ts +0 -2
- package/dist/tools/setup.d.ts.map +0 -1
- package/dist/tools/setup.js +0 -63
- package/dist/tools/setup.js.map +0 -1
- package/dist/tools/sync.d.ts +0 -2
- package/dist/tools/sync.d.ts.map +0 -1
- package/dist/tools/sync.js +0 -87
- package/dist/tools/sync.js.map +0 -1
package/README.md
CHANGED
|
@@ -44,7 +44,7 @@ async function writeConfig(root, config) {
|
|
|
44
44
|
async function updateConfig(root, updates) {
|
|
45
45
|
const config = await readConfig(root);
|
|
46
46
|
if (!config)
|
|
47
|
-
throw new Error("설정 파일이 없습니다.
|
|
47
|
+
throw new Error("설정 파일이 없습니다. 'swagshot init'을 먼저 실행하세요.");
|
|
48
48
|
for (const [key, value] of Object.entries(updates)) {
|
|
49
49
|
if (key in config.project) {
|
|
50
50
|
config.project[key] = value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configManager.js","sourceRoot":"","sources":["../../src/lib/configManager.ts"],"names":[],"mappings":";;;;;;AAMA,gCAOC;AAED,8BAOC;AAED,gCAKC;AAED,kCAGC;AAED,oCAiBC;AArDD,2DAA6B;AAC7B,gDAAwB;AAGX,QAAA,WAAW,GAAG,gBAAgB,CAAC;AAErC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,kBAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,SAAS,CAAC,OAAe;IAC7C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAW,CAAC,CAAC;IAChD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,GAAG,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;AAC3C,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,MAAsB;IACpE,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAW,CAAC,CAAC;IAChD,MAAM,kBAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC;AAEM,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,OAAsC;IAEtC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"configManager.js","sourceRoot":"","sources":["../../src/lib/configManager.ts"],"names":[],"mappings":";;;;;;AAMA,gCAOC;AAED,8BAOC;AAED,gCAKC;AAED,kCAGC;AAED,oCAiBC;AArDD,2DAA6B;AAC7B,gDAAwB;AAGX,QAAA,WAAW,GAAG,gBAAgB,CAAC;AAErC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,kBAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,SAAS,CAAC,OAAe;IAC7C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAW,CAAC,CAAC;IAChD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,GAAG,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;AAC3C,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,MAAsB;IACpE,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAW,CAAC,CAAC;IAChD,MAAM,kBAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC;AAEM,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,OAAsC;IAEtC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAExE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,CAAC,OAAmC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3D,CAAC;aAAM,IAAI,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,CAAC,KAAiC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACzD,CAAC;IACH,CAAC;IAED,MAAM,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "swagshot",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Swagger-powered API & type generator",
|
|
5
5
|
"main": "dist/cli/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -14,8 +14,7 @@
|
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"axios": "^1.6.0",
|
|
17
|
-
"commander": "^12.0.0"
|
|
18
|
-
"zod": "^3.22.0"
|
|
17
|
+
"commander": "^12.0.0"
|
|
19
18
|
},
|
|
20
19
|
"devDependencies": {
|
|
21
20
|
"@types/node": "^20.0.0",
|
|
@@ -26,7 +25,13 @@
|
|
|
26
25
|
"dist/",
|
|
27
26
|
"src/"
|
|
28
27
|
],
|
|
29
|
-
"keywords": [
|
|
28
|
+
"keywords": [
|
|
29
|
+
"swagger",
|
|
30
|
+
"openapi",
|
|
31
|
+
"codegen",
|
|
32
|
+
"typescript",
|
|
33
|
+
"cli"
|
|
34
|
+
],
|
|
30
35
|
"license": "MIT",
|
|
31
36
|
"engines": {
|
|
32
37
|
"node": ">=18"
|
package/src/lib/configManager.ts
CHANGED
|
@@ -39,7 +39,7 @@ export async function updateConfig(
|
|
|
39
39
|
updates: Record<string, string | null>
|
|
40
40
|
): Promise<SwagShotConfig> {
|
|
41
41
|
const config = await readConfig(root);
|
|
42
|
-
if (!config) throw new Error("설정 파일이 없습니다.
|
|
42
|
+
if (!config) throw new Error("설정 파일이 없습니다. 'swagshot init'을 먼저 실행하세요.");
|
|
43
43
|
|
|
44
44
|
for (const [key, value] of Object.entries(updates)) {
|
|
45
45
|
if (key in config.project) {
|
package/dist/index.d.ts
DELETED
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
5
|
-
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
6
|
-
const zod_1 = require("zod");
|
|
7
|
-
const setup_js_1 = require("./tools/setup.js");
|
|
8
|
-
const sync_js_1 = require("./tools/sync.js");
|
|
9
|
-
const configUpdate_js_1 = require("./tools/configUpdate.js");
|
|
10
|
-
// Workaround: cast server to any to avoid TS2589 deep type instantiation errors
|
|
11
|
-
// caused by the MCP SDK 1.28.x zod-compat union types (zod v3 | v4).
|
|
12
|
-
// The runtime behavior is fully correct.
|
|
13
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
|
-
const srv = new mcp_js_1.McpServer({ name: "swagshot", version: "0.1.0" });
|
|
15
|
-
// ── Tool: swagger_setup ───────────────────────────────────────────────────
|
|
16
|
-
srv.registerTool("swagger_setup", {
|
|
17
|
-
description: "프로젝트 구조를 분석하고 swagshot 설정 파일(.swagshot.json)을 생성합니다. 처음 한 번만 실행하면 이후 자동으로 참고합니다.",
|
|
18
|
-
inputSchema: {
|
|
19
|
-
projectRoot: zod_1.z
|
|
20
|
-
.string()
|
|
21
|
-
.optional()
|
|
22
|
-
.describe("레포 루트 경로 (없으면 현재 디렉토리 사용)"),
|
|
23
|
-
},
|
|
24
|
-
}, async ({ projectRoot }) => {
|
|
25
|
-
const result = await (0, setup_js_1.handleSetup)(projectRoot);
|
|
26
|
-
return { content: [{ type: "text", text: result }] };
|
|
27
|
-
});
|
|
28
|
-
// ── Tool: swagger_sync ────────────────────────────────────────────────────
|
|
29
|
-
srv.registerTool("swagger_sync", {
|
|
30
|
-
description: "Swagger URL 또는 파일 경로를 받아 프로젝트 패턴에 맞게 API 함수와 TypeScript 타입을 생성합니다.",
|
|
31
|
-
inputSchema: {
|
|
32
|
-
swaggerUrl: zod_1.z
|
|
33
|
-
.string()
|
|
34
|
-
.describe("Swagger JSON URL 또는 로컬 파일 경로 (예: https://api.example.com/swagger.json)"),
|
|
35
|
-
tag: zod_1.z
|
|
36
|
-
.string()
|
|
37
|
-
.optional()
|
|
38
|
-
.describe("생성할 컨트롤러 태그 (없으면 사용 가능한 태그 목록 반환). 전체 생성 시 'all'"),
|
|
39
|
-
includeDeprecated: zod_1.z
|
|
40
|
-
.boolean()
|
|
41
|
-
.optional()
|
|
42
|
-
.describe("deprecated된 엔드포인트도 포함할지 여부 (기본값: false)"),
|
|
43
|
-
},
|
|
44
|
-
}, async ({ swaggerUrl, tag, includeDeprecated }) => {
|
|
45
|
-
const result = await (0, sync_js_1.handleSync)(swaggerUrl, tag, includeDeprecated);
|
|
46
|
-
return { content: [{ type: "text", text: result }] };
|
|
47
|
-
});
|
|
48
|
-
// ── Tool: swagger_config_update ───────────────────────────────────────────
|
|
49
|
-
srv.registerTool("swagger_config_update", {
|
|
50
|
-
description: "swagshot 프로젝트 설정을 업데이트합니다. (예: apiDir, typesDir, httpClient 등)",
|
|
51
|
-
inputSchema: {
|
|
52
|
-
updates: zod_1.z
|
|
53
|
-
.record(zod_1.z.string().nullable())
|
|
54
|
-
.describe('변경할 설정 키-값 쌍 (예: { "apiDir": "src/services", "httpClient": "fetch" })'),
|
|
55
|
-
},
|
|
56
|
-
}, async ({ updates }) => {
|
|
57
|
-
const result = await (0, configUpdate_js_1.handleConfigUpdate)(updates);
|
|
58
|
-
return { content: [{ type: "text", text: result }] };
|
|
59
|
-
});
|
|
60
|
-
// ── Start server ──────────────────────────────────────────────────────────
|
|
61
|
-
const server = srv;
|
|
62
|
-
async function main() {
|
|
63
|
-
const transport = new stdio_js_1.StdioServerTransport();
|
|
64
|
-
await server.connect(transport);
|
|
65
|
-
console.error("swagshot MCP server running on stdio");
|
|
66
|
-
}
|
|
67
|
-
main().catch((err) => {
|
|
68
|
-
console.error("Fatal error:", err);
|
|
69
|
-
process.exit(1);
|
|
70
|
-
});
|
|
71
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,oEAAoE;AACpE,wEAAiF;AACjF,6BAAwB;AACxB,+CAA+C;AAC/C,6CAA6C;AAC7C,6DAA6D;AAE7D,gFAAgF;AAChF,qEAAqE;AACrE,yCAAyC;AACzC,8DAA8D;AAC9D,MAAM,GAAG,GAAG,IAAI,kBAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,CAAQ,CAAC;AAEzE,6EAA6E;AAC7E,GAAG,CAAC,YAAY,CACd,eAAe,EACf;IACE,WAAW,EACT,kFAAkF;IACpF,WAAW,EAAE;QACX,WAAW,EAAE,OAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,2BAA2B,CAAC;KACzC;CACF,EACD,KAAK,EAAE,EAAE,WAAW,EAA4B,EAAE,EAAE;IAClD,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAW,EAAC,WAAW,CAAC,CAAC;IAC9C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAChE,CAAC,CACF,CAAC;AAEF,6EAA6E;AAC7E,GAAG,CAAC,YAAY,CACd,cAAc,EACd;IACE,WAAW,EACT,oEAAoE;IACtE,WAAW,EAAE;QACX,UAAU,EAAE,OAAC;aACV,MAAM,EAAE;aACR,QAAQ,CACP,wEAAwE,CACzE;QACH,GAAG,EAAE,OAAC;aACH,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,kDAAkD,CACnD;QACH,iBAAiB,EAAE,OAAC;aACjB,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,yCAAyC,CAAC;KACvD;CACF,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,EAAqE,EAAE,EAAE;IAClH,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAU,EAAC,UAAU,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;IACpE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAChE,CAAC,CACF,CAAC;AAEF,6EAA6E;AAC7E,GAAG,CAAC,YAAY,CACd,uBAAuB,EACvB;IACE,WAAW,EAAE,gEAAgE;IAC7E,WAAW,EAAE;QACX,OAAO,EAAE,OAAC;aACP,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC;aAC7B,QAAQ,CACP,uEAAuE,CACxE;KACJ;CACF,EACD,KAAK,EAAE,EAAE,OAAO,EAA8C,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,MAAM,IAAA,oCAAkB,EAAC,OAAO,CAAC,CAAC;IACjD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAChE,CAAC,CACF,CAAC;AAEF,6EAA6E;AAC7E,MAAM,MAAM,GAAG,GAAgB,CAAC;AAEhC,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;AACxD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"configUpdate.d.ts","sourceRoot":"","sources":["../../src/tools/configUpdate.ts"],"names":[],"mappings":"AAEA,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBhG"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleConfigUpdate = handleConfigUpdate;
|
|
4
|
-
const configManager_js_1 = require("../lib/configManager.js");
|
|
5
|
-
async function handleConfigUpdate(updates) {
|
|
6
|
-
const root = process.cwd();
|
|
7
|
-
try {
|
|
8
|
-
const config = await (0, configManager_js_1.updateConfig)(root, updates);
|
|
9
|
-
return [
|
|
10
|
-
"✅ 설정 업데이트 완료:",
|
|
11
|
-
"```json",
|
|
12
|
-
JSON.stringify(updates, null, 2),
|
|
13
|
-
"```",
|
|
14
|
-
"",
|
|
15
|
-
"현재 설정:",
|
|
16
|
-
"```json",
|
|
17
|
-
JSON.stringify(config, null, 2),
|
|
18
|
-
"```",
|
|
19
|
-
].join("\n");
|
|
20
|
-
}
|
|
21
|
-
catch (e) {
|
|
22
|
-
return `❌ 설정 업데이트 실패: ${e instanceof Error ? e.message : String(e)}`;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=configUpdate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"configUpdate.js","sourceRoot":"","sources":["../../src/tools/configUpdate.ts"],"names":[],"mappings":";;AAEA,gDAmBC;AArBD,8DAAuD;AAEhD,KAAK,UAAU,kBAAkB,CAAC,OAAsC;IAC7E,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE3B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,+BAAY,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO;YACL,eAAe;YACf,SAAS;YACT,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAChC,KAAK;YACL,EAAE;YACF,QAAQ;YACR,SAAS;YACT,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/B,KAAK;SACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,iBAAiB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,CAAC;AACH,CAAC"}
|
package/dist/tools/setup.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/tools/setup.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0DvE"}
|
package/dist/tools/setup.js
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
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.handleSetup = handleSetup;
|
|
7
|
-
const path_1 = __importDefault(require("path"));
|
|
8
|
-
const configManager_js_1 = require("../lib/configManager.js");
|
|
9
|
-
const detectStructure_js_1 = require("../lib/detectStructure.js");
|
|
10
|
-
async function handleSetup(projectRoot) {
|
|
11
|
-
const root = projectRoot ?? process.cwd();
|
|
12
|
-
const existing = await (0, configManager_js_1.readConfig)(root);
|
|
13
|
-
if (existing) {
|
|
14
|
-
return [
|
|
15
|
-
"✅ 이미 설정이 있습니다:",
|
|
16
|
-
"```json",
|
|
17
|
-
JSON.stringify(existing, null, 2),
|
|
18
|
-
"```",
|
|
19
|
-
"",
|
|
20
|
-
"변경하려면 `swagger_config_update` 툴을 사용하거나,",
|
|
21
|
-
"수정할 항목을 알려주세요. 예) 'apiDir를 src/services로 바꿔줘'",
|
|
22
|
-
].join("\n");
|
|
23
|
-
}
|
|
24
|
-
const detected = await (0, detectStructure_js_1.detectProjectStructure)(root);
|
|
25
|
-
const config = {
|
|
26
|
-
version: "1",
|
|
27
|
-
project: {
|
|
28
|
-
root,
|
|
29
|
-
apiDir: detected.apiDir ?? "src/api",
|
|
30
|
-
typesDir: detected.typesDir ?? "src/types",
|
|
31
|
-
hooksDir: detected.hooksDir,
|
|
32
|
-
outputDir: detected.apiDir ?? "src/api",
|
|
33
|
-
},
|
|
34
|
-
style: {
|
|
35
|
-
httpClient: detected.httpClient ?? "axios",
|
|
36
|
-
axiosInstance: detected.axiosInstance,
|
|
37
|
-
queryLibrary: detected.queryLibrary,
|
|
38
|
-
namingConvention: "camelCase",
|
|
39
|
-
},
|
|
40
|
-
};
|
|
41
|
-
await (0, configManager_js_1.writeConfig)(root, config);
|
|
42
|
-
const lines = [
|
|
43
|
-
"👋 swagshot 초기 설정 완료!",
|
|
44
|
-
"",
|
|
45
|
-
`📂 프로젝트 루트: ${root}`,
|
|
46
|
-
`📁 설정 파일: ${path_1.default.join(root, configManager_js_1.CONFIG_FILE)}`,
|
|
47
|
-
"",
|
|
48
|
-
"감지된 설정:",
|
|
49
|
-
` • API 함수 폴더: ${config.project.apiDir}${detected.apiDir ? " ✅ 자동 감지" : " ⚠️ 기본값 (수정 가능)"}`,
|
|
50
|
-
` • 타입 정의 폴더: ${config.project.typesDir}${detected.typesDir ? " ✅ 자동 감지" : " ⚠️ 기본값 (수정 가능)"}`,
|
|
51
|
-
` • 훅 폴더: ${config.project.hooksDir ?? "없음"}${detected.hooksDir ? " ✅ 자동 감지" : ""}`,
|
|
52
|
-
` • HTTP 클라이언트: ${config.style.httpClient}${detected.httpClient ? " ✅ 자동 감지" : " ⚠️ 기본값"}`,
|
|
53
|
-
` • Query 라이브러리: ${config.style.queryLibrary ?? "없음"}${detected.queryLibrary ? " ✅ 자동 감지" : ""}`,
|
|
54
|
-
detected.axiosInstance ? ` • Axios 인스턴스: ${config.style.axiosInstance} ✅ 자동 감지` : "",
|
|
55
|
-
"",
|
|
56
|
-
"잘못된 항목이 있으면 알려주세요.",
|
|
57
|
-
"예) 'typesDir는 src/types/api야'",
|
|
58
|
-
"",
|
|
59
|
-
"이제 `swagger_sync` 툴로 코드를 생성할 수 있습니다!",
|
|
60
|
-
].filter((l) => l !== undefined);
|
|
61
|
-
return lines.join("\n");
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=setup.js.map
|
package/dist/tools/setup.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/tools/setup.ts"],"names":[],"mappings":";;;;;AAKA,kCA0DC;AA/DD,gDAAwB;AAExB,8DAA+E;AAC/E,kEAAmE;AAE5D,KAAK,UAAU,WAAW,CAAC,WAAoB;IACpD,MAAM,IAAI,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,IAAA,6BAAU,EAAC,IAAI,CAAC,CAAC;IAExC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO;YACL,gBAAgB;YAChB,SAAS;YACT,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACjC,KAAK;YACL,EAAE;YACF,yCAAyC;YACzC,+CAA+C;SAChD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,IAAA,2CAAsB,EAAC,IAAI,CAAC,CAAC;IAEpD,MAAM,MAAM,GAAmB;QAC7B,OAAO,EAAE,GAAG;QACZ,OAAO,EAAE;YACP,IAAI;YACJ,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,SAAS;YACpC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,WAAW;YAC1C,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,SAAS,EAAE,QAAQ,CAAC,MAAM,IAAI,SAAS;SACxC;QACD,KAAK,EAAE;YACL,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,OAAO;YAC1C,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,gBAAgB,EAAE,WAAW;SAC9B;KACF,CAAC;IAEF,MAAM,IAAA,8BAAW,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAEhC,MAAM,KAAK,GAAG;QACZ,uBAAuB;QACvB,EAAE;QACF,eAAe,IAAI,EAAE;QACrB,aAAa,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,8BAAW,CAAC,EAAE;QAC3C,EAAE;QACF,SAAS;QACT,oBAAoB,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,EAAE;QAC9F,kBAAkB,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,EAAE;QAChG,qBAAqB,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE;QAC5F,mBAAmB,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE;QAC3F,oBAAoB,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE;QACjG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,oBAAoB,MAAM,CAAC,KAAK,CAAC,aAAa,UAAU,CAAC,CAAC,CAAC,EAAE;QACtF,EAAE;QACF,oBAAoB;QACpB,+BAA+B;QAC/B,EAAE;QACF,sCAAsC;KACvC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IAEjC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
package/dist/tools/sync.d.ts
DELETED
package/dist/tools/sync.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/tools/sync.ts"],"names":[],"mappings":"AAMA,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,iBAAiB,UAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAsF7G"}
|
package/dist/tools/sync.js
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
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.handleSync = handleSync;
|
|
7
|
-
const path_1 = __importDefault(require("path"));
|
|
8
|
-
const promises_1 = __importDefault(require("fs/promises"));
|
|
9
|
-
const configManager_js_1 = require("../lib/configManager.js");
|
|
10
|
-
const fetchSwagger_js_1 = require("../lib/fetchSwagger.js");
|
|
11
|
-
const codeGenerator_js_1 = require("../lib/codeGenerator.js");
|
|
12
|
-
async function handleSync(swaggerUrl, tag, includeDeprecated = false) {
|
|
13
|
-
const root = process.cwd();
|
|
14
|
-
const config = await (0, configManager_js_1.readConfig)(root);
|
|
15
|
-
if (!config) {
|
|
16
|
-
return [
|
|
17
|
-
"⚠️ 프로젝트 설정이 없습니다.",
|
|
18
|
-
"먼저 `swagger_setup` 툴을 실행해주세요.",
|
|
19
|
-
].join("\n");
|
|
20
|
-
}
|
|
21
|
-
let spec;
|
|
22
|
-
try {
|
|
23
|
-
spec = await (0, fetchSwagger_js_1.fetchSwaggerSpec)(swaggerUrl);
|
|
24
|
-
}
|
|
25
|
-
catch (e) {
|
|
26
|
-
return `❌ Swagger 스펙을 가져오는 데 실패했습니다.\n${e instanceof Error ? e.message : String(e)}`;
|
|
27
|
-
}
|
|
28
|
-
// If no tag specified, list available tags
|
|
29
|
-
if (!tag) {
|
|
30
|
-
const tags = (0, fetchSwagger_js_1.getControllerTags)(spec);
|
|
31
|
-
if (tags.length === 0) {
|
|
32
|
-
return "❌ Swagger 스펙에 태그가 없습니다.";
|
|
33
|
-
}
|
|
34
|
-
if (tags.length === 1) {
|
|
35
|
-
tag = tags[0];
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
return [
|
|
39
|
-
"📋 사용 가능한 컨트롤러 태그:",
|
|
40
|
-
...tags.map((t, i) => ` ${i + 1}. ${t}`),
|
|
41
|
-
"",
|
|
42
|
-
"어떤 컨트롤러를 생성할까요?",
|
|
43
|
-
"예) 'payment-controller 생성해줘'",
|
|
44
|
-
"",
|
|
45
|
-
"전체 생성하려면: 'all'",
|
|
46
|
-
].join("\n");
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
// Handle 'all' tag
|
|
50
|
-
const tagsToProcess = tag === "all" ? (0, fetchSwagger_js_1.getControllerTags)(spec) : [tag];
|
|
51
|
-
const writtenFiles = [];
|
|
52
|
-
for (const currentTag of tagsToProcess) {
|
|
53
|
-
const filteredSpec = (0, fetchSwagger_js_1.filterByTag)(spec, currentTag, includeDeprecated);
|
|
54
|
-
const endpointCount = Object.values(filteredSpec.paths).reduce((acc, item) => acc + Object.keys(item).length, 0);
|
|
55
|
-
if (endpointCount === 0) {
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
// Derive file name from tag
|
|
59
|
-
const baseName = currentTag.replace(/-controller$/, "").replace(/-/g, "-");
|
|
60
|
-
// Generate types
|
|
61
|
-
const typesContent = (0, codeGenerator_js_1.generateTypes)(filteredSpec, currentTag);
|
|
62
|
-
const typesDir = path_1.default.join(root, config.project.typesDir);
|
|
63
|
-
await promises_1.default.mkdir(typesDir, { recursive: true });
|
|
64
|
-
const typesFile = path_1.default.join(typesDir, `${baseName}.ts`);
|
|
65
|
-
await promises_1.default.writeFile(typesFile, typesContent, "utf-8");
|
|
66
|
-
writtenFiles.push(typesFile);
|
|
67
|
-
// Generate API file
|
|
68
|
-
const apiContent = (0, codeGenerator_js_1.generateApiFile)(filteredSpec, currentTag, config);
|
|
69
|
-
const apiDir = path_1.default.join(root, config.project.outputDir);
|
|
70
|
-
await promises_1.default.mkdir(apiDir, { recursive: true });
|
|
71
|
-
const apiFile = path_1.default.join(apiDir, `${baseName}.ts`);
|
|
72
|
-
await promises_1.default.writeFile(apiFile, apiContent, "utf-8");
|
|
73
|
-
writtenFiles.push(apiFile);
|
|
74
|
-
}
|
|
75
|
-
if (writtenFiles.length === 0) {
|
|
76
|
-
return `⚠️ 태그 '${tag}'에 해당하는 엔드포인트를 찾을 수 없습니다.`;
|
|
77
|
-
}
|
|
78
|
-
return [
|
|
79
|
-
`✅ 코드 생성 완료!`,
|
|
80
|
-
`📌 처리된 태그: ${tagsToProcess.join(", ")}`,
|
|
81
|
-
`📁 생성된 파일 (${writtenFiles.length}개):`,
|
|
82
|
-
...writtenFiles.map((f) => ` - ${path_1.default.relative(root, f)}`),
|
|
83
|
-
"",
|
|
84
|
-
"생성된 코드를 확인하고 필요한 경우 수정해주세요.",
|
|
85
|
-
].join("\n");
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=sync.js.map
|
package/dist/tools/sync.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/tools/sync.ts"],"names":[],"mappings":";;;;;AAMA,gCAsFC;AA5FD,gDAAwB;AACxB,2DAA6B;AAC7B,8DAAqD;AACrD,4DAA0F;AAC1F,8DAAyE;AAElE,KAAK,UAAU,UAAU,CAAC,UAAkB,EAAE,GAAY,EAAE,iBAAiB,GAAG,KAAK;IAC1F,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,IAAA,6BAAU,EAAC,IAAI,CAAC,CAAC;IAEtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,mBAAmB;YACnB,+BAA+B;SAChC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,IAAA,kCAAgB,EAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,iCAAiC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,CAAC;IAED,2CAA2C;IAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,GAAG,IAAA,mCAAiB,EAAC,IAAI,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,yBAAyB,CAAC;QACnC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,oBAAoB;gBACpB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzC,EAAE;gBACF,iBAAiB;gBACjB,8BAA8B;gBAC9B,EAAE;gBACF,iBAAiB;aAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,aAAa,GAAG,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,IAAA,mCAAiB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACtE,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,UAAU,IAAI,aAAa,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,IAAA,6BAAW,EAAC,IAAI,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;QACtE,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,CAC5D,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAC7C,CAAC,CACF,CAAC;QAEF,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QAED,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAE3E,iBAAiB;QACjB,MAAM,YAAY,GAAG,IAAA,gCAAa,EAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,kBAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,KAAK,CAAC,CAAC;QACxD,MAAM,kBAAE,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QACrD,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE7B,oBAAoB;QACpB,MAAM,UAAU,GAAG,IAAA,kCAAe,EAAC,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,kBAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,KAAK,CAAC,CAAC;QACpD,MAAM,kBAAE,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,UAAU,GAAG,2BAA2B,CAAC;IAClD,CAAC;IAED,OAAO;QACL,aAAa;QACb,cAAc,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACxC,cAAc,YAAY,CAAC,MAAM,KAAK;QACtC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,cAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAC3D,EAAE;QACF,6BAA6B;KAC9B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|