@hi18n/cli
Version:
Message internationalization meets immutability and type-safety - command line tool
93 lines • 3.46 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.export_ = export_;
const node_fs_1 = __importDefault(require("node:fs"));
const node_path_1 = __importDefault(require("node:path"));
const glob_1 = require("glob");
const utils_1 = require("@typescript-eslint/utils");
const internal_rules_1 = require("@hi18n/eslint-plugin/internal-rules");
const config_ts_1 = require("./config.js");
async function export_(options) {
const { cwd } = options;
const config = await (0, config_ts_1.loadConfig)(cwd);
const include = config.include;
const exclude = config.exclude;
if (include === undefined || include.length === 0) {
throw new Error("No include specified");
}
if (!config.connector) {
throw new Error("Connector not configured");
}
const catalogDefs = [];
const linterConfig = {
languageOptions: {
parser: config.parser,
parserOptions: config.parserOptions,
},
plugins: {
"@hi18n": {
rules: {
"collect-catalog-definitions": (0, internal_rules_1.getCollectCatalogDefinitionsRule)((record) => catalogDefs.push(record)),
},
},
},
};
const linter = new utils_1.TSESLint.Linter({ cwd });
const files = [];
for (const includeGlob of include) {
files.push(...(await (0, glob_1.glob)(includeGlob, {
cwd,
nodir: true,
ignore: exclude ?? [],
})));
}
for (const relative of files) {
const filename = node_path_1.default.join(cwd, relative);
const source = await node_fs_1.default.promises.readFile(filename, "utf-8");
const messages = linter.verify(source, [
{ files: ["**"] },
{
...linterConfig,
rules: {
"@hi18n/collect-catalog-definitions": [
"error",
{
requestMessages: true,
},
],
},
},
], { filename });
checkMessages(relative, messages);
}
const translations = {};
for (const catalogDef of catalogDefs) {
if (!catalogDef.locale) {
throw new Error(`No locale given in ${catalogDef.catalogLocation.path}`);
}
const locale = catalogDef.locale;
const catalogData = (translations[locale] ??= {});
for (const [key, messageDef] of Object.entries(catalogDef.messages)) {
catalogData[key] = { raw: messageDef.value };
}
}
const c = config.connector.connector(config.configPath, config.connectorOptions);
if (!c.exportData) {
throw new Error("This connector doesn't support exporting");
}
await c.exportData({ translations });
}
function checkMessages(filepath, messages) {
for (const message of messages) {
if (/^Definition for rule .* was not found\.$/.test(message.message)) {
// We load ESLint with minimal rules. Ignore the "missing rule" error.
continue;
}
if (message.severity >= 2)
throw new Error(`Error on ${filepath}: ${message.message}`);
}
}
//# sourceMappingURL=export.js.map