@gridkit/core
v0.0.1
Published
Core table functionality for GridKit
Maintainers
Readme
@gridkit/core
Framework-agnostic core for GridKit Enhanced — event system, performance monitoring, validation, plugins
What Is It?
@gridkit/core is the framework-agnostic engine behind GridKit Enhanced. It provides:
- 🔄 Event System — Pub/sub with middleware
- 📊 Performance Monitoring — Metrics, budgets, leak detection
- ✅ Validation Engine — Schema-based validation
- 🔌 Plugin Manager — Type-safe plugin registry
Most users should use @gridkit/tanstack-adapter — it includes @gridkit/core and adds React integration.
Use @gridkit/core directly if you're building a custom adapter (Vue, Svelte, vanilla JS).
Installation
npm install @gridkit/coreQuick Start
Event System
import { EventBus } from '@gridkit/core'
const eventBus = new EventBus()
// Subscribe
eventBus.on('row:select', (event) => {
console.log('Row selected:', event.payload)
})
// Emit
eventBus.emit('row:select', { rowId: '123', row: data })
// Middleware
eventBus.use((event, next) => {
console.log('Event:', event.type)
next(event)
})Performance Monitoring
import { PerformanceMonitor } from '@gridkit/core'
const perf = new PerformanceMonitor({
budgets: { rowModelBuild: 16, sorting: 50, filtering: 100 }
})
// Track operations
const result = perf.track('getRowModel', () => buildRowModel())
// Get metrics
const stats = perf.getOperationStats('getRowModel')
console.log(stats) // { operation: 'getRowModel', avgTime: 12.3ms }
// Budget violations
perf.on('budgetViolation', (event) => {
console.warn(`${event.operation} exceeded budget: ${event.actual}ms > ${event.budget}ms`)
})Validation
import { ValidationManager, createSchema, field } from '@gridkit/core'
const validation = new ValidationManager({ mode: 'strict' })
const userSchema = createSchema({
name: field('string', { required: true, minLength: 1 }),
email: field('string', { required: true, pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/ }),
age: field('number', { min: 0, max: 150 })
})
const result = await validation.validateRow(userData, userSchema)
if (!result.valid) {
console.log(result.errors)
}Plugin Manager
import { PluginManager } from '@gridkit/core'
const pluginManager = new PluginManager()
const myPlugin = {
metadata: { id: 'my-plugin', name: 'My Plugin', version: '1.0.0' },
initialize: async (config, context) => {
context.eventBus.on('row:update', handleRowUpdate)
},
destroy: async () => {}
}
await pluginManager.register(myPlugin)
await pluginManager.initializePlugin('my-plugin', config)API
EventBus
class EventBus {
on(event: string, handler: (event: Event) => void): () => void
off(event: string, handler: (event: Event) => void): void
emit(event: string, payload: any): void
use(middleware: Middleware): () => void
}PerformanceMonitor
class PerformanceMonitor {
track<T>(operation: string, fn: () => T): T
getOperationStats(operation: string): OperationStats
getMetrics(): Metrics
on(event: 'budgetViolation', handler: (event: BudgetViolation) => void): void
}ValidationManager
class ValidationManager {
validateRow(data: any, schema: Schema): Promise<ValidationResult>
validateAll(data: any[], schema: Schema): Promise<ValidationReport>
}PluginManager
class PluginManager {
register(plugin: Plugin): Promise<void>
initializePlugin(id: string, config: any): Promise<void>
unregisterPlugin(id: string): Promise<void>
get(id: string): Plugin | undefined
}Documentation
Related Packages
| Package | Description | |---------|-------------| | @gridkit/tanstack-adapter | React adapter — use this for React | | @gridkit/plugins | Official plugins |
License
MIT — see LICENSE
GitHub: github.com/gridkit/gridkit
