@elliotding/ai-agent-mcp 0.1.30 → 0.1.31
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 +7 -1
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +6 -3
- package/dist/api/client.js.map +1 -1
- package/dist/auth/permissions.js +1 -1
- package/dist/auth/permissions.js.map +1 -1
- package/dist/cache/cache-manager.d.ts.map +1 -1
- package/dist/cache/cache-manager.js +1 -0
- package/dist/cache/cache-manager.js.map +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -1
- package/dist/filesystem/manager.d.ts.map +1 -1
- package/dist/filesystem/manager.js +5 -5
- package/dist/filesystem/manager.js.map +1 -1
- package/dist/git/multi-source-manager.d.ts.map +1 -1
- package/dist/git/multi-source-manager.js +1 -0
- package/dist/git/multi-source-manager.js.map +1 -1
- package/dist/monitoring/health.d.ts.map +1 -1
- package/dist/monitoring/health.js +2 -1
- package/dist/monitoring/health.js.map +1 -1
- package/dist/resources/loader.d.ts.map +1 -1
- package/dist/resources/loader.js +4 -4
- package/dist/resources/loader.js.map +1 -1
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +9 -6
- package/dist/server/http.js.map +1 -1
- package/dist/session/manager.d.ts +1 -1
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +1 -1
- package/dist/session/manager.js.map +1 -1
- package/dist/telemetry/manager.d.ts.map +1 -1
- package/dist/telemetry/manager.js +13 -6
- package/dist/telemetry/manager.js.map +1 -1
- package/dist/tools/manage-subscription.js +1 -1
- package/dist/tools/manage-subscription.js.map +1 -1
- package/dist/tools/sync-resources.d.ts.map +1 -1
- package/dist/tools/sync-resources.js +28 -15
- package/dist/tools/sync-resources.js.map +1 -1
- package/dist/tools/uninstall-resource.js +4 -4
- package/dist/tools/uninstall-resource.js.map +1 -1
- package/dist/tools/upload-resource.d.ts.map +1 -1
- package/dist/tools/upload-resource.js +4 -2
- package/dist/tools/upload-resource.js.map +1 -1
- package/dist/types/tools.d.ts +13 -2
- package/dist/types/tools.d.ts.map +1 -1
- package/dist/utils/cursor-paths.d.ts +94 -8
- package/dist/utils/cursor-paths.d.ts.map +1 -1
- package/dist/utils/cursor-paths.js +172 -13
- package/dist/utils/cursor-paths.js.map +1 -1
- package/dist/utils/validation.d.ts +10 -10
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +4 -3
- package/dist/utils/validation.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,10 +2,17 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Cursor IDE standard directory path resolver.
|
|
4
4
|
*
|
|
5
|
-
* Cursor stores user-level assets in platform-specific locations
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* Cursor stores user-level assets in platform-specific locations.
|
|
6
|
+
*
|
|
7
|
+
* DEFAULT BEHAVIOR (all platforms unified):
|
|
8
|
+
* Windows: C:\Users\<Username>\.cursor\<type>\
|
|
9
|
+
* macOS: /Users/<user>/.cursor/<type>/
|
|
10
|
+
* Linux: /home/<user>/.cursor/<type>/
|
|
11
|
+
*
|
|
12
|
+
* FALLBACK DISCOVERY (if not found in default location):
|
|
13
|
+
* Windows: %APPDATA%\Cursor\User, %LOCALAPPDATA%\Cursor, Documents\.cursor
|
|
14
|
+
* macOS: ~/Library/Application Support/.cursor
|
|
15
|
+
* Linux: ~/.local/share/.cursor, ~/.config/.cursor
|
|
9
16
|
*
|
|
10
17
|
* Resource type → subdirectory mapping mirrors the actual Cursor directory layout.
|
|
11
18
|
*/
|
|
@@ -50,6 +57,10 @@ exports.getCursorTypeDirForClient = getCursorTypeDirForClient;
|
|
|
50
57
|
exports.getCursorTypeDir = getCursorTypeDir;
|
|
51
58
|
exports.getCursorResourcePath = getCursorResourcePath;
|
|
52
59
|
exports.getTelemetryFilePath = getTelemetryFilePath;
|
|
60
|
+
exports.getCspAgentRootDir = getCspAgentRootDir;
|
|
61
|
+
exports.getCspAgentRootDirForClient = getCspAgentRootDirForClient;
|
|
62
|
+
exports.getCspAgentDir = getCspAgentDir;
|
|
63
|
+
exports.getCspAgentDirForClient = getCspAgentDirForClient;
|
|
53
64
|
const os = __importStar(require("os"));
|
|
54
65
|
const path = __importStar(require("path"));
|
|
55
66
|
/** Supported Cursor resource types and their directory names. */
|
|
@@ -66,8 +77,17 @@ exports.CURSOR_TYPE_DIRS = {
|
|
|
66
77
|
/**
|
|
67
78
|
* Returns the root of the Cursor user directory on the current platform.
|
|
68
79
|
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
80
|
+
* CORRECTED BEHAVIOR (all platforms use same default logic):
|
|
81
|
+
* Default: <USER_HOME>/.cursor (checked first on all platforms)
|
|
82
|
+
* Windows: C:\Users\<Username>\.cursor
|
|
83
|
+
* macOS: /Users/<user>/.cursor
|
|
84
|
+
* Linux: /home/<user>/.cursor
|
|
85
|
+
*
|
|
86
|
+
* Dynamic fallback: If .cursor not found in user home, searches
|
|
87
|
+
* platform-specific alternative locations:
|
|
88
|
+
* - Windows: %APPDATA%\Cursor\User, %LOCALAPPDATA%\Cursor, Documents\.cursor
|
|
89
|
+
* - macOS: ~/Library/Application Support/.cursor
|
|
90
|
+
* - Linux: ~/.local/share/.cursor, ~/.config/.cursor
|
|
71
91
|
*
|
|
72
92
|
* NOTE: Only use this when running code on the USER's local machine.
|
|
73
93
|
* When generating paths for LocalAction instructions (which are executed by the
|
|
@@ -75,13 +95,58 @@ exports.CURSOR_TYPE_DIRS = {
|
|
|
75
95
|
* instead to avoid returning the server's home directory.
|
|
76
96
|
*/
|
|
77
97
|
function getCursorRootDir() {
|
|
98
|
+
const homeDir = os.homedir();
|
|
99
|
+
const defaultPath = path.join(homeDir, '.cursor');
|
|
100
|
+
// 1. Check default location (priority: user home directory)
|
|
101
|
+
try {
|
|
102
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
|
|
103
|
+
if (require('fs').existsSync(defaultPath)) {
|
|
104
|
+
return defaultPath;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// If fs module not available or error, return default path
|
|
109
|
+
return defaultPath;
|
|
110
|
+
}
|
|
111
|
+
// 2. Fallback: search platform-specific alternative locations
|
|
112
|
+
const fallbackPaths = [];
|
|
78
113
|
if (process.platform === 'win32') {
|
|
79
|
-
//
|
|
80
|
-
const appData = process.env.APPDATA
|
|
81
|
-
|
|
114
|
+
// Windows alternatives (in case of non-standard installation)
|
|
115
|
+
const appData = process.env.APPDATA;
|
|
116
|
+
const localAppData = process.env.LOCALAPPDATA;
|
|
117
|
+
if (appData) {
|
|
118
|
+
fallbackPaths.push(path.join(appData, 'Cursor', 'User'), // Legacy/enterprise location
|
|
119
|
+
path.join(appData, 'Cursor', '.cursor'));
|
|
120
|
+
}
|
|
121
|
+
if (localAppData) {
|
|
122
|
+
fallbackPaths.push(path.join(localAppData, 'Cursor'));
|
|
123
|
+
}
|
|
124
|
+
fallbackPaths.push(path.join(homeDir, 'Documents', '.cursor'));
|
|
125
|
+
}
|
|
126
|
+
else if (process.platform === 'darwin') {
|
|
127
|
+
// macOS alternatives
|
|
128
|
+
fallbackPaths.push(path.join(homeDir, 'Library', 'Application Support', '.cursor'));
|
|
82
129
|
}
|
|
83
|
-
|
|
84
|
-
|
|
130
|
+
else {
|
|
131
|
+
// Linux alternatives
|
|
132
|
+
fallbackPaths.push(path.join(homeDir, '.local', 'share', '.cursor'), path.join(homeDir, '.config', '.cursor'));
|
|
133
|
+
}
|
|
134
|
+
// Check each fallback path
|
|
135
|
+
try {
|
|
136
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-unsafe-assignment
|
|
137
|
+
const fs = require('fs');
|
|
138
|
+
for (const p of fallbackPaths) {
|
|
139
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
|
|
140
|
+
if (fs.existsSync(p)) {
|
|
141
|
+
return p;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// If fs module not available, return default
|
|
147
|
+
}
|
|
148
|
+
// 3. Last resort: return default path (will be created when needed)
|
|
149
|
+
return defaultPath;
|
|
85
150
|
}
|
|
86
151
|
/**
|
|
87
152
|
* Returns a platform-neutral Cursor root path for use in LocalAction instructions.
|
|
@@ -157,10 +222,104 @@ function getCursorResourcePath(resourceType, resourceName) {
|
|
|
157
222
|
* Stored at the Cursor root level (not inside a resource-type subdirectory)
|
|
158
223
|
* so it persists independently of individual resource installs/uninstalls.
|
|
159
224
|
*
|
|
160
|
-
*
|
|
161
|
-
* Windows
|
|
225
|
+
* All platforms: <USER_HOME>/.cursor/ai-resource-telemetry.json
|
|
226
|
+
* Windows: C:\Users\<Username>\.cursor\ai-resource-telemetry.json
|
|
227
|
+
* macOS: /Users/<user>/.cursor/ai-resource-telemetry.json
|
|
228
|
+
* Linux: /home/<user>/.cursor/ai-resource-telemetry.json
|
|
162
229
|
*/
|
|
163
230
|
function getTelemetryFilePath() {
|
|
164
231
|
return path.join(getCursorRootDir(), 'ai-resource-telemetry.json');
|
|
165
232
|
}
|
|
233
|
+
// ============================================================================
|
|
234
|
+
// CSP AI Agent Isolated Storage Paths
|
|
235
|
+
// ============================================================================
|
|
236
|
+
/**
|
|
237
|
+
* Returns the parent directory where .cursor is located.
|
|
238
|
+
* Used to ensure .csp-ai-agent is created as a sibling of .cursor.
|
|
239
|
+
*
|
|
240
|
+
* @returns Absolute path to the parent directory containing .cursor
|
|
241
|
+
*/
|
|
242
|
+
function getCursorParentDir() {
|
|
243
|
+
const cursorRoot = getCursorRootDir(); // Find actual .cursor location (with dynamic search)
|
|
244
|
+
return path.dirname(cursorRoot); // Return its parent directory
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Returns the root directory for CSP AI Agent isolated storage (LOCAL execution).
|
|
248
|
+
*
|
|
249
|
+
* CRITICAL DESIGN RULE: .csp-ai-agent MUST be a sibling of .cursor.
|
|
250
|
+
*
|
|
251
|
+
* Strategy:
|
|
252
|
+
* 1. Find where .cursor actually exists (getCursorRootDir with dynamic search)
|
|
253
|
+
* 2. Extract parent directory of .cursor
|
|
254
|
+
* 3. Place .csp-ai-agent in THE SAME parent directory
|
|
255
|
+
*
|
|
256
|
+
* Examples:
|
|
257
|
+
* If .cursor is at C:\Users\Elliot.Ding\.cursor
|
|
258
|
+
* → Parent: C:\Users\Elliot.Ding
|
|
259
|
+
* → .csp-ai-agent = C:\Users\Elliot.Ding\.csp-ai-agent (SIBLING)
|
|
260
|
+
*
|
|
261
|
+
* If .cursor is at /Users/elliot/.cursor
|
|
262
|
+
* → Parent: /Users/elliot
|
|
263
|
+
* → .csp-ai-agent = /Users/elliot/.csp-ai-agent (SIBLING)
|
|
264
|
+
*
|
|
265
|
+
* If .cursor is at C:\Users\John\AppData\Roaming\Cursor\User (non-standard)
|
|
266
|
+
* → Parent: C:\Users\John\AppData\Roaming\Cursor
|
|
267
|
+
* → .csp-ai-agent = C:\Users\John\AppData\Roaming\Cursor\.csp-ai-agent (SIBLING)
|
|
268
|
+
*
|
|
269
|
+
* This ensures consistent sibling directory layout across all platforms.
|
|
270
|
+
*
|
|
271
|
+
* NOTE: This function is for LOCAL execution only (when MCP server runs on user's machine).
|
|
272
|
+
* For LocalAction instructions, use getCspAgentRootDirForClient().
|
|
273
|
+
*/
|
|
274
|
+
function getCspAgentRootDir() {
|
|
275
|
+
const parentDir = getCursorParentDir();
|
|
276
|
+
return path.join(parentDir, '.csp-ai-agent');
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Returns CSP AI Agent root directory path for client-side LocalAction instructions.
|
|
280
|
+
*
|
|
281
|
+
* This is a symbolic path that the AI Agent will resolve on the user's machine.
|
|
282
|
+
*
|
|
283
|
+
* AI Agent resolution strategy (MUST implement on client side):
|
|
284
|
+
* 1. Find .cursor directory location:
|
|
285
|
+
* - Windows: Check C:\Users\<Username>\.cursor first, then search AppData
|
|
286
|
+
* - macOS: Check /Users/<user>/.cursor first, then search Library
|
|
287
|
+
* - Linux: Check /home/<user>/.cursor first, then search .local, .config
|
|
288
|
+
* 2. Extract parent directory of .cursor
|
|
289
|
+
* 3. Place .csp-ai-agent in THE SAME parent directory
|
|
290
|
+
*
|
|
291
|
+
* @returns Symbolic path: "~/.csp-ai-agent" (AI Agent expands based on .cursor location)
|
|
292
|
+
*/
|
|
293
|
+
function getCspAgentRootDirForClient() {
|
|
294
|
+
// Return portable tilde-based path
|
|
295
|
+
// AI Agent must expand this by finding .cursor's parent directory
|
|
296
|
+
return '~/.csp-ai-agent';
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Returns CSP AI Agent subdirectory path for local execution.
|
|
300
|
+
*
|
|
301
|
+
* @param subdir - Subdirectory name ('skills', '.manifests', etc.)
|
|
302
|
+
* @returns Absolute local path
|
|
303
|
+
*
|
|
304
|
+
* @example
|
|
305
|
+
* getCspAgentDir('skills')
|
|
306
|
+
* // → Local: C:\Users\Elliot.Ding\.csp-ai-agent\skills (if .cursor in user home)
|
|
307
|
+
*/
|
|
308
|
+
function getCspAgentDir(subdir) {
|
|
309
|
+
return path.join(getCspAgentRootDir(), subdir);
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Returns CSP AI Agent subdirectory path for client-side LocalAction instructions.
|
|
313
|
+
*
|
|
314
|
+
* @param subdir - Subdirectory name ('skills', '.manifests', etc.)
|
|
315
|
+
* @returns Symbolic path for AI Agent to resolve
|
|
316
|
+
*
|
|
317
|
+
* @example
|
|
318
|
+
* getCspAgentDirForClient('skills')
|
|
319
|
+
* // → "~/.csp-ai-agent/skills"
|
|
320
|
+
* // AI Agent resolves to: C:\Users\Elliot.Ding\.csp-ai-agent\skills (if .cursor in user home)
|
|
321
|
+
*/
|
|
322
|
+
function getCspAgentDirForClient(subdir) {
|
|
323
|
+
return `${getCspAgentRootDirForClient()}/${subdir}`;
|
|
324
|
+
}
|
|
166
325
|
//# sourceMappingURL=cursor-paths.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-paths.js","sourceRoot":"","sources":["../../src/utils/cursor-paths.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"cursor-paths.js","sourceRoot":"","sources":["../../src/utils/cursor-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ export interface ValidationError {
|
|
|
6
6
|
field: string;
|
|
7
7
|
message: string;
|
|
8
8
|
expected?: string;
|
|
9
|
-
received?:
|
|
9
|
+
received?: unknown;
|
|
10
10
|
suggestion?: string;
|
|
11
11
|
}
|
|
12
12
|
export declare class RequestValidationError extends Error {
|
|
@@ -22,37 +22,37 @@ export declare class RequestValidationError extends Error {
|
|
|
22
22
|
/**
|
|
23
23
|
* Validate required field
|
|
24
24
|
*/
|
|
25
|
-
export declare function validateRequired(value:
|
|
25
|
+
export declare function validateRequired(value: unknown, fieldName: string): ValidationError | null;
|
|
26
26
|
/**
|
|
27
27
|
* Validate string type
|
|
28
28
|
*/
|
|
29
|
-
export declare function validateString(value:
|
|
29
|
+
export declare function validateString(value: unknown, fieldName: string): ValidationError | null;
|
|
30
30
|
/**
|
|
31
31
|
* Validate enum value
|
|
32
32
|
*/
|
|
33
|
-
export declare function validateEnum(value:
|
|
33
|
+
export declare function validateEnum(value: unknown, fieldName: string, allowedValues: readonly string[]): ValidationError | null;
|
|
34
34
|
/**
|
|
35
35
|
* Validate array type
|
|
36
36
|
*/
|
|
37
|
-
export declare function validateArray(value:
|
|
37
|
+
export declare function validateArray(value: unknown, fieldName: string): ValidationError | null;
|
|
38
38
|
/**
|
|
39
39
|
* Validate object type
|
|
40
40
|
*/
|
|
41
|
-
export declare function validateObject(value:
|
|
41
|
+
export declare function validateObject(value: unknown, fieldName: string): ValidationError | null;
|
|
42
42
|
/**
|
|
43
43
|
* Validate boolean type
|
|
44
44
|
*/
|
|
45
|
-
export declare function validateBoolean(value:
|
|
45
|
+
export declare function validateBoolean(value: unknown, fieldName: string): ValidationError | null;
|
|
46
46
|
/**
|
|
47
47
|
* Validate number type
|
|
48
48
|
*/
|
|
49
|
-
export declare function validateNumber(value:
|
|
49
|
+
export declare function validateNumber(value: unknown, fieldName: string): ValidationError | null;
|
|
50
50
|
/**
|
|
51
51
|
* Validate SSE connection parameters
|
|
52
52
|
*/
|
|
53
|
-
export declare function validateSSEConnectionParams(_body:
|
|
53
|
+
export declare function validateSSEConnectionParams(_body: Record<string, unknown>): ValidationError[];
|
|
54
54
|
/**
|
|
55
55
|
* Validate message parameters
|
|
56
56
|
*/
|
|
57
|
-
export declare function validateMessageParams(body:
|
|
57
|
+
export declare function validateMessageParams(body: Record<string, unknown>): ValidationError[];
|
|
58
58
|
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IACxC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;gBAEd,MAAM,EAAE,eAAe,EAAE,EAAE,UAAU,SAAM;IAQvD,MAAM;;;;;CAOP;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,GAChB,eAAe,GAAG,IAAI,CAUxB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,GAChB,eAAe,GAAG,IAAI,CAUxB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,eAAe,GAAG,IAAI,CAexB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,GAChB,eAAe,GAAG,IAAI,CAUxB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,GAChB,eAAe,GAAG,IAAI,CAUxB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,GAChB,eAAe,GAAG,IAAI,CAUxB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,GAChB,eAAe,GAAG,IAAI,CAUxB;AA8DD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,EAAE,CAO7F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,EAAE,CAqBtF"}
|
package/dist/utils/validation.js
CHANGED
|
@@ -65,14 +65,15 @@ function validateString(value, fieldName) {
|
|
|
65
65
|
* Validate enum value
|
|
66
66
|
*/
|
|
67
67
|
function validateEnum(value, fieldName, allowedValues) {
|
|
68
|
-
|
|
68
|
+
const strValue = String(value);
|
|
69
|
+
if (!allowedValues.includes(strValue)) {
|
|
69
70
|
// Find closest match for suggestion
|
|
70
|
-
const suggestion = findClosestMatch(
|
|
71
|
+
const suggestion = findClosestMatch(strValue, allowedValues);
|
|
71
72
|
return {
|
|
72
73
|
field: fieldName,
|
|
73
74
|
message: `Field '${fieldName}' has invalid value`,
|
|
74
75
|
expected: `one of: ${allowedValues.map(v => `'${v}'`).join(', ')}`,
|
|
75
|
-
received:
|
|
76
|
+
received: strValue,
|
|
76
77
|
suggestion: suggestion ? `Did you mean '${suggestion}'?` : undefined,
|
|
77
78
|
};
|
|
78
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAkCH,4CAaC;AAKD,wCAaC;AAKD,
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAkCH,4CAaC;AAKD,wCAaC;AAKD,oCAmBC;AAKD,sCAaC;AAKD,wCAaC;AAKD,0CAaC;AAKD,wCAaC;AAiED,kEAOC;AAKD,sDAqBC;AAzPD,MAAa,sBAAuB,SAAQ,KAAK;IACxC,MAAM,CAAoB;IAC1B,UAAU,CAAS;IAE1B,YAAY,MAAyB,EAAE,UAAU,GAAG,GAAG;QACrD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,MAAM;QACJ,OAAO;YACL,KAAK,EAAE,kBAAkB;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,MAAM;SACrB,CAAC;IACJ,CAAC;CACF;AAnBD,wDAmBC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAC9B,KAAc,EACd,SAAiB;IAEjB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAC1D,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,4BAA4B,SAAS,GAAG;YACjD,QAAQ,EAAE,iBAAiB;YAC3B,QAAQ,EAAE,OAAO,KAAK;SACvB,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAC5B,KAAc,EACd,SAAiB;IAEjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,UAAU,SAAS,oBAAoB;YAChD,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,OAAO,KAAK;SACvB,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAC1B,KAAc,EACd,SAAiB,EACjB,aAAgC;IAEhC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,oCAAoC;QACpC,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAE7D,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,UAAU,SAAS,qBAAqB;YACjD,QAAQ,EAAE,WAAW,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAClE,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,iBAAiB,UAAU,IAAI,CAAC,CAAC,CAAC,SAAS;SACrE,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAC3B,KAAc,EACd,SAAiB;IAEjB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,UAAU,SAAS,oBAAoB;YAChD,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE,OAAO,KAAK;SACvB,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAC5B,KAAc,EACd,SAAiB;IAEjB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,UAAU,SAAS,qBAAqB;YACjD,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,KAAK;SACxD,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAC7B,KAAc,EACd,SAAiB;IAEjB,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,UAAU,SAAS,qBAAqB;YACjD,QAAQ,EAAE,yBAAyB;YACnC,QAAQ,EAAE,OAAO,KAAK;SACvB,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAC5B,KAAc,EACd,SAAiB;IAEjB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,UAAU,SAAS,oBAAoB;YAChD,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,OAAO,KAAK;SACvB,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,KAAa,EACb,UAA6B;IAE7B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,WAAW,GAAG,QAAQ,CAAC;IAC3B,IAAI,OAAO,GAAkB,IAAI,CAAC;IAElC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,mBAAmB,CAClC,KAAK,CAAC,WAAW,EAAE,EACnB,SAAS,CAAC,WAAW,EAAE,CACxB,CAAC;QACF,IAAI,QAAQ,GAAG,WAAW,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YAC5C,oCAAoC;YACpC,WAAW,GAAG,QAAQ,CAAC;YACvB,OAAO,GAAG,SAAS,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,CAAS,EAAE,CAAS;IAC/C,MAAM,MAAM,GAAe,EAAE,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACxC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CACtB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,EAAE,eAAe;gBAC3C,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,EAAE,YAAY;gBACpC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,WAAW;iBACnC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAE,CAAC,CAAC,CAAC,MAAM,CAAE,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B,CAAC,KAA8B;IACxE,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,gEAAgE;IAChE,iDAAiD;IAEjD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,IAA6B;IACjE,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,wBAAwB;IACxB,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACrE,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,MAAM,kBAAkB,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACvE,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC/D,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|