UNPKG

@fjell/core

Version:

Core Item and Key Framework for Fjell

228 lines (168 loc) 5.81 kB
# Fjell Core Core Item and Key Framework for Fjell - The foundational library that provides essential item management, key utilities, and service coordination for the entire Fjell ecosystem. ## Features - **Type-safe item creation** with IFactory - **Hierarchical key management** with KUtils - **Abstract service layer** with AItemService - **Query building and execution** with IQFactory and IQUtils - **Comprehensive error handling** with custom error types - **Testing utilities** for robust test suites - **TypeScript-first design** for excellent developer experience ## Installation ```bash npm install @fjell/core ``` ## Quick Start ```typescript import { IFactory, KUtils, AItemService } from '@fjell/core' // Create items with the factory const user = IFactory.create('user', { id: 'user-123', name: 'John Doe', email: 'john@example.com' }) // Generate hierarchical keys const userKey = KUtils.generateKey(['users', user.id]) // Build services class UserService extends AItemService { async createUser(userData: any) { const user = IFactory.create('user', userData) await this.validate(user) return this.save(user) } } ``` ## Core Modules ### IFactory Factory for creating strongly-typed items with validation and defaults. ```typescript interface User { id: string name: string email: string } const user = IFactory.create<User>('user', { id: 'user-123', name: 'John Doe', email: 'john@example.com' }) ``` ### KUtils Utilities for hierarchical key generation and manipulation. ```typescript // Generate keys const userKey = KUtils.generateKey(['users', 'user-123']) const profileKey = KUtils.generateKey(['users', 'user-123', 'profile']) // Parse keys const components = KUtils.parseKey(userKey) // ['users', 'user-123'] // Validate keys const isValid = KUtils.isValidKey(userKey) // true ``` ### AItemService Abstract base class for building domain services with lifecycle management. ```typescript class UserService extends AItemService { async create(userData: Partial<User>): Promise<User> { const user = IFactory.create<User>('user', userData) await this.validate(user) return this.save(user) } protected async validate(user: User): Promise<void> { if (!user.email.includes('@')) { throw new Error('Invalid email') } } } ``` ### Query System Build and execute queries with IQFactory and IQUtils. ```typescript const query = IQFactory.create('user') .where('status', 'active') .where('role', 'admin') .orderBy('createdAt', 'desc') .limit(10) const results = await IQUtils.execute(query) ``` ## Architecture Philosophy Fjell Core is designed around **progressive enhancement**: 1. **Start Simple**: Basic operations require minimal setup 2. **Scale Gradually**: Add complexity only when needed 3. **Maintain Consistency**: Common patterns across all Fjell libraries 4. **Enable Integration**: Designed to work with the entire ecosystem ## Integration with Fjell Ecosystem Fjell Core serves as the foundation for: - **@fjell/registry**: Service location and dependency injection - **@fjell/cache**: High-performance caching solutions - **@fjell/lib**: Database abstraction layers - **@fjell/providers**: React component state management - **@fjell/client-api**: HTTP client utilities - **@fjell/express-router**: Express.js routing utilities ## Type Safety Built with TypeScript-first design for excellent developer experience: ```typescript // Strongly typed factories const user = IFactory.create<UserType>('user', userData) // Type-safe key operations const key = KUtils.generateKey(['users', user.id]) const [collection, id] = KUtils.parseKey(key) // Compile-time validation class UserService extends AItemService<User> { // Methods are typed to work with User objects } ``` ## Error Handling Comprehensive error handling with descriptive messages: ```typescript try { const user = await userService.create(invalidData) } catch (error) { if (error instanceof CoreValidationError) { console.log('Validation failed:', error.details) } else if (error instanceof CoreNotFoundError) { console.log('User not found:', error.id) } } ``` ## Testing Support Built-in testing utilities for robust test suites: ```typescript import { TestUtils } from '@fjell/core/testing' // Mock factories const mockFactory = TestUtils.createMockFactory() const testUser = mockFactory.create('user', { id: 'test-123' }) // Assertion helpers expect(TestUtils.isValidKey(key)).toBe(true) expect(TestUtils.getKeyComponents(key)).toEqual(['users', '123']) ``` ## Performance Optimized for production use: - **Minimal Runtime Overhead**: Core operations are highly optimized - **Memory Efficient**: Smart object pooling and reuse strategies - **Lazy Loading**: Components load only when needed - **Tree Shaking**: Only bundle what you use ## Examples Check out the `/examples` directory for comprehensive usage examples: - Basic item and key operations - Service implementation patterns - Query building and execution - Integration with databases and APIs - Testing strategies ## Documentation - **Getting Started**: Step-by-step setup guide - **API Reference**: Complete API documentation - **Examples**: Real-world usage patterns - **Migration Guide**: Upgrading from previous versions ## Contributing We welcome contributions! Please see our contributing guidelines for details on: - Code style and standards - Testing requirements - Documentation standards - Pull request process ## License Licensed under the Apache License 2.0. See LICENSE file for details. ## Support - **GitHub Issues**: Report bugs and request features - **Discussions**: Community support and questions - **Documentation**: Comprehensive guides and API reference Built with love by the Fjell team.