"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.checkI18n = checkI18n; exports.checkAndUpdateI18n = checkAndUpdateI18n; const tslib_1 = require("tslib"); const node_path_1 = require("node:path"); const requirePrj_1 = tslib_1.__importDefault(require("../utils/requirePrj")); const dependencyBuilder_1 = require("oak-domain/lib/compiler/dependencyBuilder"); const node_assert_1 = tslib_1.__importDefault(require("node:assert")); const lodash_1 = require("lodash"); const uuid_1 = require("oak-domain/lib/utils/uuid"); async function checkAndUpdateI18nInner(context, onlyCheck) { const pwd = process.cwd(); const i18nData = (0, requirePrj_1.default)(pwd, (0, node_path_1.join)('lib', 'data', 'i18n'), (0, dependencyBuilder_1.analyzeDepedency)(pwd).ascOrder); const originI18nData = await context.select('i18n', { data: { id: 1, namespace: 1, language: 1, module: 1, position: 1, data: 1, }, }, { dontCollect: true }); const originDataDict = {}; originI18nData.forEach((data) => originDataDict[data.id] = data); const result = i18nData.map(async (i18n) => { const { id, namespace, language, module, position, data } = i18n; const origin = originDataDict[id]; if (origin) { (0, node_assert_1.default)(namespace === origin.namespace && language === origin.language && module === origin.module && position === origin.position); if (!(0, lodash_1.isEqual)(data, origin.data)) { console.log(`[${namespace}]数据${onlyCheck ? '需要更新' : '将被更新'}`); if (!onlyCheck) { return context.operate('i18n', { id: await (0, uuid_1.generateNewIdAsync)(), action: 'update', data: { data, }, filter: { id, }, }, {}); } } } else { console.log(`[${namespace}]数据${onlyCheck ? '需要新建' : '将被新建'}`); if (!onlyCheck) { return context.operate('i18n', { id: await (0, uuid_1.generateNewIdAsync)(), action: 'create', data: i18n, }, {}); } } return Promise.resolve(); }); return await Promise.all(result); } /** * 检查项目目录下的i18n数据和数据库中的差异 * @param context * @returns */ function checkI18n(context) { return checkAndUpdateI18nInner(context, true); } /** * 检查项目目录下的i18n数据和数据库中的差异,并更新 * @param context * @returns */ function checkAndUpdateI18n(context) { return checkAndUpdateI18nInner(context); }