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

@@ -18,6 +18,7 @@ We've successfully built **60% of a complete enterprise-grade Elasticsearch clie
### Phase 1: Foundation Layer (100% ✅)
#### 1. **Error Handling System**
- Complete typed error hierarchy (11 specialized error classes)
- Retry policies with exponential backoff and jitter
- Circuit breaker pattern for fault tolerance
@@ -25,11 +26,13 @@ We've successfully built **60% of a complete enterprise-grade Elasticsearch clie
- Rich error context and metadata
**Key Files:**
- `ts/core/errors/types.ts` - Error codes and types
- `ts/core/errors/elasticsearch-error.ts` - Error hierarchy
- `ts/core/errors/retry-policy.ts` - Retry logic
#### 2. **Observability Stack**
- **Logging**: Structured logging with levels, context, and correlation IDs
- **Metrics**: Prometheus-compatible Counter, Gauge, and Histogram
- **Tracing**: OpenTelemetry-compatible distributed tracing
@@ -37,11 +40,13 @@ We've successfully built **60% of a complete enterprise-grade Elasticsearch clie
- **Export**: Prometheus text format for metrics
**Key Files:**
- `ts/core/observability/logger.ts`
- `ts/core/observability/metrics.ts`
- `ts/core/observability/tracing.ts`
#### 3. **Configuration Management**
- Fluent configuration builder
- Multiple sources: env vars, files, objects, secrets
- Secret provider abstraction (AWS Secrets, Vault, etc.)
@@ -50,10 +55,12 @@ We've successfully built **60% of a complete enterprise-grade Elasticsearch clie
- TLS, proxy, connection pool configuration
**Key Files:**
- `ts/core/config/types.ts`
- `ts/core/config/configuration-builder.ts`
#### 4. **Connection Management**
- Singleton connection manager
- Connection pooling
- Automatic health checks with thresholds
@@ -62,6 +69,7 @@ We've successfully built **60% of a complete enterprise-grade Elasticsearch clie
- Graceful degradation
**Key Files:**
- `ts/core/connection/health-check.ts`
- `ts/core/connection/circuit-breaker.ts`
- `ts/core/connection/connection-manager.ts`
@@ -69,7 +77,9 @@ We've successfully built **60% of a complete enterprise-grade Elasticsearch clie
### Phase 2: Document API (100% ✅)
#### **Fluent Document Manager**
A complete redesign with:
- Full CRUD operations (create, read, update, delete, upsert)
- Session-based batch operations
- Efficient stale document cleanup (deleteByQuery instead of scroll)
@@ -81,11 +91,13 @@ A complete redesign with:
- Type-safe generics
**Key Files:**
- `ts/domain/documents/types.ts`
- `ts/domain/documents/document-session.ts`
- `ts/domain/documents/document-manager.ts`
#### **Complete Working Example**
- Comprehensive 300+ line example
- Demonstrates all features end-to-end
- Configuration, connection, CRUD, sessions, iteration, snapshots
@@ -95,6 +107,7 @@ A complete redesign with:
**File:** `ts/examples/basic/complete-example.ts`
### Query Builder (ts/domain/query/) - COMPLETE ✅
-`types.ts` - Complete query DSL type definitions:
- All Elasticsearch query types (match, term, range, bool, wildcard, etc.)
- Aggregation types (terms, metrics, histogram, date_histogram, etc.)
@@ -115,11 +128,13 @@ A complete redesign with:
-`index.ts` - Module exports with full type exports
**Key Files:**
- `ts/domain/query/types.ts` - Comprehensive type system
- `ts/domain/query/query-builder.ts` - Main query builder
- `ts/domain/query/aggregation-builder.ts` - Aggregation builder
**Complete Working Example:**
- Comprehensive 400+ line example
- Demonstrates all query types, boolean queries, aggregations
- Pagination, sorting, filtering examples
@@ -209,7 +224,7 @@ await manager.initialize();
// 3. Use Document API
const docs = new DocumentManager<Product>({
index: 'products',
autoCreateIndex: true
autoCreateIndex: true,
});
await docs.initialize();
@@ -272,9 +287,10 @@ const complexResults = await createQuery<Product>('products')
// Query with aggregations
const stats = await createQuery<Product>('products')
.matchAll()
.size(0) // Only want aggregations
.size(0) // Only want aggregations
.aggregations((agg) => {
agg.terms('brands', 'brand.keyword', { size: 10 })
agg
.terms('brands', 'brand.keyword', { size: 10 })
.subAggregation('avg_price', (sub) => {
sub.avg('avg_price', 'price');
});
@@ -301,18 +317,18 @@ const sources = await createQuery<Product>('products')
### v2.x → v3.0 Comparison
| Aspect | v2.x | v3.0 |
|--------|------|------|
| **Connection** | Each class creates own client | Singleton ConnectionManager |
| **Health Monitoring** | None | Automatic with circuit breaker |
| **Error Handling** | Inconsistent, uses console.log | Typed hierarchy with retry |
| **Configuration** | Constructor only | Fluent builder with validation |
| **Observability** | console.log scattered | Structured logging, metrics, tracing |
| **Type Safety** | Partial, uses `any` | Strict TypeScript, no `any` |
| **Bulk Operations** | Sequential | Batched with error handling |
| **Document Cleanup** | O(n) scroll | deleteByQuery (efficient) |
| **API Design** | Inconsistent | Fluent and discoverable |
| **Testing** | Minimal | Comprehensive (planned) |
| Aspect | v2.x | v3.0 |
| --------------------- | ------------------------------ | ------------------------------------ |
| **Connection** | Each class creates own client | Singleton ConnectionManager |
| **Health Monitoring** | None | Automatic with circuit breaker |
| **Error Handling** | Inconsistent, uses console.log | Typed hierarchy with retry |
| **Configuration** | Constructor only | Fluent builder with validation |
| **Observability** | console.log scattered | Structured logging, metrics, tracing |
| **Type Safety** | Partial, uses `any` | Strict TypeScript, no `any` |
| **Bulk Operations** | Sequential | Batched with error handling |
| **Document Cleanup** | O(n) scroll | deleteByQuery (efficient) |
| **API Design** | Inconsistent | Fluent and discoverable |
| **Testing** | Minimal | Comprehensive (planned) |
### Design Patterns Implemented
@@ -330,16 +346,19 @@ const sources = await createQuery<Product>('products')
## ⏳ What's Next (40% Remaining)
### Phase 2 Remaining (15%)
- **Logging API**: Enhanced SmartLog with enrichment
- **Bulk Indexer**: Adaptive batching with parallel workers
- **KV Store**: TTL, caching, batch operations
### Phase 3 (15%)
- **Plugin Architecture**: Request/response middleware
- **Transactions**: Optimistic locking with rollback
- **Schema Management**: Type-safe schemas and migrations
### Phase 4 (5%)
- **Test Suite**: Unit, integration, chaos tests
- **Migration Guide**: v2 → v3 documentation
- **Performance Benchmarks**: Before/after comparisons
@@ -359,6 +378,7 @@ These are **cosmetic TypeScript strict mode issues** - the code logic is sound.
### Temporary Workaround
Comment out these lines in `tsconfig.json`:
```json
// "verbatimModuleSyntax": true,
// "noUncheckedIndexedAccess": true,