UNPKG

@jsverse/transloco-keys-manager

Version:

Extract translatable keys from projects that uses Transloco

73 lines 2.87 kB
import chalk from 'chalk'; import { cosmiconfigSync } from 'cosmiconfig'; import path from 'path'; import { coerceArray } from './collection.utils.js'; import { jsoncParser } from './json.utils.js'; import { isString } from './validators.utils.js'; import { normalizedGlob } from './normalize-glob-path.js'; const angularConfigFile = ['angular.json', '.angular.json']; const workspaceConfigFile = 'workspace.json'; const projectConfigFile = 'project.json'; const defaultSourceRoot = 'src'; function searchConfig(searchPlaces, searchFrom = '') { const cwd = process.cwd(); const resolvePath = path.resolve(cwd, searchFrom); const stopDir = path.resolve(cwd, '../'); return cosmiconfigSync('', { stopDir, loaders: { '.json': jsoncParser, }, searchPlaces: coerceArray(searchPlaces), }).search(resolvePath)?.config; } function logNotFound(searchPlaces) { console.log(chalk.black.bgRed(`Unable to load workspace config from ${searchPlaces.join(', ')}. Defaulting source root to '${defaultSourceRoot}'`)); } export function resolveProjectBasePath(projectName) { let projectPath = ''; if (projectName) { projectPath = normalizedGlob(`**/${projectName}`)[0]; } const angularConfig = searchConfig(angularConfigFile, projectPath); const workspaceConfig = searchConfig(workspaceConfigFile, projectPath); const projectConfig = searchConfig(projectConfigFile, projectPath); if (!angularConfig && !workspaceConfig && !projectConfig) { logNotFound([...angularConfigFile, workspaceConfigFile, projectConfigFile]); return { projectBasePath: defaultSourceRoot }; } let resolved = null; for (const config of [angularConfig, workspaceConfig, projectConfig]) { resolved = resolveProject(config, projectName); if (resolved) { break; } } if (!resolved) { console.log(chalk.black.bgRed(`Unable to resolve \`projectBasePath\` from configuration. Defaulting source root to '${defaultSourceRoot}'`)); return { projectBasePath: defaultSourceRoot }; } return { projectBasePath: resolved.sourceRoot, projectType: resolved.projectType, }; } function resolveProject(config, projectName) { let projectConfig = config; if (config?.projects) { projectName = projectName || config.defaultProject || Object.keys(config.projects)[0]; const project = config.projects[projectName]; projectConfig = isString(project) ? searchConfig(projectConfigFile, project) : project; } if (projectConfig?.sourceRoot) { return { sourceRoot: projectConfig.sourceRoot, projectType: projectConfig.projectType, }; } return null; } //# sourceMappingURL=resolve-project-base-path.js.map