UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

165 lines (160 loc) 6.76 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var cocos_network_defaults = require('../network/defaults.js'); /** * 环境切换(test / prod) * * 设计要点: * 1. 仅维护 test / prod 两个环境(后续如需扩展再说)。 * 2. 默认环境根据微信小程序/小游戏版本自动判定: * - envVersion === 'release' → 'prod' * - 其他(develop / trial / 非小程序环境) → 'test' * 3. 构建期可通过 `globalThis.__COCOS_BUILD_NETWORK_ENV__` 注入默认值, * 优先级高于 wx AccountInfo 推断但低于用户手动切换(持久化存储)。 * 典型场景:CI/headless --env prod 构建时,开发工具/体验版中仍走正式域名。 * 4. 用户通过 wx.__pmdSetEnv__('prod' | 'test') 手动切换后,会写入持久化存储, * 下次启动时优先读取存储值,不再受小程序版本影响(直到再次切换)。 * 5. 切换后默认自动重启小游戏(wx.restartMiniProgram)/ 浏览器(location.reload), * 让新环境立刻生效。 * 6. 全局调试函数优先挂到 wx 对象上(小游戏环境下 console 拿不到 globalThis), * 没有 wx 时回退到 globalThis。 * * 优先级(从高到低): * 用户手动切换(持久化存储) > globalThis.__COCOS_BUILD_NETWORK_ENV__ > wx AccountInfo 推断 */ /** 默认存储 key */ var DEFAULT_ENV_STORAGE_KEY = 'pmd_api_cocos_env'; /** 构建期注入的全局变量 key:项目通过 globalThis[__COCOS_BUILD_NETWORK_ENV__] 设置默认环境 */ var GLOBAL_BUILD_ENV_KEY = '__COCOS_BUILD_NETWORK_ENV__'; /** 默认全局调试函数名 */ var DEFAULT_GLOBAL_SET_ENV = '__pmdSetEnv__'; var DEFAULT_GLOBAL_GET_ENV = '__pmdGetEnv__'; /** * 读取微信小程序/小游戏当前的版本(develop / trial / release)。 * 非小程序环境或调用失败返回 ''。 */ function readWxEnvVersion() { var _a; var g = typeof globalThis !== 'undefined' ? globalThis : {}; var wxObj = g.wx; if (!wxObj) return ''; try { if (typeof wxObj.getAccountInfoSync === 'function') { var info = wxObj.getAccountInfoSync(); return ((_a = info === null || info === void 0 ? void 0 : info.miniProgram) === null || _a === void 0 ? void 0 : _a.envVersion) || ''; } } catch (_b) { /* ignore */ } return ''; } /** * 读取构建期通过 globalThis 注入的默认环境(如 CI --env prod)。 * 未注入或值非法时返回 undefined。 */ function getGlobalBuildEnv() { var g = typeof globalThis !== 'undefined' ? globalThis : {}; var v = g[GLOBAL_BUILD_ENV_KEY]; return isValidEnv(v) ? v : undefined; } /** * 推断"未手动设置过环境"时的默认 env: * 1. globalThis.__COCOS_BUILD_NETWORK_ENV__(构建期注入) * 2. 小程序正式版(release) → 'prod' * 3. 其他情况 → 'test' */ function inferDefaultEnv() { var globalEnv = getGlobalBuildEnv(); if (globalEnv) return globalEnv; return readWxEnvVersion() === 'release' ? 'prod' : 'test'; } /** * 读取当前生效的环境: * - 优先读取持久化存储中的手动切换值(与 createEnvSwitcher 内部 readEnv 保持一致) * - 没有持久化值时回退到 inferDefaultEnv()(含 globalThis 构建注入) */ function readEnv() { var storageKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_ENV_STORAGE_KEY; var storage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : cocos_network_defaults.defaultStorage; var v = storage.get(storageKey); return isValidEnv(v) ? v : inferDefaultEnv(); } function isTestEnv() { var storageKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_ENV_STORAGE_KEY; var storage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : cocos_network_defaults.defaultStorage; return readEnv(storageKey, storage) === 'test'; } function isValidEnv(v) { return v === 'test' || v === 'prod'; } function tryRestart() { var g = typeof globalThis !== 'undefined' ? globalThis : {}; try { if (g.wx && typeof g.wx.restartMiniProgram === 'function') { g.wx.restartMiniProgram({}); return; } } catch (_a) { /* ignore */ } try { if (typeof g.location !== 'undefined' && typeof g.location.reload === 'function') { g.location.reload(); } } catch (_b) { /* ignore */ } } /** * 创建一个环境切换器。 */ function createEnvSwitcher(options) { var _a, _b, _c; var storage = (_a = options.storage) !== null && _a !== void 0 ? _a : cocos_network_defaults.defaultStorage; var storageKey = (_b = options.storageKey) !== null && _b !== void 0 ? _b : DEFAULT_ENV_STORAGE_KEY; var autoRestartDefault = (_c = options.autoRestart) !== null && _c !== void 0 ? _c : true; var switcher = { getEnv: function getEnv() { return readEnv(storageKey, storage); }, isTestEnv: function isTestEnv() { return readEnv(storageKey, storage) === 'test'; }, getDomain: function getDomain() { return options.svrdomain[readEnv(storageKey, storage)]; }, getBaseUrl: function getBaseUrl() { var domain = options.svrdomain[readEnv(storageKey, storage)] || ''; if (domain.startsWith('https://')) { return domain; } return "https://".concat(domain); }, setEnv: function setEnv(env, autoRestart) { var _a; if (!isValidEnv(env)) { console.warn("[pmd-api-cocos][env] \u975E\u6CD5\u73AF\u5883\u503C\uFF1A".concat(env, "\uFF0C\u4EC5\u652F\u6301 'test' | 'prod'")); return; } var prev = readEnv(storageKey, storage); storage.set(storageKey, env); var shouldRestart = autoRestart !== null && autoRestart !== void 0 ? autoRestart : autoRestartDefault; console.log("[pmd-api-cocos][env] \u5DF2\u5207\u6362\u5230 ".concat(env, "\uFF08\u57DF\u540D\uFF1A").concat(options.svrdomain[env], "\uFF09\uFF0C") + "".concat(shouldRestart ? '即将重启生效' : '请重启后生效')); try { (_a = options.onChange) === null || _a === void 0 ? void 0 : _a.call(options, env, prev); } catch (e) { console.warn('[pmd-api-cocos][env] onChange 回调抛错:', e); } if (shouldRestart) tryRestart(); } }; return switcher; } exports.DEFAULT_ENV_STORAGE_KEY = DEFAULT_ENV_STORAGE_KEY; exports.DEFAULT_GLOBAL_GET_ENV = DEFAULT_GLOBAL_GET_ENV; exports.DEFAULT_GLOBAL_SET_ENV = DEFAULT_GLOBAL_SET_ENV; exports.GLOBAL_BUILD_ENV_KEY = GLOBAL_BUILD_ENV_KEY; exports.createEnvSwitcher = createEnvSwitcher; exports.inferDefaultEnv = inferDefaultEnv; exports.isTestEnv = isTestEnv; exports.readEnv = readEnv;