UNPKG

@hi18n/cli

Version:

Message internationalization meets immutability and type-safety - command line tool

93 lines 3.46 kB
"use strict"; 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