minigame-std
Version:
Cross-platform standard library for WeChat minigame and web browsers with unified APIs for crypto, fs, fetch, storage, and more.
123 lines (122 loc) • 3.74 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
let src_std_utils_mod_ts = require("./utils.cjs");
//#region src/macros/env.ts
/**
* 如果在小游戏环境中返回 true,否则返回 false。
*/
const IS_MINA = __MINIGAME_STD_MINA__;
//#endregion
//#region src/std/network/mina_network.ts
/**
* @internal
* 小游戏平台的网络状态实现。
*/
/**
* 获取网络状态。
* @returns 返回值可能为 `wifi` | `none` | `unknown` | `2g` | `3g` | `4g`
*/
async function getNetworkType$2() {
return (await (0, src_std_utils_mod_ts.asyncResultify)(wx.getNetworkType)()).mapOr("unknown", (x) => x.networkType);
}
/**
* 监听网络状态变化。
* @param listener - 网络状态变化的回调函数。
* @returns 返回一个函数,调用该函数可以移除监听器。
*/
function addNetworkChangeListener$2(listener) {
const networkListener = (res) => {
const { isConnected, networkType } = res;
listener(isConnected ? networkType : "none");
};
wx.onNetworkStatusChange(networkListener);
return () => {
wx.offNetworkStatusChange(networkListener);
};
}
//#endregion
//#region src/std/network/web_network.ts
/**
* 获取网络状态。
* @returns 根据浏览器支持情况不同,返回值可能为 `wifi` | `none` | `unknown` | `slow-2g` | `2g` | `3g` | `4g`
*/
function getNetworkType$1() {
if (!navigator.onLine) return "none";
const nav = navigator;
if (nav.connection) return nav.connection.type === "wifi" ? "wifi" : nav.connection.effectiveType;
return "unknown";
}
/**
* 监听网络状态变化。
* @param listener - 网络状态变化的回调函数。
* @returns 返回一个函数,调用该函数可以移除监听器。
*/
function addNetworkChangeListener$1(listener) {
let prevType = getNetworkType$1();
const networkListener = () => {
const currentType = getNetworkType$1();
if (currentType !== prevType) {
prevType = currentType;
listener(currentType);
}
};
const nav = navigator;
if (nav.connection) {
nav.connection.addEventListener("change", networkListener);
return () => {
nav.connection?.removeEventListener("change", networkListener);
};
}
addEventListener("online", networkListener);
addEventListener("offline", networkListener);
return () => {
removeEventListener("online", networkListener);
removeEventListener("offline", networkListener);
};
}
//#endregion
//#region src/std/network/mod.ts
/**
* 网络状态模块,提供获取网络类型和监听网络状态变化的功能。
* @module network
*/
/**
* 获取网络状态。
* @returns 根据浏览器支持情况不同,返回值可能为 `wifi` | `none` | `unknown` | `slow-2g` | `2g` | `3g` | `4g`
* @since 1.0.9
* @example
* ```ts
* const networkType = await getNetworkType();
* console.log('当前网络类型:', networkType);
* if (networkType === 'none') {
* console.log('当前无网络连接');
* }
* ```
*/
function getNetworkType() {
return IS_MINA ? getNetworkType$2() : Promise.resolve(getNetworkType$1());
}
/**
* 监听网络状态变化。
* @param listener - 网络状态变化的回调函数。
* @returns 返回一个函数,调用该函数可以移除监听器。
* @since 1.0.9
* @example
* ```ts
* const removeListener = addNetworkChangeListener((type) => {
* console.log('网络状态变化:', type);
* if (type === 'none') {
* console.log('网络已断开');
* }
* });
*
* // 移除监听器
* removeListener();
* ```
*/
function addNetworkChangeListener(listener) {
return (IS_MINA ? addNetworkChangeListener$2 : addNetworkChangeListener$1)(listener);
}
//#endregion
exports.addNetworkChangeListener = addNetworkChangeListener;
exports.getNetworkType = getNetworkType;
//# sourceMappingURL=network.cjs.map