oak-backend-base/lib/routines/i18n.js

79 lines
2.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.checkAndUpdateI18n = exports.checkI18n = void 0;
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);
}
exports.checkI18n = checkI18n;
/**
* 检查项目目录下的i18n数据和数据库中的差异并更新
* @param context
* @returns
*/
function checkAndUpdateI18n(context) {
return checkAndUpdateI18nInner(context);
}
exports.checkAndUpdateI18n = checkAndUpdateI18n;