@bemoje/decorators
v2.0.0
Published
TypeScript decorators for lazy property initialization and method memoization.
Maintainers
Readme
@bemoje/decorators
TypeScript decorators for lazy property initialization and method memoization.
Exports
- lazyProp: Decorator to memoize a method or getter accessor property.
- memoizeAsync: Decorator to memoize an async method. Uses memoizee library, so if params are objects, the decorator needs a normalizer function.
- memoizeSync: Decorator to memoize a sync method.
Installation
npm install @bemoje/decoratorsUsage
Lazy Properties
Defer expensive computation until first access, then cache the result:
import { lazyProp } from '@bemoje/decorators'
class Config {
@lazyProp
get expensiveValue() {
console.log('Computing...')
return Array.from({ length: 1000 }, (_, i) => i * i)
}
}
const config = new Config()
config.expensiveValue // logs 'Computing...', returns array
config.expensiveValue // returns cached array (no recomputation)Lazy Properties with Expiry
Cache values with automatic timeout-based invalidation:
import { lazyProp } from '@bemoje/decorators'
class DataService {
@lazyProp('5 min') // re-fetches after 5 minutes
get cachedData() {
return fetchFromDatabase()
}
@lazyProp(30000) // re-fetches after 30 seconds
get frequentlyUpdated() {
return getLatestMetrics()
}
}Sync Memoization
Cache method results based on arguments:
import { memoizeSync } from '@bemoje/decorators'
class MathService {
@memoizeSync()
fibonacci(n: number): number {
if (n <= 1) return n
return this.fibonacci(n - 1) + this.fibonacci(n - 2)
}
}
const svc = new MathService()
svc.fibonacci(40) // computed once, cached for subsequent callsAsync Memoization
Cache async method results with optional TTL:
import { memoizeAsync } from '@bemoje/decorators'
class ApiClient {
@memoizeAsync('10 min')
async fetchUser(id: string) {
const res = await fetch(`/api/users/${id}`)
return res.json()
}
}
const client = new ApiClient()
await client.fetchUser('123') // fetches from API
await client.fetchUser('123') // returns cached result