solidworks-mcp-server 2.2.0 → 3.0.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/README.md +33 -10
- package/dist/application/services/command-bus.d.ts +39 -0
- package/dist/application/services/command-bus.d.ts.map +1 -0
- package/dist/application/services/command-bus.js +88 -0
- package/dist/application/services/command-bus.js.map +1 -0
- package/dist/application/services/event-bus.d.ts +31 -0
- package/dist/application/services/event-bus.d.ts.map +1 -0
- package/dist/application/services/event-bus.js +83 -0
- package/dist/application/services/event-bus.js.map +1 -0
- package/dist/application/services/query-bus.d.ts +30 -0
- package/dist/application/services/query-bus.d.ts.map +1 -0
- package/dist/application/services/query-bus.js +59 -0
- package/dist/application/services/query-bus.js.map +1 -0
- package/dist/application/services/tool-registry.d.ts +53 -0
- package/dist/application/services/tool-registry.d.ts.map +1 -0
- package/dist/application/services/tool-registry.js +81 -0
- package/dist/application/services/tool-registry.js.map +1 -0
- package/dist/application/use-cases/analysis/index.d.ts +13 -0
- package/dist/application/use-cases/analysis/index.d.ts.map +1 -0
- package/dist/application/use-cases/analysis/index.js +17 -0
- package/dist/application/use-cases/analysis/index.js.map +1 -0
- package/dist/application/use-cases/drawing/index.d.ts +13 -0
- package/dist/application/use-cases/drawing/index.d.ts.map +1 -0
- package/dist/application/use-cases/drawing/index.js +17 -0
- package/dist/application/use-cases/drawing/index.js.map +1 -0
- package/dist/application/use-cases/export/index.d.ts +13 -0
- package/dist/application/use-cases/export/index.d.ts.map +1 -0
- package/dist/application/use-cases/export/index.js +17 -0
- package/dist/application/use-cases/export/index.js.map +1 -0
- package/dist/application/use-cases/macro/index.d.ts +13 -0
- package/dist/application/use-cases/macro/index.d.ts.map +1 -0
- package/dist/application/use-cases/macro/index.js +17 -0
- package/dist/application/use-cases/macro/index.js.map +1 -0
- package/dist/application/use-cases/modeling/index.d.ts +56 -0
- package/dist/application/use-cases/modeling/index.d.ts.map +1 -0
- package/dist/application/use-cases/modeling/index.js +385 -0
- package/dist/application/use-cases/modeling/index.js.map +1 -0
- package/dist/core/interfaces/core-abstractions.d.ts +289 -0
- package/dist/core/interfaces/core-abstractions.d.ts.map +1 -0
- package/dist/core/interfaces/core-abstractions.js +121 -0
- package/dist/core/interfaces/core-abstractions.js.map +1 -0
- package/dist/index.refactored.d.ts +7 -0
- package/dist/index.refactored.d.ts.map +1 -0
- package/dist/index.refactored.js +254 -0
- package/dist/index.refactored.js.map +1 -0
- package/dist/infrastructure/config/configuration-manager.d.ts +381 -0
- package/dist/infrastructure/config/configuration-manager.d.ts.map +1 -0
- package/dist/infrastructure/config/configuration-manager.js +566 -0
- package/dist/infrastructure/config/configuration-manager.js.map +1 -0
- package/dist/infrastructure/container/service-locator.d.ts +14 -0
- package/dist/infrastructure/container/service-locator.d.ts.map +1 -0
- package/dist/infrastructure/container/service-locator.js +38 -0
- package/dist/infrastructure/container/service-locator.js.map +1 -0
- package/dist/infrastructure/logging/logger.d.ts +24 -0
- package/dist/infrastructure/logging/logger.d.ts.map +1 -0
- package/dist/infrastructure/logging/logger.js +65 -0
- package/dist/infrastructure/logging/logger.js.map +1 -0
- package/dist/infrastructure/solidworks/solidworks-adapter.d.ts +43 -0
- package/dist/infrastructure/solidworks/solidworks-adapter.d.ts.map +1 -0
- package/dist/infrastructure/solidworks/solidworks-adapter.js +527 -0
- package/dist/infrastructure/solidworks/solidworks-adapter.js.map +1 -0
- package/dist/presentation/mcp/request-handler.d.ts +41 -0
- package/dist/presentation/mcp/request-handler.d.ts.map +1 -0
- package/dist/presentation/mcp/request-handler.js +100 -0
- package/dist/presentation/mcp/request-handler.js.map +1 -0
- package/dist/presentation/transformers/error-transformer.d.ts +16 -0
- package/dist/presentation/transformers/error-transformer.d.ts.map +1 -0
- package/dist/presentation/transformers/error-transformer.js +44 -0
- package/dist/presentation/transformers/error-transformer.js.map +1 -0
- package/dist/presentation/transformers/response-transformer.d.ts +24 -0
- package/dist/presentation/transformers/response-transformer.d.ts.map +1 -0
- package/dist/presentation/transformers/response-transformer.js +102 -0
- package/dist/presentation/transformers/response-transformer.js.map +1 -0
- package/dist/resources/design-table.d.ts +28 -28
- package/dist/resources/pdm.d.ts +70 -70
- package/dist/shared/constants/solidworks-constants.d.ts +302 -0
- package/dist/shared/constants/solidworks-constants.d.ts.map +1 -0
- package/dist/shared/constants/solidworks-constants.js +471 -0
- package/dist/shared/constants/solidworks-constants.js.map +1 -0
- package/dist/tools/diagnostics.d.ts +21 -0
- package/dist/tools/diagnostics.d.ts.map +1 -0
- package/dist/tools/diagnostics.js +120 -0
- package/dist/tools/diagnostics.js.map +1 -0
- package/dist/tools/drawing-analysis.d.ts +9 -0
- package/dist/tools/drawing-analysis.d.ts.map +1 -0
- package/dist/tools/drawing-analysis.js +239 -0
- package/dist/tools/drawing-analysis.js.map +1 -0
- package/dist/tools/drawing.d.ts +4 -4
- package/dist/tools/enhanced-drawing.d.ts +51 -0
- package/dist/tools/enhanced-drawing.d.ts.map +1 -0
- package/dist/tools/enhanced-drawing.js +193 -0
- package/dist/tools/enhanced-drawing.js.map +1 -0
- package/dist/tools/export.d.ts +6 -6
- package/dist/tools/macro-security.d.ts +9 -0
- package/dist/tools/macro-security.d.ts.map +1 -0
- package/dist/tools/macro-security.js +86 -0
- package/dist/tools/macro-security.js.map +1 -0
- package/dist/tools/vba-advanced.d.ts +12 -12
- package/dist/tools/vba-assembly.d.ts +8 -8
- package/dist/tools/vba-drawing.d.ts +14 -14
- package/dist/tools/vba-file-management.d.ts +16 -16
- package/dist/tools/vba-part.d.ts +10 -10
- package/dist/tools/vba.d.ts +67 -67
- package/package.json +12 -7
|
@@ -0,0 +1,566 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Management System
|
|
3
|
+
* Centralized, type-safe configuration with validation
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { ResultUtil, ValidationError } from './core-abstractions';
|
|
7
|
+
import { config as dotenv } from 'dotenv';
|
|
8
|
+
import { readFileSync, existsSync, writeFileSync } from 'fs';
|
|
9
|
+
import { join } from 'path';
|
|
10
|
+
// ============================================
|
|
11
|
+
// CONFIGURATION SCHEMAS
|
|
12
|
+
// ============================================
|
|
13
|
+
/**
|
|
14
|
+
* Connection configuration schema
|
|
15
|
+
*/
|
|
16
|
+
const ConnectionConfigSchema = z.object({
|
|
17
|
+
solidworksPath: z.string().optional(),
|
|
18
|
+
retryAttempts: z.number().min(1).max(10).default(3),
|
|
19
|
+
retryDelay: z.number().min(100).max(10000).default(1000),
|
|
20
|
+
timeout: z.number().min(1000).max(300000).default(30000),
|
|
21
|
+
autoConnect: z.boolean().default(true),
|
|
22
|
+
});
|
|
23
|
+
/**
|
|
24
|
+
* Logging configuration schema
|
|
25
|
+
*/
|
|
26
|
+
const LoggingConfigSchema = z.object({
|
|
27
|
+
level: z.enum(['debug', 'info', 'warn', 'error', 'fatal']).default('info'),
|
|
28
|
+
console: z.boolean().default(true),
|
|
29
|
+
file: z.boolean().default(false),
|
|
30
|
+
filePath: z.string().optional(),
|
|
31
|
+
maxFileSize: z.number().min(1024).default(10485760), // 10MB
|
|
32
|
+
maxFiles: z.number().min(1).max(100).default(5),
|
|
33
|
+
format: z.enum(['json', 'text']).default('json'),
|
|
34
|
+
});
|
|
35
|
+
/**
|
|
36
|
+
* Cache configuration schema
|
|
37
|
+
*/
|
|
38
|
+
const CacheConfigSchema = z.object({
|
|
39
|
+
enabled: z.boolean().default(true),
|
|
40
|
+
maxEntries: z.number().min(10).max(10000).default(1000),
|
|
41
|
+
ttl: z.number().min(1000).default(3600000), // 1 hour
|
|
42
|
+
strategy: z.enum(['lru', 'lfu', 'fifo']).default('lru'),
|
|
43
|
+
});
|
|
44
|
+
/**
|
|
45
|
+
* Performance configuration schema
|
|
46
|
+
*/
|
|
47
|
+
const PerformanceConfigSchema = z.object({
|
|
48
|
+
maxConcurrentOperations: z.number().min(1).max(20).default(5),
|
|
49
|
+
operationTimeout: z.number().min(1000).default(60000),
|
|
50
|
+
memoryLimit: z.number().min(104857600).optional(), // 100MB minimum
|
|
51
|
+
enableMetrics: z.boolean().default(true),
|
|
52
|
+
});
|
|
53
|
+
/**
|
|
54
|
+
* Security configuration schema
|
|
55
|
+
*/
|
|
56
|
+
const SecurityConfigSchema = z.object({
|
|
57
|
+
enableMacroSecurity: z.boolean().default(true),
|
|
58
|
+
macroSecurityLevel: z.enum(['low', 'medium', 'high']).default('medium'),
|
|
59
|
+
trustedPaths: z.array(z.string()).default([]),
|
|
60
|
+
enableAudit: z.boolean().default(false),
|
|
61
|
+
encryptSensitiveData: z.boolean().default(true),
|
|
62
|
+
});
|
|
63
|
+
/**
|
|
64
|
+
* Templates configuration schema
|
|
65
|
+
*/
|
|
66
|
+
const TemplatesConfigSchema = z.object({
|
|
67
|
+
partTemplate: z.string().optional(),
|
|
68
|
+
assemblyTemplate: z.string().optional(),
|
|
69
|
+
drawingTemplate: z.string().optional(),
|
|
70
|
+
customTemplatesPath: z.string().optional(),
|
|
71
|
+
autoDetectTemplates: z.boolean().default(true),
|
|
72
|
+
});
|
|
73
|
+
/**
|
|
74
|
+
* Database configuration schema
|
|
75
|
+
*/
|
|
76
|
+
const DatabaseConfigSchema = z.object({
|
|
77
|
+
enabled: z.boolean().default(false),
|
|
78
|
+
type: z.enum(['mssql', 'postgresql', 'sqlite']).optional(),
|
|
79
|
+
connectionString: z.string().optional(),
|
|
80
|
+
poolSize: z.number().min(1).max(100).default(10),
|
|
81
|
+
connectionTimeout: z.number().min(1000).default(15000),
|
|
82
|
+
});
|
|
83
|
+
/**
|
|
84
|
+
* Feature flags schema
|
|
85
|
+
*/
|
|
86
|
+
const FeatureFlagsSchema = z.object({
|
|
87
|
+
enableMacroRecording: z.boolean().default(true),
|
|
88
|
+
enablePDM: z.boolean().default(false),
|
|
89
|
+
enableDesignTables: z.boolean().default(true),
|
|
90
|
+
enableVBAGeneration: z.boolean().default(true),
|
|
91
|
+
enableAdvancedAnalysis: z.boolean().default(false),
|
|
92
|
+
enableExperimentalFeatures: z.boolean().default(false),
|
|
93
|
+
});
|
|
94
|
+
/**
|
|
95
|
+
* Complete configuration schema
|
|
96
|
+
*/
|
|
97
|
+
const ConfigurationSchema = z.object({
|
|
98
|
+
connection: ConnectionConfigSchema,
|
|
99
|
+
logging: LoggingConfigSchema,
|
|
100
|
+
cache: CacheConfigSchema,
|
|
101
|
+
performance: PerformanceConfigSchema,
|
|
102
|
+
security: SecurityConfigSchema,
|
|
103
|
+
templates: TemplatesConfigSchema,
|
|
104
|
+
database: DatabaseConfigSchema,
|
|
105
|
+
features: FeatureFlagsSchema,
|
|
106
|
+
environment: z.enum(['development', 'staging', 'production']).default('production'),
|
|
107
|
+
version: z.string().default('2.0.0'),
|
|
108
|
+
});
|
|
109
|
+
/**
|
|
110
|
+
* Environment variables configuration source
|
|
111
|
+
*/
|
|
112
|
+
class EnvironmentConfigSource {
|
|
113
|
+
priority = 1;
|
|
114
|
+
async load() {
|
|
115
|
+
try {
|
|
116
|
+
dotenv();
|
|
117
|
+
const config = {};
|
|
118
|
+
// Map environment variables to configuration
|
|
119
|
+
const mappings = {
|
|
120
|
+
'SOLIDWORKS_PATH': ['connection', 'solidworksPath'],
|
|
121
|
+
'RETRY_ATTEMPTS': ['connection', 'retryAttempts'],
|
|
122
|
+
'RETRY_DELAY': ['connection', 'retryDelay'],
|
|
123
|
+
'CONNECTION_TIMEOUT': ['connection', 'timeout'],
|
|
124
|
+
'LOG_LEVEL': ['logging', 'level'],
|
|
125
|
+
'LOG_TO_FILE': ['logging', 'file'],
|
|
126
|
+
'LOG_FILE_PATH': ['logging', 'filePath'],
|
|
127
|
+
'CACHE_ENABLED': ['cache', 'enabled'],
|
|
128
|
+
'CACHE_TTL': ['cache', 'ttl'],
|
|
129
|
+
'MAX_CONCURRENT_OPS': ['performance', 'maxConcurrentOperations'],
|
|
130
|
+
'ENABLE_MACRO_RECORDING': ['features', 'enableMacroRecording'],
|
|
131
|
+
'ENABLE_PDM': ['features', 'enablePDM'],
|
|
132
|
+
'DB_CONNECTION_STRING': ['database', 'connectionString'],
|
|
133
|
+
'DB_TYPE': ['database', 'type'],
|
|
134
|
+
'NODE_ENV': ['environment'],
|
|
135
|
+
};
|
|
136
|
+
for (const [envVar, path] of Object.entries(mappings)) {
|
|
137
|
+
const value = process.env[envVar];
|
|
138
|
+
if (value !== undefined) {
|
|
139
|
+
this.setNestedValue(config, path, this.parseValue(value));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return ResultUtil.ok(config);
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
return ResultUtil.fail(new ValidationError('Failed to load environment configuration', { error }));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
setNestedValue(obj, path, value) {
|
|
149
|
+
const last = path[path.length - 1];
|
|
150
|
+
const parent = path.slice(0, -1).reduce((acc, key) => {
|
|
151
|
+
if (!acc[key])
|
|
152
|
+
acc[key] = {};
|
|
153
|
+
return acc[key];
|
|
154
|
+
}, obj);
|
|
155
|
+
parent[last] = value;
|
|
156
|
+
}
|
|
157
|
+
parseValue(value) {
|
|
158
|
+
// Try to parse as JSON first
|
|
159
|
+
try {
|
|
160
|
+
return JSON.parse(value);
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
// Parse booleans
|
|
164
|
+
if (value.toLowerCase() === 'true')
|
|
165
|
+
return true;
|
|
166
|
+
if (value.toLowerCase() === 'false')
|
|
167
|
+
return false;
|
|
168
|
+
// Parse numbers
|
|
169
|
+
const num = Number(value);
|
|
170
|
+
if (!isNaN(num))
|
|
171
|
+
return num;
|
|
172
|
+
// Return as string
|
|
173
|
+
return value;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* JSON file configuration source
|
|
179
|
+
*/
|
|
180
|
+
class JsonFileConfigSource {
|
|
181
|
+
filePath;
|
|
182
|
+
priority = 2;
|
|
183
|
+
constructor(filePath) {
|
|
184
|
+
this.filePath = filePath;
|
|
185
|
+
}
|
|
186
|
+
async load() {
|
|
187
|
+
try {
|
|
188
|
+
if (!existsSync(this.filePath)) {
|
|
189
|
+
return ResultUtil.ok({});
|
|
190
|
+
}
|
|
191
|
+
const content = readFileSync(this.filePath, 'utf-8');
|
|
192
|
+
const config = JSON.parse(content);
|
|
193
|
+
return ResultUtil.ok(config);
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
return ResultUtil.fail(new ValidationError('Failed to load JSON configuration', {
|
|
197
|
+
file: this.filePath,
|
|
198
|
+
error
|
|
199
|
+
}));
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
async save(config) {
|
|
203
|
+
try {
|
|
204
|
+
const content = JSON.stringify(config, null, 2);
|
|
205
|
+
writeFileSync(this.filePath, content, 'utf-8');
|
|
206
|
+
return ResultUtil.ok(undefined);
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
return ResultUtil.fail(new ValidationError('Failed to save JSON configuration', {
|
|
210
|
+
file: this.filePath,
|
|
211
|
+
error
|
|
212
|
+
}));
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Default configuration source
|
|
218
|
+
*/
|
|
219
|
+
class DefaultConfigSource {
|
|
220
|
+
priority = 0;
|
|
221
|
+
async load() {
|
|
222
|
+
const defaults = {
|
|
223
|
+
connection: {
|
|
224
|
+
retryAttempts: 3,
|
|
225
|
+
retryDelay: 1000,
|
|
226
|
+
timeout: 30000,
|
|
227
|
+
autoConnect: true,
|
|
228
|
+
},
|
|
229
|
+
logging: {
|
|
230
|
+
level: 'info',
|
|
231
|
+
console: true,
|
|
232
|
+
file: false,
|
|
233
|
+
maxFileSize: 10485760,
|
|
234
|
+
maxFiles: 5,
|
|
235
|
+
format: 'json',
|
|
236
|
+
},
|
|
237
|
+
cache: {
|
|
238
|
+
enabled: true,
|
|
239
|
+
maxEntries: 1000,
|
|
240
|
+
ttl: 3600000,
|
|
241
|
+
strategy: 'lru',
|
|
242
|
+
},
|
|
243
|
+
performance: {
|
|
244
|
+
maxConcurrentOperations: 5,
|
|
245
|
+
operationTimeout: 60000,
|
|
246
|
+
enableMetrics: true,
|
|
247
|
+
},
|
|
248
|
+
security: {
|
|
249
|
+
enableMacroSecurity: true,
|
|
250
|
+
macroSecurityLevel: 'medium',
|
|
251
|
+
trustedPaths: [],
|
|
252
|
+
enableAudit: false,
|
|
253
|
+
encryptSensitiveData: true,
|
|
254
|
+
},
|
|
255
|
+
templates: {
|
|
256
|
+
autoDetectTemplates: true,
|
|
257
|
+
},
|
|
258
|
+
database: {
|
|
259
|
+
enabled: false,
|
|
260
|
+
poolSize: 10,
|
|
261
|
+
connectionTimeout: 15000,
|
|
262
|
+
},
|
|
263
|
+
features: {
|
|
264
|
+
enableMacroRecording: true,
|
|
265
|
+
enablePDM: false,
|
|
266
|
+
enableDesignTables: true,
|
|
267
|
+
enableVBAGeneration: true,
|
|
268
|
+
enableAdvancedAnalysis: false,
|
|
269
|
+
enableExperimentalFeatures: false,
|
|
270
|
+
},
|
|
271
|
+
environment: 'production',
|
|
272
|
+
version: '2.0.0',
|
|
273
|
+
};
|
|
274
|
+
return ResultUtil.ok(defaults);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// ============================================
|
|
278
|
+
// CONFIGURATION MANAGER
|
|
279
|
+
// ============================================
|
|
280
|
+
/**
|
|
281
|
+
* Main configuration manager
|
|
282
|
+
*/
|
|
283
|
+
export class ConfigurationManager {
|
|
284
|
+
config = null;
|
|
285
|
+
sources = [];
|
|
286
|
+
listeners = new Map();
|
|
287
|
+
constructor() {
|
|
288
|
+
// Add default sources
|
|
289
|
+
this.addSource(new DefaultConfigSource());
|
|
290
|
+
this.addSource(new EnvironmentConfigSource());
|
|
291
|
+
// Add JSON file sources
|
|
292
|
+
const configPaths = [
|
|
293
|
+
join(process.cwd(), 'solidworks-mcp.config.json'),
|
|
294
|
+
join(process.cwd(), '.solidworks-mcp', 'config.json'),
|
|
295
|
+
join(process.env.APPDATA || '', 'solidworks-mcp', 'config.json'),
|
|
296
|
+
];
|
|
297
|
+
for (const path of configPaths) {
|
|
298
|
+
if (path && existsSync(path)) {
|
|
299
|
+
this.addSource(new JsonFileConfigSource(path));
|
|
300
|
+
break;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Add a configuration source
|
|
306
|
+
*/
|
|
307
|
+
addSource(source) {
|
|
308
|
+
this.sources.push(source);
|
|
309
|
+
this.sources.sort((a, b) => a.priority - b.priority);
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Load configuration from all sources
|
|
313
|
+
*/
|
|
314
|
+
async reload() {
|
|
315
|
+
try {
|
|
316
|
+
let mergedConfig = {};
|
|
317
|
+
// Load from all sources in priority order
|
|
318
|
+
for (const source of this.sources) {
|
|
319
|
+
const result = await source.load();
|
|
320
|
+
if (ResultUtil.isSuccess(result)) {
|
|
321
|
+
mergedConfig = this.deepMerge(mergedConfig, result.data);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
// Validate configuration
|
|
325
|
+
const validationResult = ConfigurationSchema.safeParse(mergedConfig);
|
|
326
|
+
if (!validationResult.success) {
|
|
327
|
+
return ResultUtil.fail(new ValidationError('Configuration validation failed', {
|
|
328
|
+
errors: validationResult.error.errors,
|
|
329
|
+
}));
|
|
330
|
+
}
|
|
331
|
+
const oldConfig = this.config;
|
|
332
|
+
this.config = validationResult.data;
|
|
333
|
+
// Notify listeners of changes
|
|
334
|
+
if (oldConfig) {
|
|
335
|
+
this.notifyChanges(oldConfig, this.config);
|
|
336
|
+
}
|
|
337
|
+
return ResultUtil.ok(undefined);
|
|
338
|
+
}
|
|
339
|
+
catch (error) {
|
|
340
|
+
return ResultUtil.fail(new ValidationError('Failed to reload configuration', { error }));
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Get configuration value
|
|
345
|
+
*/
|
|
346
|
+
get(key) {
|
|
347
|
+
if (!this.config) {
|
|
348
|
+
throw new Error('Configuration not loaded. Call reload() first.');
|
|
349
|
+
}
|
|
350
|
+
const keys = key.split('.');
|
|
351
|
+
let value = this.config;
|
|
352
|
+
for (const k of keys) {
|
|
353
|
+
if (value && typeof value === 'object' && k in value) {
|
|
354
|
+
value = value[k];
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
return undefined;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
return value;
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Get required configuration value
|
|
364
|
+
*/
|
|
365
|
+
getRequired(key) {
|
|
366
|
+
const value = this.get(key);
|
|
367
|
+
if (value === undefined) {
|
|
368
|
+
throw new Error(`Required configuration key not found: ${key}`);
|
|
369
|
+
}
|
|
370
|
+
return value;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Set configuration value
|
|
374
|
+
*/
|
|
375
|
+
set(key, value) {
|
|
376
|
+
if (!this.config) {
|
|
377
|
+
throw new Error('Configuration not loaded. Call reload() first.');
|
|
378
|
+
}
|
|
379
|
+
const keys = key.split('.');
|
|
380
|
+
const last = keys[keys.length - 1];
|
|
381
|
+
const parent = keys.slice(0, -1).reduce((acc, k) => {
|
|
382
|
+
if (!acc[k])
|
|
383
|
+
acc[k] = {};
|
|
384
|
+
return acc[k];
|
|
385
|
+
}, this.config);
|
|
386
|
+
const oldValue = parent[last];
|
|
387
|
+
parent[last] = value;
|
|
388
|
+
// Validate after change
|
|
389
|
+
const validationResult = this.validate();
|
|
390
|
+
if (ResultUtil.isFailure(validationResult)) {
|
|
391
|
+
// Rollback change
|
|
392
|
+
parent[last] = oldValue;
|
|
393
|
+
throw new Error(`Invalid configuration value for ${key}`);
|
|
394
|
+
}
|
|
395
|
+
// Notify listeners
|
|
396
|
+
this.notifyKey(key, value);
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Check if configuration has a key
|
|
400
|
+
*/
|
|
401
|
+
has(key) {
|
|
402
|
+
return this.get(key) !== undefined;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Validate current configuration
|
|
406
|
+
*/
|
|
407
|
+
validate() {
|
|
408
|
+
if (!this.config) {
|
|
409
|
+
return ResultUtil.fail(new ValidationError('No configuration loaded'));
|
|
410
|
+
}
|
|
411
|
+
const result = ConfigurationSchema.safeParse(this.config);
|
|
412
|
+
if (!result.success) {
|
|
413
|
+
return ResultUtil.fail(new ValidationError('Configuration validation failed', {
|
|
414
|
+
errors: result.error.errors,
|
|
415
|
+
}));
|
|
416
|
+
}
|
|
417
|
+
return ResultUtil.ok(undefined);
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Get full configuration
|
|
421
|
+
*/
|
|
422
|
+
getConfiguration() {
|
|
423
|
+
if (!this.config) {
|
|
424
|
+
throw new Error('Configuration not loaded. Call reload() first.');
|
|
425
|
+
}
|
|
426
|
+
return this.config;
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Save configuration to file
|
|
430
|
+
*/
|
|
431
|
+
async save(filePath) {
|
|
432
|
+
if (!this.config) {
|
|
433
|
+
return ResultUtil.fail(new ValidationError('No configuration to save'));
|
|
434
|
+
}
|
|
435
|
+
const path = filePath || join(process.cwd(), 'solidworks-mcp.config.json');
|
|
436
|
+
const source = new JsonFileConfigSource(path);
|
|
437
|
+
return source.save(this.config);
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Watch for configuration changes
|
|
441
|
+
*/
|
|
442
|
+
watch(key, callback) {
|
|
443
|
+
if (!this.listeners.has(key)) {
|
|
444
|
+
this.listeners.set(key, new Set());
|
|
445
|
+
}
|
|
446
|
+
this.listeners.get(key).add(callback);
|
|
447
|
+
// Return unsubscribe function
|
|
448
|
+
return () => {
|
|
449
|
+
const listeners = this.listeners.get(key);
|
|
450
|
+
if (listeners) {
|
|
451
|
+
listeners.delete(callback);
|
|
452
|
+
if (listeners.size === 0) {
|
|
453
|
+
this.listeners.delete(key);
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
// ============================================
|
|
459
|
+
// HELPER METHODS
|
|
460
|
+
// ============================================
|
|
461
|
+
/**
|
|
462
|
+
* Deep merge objects
|
|
463
|
+
*/
|
|
464
|
+
deepMerge(target, source) {
|
|
465
|
+
const result = { ...target };
|
|
466
|
+
for (const key in source) {
|
|
467
|
+
if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {
|
|
468
|
+
result[key] = this.deepMerge(result[key] || {}, source[key]);
|
|
469
|
+
}
|
|
470
|
+
else {
|
|
471
|
+
result[key] = source[key];
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
return result;
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Notify listeners of changes
|
|
478
|
+
*/
|
|
479
|
+
notifyChanges(oldConfig, newConfig) {
|
|
480
|
+
const changes = this.findChanges(oldConfig, newConfig);
|
|
481
|
+
for (const key of changes) {
|
|
482
|
+
this.notifyKey(key, this.get(key));
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
/**
|
|
486
|
+
* Notify listeners for a specific key
|
|
487
|
+
*/
|
|
488
|
+
notifyKey(key, value) {
|
|
489
|
+
const listeners = this.listeners.get(key);
|
|
490
|
+
if (listeners) {
|
|
491
|
+
for (const callback of listeners) {
|
|
492
|
+
try {
|
|
493
|
+
callback(value);
|
|
494
|
+
}
|
|
495
|
+
catch (error) {
|
|
496
|
+
console.error(`Error in configuration listener for ${key}:`, error);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Find changed keys between configurations
|
|
503
|
+
*/
|
|
504
|
+
findChanges(oldConfig, newConfig, prefix = '') {
|
|
505
|
+
const changes = [];
|
|
506
|
+
for (const key in newConfig) {
|
|
507
|
+
const fullKey = prefix ? `${prefix}.${key}` : key;
|
|
508
|
+
if (!(key in oldConfig)) {
|
|
509
|
+
changes.push(fullKey);
|
|
510
|
+
}
|
|
511
|
+
else if (typeof newConfig[key] === 'object' && !Array.isArray(newConfig[key])) {
|
|
512
|
+
changes.push(...this.findChanges(oldConfig[key], newConfig[key], fullKey));
|
|
513
|
+
}
|
|
514
|
+
else if (JSON.stringify(oldConfig[key]) !== JSON.stringify(newConfig[key])) {
|
|
515
|
+
changes.push(fullKey);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
return changes;
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
// ============================================
|
|
522
|
+
// SINGLETON INSTANCE
|
|
523
|
+
// ============================================
|
|
524
|
+
export const configManager = new ConfigurationManager();
|
|
525
|
+
// ============================================
|
|
526
|
+
// CONFIGURATION HELPERS
|
|
527
|
+
// ============================================
|
|
528
|
+
/**
|
|
529
|
+
* Get typed configuration sections
|
|
530
|
+
*/
|
|
531
|
+
export class ConfigHelper {
|
|
532
|
+
static getConnectionConfig() {
|
|
533
|
+
return configManager.getRequired('connection');
|
|
534
|
+
}
|
|
535
|
+
static getLoggingConfig() {
|
|
536
|
+
return configManager.getRequired('logging');
|
|
537
|
+
}
|
|
538
|
+
static getCacheConfig() {
|
|
539
|
+
return configManager.getRequired('cache');
|
|
540
|
+
}
|
|
541
|
+
static getPerformanceConfig() {
|
|
542
|
+
return configManager.getRequired('performance');
|
|
543
|
+
}
|
|
544
|
+
static getSecurityConfig() {
|
|
545
|
+
return configManager.getRequired('security');
|
|
546
|
+
}
|
|
547
|
+
static getTemplatesConfig() {
|
|
548
|
+
return configManager.getRequired('templates');
|
|
549
|
+
}
|
|
550
|
+
static getDatabaseConfig() {
|
|
551
|
+
return configManager.getRequired('database');
|
|
552
|
+
}
|
|
553
|
+
static getFeatureFlags() {
|
|
554
|
+
return configManager.getRequired('features');
|
|
555
|
+
}
|
|
556
|
+
static getEnvironment() {
|
|
557
|
+
return configManager.getRequired('environment');
|
|
558
|
+
}
|
|
559
|
+
static isDevelopment() {
|
|
560
|
+
return ConfigHelper.getEnvironment() === 'development';
|
|
561
|
+
}
|
|
562
|
+
static isProduction() {
|
|
563
|
+
return ConfigHelper.getEnvironment() === 'production';
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
//# sourceMappingURL=configuration-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configuration-manager.js","sourceRoot":"","sources":["../../../src/infrastructure/config/configuration-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service Locator Implementation
|
|
3
|
+
* Simple dependency injection container
|
|
4
|
+
*/
|
|
5
|
+
import { IServiceLocator } from '../../core/interfaces/core-abstractions.js';
|
|
6
|
+
export declare class ServiceLocator implements IServiceLocator {
|
|
7
|
+
private services;
|
|
8
|
+
private factories;
|
|
9
|
+
register<T>(token: symbol | string, instanceOrFactory: T | (() => T)): void;
|
|
10
|
+
resolve<T>(token: symbol | string): T;
|
|
11
|
+
has(token: symbol | string): boolean;
|
|
12
|
+
reset(): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=service-locator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-locator.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/container/service-locator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAE7E,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,SAAS,CAA8C;IAE/D,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,iBAAiB,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI;IAQ3E,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC;IAiBrC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;IAIpC,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service Locator Implementation
|
|
3
|
+
* Simple dependency injection container
|
|
4
|
+
*/
|
|
5
|
+
export class ServiceLocator {
|
|
6
|
+
services = new Map();
|
|
7
|
+
factories = new Map();
|
|
8
|
+
register(token, instanceOrFactory) {
|
|
9
|
+
if (typeof instanceOrFactory === 'function') {
|
|
10
|
+
this.factories.set(token, instanceOrFactory);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
this.services.set(token, instanceOrFactory);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
resolve(token) {
|
|
17
|
+
// Check if we have a direct instance
|
|
18
|
+
if (this.services.has(token)) {
|
|
19
|
+
return this.services.get(token);
|
|
20
|
+
}
|
|
21
|
+
// Check if we have a factory
|
|
22
|
+
if (this.factories.has(token)) {
|
|
23
|
+
const factory = this.factories.get(token);
|
|
24
|
+
const instance = factory();
|
|
25
|
+
this.services.set(token, instance);
|
|
26
|
+
return instance;
|
|
27
|
+
}
|
|
28
|
+
throw new Error(`Service not found: ${String(token)}`);
|
|
29
|
+
}
|
|
30
|
+
has(token) {
|
|
31
|
+
return this.services.has(token) || this.factories.has(token);
|
|
32
|
+
}
|
|
33
|
+
reset() {
|
|
34
|
+
this.services.clear();
|
|
35
|
+
this.factories.clear();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=service-locator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-locator.js","sourceRoot":"","sources":["../../../src/infrastructure/container/service-locator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,OAAO,cAAc;IACjB,QAAQ,GAA8B,IAAI,GAAG,EAAE,CAAC;IAChD,SAAS,GAAoC,IAAI,GAAG,EAAE,CAAC;IAE/D,QAAQ,CAAI,KAAsB,EAAE,iBAAgC;QAClE,IAAI,OAAO,iBAAiB,KAAK,UAAU,EAAE,CAAC;YAC5C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,iBAA4B,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,OAAO,CAAI,KAAsB;QAC/B,qCAAqC;QACrC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAM,CAAC;QACvC,CAAC;QAED,6BAA6B;QAC7B,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACnC,OAAO,QAAa,CAAC;QACvB,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,GAAG,CAAC,KAAsB;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger Implementation
|
|
3
|
+
* Production-ready logging with multiple transports
|
|
4
|
+
*/
|
|
5
|
+
import { ILogger } from '../../core/interfaces/core-abstractions.js';
|
|
6
|
+
export interface LoggerConfig {
|
|
7
|
+
level?: string;
|
|
8
|
+
console?: boolean;
|
|
9
|
+
file?: boolean;
|
|
10
|
+
filePath?: string;
|
|
11
|
+
format?: 'json' | 'text';
|
|
12
|
+
maxFileSize?: number;
|
|
13
|
+
maxFiles?: number;
|
|
14
|
+
}
|
|
15
|
+
export declare class Logger implements ILogger {
|
|
16
|
+
private winston;
|
|
17
|
+
constructor(config?: LoggerConfig);
|
|
18
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
19
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
20
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
21
|
+
error(message: string, error?: Error, context?: Record<string, unknown>): void;
|
|
22
|
+
fatal(message: string, error?: Error, context?: Record<string, unknown>): void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=logger.d.ts.map
|