UNPKG

minigame-std

Version:

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

383 lines (382 loc) 12.1 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); //#region src/macros/env.ts /** * 如果在小游戏环境中返回 true,否则返回 false。 */ const IS_MINA = __MINIGAME_STD_MINA__; //#endregion //#region src/std/event/mina_event.ts /** * @internal * 小游戏平台的事件监听实现。 */ /** * 添加错误监听器,用于监听微信小游戏中的错误事件。 * @param listener - 错误事件的回调函数。 * @returns 返回一个函数,调用该函数可以移除监听器。 */ function addErrorListener$2(listener) { wx.onError(listener); return () => { wx.offError(listener); }; } /** * 添加未处理的 Promise 拒绝事件监听器。 * @param listener - 未处理的 Promise 拒绝事件的回调函数。 * @returns 返回一个函数,调用该函数可以移除监听器。 */ function addUnhandledrejectionListener$2(listener) { wx.onUnhandledRejection(listener); return () => { wx.offUnhandledRejection(listener); }; } /** * 添加窗口大小改变事件监听器。 * @param listener - 窗口大小改变事件的回调函数。 * @returns 返回一个函数,调用该函数可以移除监听器。 */ function addResizeListener$2(listener) { wx.onWindowResize(listener); return () => { wx.offWindowResize(listener); }; } /** * 添加小游戏回到前台事件监听器。 * @param listener - 小游戏回到前台事件的回调函数。 * @param options - 可选配置。 * @param options.fireImmediately - 是否在注册时立即以当前进入参数回调一次(默认 `false`)。 * @returns 返回一个函数,调用该函数可以移除监听器。 */ function addShowListener$2(listener, options) { if (options?.fireImmediately) listener(getEnterOptionsSync$2()); wx.onShow(listener); return () => { wx.offShow(listener); }; } /** * 添加小游戏切到后台事件监听器。 * @param listener - 小游戏切到后台事件的回调函数。 * @returns 返回一个函数,调用该函数可以移除监听器。 */ function addHideListener$2(listener) { wx.onHide(listener); return () => { wx.offHide(listener); }; } /** * 获取小游戏冷启动时的参数。 * 对应 `wx.getLaunchOptionsSync()`,生命周期内返回值始终不变。 * @returns 返回冷启动参数。 */ function getLaunchOptionsSync$2() { return wx.getLaunchOptionsSync(); } /** * 获取小游戏最近一次进入的参数。 * 对应 `wx.getEnterOptionsSync()`,热启动(切前台)时返回值可能更新。 * @returns 返回当前进入参数。 */ function getEnterOptionsSync$2() { return wx.getEnterOptionsSync(); } //#endregion //#region src/std/event/web_event.ts /** * @internal * Web 平台的事件监听实现。 */ const launchOptions = /*#__PURE__*/ (() => { if (typeof document === "undefined") return { query: {}, scene: 0, referrerInfo: { appId: "", extraData: {} } }; const web = getWebShowOptions(); return { query: web.query, scene: web.scene, referrerInfo: { appId: document.referrer, extraData: {} }, chatType: web.chatType, shareTicket: web.shareTicket }; })(); /** * 添加错误监听器,用于监听标准的错误事件。 * @param listener - 错误事件的回调函数。 * @returns 返回一个函数,调用该函数可以移除监听器。 */ function addErrorListener$1(listener) { addEventListener("error", listener); return () => { removeEventListener("error", listener); }; } /** * 添加未处理的 Promise 拒绝事件监听器。 * @param listener - 未处理的 Promise 拒绝事件的回调函数。 * @returns 返回一个函数,调用该函数可以移除监听器。 */ function addUnhandledrejectionListener$1(listener) { addEventListener("unhandledrejection", listener); return () => { removeEventListener("unhandledrejection", listener); }; } /** * 添加窗口大小改变事件监听器。 * @param listener - 窗口大小改变事件的回调函数。 * @returns 返回一个函数,调用该函数可以移除监听器。 */ function addResizeListener$1(listener) { addEventListener("resize", listener); return () => { removeEventListener("resize", listener); }; } /** * 添加页面回到前台事件监听器。 * @param listener - 页面回到前台事件的回调函数。 * @param options - 可选配置。 * @param options.fireImmediately - 是否在注册时立即以当前进入参数回调一次(默认 `false`)。 * @returns 返回一个函数,调用该函数可以移除监听器。 */ function addShowListener$1(listener, options) { if (typeof document === "undefined") { if (options?.fireImmediately) listener(getWebShowOptions()); return () => {}; } if (options?.fireImmediately) listener(getWebShowOptions()); const webListener = () => { if (document.visibilityState === "visible") listener(getWebShowOptions()); }; document.addEventListener("visibilitychange", webListener); return () => { document.removeEventListener("visibilitychange", webListener); }; } /** * 添加页面切到后台事件监听器。 * @param listener - 页面切到后台事件的回调函数。 * @returns 返回一个函数,调用该函数可以移除监听器。 */ function addHideListener$1(listener) { if (typeof document === "undefined") return () => {}; const webListener = () => { if (document.visibilityState === "hidden") listener(); }; document.addEventListener("visibilitychange", webListener); return () => { document.removeEventListener("visibilitychange", webListener); }; } /** * 获取页面冷启动时的参数。首次调用时解析并缓存页面 URL 参数,后续调用始终返回缓存值。 * * **注意:** Web 环境下 `hostExtraData` 无实际值,请使用可选链 `?.` 访问。 * * @returns 返回冷启动参数。 */ function getLaunchOptionsSync$1() { return launchOptions; } /** * 获取页面当前进入参数。每次调用实时解析当前页面 URL 参数。 * * **注意:** Web 环境下 `apiCategory` 无实际值,请使用可选链 `?.` 访问。 * * @returns 返回当前进入参数。 */ function getEnterOptionsSync$1() { return getWebShowOptions(); } function getWebShowOptions() { const hasDocument = typeof document !== "undefined"; const query = {}; if (hasDocument && typeof location !== "undefined" && typeof URLSearchParams !== "undefined") new URLSearchParams(location.search).forEach((value, key) => { query[key] = value; }); return { query, referrerInfo: { appId: hasDocument ? document.referrer : "", extraData: {} }, scene: 0 }; } //#endregion //#region src/std/event/mod.ts /** * 事件监听模块,提供错误、未处理 Promise 拒绝、窗口大小变化等事件监听功能。 * @module event */ /** * 添加错误监听器,用于监听标准的错误事件。 * @param listener - 错误事件的回调函数。 * @returns 返回一个函数,调用该函数可以移除监听器。 * @since 1.0.0 * @example * ```ts * const removeListener = addErrorListener((ev) => { * console.error('捕获到错误:', ev.message); * }); * * // 移除监听器 * removeListener(); * ``` */ function addErrorListener(listener) { if (IS_MINA) return addErrorListener$2(listener); const webListener = (ev) => { listener({ message: `${ev.message}${ev.error?.stack ? `\n${ev.error.stack}` : ""}` }); }; return addErrorListener$1(webListener); } /** * 添加未处理的 Promise 拒绝事件监听器。 * @param listener - 未处理的 Promise 拒绝事件的回调函数。 * @returns 返回一个函数,调用该函数可以移除监听器。 * @since 1.0.0 * @example * ```ts * const removeListener = addUnhandledrejectionListener((ev) => { * console.error('未处理的 Promise 拒绝:', ev.reason); * }); * * // 移除监听器 * removeListener(); * ``` */ function addUnhandledrejectionListener(listener) { return IS_MINA ? addUnhandledrejectionListener$2(listener) : addUnhandledrejectionListener$1(listener); } /** * 添加窗口大小变化监听器。 * @param listener - 窗口大小变化的回调函数。 * @returns 返回一个函数,调用该函数可以移除监听器。 * @since 1.7.0 * @example * ```ts * const removeListener = addResizeListener((size) => { * console.log('窗口大小变化:', size.windowWidth, 'x', size.windowHeight); * }); * * // 移除监听器 * removeListener(); * ``` */ function addResizeListener(listener) { return IS_MINA ? addResizeListener$2(listener) : addResizeListener$1((ev) => { listener({ windowWidth: ev.target.innerWidth, windowHeight: ev.target.innerHeight }); }); } /** * 添加游戏回到前台事件监听器。 * @param listener - 游戏回到前台事件的回调函数。Web 平台无启动参数,回调参数为 `undefined`。 * @param options - 可选配置。 * @param options.fireImmediately - 是否在注册时立即以当前进入参数回调一次(默认 `false`)。 * 设置为 `true` 可实现"订阅即重放"模式, * 覆盖首次启动和后续切前台场景。 * @returns 返回一个函数,调用该函数可以移除监听器。 * @since 2.2.0 * @example * ```ts * // 默认:纯事件通知 * const removeListener = addShowListener((options) => { * console.log('游戏回到前台:', options?.scene); * }); * * // 订阅即重放:注册时立即回调 + 后续切前台回调 * addShowListener((options) => { * console.log('进入参数:', options?.scene); * }, { fireImmediately: true }); * * // 移除监听器 * removeListener(); * ``` */ function addShowListener(listener, options) { return IS_MINA ? addShowListener$2(listener, options) : addShowListener$1(listener, options); } /** * 添加游戏切到后台事件监听器。 * @param listener - 游戏切到后台事件的回调函数。Web 平台无事件参数,回调参数为 `undefined`。 * @returns 返回一个函数,调用该函数可以移除监听器。 * @since 2.2.0 * @example * ```ts * const removeListener = addHideListener(() => { * console.log('游戏切到后台'); * }); * * // 移除监听器 * removeListener(); * ``` */ function addHideListener(listener) { return IS_MINA ? addHideListener$2(listener) : addHideListener$1(listener); } /** * 获取小游戏冷启动时的参数。生命周期内返回值始终不变。 * * - 小游戏:对应 `wx.getLaunchOptionsSync()`,包含 `hostExtraData` 等完整字段。 * - Web:首次调用时解析并缓存页面 URL 参数,后续调用始终返回缓存值, * `hostExtraData` 无实际值。 * * @returns 返回冷启动参数。 * @since 2.5.0 * @example * ```ts * const launchOptions = getLaunchOptionsSync(); * console.log('冷启动场景值:', launchOptions.scene); * console.log('冷启动 query:', launchOptions.query); * // 仅小游戏环境有实际值 * console.log('宿主数据:', launchOptions.hostExtraData?.host_scene); * ``` */ function getLaunchOptionsSync() { return IS_MINA ? getLaunchOptionsSync$2() : getLaunchOptionsSync$1(); } /** * 获取小游戏最近一次进入的参数。热启动(切前台)时返回值可能更新。 * * - 小游戏:对应 `wx.getEnterOptionsSync()`,包含 `apiCategory` 等完整字段。 * - Web:每次调用实时解析当前页面 URL 参数,`apiCategory` 无实际值。 * * @returns 返回当前进入参数。 * @since 2.5.0 * @example * ```ts * const enterOptions = getEnterOptionsSync(); * console.log('当前场景值:', enterOptions.scene); * console.log('当前 query:', enterOptions.query); * // 仅小游戏环境有实际值,Web 为 undefined * console.log('API 类别:', enterOptions.apiCategory); * ``` */ function getEnterOptionsSync() { return IS_MINA ? getEnterOptionsSync$2() : getEnterOptionsSync$1(); } //#endregion exports.addErrorListener = addErrorListener; exports.addHideListener = addHideListener; exports.addResizeListener = addResizeListener; exports.addShowListener = addShowListener; exports.addUnhandledrejectionListener = addUnhandledrejectionListener; exports.getEnterOptionsSync = getEnterOptionsSync; exports.getLaunchOptionsSync = getLaunchOptionsSync; //# sourceMappingURL=event.cjs.map