UNPKG

minigame-std

Version:

Cross-platform standard library for WeChat minigame and web browsers with unified APIs for crypto, fs, fetch, storage, and more.

121 lines (120 loc) 3.58 kB
import { asyncResultify } from "./utils.mjs"; //#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 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 export { addNetworkChangeListener, getNetworkType }; //# sourceMappingURL=network.mjs.map