@mcptoolshop/file-forge 0.1.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.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +125 -0
  3. package/build/config/index.d.ts +29 -0
  4. package/build/config/index.d.ts.map +1 -0
  5. package/build/config/index.js +229 -0
  6. package/build/config/index.js.map +1 -0
  7. package/build/index.d.ts +9 -0
  8. package/build/index.d.ts.map +1 -0
  9. package/build/index.js +23 -0
  10. package/build/index.js.map +1 -0
  11. package/build/security/index.d.ts +8 -0
  12. package/build/security/index.d.ts.map +1 -0
  13. package/build/security/index.js +8 -0
  14. package/build/security/index.js.map +1 -0
  15. package/build/security/read-only.d.ts +32 -0
  16. package/build/security/read-only.d.ts.map +1 -0
  17. package/build/security/read-only.js +62 -0
  18. package/build/security/read-only.js.map +1 -0
  19. package/build/security/sandbox.d.ts +60 -0
  20. package/build/security/sandbox.d.ts.map +1 -0
  21. package/build/security/sandbox.js +231 -0
  22. package/build/security/sandbox.js.map +1 -0
  23. package/build/server.d.ts +20 -0
  24. package/build/server.d.ts.map +1 -0
  25. package/build/server.js +63 -0
  26. package/build/server.js.map +1 -0
  27. package/build/tools/metadata.d.ts +11 -0
  28. package/build/tools/metadata.d.ts.map +1 -0
  29. package/build/tools/metadata.js +423 -0
  30. package/build/tools/metadata.js.map +1 -0
  31. package/build/tools/read.d.ts +11 -0
  32. package/build/tools/read.d.ts.map +1 -0
  33. package/build/tools/read.js +335 -0
  34. package/build/tools/read.js.map +1 -0
  35. package/build/tools/scaffold.d.ts +11 -0
  36. package/build/tools/scaffold.d.ts.map +1 -0
  37. package/build/tools/scaffold.js +345 -0
  38. package/build/tools/scaffold.js.map +1 -0
  39. package/build/tools/search.d.ts +11 -0
  40. package/build/tools/search.d.ts.map +1 -0
  41. package/build/tools/search.js +250 -0
  42. package/build/tools/search.js.map +1 -0
  43. package/build/tools/write.d.ts +11 -0
  44. package/build/tools/write.d.ts.map +1 -0
  45. package/build/tools/write.js +538 -0
  46. package/build/tools/write.js.map +1 -0
  47. package/build/types.d.ts +402 -0
  48. package/build/types.d.ts.map +1 -0
  49. package/build/types.js +146 -0
  50. package/build/types.js.map +1 -0
  51. package/build/utils/errors.d.ts +43 -0
  52. package/build/utils/errors.d.ts.map +1 -0
  53. package/build/utils/errors.js +125 -0
  54. package/build/utils/errors.js.map +1 -0
  55. package/build/utils/index.d.ts +10 -0
  56. package/build/utils/index.d.ts.map +1 -0
  57. package/build/utils/index.js +9 -0
  58. package/build/utils/index.js.map +1 -0
  59. package/build/utils/logger.d.ts +88 -0
  60. package/build/utils/logger.d.ts.map +1 -0
  61. package/build/utils/logger.js +166 -0
  62. package/build/utils/logger.js.map +1 -0
  63. package/build/utils/validation.d.ts +43 -0
  64. package/build/utils/validation.d.ts.map +1 -0
  65. package/build/utils/validation.js +196 -0
  66. package/build/utils/validation.js.map +1 -0
  67. package/package.json +64 -0
  68. package/templates/typescript-starter/package.json +18 -0
  69. package/templates/typescript-starter/src/index.ts +9 -0
  70. package/templates/typescript-starter/template.json +24 -0
  71. package/templates/typescript-starter/tsconfig.json +14 -0
