UNPKG

steam-family-bot-core

Version:

一个用于新版 Steam 家庭的库存监控 Bot 插件

113 lines 4 kB
"use strict"; 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