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

125 lines (108 loc) • 4.47 kB
const fs = require('fs'); const path = require('path'); const configManager = require('./config-helper'); const { ensureDirectory } = require('./config-helper'); /** * Check if the project is properly initialized * @param {Object} options - Options for initialization check * @returns {Promise<Object>} Object containing initialization status and config */ async function checkInitialized(options = {}) { const settings = configManager.loadSettings ? configManager.loadSettings() : (configManager.getConfig ? configManager.getConfig() : {}); const currentVersion = require('../package.json').version; const configDir = settings.configDir || './settings'; // Ensure config directory exists ensureDirectory(configDir); const defaultConfig = { sourceDir: settings.sourceDir || './locales', sourceLanguage: settings.sourceLanguage || 'en', projectRoot: path.resolve('.'), framework: settings.framework || { detected: false, prompt: 'always' }, configDir: configDir }; // Check initialization status file with consistent path resolution const initFilePath = path.resolve(configDir, 'initialization.json'); // If initialization file exists and is valid, return early if (fs.existsSync(initFilePath)) { try { const initStatus = JSON.parse(fs.readFileSync(initFilePath, 'utf8')); const isInitialized = initStatus.initialized && initStatus.version && initStatus.version.split('.')[0] === currentVersion.split('.')[0]; if (isInitialized) { // Merge with default config but don't override existing settings return { initialized: true, config: { ...defaultConfig, ...initStatus, // Don't override framework settings if they exist framework: initStatus.framework || defaultConfig.framework } }; } } catch (e) { console.warn('Warning: Invalid initialization file, will reinitialize...', e.message); } } // Check if source language files exist const langDir = path.resolve(defaultConfig.sourceDir, defaultConfig.sourceLanguage); const hasLanguageFiles = fs.existsSync(langDir) && fs.readdirSync(langDir).some(f => f.endsWith('.json')); // If language files exist but no init file, create one if (hasLanguageFiles) { const initData = { initialized: true, version: currentVersion, timestamp: new Date().toISOString(), sourceDir: defaultConfig.sourceDir, sourceLanguage: defaultConfig.sourceLanguage, detectedLanguage: defaultConfig.detectedLanguage, detectedFramework: defaultConfig.detectedFramework, lastUpdated: new Date().toISOString() }; ensureDirectory(path.dirname(initFilePath)); fs.writeFileSync(initFilePath, JSON.stringify(initData, null, 2)); return { initialized: true, config: { ...defaultConfig, ...initData } }; } return { initialized: false, config: defaultConfig }; } /** * Mark the project as initialized * @param {Object} config - Configuration to save * @returns {Promise<void>} */ async function markAsInitialized(config) { const settings = configManager.loadSettings ? configManager.loadSettings() : (configManager.getConfig ? configManager.getConfig() : {}); const configDir = settings.configDir || './settings'; const initFilePath = path.resolve(configDir, 'initialization.json'); const currentVersion = require('../package.json').version; const initData = { initialized: true, version: currentVersion, timestamp: new Date().toISOString(), sourceDir: config.sourceDir, sourceLanguage: config.sourceLanguage, detectedLanguage: config.detectedLanguage, detectedFramework: config.detectedFramework, lastUpdated: new Date().toISOString() }; ensureDirectory(path.dirname(initFilePath)); fs.writeFileSync(initFilePath, JSON.stringify(initData, null, 2)); // Update the settings object if it has a save method if (configManager.saveSettings) { await configManager.saveSettings({ ...settings, ...initData }); } else if (configManager.saveConfig) { await configManager.saveConfig({ ...settings, ...initData }); } } module.exports = { checkInitialized, markAsInitialized };