UNPKG

i18ntk

Version:

šŸš€ The fastest i18n toolkit with 97% performance boost! Zero-dependency, enterprise-grade internationalization for React, Vue, Angular, Python, Java, PHP & more. Features PIN protection, auto framework detection, 7+ UI languages, and comprehensive transla

858 lines (832 loc) • 18.2 kB
#!/usr/bin/env node /** * Missing Key Validator * Validates presence of all required keys across all supported languages */ const fs = require('fs'); const path = require('path'); class MissingKeyValidator { constructor(supportedLanguages = ['en', 'es', 'fr', 'de', 'ja', 'ru', 'zh']) { this.supportedLanguages = supportedLanguages; this.projectRoot = path.resolve(__dirname, '..'); this.requiredKeys = this.loadRequiredKeys(); } loadRequiredKeys() { // Define required keys for the toolkit return [ // Core UI keys 'welcome', 'error', 'success', 'warning', 'info', 'loading', 'processing', 'completed', 'cancel', 'confirm', 'save', 'delete', 'edit', 'add', 'remove', 'update', 'create', 'close', 'open', 'search', 'filter', 'sort', 'export', 'import', 'backup', 'restore', 'settings', 'configuration', 'language', 'locale', 'translation', 'key', 'value', 'placeholder', 'validation', 'format', 'type', 'required', 'optional', 'default', 'description', 'help', 'documentation', 'support', 'contact', 'about', 'version', 'license', 'copyright', 'privacy', 'terms', 'security', 'authentication', 'authorization', 'login', 'logout', 'register', 'password', 'username', 'email', 'profile', 'account', 'dashboard', 'overview', 'summary', 'details', 'report', 'statistics', 'analytics', 'performance', 'metrics', 'logs', 'history', 'activity', 'notification', 'alert', 'message', 'feedback', 'review', 'rating', 'score', 'progress', 'status', 'state', 'mode', 'view', 'list', 'grid', 'table', 'card', 'tree', 'graph', 'chart', 'diagram', 'image', 'file', 'folder', 'directory', 'path', 'url', 'link', 'button', 'menu', 'tab', 'panel', 'window', 'dialog', 'modal', 'popup', 'tooltip', 'hint', 'guide', 'tutorial', 'walkthrough', 'demo', 'example', 'sample', 'template', 'theme', 'style', 'color', 'font', 'size', 'layout', 'responsive', 'mobile', 'tablet', 'desktop', 'browser', 'device', 'screen', 'resolution', 'orientation', 'accessibility', 'aria', 'keyboard', 'screen-reader', 'contrast', 'zoom', 'font-size', 'high-contrast', 'dark-mode', 'light-mode', 'auto-mode', 'sync', 'async', 'promise', 'callback', 'event', 'listener', 'handler', 'function', 'method', 'class', 'object', 'array', 'string', 'number', 'boolean', 'date', 'time', 'duration', 'interval', 'timeout', 'delay', 'throttle', 'debounce', 'cache', 'storage', 'memory', 'database', 'api', 'endpoint', 'request', 'response', 'status-code', 'header', 'body', 'payload', 'parameter', 'query', 'filter', 'pagination', 'limit', 'offset', 'cursor', 'sorting', 'ordering', 'direction', 'ascending', 'descending', 'grouping', 'aggregation', 'join', 'relation', 'association', 'foreign-key', 'primary-key', 'index', 'constraint', 'rule', 'trigger', 'procedure', 'function', 'view', 'materialized-view', 'sequence', 'schema', 'migration', 'seed', 'fixture', 'mock', 'stub', 'spy', 'test', 'spec', 'assertion', 'expectation', 'coverage', 'report', 'summary', 'detail', 'trace', 'debug', 'info', 'warn', 'error', 'fatal', 'critical', 'emergency', 'alert', 'notice', 'verbose', 'silent', 'quiet', 'normal', 'loud', 'minimal', 'full', 'complete', 'partial', 'incremental', 'delta', 'diff', 'patch', 'merge', 'conflict', 'resolution', 'strategy', 'algorithm', 'heuristic', 'optimization', 'efficiency', 'speed', 'performance', 'benchmark', 'profiling', 'monitoring', 'observability', 'telemetry', 'tracing', 'metrics', 'instrumentation', 'alerting', 'notification', 'escalation', 'incident', 'response', 'recovery', 'rollback', 'retry', 'circuit-breaker', 'timeout', 'deadline', 'graceful', 'degradation', 'fallback', 'backup', 'redundancy', 'replication', 'sharding', 'partitioning', 'distribution', 'load-balancing', 'scaling', 'horizontal', 'vertical', 'elastic', 'auto-scaling', 'burst', 'capacity', 'throughput', 'latency', 'bandwidth', 'utilization', 'saturation', 'bottleneck', 'contention', 'starvation', 'deadlock', 'livelock', 'race-condition', 'consistency', 'availability', 'partition-tolerance', 'cap-theorem', 'acid', 'base', 'transaction', 'isolation', 'serializable', 'repeatable-read', 'read-committed', 'read-uncommitted', 'durability', 'atomicity', 'rollback', 'commit', 'checkpoint', 'savepoint', 'compensation', 'saga', 'workflow', 'orchestration', 'choreography', 'state-machine', 'event-sourcing', 'cqrs', 'eventual-consistency', 'idempotency', 'deduplication', 'exactly-once', 'at-least-once', 'at-most-once', 'guaranteed-delivery', 'message-queue', 'pub-sub', 'topic', 'subscription', 'consumer', 'producer', 'broker', 'exchange', 'routing', 'binding', 'queue', 'dead-letter', 'retry-queue', 'backpressure', 'flow-control', 'throttling', 'rate-limiting', 'quota', 'fairness', 'priority', 'starvation', 'aging', 'token-bucket', 'leaky-bucket', 'sliding-window', 'fixed-window', 'adaptive', 'machine-learning', 'ai', 'ml', 'deep-learning', 'neural-network', 'model', 'training', 'inference', 'prediction', 'classification', 'regression', 'clustering', 'anomaly-detection', 'recommendation', 'personalization', 'optimization', 'genetic-algorithm', 'evolutionary', 'swarm-intelligence', 'reinforcement-learning', 'q-learning', 'policy', 'reward', 'penalty', 'exploration', 'exploitation', 'multi-armed-bandit', 'contextual', 'federated-learning', 'privacy-preserving', 'differential-privacy', 'homomorphic-encryption', 'zero-knowledge', 'secure-multi-party', 'threshold-cryptography', 'distributed-ledger', 'blockchain', 'consensus', 'proof-of-work', 'proof-of-stake', 'byzantine-fault-tolerance', 'smart-contract', 'oracle', 'decentralized', 'web3', 'nft', 'token', 'cryptocurrency', 'stable-coin', 'defi', 'dao', 'metaverse', 'ar', 'vr', 'xr', 'mixed-reality', 'spatial-computing', 'digital-twin', 'iot', 'edge-computing', 'fog-computing', 'cloud-native', 'microservices', 'service-mesh', 'api-gateway', 'service-discovery', 'circuit-breaker', 'rate-limiter', 'load-balancer', 'proxy', 'reverse-proxy', 'forward-proxy', 'cdn', 'cache', 'redis', 'memcached', 'elasticsearch', 'mongodb', 'postgresql', 'mysql', 'sqlite', 'cassandra', 'dynamodb', 'firestore', 'cosmosdb', 'neo4j', 'arangodb', 'couchbase', 'influxdb', 'prometheus', 'grafana', 'jaeger', 'zipkin', 'newrelic', 'datadog', 'splunk', 'elk-stack', 'fluentd', 'logstash', 'kibana', 'beats', 'filebeat', 'metricbeat', 'heartbeat', 'packetbeat', 'auditbeat', 'functionbeat', 'journalbeat', 'community', 'contribute', 'contribution', 'guidelines', 'code-of-conduct', 'license', 'copyright', 'attribution', 'acknowledgment', 'citation', 'reference', 'bibliography', 'changelog', 'release-notes', 'roadmap', 'milestone', 'backlog', 'issue', 'bug', 'feature', 'enhancement', 'improvement', 'optimization', 'refactor', 'cleanup', 'technical-debt', 'legacy', 'deprecated', 'obsolete', 'end-of-life', 'sunset', 'migration', 'upgrade', 'downgrade', 'rollback', 'compatibility', 'interoperability', 'standard', 'specification', 'rfc', 'draft', 'proposal', 'review', 'approval', 'rejection', 'feedback', 'iteration', 'incremental', 'agile', 'scrum', 'kanban', 'lean', 'devops', 'ci-cd', 'continuous-integration', 'continuous-deployment', 'continuous-delivery', 'git', 'github', 'gitlab', 'bitbucket', 'svn', 'mercurial', 'version-control', 'branch', 'merge', 'rebase', 'cherry-pick', 'stash', 'tag', 'release', 'hotfix', 'feature-branch', 'main-branch', 'develop-branch', 'staging', 'production', 'environment', 'configuration', 'parameter', 'variable', 'constant', 'macro', 'template', 'snippet', 'boilerplate', 'scaffold', 'generator', 'cli', 'command-line', 'terminal', 'shell', 'bash', 'zsh', 'fish', 'powershell', 'cmd', 'prompt', 'interactive', 'non-interactive', 'batch', 'script', 'automation', 'orchestration', 'workflow', 'pipeline', 'stage', 'step', 'task', 'job', 'build', 'test', 'deploy', 'monitor', 'alert', 'notify', 'report', 'dashboard', 'kpi', 'metric', 'sla', 'slo', 'slis', 'availability', 'reliability', 'scalability', 'performance', 'efficiency', 'effectiveness', 'quality', 'security', 'compliance', 'governance', 'audit', 'traceability', 'accountability', 'transparency', 'documentation', 'training', 'onboarding', 'support', 'maintenance', 'operations', 'runbook', 'playbook', 'procedure', 'process', 'policy', 'standard', 'best-practice', 'guideline', 'checklist', 'template', 'form', 'survey', 'questionnaire', 'feedback', 'rating', 'review', 'approval', 'sign-off', 'acceptance', 'criteria', 'definition-of-done', 'definition-of-ready', 'ready', 'done', 'blocked', 'impediment', 'risk', 'issue', 'dependency', 'constraint', 'assumption', 'prerequisite', 'requirement', 'specification', 'design', 'architecture', 'diagram', 'model', 'prototype', 'mockup', 'wireframe', 'storyboard', 'user-story', 'use-case', 'scenario', 'persona', 'journey', 'flow', 'process', 'workflow', 'state', 'transition', 'action', 'event', 'trigger', 'condition', 'rule', 'logic', 'algorithm', 'function', 'method', 'procedure', 'operation', 'calculation', 'computation', 'transformation', 'conversion', 'validation', 'verification', 'sanitization', 'normalization', 'standardization', 'optimization', 'compression', 'encryption', 'decryption', 'hashing', 'encoding', 'decoding', 'serialization', 'deserialization', 'parsing', 'formatting', 'rendering', 'display', 'presentation', 'visualization', 'interaction', 'navigation', 'usability', 'accessibility', 'responsiveness', 'performance', 'efficiency', 'quality', 'reliability', 'maintainability', 'scalability', 'security', 'privacy', 'compliance', 'governance', 'audit', 'monitoring', 'alerting', 'reporting', 'analytics', 'insights', 'intelligence', 'learning', 'improvement', 'evolution', 'adaptation', 'innovation', 'transformation', 'digitalization', 'automation', 'optimization', 'modernization', 'upgrade', 'migration', 'transition', 'change', 'management' ]; } async validateAllKeys() { console.log('šŸ” Validating missing keys across all languages...'); const missingKeys = {}; for (const language of this.supportedLanguages) { const languageMissing = await this.validateLanguageKeys(language); if (languageMissing.length > 0) { missingKeys[language] = languageMissing; } } return missingKeys; } async validateLanguageKeys(language) { const localePath = path.join(this.projectRoot, 'ui-locales', `${language}.json`); if (!fs.existsSync(localePath)) { return this.requiredKeys; // All keys missing if file doesn't exist } try { const localeData = JSON.parse(fs.readFileSync(localePath, 'utf8')); const existingKeys = Object.keys(localeData); return this.requiredKeys.filter(key => !existingKeys.includes(key)); } catch (error) { console.error(`Error reading ${language}.json:`, error.message); return this.requiredKeys; } } async generateMissingKeysReport() { const missingKeys = await this.validateAllKeys(); const report = { timestamp: new Date().toISOString(), summary: { totalLanguages: this.supportedLanguages.length, totalRequiredKeys: this.requiredKeys.length, languagesWithMissingKeys: Object.keys(missingKeys).length, totalMissingKeys: Object.values(missingKeys).reduce((sum, keys) => sum + keys.length, 0) }, details: missingKeys }; const reportPath = path.join(__dirname, 'missing-keys-report.json'); fs.writeFileSync(reportPath, JSON.stringify(report, null, 2)); console.log('\nšŸ“Š Missing Keys Report:'); console.log(`Total Languages: ${report.summary.totalLanguages}`); console.log(`Total Required Keys: ${report.summary.totalRequiredKeys}`); console.log(`Languages with Missing Keys: ${report.summary.languagesWithMissingKeys}`); console.log(`Total Missing Keys: ${report.summary.totalMissingKeys}`); if (report.summary.totalMissingKeys > 0) { console.log('\nāŒ Missing keys by language:'); Object.entries(missingKeys).forEach(([lang, keys]) => { console.log(`${lang}: ${keys.length} keys missing`); }); } else { console.log('\nāœ… All keys present in all languages!'); } console.log(`Report saved to: ${reportPath}`); return report; } async generateTranslationTemplate() { const template = {}; this.requiredKeys.forEach(key => { template[key] = key.replace(/-/g, ' ').replace(/\b\w/g, l => l.toUpperCase()); }); const templatePath = path.join(__dirname, 'translation-template.json'); fs.writeFileSync(templatePath, JSON.stringify(template, null, 2)); console.log(`Translation template saved to: ${templatePath}`); return template; } } // CLI execution if (require.main === module) { const validator = new MissingKeyValidator(); if (process.argv.includes('--template')) { validator.generateTranslationTemplate(); } else { validator.generateMissingKeysReport(); } } module.exports = MissingKeyValidator;