Skip to content

[0.3.0] - 2025-07-28

Choose a tag to compare

@KeterVM KeterVM released this 28 Jul 08:34
· 17 commits to main since this release

✨ Added

  • Type-Safe Adapter Configuration - Revolutionary conditional type system for adapter configurations

    • adapterConfig type is now automatically inferred based on the adapter parameter
    • When adapter: 'fetch', adapterConfig is typed as FetchAdapterConfig
    • When adapter: 'axios', adapterConfig is typed as AxiosAdapterConfig
    • When adapter: 'ky', adapterConfig is typed as KyAdapterConfig
    • TypeScript provides intelligent autocomplete and compile-time validation
    • Prevents configuration errors by catching invalid options at build time
  • Enhanced Developer Experience

    • Smart IntelliSense for adapter-specific configuration options
    • Compile-time error detection for invalid adapter configurations
    • Comprehensive examples demonstrating type-safe configuration patterns

🔧 Improved

  • Modern ESLint Configuration

    • Migrated from legacy .eslintrc.js to modern flat config (eslint.config.mjs)
    • Added TypeScript-specific rules with proper ignore patterns
    • Configured separate rules for examples and test files
    • Enhanced code quality and consistency across the project
  • Type System Enhancements

    • Added InternalClientConfig type for better internal type handling
    • Improved adapter configuration type definitions
    • Enhanced type safety without breaking backward compatibility
  • Code Quality

    • Fixed various lint issues and type safety problems
    • Improved adapter factory function flexibility
    • Clean up unused imports and consistent code formatting
    • Better error handling in adapter implementations

📚 Documentation

  • Updated README with type-safe configuration examples
  • Added comprehensive examples in examples/type-safe-config.ts
  • Enhanced inline documentation with better type annotations

🏗️ Technical Details

  • Conditional Union Types - Implemented sophisticated TypeScript conditional types for adapter configuration
  • Backward Compatibility - All changes maintain 100% backward compatibility
  • Type Inference - Enhanced TypeScript's ability to infer correct types based on runtime values

Usage Example

// ✅ Type-safe fetch configuration
const fetchClient = createClient(contract, {
  baseUrl: 'https://api.example.com',
  adapter: 'fetch', // 👈 This determines adapterConfig type
  adapterConfig: {
    credentials: 'include', // ✅ Valid for fetch
    mode: 'cors',           // ✅ Valid for fetch
    // auth: { username: 'user' } // ❌ TypeScript error: not valid for fetch
  }
});

// ✅ Type-safe axios configuration
const axiosClient = createClient(contract, {
  baseUrl: 'https://api.example.com',
  adapter: 'axios', // 👈 This determines adapterConfig type
  adapterConfig: {
    auth: { username: 'user', password: 'pass' }, // ✅ Valid for axios
    maxRedirects: 5,                               // ✅ Valid for axios
    // credentials: 'include' // ❌ TypeScript error: not valid for axios
  }
});