UNPKG

my-uniapp-tools

Version:

一个简洁稳定的 uni-app 开发工具库,提供剪贴板、本地存储、导航、系统信息等常用功能

2 lines (1 loc) 4.49 kB
"use strict";var e=require("./core.cjs");const t=e.ErrorHandler.getInstance(),n=()=>!("undefined"==typeof navigator||!navigator.userAgent)&&navigator.userAgent.toLowerCase().includes("micromessenger"),r=()=>"undefined"!=typeof window&&"undefined"!=typeof document,i=()=>r()&&n()&&window.wx||null,o=(e,t=!1)=>{const n={};return e.forEach(e=>{"string"==typeof e&&""!==e.trim()&&(n[e]=t)}),n};let s=!1,a=null,u=!1,c=null;const l=["https://res.wx.qq.com/open/js/jweixin-1.6.0.js","https://res2.wx.qq.com/open/js/jweixin-1.6.0.js"],p=()=>{s=!1,u=!1,a=null,c=null},m=(e={})=>{const t=e&&"object"==typeof e?e:{},n="number"==typeof t.timeoutMs&&Number.isFinite(t.timeoutMs)&&t.timeoutMs>0?t.timeoutMs:1e4;if(s||r()&&window.wx)return s=!0,Promise.resolve(!0);if(!r())return Promise.resolve(!1);if(a)return a;const i=Array.isArray(t.cdnUrls)&&t.cdnUrls.length>0?t.cdnUrls.filter(e=>"string"==typeof e&&""!==e.trim()):[],o=i.length>0?i:l;return a=new Promise(e=>{let t=!1,r=null,i=null,u=0;const c=n=>{t||(t=!0,r&&(clearTimeout(r),r=null),i&&i.parentNode&&i.parentNode.removeChild(i),n&&(s=!0),a=null,e(n))},l=()=>{if(u>=o.length)return void c(!1);if(!document.head)return void c(!1);const e=o[u];u+=1;const t=document.createElement("script");i=t,t.src=e,t.async=!0,t.onload=()=>c(!0),t.onerror=()=>{t.parentNode&&t.parentNode.removeChild(t),i=null,l()},document.head.appendChild(t)};r=setTimeout(()=>{c(!1)},n),l()}),a},f=async(r,o={})=>{const s=o&&"object"==typeof o?o:{},a="number"==typeof s.timeoutMs&&Number.isFinite(s.timeoutMs)&&s.timeoutMs>0?s.timeoutMs:1e4;return!(!r||"object"!=typeof r||"string"!=typeof r.appId||"string"!=typeof r.nonceStr||"string"!=typeof r.signature||"number"!=typeof r.timestamp||!Array.isArray(r.jsApiList))&&(n()?c||(c=(async()=>{if(!await m({timeoutMs:a}))return t.handleError(new e.UniAppToolsError("WECHAT_JSSDK_LOAD_FAILED","微信 JS-SDK 加载失败","weixin"),"weixin"),!1;const n=i();if(!n||"function"!=typeof n.config||"function"!=typeof n.ready||"function"!=typeof n.error)return!1;const o=n.config,s=n.ready,c=n.error,l=await new Promise(n=>{let i=!1,u=null;const l=e=>{i||(i=!0,u&&(clearTimeout(u),u=null),n(e))};u=setTimeout(()=>l(!1),a);try{o({debug:r.debug||!1,appId:r.appId,timestamp:r.timestamp,nonceStr:r.nonceStr,signature:r.signature,jsApiList:r.jsApiList}),s(()=>l(!0)),c(n=>{t.handleError(new e.UniAppToolsError("WECHAT_JSSDK_CONFIG_ERROR",`微信 JS-SDK 配置错误: ${(e=>{try{return JSON.stringify(e)}catch{return String(e)}})(n)}`,"weixin"),"weixin"),l(!1)})}catch(n){t.handleError(new e.UniAppToolsError("WECHAT_JSSDK_CONFIG_EXCEPTION",`微信 JS-SDK 配置异常: ${n instanceof Error?n.message:String(n)}`,"weixin"),"weixin"),l(!1)}});return u=l,l})().finally(()=>{c=null}),c):(console.warn("当前不在微信环境中"),!1))},d=e=>{if(!e||"object"!=typeof e)return;const t=i();t&&(t.updateTimelineShareData?t.updateTimelineShareData(e):t.onMenuShareTimeline&&t.onMenuShareTimeline(e))},h=e=>{if(!e||"object"!=typeof e)return;const t=i();t&&(t.updateAppMessageShareData?t.updateAppMessageShareData(e):t.onMenuShareAppMessage&&t.onMenuShareAppMessage(e))};class g{static instance;isConfigured=!1;config=null;initPromise=null;constructor(){}static getInstance(){return g.instance||(g.instance=new g),g.instance}async init(e){return this.initPromise||(this.initPromise=f(e).then(t=>(this.isConfigured=t,this.config=t?e:null,t)).finally(()=>{this.initPromise=null})),this.initPromise}isReady(){return(this.isConfigured||u)&&n()}getConfig(){return this.config}reset(){this.isConfigured=!1,this.config=null,this.initPromise=null,p()}setShareData(e){this.isReady()?(d(e),h(e)):console.warn("微信 SDK 未就绪")}}exports.WechatSDK=g,exports.checkWechatJSAPI=(n,r={})=>{const s=r&&"object"==typeof r?r:{},a="number"==typeof s.timeoutMs&&Number.isFinite(s.timeoutMs)&&s.timeoutMs>0?s.timeoutMs:8e3,u=Array.isArray(n)?n:[];return new Promise(n=>{const r=i();if(!r||"function"!=typeof r.checkJsApi)return void n(o(u,!1));let s=!1;const c=e=>{s||(s=!0,n(e))},l=setTimeout(()=>c(o(u,!1)),a);try{r.checkJsApi({jsApiList:u,success:e=>{clearTimeout(l),c({...o(u,!1),...e?.checkResult||{}})}})}catch(n){clearTimeout(l),t.handleError(new e.UniAppToolsError("CHECK_WECHAT_JSAPI_ERROR",`检查微信 JS-SDK API 异常: ${n instanceof Error?n.message:String(n)}`,"weixin"),"weixin"),c(o(u,!1))}})},exports.configWechatJSSDK=f,exports.isWechat=n,exports.loadWechatJSSDK=m,exports.resetWechatJSSDK=p,exports.shareToFriend=h,exports.shareToTimeline=d;