UNPKG

@lingui/cli

Version:

Lingui CLI to extract messages, compile catalogs, and manage translation workflows

96 lines (95 loc) 2.69 kB
import fs from "fs"; import path from "path"; import normalizePath from "normalize-path"; export const PATHSEP = "/"; // force posix everywhere export function prettyOrigin(origins) { try { return origins.map((origin) => origin.join(":")).join(", "); } catch (e) { return ""; } } export function replacePlaceholders(input, values) { return input.replace(/\{([^}]+)}/g, (m, placeholder) => { return values[placeholder] ?? m; }); } export async function readFile(fileName) { try { return (await fs.promises.readFile(fileName, "utf-8")).toString(); } catch (err) { if (err.code != "ENOENT") { throw err; } } } async function mkdirp(dir) { try { await fs.promises.mkdir(dir, { recursive: true, }); } catch (err) { if (err.code != "EEXIST") { throw err; } } } export function isDirectory(filePath) { try { return fs.lstatSync(filePath).isDirectory(); } catch (err) { if (err.code != "ENOENT") { throw err; } } } export async function writeFile(fileName, content) { await mkdirp(path.dirname(fileName)); await fs.promises.writeFile(fileName, content, "utf-8"); } export async function writeFileIfChanged(filename, newContent) { const raw = await readFile(filename); if (raw) { if (newContent !== raw) { await writeFile(filename, newContent); } } else { await writeFile(filename, newContent); } } export function hasYarn() { return fs.existsSync(path.resolve("yarn.lock")); } export function makeInstall(packageName, dev = false) { const withYarn = hasYarn(); return withYarn ? `yarn add ${dev ? "--dev " : ""}${packageName}` : `npm install ${dev ? "--save-dev" : "--save"} ${packageName}`; } /** * Remove ./ at the beginning: ./relative => relative * relative => relative * Preserve directories: ./relative/ => relative/ * Preserve absolute paths: /absolute/path => /absolute/path */ export function normalizeRelativePath(sourcePath) { if (path.isAbsolute(sourcePath)) { // absolute path return normalizePath(sourcePath, false); } // https://github.com/lingui/js-lingui/issues/809 const isDir = isDirectory(sourcePath); return (normalizePath(path.relative(process.cwd(), sourcePath), false) + (isDir ? "/" : "")); } /** * Escape special regex characters used in file-based routing systems */ export function makePathRegexSafe(path) { return path.replace(/[(){}[\]^$+]/g, "\\$&"); }