@@ -0,0 +1,125 @@
1
+ /**
2
+ * MCP File Forge - Error Utilities
3
+ *
4
+ * Structured error handling and response formatting.
5
+ */
6
+ import { ErrorCode } from '../types.js';
7
+ import { log } from './logger.js';
8
+ /**
9
+ * Create a structured error object.
10
+ */
11
+ export function createError(code, message, details) {
12
+ return {
13
+ code,
14
+ message,
15
+ details,
16
+ };
17
+ }
18
+ /**
19
+ * Format a FileForgeError as a tool error result.
20
+ */
21
+ export function formatErrorResult(error) {
22
+ log.error(`${error.code}: ${error.message}`, 'error');
23
+ return {
24
+ isError: true,
25
+ content: [
26
+ {
27
+ type: 'text',
28
+ text: JSON.stringify(error),
29
+ },
30
+ ],
31
+ };
32
+ }
33
+ /**
34
+ * Create an error result directly.
35
+ */
36
+ export function errorResult(code, message, details) {
37
+ return formatErrorResult(createError(code, message, details));
38
+ }
39
+ /**
40
+ * Format a success result with JSON data.
41
+ */
42
+ export function successResult(data) {
43
+ return {
44
+ content: [
45
+ {
46
+ type: 'text',
47
+ text: typeof data === 'string' ? data : JSON.stringify(data, null, 2),
48
+ },
49
+ ],
50
+ };
51
+ }
52
+ /**
53
+ * Wrap a function with error handling.
54
+ */
55
+ export function withErrorHandling(fn, context) {
56
+ return async (...args) => {
57
+ try {
58
+ return await fn(...args);
59
+ }
60
+ catch (error) {
61
+ const err = error;
62
+ log.error(`Unhandled error in ${context}: ${err.message}`, context);
63
+ // Map common Node.js errors to our error codes
64
+ switch (err.code) {
65
+ case 'ENOENT':
66
+ return errorResult(ErrorCode.FILE_NOT_FOUND, `File or directory not found: ${err.path ?? 'unknown'}`);
67
+ case 'EACCES':
68
+ return errorResult(ErrorCode.PERMISSION_DENIED, `Permission denied: ${err.path ?? 'unknown'}`);
69
+ case 'EEXIST':
70
+ return errorResult(ErrorCode.ALREADY_EXISTS, `File or directory already exists: ${err.path ?? 'unknown'}`);
71
+ case 'ENOTEMPTY':
72
+ return errorResult(ErrorCode.DIRECTORY_NOT_EMPTY, `Directory is not empty: ${err.path ?? 'unknown'}`);
73
+ case 'EISDIR':
74
+ return errorResult(ErrorCode.INVALID_PATH, `Expected a file but got a directory: ${err.path ?? 'unknown'}`);
75
+ case 'ENOTDIR':
76
+ return errorResult(ErrorCode.INVALID_PATH, `Expected a directory but got a file: ${err.path ?? 'unknown'}`);
77
+ default:
78
+ return errorResult(ErrorCode.UNKNOWN_ERROR, `Unexpected error: ${err.message}`, {
79
+ error_code: err.code,
80
+ stack: process.env.NODE_ENV === 'development' ? err.stack : undefined,
81
+ });
82
+ }
83
+ }
84
+ };
85
+ }
86
+ /**
87
+ * Validate that a value is defined.
88
+ */
89
+ export function assertDefined(value, errorMessage) {
90
+ if (value === undefined || value === null) {
91
+ throw new Error(errorMessage);
92
+ }
93
+ }
94
+ /**
95
+ * Safe JSON parse with error handling.
96
+ */
97
+ export function safeJsonParse(json) {
98
+ try {
99
+ return JSON.parse(json);
100
+ }
101
+ catch {
102
+ return null;
103
+ }
104
+ }
105
+ /**
106
+ * Format bytes to human readable string.
107
+ */
108
+ export function formatBytes(bytes, decimals = 2) {
109
+ if (bytes === 0)
110
+ return '0 Bytes';
111
+ const k = 1024;
112
+ const dm = decimals < 0 ? 0 : decimals;
113
+ const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];
114
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
115
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
116
+ }
117
+ /**
118
+ * Truncate a string to a maximum length.
119
+ */
120
+ export function truncate(str, maxLength, suffix = '...') {
121
+ if (str.length <= maxLength)
122
+ return str;
123
+ return str.slice(0, maxLength - suffix.length) + suffix;
124
+ }
125
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * MCP File Forge - Utilities Module
3
+ *
4
+ * Exports all utility functions.
5
+ */
6
+ export { getLogger, resetLogger, log } from './logger.js';
7
+ export type { LogLevel } from './logger.js';
8
+ export { createError, formatErrorResult, errorResult, successResult, withErrorHandling, assertDefined, safeJsonParse, formatBytes, truncate, } from './errors.js';
9
+ export { validateEncoding, normalizeEncoding, validatePath, sanitizePath, validateGlobPattern, validateRegexPattern, validateLineRange, validatePositiveInt, looksLikePath, } from './validation.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAC1D,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,WAAW,EACX,QAAQ,GACT,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,GACd,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MCP File Forge - Utilities Module
3
+ *
4
+ * Exports all utility functions.
5
+ */
6
+ export { getLogger, resetLogger, log } from './logger.js';
7
+ export { createError, formatErrorResult, errorResult, successResult, withErrorHandling, assertDefined, safeJsonParse, formatBytes, truncate, } from './errors.js';
8
+ export { validateEncoding, normalizeEncoding, validatePath, sanitizePath, validateGlobPattern, validateRegexPattern, validateLineRange, validatePositiveInt, looksLikePath, } from './validation.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAG1D,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,WAAW,EACX,QAAQ,GACT,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,GACd,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * MCP File Forge - Logger Utility
3
+ *
4
+ * Structured logging that writes to stderr (for STDIO transport compatibility).
5
+ */
6
+ /**
7
+ * Log levels in order of severity.
8
+ */
9
+ export type LogLevel = 'error' | 'warn' | 'info' | 'debug';
10
+ /**
11
+ * Logger configuration.
12
+ */
13
+ interface LoggerConfig {
14
+ level: LogLevel;
15
+ prefix: string;
16
+ file?: string;
17
+ }
18
+ /**
19
+ * Logger class for structured logging.
20
+ */
21
+ declare class Logger {
22
+ private config;
23
+ private fileStream;
24
+ constructor(config?: Partial<LoggerConfig>);
25
+ /**
26
+ * Initialize file stream for logging.
27
+ */
28
+ private initFileStream;
29
+ /**
30
+ * Check if a log level should be output.
31
+ */
32
+ private shouldLog;
33
+ /**
34
+ * Format a log message.
35
+ */
36
+ private format;
37
+ /**
38
+ * Write a log message.
39
+ */
40
+ private write;
41
+ /**
42
+ * Log an error message.
43
+ */
44
+ error(message: string, context?: string): void;
45
+ /**
46
+ * Log a warning message.
47
+ */
48
+ warn(message: string, context?: string): void;
49
+ /**
50
+ * Log an info message.
51
+ */
52
+ info(message: string, context?: string): void;
53
+ /**
54
+ * Log a debug message.
55
+ */
56
+ debug(message: string, context?: string): void;
57
+ /**
58
+ * Update logger configuration.
59
+ */
60
+ setConfig(config: Partial<LoggerConfig>): void;
61
+ /**
62
+ * Close the file stream.
63
+ */
64
+ closeFileStream(): void;
65
+ /**
66
+ * Get current log level.
67
+ */
68
+ getLevel(): LogLevel;
69
+ }
70
+ /**
71
+ * Get or create the global logger.
72
+ */
73
+ export declare function getLogger(config?: Partial<LoggerConfig>): Logger;
74
+ /**
75
+ * Reset the global logger (for testing).
76
+ */
77
+ export declare function resetLogger(): void;
78
+ /**
79
+ * Convenience exports for quick logging.
80
+ */
81
+ export declare const log: {
82
+ error: (message: string, context?: string) => void;
83
+ warn: (message: string, context?: string) => void;
84
+ info: (message: string, context?: string) => void;
85
+ debug: (message: string, context?: string) => void;
86
+ };
87
+ export {};
88
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAS3D;;GAEG;AACH,UAAU,YAAY;IACpB,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,cAAM,MAAM;IACV,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,UAAU,CAA+B;gBAErC,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IAY9C;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,MAAM;IAOd;;OAEG;IACH,OAAO,CAAC,KAAK;IAcb;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAI9C;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAI7C;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAI7C;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAI9C;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAc9C;;OAEG;IACH,eAAe,IAAI,IAAI;IAOvB;;OAEG;IACH,QAAQ,IAAI,QAAQ;CAGrB;AAOD;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAOhE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAKlC;AAED;;GAEG;AACH,eAAO,MAAM,GAAG;qBACG,MAAM,YAAY,MAAM;oBACzB,MAAM,YAAY,MAAM;oBACxB,MAAM,YAAY,MAAM;qBACvB,MAAM,YAAY,MAAM;CAC1C,CAAC"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * MCP File Forge - Logger Utility
3
+ *
4
+ * Structured logging that writes to stderr (for STDIO transport compatibility).
5
+ */
6
+ import * as fs from 'node:fs';
7
+ import * as path from 'node:path';
8
+ const LOG_LEVELS = {
9
+ error: 0,
10
+ warn: 1,
11
+ info: 2,
12
+ debug: 3,
13
+ };
14
+ /**
15
+ * Logger class for structured logging.
16
+ */
17
+ class Logger {
18
+ config;
19
+ fileStream = null;
20
+ constructor(config = {}) {
21
+ this.config = {
22
+ level: config.level ?? 'info',
23
+ prefix: config.prefix ?? 'mcp-file-forge',
24
+ file: config.file,
25
+ };
26
+ if (this.config.file) {
27
+ this.initFileStream();
28
+ }
29
+ }
30
+ /**
31
+ * Initialize file stream for logging.
32
+ */
33
+ initFileStream() {
34
+ if (!this.config.file)
35
+ return;
36
+ try {
37
+ const logDir = path.dirname(this.config.file);
38
+ if (!fs.existsSync(logDir)) {
39
+ fs.mkdirSync(logDir, { recursive: true });
40
+ }
41
+ this.fileStream = fs.createWriteStream(this.config.file, { flags: 'a' });
42
+ }
43
+ catch (error) {
44
+ console.error(`Failed to create log file: ${error}`);
45
+ }
46
+ }
47
+ /**
48
+ * Check if a log level should be output.
49
+ */
50
+ shouldLog(level) {
51
+ return LOG_LEVELS[level] <= LOG_LEVELS[this.config.level];
52
+ }
53
+ /**
54
+ * Format a log message.
55
+ */
56
+ format(level, message, context) {
57
+ const timestamp = new Date().toISOString();
58
+ const levelUpper = level.toUpperCase().padEnd(5);
59
+ const contextStr = context ? `[${context}] ` : '';
60
+ return `[${timestamp}] [${levelUpper}] [${this.config.prefix}] ${contextStr}${message}`;
61
+ }
62
+ /**
63
+ * Write a log message.
64
+ */
65
+ write(level, message, context) {
66
+ if (!this.shouldLog(level))
67
+ return;
68
+ const formatted = this.format(level, message, context);
69
+ // Always write to stderr (stdout is for MCP protocol)
70
+ console.error(formatted);
71
+ // Optionally write to file
72
+ if (this.fileStream) {
73
+ this.fileStream.write(formatted + '\n');
74
+ }
75
+ }
76
+ /**
77
+ * Log an error message.
78
+ */
79
+ error(message, context) {
80
+ this.write('error', message, context);
81
+ }
82
+ /**
83
+ * Log a warning message.
84
+ */
85
+ warn(message, context) {
86
+ this.write('warn', message, context);
87
+ }
88
+ /**
89
+ * Log an info message.
90
+ */
91
+ info(message, context) {
92
+ this.write('info', message, context);
93
+ }
94
+ /**
95
+ * Log a debug message.
96
+ */
97
+ debug(message, context) {
98
+ this.write('debug', message, context);
99
+ }
100
+ /**
101
+ * Update logger configuration.
102
+ */
103
+ setConfig(config) {
104
+ if (config.level) {
105
+ this.config.level = config.level;
106
+ }
107
+ if (config.prefix) {
108
+ this.config.prefix = config.prefix;
109
+ }
110
+ if (config.file && config.file !== this.config.file) {
111
+ this.config.file = config.file;
112
+ this.closeFileStream();
113
+ this.initFileStream();
114
+ }
115
+ }
116
+ /**
117
+ * Close the file stream.
118
+ */
119
+ closeFileStream() {
120
+ if (this.fileStream) {
121
+ this.fileStream.end();
122
+ this.fileStream = null;
123
+ }
124
+ }
125
+ /**
126
+ * Get current log level.
127
+ */
128
+ getLevel() {
129
+ return this.config.level;
130
+ }
131
+ }
132
+ /**
133
+ * Global logger instance.
134
+ */
135
+ let globalLogger = null;
136
+ /**
137
+ * Get or create the global logger.
138
+ */
139
+ export function getLogger(config) {
140
+ if (!globalLogger) {
141
+ globalLogger = new Logger(config);
142
+ }
143
+ else if (config) {
144
+ globalLogger.setConfig(config);
145
+ }
146
+ return globalLogger;
147
+ }
148
+ /**
149
+ * Reset the global logger (for testing).
150
+ */
151
+ export function resetLogger() {
152
+ if (globalLogger) {
153
+ globalLogger.closeFileStream();
154
+ globalLogger = null;
155
+ }
156
+ }
157
+ /**
158
+ * Convenience exports for quick logging.
159
+ */
160
+ export const log = {
161
+ error: (message, context) => getLogger().error(message, context),
162
+ warn: (message, context) => getLogger().warn(message, context),
163
+ info: (message, context) => getLogger().info(message, context),
164
+ debug: (message, context) => getLogger().debug(message, context),
165
+ };
166
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * MCP File Forge - Validation Utilities
3
+ *
4
+ * Input validation and path sanitization.
5
+ */
6
+ import type { FileForgeError } from '../types.js';
7
+ /**
8
+ * Validate and normalize an encoding string.
9
+ */
10
+ export declare function validateEncoding(encoding: string): FileForgeError | null;
11
+ /**
12
+ * Normalize an encoding string to Node.js format.
13
+ */
14
+ export declare function normalizeEncoding(encoding: string): BufferEncoding;
15
+ /**
16
+ * Validate a file path is not empty or malformed.
17
+ */
18
+ export declare function validatePath(inputPath: string): FileForgeError | null;
19
+ /**
20
+ * Sanitize a path for safe use.
21
+ */
22
+ export declare function sanitizePath(inputPath: string): string;
23
+ /**
24
+ * Validate a glob pattern.
25
+ */
26
+ export declare function validateGlobPattern(pattern: string): FileForgeError | null;
27
+ /**
28
+ * Validate a regex pattern.
29
+ */
30
+ export declare function validateRegexPattern(pattern: string): FileForgeError | null;
31
+ /**
32
+ * Validate line numbers for file reading.
33
+ */
34
+ export declare function validateLineRange(startLine?: number, endLine?: number): FileForgeError | null;
35
+ /**
36
+ * Validate a positive integer.
37
+ */
38
+ export declare function validatePositiveInt(value: number, fieldName: string): FileForgeError | null;
39
+ /**
40
+ * Check if a string looks like a path (vs. content).
41
+ */
42
+ export declare function looksLikePath(str: string): boolean;
43
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAoBlD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAcxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAUlE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA8BrE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAuB1E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAc3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,cAAc,GAAG,IAAI,CA0BvB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,cAAc,GAAG,IAAI,CASvB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAsBlD"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * MCP File Forge - Validation Utilities
3
+ *
4
+ * Input validation and path sanitization.
5
+ */
6
+ import * as path from 'node:path';
7
+ import { ErrorCode } from '../types.js';
8
+ /**
9
+ * Supported file encodings.
10
+ */
11
+ const SUPPORTED_ENCODINGS = [
12
+ 'utf-8',
13
+ 'utf8',
14
+ 'utf-16le',
15
+ 'utf16le',
16
+ 'latin1',
17
+ 'binary',
18
+ 'ascii',
19
+ 'base64',
20
+ 'hex',
21
+ ];
22
+ /**
23
+ * Validate and normalize an encoding string.
24
+ */
25
+ export function validateEncoding(encoding) {
26
+ const normalized = encoding.toLowerCase().replace('-', '');
27
+ if (!SUPPORTED_ENCODINGS.includes(normalized)) {
28
+ return {
29
+ code: ErrorCode.INVALID_ENCODING,
30
+ message: `Unsupported encoding: ${encoding}`,
31
+ details: {
32
+ supported: SUPPORTED_ENCODINGS,
33
+ },
34
+ };
35
+ }
36
+ return null;
37
+ }
38
+ /**
39
+ * Normalize an encoding string to Node.js format.
40
+ */
41
+ export function normalizeEncoding(encoding) {
42
+ const normalized = encoding.toLowerCase().replace('-', '');
43
+ // Map common variations
44
+ const mapping = {
45
+ utf8: 'utf-8',
46
+ utf16le: 'utf-16le',
47
+ };
48
+ return (mapping[normalized] ?? encoding);
49
+ }
50
+ /**
51
+ * Validate a file path is not empty or malformed.
52
+ */
53
+ export function validatePath(inputPath) {
54
+ // Check for empty path
55
+ if (!inputPath || inputPath.trim() === '') {
56
+ return {
57
+ code: ErrorCode.INVALID_PATH,
58
+ message: 'Path cannot be empty',
59
+ };
60
+ }
61
+ // Check for null bytes
62
+ if (inputPath.includes('\0')) {
63
+ return {
64
+ code: ErrorCode.INVALID_PATH,
65
+ message: 'Path contains null bytes',
66
+ };
67
+ }
68
+ // Check for overly long paths (Windows limit)
69
+ if (inputPath.length > 32767) {
70
+ return {
71
+ code: ErrorCode.INVALID_PATH,
72
+ message: 'Path is too long',
73
+ details: {
74
+ length: inputPath.length,
75
+ max_length: 32767,
76
+ },
77
+ };
78
+ }
79
+ return null;
80
+ }
81
+ /**
82
+ * Sanitize a path for safe use.
83
+ */
84
+ export function sanitizePath(inputPath) {
85
+ // Resolve to absolute path
86
+ const resolved = path.resolve(inputPath);
87
+ // Normalize path separators and remove redundant components
88
+ return path.normalize(resolved);
89
+ }
90
+ /**
91
+ * Validate a glob pattern.
92
+ */
93
+ export function validateGlobPattern(pattern) {
94
+ // Check for empty pattern
95
+ if (!pattern || pattern.trim() === '') {
96
+ return {
97
+ code: ErrorCode.INVALID_PATH,
98
+ message: 'Glob pattern cannot be empty',
99
+ };
100
+ }
101
+ // Check for patterns that might cause excessive recursion
102
+ const doubleStarCount = (pattern.match(/\*\*/g) || []).length;
103
+ if (doubleStarCount > 5) {
104
+ return {
105
+ code: ErrorCode.INVALID_PATH,
106
+ message: 'Glob pattern has too many ** wildcards',
107
+ details: {
108
+ count: doubleStarCount,
109
+ max: 5,
110
+ },
111
+ };
112
+ }
113
+ return null;
114
+ }
115
+ /**
116
+ * Validate a regex pattern.
117
+ */
118
+ export function validateRegexPattern(pattern) {
119
+ try {
120
+ new RegExp(pattern);
121
+ return null;
122
+ }
123
+ catch (error) {
124
+ const err = error;
125
+ return {
126
+ code: ErrorCode.INVALID_PATH,
127
+ message: `Invalid regex pattern: ${err.message}`,
128
+ details: {
129
+ pattern,
130
+ },
131
+ };
132
+ }
133
+ }
134
+ /**
135
+ * Validate line numbers for file reading.
136
+ */
137
+ export function validateLineRange(startLine, endLine) {
138
+ if (startLine !== undefined && startLine < 1) {
139
+ return {
140
+ code: ErrorCode.INVALID_PATH,
141
+ message: 'Start line must be 1 or greater',
142
+ details: { start_line: startLine },
143
+ };
144
+ }
145
+ if (endLine !== undefined && endLine < 1) {
146
+ return {
147
+ code: ErrorCode.INVALID_PATH,
148
+ message: 'End line must be 1 or greater',
149
+ details: { end_line: endLine },
150
+ };
151
+ }
152
+ if (startLine !== undefined && endLine !== undefined && startLine > endLine) {
153
+ return {
154
+ code: ErrorCode.INVALID_PATH,
155
+ message: 'Start line cannot be greater than end line',
156
+ details: { start_line: startLine, end_line: endLine },
157
+ };
158
+ }
159
+ return null;
160
+ }
161
+ /**
162
+ * Validate a positive integer.
163
+ */
164
+ export function validatePositiveInt(value, fieldName) {
165
+ if (!Number.isInteger(value) || value < 0) {
166
+ return {
167
+ code: ErrorCode.INVALID_PATH,
168
+ message: `${fieldName} must be a non-negative integer`,
169
+ details: { value },
170
+ };
171
+ }
172
+ return null;
173
+ }
174
+ /**
175
+ * Check if a string looks like a path (vs. content).
176
+ */
177
+ export function looksLikePath(str) {
178
+ // Check for common path patterns
179
+ if (str.startsWith('/') || str.startsWith('./') || str.startsWith('../')) {
180
+ return true;
181
+ }
182
+ // Windows absolute paths
183
+ if (/^[A-Za-z]:[/\\]/.test(str)) {
184
+ return true;
185
+ }
186
+ // Contains path separators
187
+ if (str.includes('/') || str.includes('\\')) {
188
+ return true;
189
+ }
190
+ // Common file extensions
191
+ if (/\.[a-zA-Z0-9]{1,10}$/.test(str)) {
192
+ return true;
193
+ }
194
+ return false;
195
+ }
196
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}