@hi18n/cli
Version:
Message internationalization meets immutability and type-safety - command line tool
119 lines (92 loc) • 3.28 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.export_ = export_;
var _push = _interopRequireDefault(require("core-js-pure/stable/instance/push.js"));
var _nodeFs = _interopRequireDefault(require("node:fs"));
var _nodePath = _interopRequireDefault(require("node:path"));
var _nodeUtil = _interopRequireDefault(require("node:util"));
var _glob = _interopRequireDefault(require("glob"));
var _utils = require("@typescript-eslint/utils");
var _eslintPlugin = require("@hi18n/eslint-plugin");
var _config = require("./config");
async function export_(options) {
const {
cwd
} = options;
const config = await (0, _config.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 linterConfig = {
parser: config.parser,
parserOptions: config.parserOptions
};
const linter = new _utils.TSESLint.Linter({
cwd
});
const catalogDefs = [];
linter.defineRule("@hi18n/collect-catalog-definitions", _eslintPlugin.rules["collect-catalog-definitions"]);
const files = [];
for (const includeGlob of include) {
(0, _push.default)(files).call(files, ...(await _nodeUtil.default.promisify(_glob.default)(includeGlob, {
cwd,
nodir: true,
ignore: exclude
})));
}
for (const relative of files) {
const filename = _nodePath.default.join(cwd, relative);
const source = await _nodeFs.default.promises.readFile(filename, "utf-8");
const messages = linter.verify(source, { ...linterConfig,
rules: {
"@hi18n/collect-catalog-definitions": ["error", c => {
(0, _push.default)(catalogDefs).call(catalogDefs, c);
}, {
requestMessages: true
}]
}
}, {
filename
});
checkMessages(relative, messages);
}
const translations = {};
for (const catalogDef of catalogDefs) {
var _translations$locale;
if (!catalogDef.locale) {
throw new Error(`No locale given in ${catalogDef.catalogLocation.path}`);
}
const locale = catalogDef.locale;
const catalogData = (_translations$locale = translations[locale]) !== null && _translations$locale !== void 0 ? _translations$locale : 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