'use strict';
/**
* @fileoverview Path resolution for i18n directories and output files.
* Merges CLI arguments with config file settings.
* @module paths
*/
const path = require('path');
const { getArgValue } = require('./config');
const { DEFAULT_EXCLUDED_FOLDERS } = require('./file-walker');
function resolveI18nDir(args, config, cwd) {
return getArgValue(args, config, {
flag: '--i18n-dir',
configKey: 'i18nDir',
defaultValue: path.join(cwd, 'src', 'assets', 'i18n'),
});
}
function resolveSrcDir(args, config, cwd) {
return getArgValue(args, config, {
flag: '--src',
configKey: 'src',
defaultValue: path.join(cwd, 'src', 'app'),
});
}
function resolveOutputFile(ctx) {
const { args, config, i18nDir, lang } = ctx;
return getArgValue(args, config, {
flag: '--output',
configKey: 'output',
defaultValue: path.join(i18nDir, lang ? `${lang}.json` : 'extracted.json'),
});
}
/**
* Resolves all paths needed for extraction and translation
* @param {Object} ctx
* @returns {Object}
*/
function resolvePaths(ctx) {
const { args, config, cwd, lang = null } = ctx;
const i18nDir = resolveI18nDir(args, config, cwd);
const i18nkitDir = path.join(cwd, '.i18nkit');
return {
srcDir: resolveSrcDir(args, config, cwd),
i18nDir,
reportDir: i18nkitDir,
backupDir: path.join(i18nkitDir, 'backups'),
outputFile: resolveOutputFile({ args, config, i18nDir, lang }),
keyMappingFile: path.join(i18nkitDir, 'keys.json'),
excludedFolders: config.excludedFolders || DEFAULT_EXCLUDED_FOLDERS,
};
}
module.exports = {
resolvePaths,
};