steam-family-bot-core
Version:
一个用于新版 Steam 家庭的库存监控 Bot 插件
113 lines • 4 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.tran = exports.loadI18nConfig = void 0;
const i18n = (lang) => { };
const i18nObj = {};
init().then((_) => console.log('i18n loaded'));
async function init() {
// @ts-expect-error
const zh = await Promise.resolve().then(() => __importStar(require('./zh-cn.json')));
i18nObj['zh-cn'] = zh;
}
function isObject(item) {
return item && typeof item === 'object' && !Array.isArray(item);
}
function merge(target, ...sources) {
if (!sources.length)
return target;
const source = sources.shift();
if (isObject(target) && isObject(source)) {
for (const key in source) {
if (isObject(source[key])) {
if (!target[key])
Object.assign(target, { [key]: {} });
merge(target[key], source[key]);
}
else {
Object.assign(target, { [key]: source[key] });
}
}
}
return merge(target, ...sources);
}
function loadI18nConfig(lang, obj) {
const raw = i18nObj[lang];
i18nObj[lang] = merge(raw, obj);
console.log(`overwrite i18n ${lang} `);
}
exports.loadI18nConfig = loadI18nConfig;
function safeEval(expr, context) {
try {
const fn = new Function(...Object.keys(context), `return ${expr}`);
return fn(...Object.values(context));
}
catch (e) {
console.error(expr, context, e);
return expr;
}
}
function tran(path, params = {}, lang = 'zh-cn') {
const keys = path.split('.');
let result = i18nObj[lang];
for (const key of keys) {
if (result[key] !== undefined) {
result = result[key];
}
else {
return null;
}
}
if (typeof result === 'string') {
return interpolateString(result, params);
}
return null;
}
exports.tran = tran;
function interpolateString(str, context) {
// 正则表达式匹配三元表达式
const regex = /\{\{(.*?)\?\s*'(.*?)'\s*:\s*'(.*?)'\s*\}\}/;
let match;
// 递归解析
while ((match = regex.exec(str)) !== null) {
const [fullMatch, condition, trueValue, falseValue] = match;
// 递归解析 trueValue 和 falseValue 以处理嵌套情况
const resolvedTrueValue = interpolateString(trueValue, context);
const resolvedFalseValue = interpolateString(falseValue, context);
// 计算条件表达式
let result = safeEval(condition, context);
if (typeof result === 'string') {
result = false;
}
const replacement = result ? resolvedTrueValue : resolvedFalseValue;
// 替换匹配到的三元表达式
str = str.replace(fullMatch, replacement);
}
// 替换变量插值
const variableRegex = /\{\{(.*?)\}\}/g;
str = str.replace(variableRegex, (match, expr) => safeEval(expr, context));
return str;
}
//# sourceMappingURL=index.js.map