fix(core): Resolve TypeScript strict mode and ES client API compatibility issues for v3.0.0

- Fix ES client v8+ API: use document/doc instead of body for index/update operations
- Add type assertions (as any) for ES client ILM, template, and search APIs
- Fix strict null checks with proper undefined handling (nullish coalescing)
- Fix MetricsCollector interface to match required method signatures
- Fix Logger.error signature compatibility in plugins
- Resolve TermsQuery type index signature conflict
- Remove sourceMap from tsconfig (handled by tsbuild with inlineSourceMap)
This commit is contained in:
2025-11-29 21:19:28 +00:00
parent ec8dfbcfe6
commit 820f84ee61
30 changed files with 344 additions and 220 deletions

View File

@@ -107,17 +107,12 @@ export function createLoggingPlugin(config: LoggingPluginConfig = {}): Plugin {
const duration = Date.now() - context.request.startTime;
logger.error('Elasticsearch error', {
logger.error('Elasticsearch error', context.error, {
requestId: context.request.requestId,
method: context.request.method,
path: context.request.path,
duration,
attempts: context.attempts,
error: {
name: context.error.name,
message: context.error.message,
stack: context.error.stack,
},
statusCode: context.response?.statusCode,
});

View File

@@ -128,14 +128,19 @@ function extractIndexFromPath(path: string): string {
// Split by slash and get first segment
const segments = cleanPath.split('/');
const firstSegment = segments[0];
// Common patterns:
// /{index}/_search
// /{index}/_doc/{id}
// /_cat/indices
if (segments[0].startsWith('_')) {
return segments[0]; // API endpoint like _cat, _search
if (!firstSegment) {
return 'unknown';
}
return segments[0] || 'unknown';
if (firstSegment.startsWith('_')) {
return firstSegment; // API endpoint like _cat, _search
}
return firstSegment;
}

View File

@@ -63,7 +63,7 @@ export class PluginManager {
try {
await plugin.initialize(this.client, plugin.config || {});
} catch (error) {
this.logger.error(`Failed to initialize plugin '${plugin.name}'`, { error });
this.logger.error(`Failed to initialize plugin '${plugin.name}'`, error instanceof Error ? error : new Error(String(error)));
throw error;
}
}
@@ -109,7 +109,7 @@ export class PluginManager {
try {
await plugin.destroy();
} catch (error) {
this.logger.error(`Failed to destroy plugin '${name}'`, { error });
this.logger.error(`Failed to destroy plugin '${name}'`, error instanceof Error ? error : new Error(String(error)));
}
}
@@ -186,16 +186,15 @@ export class PluginManager {
}
currentContext = result;
} catch (error: any) {
this.logger.error(`Error in beforeRequest hook for plugin '${plugin.name}'`, {
error,
});
} catch (error: unknown) {
const err = error instanceof Error ? error : new Error(String(error));
this.logger.error(`Error in beforeRequest hook for plugin '${plugin.name}'`, err);
if (this.config.collectStats) {
const stats = this.pluginStats.get(plugin.name);
if (stats) {
stats.errors++;
stats.lastError = error.message;
stats.lastError = err.message;
}
}
@@ -245,16 +244,15 @@ export class PluginManager {
});
currentResponse = result;
} catch (error: any) {
this.logger.error(`Error in afterResponse hook for plugin '${plugin.name}'`, {
error,
});
} catch (error: unknown) {
const err = error instanceof Error ? error : new Error(String(error));
this.logger.error(`Error in afterResponse hook for plugin '${plugin.name}'`, err);
if (this.config.collectStats) {
const stats = this.pluginStats.get(plugin.name);
if (stats) {
stats.errors++;
stats.lastError = error.message;
stats.lastError = err.message;
}
}
@@ -303,14 +301,15 @@ export class PluginManager {
this.logger.debug(`Error handled by plugin '${plugin.name}'`);
return result;
}
} catch (error: any) {
this.logger.error(`Error in onError hook for plugin '${plugin.name}'`, { error });
} catch (error: unknown) {
const err = error instanceof Error ? error : new Error(String(error));
this.logger.error(`Error in onError hook for plugin '${plugin.name}'`, err);
if (this.config.collectStats) {
const stats = this.pluginStats.get(plugin.name);
if (stats) {
stats.errors++;
stats.lastError = error.message;
stats.lastError = err.message;
}
}