UNPKG

i18ntk

Version:

i18n Tool Kit - Zero-dependency internationalization toolkit for setup, scanning, analysis, validation, auto translation, fixing, reporting, and runtime translation loading.

571 lines (482 loc) 11.7 kB
// runtime/i18ntk.d.ts // Complete TypeScript definitions for i18ntk internationalization framework // Version 4.2.0 - Enhanced API types plus lightweight runtime compatibility /** * Core translation parameters interface */ export interface TranslationParams { [key: string]: string | number | boolean | null | undefined; } /** * Advanced translation options */ export interface TranslationOptions { /** * Target language for translation * @default current language */ language?: string; /** * Fallback language if translation not found * @default fallback language from config */ fallbackLanguage?: string; /** * Enable/disable interpolation * @default true */ interpolate?: boolean; /** * Enable/disable pluralization * @default true */ pluralize?: boolean; /** * Custom formatter functions */ formatters?: Record<string, (value: any) => string>; /** * Namespace to use for translation */ namespace?: string; /** * Enable encryption for sensitive data * @default false */ encrypt?: boolean; /** * Cache the result * @default true */ cache?: boolean; /** * Custom context for translation */ context?: string; } /** * Encryption configuration */ export interface EncryptionConfig { /** * Enable AES-256-GCM encryption * @default false */ enabled: boolean; /** * Encryption key (32 bytes hex encoded) * Will be auto-generated if not provided */ key?: string; /** * Additional authenticated data */ aad?: string; /** * Key rotation interval in milliseconds * @default 86400000 (24 hours) */ keyRotationInterval?: number; } /** * Performance configuration */ export interface PerformanceConfig { /** * Performance mode * @default 'optimized' */ mode: 'extreme' | 'ultra' | 'optimized' | 'standard'; /** * Enable caching * @default true */ cacheEnabled: boolean; /** * Cache size limit * @default 1000 */ cacheSize: number; /** * Cache TTL in milliseconds * @default 300000 (5 minutes) */ cacheTTL: number; /** * Batch size for bulk operations * @default 100 */ batchSize: number; /** * Enable lazy loading * @default true */ lazyLoading: boolean; } /** * Security configuration */ export interface SecurityConfig { /** * Enable input validation * @default true */ validateInput: boolean; /** * Sanitize output * @default true */ sanitizeOutput: boolean; /** * Maximum key length * @default 255 */ maxKeyLength: number; /** * Maximum value length * @default 1000 */ maxValueLength: number; /** * Allowed characters in keys */ allowedKeyPattern?: RegExp; } /** * Main configuration interface */ export interface I18nConfig { /** * Base directory for locale files */ baseDir: string; /** * Default language * @default 'en' */ language?: string; /** * Fallback language * @default 'en' */ fallbackLanguage?: string; /** * Supported languages */ supportedLanguages?: string[]; /** * Encryption configuration */ encryption?: EncryptionConfig; /** * Performance configuration */ performance?: PerformanceConfig; /** * Security configuration */ security?: SecurityConfig; /** * Enable debug mode * @default false */ debug?: boolean; /** * Custom formatters */ formatters?: Record<string, (value: any) => string>; /** * Plugin configuration */ plugins?: PluginConfig[]; } /** * Plugin configuration */ export interface PluginConfig { name: string; version: string; transform?: (text: string, params: TranslationParams, options: TranslationOptions) => string; init?: (runtime: I18nRuntime) => Promise<void>; destroy?: () => Promise<void>; } /** * Translation result interface */ export interface TranslationResult { text: string; language: string; key: string; params: TranslationParams; encrypted?: boolean; cacheHit?: boolean; duration: number; } /** * Batch translation result */ export interface BatchTranslationResult { results: string[]; metadata: { total: number; duration: number; cacheHitRate: number; encryptedCount: number; }; } /** * Performance metrics */ export interface PerformanceMetrics { totalTranslations: number; cacheHitRate: number; averageTranslationTime: number; memoryUsage: number; peakMemoryUsage: number; encryptionTime: number; decryptionTime: number; } /** * Namespace interface */ export interface Namespace { name: string; translations: Record<string, Record<string, any>>; metadata: { created: Date; modified: Date; version: string; }; } /** * Main runtime interface */ export interface I18nRuntime { /** * Translate a key with parameters * @param key Translation key * @param params Translation parameters * @param options Translation options */ translate(key: string, params?: TranslationParams, options?: TranslationOptions): Promise<string>; /** * Alias for translate function */ t(key: string, params?: TranslationParams, options?: TranslationOptions): Promise<string>; /** * Translate with encryption */ translateEncrypted(key: string, params?: TranslationParams, options?: TranslationOptions): Promise<string>; /** * Batch translate multiple keys */ translateBatch(keys: string[], params?: TranslationParams[], options?: TranslationOptions): Promise<BatchTranslationResult>; /** * Batch translate with encryption */ translateBatchEncrypted(keys: string[], params?: TranslationParams[], options?: TranslationOptions): Promise<BatchTranslationResult>; /** * Get current language */ getLanguage(): string; /** * Set current language */ setLanguage(language: string): Promise<void>; /** * Get available languages */ getAvailableLanguages(): Promise<string[]>; /** * Get supported languages */ getSupportedLanguages(): string[]; /** * Add a namespace */ addNamespace(name: string, translations: Record<string, Record<string, any>>): Promise<void>; /** * Remove a namespace */ removeNamespace(name: string): Promise<void>; /** * Get namespace */ getNamespace(name: string): Namespace | null; /** * List all namespaces */ listNamespaces(): string[]; /** * Refresh translations */ refresh(): Promise<void>; /** * Get performance metrics */ getMetrics(): PerformanceMetrics; /** * Reset metrics */ resetMetrics(): void; /** * Get cache information */ getCacheInfo?(): CacheInfo; /** * Clear the translation cache */ clearCache?(): void; /** * Add plugin */ addPlugin(plugin: PluginConfig): void; /** * Remove plugin */ removePlugin(name: string): void; /** * List plugins */ listPlugins(): PluginConfig[]; /** * Generate encryption key */ generateEncryptionKey(): string; /** * Set encryption key */ setEncryptionKey(key: string): void; /** * Encrypt data */ encryptData(data: string): Promise<string>; /** * Decrypt data */ decryptData(encryptedData: string): Promise<string>; /** * Validate translation key */ validateTranslationKey(key: string): boolean; /** * Sanitize translation output */ sanitizeTranslation(text: string): string; /** * Get configuration */ getConfig(): I18nConfig; /** * Update configuration */ updateConfig(updates: Partial<I18nConfig>): Promise<void>; } /** * Basic runtime interface (for backward compatibility) */ export interface BasicI18nRuntime { /** * Translate a key with parameters (synchronous) */ translate(key: string, params?: TranslationParams, options?: Pick<TranslationOptions, 'language' | 'fallbackLanguage'>): string | number | boolean | null | object | unknown[]; /** * Alias for translate function (synchronous) */ t(key: string, params?: TranslationParams, options?: Pick<TranslationOptions, 'language' | 'fallbackLanguage'>): string | number | boolean | null | object | unknown[]; /** * Translate multiple keys synchronously. */ translateBatch(keys: string[], params?: TranslationParams | TranslationParams[], options?: Pick<TranslationOptions, 'language' | 'fallbackLanguage'>): Array<string | number | boolean | null | object | unknown[]>; /** * Set language */ setLanguage(language: string): void; /** * Get current language */ getLanguage(): string; /** * Get available languages (synchronous) */ getAvailableLanguages(): string[]; /** * Clear all cached runtime data, or one language when provided. */ clearCache(language?: string): void; /** * Return lightweight cache diagnostics for production observability. */ getCacheInfo(): { language: string; fallbackLanguage: string; lazy: boolean; cachedLanguages: string[]; manifestLanguages: string[]; loadedFileCount: number; eagerLoadedLanguages: string[]; }; /** * Refresh translations */ refresh(language?: string): void; } /** * Initialize the enhanced i18ntk runtime (async, returns full I18nRuntime) */ export declare function initI18nRuntime(config: I18nConfig): Promise<I18nRuntime>; /** * Initialize the basic lightweight runtime (synchronous) * This is the default export from 'i18ntk/runtime' */ export declare function initRuntime(options: { baseDir?: string; language?: string; fallbackLanguage?: string; keySeparator?: string; preload?: boolean; lazy?: boolean; }): BasicI18nRuntime; /** * Build the lightweight runtime lazy-loading key manifest for a locale path. */ export declare function loadKeyManifest(baseDir?: string): Map<string, string>; /** * Type guards (runtime checks, not exported by actual code) */ export declare function isI18nRuntime(obj: any): obj is I18nRuntime; export declare function isBasicI18nRuntime(obj: any): obj is BasicI18nRuntime; /** * Error types */ export declare class I18nError extends Error { constructor(message: string, code?: string); code: string; timestamp: Date; } export declare class EncryptionError extends I18nError { constructor(message: string, originalError?: Error); } export declare class ValidationError extends I18nError { constructor(message: string, field?: string); } /** * Plugin types */ export declare type TransformFunction = (text: string, params: TranslationParams, options: TranslationOptions) => string; export declare type InitFunction = (runtime: I18nRuntime) => Promise<void>; export declare type DestroyFunction = () => Promise<void>; /** * Global type augmentation for Node.js */ declare global { namespace NodeJS { interface Global { i18ntk?: I18nRuntime; } } } /** * Export all interfaces and types */ export * from './enhanced';