Complete API reference for Preference Injector.
Main class for preference management.
constructor(config?: InjectorConfig)Parameters:
config(optional): Configuration objectproviders: Array of preference providersconflictResolution: Strategy for resolving conflictsenableCache: Enable caching (default: false)cacheTTL: Cache TTL in milliseconds (default: 3600000)enableValidation: Enable validation (default: false)enableEncryption: Enable encryption (default: false)enableAudit: Enable audit logging (default: false)
Example:
const injector = new PreferenceInjector({
providers: [new MemoryProvider()],
conflictResolution: ConflictResolution.HIGHEST_PRIORITY,
enableCache: true,
cacheTTL: 3600000,
});Initialize all providers.
async initialize(): Promise<void>Get a preference value.
async get(key: string, options?: GetOptions): Promise<PreferenceValue>Parameters:
key: Preference keyoptions(optional):defaultValue: Default value if not founddecrypt: Decrypt encrypted valuesuseCache: Use cached value (default: true)
Returns: The preference value
Throws: PreferenceNotFoundError if not found and no default
Get a type-safe preference value.
async getTyped<T extends PreferenceValue>(key: string, options?: GetOptions): Promise<T>Set a preference value.
async set(key: string, value: PreferenceValue, options?: SetOptions): Promise<void>Parameters:
key: Preference keyvalue: Preference valueoptions(optional):priority: Override default priorityttl: Time-to-live in millisecondsencrypt: Encrypt the valuevalidate: Validate before setting
Check if a preference exists.
async has(key: string): Promise<boolean>Delete a preference.
async delete(key: string): Promise<boolean>Returns: true if deleted, false if not found
Clear all preferences.
async clear(): Promise<void>Get all preferences.
async getAll(): Promise<Map<string, PreferenceValue>>Subscribe to preference events.
on(event: PreferenceEvent, listener: PreferenceEventListener): voidEvents:
PreferenceEvent.CHANGED: Preference value changedPreferenceEvent.ADDED: New preference addedPreferenceEvent.REMOVED: Preference deletedPreferenceEvent.CLEARED: All preferences cleared
In-memory storage provider.
constructor(
priority?: PreferencePriority,
initialValues?: Map<string, PreferenceValue>
)Example:
const provider = new MemoryProvider(PreferencePriority.NORMAL);File-based storage provider.
constructor(config: FileProviderConfig)Config:
filePath: Path to preferences filepriority: Provider priority (default: NORMAL)watchForChanges: Watch file for changes (default: false)format: File format - 'json' or 'env' (auto-detected)
Example:
const provider = new FileProvider({
filePath: './config.json',
priority: PreferencePriority.NORMAL,
watchForChanges: true,
});Environment variable provider.
constructor(config?: EnvProviderConfig)Config:
prefix: Environment variable prefix (default: '')priority: Provider priority (default: HIGHEST)parseValues: Parse values to appropriate types (default: true)
Example:
const provider = new EnvProvider({
prefix: 'APP_',
priority: PreferencePriority.HIGHEST,
});API-based remote configuration provider.
constructor(config: ApiProviderConfig)Config:
baseUrl: Base URL for APIapiKey: API authentication key (optional)headers: Custom headers (optional)priority: Provider priority (default: NORMAL)timeout: Request timeout in ms (default: 5000)retries: Number of retry attempts (default: 3)
Example:
const provider = new ApiProvider({
baseUrl: 'https://config.example.com',
apiKey: 'your-api-key',
timeout: 5000,
});Pre-built validation rules.
import { CommonValidationRules } from '@hyperpolymath/preference-injector';
// Required value
CommonValidationRules.required(message?: string)
// String length
CommonValidationRules.stringLength(min?: number, max?: number, message?: string)
// Number range
CommonValidationRules.numberRange(min?: number, max?: number, message?: string)
// Pattern matching
CommonValidationRules.pattern(regex: RegExp, message?: string)
// Email format
CommonValidationRules.email(message?: string)
// URL format
CommonValidationRules.url(message?: string)
// Enum values
CommonValidationRules.enum(allowedValues: T[], message?: string)
// Custom validation
CommonValidationRules.custom(fn: (value) => boolean | Promise<boolean>, name: string, message?: string)AES-256-GCM encryption service.
constructor(password: string)
async encrypt(value: string): Promise<string>
async decrypt(encrypted: string): Promise<string>
isEncrypted(value: string): booleanLeast Recently Used cache with TTL support.
constructor(maxSize?: number, defaultTTL?: number)
get(key: string): PreferenceMetadata | null
set(key: string, value: PreferenceMetadata, ttl?: number): void
has(key: string): boolean
delete(key: string): boolean
clear(): voidIn-memory audit logger.
log(entry: AuditLogEntry): void
getEntries(filter?: AuditFilter): AuditLogEntry[]
clear(): voidContext provider component.
<PreferenceProvider injector={injector}>
{children}
</PreferenceProvider>Hook for single preference.
function usePreference<T>(
key: string,
defaultValue?: T,
options?: GetOptions
): [T | undefined, (value: T) => Promise<void>, boolean]Returns: [value, setValue, loading]
Hook for multiple preferences.
function usePreferences(
keys: string[]
): [Map<string, PreferenceValue>, (key: string, value: PreferenceValue) => Promise<void>, boolean]Returns: [values, updateValue, loading]
Middleware for attaching preferences to requests.
preferenceMiddleware(options: PreferenceMiddlewareOptions)Options:
injector: PreferenceInjector instanceattachHelpers: Attach helper methods to req (default: true)initializeOnStartup: Initialize injector on startup (default: true)
Create REST API router.
createPreferenceRouter(injector: PreferenceInjector)Routes:
GET /preferences- Get all preferencesGET /preferences/:key- Get single preferencePUT /preferences/:key- Set preferenceDELETE /preferences/:key- Delete preferenceHEAD /preferences/:key- Check if existsDELETE /preferences- Clear allGET /preferences/_audit- Get audit log
type PreferenceValue = string | number | boolean | null | PreferenceObject | PreferenceArray;enum PreferencePriority {
LOWEST = 0,
LOW = 25,
NORMAL = 50,
HIGH = 75,
HIGHEST = 100,
}enum ConflictResolution {
HIGHEST_PRIORITY = 'highest_priority',
LOWEST_PRIORITY = 'lowest_priority',
MERGE = 'merge',
OVERRIDE = 'override',
ERROR = 'error',
}For complete type definitions, see src/types/index.ts.