apifox-workspace-mcp 1.1.6 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/url-parser.test.js +3 -1
- package/dist/__tests__/url-parser.test.js.map +1 -1
- package/dist/core/cache/index.d.ts +2 -2
- package/dist/core/cache/index.d.ts.map +1 -1
- package/dist/core/cache/index.js +2 -2
- package/dist/core/cache/index.js.map +1 -1
- package/dist/core/cache/unified-cache-manager.d.ts +2 -1
- package/dist/core/cache/unified-cache-manager.d.ts.map +1 -1
- package/dist/core/cache/unified-cache-manager.js +36 -9
- package/dist/core/cache/unified-cache-manager.js.map +1 -1
- package/dist/core/client/mcp-bridge.d.ts +1 -1
- package/dist/core/client/mcp-bridge.d.ts.map +1 -1
- package/dist/core/client/mcp-bridge.js +10 -6
- package/dist/core/client/mcp-bridge.js.map +1 -1
- package/dist/core/intent.d.ts +2 -1
- package/dist/core/intent.d.ts.map +1 -1
- package/dist/core/intent.js +114 -21
- package/dist/core/intent.js.map +1 -1
- package/dist/core/parser/md-parser.js +294 -85
- package/dist/core/parser/md-parser.js.map +1 -1
- package/dist/core/parser/url.d.ts.map +1 -1
- package/dist/core/parser/url.js +90 -22
- package/dist/core/parser/url.js.map +1 -1
- package/dist/server/handlers/assistant.d.ts.map +1 -1
- package/dist/server/handlers/assistant.js +220 -10
- package/dist/server/handlers/assistant.js.map +1 -1
- package/dist/server/handlers/error-handler.d.ts +26 -0
- package/dist/server/handlers/error-handler.d.ts.map +1 -0
- package/dist/server/handlers/error-handler.js +78 -0
- package/dist/server/handlers/error-handler.js.map +1 -0
- package/dist/server/handlers/generate-artifacts.d.ts.map +1 -1
- package/dist/server/handlers/generate-artifacts.js +31 -5
- package/dist/server/handlers/generate-artifacts.js.map +1 -1
- package/dist/server/handlers/get-interface-detail.d.ts.map +1 -1
- package/dist/server/handlers/get-interface-detail.js +6 -2
- package/dist/server/handlers/get-interface-detail.js.map +1 -1
- package/dist/server/handlers/list-project-interfaces.d.ts.map +1 -1
- package/dist/server/handlers/list-project-interfaces.js +67 -6
- package/dist/server/handlers/list-project-interfaces.js.map +1 -1
- package/dist/server/handlers/parse-and-add-project.js +2 -2
- package/dist/server/handlers/parse-and-add-project.js.map +1 -1
- package/dist/server/handlers/query-interfaces.js +3 -3
- package/dist/server/handlers/query-interfaces.js.map +1 -1
- package/dist/server/handlers/utils.d.ts.map +1 -1
- package/dist/server/handlers/utils.js +10 -2
- package/dist/server/handlers/utils.js.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/package.json +7 -5
- package/dist/core/cache/interface-cache-manager.d.ts +0 -118
- package/dist/core/cache/interface-cache-manager.d.ts.map +0 -1
- package/dist/core/cache/interface-cache-manager.js +0 -236
- package/dist/core/cache/interface-cache-manager.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "apifox-workspace-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Workspace-level Apifox MCP Server for intelligent API documentation integration in Cursor AI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/server/index.js",
|
|
@@ -26,15 +26,17 @@
|
|
|
26
26
|
"format:check": "prettier --check 'src/**/*.ts'",
|
|
27
27
|
"typecheck": "tsc --noEmit",
|
|
28
28
|
"test": "vitest run",
|
|
29
|
-
"test:watch": "
|
|
29
|
+
"test:watch": "bash scripts/test-watch.sh",
|
|
30
30
|
"test:coverage": "vitest run --coverage",
|
|
31
|
+
"test:quick": "bash scripts/quick-test.sh",
|
|
32
|
+
"test:setup": "bash scripts/setup-test-project.sh",
|
|
33
|
+
"test:interactive": "node scripts/test-interactive.mjs",
|
|
34
|
+
"test:direct": "node scripts/test-direct.mjs",
|
|
31
35
|
"prepublishOnly": "npm run lint:check && npm run typecheck && npm run test && npm run build",
|
|
32
36
|
"preversion": "npm run lint:check && npm run test",
|
|
33
37
|
"postversion": "git push && git push --tags",
|
|
34
38
|
"publish:check": "bash scripts/pre-publish-check.sh",
|
|
35
|
-
"publish:dry": "npm publish --dry-run"
|
|
36
|
-
"apifox-enhance": "node ui/apifox-playwright-enhancer.mjs",
|
|
37
|
-
"postinstall": "node scripts/check-playwright.js || echo 'Playwright not installed. Run: npm install playwright'"
|
|
39
|
+
"publish:dry": "npm publish --dry-run"
|
|
38
40
|
},
|
|
39
41
|
"keywords": [
|
|
40
42
|
"mcp",
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 接口基础信息缓存管理器
|
|
3
|
-
*
|
|
4
|
-
* 按目录层级组织接口缓存,只缓存基础信息(id, name, method, path, description)
|
|
5
|
-
* 不缓存接口详情,确保详情始终是最新的
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* 接口基础信息
|
|
9
|
-
*/
|
|
10
|
-
export interface InterfaceBasicInfo {
|
|
11
|
-
id: string;
|
|
12
|
-
name: string;
|
|
13
|
-
method: string;
|
|
14
|
-
path: string;
|
|
15
|
-
description?: string;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* 缓存结构:按项目 ID -> 目录层级 -> 接口数组
|
|
19
|
-
*
|
|
20
|
-
* 示例:
|
|
21
|
-
* {
|
|
22
|
-
* "202": {
|
|
23
|
-
* "SFTP": {
|
|
24
|
-
* "App api SFTP template": [
|
|
25
|
-
* { id: "2385", name: "复制SFTP模板", method: "POST", path: "/api/sftp/template/copy", description: "..." }
|
|
26
|
-
* ]
|
|
27
|
-
* },
|
|
28
|
-
* "": [ // 根目录的接口
|
|
29
|
-
* { id: "62227", name: "获取用户信息", method: "GET", path: "/api/users/{id}" }
|
|
30
|
-
* ]
|
|
31
|
-
* }
|
|
32
|
-
* }
|
|
33
|
-
*/
|
|
34
|
-
export type InterfaceCache = Record<string, Record<string, unknown> | InterfaceBasicInfo[]>;
|
|
35
|
-
/**
|
|
36
|
-
* 接口缓存管理器
|
|
37
|
-
*/
|
|
38
|
-
export declare class InterfaceCacheManager {
|
|
39
|
-
private cachePath;
|
|
40
|
-
private cache;
|
|
41
|
-
constructor(projectRoot: string);
|
|
42
|
-
/**
|
|
43
|
-
* 加载缓存文件
|
|
44
|
-
*/
|
|
45
|
-
private loadCache;
|
|
46
|
-
/**
|
|
47
|
-
* 保存缓存到文件
|
|
48
|
-
*/
|
|
49
|
-
private saveCache;
|
|
50
|
-
/**
|
|
51
|
-
* 解析目录路径为层级数组
|
|
52
|
-
*
|
|
53
|
-
* 例如:
|
|
54
|
-
* - "Invoice > Info" -> ["Invoice", "Info"]
|
|
55
|
-
* - "APP API company subscribe" -> ["APP API company subscribe"]
|
|
56
|
-
* - "" -> [""] (根目录)
|
|
57
|
-
*
|
|
58
|
-
* @param folderPath 目录路径,使用 " > " 分隔多级目录
|
|
59
|
-
* @returns 目录层级数组
|
|
60
|
-
*/
|
|
61
|
-
private parseFolderPath;
|
|
62
|
-
/**
|
|
63
|
-
* 将接口添加到缓存
|
|
64
|
-
*
|
|
65
|
-
* @param projectId 项目 ID
|
|
66
|
-
* @param folderPath 目录路径(如 "Invoice > Info")
|
|
67
|
-
* @param interfaceInfo 接口基础信息
|
|
68
|
-
*/
|
|
69
|
-
addInterface(projectId: string, folderPath: string, interfaceInfo: InterfaceBasicInfo): void;
|
|
70
|
-
/**
|
|
71
|
-
* 批量添加接口到缓存
|
|
72
|
-
*
|
|
73
|
-
* @param projectId 项目 ID
|
|
74
|
-
* @param interfaces 接口列表(包含 folderPath)
|
|
75
|
-
*/
|
|
76
|
-
addInterfaces(projectId: string, interfaces: Array<InterfaceBasicInfo & {
|
|
77
|
-
folderPath?: string;
|
|
78
|
-
}>): void;
|
|
79
|
-
/**
|
|
80
|
-
* 获取项目下所有缓存的接口(按目录层级组织)
|
|
81
|
-
*
|
|
82
|
-
* @param projectId 项目 ID
|
|
83
|
-
* @returns 按目录层级组织的接口结构,如果项目不存在则返回 undefined
|
|
84
|
-
*/
|
|
85
|
-
getInterfacesByProject(projectId: string): Record<string, unknown> | undefined;
|
|
86
|
-
/**
|
|
87
|
-
* 将嵌套的接口结构扁平化为数组
|
|
88
|
-
*
|
|
89
|
-
* @param nested 嵌套的接口结构
|
|
90
|
-
* @returns 扁平化的接口数组(包含 folderPath)
|
|
91
|
-
*/
|
|
92
|
-
flattenInterfaces(nested: Record<string, unknown>): Array<InterfaceBasicInfo & {
|
|
93
|
-
folderPath: string;
|
|
94
|
-
}>;
|
|
95
|
-
/**
|
|
96
|
-
* 检查对象是否为接口基础信息
|
|
97
|
-
*/
|
|
98
|
-
private isInterfaceBasicInfo;
|
|
99
|
-
/**
|
|
100
|
-
* 根据接口 ID 查找接口基础信息
|
|
101
|
-
*
|
|
102
|
-
* @param projectId 项目 ID
|
|
103
|
-
* @param interfaceId 接口 ID
|
|
104
|
-
* @returns 接口基础信息,如果未找到则返回 null
|
|
105
|
-
*/
|
|
106
|
-
findInterfaceById(projectId: string, interfaceId: string): InterfaceBasicInfo | null;
|
|
107
|
-
/**
|
|
108
|
-
* 清空项目的缓存
|
|
109
|
-
*
|
|
110
|
-
* @param projectId 项目 ID
|
|
111
|
-
*/
|
|
112
|
-
clearProject(projectId: string): void;
|
|
113
|
-
/**
|
|
114
|
-
* 获取缓存文件路径
|
|
115
|
-
*/
|
|
116
|
-
getCachePath(): string;
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=interface-cache-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interface-cache-manager.d.ts","sourceRoot":"","sources":["../../../src/core/cache/interface-cache-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,kBAAkB,EAAE,CAAC,CAAC;AAE5F;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAiB;gBAElB,WAAW,EAAE,MAAM;IAM/B;;OAEG;IACH,OAAO,CAAC,SAAS;IAajB;;OAEG;IACH,OAAO,CAAC,SAAS;IAYjB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,eAAe;IAWvB;;;;;;OAMG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,GAAG,IAAI;IA4C5F;;;;;OAKG;IACH,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,KAAK,CAAC,kBAAkB,GAAG;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAC9D,IAAI;IAaP;;;;;OAKG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAI9E;;;;;OAKG;IACH,iBAAiB,CACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,KAAK,CAAC,kBAAkB,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IA2BrD;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;;;;;OAMG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IA0BpF;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKrC;;OAEG;IACH,YAAY,IAAI,MAAM;CAGvB"}
|
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 接口基础信息缓存管理器
|
|
3
|
-
*
|
|
4
|
-
* 按目录层级组织接口缓存,只缓存基础信息(id, name, method, path, description)
|
|
5
|
-
* 不缓存接口详情,确保详情始终是最新的
|
|
6
|
-
*/
|
|
7
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
8
|
-
import { dirname, join } from 'path';
|
|
9
|
-
/**
|
|
10
|
-
* 接口缓存管理器
|
|
11
|
-
*/
|
|
12
|
-
export class InterfaceCacheManager {
|
|
13
|
-
cachePath;
|
|
14
|
-
cache;
|
|
15
|
-
constructor(projectRoot) {
|
|
16
|
-
const cacheDir = join(projectRoot, '.cursor', 'tmp');
|
|
17
|
-
this.cachePath = join(cacheDir, 'apifox-interfaces-cache.json');
|
|
18
|
-
this.cache = this.loadCache();
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* 加载缓存文件
|
|
22
|
-
*/
|
|
23
|
-
loadCache() {
|
|
24
|
-
if (!existsSync(this.cachePath)) {
|
|
25
|
-
return {};
|
|
26
|
-
}
|
|
27
|
-
try {
|
|
28
|
-
const content = readFileSync(this.cachePath, 'utf-8');
|
|
29
|
-
return JSON.parse(content);
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
console.error('加载接口缓存失败:', error);
|
|
33
|
-
return {};
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* 保存缓存到文件
|
|
38
|
-
*/
|
|
39
|
-
saveCache() {
|
|
40
|
-
try {
|
|
41
|
-
const dir = dirname(this.cachePath);
|
|
42
|
-
if (!existsSync(dir)) {
|
|
43
|
-
mkdirSync(dir, { recursive: true });
|
|
44
|
-
}
|
|
45
|
-
writeFileSync(this.cachePath, JSON.stringify(this.cache, null, 2), 'utf-8');
|
|
46
|
-
}
|
|
47
|
-
catch (error) {
|
|
48
|
-
console.error('保存接口缓存失败:', error);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* 解析目录路径为层级数组
|
|
53
|
-
*
|
|
54
|
-
* 例如:
|
|
55
|
-
* - "Invoice > Info" -> ["Invoice", "Info"]
|
|
56
|
-
* - "APP API company subscribe" -> ["APP API company subscribe"]
|
|
57
|
-
* - "" -> [""] (根目录)
|
|
58
|
-
*
|
|
59
|
-
* @param folderPath 目录路径,使用 " > " 分隔多级目录
|
|
60
|
-
* @returns 目录层级数组
|
|
61
|
-
*/
|
|
62
|
-
parseFolderPath(folderPath) {
|
|
63
|
-
if (!folderPath || folderPath.trim() === '') {
|
|
64
|
-
return ['']; // 根目录
|
|
65
|
-
}
|
|
66
|
-
// 使用 " > " 分隔多级目录
|
|
67
|
-
return folderPath
|
|
68
|
-
.split(' > ')
|
|
69
|
-
.map((s) => s.trim())
|
|
70
|
-
.filter((s) => s !== '');
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* 将接口添加到缓存
|
|
74
|
-
*
|
|
75
|
-
* @param projectId 项目 ID
|
|
76
|
-
* @param folderPath 目录路径(如 "Invoice > Info")
|
|
77
|
-
* @param interfaceInfo 接口基础信息
|
|
78
|
-
*/
|
|
79
|
-
addInterface(projectId, folderPath, interfaceInfo) {
|
|
80
|
-
if (!this.cache[projectId]) {
|
|
81
|
-
this.cache[projectId] = {};
|
|
82
|
-
}
|
|
83
|
-
const folders = this.parseFolderPath(folderPath);
|
|
84
|
-
let current = this.cache[projectId];
|
|
85
|
-
// 构建嵌套结构
|
|
86
|
-
for (let i = 0; i < folders.length; i++) {
|
|
87
|
-
const folder = folders[i];
|
|
88
|
-
if (i === folders.length - 1) {
|
|
89
|
-
// 最后一层,存储接口数组
|
|
90
|
-
if (!current[folder] || !Array.isArray(current[folder])) {
|
|
91
|
-
current[folder] = [];
|
|
92
|
-
}
|
|
93
|
-
const interfaces = current[folder];
|
|
94
|
-
// 检查是否已存在(避免重复)
|
|
95
|
-
const existingIndex = interfaces.findIndex((i) => i.id === interfaceInfo.id);
|
|
96
|
-
if (existingIndex >= 0) {
|
|
97
|
-
// 更新现有接口信息
|
|
98
|
-
interfaces[existingIndex] = interfaceInfo;
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
// 添加新接口
|
|
102
|
-
interfaces.push(interfaceInfo);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
// 中间层,创建嵌套对象
|
|
107
|
-
if (!current[folder] ||
|
|
108
|
-
typeof current[folder] !== 'object' ||
|
|
109
|
-
Array.isArray(current[folder])) {
|
|
110
|
-
current[folder] = {};
|
|
111
|
-
}
|
|
112
|
-
current = current[folder];
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
this.saveCache();
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* 批量添加接口到缓存
|
|
119
|
-
*
|
|
120
|
-
* @param projectId 项目 ID
|
|
121
|
-
* @param interfaces 接口列表(包含 folderPath)
|
|
122
|
-
*/
|
|
123
|
-
addInterfaces(projectId, interfaces) {
|
|
124
|
-
for (const iface of interfaces) {
|
|
125
|
-
const folderPath = iface.folderPath || '';
|
|
126
|
-
this.addInterface(projectId, folderPath, {
|
|
127
|
-
id: iface.id,
|
|
128
|
-
name: iface.name,
|
|
129
|
-
method: iface.method,
|
|
130
|
-
path: iface.path,
|
|
131
|
-
description: iface.description,
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* 获取项目下所有缓存的接口(按目录层级组织)
|
|
137
|
-
*
|
|
138
|
-
* @param projectId 项目 ID
|
|
139
|
-
* @returns 按目录层级组织的接口结构,如果项目不存在则返回 undefined
|
|
140
|
-
*/
|
|
141
|
-
getInterfacesByProject(projectId) {
|
|
142
|
-
return this.cache[projectId];
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* 将嵌套的接口结构扁平化为数组
|
|
146
|
-
*
|
|
147
|
-
* @param nested 嵌套的接口结构
|
|
148
|
-
* @returns 扁平化的接口数组(包含 folderPath)
|
|
149
|
-
*/
|
|
150
|
-
flattenInterfaces(nested) {
|
|
151
|
-
const result = [];
|
|
152
|
-
const traverse = (obj, currentPath = []) => {
|
|
153
|
-
if (Array.isArray(obj)) {
|
|
154
|
-
// 找到接口数组
|
|
155
|
-
const folderPath = currentPath.join(' > ');
|
|
156
|
-
for (const iface of obj) {
|
|
157
|
-
if (this.isInterfaceBasicInfo(iface)) {
|
|
158
|
-
result.push({
|
|
159
|
-
...iface,
|
|
160
|
-
folderPath,
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
else if (typeof obj === 'object' && obj !== null) {
|
|
166
|
-
// 继续遍历嵌套对象
|
|
167
|
-
for (const [key, value] of Object.entries(obj)) {
|
|
168
|
-
traverse(value, [...currentPath, key]);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
traverse(nested);
|
|
173
|
-
return result;
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* 检查对象是否为接口基础信息
|
|
177
|
-
*/
|
|
178
|
-
isInterfaceBasicInfo(obj) {
|
|
179
|
-
return (typeof obj === 'object' &&
|
|
180
|
-
obj !== null &&
|
|
181
|
-
'id' in obj &&
|
|
182
|
-
'name' in obj &&
|
|
183
|
-
'method' in obj &&
|
|
184
|
-
'path' in obj &&
|
|
185
|
-
typeof obj.id === 'string' &&
|
|
186
|
-
typeof obj.name === 'string' &&
|
|
187
|
-
typeof obj.method === 'string' &&
|
|
188
|
-
typeof obj.path === 'string');
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* 根据接口 ID 查找接口基础信息
|
|
192
|
-
*
|
|
193
|
-
* @param projectId 项目 ID
|
|
194
|
-
* @param interfaceId 接口 ID
|
|
195
|
-
* @returns 接口基础信息,如果未找到则返回 null
|
|
196
|
-
*/
|
|
197
|
-
findInterfaceById(projectId, interfaceId) {
|
|
198
|
-
const projectCache = this.cache[projectId];
|
|
199
|
-
if (!projectCache) {
|
|
200
|
-
return null;
|
|
201
|
-
}
|
|
202
|
-
// 递归查找
|
|
203
|
-
const search = (obj) => {
|
|
204
|
-
if (Array.isArray(obj)) {
|
|
205
|
-
const found = obj.find((i) => this.isInterfaceBasicInfo(i) && i.id === interfaceId);
|
|
206
|
-
return found || null;
|
|
207
|
-
}
|
|
208
|
-
if (typeof obj === 'object' && obj !== null) {
|
|
209
|
-
for (const value of Object.values(obj)) {
|
|
210
|
-
const result = search(value);
|
|
211
|
-
if (result) {
|
|
212
|
-
return result;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
return null;
|
|
217
|
-
};
|
|
218
|
-
return search(projectCache);
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* 清空项目的缓存
|
|
222
|
-
*
|
|
223
|
-
* @param projectId 项目 ID
|
|
224
|
-
*/
|
|
225
|
-
clearProject(projectId) {
|
|
226
|
-
delete this.cache[projectId];
|
|
227
|
-
this.saveCache();
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* 获取缓存文件路径
|
|
231
|
-
*/
|
|
232
|
-
getCachePath() {
|
|
233
|
-
return this.cachePath;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
//# sourceMappingURL=interface-cache-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interface-cache-manager.js","sourceRoot":"","sources":["../../../src/core/cache/interface-cache-manager.ts"],"names":[],"mappings":"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"}
|