t-comm
Version:
专业、稳定、纯粹的工具库
165 lines (160 loc) • 6.76 kB
JavaScript
;
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;