@jsverse/transloco-keys-manager
Version:
Extract translatable keys from projects that uses Transloco
70 lines • 2.77 kB
JavaScript
import { getGlobalConfig, } from '@jsverse/transloco-utils';
import chalk from 'chalk';
import { existsSync } from 'fs';
import { defaultConfig } from '../config.js';
import { getScopes } from '../keys-builder/utils/scope.utils.js';
import { messages } from '../messages.js';
import { devlog } from './logger.js';
import { resolveConfigPaths } from './path.utils.js';
import { resolveProjectBasePath } from './resolve-project-base-path.js';
import { updateScopesMap } from './update-scopes-map.js';
import { isDirectory } from './validators.utils.js';
export function resolveConfig(inlineConfig) {
const { projectBasePath: sourceRoot, projectType } = resolveProjectBasePath(inlineConfig.project);
const defaults = defaultConfig({ projectType, sourceRoot });
const fileConfig = getGlobalConfig(inlineConfig.config || sourceRoot);
const userConfig = { ...flatFileConfig(fileConfig), ...inlineConfig };
const mergedConfig = { ...defaults, ...userConfig };
devlog('config', 'Config', {
Default: defaults,
'Transloco file': flatFileConfig(fileConfig),
Inline: inlineConfig,
Merged: mergedConfig,
});
resolveConfigPaths(mergedConfig);
devlog('paths', 'Configuration Paths', {
Input: mergedConfig.input,
Output: mergedConfig.output,
Translations: mergedConfig.translationsPath,
});
validateDirectories(mergedConfig);
updateScopesMap({ input: mergedConfig.input });
devlog('scopes', 'Scopes', {
'Scopes map': getScopes().scopeToAlias,
});
return { ...mergedConfig, scopes: getScopes() };
}
function flatFileConfig({ keysManager, rootTranslationsPath, langs, scopePathMap, }) {
if (keysManager?.input) {
keysManager.input = Array.isArray(keysManager.input)
? keysManager.input
: keysManager.input.split(',');
}
return {
...(rootTranslationsPath ? { translationsPath: rootTranslationsPath } : {}),
...(langs ? { langs } : {}),
...(scopePathMap ? { scopePathMap } : {}),
...keysManager,
};
}
function validateDirectories({ input, translationsPath, command }) {
let invalidPath = false;
const log = (path, prop) => {
const msg = existsSync(path)
? messages.pathIsNotDir
: messages.pathDoesntExist;
console.log(chalk.bgRed.black(`${prop} ${msg}`));
};
for (const path of input) {
if (!isDirectory(path)) {
invalidPath = true;
log(path, 'Input');
}
}
if (command === 'find' && !isDirectory(translationsPath)) {
invalidPath = true;
log(translationsPath, 'Translations');
}
invalidPath && process.exit();
}
//# sourceMappingURL=resolve-config.js.map