From e611c3e6fa1f1e6d0faa98dde27f71d427442e1d Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Mon, 17 May 2021 15:19:01 +0800 Subject: [PATCH] feat: support plugin-legacy --- package.json | 1 + packages/uni-cloud/dist/uni-cloud.cjs.js | 3 +- packages/uni-cloud/dist/uni-cloud.es.js | 3300 ++++++++++++++++- packages/uni-cloud/lib/uni.config.js | 6 +- packages/uni-h5/dist/uni-h5.es.js | 34 +- .../uni-h5/src/view/components/ad/index.vue | 11 - packages/uni-h5/style/ad.css | 8 + packages/vite-plugin-uni/src/config/index.ts | 18 +- .../src/configResolved/plugins/index.ts | 31 +- .../src/configResolved/plugins/ssr.ts | 5 +- packages/vite-plugin-uni/src/index.ts | 4 + .../vite-plugin-uni/src/utils/features.ts | 9 +- packages/vite-plugin-uni/src/utils/ssr.ts | 22 +- packages/vite-plugin-uni/src/vue/index.ts | 2 +- .../vue/{compilerOptions.ts => options.ts} | 21 +- yarn.lock | 31 + 16 files changed, 3454 insertions(+), 52 deletions(-) create mode 100644 packages/uni-h5/style/ad.css rename packages/vite-plugin-uni/src/vue/{compilerOptions.ts => options.ts} (75%) diff --git a/package.json b/package.json index 52f2bb4948..f7ad92ae12 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "@types/quill": "^1.3.7", "@types/resolve": "^1.20.0", "@typescript-eslint/parser": "^4.12.0", + "@vitejs/plugin-legacy": "^1.3.4", "@vitejs/plugin-vue": "^1.2.2", "@vitejs/plugin-vue-jsx": "^1.1.4", "@vue/compiler-sfc": "^3.1.0-beta.3", diff --git a/packages/uni-cloud/dist/uni-cloud.cjs.js b/packages/uni-cloud/dist/uni-cloud.cjs.js index 0b1649e0e2..31dbd4f450 100644 --- a/packages/uni-cloud/dist/uni-cloud.cjs.js +++ b/packages/uni-cloud/dist/uni-cloud.cjs.js @@ -5605,7 +5605,8 @@ let uniCloud$3 = new UniCloud(); (() => { { let defaultSpace = {}; - const providers = process.env.UNI_CLOUD_PROVIDER&&JSON.parse(process.env.UNI_CLOUD_PROVIDER)||[] + const cloudProvider = process.env.UNI_CLOUD_PROVIDER + const providers = cloudProvider && JSON.parse(cloudProvider)||[] if (providers.length === 1) { defaultSpace = providers[0]; uniCloud$3 = uniCloud$3.init(defaultSpace); diff --git a/packages/uni-cloud/dist/uni-cloud.es.js b/packages/uni-cloud/dist/uni-cloud.es.js index 8ac8716e36..92be07abd4 100644 --- a/packages/uni-cloud/dist/uni-cloud.es.js +++ b/packages/uni-cloud/dist/uni-cloud.es.js @@ -1 +1,3299 @@ -import{initVueI18n as e}from"@dcloudio/uni-i18n";"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function s(e,t,s){return e(s={path:t,exports:{},require:function(e,t){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==t&&s.path)}},s.exports),s.exports}var n=s((function(e,t){var s;e.exports=(s=s||function(e,t){var s=Object.create||function(){function e(){}return function(t){var s;return e.prototype=t,s=new e,e.prototype=null,s}}(),n={},r=n.lib={},o=r.Base={extend:function(e){var t=s(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},i=r.WordArray=o.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||c).stringify(this)},concat:function(e){var t=this.words,s=e.words,n=this.sigBytes,r=e.sigBytes;if(this.clamp(),n%4)for(var o=0;o>>2]>>>24-o%4*8&255;t[n+o>>>2]|=i<<24-(n+o)%4*8}else for(o=0;o>>2]=s[o>>>2];return this.sigBytes+=r,this},clamp:function(){var t=this.words,s=this.sigBytes;t[s>>>2]&=4294967295<<32-s%4*8,t.length=e.ceil(s/4)},clone:function(){var e=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var s,n=[],r=function(t){t=t;var s=987654321,n=4294967295;return function(){var r=((s=36969*(65535&s)+(s>>16)&n)<<16)+(t=18e3*(65535&t)+(t>>16)&n)&n;return r/=4294967296,(r+=.5)*(e.random()>.5?1:-1)}},o=0;o>>2]>>>24-r%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,s=[],n=0;n>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new i.init(s,t/2)}},u=a.Latin1={stringify:function(e){for(var t=e.words,s=e.sigBytes,n=[],r=0;r>>2]>>>24-r%4*8&255;n.push(String.fromCharCode(o))}return n.join("")},parse:function(e){for(var t=e.length,s=[],n=0;n>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new i.init(s,t)}},h=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(u.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return u.parse(unescape(encodeURIComponent(e)))}},l=r.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new i.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=h.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var s=this._data,n=s.words,r=s.sigBytes,o=this.blockSize,a=r/(4*o),c=(a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0))*o,u=e.min(4*c,r);if(c){for(var h=0;h>>24)|4278255360&(r<<24|r>>>8)}var o=this._hash.words,i=e[t+0],c=e[t+1],f=e[t+2],p=e[t+3],g=e[t+4],m=e[t+5],y=e[t+6],_=e[t+7],v=e[t+8],w=e[t+9],S=e[t+10],T=e[t+11],k=e[t+12],A=e[t+13],P=e[t+14],I=e[t+15],E=o[0],O=o[1],U=o[2],b=o[3];E=u(E,O,U,b,i,7,a[0]),b=u(b,E,O,U,c,12,a[1]),U=u(U,b,E,O,f,17,a[2]),O=u(O,U,b,E,p,22,a[3]),E=u(E,O,U,b,g,7,a[4]),b=u(b,E,O,U,m,12,a[5]),U=u(U,b,E,O,y,17,a[6]),O=u(O,U,b,E,_,22,a[7]),E=u(E,O,U,b,v,7,a[8]),b=u(b,E,O,U,w,12,a[9]),U=u(U,b,E,O,S,17,a[10]),O=u(O,U,b,E,T,22,a[11]),E=u(E,O,U,b,k,7,a[12]),b=u(b,E,O,U,A,12,a[13]),U=u(U,b,E,O,P,17,a[14]),E=h(E,O=u(O,U,b,E,I,22,a[15]),U,b,c,5,a[16]),b=h(b,E,O,U,y,9,a[17]),U=h(U,b,E,O,T,14,a[18]),O=h(O,U,b,E,i,20,a[19]),E=h(E,O,U,b,m,5,a[20]),b=h(b,E,O,U,S,9,a[21]),U=h(U,b,E,O,I,14,a[22]),O=h(O,U,b,E,g,20,a[23]),E=h(E,O,U,b,w,5,a[24]),b=h(b,E,O,U,P,9,a[25]),U=h(U,b,E,O,p,14,a[26]),O=h(O,U,b,E,v,20,a[27]),E=h(E,O,U,b,A,5,a[28]),b=h(b,E,O,U,f,9,a[29]),U=h(U,b,E,O,_,14,a[30]),E=l(E,O=h(O,U,b,E,k,20,a[31]),U,b,m,4,a[32]),b=l(b,E,O,U,v,11,a[33]),U=l(U,b,E,O,T,16,a[34]),O=l(O,U,b,E,P,23,a[35]),E=l(E,O,U,b,c,4,a[36]),b=l(b,E,O,U,g,11,a[37]),U=l(U,b,E,O,_,16,a[38]),O=l(O,U,b,E,S,23,a[39]),E=l(E,O,U,b,A,4,a[40]),b=l(b,E,O,U,i,11,a[41]),U=l(U,b,E,O,p,16,a[42]),O=l(O,U,b,E,y,23,a[43]),E=l(E,O,U,b,w,4,a[44]),b=l(b,E,O,U,k,11,a[45]),U=l(U,b,E,O,I,16,a[46]),E=d(E,O=l(O,U,b,E,f,23,a[47]),U,b,i,6,a[48]),b=d(b,E,O,U,_,10,a[49]),U=d(U,b,E,O,P,15,a[50]),O=d(O,U,b,E,m,21,a[51]),E=d(E,O,U,b,k,6,a[52]),b=d(b,E,O,U,p,10,a[53]),U=d(U,b,E,O,S,15,a[54]),O=d(O,U,b,E,c,21,a[55]),E=d(E,O,U,b,v,6,a[56]),b=d(b,E,O,U,I,10,a[57]),U=d(U,b,E,O,y,15,a[58]),O=d(O,U,b,E,A,21,a[59]),E=d(E,O,U,b,g,6,a[60]),b=d(b,E,O,U,T,10,a[61]),U=d(U,b,E,O,f,15,a[62]),O=d(O,U,b,E,w,21,a[63]),o[0]=o[0]+E|0,o[1]=o[1]+O|0,o[2]=o[2]+U|0,o[3]=o[3]+b|0},_doFinalize:function(){var t=this._data,s=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;s[r>>>5]|=128<<24-r%32;var o=e.floor(n/4294967296),i=n;s[15+(r+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),s[14+(r+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),t.sigBytes=4*(s.length+1),this._process();for(var a=this._hash,c=a.words,u=0;u<4;u++){var h=c[u];c[u]=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8)}return a},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});function u(e,t,s,n,r,o,i){var a=e+(t&s|~t&n)+r+i;return(a<>>32-o)+t}function h(e,t,s,n,r,o,i){var a=e+(t&n|s&~n)+r+i;return(a<>>32-o)+t}function l(e,t,s,n,r,o,i){var a=e+(t^s^n)+r+i;return(a<>>32-o)+t}function d(e,t,s,n,r,o,i){var a=e+(s^(t|~n))+r+i;return(a<>>32-o)+t}t.MD5=o._createHelper(c),t.HmacMD5=o._createHmacHelper(c)}(Math),s.MD5)})),s((function(e,t){var s,r,o;e.exports=(r=(s=n).lib.Base,o=s.enc.Utf8,void(s.algo.HMAC=r.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=o.parse(t));var s=e.blockSize,n=4*s;t.sigBytes>n&&(t=e.finalize(t)),t.clamp();for(var r=this._oKey=t.clone(),i=this._iKey=t.clone(),a=r.words,c=i.words,u=0;u{t.success&&t.success(e),t.complete&&t.complete(e)},e=>{t.fail&&t.fail(e),t.complete&&t.complete(e)})}}class i extends Error{constructor(e){super(e.message),this.errMsg=e.message||"",Object.defineProperties(this,{code:{get:()=>e.code},requestId:{get:()=>e.requestId},message:{get(){return this.errMsg},set(e){this.errMsg=e}}})}}const{t:a,setLocale:c,getLocale:u}=e({"zh-Hans":{"uniCloud.init.paramRequired":"缺少参数:{param}","uniCloud.uploadFile.fileError":"filePath应为File对象"},"zh-Hant":{"uniCloud.init.paramRequired":"缺少参数:{param}","uniCloud.uploadFile.fileError":"filePath应为File对象"},en:{"uniCloud.init.paramRequired":"{param} required","uniCloud.uploadFile.fileError":"filePath should be instance of File"},fr:{"uniCloud.init.paramRequired":"{param} required","uniCloud.uploadFile.fileError":"filePath should be instance of File"},es:{"uniCloud.init.paramRequired":"{param} required","uniCloud.uploadFile.fileError":"filePath should be instance of File"}},"zh-Hans");let h,l,d;try{h=require("uni-stat-config").default||require("uni-stat-config")}catch(e){h={appid:""}}function f(e=8){let t="";for(;t.length{t(Object.assign(e,{complete(e){e||(e={}),"h5"===process.env.VUE_APP_PLATFORM&&"development"===process.env.NODE_ENV&&e.errMsg&&0===e.errMsg.indexOf("request:fail")&&console.warn("发布H5,需要在uniCloud后台操作,绑定安全域名,否则会因为跨域问题而无法访问。教程参考:https://uniapp.dcloud.io/uniCloud/quickstart?id=useinh5");const t=e.data&&e.data.header&&e.data.header["x-serverless-request-id"]||e.header&&e.header["request-id"];if(!e.statusCode||e.statusCode>=400)return n(new i({code:"SYS_ERR",message:e.errMsg||"request:fail",requestId:t}));const r=e.data;if(r.error)return n(new i({code:r.error.code,message:r.error.message,requestId:t}));r.result=r.data,r.requestId=t,delete r.data,s(r)}}))})}};const y={request:e=>uni.request(e),uploadFile:e=>uni.uploadFile(e),setStorageSync:(e,t)=>uni.setStorageSync(e,t),getStorageSync:e=>uni.getStorageSync(e),removeStorageSync:e=>uni.removeStorageSync(e),clearStorageSync:()=>uni.clearStorageSync()};class _{constructor(e){["spaceId","clientSecret"].forEach(t=>{if(!Object.prototype.hasOwnProperty.call(e,t))throw new Error(a("uniCloud.init.paramRequired",{param:t}))}),this.config=Object.assign({},{endpoint:"https://api.bspapp.com"},e),this.config.provider="aliyun",this.config.requestUrl=this.config.endpoint+"/client",this.config.envType=this.config.envType||"public",this.config.accessTokenKey="access_token_"+this.config.spaceId,this.adapter=y}get hasAccessToken(){return!!this.accessToken}setAccessToken(e){this.accessToken=e}requestWrapped(e){return m.wrappedRequest(e,this.adapter.request)}requestAuth(e){return this.requestWrapped(e)}request(e,t){return Promise.resolve().then(()=>this.hasAccessToken?t?this.requestWrapped(e):this.requestWrapped(e).catch(t=>new Promise((e,s)=>{!t||"GATEWAY_INVALID_TOKEN"!==t.code&&"InvalidParameter.InvalidToken"!==t.code?s(t):e()}).then(()=>this.getAccessToken()).then(()=>{const t=this.rebuildRequest(e);return this.request(t,!0)})):this.getAccessToken().then(()=>{const t=this.rebuildRequest(e);return this.request(t,!0)}))}rebuildRequest(e){const t=Object.assign({},e);return t.data.token=this.accessToken,t.header["x-basement-token"]=this.accessToken,t.header["x-serverless-sign"]=m.sign(t.data,this.config.clientSecret),t}setupRequest(e,t){const s=Object.assign({},e,{spaceId:this.config.spaceId,timestamp:Date.now()}),n={"Content-Type":"application/json"};return"auth"!==t&&(s.token=this.accessToken,n["x-basement-token"]=this.accessToken),n["x-serverless-sign"]=m.sign(s,this.config.clientSecret),{url:this.config.requestUrl,method:"POST",data:s,dataType:"json",header:n}}getAccessToken(){return this.requestAuth(this.setupRequest({method:"serverless.auth.user.anonymousAuthorize",params:"{}"},"auth")).then(e=>new Promise((t,s)=>{e.result&&e.result.accessToken?(this.setAccessToken(e.result.accessToken),t(this.accessToken)):s(new i({code:"AUTH_FAILED",message:"获取accessToken失败"}))}))}authorize(){this.getAccessToken()}callFunction(e){const t={method:"serverless.function.runtime.invoke",params:JSON.stringify({functionTarget:e.name,functionArgs:e.data||{}})};return this.request(this.setupRequest(t))}getOSSUploadOptionsFromPath(e){const t={method:"serverless.file.resource.generateProximalSign",params:JSON.stringify(e)};return this.request(this.setupRequest(t))}uploadFileToOSS({url:e,formData:t,name:s,filePath:n,fileType:r,onUploadProgress:o}){return new Promise((a,c)=>{const u=this.adapter.uploadFile({url:e,formData:t,name:s,filePath:n,fileType:r,header:{"X-OSS-server-side-encrpytion":"AES256"},success(e){e&&e.statusCode<400?a(e):c(new i({code:"UPLOAD_FAILED",message:"文件上传失败"}))},fail(e){c(new i({code:e.code||"UPLOAD_FAILED",message:e.message||e.errMsg||"文件上传失败"}))}});"function"==typeof o&&u&&"function"==typeof u.onProgressUpdate&&u.onProgressUpdate(e=>{o({loaded:e.totalBytesSent,total:e.totalBytesExpectedToSend})})})}reportOSSUpload(e){const t={method:"serverless.file.resource.report",params:JSON.stringify(e)};return this.request(this.setupRequest(t))}uploadFile({filePath:e,cloudPath:t,fileType:s="image",onUploadProgress:n,config:r}){if(!t)throw new i({code:"CLOUDPATH_REQUIRED",message:"cloudPath不可为空"});const o=r&&r.envType||this.config.envType;let a,c;return this.getOSSUploadOptionsFromPath({env:o,filename:t}).then(t=>{const r=t.result;a=r.id,c="https://"+r.cdnDomain+"/"+r.ossPath;const o={url:"https://"+r.host,formData:{"Cache-Control":"max-age=2592000","Content-Disposition":"attachment",OSSAccessKeyId:r.accessKeyId,Signature:r.signature,host:r.host,id:a,key:r.ossPath,policy:r.policy,success_action_status:200},fileName:"file",name:"file",filePath:e,fileType:s};return this.uploadFileToOSS(Object.assign({},o,{onUploadProgress:n}))}).then(()=>this.reportOSSUpload({id:a})).then(t=>new Promise((s,n)=>{t.success?s({success:!0,filePath:e,fileID:c}):n(new i({code:"UPLOAD_FAILED",message:"文件上传失败"}))}))}deleteFile({fileList:e}){const t={method:"serverless.file.resource.delete",params:JSON.stringify({id:e[0]})};return this.request(this.setupRequest(t))}getTempFileURL({fileList:e}={}){return new Promise((t,s)=>{Array.isArray(e)&&0!==e.length||s(new i({code:"INVALID_PARAM",message:"fileList的元素必须是非空的字符串"})),t({fileList:e.map(e=>({fileID:e,tempFileURL:e}))})})}}const v={init(e){const t=new _(e);["deleteFile","getTempFileURL"].forEach(e=>{t[e]=o(t[e]).bind(t)});const s={signInAnonymously:function(){return t.authorize()},getLoginState:function(){return Promise.resolve(!1)}};return t.auth=function(){return s},t.customAuth=t.auth,t}},w="undefined"!=typeof location&&"http:"===location.protocol?"http:":"https:",S="undefined"!=typeof process&&"e2e"===process.env.NODE_ENV&&"pre"===process.env.END_POINT?"//tcb-pre.tencentcloudapi.com/web":"//tcb-api.tencentcloudapi.com/web";var T;!function(e){e.local="local",e.none="none",e.session="session"}(T||(T={}));var k=function(){};s((function(e,t){var s;e.exports=(s=n,function(e){var t=s,n=t.lib,r=n.WordArray,o=n.Hasher,i=t.algo,a=[],c=[];!function(){function t(t){for(var s=e.sqrt(t),n=2;n<=s;n++)if(!(t%n))return!1;return!0}function s(e){return 4294967296*(e-(0|e))|0}for(var n=2,r=0;r<64;)t(n)&&(r<8&&(a[r]=s(e.pow(n,.5))),c[r]=s(e.pow(n,1/3)),r++),n++}();var u=[],h=i.SHA256=o.extend({_doReset:function(){this._hash=new r.init(a.slice(0))},_doProcessBlock:function(e,t){for(var s=this._hash.words,n=s[0],r=s[1],o=s[2],i=s[3],a=s[4],h=s[5],l=s[6],d=s[7],f=0;f<64;f++){if(f<16)u[f]=0|e[t+f];else{var p=u[f-15],g=(p<<25|p>>>7)^(p<<14|p>>>18)^p>>>3,m=u[f-2],y=(m<<15|m>>>17)^(m<<13|m>>>19)^m>>>10;u[f]=g+u[f-7]+y+u[f-16]}var _=n&r^n&o^r&o,v=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),w=d+((a<<26|a>>>6)^(a<<21|a>>>11)^(a<<7|a>>>25))+(a&h^~a&l)+c[f]+u[f];d=l,l=h,h=a,a=i+w|0,i=o,o=r,r=n,n=w+(v+_)|0}s[0]=s[0]+n|0,s[1]=s[1]+r|0,s[2]=s[2]+o|0,s[3]=s[3]+i|0,s[4]=s[4]+a|0,s[5]=s[5]+h|0,s[6]=s[6]+l|0,s[7]=s[7]+d|0},_doFinalize:function(){var t=this._data,s=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;return s[r>>>5]|=128<<24-r%32,s[14+(r+64>>>9<<4)]=e.floor(n/4294967296),s[15+(r+64>>>9<<4)]=n,t.sigBytes=4*s.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=o._createHelper(h),t.HmacSHA256=o._createHmacHelper(h)}(Math),s.SHA256)})),s((function(e,t){e.exports=n.HmacSHA256})),s((function(e,t){var s,r,o;e.exports=(r=(s=o=n).lib.WordArray,s.enc.Base64={stringify:function(e){var t=e.words,s=e.sigBytes,n=this._map;e.clamp();for(var r=[],o=0;o>>2]>>>24-o%4*8&255)<<16|(t[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|t[o+2>>>2]>>>24-(o+2)%4*8&255,a=0;a<4&&o+.75*a>>6*(3-a)&63));var c=n.charAt(64);if(c)for(;r.length%4;)r.push(c);return r.join("")},parse:function(e){var t=e.length,s=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var o=0;o>>6-i%4*2;n[o>>>2]|=(a|c)<<24-o%4*8,o++}return r.create(n,o)}(e,t,n)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},o.enc.Base64)})),s((function(e,t){e.exports=n.enc.Utf8}));const A=()=>{let e;if(!Promise){e=()=>{},e.promise={};const t=()=>{throw new Error('Your Node runtime does support ES6 Promises. Set "global.Promise" to your preferred implementation of promises.')};return Object.defineProperty(e.promise,"then",{get:t}),Object.defineProperty(e.promise,"catch",{get:t}),e}const t=new Promise((t,s)=>{e=(e,n)=>e?s(e):t(n)});return e.promise=t,e};function P(e){return void 0===e}function I(e){return"[object Null]"===Object.prototype.toString.call(e)}var E;function O(e){const t=(s=e,"[object Array]"===Object.prototype.toString.call(s)?e:[e]);var s;for(const e of t){const{isMatch:t,genAdapter:s,runtime:n}=e;if(t())return{adapter:s(),runtime:n}}}!function(e){e.WEB="web",e.WX_MP="wx_mp"}(E||(E={}));const U={adapter:null,runtime:void 0},b=["anonymousUuidKey"];class D extends k{constructor(){super(),U.adapter.root.tcbObject||(U.adapter.root.tcbObject={})}setItem(e,t){U.adapter.root.tcbObject[e]=t}getItem(e){return U.adapter.root.tcbObject[e]}removeItem(e){delete U.adapter.root.tcbObject[e]}clear(){delete U.adapter.root.tcbObject}}function C(e,t){switch(e){case"local":return t.localStorage||new D;case"none":return new D;default:return t.sessionStorage||new D}}class R{constructor(e){if(!this._storage){this._persistence=U.adapter.primaryStorage||e.persistence,this._storage=C(this._persistence,U.adapter);const t="access_token_"+e.env,s="access_token_expire_"+e.env,n="refresh_token_"+e.env,r="anonymous_uuid_"+e.env,o="login_type_"+e.env,i="user_info_"+e.env;this.keys={accessTokenKey:t,accessTokenExpireKey:s,refreshTokenKey:n,anonymousUuidKey:r,loginTypeKey:o,userInfoKey:i}}}updatePersistence(e){if(e===this._persistence)return;const t="local"===this._persistence;this._persistence=e;const s=C(e,U.adapter);for(const e in this.keys){const n=this.keys[e];if(t&&b.includes(e))continue;const r=this._storage.getItem(n);P(r)||I(r)||(s.setItem(n,r),this._storage.removeItem(n))}this._storage=s}setStore(e,t,s){if(!this._storage)return;const n={version:s||"localCachev1",content:t},r=JSON.stringify(n);try{this._storage.setItem(e,r)}catch(e){throw e}}getStore(e,t){try{if(!this._storage)return}catch(e){return""}t=t||"localCachev1";const s=this._storage.getItem(e);if(!s)return"";if(s.indexOf(t)>=0){return JSON.parse(s).content}return""}removeStore(e){this._storage.removeItem(e)}}const x={},q={};function F(e){return x[e]}class L{constructor(e,t){this.data=t||null,this.name=e}}class N extends L{constructor(e,t){super("error",{error:e,data:t}),this.error=e}}const M=new class{constructor(){this._listeners={}}on(e,t){return function(e,t,s){s[e]=s[e]||[],s[e].push(t)}(e,t,this._listeners),this}off(e,t){return function(e,t,s){if(s&&s[e]){const n=s[e].indexOf(t);-1!==n&&s[e].splice(n,1)}}(e,t,this._listeners),this}fire(e,t){if(e instanceof N)return console.error(e.error),this;const s="string"==typeof e?new L(e,t||{}):e;const n=s.name;if(this._listens(n)){s.target=this;const e=this._listeners[n]?[...this._listeners[n]]:[];for(const t of e)t.call(this,s)}return this}_listens(e){return this._listeners[e]&&this._listeners[e].length>0}};function $(e,t){M.on(e,t)}function K(e,t={}){M.fire(e,t)}function B(e,t){M.off(e,t)}const j="loginStateChanged",H="loginStateExpire",W="loginTypeChanged",V="anonymousConverted",z="refreshAccessToken";var Y;!function(e){e.ANONYMOUS="ANONYMOUS",e.WECHAT="WECHAT",e.WECHAT_PUBLIC="WECHAT-PUBLIC",e.WECHAT_OPEN="WECHAT-OPEN",e.CUSTOM="CUSTOM",e.EMAIL="EMAIL",e.USERNAME="USERNAME",e.NULL="NULL"}(Y||(Y={}));const J=["auth.getJwt","auth.logout","auth.signInWithTicket","auth.signInAnonymously","auth.signIn","auth.fetchAccessTokenWithRefreshToken","auth.signUpWithEmailAndPassword","auth.activateEndUserMail","auth.sendPasswordResetEmail","auth.resetPasswordWithToken","auth.isUsernameRegistered"],X={"X-SDK-Version":"1.3.5"};function G(e,t,s){const n=e[t];e[t]=function(t){const r={},o={};s.forEach(s=>{const{data:n,headers:i}=s.call(e,t);Object.assign(r,n),Object.assign(o,i)});const i=t.data;return i&&(()=>{var e;if(e=i,"[object FormData]"!==Object.prototype.toString.call(e))t.data={...i,...r};else for(const e in r)i.append(e,r[e])})(),t.headers={...t.headers||{},...o},n.call(e,t)}}function Q(){const e=Math.random().toString(16).slice(2);return{data:{seqId:e},headers:{...X,"x-seqid":e}}}class Z{constructor(e={}){var t;this.config=e,this._reqClass=new U.adapter.reqClass({timeout:this.config.timeout,timeoutMsg:`请求在${this.config.timeout/1e3}s内未完成,已中断`,restrictedMethods:["post"]}),this._cache=F(this.config.env),this._localCache=(t=this.config.env,q[t]),G(this._reqClass,"post",[Q]),G(this._reqClass,"upload",[Q]),G(this._reqClass,"download",[Q])}async post(e){return await this._reqClass.post(e)}async upload(e){return await this._reqClass.upload(e)}async download(e){return await this._reqClass.download(e)}async refreshAccessToken(){let e,t;this._refreshAccessTokenPromise||(this._refreshAccessTokenPromise=this._refreshAccessToken());try{e=await this._refreshAccessTokenPromise}catch(e){t=e}if(this._refreshAccessTokenPromise=null,this._shouldRefreshAccessTokenHook=null,t)throw t;return e}async _refreshAccessToken(){const{accessTokenKey:e,accessTokenExpireKey:t,refreshTokenKey:s,loginTypeKey:n,anonymousUuidKey:r}=this._cache.keys;this._cache.removeStore(e),this._cache.removeStore(t);let o=this._cache.getStore(s);if(!o)throw new Error("未登录CloudBase");const i={refresh_token:o},a=await this.request("auth.fetchAccessTokenWithRefreshToken",i);if(a.data.code){const{code:e}=a.data;if("SIGN_PARAM_INVALID"===e||"REFRESH_TOKEN_EXPIRED"===e||"INVALID_REFRESH_TOKEN"===e){if(this._cache.getStore(n)===Y.ANONYMOUS&&"INVALID_REFRESH_TOKEN"===e){const e=this._cache.getStore(r),t=this._cache.getStore(s),n=await this.send("auth.signInAnonymously",{anonymous_uuid:e,refresh_token:t});return this.setRefreshToken(n.refresh_token),this._refreshAccessToken()}K(H),this._cache.removeStore(s)}throw new Error("刷新access token失败:"+a.data.code)}if(a.data.access_token)return K(z),this._cache.setStore(e,a.data.access_token),this._cache.setStore(t,a.data.access_token_expire+Date.now()),{accessToken:a.data.access_token,accessTokenExpire:a.data.access_token_expire};a.data.refresh_token&&(this._cache.removeStore(s),this._cache.setStore(s,a.data.refresh_token),this._refreshAccessToken())}async getAccessToken(){const{accessTokenKey:e,accessTokenExpireKey:t,refreshTokenKey:s}=this._cache.keys;if(!this._cache.getStore(s))throw new Error("refresh token不存在,登录状态异常");let n=this._cache.getStore(e),r=this._cache.getStore(t),o=!0;return this._shouldRefreshAccessTokenHook&&!await this._shouldRefreshAccessTokenHook(n,r)&&(o=!1),(!n||!r||r{e.wxOpenId&&e.wxPublicId&&(t=!0)}),{users:s,hasPrimaryUid:t}}setPrimaryUid(e){return this._request.send("auth.setPrimaryUid",{uid:e})}unlink(e){return this._request.send("auth.unlink",{platform:e})}async update(e){const{nickName:t,gender:s,avatarUrl:n,province:r,country:o,city:i}=e,{data:a}=await this._request.send("auth.updateUserInfo",{nickName:t,gender:s,avatarUrl:n,province:r,country:o,city:i});this.setLocalUserInfo(a)}async refresh(){const{data:e}=await this._request.send("auth.getUserInfo",{});return this.setLocalUserInfo(e),e}setUserInfo(){const{userInfoKey:e}=this._cache.keys,t=this._cache.getStore(e);["uid","loginType","openid","wxOpenId","wxPublicId","unionId","qqMiniOpenId","email","hasPassword","customUserId","nickName","gender","avatarUrl"].forEach(e=>{this[e]=t[e]}),this.location={country:t.country,province:t.province,city:t.city}}setLocalUserInfo(e){const{userInfoKey:t}=this._cache.keys;this._cache.setStore(t,e),this.setUserInfo()}}class re{constructor(e){if(!e)throw new Error("envId is not defined");this._cache=F(e);const{refreshTokenKey:t,accessTokenKey:s,accessTokenExpireKey:n}=this._cache.keys,r=this._cache.getStore(t),o=this._cache.getStore(s),i=this._cache.getStore(n);this.credential={refreshToken:r,accessToken:o,accessTokenExpire:i},this.user=new ne(e)}get isAnonymousAuth(){return this.loginType===Y.ANONYMOUS}get isCustomAuth(){return this.loginType===Y.CUSTOM}get isWeixinAuth(){return this.loginType===Y.WECHAT||this.loginType===Y.WECHAT_OPEN||this.loginType===Y.WECHAT_PUBLIC}get loginType(){return this._cache.getStore(this._cache.keys.loginTypeKey)}}class oe extends se{async signIn(){this._cache.updatePersistence("local");const{anonymousUuidKey:e,refreshTokenKey:t}=this._cache.keys,s=this._cache.getStore(e)||void 0,n=this._cache.getStore(t)||void 0,r=await this._request.send("auth.signInAnonymously",{anonymous_uuid:s,refresh_token:n});if(r.uuid&&r.refresh_token){this._setAnonymousUUID(r.uuid),this.setRefreshToken(r.refresh_token),await this._request.refreshAccessToken(),K(j),K(W,{env:this.config.env,loginType:Y.ANONYMOUS,persistence:"local"});const e=new re(this.config.env);return await e.user.refresh(),e}throw new Error("匿名登录失败")}async linkAndRetrieveDataWithTicket(e){const{anonymousUuidKey:t,refreshTokenKey:s}=this._cache.keys,n=this._cache.getStore(t),r=this._cache.getStore(s),o=await this._request.send("auth.linkAndRetrieveDataWithTicket",{anonymous_uuid:n,refresh_token:r,ticket:e});if(o.refresh_token)return this._clearAnonymousUUID(),this.setRefreshToken(o.refresh_token),await this._request.refreshAccessToken(),K(V,{env:this.config.env}),K(W,{loginType:Y.CUSTOM,persistence:"local"}),{credential:{refreshToken:o.refresh_token}};throw new Error("匿名转化失败")}_setAnonymousUUID(e){const{anonymousUuidKey:t,loginTypeKey:s}=this._cache.keys;this._cache.removeStore(t),this._cache.setStore(t,e),this._cache.setStore(s,Y.ANONYMOUS)}_clearAnonymousUUID(){this._cache.removeStore(this._cache.keys.anonymousUuidKey)}}class ie extends se{async signIn(e){if("string"!=typeof e)throw new Error("ticket must be a string");const{refreshTokenKey:t}=this._cache.keys,s=await this._request.send("auth.signInWithTicket",{ticket:e,refresh_token:this._cache.getStore(t)||""});if(s.refresh_token)return this.setRefreshToken(s.refresh_token),await this._request.refreshAccessToken(),K(j),K(W,{env:this.config.env,loginType:Y.CUSTOM,persistence:this.config.persistence}),await this.refreshUserInfo(),new re(this.config.env);throw new Error("自定义登录失败")}}class ae extends se{async signIn(e,t){if("string"!=typeof e)throw new Error("email must be a string");const{refreshTokenKey:s}=this._cache.keys,n=await this._request.send("auth.signIn",{loginType:"EMAIL",email:e,password:t,refresh_token:this._cache.getStore(s)||""}),{refresh_token:r,access_token:o,access_token_expire:i}=n;if(r)return this.setRefreshToken(r),o&&i?this.setAccessToken(o,i):await this._request.refreshAccessToken(),await this.refreshUserInfo(),K(j),K(W,{env:this.config.env,loginType:Y.EMAIL,persistence:this.config.persistence}),new re(this.config.env);throw n.code?new Error(`邮箱登录失败: [${n.code}] ${n.message}`):new Error("邮箱登录失败")}async activate(e){return this._request.send("auth.activateEndUserMail",{token:e})}async resetPasswordWithToken(e,t){return this._request.send("auth.resetPasswordWithToken",{token:e,newPassword:t})}}class ce extends se{async signIn(e,t){if("string"!=typeof e)throw new Error("username must be a string");"string"!=typeof t&&(t="",console.warn("password is empty"));const{refreshTokenKey:s}=this._cache.keys,n=await this._request.send("auth.signIn",{loginType:Y.USERNAME,username:e,password:t,refresh_token:this._cache.getStore(s)||""}),{refresh_token:r,access_token_expire:o,access_token:i}=n;if(r)return this.setRefreshToken(r),i&&o?this.setAccessToken(i,o):await this._request.refreshAccessToken(),await this.refreshUserInfo(),K(j),K(W,{env:this.config.env,loginType:Y.USERNAME,persistence:this.config.persistence}),new re(this.config.env);throw n.code?new Error(`用户名密码登录失败: [${n.code}] ${n.message}`):new Error("用户名密码登录失败")}}class ue{constructor(e){this.config=e,this._cache=F(e.env),this._request=te(e.env),this._onAnonymousConverted=this._onAnonymousConverted.bind(this),this._onLoginTypeChanged=this._onLoginTypeChanged.bind(this),$(W,this._onLoginTypeChanged)}get currentUser(){const e=this.hasLoginState();return e&&e.user||null}get loginType(){return this._cache.getStore(this._cache.keys.loginTypeKey)}anonymousAuthProvider(){return new oe(this.config)}customAuthProvider(){return new ie(this.config)}emailAuthProvider(){return new ae(this.config)}usernameAuthProvider(){return new ce(this.config)}async signInAnonymously(){return new oe(this.config).signIn()}async signInWithEmailAndPassword(e,t){return new ae(this.config).signIn(e,t)}signInWithUsernameAndPassword(e,t){return new ce(this.config).signIn(e,t)}async linkAndRetrieveDataWithTicket(e){this._anonymousAuthProvider||(this._anonymousAuthProvider=new oe(this.config)),$(V,this._onAnonymousConverted);return await this._anonymousAuthProvider.linkAndRetrieveDataWithTicket(e)}async signOut(){if(this.loginType===Y.ANONYMOUS)throw new Error("匿名用户不支持登出操作");const{refreshTokenKey:e,accessTokenKey:t,accessTokenExpireKey:s}=this._cache.keys,n=this._cache.getStore(e);if(!n)return;const r=await this._request.send("auth.logout",{refresh_token:n});return this._cache.removeStore(e),this._cache.removeStore(t),this._cache.removeStore(s),K(j),K(W,{env:this.config.env,loginType:Y.NULL,persistence:this.config.persistence}),r}async signUpWithEmailAndPassword(e,t){return this._request.send("auth.signUpWithEmailAndPassword",{email:e,password:t})}async sendPasswordResetEmail(e){return this._request.send("auth.sendPasswordResetEmail",{email:e})}onLoginStateChanged(e){$(j,()=>{const t=this.hasLoginState();e.call(this,t)});const t=this.hasLoginState();e.call(this,t)}onLoginStateExpired(e){$(H,e.bind(this))}onAccessTokenRefreshed(e){$(z,e.bind(this))}onAnonymousConverted(e){$(V,e.bind(this))}onLoginTypeChanged(e){$(W,()=>{const t=this.hasLoginState();e.call(this,t)})}async getAccessToken(){return{accessToken:(await this._request.getAccessToken()).accessToken,env:this.config.env}}hasLoginState(){const{refreshTokenKey:e}=this._cache.keys;return this._cache.getStore(e)?new re(this.config.env):null}async isUsernameRegistered(e){if("string"!=typeof e)throw new Error("username must be a string");const{data:t}=await this._request.send("auth.isUsernameRegistered",{username:e});return t&&t.isRegistered}getLoginState(){return Promise.resolve(this.hasLoginState())}async signInWithTicket(e){return new ie(this.config).signIn(e)}shouldRefreshAccessToken(e){this._request._shouldRefreshAccessTokenHook=e.bind(this)}getUserInfo(){return this._request.send("auth.getUserInfo",{}).then(e=>e.code?e:{...e.data,requestId:e.seqId})}getAuthHeader(){const{refreshTokenKey:e,accessTokenKey:t}=this._cache.keys,s=this._cache.getStore(e);return{"x-cloudbase-credentials":this._cache.getStore(t)+"/@@/"+s}}_onAnonymousConverted(e){const{env:t}=e.data;t===this.config.env&&this._cache.updatePersistence(this.config.persistence)}_onLoginTypeChanged(e){const{loginType:t,persistence:s,env:n}=e.data;n===this.config.env&&(this._cache.updatePersistence(s),this._cache.setStore(this._cache.keys.loginTypeKey,t))}}const he=function(e,t){t=t||A();const s=te(this.config.env),{cloudPath:n,filePath:r,onUploadProgress:o,fileType:i="image"}=e;return s.send("storage.getUploadMetadata",{path:n}).then(e=>{const{data:{url:a,authorization:c,token:u,fileId:h,cosFileId:l},requestId:d}=e,f={key:n,signature:c,"x-cos-meta-fileid":l,success_action_status:"201","x-cos-security-token":u};s.upload({url:a,data:f,file:r,name:n,fileType:i,onUploadProgress:o}).then(e=>{201===e.statusCode?t(null,{fileID:h,requestId:d}):t(new Error("STORAGE_REQUEST_FAIL: "+e.data))}).catch(e=>{t(e)})}).catch(e=>{t(e)}),t.promise},le=function(e,t){t=t||A();const s=te(this.config.env),{cloudPath:n}=e;return s.send("storage.getUploadMetadata",{path:n}).then(e=>{t(null,e)}).catch(e=>{t(e)}),t.promise},de=function({fileList:e},t){if(t=t||A(),!e||!Array.isArray(e))return{code:"INVALID_PARAM",message:"fileList必须是非空的数组"};for(let t of e)if(!t||"string"!=typeof t)return{code:"INVALID_PARAM",message:"fileList的元素必须是非空的字符串"};const s={fileid_list:e};return te(this.config.env).send("storage.batchDeleteFile",s).then(e=>{e.code?t(null,e):t(null,{fileList:e.data.delete_list,requestId:e.requestId})}).catch(e=>{t(e)}),t.promise},fe=function({fileList:e},t){t=t||A(),e&&Array.isArray(e)||t(null,{code:"INVALID_PARAM",message:"fileList必须是非空的数组"});let s=[];for(let n of e)"object"==typeof n?(n.hasOwnProperty("fileID")&&n.hasOwnProperty("maxAge")||t(null,{code:"INVALID_PARAM",message:"fileList的元素必须是包含fileID和maxAge的对象"}),s.push({fileid:n.fileID,max_age:n.maxAge})):"string"==typeof n?s.push({fileid:n}):t(null,{code:"INVALID_PARAM",message:"fileList的元素必须是字符串"});const n={file_list:s};return te(this.config.env).send("storage.batchGetDownloadUrl",n).then(e=>{e.code?t(null,e):t(null,{fileList:e.data.download_list,requestId:e.requestId})}).catch(e=>{t(e)}),t.promise},pe=async function({fileID:e},t){const s=(await fe.call(this,{fileList:[{fileID:e,maxAge:600}]})).fileList[0];if("SUCCESS"!==s.code)return t?t(s):new Promise(e=>{e(s)});const n=te(this.config.env);let r=s.download_url;if(r=encodeURI(r),!t)return n.download({url:r});t(await n.download({url:r}))},ge=function({name:e,data:t,query:s,parse:n,search:r},o){const i=o||A();let a;try{a=t?JSON.stringify(t):""}catch(e){return Promise.reject(e)}if(!e)return Promise.reject(new Error("函数名不能为空"));const c={inQuery:s,parse:n,search:r,function_name:e,request_data:a};return te(this.config.env).send("functions.invokeFunction",c).then(e=>{if(e.code)i(null,e);else{let t=e.data.response_data;if(n)i(null,{result:t,requestId:e.requestId});else try{t=JSON.parse(e.data.response_data),i(null,{result:t,requestId:e.requestId})}catch(e){i(new Error("response data must be json"))}}return i.promise}).catch(e=>{i(e)}),i.promise},me={timeout:15e3,persistence:"session"},ye={};class _e{constructor(e){this.config=e||this.config,this.authObj=void 0}init(e){switch(U.adapter||(this.requestClient=new U.adapter.reqClass({timeout:e.timeout||5e3,timeoutMsg:`请求在${(e.timeout||5e3)/1e3}s内未完成,已中断`})),this.config={...me,...e},!0){case this.config.timeout>6e5:console.warn("timeout大于可配置上限[10分钟],已重置为上限数值"),this.config.timeout=6e5;break;case this.config.timeout<100:console.warn("timeout小于可配置下限[100ms],已重置为下限数值"),this.config.timeout=100}return new _e(this.config)}auth({persistence:e}={}){if(this.authObj)return this.authObj;const t=e||U.adapter.primaryStorage||me.persistence;var s;return t!==this.config.persistence&&(this.config.persistence=t),function(e){const{env:t}=e;x[t]=new R(e),q[t]=new R({...e,persistence:"local"})}(this.config),s=this.config,ee[s.env]=new Z(s),this.authObj=new ue(this.config),this.authObj}on(e,t){return $.apply(this,[e,t])}off(e,t){return B.apply(this,[e,t])}callFunction(e,t){return ge.apply(this,[e,t])}deleteFile(e,t){return de.apply(this,[e,t])}getTempFileURL(e,t){return fe.apply(this,[e,t])}downloadFile(e,t){return pe.apply(this,[e,t])}uploadFile(e,t){return he.apply(this,[e,t])}getUploadMetadata(e,t){return le.apply(this,[e,t])}registerExtension(e){ye[e.name]=e}async invokeExtension(e,t){const s=ye[e];if(!s)throw Error(`扩展${e} 必须先注册`);return await s.invoke(t,this)}useAdapters(e){const{adapter:t,runtime:s}=O(e)||{};t&&(U.adapter=t),s&&(U.runtime=s)}}const ve=new _e;function we(e,t,s){void 0===s&&(s={});var n=/\?/.test(t),r="";for(var o in s)""===r?!n&&(t+="?"):r+="&",r+=o+"="+encodeURIComponent(s[o]);return/^http(s)?:\/\//.test(t+=r)?t:""+e+t}class Se{post(e){const{url:t,data:s,headers:n}=e;return new Promise((e,r)=>{y.request({url:we("https:",t),data:s,method:"POST",header:n,success(t){e(t)},fail(e){r(e)}})})}upload(e){return new Promise((t,s)=>{const{url:n,file:r,data:o,headers:i,fileType:a}=e,c=y.uploadFile({url:we("https:",n),name:"file",formData:Object.assign({},o),filePath:r,fileType:a,header:i,success(e){const s={statusCode:e.statusCode,data:e.data||{}};200===e.statusCode&&o.success_action_status&&(s.statusCode=parseInt(o.success_action_status,10)),t(s)},fail(e){"mp-alipay"===process.env.VUE_APP_PLATFORM&&"development"===process.env.NODE_ENV&&console.warn("支付宝小程序开发工具上传腾讯云时无法准确判断是否上传成功,请使用真机测试"),s(new Error(e.errMsg||"uploadFile:fail"))}});"function"==typeof e.onUploadProgress&&c&&"function"==typeof c.onProgressUpdate&&c.onProgressUpdate(t=>{e.onUploadProgress({loaded:t.totalBytesSent,total:t.totalBytesExpectedToSend})})})}}const Te={setItem(e,t){y.setStorageSync(e,t)},getItem:e=>y.getStorageSync(e),removeItem(e){y.removeStorageSync(e)},clear(){y.clearStorageSync()}};const ke={genAdapter:function(){return{root:{},reqClass:Se,localStorage:Te,primaryStorage:"local"}},isMatch:function(){return!0},runtime:"uni_app"};ve.useAdapters(ke);const Ae=ve,Pe=Ae.init;Ae.init=function(e){e.env=e.spaceId;const t=Pe.call(this,e);t.config.provider="tencent",t.config.spaceId=e.spaceId;const s=t.auth;t.auth=function(e){const t=s.call(this,e);return["linkAndRetrieveDataWithTicket","signInAnonymously","signOut","getAccessToken","getLoginState","signInWithTicket","getUserInfo"].forEach(e=>{t[e]=o(t[e]).bind(t)}),t},t.customAuth=t.auth;return["deleteFile","getTempFileURL","downloadFile"].forEach(e=>{t[e]=o(t[e]).bind(t)}),t};class Ie extends _{getAccessToken(){return new Promise((e,t)=>{this.setAccessToken("Anonymous_Access_token"),e("Anonymous_Access_token")})}uploadFileToOSS({url:e,formData:t,name:s,filePath:n,fileType:r,onUploadProgress:o}){return new Promise((a,c)=>{const u=this.adapter.uploadFile({url:e,formData:t,name:s,filePath:n,fileType:r,success(e){e&&e.statusCode<400?a(e):c(new i({code:"UPLOAD_FAILED",message:"文件上传失败"}))},fail(e){c(new i({code:e.code||"UPLOAD_FAILED",message:e.message||e.errMsg||"文件上传失败"}))}});"function"==typeof o&&u&&"function"==typeof u.onProgressUpdate&&u.onProgressUpdate(e=>{o({loaded:e.totalBytesSent,total:e.totalBytesExpectedToSend})})})}uploadFile({filePath:e,cloudPath:t,fileType:s="image",onUploadProgress:n}){if(!t)throw new i({code:"CLOUDPATH_REQUIRED",message:"cloudPath不可为空"});let r;return this.getOSSUploadOptionsFromPath({filename:t}).then(t=>{const{url:o,formData:i,name:a,fileUrl:c}=t.result;r=c;const u={url:o,formData:i,name:a,filePath:e,fileType:s};return this.uploadFileToOSS(Object.assign({},u,{onUploadProgress:n}))}).then(()=>this.reportOSSUpload({id:t})).then(t=>new Promise((s,n)=>{t.success?s({success:!0,filePath:e,fileID:r}):n(new i({code:"UPLOAD_FAILED",message:"文件上传失败"}))}))}}const Ee={init(e){const t=new Ie(e);["deleteFile","getTempFileURL"].forEach(e=>{t[e]=o(t[e]).bind(t)});const s={signInAnonymously:function(){return t.authorize()},getLoginState:function(){return Promise.resolve(!1)}};return t.auth=function(){return s},t.customAuth=t.auth,t}};let Oe,Ue;function be({name:e,data:t,spaceId:s,provider:n}){Oe||(Oe=function(){const{deviceId:e}=uni.getSystemInfoSync();return{PLATFORM:process.env.VUE_APP_PLATFORM,OS:d,APPID:h.appid,LOCALE:u(),DEVICEID:e,CLIENT_SDK_VERSION:"1.0.1"}}(),Ue={ak:h.appid,p:"android"===d?"a":"i",ut:g(),uuid:p()});const r=JSON.parse(JSON.stringify(t||{})),o=e,i=s,a={tencent:"t",aliyun:"a"}[n];{const e=Object.assign({},Ue,{fn:o,sid:i,pvd:a});Object.assign(r,{clientInfo:Oe,uniCloudClientInfo:encodeURIComponent(JSON.stringify(e))});const{deviceId:t}=uni.getSystemInfoSync();r.uniCloudDeviceId=t}if(!r.uniIdToken){const e=y.getStorageSync("uni_id_token")||y.getStorageSync("uniIdToken");e&&(r.uniIdToken=e)}return r}function De({name:e,data:t}){const{localAddress:s,localPort:n}=this,r={aliyun:"aliyun",tencent:"tcb"}[this.config.provider],o=this.config.spaceId,a=`http://${s}:${n}/system/check-function`,c=`http://${s}:${n}/cloudfunctions/${e}`;return new Promise((t,s)=>{y.request({method:"POST",url:a,data:{name:e,platform:process.env.VUE_APP_PLATFORM,provider:r,spaceId:o},timeout:3e3,success(e){t(e)},fail(){t({data:{code:"NETWORK_ERROR",message:"连接本地调试服务失败,请检查客户端是否和主机在同一局域网下,自动切换为已部署的云函数。"}})}})}).then(({data:e}={})=>{const{code:t,message:s}=e||{};return{code:0===t?0:t||"SYS_ERR",message:s||"SYS_ERR"}}).then(({code:s,message:n})=>{if(0!==s){switch(s){case"MODULE_ENCRYPTED":console.error(`此云函数(${e})依赖加密公共模块不可本地调试,自动切换为云端已部署的云函数`);break;case"FUNCTION_ENCRYPTED":console.error(`此云函数(${e})已加密不可本地调试,自动切换为云端已部署的云函数`);break;case"ACTION_ENCRYPTED":console.error(n||"需要访问加密的uni-clientDB-action,自动切换为云端环境");break;case"NETWORK_ERROR":{const e="连接本地调试服务失败,请检查客户端是否和主机在同一局域网下";throw console.error(e),new Error(e)}case"SWITCH_TO_CLOUD":break;default:{const e=`检测本地调试服务出现错误:${n},请检查网络环境或重启客户端再试`;throw console.error(e),new Error(e)}}return this.originCallFunction({name:e,data:t})}return new Promise((s,n)=>{const a=be({name:e,data:t,provider:this.config.provider,spaceId:o});y.request({method:"POST",url:c,data:{provider:r,platform:process.env.VUE_APP_PLATFORM,param:a},success:({statusCode:e,data:t}={})=>!e||e>=400?n(new i({code:t.code||"SYS_ERR",message:t.message||"request:fail"})):s({result:t}),fail(e){n(new i({code:e.code||e.errCode||"SYS_ERR",message:e.message||e.errMsg||"request:fail"}))}})})})}const Ce=[{rule:/fc_function_not_found|FUNCTION_NOT_FOUND/,content:",云函数[{functionName}]在云端不存在,请检查此云函数名称是否正确已经是否已上传到服务空间",mode:"append"}];var Re=/[\\^$.*+?()[\]{}|]/g,xe=RegExp(Re.source);function qe(e,t,s){return e.replace(new RegExp((n=t)&&xe.test(n)?n.replace(Re,"\\$&"):n,"g"),s);var n}function Fe(e){const t=e.callFunction;e.callFunction=function(e){let s;s=this.isReady?Promise.resolve():this.initUniCloud;const n=e.name;return s.then(()=>{e.data=be({name:n,data:e.data,provider:this.config.provider,spaceId:this.config.spaceId});const s={aliyun:"aliyun",tencent:"tcb"}[this.config.provider];return new Promise((r,o)=>{t.call(this,e).then(e=>{if(this.config.useDebugFunction&&e&&e.requestId){const t=JSON.stringify({spaceId:this.config.spaceId,functionName:n,requestId:e.requestId});console.log(`[${s}-request]${t}[/${s}-request]`)}r(e)}).catch(t=>{if(this.config.useDebugFunction&&t&&t.requestId){const e=JSON.stringify({spaceId:this.config.spaceId,functionName:n,requestId:t.requestId});console.log(`[${s}-request]${e}[/${s}-request]`)}t&&t.message&&(t.message=function({message:e="",extraInfo:t={},formatter:s=[]}={}){for(let n=0;n"development"===process.env.NODE_ENV&&e.debugInfo&&!e.debugInfo.forceRemote&&process.env.UNI_CLOUD_PROVIDER?De.call(this,t):s.call(this,t))})).call(this,t)}}const Le=Symbol("CLIENT_DB_INTERNAL");function Ne(e,t){return e.then="DoNotReturnProxyWithAFunctionNamedThen",e._internalType=Le,new Proxy(e,{get:(e,s,n)=>function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}(e,s)||e[s]||"string"!=typeof s?e[s]:t.get(e,s,n)})}class Me extends Error{constructor(e,t){super(e),this.code=t}}function $e(e){switch(t=e,Object.prototype.toString.call(t).slice(8,-1).toLowerCase()){case"array":return e.map(e=>$e(e));case"object":return e._internalType===Le||Object.keys(e).forEach(t=>{e[t]=$e(e[t])}),e;case"regexp":return{$regexp:{source:e.source,flags:e.flags}};case"date":return{$date:e.toISOString()};default:return e}var t}function Ke(){const e=y.getStorageSync("uni_id_token")||"",t=e.split(".");if(!e||3!==t.length)return{uid:null,role:[],permission:[]};let s;try{s=JSON.parse((n=t[1],decodeURIComponent(atob(n).split("").map((function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)})).join(""))))}catch(e){throw new Error("获取当前用户信息出错,详细错误信息为:"+e.message)}var n;return s}var Be=t(s((function(e,t){Object.defineProperty(t,"__esModule",{value:!0});const s="chooseAndUploadFile:fail";function n(e,t){return e.tempFiles.forEach((e,s)=>{e.name||(e.name=e.path.substring(e.path.lastIndexOf("/")+1)),t&&(e.fileType=t),e.cloudPath=Date.now()+"_"+s+e.name.substring(e.name.lastIndexOf("."))}),e.tempFilePaths||(e.tempFilePaths=e.tempFiles.map(e=>e.path)),e}function r(e,t,{onChooseFile:s,onUploadProgress:n}){return t.then(e=>{if(s){const t=s(e);if(void 0!==t)return Promise.resolve(t).then(t=>void 0===t?e:t)}return e}).then(t=>!1===t?{errMsg:"chooseAndUploadFile:ok",tempFilePaths:[],tempFiles:[]}:function(e,t,s=5,n){(t=Object.assign({},t)).errMsg="chooseAndUploadFile:ok";const r=t.tempFiles,o=r.length;let i=0;return new Promise(a=>{for(;i=o)return void(!r.find(e=>!e.url&&!e.errMsg)&&a(t));const u=r[s];e.uploadFile({filePath:u.path,cloudPath:u.cloudPath,fileType:u.fileType,onUploadProgress(e){e.index=s,e.tempFile=u,e.tempFilePath=u.path,n&&n(e)}}).then(e=>{u.url=e.fileID,s{u.errMsg=e.errMsg||e.message,s{uni.chooseImage({count:t,sizeType:r,sourceType:o,extension:i,success(t){e(n(t,"image"))},fail(e){a({errMsg:e.errMsg.replace("chooseImage:fail",s)})}})})}(t),t):"video"===t.type?r(e,function(e){const{camera:t,compressed:r,maxDuration:o,sourceType:i,extension:a}=e;return new Promise((e,c)=>{uni.chooseVideo({camera:t,compressed:r,maxDuration:o,sourceType:i,extension:a,success(t){const{tempFilePath:s,duration:r,size:o,height:i,width:a}=t;e(n({errMsg:"chooseVideo:ok",tempFilePaths:[s],tempFiles:[{name:t.tempFile&&t.tempFile.name||"",path:s,size:o,type:t.tempFile&&t.tempFile.type||"",width:a,height:i,duration:r,fileType:"video",cloudPath:""}]},"video"))},fail(e){c({errMsg:e.errMsg.replace("chooseVideo:fail",s)})}})})}(t),t):r(e,function(e){const{count:t,extension:r}=e;return new Promise((e,o)=>{let i=uni.chooseFile;if("undefined"!=typeof wx&&"function"==typeof wx.chooseMessageFile&&(i=wx.chooseMessageFile),"function"!=typeof i)return o({errMsg:s+" 请指定 type 类型,该平台仅支持选择 image 或 video。"});i({type:"all",count:t,extension:r,success(t){e(n(t))},fail(e){o({errMsg:e.errMsg.replace("chooseFile:fail",s)})}})})}(t),t)}}})));const je="manual";async function He(e,t){const s=`http://${e}:${t}/system/ping`;try{const e=await(n={url:s,timeout:500},new Promise((e,t)=>{y.request({...n,success(t){e(t)},fail(e){t(e)}})}));return!(!e.data||0!==e.data.code)}catch(e){return!1}var n}let We=new class{init(e){let t={};const s=!1!==e.debugFunction&&"development"===process.env.NODE_ENV&&("h5"===process.env.VUE_APP_PLATFORM&&navigator.userAgent.indexOf("HBuilderX")>0||"app-plus"===process.env.VUE_APP_PLATFORM);switch(e.provider){case"tencent":t=Ae.init(Object.assign(e,{useDebugFunction:s}));break;case"aliyun":t=v.init(Object.assign(e,{useDebugFunction:s}));break;case"private":t=Ee.init(Object.assign(e,{useDebugFunction:s}));break;default:throw new Error("未提供正确的provider参数")}const n=process.env.UNICLOUD_DEBUG;"development"===process.env.NODE_ENV&&n&&!n.code&&(t.debugInfo=n),t.isReady=!1;const r=t.auth();return t.initUniCloud=r.getLoginState().then(e=>e?Promise.resolve():r.signInAnonymously()).then(()=>{if("development"===process.env.NODE_ENV&&t.debugInfo){const{address:e,servePort:s}=t.debugInfo;return async function(e,t){let s;for(let n=0;n{if(e)t.localAddress=e,t.localPort=s;else if(t.debugInfo){const e="app-plus"===process.env.VUE_APP_PLATFORM?"error":"warn",s=console[e];"remote"===t.debugInfo.initialLaunchType?(t.debugInfo.forceRemote=!0,s("当前客户端和HBuilderX不在同一局域网下(或其他网络原因无法连接HBuilderX),uniCloud本地调试服务不对当前客户端生效。\n- 如果不使用uniCloud本地调试服务,请直接忽略此信息。\n- 如需使用uniCloud本地调试服务,请将客户端与主机连接到同一局域网下并重新运行到客户端。\n- 如果在HBuilderX开启的状态下切换过网络环境,请重启HBuilderX后再试")):s("无法连接uniCloud本地调试服务,请检查当前客户端是否与主机在同一局域网下。\n- 如需使用uniCloud本地调试服务,请将客户端与主机连接到同一局域网下并重新运行到客户端。\n- 如果在HBuilderX开启的状态下切换过网络环境,请重启HBuilderX后再试")}}).then(()=>(function(){if("h5"!==process.env.VUE_APP_PLATFORM||"development"!==process.env.NODE_ENV)return;if(uni.getStorageSync("__LAST_DCLOUD_APPID")===h.appid)return;uni.setStorageSync("__LAST_DCLOUD_APPID",h.appid),uni.removeStorageSync("uni_id_token")&&(console.warn("检测到当前项目与上次运行到此端口的项目不一致,自动清理uni-id保存的token信息(仅开发调试时生效)"),uni.removeStorageSync("uni_id_token"),uni.removeStorageSync("uni_id_token_expired"))}(),new Promise(e=>{"quickapp-native"===process.env.VUE_APP_PLATFORM?(d="android",uni.getStorage({key:"__DC_CLOUD_UUID",success(t){l=t.data?t.data:f(32),e()}})):setTimeout(()=>{d=uni.getSystemInfoSync().platform,l=uni.getStorageSync("__DC_CLOUD_UUID")||f(32),e()},0)}))).then(()=>{t.isReady=!0}),Fe(t),function(e){const t=e.uploadFile;e.uploadFile=function(e){let s;return s=this.isReady?Promise.resolve():this.initUniCloud,s.then(()=>t.call(this,e))};const s=e.uploadFile;e.uploadFile=function(e){return o(s).call(this,e)}}(t),function(e){e.database=function(){if(this._database)return this._database;const t={},s={};class n{constructor(e,t,s){this.content=e,this.prevStage=t,this.actionName=s}toJSON(){let e=this;const t=[e.content];for(;e.prevStage;)e=e.prevStage,t.push(e.content);return{$db:t.reverse().map(e=>({$method:e.$method,$param:e.$param}))}}get useAggregate(){let e=this,t=!1;for(;e.prevStage;){e=e.prevStage;const s=e.content.$method;if("aggregate"===s||"pipeline"===s){t=!0;break}}return t}get count(){if(!this.useAggregate)return function(){return this._send("count",Array.from(arguments))};const e=this;return function(){return i({$method:"count",$param:$e(Array.from(arguments))},e,e.actionName)}}get(){return this._send("get",Array.from(arguments))}add(){return this._send("add",Array.from(arguments))}remove(){return this._send("remove",Array.from(arguments))}update(){return this._send("update",Array.from(arguments))}end(){return this._send("end",Array.from(arguments))}set(){throw new Error("clientDB禁止使用set方法")}_send(n,r){const o=this.toJSON();return o.$db.push({$method:n,$param:r}),e.callFunction({name:"DCloud-clientDB",data:{action:this.actionName,command:o}}).then(e=>{const{code:n,message:r,token:o,tokenExpired:i,systemInfo:a=[]}=e.result;if(a)for(let e=0;e{e({token:o,tokenExpired:i})}),o&&i&&s.refreshToken&&s.refreshToken.forEach(e=>{e({token:o,tokenExpired:i})}),Promise.resolve(e))}).catch(e=>{const t=new Me(e.message,e.code||"SYSTEM_ERROR");return s.error&&s.error.forEach(e=>{e(t)}),/fc_function_not_found|FUNCTION_NOT_FOUND/g.test(e.message)&&console.warn("clientDB未初始化,请在web控制台保存一次schema以开启clientDB"),Promise.reject(e)})}}const r=["db.Geo","db.command","command.aggregate"];function o(e,t){return r.indexOf(`${e}.${t}`)>-1}function i(e,t,s){return Ne(new n(e,t,s),{get(e,t){let n="db";return e&&e.content&&(n=e.content.$method),o(n,t)?i({$method:t},e,s):function(){return i({$method:t,$param:$e(Array.from(arguments))},e,s)}}})}function a({path:e,method:t}){return class{constructor(){this.param=Array.from(arguments)}toJSON(){return{$newDb:[...e.map(e=>({$method:e})),{$method:t,$param:this.param}]}}}}const c={auth:{on:(e,s)=>{t[e]=t[e]||[],t[e].indexOf(s)>-1||t[e].push(s)},off:(e,s)=>{t[e]=t[e]||[];const n=t[e].indexOf(s);-1!==n&&t[e].splice(n,1)}},on:(e,t)=>{s[e]=s[e]||[],s[e].indexOf(t)>-1||s[e].push(t)},off:(e,t)=>{s[e]=s[e]||[];const n=s[e].indexOf(t);-1!==n&&s[e].splice(n,1)},env:Ne({},{get:(e,t)=>({$env:t})}),action:e=>Ne({},{get:(t,s)=>o("db",s)?i({$method:s},null,e):function(){return i({$method:s,$param:$e(Array.from(arguments))},null,e)}}),Geo:Ne({},{get:(e,t)=>a({path:["Geo"],method:t})}),getCloudEnv:function(e){if("string"!=typeof e||!e.trim())throw new Error("getCloudEnv参数错误");return{$env:e.replace("$cloudEnv_","")}},get serverDate(){return a({path:[],method:"serverDate"})},get RegExp(){return a({path:[],method:"RegExp"})}},u=Ne(c,{get:(e,t)=>o("db",t)?i({$method:t}):function(){return i({$method:t,$param:$e(Array.from(arguments))})}});return this._database=u,u}}(t),function(e){e.getCurrentUserInfo=Ke,e.chooseAndUploadFile=o(Be.initChooseAndUploadFile(e))}(t),t.init=this.init,t}};(()=>{{let e={};if(1===process.env.UNI_CLOUD_PROVIDER.length)e=process.env.UNI_CLOUD_PROVIDER[0],We=We.init(e);else{const e=["auth","callFunction","uploadFile","deleteFile","getTempFileURL","downloadFile","database","getCurrentUSerInfo"],t=process.env.UNI_CLOUD_PROVIDER.length>0?"应用有多个服务空间,请通过uniCloud.init方法指定要使用的服务空间":"应用未关联服务空间,请在cloudfunctions目录右键关联服务空间";e.forEach(e=>{We[e]=function(){return console.error(t),Promise.reject(new i({code:"SYS_ERR",message:t}))}})}Object.assign(We,{get mixinDatacom(){return e=We,{props:{localdata:{type:Array,default:()=>[]},options:{type:[Object,Array],default:()=>({})},collection:{type:String,default:""},action:{type:String,default:""},field:{type:String,default:""},orderby:{type:String,default:""},where:{type:[String,Object],default:""},pageData:{type:String,default:"add"},pageCurrent:{type:Number,default:1},pageSize:{type:Number,default:20},getcount:{type:[Boolean,String],default:!1},gettree:{type:[Boolean,String],default:!1},gettreepath:{type:[Boolean,String],default:!1},startwith:{type:String,default:""},limitlevel:{type:Number,default:10},groupby:{type:String,default:""},groupField:{type:String,default:""},distinct:{type:[Boolean,String],default:!1},foreignKey:{type:String,default:""},loadtime:{type:String,default:"auto"},manual:{type:Boolean,default:!1}},data:()=>({mixinDatacomLoading:!1,mixinDatacomHasMore:!1,mixinDatacomResData:[],mixinDatacomErrorMessage:"",mixinDatacomPage:{}}),created(){this.mixinDatacomPage={current:this.pageCurrent,size:this.pageSize,count:0},this.$watch(()=>{var e=[];return["pageCurrent","pageSize","localdata","collection","action","field","orderby","where","getont","getcount","gettree","groupby","groupField","distinct"].forEach(t=>{e.push(this[t])}),e},(e,t)=>{if(this.loadtime===je)return;let s=!1;const n=[];for(let r=2;r{this.mixinDatacomLoading=!1;const{data:n,count:r}=s.result;this.getcount&&(this.mixinDatacomPage.count=r),this.mixinDatacomHasMore=n.length{this.mixinDatacomLoading=!1,this.mixinDatacomErrorMessage=e,s&&s(e)}))},mixinDatacomGet(t={}){let s=e.database();const n=t.action||this.action;n&&(s=s.action(n));const r=t.collection||this.collection;s=s.collection(r);const o=t.where||this.where;o&&Object.keys(o).length&&(s=s.where(o));const i=t.field||this.field;i&&(s=s.field(i));const a=t.foreignKey||this.foreignKey;a&&(s=s.foreignKey(a));const c=t.groupby||this.groupby;c&&(s=s.groupBy(c));const u=t.groupField||this.groupField;u&&(s=s.groupField(u)),!0===(void 0!==t.distinct?t.distinct:this.distinct)&&(s=s.distinct());const h=t.orderby||this.orderby;h&&(s=s.orderBy(h));const l=void 0!==t.pageCurrent?t.pageCurrent:this.mixinDatacomPage.current,d=void 0!==t.pageSize?t.pageSize:this.mixinDatacomPage.size,f=void 0!==t.getcount?t.getcount:this.getcount,p=void 0!==t.gettree?t.gettree:this.gettree,g=void 0!==t.gettreepath?t.gettreepath:this.gettreepath,m={getCount:f},y={limitLevel:void 0!==t.limitlevel?t.limitlevel:this.limitlevel,startWith:void 0!==t.startwith?t.startwith:this.startwith};return p&&(m.getTree=y),g&&(m.getTreePath=y),s=s.skip(d*(l-1)).limit(d).get(m),s}}};var e}})}})();var Ve=We;export default Ve; +import { + initVueI18n as e +} from "@dcloudio/uni-i18n"; +"undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? + global : "undefined" != typeof self && self; + +function t(e) { + return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e +} + +function s(e, t, s) { + return e(s = { + path: t, + exports: {}, + require: function(e, t) { + return function() { + throw new Error( + "Dynamic requires are not currently supported by @rollup/plugin-commonjs") + }(null == t && s.path) + } + }, s.exports), s.exports +} +var n = s((function(e, t) { + var s; + e.exports = (s = s || function(e, t) { + var s = Object.create || function() { + function e() {} + return function(t) { + var s; + return e.prototype = t, s = new e, e.prototype = null, s + } + }(), + n = {}, + r = n.lib = {}, + o = r.Base = { + extend: function(e) { + var t = s(this); + return e && t.mixIn(e), t.hasOwnProperty("init") && this.init !== t.init || + (t.init = function() { + t.$super.init.apply(this, arguments) + }), t.init.prototype = t, t.$super = this, t + }, + create: function() { + var e = this.extend(); + return e.init.apply(e, arguments), e + }, + init: function() {}, + mixIn: function(e) { + for (var t in e) e.hasOwnProperty(t) && (this[t] = e[t]); + e.hasOwnProperty("toString") && (this.toString = e.toString) + }, + clone: function() { + return this.init.prototype.extend(this) + } + }, + i = r.WordArray = o.extend({ + init: function(e, t) { + e = this.words = e || [], this.sigBytes = null != t ? t : 4 * e.length + }, + toString: function(e) { + return (e || c).stringify(this) + }, + concat: function(e) { + var t = this.words, + s = e.words, + n = this.sigBytes, + r = e.sigBytes; + if (this.clamp(), n % 4) + for (var o = 0; o < r; o++) { + var i = s[o >>> 2] >>> 24 - o % 4 * 8 & 255; + t[n + o >>> 2] |= i << 24 - (n + o) % 4 * 8 + } else + for (o = 0; o < r; o += 4) t[n + o >>> 2] = s[o >>> 2]; + return this.sigBytes += r, this + }, + clamp: function() { + var t = this.words, + s = this.sigBytes; + t[s >>> 2] &= 4294967295 << 32 - s % 4 * 8, t.length = e.ceil(s / 4) + }, + clone: function() { + var e = o.clone.call(this); + return e.words = this.words.slice(0), e + }, + random: function(t) { + for (var s, n = [], r = function(t) { + t = t; + var s = 987654321, + n = 4294967295; + return function() { + var r = ((s = 36969 * (65535 & s) + (s >> 16) & + n) << 16) + (t = 18e3 * (65535 & t) + (t >> + 16) & n) & n; + return r /= 4294967296, (r += .5) * (e.random() > + .5 ? 1 : -1) + } + }, o = 0; o < t; o += 4) { + var a = r(4294967296 * (s || e.random())); + s = 987654071 * a(), n.push(4294967296 * a() | 0) + } + return new i.init(n, t) + } + }), + a = n.enc = {}, + c = a.Hex = { + stringify: function(e) { + for (var t = e.words, s = e.sigBytes, n = [], r = 0; r < s; r++) { + var o = t[r >>> 2] >>> 24 - r % 4 * 8 & 255; + n.push((o >>> 4).toString(16)), n.push((15 & o).toString(16)) + } + return n.join("") + }, + parse: function(e) { + for (var t = e.length, s = [], n = 0; n < t; n += 2) s[n >>> 3] |= parseInt( + e.substr(n, 2), 16) << 24 - n % 8 * 4; + return new i.init(s, t / 2) + } + }, + u = a.Latin1 = { + stringify: function(e) { + for (var t = e.words, s = e.sigBytes, n = [], r = 0; r < s; r++) { + var o = t[r >>> 2] >>> 24 - r % 4 * 8 & 255; + n.push(String.fromCharCode(o)) + } + return n.join("") + }, + parse: function(e) { + for (var t = e.length, s = [], n = 0; n < t; n++) s[n >>> 2] |= (255 & e + .charCodeAt(n)) << 24 - n % 4 * 8; + return new i.init(s, t) + } + }, + h = a.Utf8 = { + stringify: function(e) { + try { + return decodeURIComponent(escape(u.stringify(e))) + } catch (e) { + throw new Error("Malformed UTF-8 data") + } + }, + parse: function(e) { + return u.parse(unescape(encodeURIComponent(e))) + } + }, + l = r.BufferedBlockAlgorithm = o.extend({ + reset: function() { + this._data = new i.init, this._nDataBytes = 0 + }, + _append: function(e) { + "string" == typeof e && (e = h.parse(e)), this._data.concat(e), this + ._nDataBytes += e.sigBytes + }, + _process: function(t) { + var s = this._data, + n = s.words, + r = s.sigBytes, + o = this.blockSize, + a = r / (4 * o), + c = (a = t ? e.ceil(a) : e.max((0 | a) - this._minBufferSize, 0)) * + o, + u = e.min(4 * c, r); + if (c) { + for (var h = 0; h < c; h += o) this._doProcessBlock(n, h); + var l = n.splice(0, c); + s.sigBytes -= u + } + return new i.init(l, u) + }, + clone: function() { + var e = o.clone.call(this); + return e._data = this._data.clone(), e + }, + _minBufferSize: 0 + }), + d = (r.Hasher = l.extend({ + cfg: o.extend(), + init: function(e) { + this.cfg = this.cfg.extend(e), this.reset() + }, + reset: function() { + l.reset.call(this), this._doReset() + }, + update: function(e) { + return this._append(e), this._process(), this + }, + finalize: function(e) { + return e && this._append(e), this._doFinalize() + }, + blockSize: 16, + _createHelper: function(e) { + return function(t, s) { + return new e.init(s).finalize(t) + } + }, + _createHmacHelper: function(e) { + return function(t, s) { + return new d.HMAC.init(e, s).finalize(t) + } + } + }), n.algo = {}); + return n + }(Math), s) + })), + r = (s((function(e, t) { + var s; + e.exports = (s = n, function(e) { + var t = s, + n = t.lib, + r = n.WordArray, + o = n.Hasher, + i = t.algo, + a = []; + ! function() { + for (var t = 0; t < 64; t++) a[t] = 4294967296 * e.abs(e.sin(t + 1)) | 0 + }(); + var c = i.MD5 = o.extend({ + _doReset: function() { + this._hash = new r.init([1732584193, 4023233417, 2562383102, + 271733878 + ]) + }, + _doProcessBlock: function(e, t) { + for (var s = 0; s < 16; s++) { + var n = t + s, + r = e[n]; + e[n] = 16711935 & (r << 8 | r >>> 24) | 4278255360 & (r << 24 | + r >>> 8) + } + var o = this._hash.words, + i = e[t + 0], + c = e[t + 1], + f = e[t + 2], + p = e[t + 3], + g = e[t + 4], + m = e[t + 5], + y = e[t + 6], + _ = e[t + 7], + v = e[t + 8], + w = e[t + 9], + S = e[t + 10], + T = e[t + 11], + k = e[t + 12], + A = e[t + 13], + P = e[t + 14], + I = e[t + 15], + E = o[0], + O = o[1], + U = o[2], + b = o[3]; + E = u(E, O, U, b, i, 7, a[0]), b = u(b, E, O, U, c, 12, a[1]), U = + u(U, b, E, O, f, 17, a[2]), O = u(O, U, b, E, p, 22, a[3]), E = + u(E, O, U, b, g, 7, a[4]), b = u(b, E, O, U, m, 12, a[5]), U = + u(U, b, E, O, y, 17, a[6]), O = u(O, U, b, E, _, 22, a[7]), E = + u(E, O, U, b, v, 7, a[8]), b = u(b, E, O, U, w, 12, a[9]), U = + u(U, b, E, O, S, 17, a[10]), O = u(O, U, b, E, T, 22, a[11]), + E = u(E, O, U, b, k, 7, a[12]), b = u(b, E, O, U, A, 12, a[13]), + U = u(U, b, E, O, P, 17, a[14]), E = h(E, O = u(O, U, b, E, I, + 22, a[15]), U, b, c, 5, a[16]), b = h(b, E, O, U, y, 9, a[ + 17]), U = h(U, b, E, O, T, 14, a[18]), O = h(O, U, b, E, i, + 20, a[19]), E = h(E, O, U, b, m, 5, a[20]), b = h(b, E, O, + U, S, 9, a[21]), U = h(U, b, E, O, I, 14, a[22]), O = h(O, + U, b, E, g, 20, a[23]), E = h(E, O, U, b, w, 5, a[24]), b = + h(b, E, O, U, P, 9, a[25]), U = h(U, b, E, O, p, 14, a[26]), O = + h(O, U, b, E, v, 20, a[27]), E = h(E, O, U, b, A, 5, a[28]), b = + h(b, E, O, U, f, 9, a[29]), U = h(U, b, E, O, _, 14, a[30]), E = + l(E, O = h(O, U, b, E, k, 20, a[31]), U, b, m, 4, a[32]), b = l( + b, E, O, U, v, 11, a[33]), U = l(U, b, E, O, T, 16, a[34]), + O = l(O, U, b, E, P, 23, a[35]), E = l(E, O, U, b, c, 4, a[36]), + b = l(b, E, O, U, g, 11, a[37]), U = l(U, b, E, O, _, 16, a[ + 38]), O = l(O, U, b, E, S, 23, a[39]), E = l(E, O, U, b, A, 4, + a[40]), b = l(b, E, O, U, i, 11, a[41]), U = l(U, b, E, O, + p, 16, a[42]), O = l(O, U, b, E, y, 23, a[43]), E = l(E, O, + U, b, w, 4, a[44]), b = l(b, E, O, U, k, 11, a[45]), U = l( + U, b, E, O, I, 16, a[46]), E = d(E, O = l(O, U, b, E, f, 23, + a[47]), U, b, i, 6, a[48]), b = d(b, E, O, U, _, 10, a[49]), + U = d(U, b, E, O, P, 15, a[50]), O = d(O, U, b, E, m, 21, a[ + 51]), E = d(E, O, U, b, k, 6, a[52]), b = d(b, E, O, U, p, 10, + a[53]), U = d(U, b, E, O, S, 15, a[54]), O = d(O, U, b, E, + c, 21, a[55]), E = d(E, O, U, b, v, 6, a[56]), b = d(b, E, + O, U, I, 10, a[57]), U = d(U, b, E, O, y, 15, a[58]), O = d( + O, U, b, E, A, 21, a[59]), E = d(E, O, U, b, g, 6, a[60]), + b = d(b, E, O, U, T, 10, a[61]), U = d(U, b, E, O, f, 15, a[ + 62]), O = d(O, U, b, E, w, 21, a[63]), o[0] = o[0] + E | 0, o[ + 1] = o[1] + O | 0, o[2] = o[2] + U | 0, o[3] = o[3] + b | 0 + }, + _doFinalize: function() { + var t = this._data, + s = t.words, + n = 8 * this._nDataBytes, + r = 8 * t.sigBytes; + s[r >>> 5] |= 128 << 24 - r % 32; + var o = e.floor(n / 4294967296), + i = n; + s[15 + (r + 64 >>> 9 << 4)] = 16711935 & (o << 8 | o >>> 24) | + 4278255360 & (o << 24 | o >>> 8), s[14 + (r + 64 >>> 9 << 4)] = + 16711935 & (i << 8 | i >>> 24) | 4278255360 & (i << 24 | i >>> + 8), t.sigBytes = 4 * (s.length + 1), this._process(); + for (var a = this._hash, c = a.words, u = 0; u < 4; u++) { + var h = c[u]; + c[u] = 16711935 & (h << 8 | h >>> 24) | 4278255360 & (h << 24 | + h >>> 8) + } + return a + }, + clone: function() { + var e = o.clone.call(this); + return e._hash = this._hash.clone(), e + } + }); + + function u(e, t, s, n, r, o, i) { + var a = e + (t & s | ~t & n) + r + i; + return (a << o | a >>> 32 - o) + t + } + + function h(e, t, s, n, r, o, i) { + var a = e + (t & n | s & ~n) + r + i; + return (a << o | a >>> 32 - o) + t + } + + function l(e, t, s, n, r, o, i) { + var a = e + (t ^ s ^ n) + r + i; + return (a << o | a >>> 32 - o) + t + } + + function d(e, t, s, n, r, o, i) { + var a = e + (s ^ (t | ~n)) + r + i; + return (a << o | a >>> 32 - o) + t + } + t.MD5 = o._createHelper(c), t.HmacMD5 = o._createHmacHelper(c) + }(Math), s.MD5) + })), s((function(e, t) { + var s, r, o; + e.exports = (r = (s = n).lib.Base, o = s.enc.Utf8, void(s.algo.HMAC = r.extend({ + init: function(e, t) { + e = this._hasher = new e.init, "string" == typeof t && (t = o.parse(t)); + var s = e.blockSize, + n = 4 * s; + t.sigBytes > n && (t = e.finalize(t)), t.clamp(); + for (var r = this._oKey = t.clone(), i = this._iKey = t.clone(), a = r + .words, c = i.words, u = 0; u < s; u++) a[u] ^= 1549556828, c[ + u] ^= 909522486; + r.sigBytes = i.sigBytes = n, this.reset() + }, + reset: function() { + var e = this._hasher; + e.reset(), e.update(this._iKey) + }, + update: function(e) { + return this._hasher.update(e), this + }, + finalize: function(e) { + var t = this._hasher, + s = t.finalize(e); + return t.reset(), t.finalize(this._oKey.clone().concat(s)) + } + }))) + })), s((function(e, t) { + e.exports = n.HmacMD5 + }))); + +function o(e) { + return function(t) { + if (!((t = t || {}).success || t.fail || t.complete)) return e.call(this, t); + e.call(this, t).then(e => { + t.success && t.success(e), t.complete && t.complete(e) + }, e => { + t.fail && t.fail(e), t.complete && t.complete(e) + }) + } +} +class i extends Error { + constructor(e) { + super(e.message), this.errMsg = e.message || "", Object.defineProperties(this, { + code: { + get: () => e.code + }, + requestId: { + get: () => e.requestId + }, + message: { + get() { + return this.errMsg + }, + set(e) { + this.errMsg = e + } + } + }) + } +} +const { + t: a, + setLocale: c, + getLocale: u +} = e({ + "zh-Hans": { + "uniCloud.init.paramRequired": "缺少参数:{param}", + "uniCloud.uploadFile.fileError": "filePath应为File对象" + }, + "zh-Hant": { + "uniCloud.init.paramRequired": "缺少参数:{param}", + "uniCloud.uploadFile.fileError": "filePath应为File对象" + }, + en: { + "uniCloud.init.paramRequired": "{param} required", + "uniCloud.uploadFile.fileError": "filePath should be instance of File" + }, + fr: { + "uniCloud.init.paramRequired": "{param} required", + "uniCloud.uploadFile.fileError": "filePath should be instance of File" + }, + es: { + "uniCloud.init.paramRequired": "{param} required", + "uniCloud.uploadFile.fileError": "filePath should be instance of File" + } +}, "zh-Hans"); +let h, l, d; +try { + h = require("uni-stat-config").default || require("uni-stat-config") +} catch (e) { + h = { + appid: "" + } +} + +function f(e = 8) { + let t = ""; + for (; t.length < e;) t += Math.random().toString(32).substring(2); + return t.substring(0, e) +} + +function p() { + if ("n" === g()) { + try { + l = plus.runtime.getDCloudId() + } catch (e) { + l = "" + } + return l + } + return l || (l = f(32), uni.setStorage({ + key: "__DC_CLOUD_UUID", + data: l + })), l +} + +function g() { + return { + "app-plus": "n", + h5: "h5", + "mp-weixin": "wx", + [ + ["y", "a", "p", "mp-ali"].reverse().join("") + ]: "ali", + "mp-baidu": "bd", + "mp-toutiao": "tt", + "mp-qq": "qq", + "quickapp-native": "qn" + } [process.env.VUE_APP_PLATFORM] +} +var m = { + sign: function(e, t) { + let s = ""; + return Object.keys(e).sort().forEach((function(t) { + e[t] && (s = s + "&" + t + "=" + e[t]) + })), s = s.slice(1), r(s, t).toString() + }, + wrappedRequest: function(e, t) { + return new Promise((s, n) => { + t(Object.assign(e, { + complete(e) { + e || (e = {}), "h5" === process.env.VUE_APP_PLATFORM && + "development" === process.env.NODE_ENV && e.errMsg && 0 === e.errMsg + .indexOf("request:fail") && console.warn( + "发布H5,需要在uniCloud后台操作,绑定安全域名,否则会因为跨域问题而无法访问。教程参考:https://uniapp.dcloud.io/uniCloud/quickstart?id=useinh5" + ); + const t = e.data && e.data.header && e.data.header[ + "x-serverless-request-id"] || e.header && e.header["request-id"]; + if (!e.statusCode || e.statusCode >= 400) return n(new i({ + code: "SYS_ERR", + message: e.errMsg || "request:fail", + requestId: t + })); + const r = e.data; + if (r.error) return n(new i({ + code: r.error.code, + message: r.error.message, + requestId: t + })); + r.result = r.data, r.requestId = t, delete r.data, s(r) + } + })) + }) + } +}; +const y = { + request: e => uni.request(e), + uploadFile: e => uni.uploadFile(e), + setStorageSync: (e, t) => uni.setStorageSync(e, t), + getStorageSync: e => uni.getStorageSync(e), + removeStorageSync: e => uni.removeStorageSync(e), + clearStorageSync: () => uni.clearStorageSync() +}; +class _ { + constructor(e) { + ["spaceId", "clientSecret"].forEach(t => { + if (!Object.prototype.hasOwnProperty.call(e, t)) throw new Error(a( + "uniCloud.init.paramRequired", { + param: t + })) + }), this.config = Object.assign({}, { + endpoint: "https://api.bspapp.com" + }, e), this.config.provider = "aliyun", this.config.requestUrl = this.config.endpoint + "/client", this + .config.envType = this.config.envType || "public", this.config.accessTokenKey = "access_token_" + this + .config.spaceId, this.adapter = y + } + get hasAccessToken() { + return !!this.accessToken + } + setAccessToken(e) { + this.accessToken = e + } + requestWrapped(e) { + return m.wrappedRequest(e, this.adapter.request) + } + requestAuth(e) { + return this.requestWrapped(e) + } + request(e, t) { + return Promise.resolve().then(() => this.hasAccessToken ? t ? this.requestWrapped(e) : this.requestWrapped( + e).catch(t => new Promise((e, s) => { + !t || "GATEWAY_INVALID_TOKEN" !== t.code && "InvalidParameter.InvalidToken" !== t.code ? + s(t) : e() + }).then(() => this.getAccessToken()).then(() => { + const t = this.rebuildRequest(e); + return this.request(t, !0) + })) : this.getAccessToken().then(() => { + const t = this.rebuildRequest(e); + return this.request(t, !0) + })) + } + rebuildRequest(e) { + const t = Object.assign({}, e); + return t.data.token = this.accessToken, t.header["x-basement-token"] = this.accessToken, t.header[ + "x-serverless-sign"] = m.sign(t.data, this.config.clientSecret), t + } + setupRequest(e, t) { + const s = Object.assign({}, e, { + spaceId: this.config.spaceId, + timestamp: Date.now() + }), + n = { + "Content-Type": "application/json" + }; + return "auth" !== t && (s.token = this.accessToken, n["x-basement-token"] = this.accessToken), n[ + "x-serverless-sign"] = m.sign(s, this.config.clientSecret), { + url: this.config.requestUrl, + method: "POST", + data: s, + dataType: "json", + header: n + } + } + getAccessToken() { + return this.requestAuth(this.setupRequest({ + method: "serverless.auth.user.anonymousAuthorize", + params: "{}" + }, "auth")).then(e => new Promise((t, s) => { + e.result && e.result.accessToken ? (this.setAccessToken(e.result.accessToken), t(this + .accessToken)) : s(new i({ + code: "AUTH_FAILED", + message: "获取accessToken失败" + })) + })) + } + authorize() { + this.getAccessToken() + } + callFunction(e) { + const t = { + method: "serverless.function.runtime.invoke", + params: JSON.stringify({ + functionTarget: e.name, + functionArgs: e.data || {} + }) + }; + return this.request(this.setupRequest(t)) + } + getOSSUploadOptionsFromPath(e) { + const t = { + method: "serverless.file.resource.generateProximalSign", + params: JSON.stringify(e) + }; + return this.request(this.setupRequest(t)) + } + uploadFileToOSS({ + url: e, + formData: t, + name: s, + filePath: n, + fileType: r, + onUploadProgress: o + }) { + return new Promise((a, c) => { + const u = this.adapter.uploadFile({ + url: e, + formData: t, + name: s, + filePath: n, + fileType: r, + header: { + "X-OSS-server-side-encrpytion": "AES256" + }, + success(e) { + e && e.statusCode < 400 ? a(e) : c(new i({ + code: "UPLOAD_FAILED", + message: "文件上传失败" + })) + }, + fail(e) { + c(new i({ + code: e.code || "UPLOAD_FAILED", + message: e.message || e.errMsg || "文件上传失败" + })) + } + }); + "function" == typeof o && u && "function" == typeof u.onProgressUpdate && u.onProgressUpdate( + e => { + o({ + loaded: e.totalBytesSent, + total: e.totalBytesExpectedToSend + }) + }) + }) + } + reportOSSUpload(e) { + const t = { + method: "serverless.file.resource.report", + params: JSON.stringify(e) + }; + return this.request(this.setupRequest(t)) + } + uploadFile({ + filePath: e, + cloudPath: t, + fileType: s = "image", + onUploadProgress: n, + config: r + }) { + if (!t) throw new i({ + code: "CLOUDPATH_REQUIRED", + message: "cloudPath不可为空" + }); + const o = r && r.envType || this.config.envType; + let a, c; + return this.getOSSUploadOptionsFromPath({ + env: o, + filename: t + }).then(t => { + const r = t.result; + a = r.id, c = "https://" + r.cdnDomain + "/" + r.ossPath; + const o = { + url: "https://" + r.host, + formData: { + "Cache-Control": "max-age=2592000", + "Content-Disposition": "attachment", + OSSAccessKeyId: r.accessKeyId, + Signature: r.signature, + host: r.host, + id: a, + key: r.ossPath, + policy: r.policy, + success_action_status: 200 + }, + fileName: "file", + name: "file", + filePath: e, + fileType: s + }; + return this.uploadFileToOSS(Object.assign({}, o, { + onUploadProgress: n + })) + }).then(() => this.reportOSSUpload({ + id: a + })).then(t => new Promise((s, n) => { + t.success ? s({ + success: !0, + filePath: e, + fileID: c + }) : n(new i({ + code: "UPLOAD_FAILED", + message: "文件上传失败" + })) + })) + } + deleteFile({ + fileList: e + }) { + const t = { + method: "serverless.file.resource.delete", + params: JSON.stringify({ + id: e[0] + }) + }; + return this.request(this.setupRequest(t)) + } + getTempFileURL({ + fileList: e + } = {}) { + return new Promise((t, s) => { + Array.isArray(e) && 0 !== e.length || s(new i({ + code: "INVALID_PARAM", + message: "fileList的元素必须是非空的字符串" + })), t({ + fileList: e.map(e => ({ + fileID: e, + tempFileURL: e + })) + }) + }) + } +} +const v = { + init(e) { + const t = new _(e); + ["deleteFile", "getTempFileURL"].forEach(e => { + t[e] = o(t[e]).bind(t) + }); + const s = { + signInAnonymously: function() { + return t.authorize() + }, + getLoginState: function() { + return Promise.resolve(!1) + } + }; + return t.auth = function() { + return s + }, t.customAuth = t.auth, t + } + }, + w = "undefined" != typeof location && "http:" === location.protocol ? "http:" : "https:", + S = "undefined" != typeof process && "e2e" === process.env.NODE_ENV && "pre" === process.env.END_POINT ? + "//tcb-pre.tencentcloudapi.com/web" : "//tcb-api.tencentcloudapi.com/web"; +var T; +! function(e) { + e.local = "local", e.none = "none", e.session = "session" +}(T || (T = {})); +var k = function() {}; +s((function(e, t) { + var s; + e.exports = (s = n, function(e) { + var t = s, + n = t.lib, + r = n.WordArray, + o = n.Hasher, + i = t.algo, + a = [], + c = []; + ! function() { + function t(t) { + for (var s = e.sqrt(t), n = 2; n <= s; n++) + if (!(t % n)) return !1; + return !0 + } + + function s(e) { + return 4294967296 * (e - (0 | e)) | 0 + } + for (var n = 2, r = 0; r < 64;) t(n) && (r < 8 && (a[r] = s(e.pow(n, .5))), c[r] = s(e + .pow(n, 1 / 3)), r++), n++ + }(); + var u = [], + h = i.SHA256 = o.extend({ + _doReset: function() { + this._hash = new r.init(a.slice(0)) + }, + _doProcessBlock: function(e, t) { + for (var s = this._hash.words, n = s[0], r = s[1], o = s[2], i = s[3], + a = s[4], h = s[5], l = s[6], d = s[7], f = 0; f < 64; f++) { + if (f < 16) u[f] = 0 | e[t + f]; + else { + var p = u[f - 15], + g = (p << 25 | p >>> 7) ^ (p << 14 | p >>> 18) ^ p >>> 3, + m = u[f - 2], + y = (m << 15 | m >>> 17) ^ (m << 13 | m >>> 19) ^ m >>> 10; + u[f] = g + u[f - 7] + y + u[f - 16] + } + var _ = n & r ^ n & o ^ r & o, + v = (n << 30 | n >>> 2) ^ (n << 19 | n >>> 13) ^ (n << 10 | + n >>> 22), + w = d + ((a << 26 | a >>> 6) ^ (a << 21 | a >>> 11) ^ (a << 7 | + a >>> 25)) + (a & h ^ ~a & l) + c[f] + u[f]; + d = l, l = h, h = a, a = i + w | 0, i = o, o = r, r = n, n = w + ( + v + _) | 0 + } + s[0] = s[0] + n | 0, s[1] = s[1] + r | 0, s[2] = s[2] + o | 0, s[3] = s[ + 3] + i | 0, s[4] = s[4] + a | 0, s[5] = s[5] + h | 0, s[6] = s[ + 6] + l | 0, s[7] = s[7] + d | 0 + }, + _doFinalize: function() { + var t = this._data, + s = t.words, + n = 8 * this._nDataBytes, + r = 8 * t.sigBytes; + return s[r >>> 5] |= 128 << 24 - r % 32, s[14 + (r + 64 >>> 9 << 4)] = e + .floor(n / 4294967296), s[15 + (r + 64 >>> 9 << 4)] = n, t + .sigBytes = 4 * s.length, this._process(), this._hash + }, + clone: function() { + var e = o.clone.call(this); + return e._hash = this._hash.clone(), e + } + }); + t.SHA256 = o._createHelper(h), t.HmacSHA256 = o._createHmacHelper(h) + }(Math), s.SHA256) +})), s((function(e, t) { + e.exports = n.HmacSHA256 +})), s((function(e, t) { + var s, r, o; + e.exports = (r = (s = o = n).lib.WordArray, s.enc.Base64 = { + stringify: function(e) { + var t = e.words, + s = e.sigBytes, + n = this._map; + e.clamp(); + for (var r = [], o = 0; o < s; o += 3) + for (var i = (t[o >>> 2] >>> 24 - o % 4 * 8 & 255) << 16 | (t[o + 1 >>> 2] >>> + 24 - (o + 1) % 4 * 8 & 255) << 8 | t[o + 2 >>> 2] >>> 24 - (o + 2) % + 4 * 8 & 255, a = 0; a < 4 && o + .75 * a < s; a++) r.push(n.charAt(i >>> + 6 * (3 - a) & 63)); + var c = n.charAt(64); + if (c) + for (; r.length % 4;) r.push(c); + return r.join("") + }, + parse: function(e) { + var t = e.length, + s = this._map, + n = this._reverseMap; + if (!n) { + n = this._reverseMap = []; + for (var o = 0; o < s.length; o++) n[s.charCodeAt(o)] = o + } + var i = s.charAt(64); + if (i) { + var a = e.indexOf(i); - 1 !== a && (t = a) + } + return function(e, t, s) { + for (var n = [], o = 0, i = 0; i < t; i++) + if (i % 4) { + var a = s[e.charCodeAt(i - 1)] << i % 4 * 2, + c = s[e.charCodeAt(i)] >>> 6 - i % 4 * 2; + n[o >>> 2] |= (a | c) << 24 - o % 4 * 8, o++ + } return r.create(n, o) + }(e, t, n) + }, + _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" + }, o.enc.Base64) +})), s((function(e, t) { + e.exports = n.enc.Utf8 +})); +const A = () => { + let e; + if (!Promise) { + e = () => {}, e.promise = {}; + const t = () => { + throw new Error( + 'Your Node runtime does support ES6 Promises. Set "global.Promise" to your preferred implementation of promises.' + ) + }; + return Object.defineProperty(e.promise, "then", { + get: t + }), Object.defineProperty(e.promise, "catch", { + get: t + }), e + } + const t = new Promise((t, s) => { + e = (e, n) => e ? s(e) : t(n) + }); + return e.promise = t, e +}; + +function P(e) { + return void 0 === e +} + +function I(e) { + return "[object Null]" === Object.prototype.toString.call(e) +} +var E; + +function O(e) { + const t = (s = e, "[object Array]" === Object.prototype.toString.call(s) ? e : [e]); + var s; + for (const e of t) { + const { + isMatch: t, + genAdapter: s, + runtime: n + } = e; + if (t()) return { + adapter: s(), + runtime: n + } + } +}! function(e) { + e.WEB = "web", e.WX_MP = "wx_mp" +}(E || (E = {})); +const U = { + adapter: null, + runtime: void 0 + }, + b = ["anonymousUuidKey"]; +class D extends k { + constructor() { + super(), U.adapter.root.tcbObject || (U.adapter.root.tcbObject = {}) + } + setItem(e, t) { + U.adapter.root.tcbObject[e] = t + } + getItem(e) { + return U.adapter.root.tcbObject[e] + } + removeItem(e) { + delete U.adapter.root.tcbObject[e] + } + clear() { + delete U.adapter.root.tcbObject + } +} + +function C(e, t) { + switch (e) { + case "local": + return t.localStorage || new D; + case "none": + return new D; + default: + return t.sessionStorage || new D + } +} +class R { + constructor(e) { + if (!this._storage) { + this._persistence = U.adapter.primaryStorage || e.persistence, this._storage = C(this._persistence, U + .adapter); + const t = "access_token_" + e.env, + s = "access_token_expire_" + e.env, + n = "refresh_token_" + e.env, + r = "anonymous_uuid_" + e.env, + o = "login_type_" + e.env, + i = "user_info_" + e.env; + this.keys = { + accessTokenKey: t, + accessTokenExpireKey: s, + refreshTokenKey: n, + anonymousUuidKey: r, + loginTypeKey: o, + userInfoKey: i + } + } + } + updatePersistence(e) { + if (e === this._persistence) return; + const t = "local" === this._persistence; + this._persistence = e; + const s = C(e, U.adapter); + for (const e in this.keys) { + const n = this.keys[e]; + if (t && b.includes(e)) continue; + const r = this._storage.getItem(n); + P(r) || I(r) || (s.setItem(n, r), this._storage.removeItem(n)) + } + this._storage = s + } + setStore(e, t, s) { + if (!this._storage) return; + const n = { + version: s || "localCachev1", + content: t + }, + r = JSON.stringify(n); + try { + this._storage.setItem(e, r) + } catch (e) { + throw e + } + } + getStore(e, t) { + try { + if (!this._storage) return + } catch (e) { + return "" + } + t = t || "localCachev1"; + const s = this._storage.getItem(e); + if (!s) return ""; + if (s.indexOf(t) >= 0) { + return JSON.parse(s).content + } + return "" + } + removeStore(e) { + this._storage.removeItem(e) + } +} +const x = {}, + q = {}; + +function F(e) { + return x[e] +} +class L { + constructor(e, t) { + this.data = t || null, this.name = e + } +} +class N extends L { + constructor(e, t) { + super("error", { + error: e, + data: t + }), this.error = e + } +} +const M = new class { + constructor() { + this._listeners = {} + } + on(e, t) { + return function(e, t, s) { + s[e] = s[e] || [], s[e].push(t) + }(e, t, this._listeners), this + } + off(e, t) { + return function(e, t, s) { + if (s && s[e]) { + const n = s[e].indexOf(t); - 1 !== n && s[e].splice(n, 1) + } + }(e, t, this._listeners), this + } + fire(e, t) { + if (e instanceof N) return console.error(e.error), this; + const s = "string" == typeof e ? new L(e, t || {}) : e; + const n = s.name; + if (this._listens(n)) { + s.target = this; + const e = this._listeners[n] ? [...this._listeners[n]] : []; + for (const t of e) t.call(this, s) + } + return this + } + _listens(e) { + return this._listeners[e] && this._listeners[e].length > 0 + } +}; + +function $(e, t) { + M.on(e, t) +} + +function K(e, t = {}) { + M.fire(e, t) +} + +function B(e, t) { + M.off(e, t) +} +const j = "loginStateChanged", + H = "loginStateExpire", + W = "loginTypeChanged", + V = "anonymousConverted", + z = "refreshAccessToken"; +var Y; +! function(e) { + e.ANONYMOUS = "ANONYMOUS", e.WECHAT = "WECHAT", e.WECHAT_PUBLIC = "WECHAT-PUBLIC", e.WECHAT_OPEN = "WECHAT-OPEN", e + .CUSTOM = "CUSTOM", e.EMAIL = "EMAIL", e.USERNAME = "USERNAME", e.NULL = "NULL" +}(Y || (Y = {})); +const J = ["auth.getJwt", "auth.logout", "auth.signInWithTicket", "auth.signInAnonymously", "auth.signIn", + "auth.fetchAccessTokenWithRefreshToken", "auth.signUpWithEmailAndPassword", "auth.activateEndUserMail", + "auth.sendPasswordResetEmail", "auth.resetPasswordWithToken", "auth.isUsernameRegistered" + ], + X = { + "X-SDK-Version": "1.3.5" + }; + +function G(e, t, s) { + const n = e[t]; + e[t] = function(t) { + const r = {}, + o = {}; + s.forEach(s => { + const { + data: n, + headers: i + } = s.call(e, t); + Object.assign(r, n), Object.assign(o, i) + }); + const i = t.data; + return i && (() => { + var e; + if (e = i, "[object FormData]" !== Object.prototype.toString.call(e)) t.data = { + ...i, + ...r + }; + else + for (const e in r) i.append(e, r[e]) + })(), t.headers = { + ...t.headers || {}, + ...o + }, n.call(e, t) + } +} + +function Q() { + const e = Math.random().toString(16).slice(2); + return { + data: { + seqId: e + }, + headers: { + ...X, + "x-seqid": e + } + } +} +class Z { + constructor(e = {}) { + var t; + this.config = e, this._reqClass = new U.adapter.reqClass({ + timeout: this.config.timeout, + timeoutMsg: `请求在${this.config.timeout/1e3}s内未完成,已中断`, + restrictedMethods: ["post"] + }), this._cache = F(this.config.env), this._localCache = (t = this.config.env, q[t]), G(this._reqClass, + "post", [Q]), G(this._reqClass, "upload", [Q]), G(this._reqClass, "download", [Q]) + } + async post(e) { + return await this._reqClass.post(e) + } + async upload(e) { + return await this._reqClass.upload(e) + } + async download(e) { + return await this._reqClass.download(e) + } + async refreshAccessToken() { + let e, t; + this._refreshAccessTokenPromise || (this._refreshAccessTokenPromise = this._refreshAccessToken()); + try { + e = await this._refreshAccessTokenPromise + } catch (e) { + t = e + } + if (this._refreshAccessTokenPromise = null, this._shouldRefreshAccessTokenHook = null, t) throw t; + return e + } + async _refreshAccessToken() { + const { + accessTokenKey: e, + accessTokenExpireKey: t, + refreshTokenKey: s, + loginTypeKey: n, + anonymousUuidKey: r + } = this._cache.keys; + this._cache.removeStore(e), this._cache.removeStore(t); + let o = this._cache.getStore(s); + if (!o) throw new Error("未登录CloudBase"); + const i = { + refresh_token: o + }, + a = await this.request("auth.fetchAccessTokenWithRefreshToken", i); + if (a.data.code) { + const { + code: e + } = a.data; + if ("SIGN_PARAM_INVALID" === e || "REFRESH_TOKEN_EXPIRED" === e || "INVALID_REFRESH_TOKEN" === e) { + if (this._cache.getStore(n) === Y.ANONYMOUS && "INVALID_REFRESH_TOKEN" === e) { + const e = this._cache.getStore(r), + t = this._cache.getStore(s), + n = await this.send("auth.signInAnonymously", { + anonymous_uuid: e, + refresh_token: t + }); + return this.setRefreshToken(n.refresh_token), this._refreshAccessToken() + } + K(H), this._cache.removeStore(s) + } + throw new Error("刷新access token失败:" + a.data.code) + } + if (a.data.access_token) return K(z), this._cache.setStore(e, a.data.access_token), this._cache.setStore(t, + a.data.access_token_expire + Date.now()), { + accessToken: a.data.access_token, + accessTokenExpire: a.data.access_token_expire + }; + a.data.refresh_token && (this._cache.removeStore(s), this._cache.setStore(s, a.data.refresh_token), this + ._refreshAccessToken()) + } + async getAccessToken() { + const { + accessTokenKey: e, + accessTokenExpireKey: t, + refreshTokenKey: s + } = this._cache.keys; + if (!this._cache.getStore(s)) throw new Error("refresh token不存在,登录状态异常"); + let n = this._cache.getStore(e), + r = this._cache.getStore(t), + o = !0; + return this._shouldRefreshAccessTokenHook && !await this._shouldRefreshAccessTokenHook(n, r) && (o = !1), (! + n || !r || r < Date.now()) && o ? this.refreshAccessToken() : { + accessToken: n, + accessTokenExpire: r + } + } + async request(e, t, s) { + const n = "x-tcb-trace_" + this.config.env; + let r = "application/x-www-form-urlencoded"; + const o = { + action: e, + env: this.config.env, + dataVersion: "2019-08-16", + ...t + }; + if (-1 === J.indexOf(e)) { + const { + refreshTokenKey: e + } = this._cache.keys; + this._cache.getStore(e) && (o.access_token = (await this.getAccessToken()).accessToken) + } + let i; + if ("storage.uploadFile" === e) { + i = new FormData; + for (let e in i) i.hasOwnProperty(e) && void 0 !== i[e] && i.append(e, o[e]); + r = "multipart/form-data" + } else { + r = "application/json;charset=UTF-8", i = {}; + for (let e in o) void 0 !== o[e] && (i[e] = o[e]) + } + let a = { + headers: { + "content-type": r + } + }; + s && s.onUploadProgress && (a.onUploadProgress = s.onUploadProgress); + const c = this._localCache.getStore(n); + c && (a.headers["X-TCB-Trace"] = c); + const { + parse: u, + inQuery: h, + search: l + } = t; + let d = { + env: this.config.env + }; + u && (d.parse = !0), h && (d = { + ...h, + ...d + }); + let f = function(e, t, s = {}) { + const n = /\?/.test(t); + let r = ""; + for (let e in s) "" === r ? !n && (t += "?") : r += "&", r += `${e}=${encodeURIComponent(s[e])}`; + return /^http(s)?\:\/\//.test(t += r) ? t : `${e}${t}` + }(w, S, d); + l && (f += l); + const p = await this.post({ + url: f, + data: i, + ...a + }), + g = p.header && p.header["x-tcb-trace"]; + if (g && this._localCache.setStore(n, g), 200 !== Number(p.status) && 200 !== Number(p.statusCode) || !p + .data) throw new Error("network request error"); + return p + } + async send(e, t = {}) { + const s = await this.request(e, t, { + onUploadProgress: t.onUploadProgress + }); + if ("ACCESS_TOKEN_EXPIRED" === s.data.code && -1 === J.indexOf(e)) { + await this.refreshAccessToken(); + const s = await this.request(e, t, { + onUploadProgress: t.onUploadProgress + }); + if (s.data.code) throw new Error(`[${s.data.code}] ${s.data.message}`); + return s.data + } + if (s.data.code) throw new Error(`[${s.data.code}] ${s.data.message}`); + return s.data + } + setRefreshToken(e) { + const { + accessTokenKey: t, + accessTokenExpireKey: s, + refreshTokenKey: n + } = this._cache.keys; + this._cache.removeStore(t), this._cache.removeStore(s), this._cache.setStore(n, e) + } +} +const ee = {}; + +function te(e) { + return ee[e] +} +class se { + constructor(e) { + this.config = e, this._cache = F(e.env), this._request = te(e.env) + } + setRefreshToken(e) { + const { + accessTokenKey: t, + accessTokenExpireKey: s, + refreshTokenKey: n + } = this._cache.keys; + this._cache.removeStore(t), this._cache.removeStore(s), this._cache.setStore(n, e) + } + setAccessToken(e, t) { + const { + accessTokenKey: s, + accessTokenExpireKey: n + } = this._cache.keys; + this._cache.setStore(s, e), this._cache.setStore(n, t) + } + async refreshUserInfo() { + const { + data: e + } = await this._request.send("auth.getUserInfo", {}); + return this.setLocalUserInfo(e), e + } + setLocalUserInfo(e) { + const { + userInfoKey: t + } = this._cache.keys; + this._cache.setStore(t, e) + } +} +class ne { + constructor(e) { + if (!e) throw new Error("envId is not defined"); + this._envId = e, this._cache = F(this._envId), this._request = te(this._envId), this.setUserInfo() + } + linkWithTicket(e) { + if ("string" != typeof e) throw new Error("ticket must be string"); + return this._request.send("auth.linkWithTicket", { + ticket: e + }) + } + linkWithRedirect(e) { + e.signInWithRedirect() + } + updatePassword(e, t) { + return this._request.send("auth.updatePassword", { + oldPassword: t, + newPassword: e + }) + } + updateEmail(e) { + return this._request.send("auth.updateEmail", { + newEmail: e + }) + } + updateUsername(e) { + if ("string" != typeof e) throw new Error("username must be a string"); + return this._request.send("auth.updateUsername", { + username: e + }) + } + async getLinkedUidList() { + const { + data: e + } = await this._request.send("auth.getLinkedUidList", {}); + let t = !1; + const { + users: s + } = e; + return s.forEach(e => { + e.wxOpenId && e.wxPublicId && (t = !0) + }), { + users: s, + hasPrimaryUid: t + } + } + setPrimaryUid(e) { + return this._request.send("auth.setPrimaryUid", { + uid: e + }) + } + unlink(e) { + return this._request.send("auth.unlink", { + platform: e + }) + } + async update(e) { + const { + nickName: t, + gender: s, + avatarUrl: n, + province: r, + country: o, + city: i + } = e, { + data: a + } = await this._request.send("auth.updateUserInfo", { + nickName: t, + gender: s, + avatarUrl: n, + province: r, + country: o, + city: i + }); + this.setLocalUserInfo(a) + } + async refresh() { + const { + data: e + } = await this._request.send("auth.getUserInfo", {}); + return this.setLocalUserInfo(e), e + } + setUserInfo() { + const { + userInfoKey: e + } = this._cache.keys, t = this._cache.getStore(e); + ["uid", "loginType", "openid", "wxOpenId", "wxPublicId", "unionId", "qqMiniOpenId", "email", "hasPassword", + "customUserId", "nickName", "gender", "avatarUrl" + ].forEach(e => { + this[e] = t[e] + }), this.location = { + country: t.country, + province: t.province, + city: t.city + } + } + setLocalUserInfo(e) { + const { + userInfoKey: t + } = this._cache.keys; + this._cache.setStore(t, e), this.setUserInfo() + } +} +class re { + constructor(e) { + if (!e) throw new Error("envId is not defined"); + this._cache = F(e); + const { + refreshTokenKey: t, + accessTokenKey: s, + accessTokenExpireKey: n + } = this._cache.keys, r = this._cache.getStore(t), o = this._cache.getStore(s), i = this._cache.getStore(n); + this.credential = { + refreshToken: r, + accessToken: o, + accessTokenExpire: i + }, this.user = new ne(e) + } + get isAnonymousAuth() { + return this.loginType === Y.ANONYMOUS + } + get isCustomAuth() { + return this.loginType === Y.CUSTOM + } + get isWeixinAuth() { + return this.loginType === Y.WECHAT || this.loginType === Y.WECHAT_OPEN || this.loginType === Y.WECHAT_PUBLIC + } + get loginType() { + return this._cache.getStore(this._cache.keys.loginTypeKey) + } +} +class oe extends se { + async signIn() { + this._cache.updatePersistence("local"); + const { + anonymousUuidKey: e, + refreshTokenKey: t + } = this._cache.keys, s = this._cache.getStore(e) || void 0, n = this._cache.getStore(t) || void 0, r = + await this._request.send("auth.signInAnonymously", { + anonymous_uuid: s, + refresh_token: n + }); + if (r.uuid && r.refresh_token) { + this._setAnonymousUUID(r.uuid), this.setRefreshToken(r.refresh_token), await this._request + .refreshAccessToken(), K(j), K(W, { + env: this.config.env, + loginType: Y.ANONYMOUS, + persistence: "local" + }); + const e = new re(this.config.env); + return await e.user.refresh(), e + } + throw new Error("匿名登录失败") + } + async linkAndRetrieveDataWithTicket(e) { + const { + anonymousUuidKey: t, + refreshTokenKey: s + } = this._cache.keys, n = this._cache.getStore(t), r = this._cache.getStore(s), o = await this._request + .send("auth.linkAndRetrieveDataWithTicket", { + anonymous_uuid: n, + refresh_token: r, + ticket: e + }); + if (o.refresh_token) return this._clearAnonymousUUID(), this.setRefreshToken(o.refresh_token), await this + ._request.refreshAccessToken(), K(V, { + env: this.config.env + }), K(W, { + loginType: Y.CUSTOM, + persistence: "local" + }), { + credential: { + refreshToken: o.refresh_token + } + }; + throw new Error("匿名转化失败") + } + _setAnonymousUUID(e) { + const { + anonymousUuidKey: t, + loginTypeKey: s + } = this._cache.keys; + this._cache.removeStore(t), this._cache.setStore(t, e), this._cache.setStore(s, Y.ANONYMOUS) + } + _clearAnonymousUUID() { + this._cache.removeStore(this._cache.keys.anonymousUuidKey) + } +} +class ie extends se { + async signIn(e) { + if ("string" != typeof e) throw new Error("ticket must be a string"); + const { + refreshTokenKey: t + } = this._cache.keys, s = await this._request.send("auth.signInWithTicket", { + ticket: e, + refresh_token: this._cache.getStore(t) || "" + }); + if (s.refresh_token) return this.setRefreshToken(s.refresh_token), await this._request.refreshAccessToken(), + K(j), K(W, { + env: this.config.env, + loginType: Y.CUSTOM, + persistence: this.config.persistence + }), await this.refreshUserInfo(), new re(this.config.env); + throw new Error("自定义登录失败") + } +} +class ae extends se { + async signIn(e, t) { + if ("string" != typeof e) throw new Error("email must be a string"); + const { + refreshTokenKey: s + } = this._cache.keys, n = await this._request.send("auth.signIn", { + loginType: "EMAIL", + email: e, + password: t, + refresh_token: this._cache.getStore(s) || "" + }), { + refresh_token: r, + access_token: o, + access_token_expire: i + } = n; + if (r) return this.setRefreshToken(r), o && i ? this.setAccessToken(o, i) : await this._request + .refreshAccessToken(), await this.refreshUserInfo(), K(j), K(W, { + env: this.config.env, + loginType: Y.EMAIL, + persistence: this.config.persistence + }), new re(this.config.env); + throw n.code ? new Error(`邮箱登录失败: [${n.code}] ${n.message}`) : new Error("邮箱登录失败") + } + async activate(e) { + return this._request.send("auth.activateEndUserMail", { + token: e + }) + } + async resetPasswordWithToken(e, t) { + return this._request.send("auth.resetPasswordWithToken", { + token: e, + newPassword: t + }) + } +} +class ce extends se { + async signIn(e, t) { + if ("string" != typeof e) throw new Error("username must be a string"); + "string" != typeof t && (t = "", console.warn("password is empty")); + const { + refreshTokenKey: s + } = this._cache.keys, n = await this._request.send("auth.signIn", { + loginType: Y.USERNAME, + username: e, + password: t, + refresh_token: this._cache.getStore(s) || "" + }), { + refresh_token: r, + access_token_expire: o, + access_token: i + } = n; + if (r) return this.setRefreshToken(r), i && o ? this.setAccessToken(i, o) : await this._request + .refreshAccessToken(), await this.refreshUserInfo(), K(j), K(W, { + env: this.config.env, + loginType: Y.USERNAME, + persistence: this.config.persistence + }), new re(this.config.env); + throw n.code ? new Error(`用户名密码登录失败: [${n.code}] ${n.message}`) : new Error("用户名密码登录失败") + } +} +class ue { + constructor(e) { + this.config = e, this._cache = F(e.env), this._request = te(e.env), this._onAnonymousConverted = this + ._onAnonymousConverted.bind(this), this._onLoginTypeChanged = this._onLoginTypeChanged.bind(this), $(W, + this._onLoginTypeChanged) + } + get currentUser() { + const e = this.hasLoginState(); + return e && e.user || null + } + get loginType() { + return this._cache.getStore(this._cache.keys.loginTypeKey) + } + anonymousAuthProvider() { + return new oe(this.config) + } + customAuthProvider() { + return new ie(this.config) + } + emailAuthProvider() { + return new ae(this.config) + } + usernameAuthProvider() { + return new ce(this.config) + } + async signInAnonymously() { + return new oe(this.config).signIn() + } + async signInWithEmailAndPassword(e, t) { + return new ae(this.config).signIn(e, t) + } + signInWithUsernameAndPassword(e, t) { + return new ce(this.config).signIn(e, t) + } + async linkAndRetrieveDataWithTicket(e) { + this._anonymousAuthProvider || (this._anonymousAuthProvider = new oe(this.config)), $(V, this + ._onAnonymousConverted); + return await this._anonymousAuthProvider.linkAndRetrieveDataWithTicket(e) + } + async signOut() { + if (this.loginType === Y.ANONYMOUS) throw new Error("匿名用户不支持登出操作"); + const { + refreshTokenKey: e, + accessTokenKey: t, + accessTokenExpireKey: s + } = this._cache.keys, n = this._cache.getStore(e); + if (!n) return; + const r = await this._request.send("auth.logout", { + refresh_token: n + }); + return this._cache.removeStore(e), this._cache.removeStore(t), this._cache.removeStore(s), K(j), K(W, { + env: this.config.env, + loginType: Y.NULL, + persistence: this.config.persistence + }), r + } + async signUpWithEmailAndPassword(e, t) { + return this._request.send("auth.signUpWithEmailAndPassword", { + email: e, + password: t + }) + } + async sendPasswordResetEmail(e) { + return this._request.send("auth.sendPasswordResetEmail", { + email: e + }) + } + onLoginStateChanged(e) { + $(j, () => { + const t = this.hasLoginState(); + e.call(this, t) + }); + const t = this.hasLoginState(); + e.call(this, t) + } + onLoginStateExpired(e) { + $(H, e.bind(this)) + } + onAccessTokenRefreshed(e) { + $(z, e.bind(this)) + } + onAnonymousConverted(e) { + $(V, e.bind(this)) + } + onLoginTypeChanged(e) { + $(W, () => { + const t = this.hasLoginState(); + e.call(this, t) + }) + } + async getAccessToken() { + return { + accessToken: (await this._request.getAccessToken()).accessToken, + env: this.config.env + } + } + hasLoginState() { + const { + refreshTokenKey: e + } = this._cache.keys; + return this._cache.getStore(e) ? new re(this.config.env) : null + } + async isUsernameRegistered(e) { + if ("string" != typeof e) throw new Error("username must be a string"); + const { + data: t + } = await this._request.send("auth.isUsernameRegistered", { + username: e + }); + return t && t.isRegistered + } + getLoginState() { + return Promise.resolve(this.hasLoginState()) + } + async signInWithTicket(e) { + return new ie(this.config).signIn(e) + } + shouldRefreshAccessToken(e) { + this._request._shouldRefreshAccessTokenHook = e.bind(this) + } + getUserInfo() { + return this._request.send("auth.getUserInfo", {}).then(e => e.code ? e : { + ...e.data, + requestId: e.seqId + }) + } + getAuthHeader() { + const { + refreshTokenKey: e, + accessTokenKey: t + } = this._cache.keys, s = this._cache.getStore(e); + return { + "x-cloudbase-credentials": this._cache.getStore(t) + "/@@/" + s + } + } + _onAnonymousConverted(e) { + const { + env: t + } = e.data; + t === this.config.env && this._cache.updatePersistence(this.config.persistence) + } + _onLoginTypeChanged(e) { + const { + loginType: t, + persistence: s, + env: n + } = e.data; + n === this.config.env && (this._cache.updatePersistence(s), this._cache.setStore(this._cache.keys + .loginTypeKey, t)) + } +} +const he = function(e, t) { + t = t || A(); + const s = te(this.config.env), + { + cloudPath: n, + filePath: r, + onUploadProgress: o, + fileType: i = "image" + } = e; + return s.send("storage.getUploadMetadata", { + path: n + }).then(e => { + const { + data: { + url: a, + authorization: c, + token: u, + fileId: h, + cosFileId: l + }, + requestId: d + } = e, f = { + key: n, + signature: c, + "x-cos-meta-fileid": l, + success_action_status: "201", + "x-cos-security-token": u + }; + s.upload({ + url: a, + data: f, + file: r, + name: n, + fileType: i, + onUploadProgress: o + }).then(e => { + 201 === e.statusCode ? t(null, { + fileID: h, + requestId: d + }) : t(new Error("STORAGE_REQUEST_FAIL: " + e.data)) + }).catch(e => { + t(e) + }) + }).catch(e => { + t(e) + }), t.promise + }, + le = function(e, t) { + t = t || A(); + const s = te(this.config.env), + { + cloudPath: n + } = e; + return s.send("storage.getUploadMetadata", { + path: n + }).then(e => { + t(null, e) + }).catch(e => { + t(e) + }), t.promise + }, + de = function({ + fileList: e + }, t) { + if (t = t || A(), !e || !Array.isArray(e)) return { + code: "INVALID_PARAM", + message: "fileList必须是非空的数组" + }; + for (let t of e) + if (!t || "string" != typeof t) return { + code: "INVALID_PARAM", + message: "fileList的元素必须是非空的字符串" + }; + const s = { + fileid_list: e + }; + return te(this.config.env).send("storage.batchDeleteFile", s).then(e => { + e.code ? t(null, e) : t(null, { + fileList: e.data.delete_list, + requestId: e.requestId + }) + }).catch(e => { + t(e) + }), t.promise + }, + fe = function({ + fileList: e + }, t) { + t = t || A(), e && Array.isArray(e) || t(null, { + code: "INVALID_PARAM", + message: "fileList必须是非空的数组" + }); + let s = []; + for (let n of e) "object" == typeof n ? (n.hasOwnProperty("fileID") && n.hasOwnProperty("maxAge") || t(null, { + code: "INVALID_PARAM", + message: "fileList的元素必须是包含fileID和maxAge的对象" + }), s.push({ + fileid: n.fileID, + max_age: n.maxAge + })) : "string" == typeof n ? s.push({ + fileid: n + }) : t(null, { + code: "INVALID_PARAM", + message: "fileList的元素必须是字符串" + }); + const n = { + file_list: s + }; + return te(this.config.env).send("storage.batchGetDownloadUrl", n).then(e => { + e.code ? t(null, e) : t(null, { + fileList: e.data.download_list, + requestId: e.requestId + }) + }).catch(e => { + t(e) + }), t.promise + }, + pe = async function({ + fileID: e + }, t) { + const s = (await fe.call(this, { + fileList: [{ + fileID: e, + maxAge: 600 + }] + })).fileList[0]; + if ("SUCCESS" !== s.code) return t ? t(s) : new Promise(e => { + e(s) + }); + const n = te(this.config.env); + let r = s.download_url; + if (r = encodeURI(r), !t) return n.download({ + url: r + }); + t(await n.download({ + url: r + })) + }, ge = function({ + name: e, + data: t, + query: s, + parse: n, + search: r + }, o) { + const i = o || A(); + let a; + try { + a = t ? JSON.stringify(t) : "" + } catch (e) { + return Promise.reject(e) + } + if (!e) return Promise.reject(new Error("函数名不能为空")); + const c = { + inQuery: s, + parse: n, + search: r, + function_name: e, + request_data: a + }; + return te(this.config.env).send("functions.invokeFunction", c).then(e => { + if (e.code) i(null, e); + else { + let t = e.data.response_data; + if (n) i(null, { + result: t, + requestId: e.requestId + }); + else try { + t = JSON.parse(e.data.response_data), i(null, { + result: t, + requestId: e.requestId + }) + } catch (e) { + i(new Error("response data must be json")) + } + } + return i.promise + }).catch(e => { + i(e) + }), i.promise + }, me = { + timeout: 15e3, + persistence: "session" + }, ye = {}; +class _e { + constructor(e) { + this.config = e || this.config, this.authObj = void 0 + } + init(e) { + switch (U.adapter || (this.requestClient = new U.adapter.reqClass({ + timeout: e.timeout || 5e3, + timeoutMsg: `请求在${(e.timeout||5e3)/1e3}s内未完成,已中断` + })), this.config = { + ...me, + ...e + }, !0) { + case this.config.timeout > 6e5: + console.warn("timeout大于可配置上限[10分钟],已重置为上限数值"), this.config.timeout = 6e5; + break; + case this.config.timeout < 100: + console.warn("timeout小于可配置下限[100ms],已重置为下限数值"), this.config.timeout = 100 + } + return new _e(this.config) + } + auth({ + persistence: e + } = {}) { + if (this.authObj) return this.authObj; + const t = e || U.adapter.primaryStorage || me.persistence; + var s; + return t !== this.config.persistence && (this.config.persistence = t), + function(e) { + const { + env: t + } = e; + x[t] = new R(e), q[t] = new R({ + ...e, + persistence: "local" + }) + }(this.config), s = this.config, ee[s.env] = new Z(s), this.authObj = new ue(this.config), this.authObj + } + on(e, t) { + return $.apply(this, [e, t]) + } + off(e, t) { + return B.apply(this, [e, t]) + } + callFunction(e, t) { + return ge.apply(this, [e, t]) + } + deleteFile(e, t) { + return de.apply(this, [e, t]) + } + getTempFileURL(e, t) { + return fe.apply(this, [e, t]) + } + downloadFile(e, t) { + return pe.apply(this, [e, t]) + } + uploadFile(e, t) { + return he.apply(this, [e, t]) + } + getUploadMetadata(e, t) { + return le.apply(this, [e, t]) + } + registerExtension(e) { + ye[e.name] = e + } + async invokeExtension(e, t) { + const s = ye[e]; + if (!s) throw Error(`扩展${e} 必须先注册`); + return await s.invoke(t, this) + } + useAdapters(e) { + const { + adapter: t, + runtime: s + } = O(e) || {}; + t && (U.adapter = t), s && (U.runtime = s) + } +} +const ve = new _e; + +function we(e, t, s) { + void 0 === s && (s = {}); + var n = /\?/.test(t), + r = ""; + for (var o in s) "" === r ? !n && (t += "?") : r += "&", r += o + "=" + encodeURIComponent(s[o]); + return /^http(s)?:\/\//.test(t += r) ? t : "" + e + t +} +class Se { + post(e) { + const { + url: t, + data: s, + headers: n + } = e; + return new Promise((e, r) => { + y.request({ + url: we("https:", t), + data: s, + method: "POST", + header: n, + success(t) { + e(t) + }, + fail(e) { + r(e) + } + }) + }) + } + upload(e) { + return new Promise((t, s) => { + const { + url: n, + file: r, + data: o, + headers: i, + fileType: a + } = e, c = y.uploadFile({ + url: we("https:", n), + name: "file", + formData: Object.assign({}, o), + filePath: r, + fileType: a, + header: i, + success(e) { + const s = { + statusCode: e.statusCode, + data: e.data || {} + }; + 200 === e.statusCode && o.success_action_status && (s.statusCode = parseInt(o + .success_action_status, 10)), t(s) + }, + fail(e) { + "mp-alipay" === process.env.VUE_APP_PLATFORM && "development" === process.env + .NODE_ENV && console.warn("支付宝小程序开发工具上传腾讯云时无法准确判断是否上传成功,请使用真机测试"), s( + new Error(e.errMsg || "uploadFile:fail")) + } + }); + "function" == typeof e.onUploadProgress && c && "function" == typeof c.onProgressUpdate && c + .onProgressUpdate(t => { + e.onUploadProgress({ + loaded: t.totalBytesSent, + total: t.totalBytesExpectedToSend + }) + }) + }) + } +} +const Te = { + setItem(e, t) { + y.setStorageSync(e, t) + }, + getItem: e => y.getStorageSync(e), + removeItem(e) { + y.removeStorageSync(e) + }, + clear() { + y.clearStorageSync() + } +}; +const ke = { + genAdapter: function() { + return { + root: {}, + reqClass: Se, + localStorage: Te, + primaryStorage: "local" + } + }, + isMatch: function() { + return !0 + }, + runtime: "uni_app" +}; +ve.useAdapters(ke); +const Ae = ve, + Pe = Ae.init; +Ae.init = function(e) { + e.env = e.spaceId; + const t = Pe.call(this, e); + t.config.provider = "tencent", t.config.spaceId = e.spaceId; + const s = t.auth; + t.auth = function(e) { + const t = s.call(this, e); + return ["linkAndRetrieveDataWithTicket", "signInAnonymously", "signOut", "getAccessToken", + "getLoginState", "signInWithTicket", "getUserInfo" + ].forEach(e => { + t[e] = o(t[e]).bind(t) + }), t + }, t.customAuth = t.auth; + return ["deleteFile", "getTempFileURL", "downloadFile"].forEach(e => { + t[e] = o(t[e]).bind(t) + }), t +}; +class Ie extends _ { + getAccessToken() { + return new Promise((e, t) => { + this.setAccessToken("Anonymous_Access_token"), e("Anonymous_Access_token") + }) + } + uploadFileToOSS({ + url: e, + formData: t, + name: s, + filePath: n, + fileType: r, + onUploadProgress: o + }) { + return new Promise((a, c) => { + const u = this.adapter.uploadFile({ + url: e, + formData: t, + name: s, + filePath: n, + fileType: r, + success(e) { + e && e.statusCode < 400 ? a(e) : c(new i({ + code: "UPLOAD_FAILED", + message: "文件上传失败" + })) + }, + fail(e) { + c(new i({ + code: e.code || "UPLOAD_FAILED", + message: e.message || e.errMsg || "文件上传失败" + })) + } + }); + "function" == typeof o && u && "function" == typeof u.onProgressUpdate && u.onProgressUpdate( + e => { + o({ + loaded: e.totalBytesSent, + total: e.totalBytesExpectedToSend + }) + }) + }) + } + uploadFile({ + filePath: e, + cloudPath: t, + fileType: s = "image", + onUploadProgress: n + }) { + if (!t) throw new i({ + code: "CLOUDPATH_REQUIRED", + message: "cloudPath不可为空" + }); + let r; + return this.getOSSUploadOptionsFromPath({ + filename: t + }).then(t => { + const { + url: o, + formData: i, + name: a, + fileUrl: c + } = t.result; + r = c; + const u = { + url: o, + formData: i, + name: a, + filePath: e, + fileType: s + }; + return this.uploadFileToOSS(Object.assign({}, u, { + onUploadProgress: n + })) + }).then(() => this.reportOSSUpload({ + id: t + })).then(t => new Promise((s, n) => { + t.success ? s({ + success: !0, + filePath: e, + fileID: r + }) : n(new i({ + code: "UPLOAD_FAILED", + message: "文件上传失败" + })) + })) + } +} +const Ee = { + init(e) { + const t = new Ie(e); + ["deleteFile", "getTempFileURL"].forEach(e => { + t[e] = o(t[e]).bind(t) + }); + const s = { + signInAnonymously: function() { + return t.authorize() + }, + getLoginState: function() { + return Promise.resolve(!1) + } + }; + return t.auth = function() { + return s + }, t.customAuth = t.auth, t + } +}; +let Oe, Ue; + +function be({ + name: e, + data: t, + spaceId: s, + provider: n +}) { + Oe || (Oe = function() { + const { + deviceId: e + } = uni.getSystemInfoSync(); + return { + PLATFORM: process.env.VUE_APP_PLATFORM, + OS: d, + APPID: h.appid, + LOCALE: u(), + DEVICEID: e, + CLIENT_SDK_VERSION: "1.0.1" + } + }(), Ue = { + ak: h.appid, + p: "android" === d ? "a" : "i", + ut: g(), + uuid: p() + }); + const r = JSON.parse(JSON.stringify(t || {})), + o = e, + i = s, + a = { + tencent: "t", + aliyun: "a" + } [n]; { + const e = Object.assign({}, Ue, { + fn: o, + sid: i, + pvd: a + }); + Object.assign(r, { + clientInfo: Oe, + uniCloudClientInfo: encodeURIComponent(JSON.stringify(e)) + }); + const { + deviceId: t + } = uni.getSystemInfoSync(); + r.uniCloudDeviceId = t + } + if (!r.uniIdToken) { + const e = y.getStorageSync("uni_id_token") || y.getStorageSync("uniIdToken"); + e && (r.uniIdToken = e) + } + return r +} + +function De({ + name: e, + data: t +}) { + const { + localAddress: s, + localPort: n + } = this, r = { + aliyun: "aliyun", + tencent: "tcb" + } [this.config.provider], o = this.config.spaceId, a = `http://${s}:${n}/system/check-function`, c = + `http://${s}:${n}/cloudfunctions/${e}`; + return new Promise((t, s) => { + y.request({ + method: "POST", + url: a, + data: { + name: e, + platform: process.env.VUE_APP_PLATFORM, + provider: r, + spaceId: o + }, + timeout: 3e3, + success(e) { + t(e) + }, + fail() { + t({ + data: { + code: "NETWORK_ERROR", + message: "连接本地调试服务失败,请检查客户端是否和主机在同一局域网下,自动切换为已部署的云函数。" + } + }) + } + }) + }).then(({ + data: e + } = {}) => { + const { + code: t, + message: s + } = e || {}; + return { + code: 0 === t ? 0 : t || "SYS_ERR", + message: s || "SYS_ERR" + } + }).then(({ + code: s, + message: n + }) => { + if (0 !== s) { + switch (s) { + case "MODULE_ENCRYPTED": + console.error(`此云函数(${e})依赖加密公共模块不可本地调试,自动切换为云端已部署的云函数`); + break; + case "FUNCTION_ENCRYPTED": + console.error(`此云函数(${e})已加密不可本地调试,自动切换为云端已部署的云函数`); + break; + case "ACTION_ENCRYPTED": + console.error(n || "需要访问加密的uni-clientDB-action,自动切换为云端环境"); + break; + case "NETWORK_ERROR": { + const e = "连接本地调试服务失败,请检查客户端是否和主机在同一局域网下"; + throw console.error(e), new Error(e) + } + case "SWITCH_TO_CLOUD": + break; + default: { + const e = `检测本地调试服务出现错误:${n},请检查网络环境或重启客户端再试`; + throw console.error(e), new Error(e) + } + } + return this.originCallFunction({ + name: e, + data: t + }) + } + return new Promise((s, n) => { + const a = be({ + name: e, + data: t, + provider: this.config.provider, + spaceId: o + }); + y.request({ + method: "POST", + url: c, + data: { + provider: r, + platform: process.env.VUE_APP_PLATFORM, + param: a + }, + success: ({ + statusCode: e, + data: t + } = {}) => !e || e >= 400 ? n(new i({ + code: t.code || "SYS_ERR", + message: t.message || "request:fail" + })) : s({ + result: t + }), + fail(e) { + n(new i({ + code: e.code || e.errCode || "SYS_ERR", + message: e.message || e.errMsg || "request:fail" + })) + } + }) + }) + }) +} +const Ce = [{ + rule: /fc_function_not_found|FUNCTION_NOT_FOUND/, + content: ",云函数[{functionName}]在云端不存在,请检查此云函数名称是否正确已经是否已上传到服务空间", + mode: "append" +}]; +var Re = /[\\^$.*+?()[\]{}|]/g, + xe = RegExp(Re.source); + +function qe(e, t, s) { + return e.replace(new RegExp((n = t) && xe.test(n) ? n.replace(Re, "\\$&") : n, "g"), s); + var n +} + +function Fe(e) { + const t = e.callFunction; + e.callFunction = function(e) { + let s; + s = this.isReady ? Promise.resolve() : this.initUniCloud; + const n = e.name; + return s.then(() => { + e.data = be({ + name: n, + data: e.data, + provider: this.config.provider, + spaceId: this.config.spaceId + }); + const s = { + aliyun: "aliyun", + tencent: "tcb" + } [this.config.provider]; + return new Promise((r, o) => { + t.call(this, e).then(e => { + if (this.config.useDebugFunction && e && e.requestId) { + const t = JSON.stringify({ + spaceId: this.config.spaceId, + functionName: n, + requestId: e.requestId + }); + console.log(`[${s}-request]${t}[/${s}-request]`) + } + r(e) + }).catch(t => { + if (this.config.useDebugFunction && t && t.requestId) { + const e = JSON.stringify({ + spaceId: this.config.spaceId, + functionName: n, + requestId: t.requestId + }); + console.log(`[${s}-request]${e}[/${s}-request]`) + } + t && t.message && (t.message = function({ + message: e = "", + extraInfo: t = {}, + formatter: s = [] + } = {}) { + for (let n = 0; n < s.length; n++) { + const { + rule: r, + content: o, + mode: i + } = s[n], a = e.match(r); + if (!a) continue; + let c = o; + for (let e = 1; e < a.length; e++) c = qe(c, `{$${e}}`, + a[e]); + for (const e in t) c = qe(c, `{${e}}`, t[e]); + switch (i) { + case "replace": + return c; + case "append": + default: + return e + c + } + } + return e + }({ + message: `[${e.name}]: ${t.message}`, + formatter: Ce, + extraInfo: { + functionName: n + } + })), o(t) + }) + }) + }) + }; + const s = e.callFunction; + e.originCallFunction = e.callFunction, e.callFunction = function(t) { + return o((function(t) { + let n; + return n = e.isReady ? Promise.resolve() : e.initUniCloud, n.then(() => "development" === + process.env.NODE_ENV && e.debugInfo && !e.debugInfo.forceRemote && process.env + .UNI_CLOUD_PROVIDER ? De.call(this, t) : s.call(this, t)) + })).call(this, t) + } +} +const Le = Symbol("CLIENT_DB_INTERNAL"); + +function Ne(e, t) { + return e.then = "DoNotReturnProxyWithAFunctionNamedThen", e._internalType = Le, new Proxy(e, { + get: (e, s, n) => function(e, t) { + return Object.prototype.hasOwnProperty.call(e, t) + }(e, s) || e[s] || "string" != typeof s ? e[s] : t.get(e, s, n) + }) +} +class Me extends Error { + constructor(e, t) { + super(e), this.code = t + } +} + +function $e(e) { + switch (t = e, Object.prototype.toString.call(t).slice(8, -1).toLowerCase()) { + case "array": + return e.map(e => $e(e)); + case "object": + return e._internalType === Le || Object.keys(e).forEach(t => { + e[t] = $e(e[t]) + }), e; + case "regexp": + return { + $regexp: { + source: e.source, + flags: e.flags + } + }; + case "date": + return { + $date: e.toISOString() + }; + default: + return e + } + var t +} + +function Ke() { + const e = y.getStorageSync("uni_id_token") || "", + t = e.split("."); + if (!e || 3 !== t.length) return { + uid: null, + role: [], + permission: [] + }; + let s; + try { + s = JSON.parse((n = t[1], decodeURIComponent(atob(n).split("").map((function(e) { + return "%" + ("00" + e.charCodeAt(0).toString(16)).slice(-2) + })).join("")))) + } catch (e) { + throw new Error("获取当前用户信息出错,详细错误信息为:" + e.message) + } + var n; + return s +} +var Be = t(s((function(e, t) { + Object.defineProperty(t, "__esModule", { + value: !0 + }); + const s = "chooseAndUploadFile:fail"; + + function n(e, t) { + return e.tempFiles.forEach((e, s) => { + e.name || (e.name = e.path.substring(e.path.lastIndexOf("/") + 1)), t && (e + .fileType = t), e.cloudPath = Date.now() + "_" + s + e.name.substring(e.name + .lastIndexOf(".")) + }), e.tempFilePaths || (e.tempFilePaths = e.tempFiles.map(e => e.path)), e + } + + function r(e, t, { + onChooseFile: s, + onUploadProgress: n + }) { + return t.then(e => { + if (s) { + const t = s(e); + if (void 0 !== t) return Promise.resolve(t).then(t => void 0 === t ? e : t) + } + return e + }).then(t => !1 === t ? { + errMsg: "chooseAndUploadFile:ok", + tempFilePaths: [], + tempFiles: [] + } : function(e, t, s = 5, n) { + (t = Object.assign({}, t)).errMsg = "chooseAndUploadFile:ok"; + const r = t.tempFiles, + o = r.length; + let i = 0; + return new Promise(a => { + for (; i < s;) c(); + + function c() { + const s = i++; + if (s >= o) return void(!r.find(e => !e.url && !e.errMsg) && a(t)); + const u = r[s]; + e.uploadFile({ + filePath: u.path, + cloudPath: u.cloudPath, + fileType: u.fileType, + onUploadProgress(e) { + e.index = s, e.tempFile = u, e.tempFilePath = u + .path, n && n(e) + } + }).then(e => { + u.url = e.fileID, s < o && c() + }).catch(e => { + u.errMsg = e.errMsg || e.message, s < o && c() + }) + } + }) + }(e, t, 5, n)) + } + t.initChooseAndUploadFile = function(e) { + return function(t = { + type: "all" + }) { + return "image" === t.type ? r(e, function(e) { + const { + count: t, + sizeType: r, + sourceType: o = ["album", "camera"], + extension: i + } = e; + return new Promise((e, a) => { + uni.chooseImage({ + count: t, + sizeType: r, + sourceType: o, + extension: i, + success(t) { + e(n(t, "image")) + }, + fail(e) { + a({ + errMsg: e.errMsg.replace( + "chooseImage:fail", s) + }) + } + }) + }) + }(t), t) : "video" === t.type ? r(e, function(e) { + const { + camera: t, + compressed: r, + maxDuration: o, + sourceType: i, + extension: a + } = e; + return new Promise((e, c) => { + uni.chooseVideo({ + camera: t, + compressed: r, + maxDuration: o, + sourceType: i, + extension: a, + success(t) { + const { + tempFilePath: s, + duration: r, + size: o, + height: i, + width: a + } = t; + e(n({ + errMsg: "chooseVideo:ok", + tempFilePaths: [s], + tempFiles: [{ + name: t + .tempFile && + t.tempFile + .name || "", + path: s, + size: o, + type: t + .tempFile && + t.tempFile + .type || "", + width: a, + height: i, + duration: r, + fileType: "video", + cloudPath: "" + }] + }, "video")) + }, + fail(e) { + c({ + errMsg: e.errMsg.replace( + "chooseVideo:fail", s) + }) + } + }) + }) + }(t), t) : r(e, function(e) { + const { + count: t, + extension: r + } = e; + return new Promise((e, o) => { + let i = uni.chooseFile; + if ("undefined" != typeof wx && "function" == typeof wx + .chooseMessageFile && (i = wx.chooseMessageFile), + "function" != typeof i) return o({ + errMsg: s + + " 请指定 type 类型,该平台仅支持选择 image 或 video。" + }); + i({ + type: "all", + count: t, + extension: r, + success(t) { + e(n(t)) + }, + fail(e) { + o({ + errMsg: e.errMsg.replace( + "chooseFile:fail", s) + }) + } + }) + }) + }(t), t) + } + } +}))); +const je = "manual"; +async function He(e, t) { + const s = `http://${e}:${t}/system/ping`; + try { + const e = await (n = { + url: s, + timeout: 500 + }, new Promise((e, t) => { + y.request({ + ...n, + success(t) { + e(t) + }, + fail(e) { + t(e) + } + }) + })); + return !(!e.data || 0 !== e.data.code) + } catch (e) { + return !1 + } + var n +} +let We = new class { + init(e) { + let t = {}; + const s = !1 !== e.debugFunction && "development" === process.env.NODE_ENV && ("h5" === process.env + .VUE_APP_PLATFORM && navigator.userAgent.indexOf("HBuilderX") > 0 || "app-plus" === process.env + .VUE_APP_PLATFORM); + switch (e.provider) { + case "tencent": + t = Ae.init(Object.assign(e, { + useDebugFunction: s + })); + break; + case "aliyun": + t = v.init(Object.assign(e, { + useDebugFunction: s + })); + break; + case "private": + t = Ee.init(Object.assign(e, { + useDebugFunction: s + })); + break; + default: + throw new Error("未提供正确的provider参数") + } + const n = process.env.UNICLOUD_DEBUG; + "development" === process.env.NODE_ENV && n && !n.code && (t.debugInfo = n), t.isReady = !1; + const r = t.auth(); + return t.initUniCloud = r.getLoginState().then(e => e ? Promise.resolve() : r.signInAnonymously()).then( + () => { + if ("development" === process.env.NODE_ENV && t.debugInfo) { + const { + address: e, + servePort: s + } = t.debugInfo; + return async function(e, t) { + let s; + for (let n = 0; n < e.length; n++) { + const r = e[n]; + if (await He(r, t)) { + s = r; + break + } + } + return { + address: s, + port: t + } + }(e, s) + } + return Promise.resolve() + }).then(({ + address: e, + port: s + } = {}) => { + if (e) t.localAddress = e, t.localPort = s; + else if (t.debugInfo) { + const e = "app-plus" === process.env.VUE_APP_PLATFORM ? "error" : "warn", + s = console[e]; + "remote" === t.debugInfo.initialLaunchType ? (t.debugInfo.forceRemote = !0, s( + "当前客户端和HBuilderX不在同一局域网下(或其他网络原因无法连接HBuilderX),uniCloud本地调试服务不对当前客户端生效。\n- 如果不使用uniCloud本地调试服务,请直接忽略此信息。\n- 如需使用uniCloud本地调试服务,请将客户端与主机连接到同一局域网下并重新运行到客户端。\n- 如果在HBuilderX开启的状态下切换过网络环境,请重启HBuilderX后再试" + )) : s( + "无法连接uniCloud本地调试服务,请检查当前客户端是否与主机在同一局域网下。\n- 如需使用uniCloud本地调试服务,请将客户端与主机连接到同一局域网下并重新运行到客户端。\n- 如果在HBuilderX开启的状态下切换过网络环境,请重启HBuilderX后再试" + ) + } + }).then(() => (function() { + if ("h5" !== process.env.VUE_APP_PLATFORM || "development" !== process.env.NODE_ENV) + return; + if (uni.getStorageSync("__LAST_DCLOUD_APPID") === h.appid) return; + uni.setStorageSync("__LAST_DCLOUD_APPID", h.appid), uni.removeStorageSync( + "uni_id_token") && (console.warn( + "检测到当前项目与上次运行到此端口的项目不一致,自动清理uni-id保存的token信息(仅开发调试时生效)"), uni + .removeStorageSync("uni_id_token"), uni.removeStorageSync( + "uni_id_token_expired")) + }(), new Promise(e => { + "quickapp-native" === process.env.VUE_APP_PLATFORM ? (d = "android", uni + .getStorage({ + key: "__DC_CLOUD_UUID", + success(t) { + l = t.data ? t.data : f(32), e() + } + })) : setTimeout(() => { + d = uni.getSystemInfoSync().platform, l = uni.getStorageSync( + "__DC_CLOUD_UUID") || f(32), e() + }, 0) + }))).then(() => { + t.isReady = !0 + }), Fe(t), + function(e) { + const t = e.uploadFile; + e.uploadFile = function(e) { + let s; + return s = this.isReady ? Promise.resolve() : this.initUniCloud, s.then(() => t.call( + this, e)) + }; + const s = e.uploadFile; + e.uploadFile = function(e) { + return o(s).call(this, e) + } + }(t), + function(e) { + e.database = function() { + if (this._database) return this._database; + const t = {}, + s = {}; + class n { + constructor(e, t, s) { + this.content = e, this.prevStage = t, this.actionName = s + } + toJSON() { + let e = this; + const t = [e.content]; + for (; e.prevStage;) e = e.prevStage, t.push(e.content); + return { + $db: t.reverse().map(e => ({ + $method: e.$method, + $param: e.$param + })) + } + } + get useAggregate() { + let e = this, + t = !1; + for (; e.prevStage;) { + e = e.prevStage; + const s = e.content.$method; + if ("aggregate" === s || "pipeline" === s) { + t = !0; + break + } + } + return t + } + get count() { + if (!this.useAggregate) return function() { + return this._send("count", Array.from(arguments)) + }; + const e = this; + return function() { + return i({ + $method: "count", + $param: $e(Array.from(arguments)) + }, e, e.actionName) + } + } + get() { + return this._send("get", Array.from(arguments)) + } + add() { + return this._send("add", Array.from(arguments)) + } + remove() { + return this._send("remove", Array.from(arguments)) + } + update() { + return this._send("update", Array.from(arguments)) + } + end() { + return this._send("end", Array.from(arguments)) + } + set() { + throw new Error("clientDB禁止使用set方法") + } + _send(n, r) { + const o = this.toJSON(); + return o.$db.push({ + $method: n, + $param: r + }), e.callFunction({ + name: "DCloud-clientDB", + data: { + action: this.actionName, + command: o + } + }).then(e => { + const { + code: n, + message: r, + token: o, + tokenExpired: i, + systemInfo: a = [] + } = e.result; + if (a) + for (let e = 0; e < a.length; e++) { + const { + level: t, + message: s, + detail: n + } = a[e], r = "app-plus" === process.env + .VUE_APP_PLATFORM && "warn" === t ? "error" : t, o = + console[r] || console.log; + let i = "[System Info]" + s; + n && (i = `${i}\n详细信息:${n}`), o(i) + } + return n ? Promise.reject(new Me(r, n)) : (o && i && t + .refreshToken && t.refreshToken.forEach(e => { + e({ + token: o, + tokenExpired: i + }) + }), o && i && s.refreshToken && s.refreshToken.forEach( + e => { + e({ + token: o, + tokenExpired: i + }) + }), Promise.resolve(e)) + }).catch(e => { + const t = new Me(e.message, e.code || "SYSTEM_ERROR"); + return s.error && s.error.forEach(e => { + e(t) + }), /fc_function_not_found|FUNCTION_NOT_FOUND/g.test(e + .message) && console.warn( + "clientDB未初始化,请在web控制台保存一次schema以开启clientDB"), Promise + .reject(e) + }) + } + } + const r = ["db.Geo", "db.command", "command.aggregate"]; + + function o(e, t) { + return r.indexOf(`${e}.${t}`) > -1 + } + + function i(e, t, s) { + return Ne(new n(e, t, s), { + get(e, t) { + let n = "db"; + return e && e.content && (n = e.content.$method), o(n, t) ? i({ + $method: t + }, e, s) : function() { + return i({ + $method: t, + $param: $e(Array.from(arguments)) + }, e, s) + } + } + }) + } + + function a({ + path: e, + method: t + }) { + return class { + constructor() { + this.param = Array.from(arguments) + } + toJSON() { + return { + $newDb: [...e.map(e => ({ + $method: e + })), { + $method: t, + $param: this.param + }] + } + } + } + } + const c = { + auth: { + on: (e, s) => { + t[e] = t[e] || [], t[e].indexOf(s) > -1 || t[e].push(s) + }, + off: (e, s) => { + t[e] = t[e] || []; + const n = t[e].indexOf(s); - 1 !== n && t[e].splice(n, 1) + } + }, + on: (e, t) => { + s[e] = s[e] || [], s[e].indexOf(t) > -1 || s[e].push(t) + }, + off: (e, t) => { + s[e] = s[e] || []; + const n = s[e].indexOf(t); - 1 !== n && s[e].splice(n, 1) + }, + env: Ne({}, { + get: (e, t) => ({ + $env: t + }) + }), + action: e => Ne({}, { + get: (t, s) => o("db", s) ? i({ + $method: s + }, null, e) : function() { + return i({ + $method: s, + $param: $e(Array.from(arguments)) + }, null, e) + } + }), + Geo: Ne({}, { + get: (e, t) => a({ + path: ["Geo"], + method: t + }) + }), + getCloudEnv: function(e) { + if ("string" != typeof e || !e.trim()) throw new Error( + "getCloudEnv参数错误"); + return { + $env: e.replace("$cloudEnv_", "") + } + }, + get serverDate() { + return a({ + path: [], + method: "serverDate" + }) + }, + get RegExp() { + return a({ + path: [], + method: "RegExp" + }) + } + }, + u = Ne(c, { + get: (e, t) => o("db", t) ? i({ + $method: t + }) : function() { + return i({ + $method: t, + $param: $e(Array.from(arguments)) + }) + } + }); + return this._database = u, u + } + }(t), + function(e) { + e.getCurrentUserInfo = Ke, e.chooseAndUploadFile = o(Be.initChooseAndUploadFile(e)) + }(t), t.init = this.init, t + } +}; +(() => { + { + let e = {}; + const cloudProvider = process.env.UNI_CLOUD_PROVIDER + const providers = cloudProvider && JSON.parse(cloudProvider)||[] + if (1 === providers.length) e = providers[0], We = We.init(e); + else { + const e = ["auth", "callFunction", "uploadFile", "deleteFile", "getTempFileURL", "downloadFile", + "database", "getCurrentUSerInfo" + ], + t = providers.length > 0 ? "应用有多个服务空间,请通过uniCloud.init方法指定要使用的服务空间" : + "应用未关联服务空间,请在cloudfunctions目录右键关联服务空间"; + e.forEach(e => { + We[e] = function() { + return console.error(t), Promise.reject(new i({ + code: "SYS_ERR", + message: t + })) + } + }) + } + Object.assign(We, { + get mixinDatacom() { + return e = We, { + props: { + localdata: { + type: Array, + default: () => [] + }, + options: { + type: [Object, Array], + default: () => ({}) + }, + collection: { + type: String, + default: "" + }, + action: { + type: String, + default: "" + }, + field: { + type: String, + default: "" + }, + orderby: { + type: String, + default: "" + }, + where: { + type: [String, Object], + default: "" + }, + pageData: { + type: String, + default: "add" + }, + pageCurrent: { + type: Number, + default: 1 + }, + pageSize: { + type: Number, + default: 20 + }, + getcount: { + type: [Boolean, String], + default: !1 + }, + gettree: { + type: [Boolean, String], + default: !1 + }, + gettreepath: { + type: [Boolean, String], + default: !1 + }, + startwith: { + type: String, + default: "" + }, + limitlevel: { + type: Number, + default: 10 + }, + groupby: { + type: String, + default: "" + }, + groupField: { + type: String, + default: "" + }, + distinct: { + type: [Boolean, String], + default: !1 + }, + foreignKey: { + type: String, + default: "" + }, + loadtime: { + type: String, + default: "auto" + }, + manual: { + type: Boolean, + default: !1 + } + }, + data: () => ({ + mixinDatacomLoading: !1, + mixinDatacomHasMore: !1, + mixinDatacomResData: [], + mixinDatacomErrorMessage: "", + mixinDatacomPage: {} + }), + created() { + this.mixinDatacomPage = { + current: this.pageCurrent, + size: this.pageSize, + count: 0 + }, this.$watch(() => { + var e = []; + return ["pageCurrent", "pageSize", "localdata", "collection", + "action", "field", "orderby", "where", "getont", + "getcount", "gettree", "groupby", "groupField", + "distinct" + ].forEach(t => { + e.push(this[t]) + }), e + }, (e, t) => { + if (this.loadtime === je) return; + let s = !1; + const n = []; + for (let r = 2; r < e.length; r++) e[r] !== t[r] && (n.push(e[ + r]), s = !0); + e[0] !== t[0] && (this.mixinDatacomPage.current = this + .pageCurrent), this.mixinDatacomPage.size = this + .pageSize, this.onMixinDatacomPropsChange(s, n) + }) + }, + methods: { + onMixinDatacomPropsChange(e, t) {}, + mixinDatacomEasyGet({ + getone: e = !1, + success: t, + fail: s + } = {}) { + this.mixinDatacomLoading || (this.mixinDatacomLoading = !0, this + .mixinDatacomErrorMessage = "", this.mixinDatacomGet().then( + s => { + this.mixinDatacomLoading = !1; + const { + data: n, + count: r + } = s.result; + this.getcount && (this.mixinDatacomPage.count = r), this + .mixinDatacomHasMore = n.length < this.pageSize; + const o = e ? n.length ? n[0] : void 0 : n; + this.mixinDatacomResData = o, t && t(o) + }).catch(e => { + this.mixinDatacomLoading = !1, this + .mixinDatacomErrorMessage = e, s && s(e) + })) + }, + mixinDatacomGet(t = {}) { + let s = e.database(); + const n = t.action || this.action; + n && (s = s.action(n)); + const r = t.collection || this.collection; + s = s.collection(r); + const o = t.where || this.where; + o && Object.keys(o).length && (s = s.where(o)); + const i = t.field || this.field; + i && (s = s.field(i)); + const a = t.foreignKey || this.foreignKey; + a && (s = s.foreignKey(a)); + const c = t.groupby || this.groupby; + c && (s = s.groupBy(c)); + const u = t.groupField || this.groupField; + u && (s = s.groupField(u)), !0 === (void 0 !== t.distinct ? t.distinct : + this.distinct) && (s = s.distinct()); + const h = t.orderby || this.orderby; + h && (s = s.orderBy(h)); + const l = void 0 !== t.pageCurrent ? t.pageCurrent : this + .mixinDatacomPage.current, + d = void 0 !== t.pageSize ? t.pageSize : this.mixinDatacomPage.size, + f = void 0 !== t.getcount ? t.getcount : this.getcount, + p = void 0 !== t.gettree ? t.gettree : this.gettree, + g = void 0 !== t.gettreepath ? t.gettreepath : this.gettreepath, + m = { + getCount: f + }, + y = { + limitLevel: void 0 !== t.limitlevel ? t.limitlevel : this + .limitlevel, + startWith: void 0 !== t.startwith ? t.startwith : this.startwith + }; + return p && (m.getTree = y), g && (m.getTreePath = y), s = s.skip(d * ( + l - 1)).limit(d).get(m), s + } + } + }; + var e + } + }) + } +})(); +var Ve = We; +export default Ve; diff --git a/packages/uni-cloud/lib/uni.config.js b/packages/uni-cloud/lib/uni.config.js index ff8261fedf..a16230c370 100644 --- a/packages/uni-cloud/lib/uni.config.js +++ b/packages/uni-cloud/lib/uni.config.js @@ -61,8 +61,10 @@ function init() { function define() { return { - 'process.env.UNI_CLOUD_PROVIDER': process.env.UNI_CLOUD_PROVIDER, - 'process.env.UNICLOUD_DEBUG': process.env.UNICLOUD_DEBUG, + 'process.env.UNI_CLOUD_PROVIDER': JSON.stringify( + process.env.UNI_CLOUD_PROVIDER + ), + 'process.env.UNICLOUD_DEBUG': JSON.stringify(process.env.UNICLOUD_DEBUG), } } diff --git a/packages/uni-h5/dist/uni-h5.es.js b/packages/uni-h5/dist/uni-h5.es.js index 525ca5eef0..d47fdf7eea 100644 --- a/packages/uni-h5/dist/uni-h5.es.js +++ b/packages/uni-h5/dist/uni-h5.es.js @@ -485,7 +485,7 @@ var safeAreaInsets = { onChange, offChange }; -var D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out = safeAreaInsets; +var out = safeAreaInsets; const onEventPrevent = /* @__PURE__ */ withModifiers(() => { }, ["prevent"]); const onEventStop = /* @__PURE__ */ withModifiers(() => { @@ -497,10 +497,10 @@ function getWindowOffset() { const left = parseInt(style.getPropertyValue("--window-left")); const right = parseInt(style.getPropertyValue("--window-right")); return { - top: top ? top + D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.top : 0, - bottom: bottom ? bottom + D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.bottom : 0, - left: left ? left + D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.left : 0, - right: right ? right + D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.right : 0 + top: top ? top + out.top : 0, + bottom: bottom ? bottom + out.bottom : 0, + left: left ? left + out.left : 0, + right: right ? right + out.right : 0 }; } function updateCssVar(cssVars) { @@ -1181,7 +1181,7 @@ function normalizePageMeta(pageMeta) { let offset = rpx2px(refreshOptions.offset); const {type} = navigationBar; if (type !== "transparent" && type !== "none") { - offset += NAVBAR_HEIGHT + D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.top; + offset += NAVBAR_HEIGHT + out.top; } refreshOptions.offset = offset; refreshOptions.height = rpx2px(refreshOptions.height); @@ -14352,7 +14352,7 @@ const getSystemInfoSync = /* @__PURE__ */ defineSyncApi("getSystemInfoSync", () const windowWidth = getWindowWidth(screenWidth); let windowHeight = window.innerHeight; const language = navigator.language; - const statusBarHeight = D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.top; + const statusBarHeight = out.top; let osname; let osversion; let model; @@ -14465,12 +14465,12 @@ const getSystemInfoSync = /* @__PURE__ */ defineSyncApi("getSystemInfoSync", () const system = `${osname} ${osversion}`; const platform = osname.toLocaleLowerCase(); const safeArea = { - left: D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.left, - right: windowWidth - D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.right, - top: D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.top, - bottom: windowHeight - D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.bottom, - width: windowWidth - D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.left - D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.right, - height: windowHeight - D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.top - D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.bottom + left: out.left, + right: windowWidth - out.right, + top: out.top, + bottom: windowHeight - out.bottom, + width: windowWidth - out.left - out.right, + height: windowHeight - out.top - out.bottom }; const {top: windowTop, bottom: windowBottom} = getWindowOffset(); windowHeight -= windowTop; @@ -14490,10 +14490,10 @@ const getSystemInfoSync = /* @__PURE__ */ defineSyncApi("getSystemInfoSync", () model, safeArea, safeAreaInsets: { - top: D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.top, - right: D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.right, - bottom: D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.bottom, - left: D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.left + top: out.top, + right: out.right, + bottom: out.bottom, + left: out.left } }; }); diff --git a/packages/uni-h5/src/view/components/ad/index.vue b/packages/uni-h5/src/view/components/ad/index.vue index 7c8e909967..177ad8d2a2 100644 --- a/packages/uni-h5/src/view/components/ad/index.vue +++ b/packages/uni-h5/src/view/components/ad/index.vue @@ -413,14 +413,3 @@ export default { } } - - diff --git a/packages/uni-h5/style/ad.css b/packages/uni-h5/style/ad.css new file mode 100644 index 0000000000..70dccdbc9a --- /dev/null +++ b/packages/uni-h5/style/ad.css @@ -0,0 +1,8 @@ +uni-ad { + display: block; + overflow: hidden; +} + +uni-ad[hidden] { + display: none; +} diff --git a/packages/vite-plugin-uni/src/config/index.ts b/packages/vite-plugin-uni/src/config/index.ts index 03d7ac1e4e..e685707985 100644 --- a/packages/vite-plugin-uni/src/config/index.ts +++ b/packages/vite-plugin-uni/src/config/index.ts @@ -12,7 +12,11 @@ import { createBuild } from './build' import { createOptimizeDeps } from './optimizeDeps' import { createDefine } from './define' -import { initPluginVueOptions } from '../vue' +import { + initPluginViteLegacyOptions, + initPluginVueJsxOptions, + initPluginVueOptions, +} from '../vue' function normalizeRoot(config: UserConfig) { return normalizePath(config.root ? path.resolve(config.root) : process.cwd()) @@ -29,12 +33,18 @@ export function createConfig( options.platform = (process.env.UNI_PLATFORM as UniApp.PLATFORM) || 'h5' options.inputDir = normalizeInputDir(config) options.vueOptions = initPluginVueOptions(options) + options.vueJsxOptions = initPluginVueJsxOptions(options) + options.viteLegacyOptions = initPluginViteLegacyOptions(options) options.compiler.init() const define = createDefine(options, config, env) - const { h5 } = parseManifestJsonOnce(options.inputDir) + let base = config.base + if (!base) { + const { h5 } = parseManifestJsonOnce(options.inputDir) + base = (h5 && h5.router && h5.router.base) || '' + } return { - base: (h5 && h5.router && h5.router.base) || '', - publicDir: false, + base, + publicDir: config.publicDir || false, define: extend(define, options.compiler.define()), resolve: createResolve(options, config), optimizeDeps: createOptimizeDeps(options), diff --git a/packages/vite-plugin-uni/src/configResolved/plugins/index.ts b/packages/vite-plugin-uni/src/configResolved/plugins/index.ts index e7b00f1e56..cb57d699e1 100644 --- a/packages/vite-plugin-uni/src/configResolved/plugins/index.ts +++ b/packages/vite-plugin-uni/src/configResolved/plugins/index.ts @@ -3,6 +3,8 @@ import { extend } from '@vue/shared' import { Plugin, ResolvedConfig } from 'vite' import { FilterPattern } from '@rollup/pluginutils' import vue from '@vitejs/plugin-vue' +import VueJsxPlugin from '@vitejs/plugin-vue-jsx' +import ViteLegacyPlugin from '@vitejs/plugin-legacy' import { API_DEPS_CSS } from '@dcloudio/uni-cli-shared' @@ -84,6 +86,15 @@ const uniInjectPluginOptions: Partial = { }) }, } +let vueJsxPlugin: typeof VueJsxPlugin | undefined +try { + vueJsxPlugin = require('@vitejs/plugin-vue-jsx') +} catch (e) {} + +let viteLegacyPlugin: typeof ViteLegacyPlugin | undefined +try { + viteLegacyPlugin = require('@vitejs/plugin-legacy') +} catch (e) {} export function initPlugins( config: ResolvedConfig, @@ -91,7 +102,6 @@ export function initPlugins( ) { const command = config.command const plugins = config.plugins as Plugin[] - addPlugin(plugins, vue(options.vueOptions), 'vite:uni', 'pre') addPlugin(plugins, uniResolveIdPlugin(options), 'vite:resolve', 'pre') @@ -160,6 +170,25 @@ export function initPlugins( if (command === 'build' && !config.build.ssr) { addPlugin(plugins, uniCopyPlugin(options), plugins.length) } + + if (viteLegacyPlugin && options.viteLegacyOptions !== false) { + ;( + viteLegacyPlugin(options.viteLegacyOptions) as unknown as Plugin[] + ).forEach((plugin) => { + if (!plugin.apply || plugin.apply === command) { + if (plugin.enforce === 'post') { + addPlugin(plugins, plugin, 'vite:import-analysis', 'pre') + } else { + addPlugin(plugins, plugin, 'vite:vue', 'pre') + } + } + }) + } + + if (vueJsxPlugin && options.vueJsxOptions !== false) { + addPlugin(plugins, vueJsxPlugin(options.vueJsxOptions), 'vite:vue', 'post') + } + if (process.env.DEBUG) { debugPlugin(plugins.length) debugPlugin(plugins.map((p) => (p as Plugin).name)) diff --git a/packages/vite-plugin-uni/src/configResolved/plugins/ssr.ts b/packages/vite-plugin-uni/src/configResolved/plugins/ssr.ts index 3901c6d7c2..1b1b4193f0 100644 --- a/packages/vite-plugin-uni/src/configResolved/plugins/ssr.ts +++ b/packages/vite-plugin-uni/src/configResolved/plugins/ssr.ts @@ -85,10 +85,7 @@ export function uniSSRPlugin( const chunk = bundle['entry-server.js'] as OutputChunk if (chunk) { chunk.code = - generateSSRDefineCode( - config.define!, - parseRpx2UnitOnce(options.inputDir) - ) + + generateSSRDefineCode(config, parseRpx2UnitOnce(options.inputDir)) + '\n' + chunk.code } diff --git a/packages/vite-plugin-uni/src/index.ts b/packages/vite-plugin-uni/src/index.ts index 6f43fbf9f5..501228b93b 100644 --- a/packages/vite-plugin-uni/src/index.ts +++ b/packages/vite-plugin-uni/src/index.ts @@ -1,6 +1,8 @@ import { Plugin, ResolvedConfig, ViteDevServer } from 'vite' import { UniCompiler, initUniCompiler } from '@dcloudio/uni-cli-shared' import { Options as VueOptions } from '@vitejs/plugin-vue' +import { Options as ViteLegacyOptions } from '@vitejs/plugin-legacy' +import { VueJSXPluginOptions } from '@vue/babel-plugin-jsx' import { createConfig } from './config' import { createConfigResolved } from './configResolved' @@ -10,6 +12,8 @@ export interface VitePluginUniOptions { inputDir?: string outputDir?: string vueOptions?: VueOptions + vueJsxOptions?: VueJSXPluginOptions + viteLegacyOptions?: ViteLegacyOptions } export interface VitePluginUniResolvedOptions extends VitePluginUniOptions { base: string diff --git a/packages/vite-plugin-uni/src/utils/features.ts b/packages/vite-plugin-uni/src/utils/features.ts index a8e4f6f760..968a115ef9 100644 --- a/packages/vite-plugin-uni/src/utils/features.ts +++ b/packages/vite-plugin-uni/src/utils/features.ts @@ -1,7 +1,7 @@ import fs from 'fs' import path from 'path' import { ConfigEnv } from 'vite' -import { extend, isArray } from '@vue/shared' +import { extend, isArray, isString } from '@vue/shared' interface ProjectFeatures {} interface PagesFeatures { @@ -278,7 +278,12 @@ export function initFeatures(options: InitFeaturesOptions) { } // ssr nodejs features if (options.ssr) { - extend(globalThis, features) + Object.keys(features).forEach((name) => { + const value = features[name as keyof typeof features] + extend(globalThis, { + [name]: isString(value) ? JSON.parse(value) : value, + }) + }) } return features } diff --git a/packages/vite-plugin-uni/src/utils/ssr.ts b/packages/vite-plugin-uni/src/utils/ssr.ts index 182fe518b8..9f76610e67 100644 --- a/packages/vite-plugin-uni/src/utils/ssr.ts +++ b/packages/vite-plugin-uni/src/utils/ssr.ts @@ -34,7 +34,9 @@ export function isSsrManifest( } export function initSsrDefine(config: ResolvedConfig) { - extend(globalThis, { __IMPORT_META_ENV_BASE_URL__: config.env.BASE_URL }) + return extend(globalThis, { + __IMPORT_META_ENV_BASE_URL__: config.env.BASE_URL, + }) } function serializeDefine(define: Record): string { @@ -42,21 +44,29 @@ function serializeDefine(define: Record): string { for (const key in define) { const val = define[key] res += `${JSON.stringify(key)}: ${ - typeof val === 'string' && !key.startsWith('process.env.') // process.env.* 必须序列化为字符串 - ? `(${val})` - : JSON.stringify(val) + typeof val === 'string' ? `(${val})` : JSON.stringify(val) }, ` } return res + `}` } export function generateSSRDefineCode( - define: Record, + config: ResolvedConfig, { unit, unitRatio, unitPrecision }: Rpx2UnitOptions ): string { return fs .readFileSync(path.join(__dirname, '../../lib/ssr/define.js'), 'utf8') - .replace('__DEFINES__', serializeDefine(define)) + .replace( + '__DEFINES__', + serializeDefine( + extend( + { + __IMPORT_META_ENV_BASE_URL__: JSON.stringify(config.env.BASE_URL), + }, + config.define! + ) + ) + ) .replace('__UNIT__', JSON.stringify(unit)) .replace('__UNIT_RATIO__', JSON.stringify(unitRatio)) .replace('__UNIT_PRECISION__', JSON.stringify(unitPrecision)) diff --git a/packages/vite-plugin-uni/src/vue/index.ts b/packages/vite-plugin-uni/src/vue/index.ts index 565f93a97b..9ba170be69 100644 --- a/packages/vite-plugin-uni/src/vue/index.ts +++ b/packages/vite-plugin-uni/src/vue/index.ts @@ -1 +1 @@ -export * from './compilerOptions' +export * from './options' diff --git a/packages/vite-plugin-uni/src/vue/compilerOptions.ts b/packages/vite-plugin-uni/src/vue/options.ts similarity index 75% rename from packages/vite-plugin-uni/src/vue/compilerOptions.ts rename to packages/vite-plugin-uni/src/vue/options.ts index f6bc207cec..5b5143de8e 100644 --- a/packages/vite-plugin-uni/src/vue/compilerOptions.ts +++ b/packages/vite-plugin-uni/src/vue/options.ts @@ -1,7 +1,7 @@ -import { extend, isArray } from '@vue/shared' +import { extend, hasOwn, isArray } from '@vue/shared' import { CompilerOptions, SFCTemplateCompileOptions } from '@vue/compiler-sfc' -import { isNativeTag } from '@dcloudio/uni-shared' +import { isCustomElement, isNativeTag } from '@dcloudio/uni-shared' import { EXTNAME_VUE_RE, parseCompatConfigOnce } from '@dcloudio/uni-cli-shared' import { matchMedia } from './transforms/matchMedia' @@ -67,3 +67,20 @@ export function initPluginVueOptions(options: VitePluginUniResolvedOptions) { compilerOptions.nodeTransforms.unshift(matchMedia) return vueOptions } + +export function initPluginVueJsxOptions(options: VitePluginUniResolvedOptions) { + const vueJsxOptions = options.vueJsxOptions || (options.vueJsxOptions = {}) + if (!hasOwn(vueJsxOptions, 'optimize')) { + vueJsxOptions.optimize = true + } + vueJsxOptions.isCustomElement = isCustomElement + return vueJsxOptions +} + +export function initPluginViteLegacyOptions( + options: VitePluginUniResolvedOptions +) { + const viteLegacyOptions = + options.viteLegacyOptions || (options.viteLegacyOptions = {}) + return viteLegacyOptions +} diff --git a/yarn.lock b/yarn.lock index f21c3d9962..c1319e8b30 100644 --- a/yarn.lock +++ b/yarn.lock @@ -262,6 +262,11 @@ "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-typescript" "^7.12.13" +"@babel/standalone@^7.13.12": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.14.2.tgz#e198b3bc830efca0856ff977fba646ab30f90192" + integrity sha512-GGq4uU6jCZDXxHFhXtYrS/h0/W5JoiKmkBXyCM+XuL1P7lRCaQ7Ro3F0pkW2dbLknW/fg1UyAzlg0Jz1m4JBww== + "@babel/template@^7.0.0", "@babel/template@^7.12.13", "@babel/template@^7.3.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" @@ -935,6 +940,17 @@ "@typescript-eslint/types" "4.23.0" eslint-visitor-keys "^2.0.0" +"@vitejs/plugin-legacy@^1.3.4": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-legacy/-/plugin-legacy-1.3.4.tgz#0618bc2e92af97deb07dfb2d32b7aa2528123d66" + integrity sha512-T6+eo9Je05i45atk/e2ONiaULf5IFYgQ7UOQN9mu9lITVk9Oxe7v5h56vN8ZsN1g52/UBXRlG99nQw4CgKJFDQ== + dependencies: + "@babel/standalone" "^7.13.12" + core-js "^3.8.2" + magic-string "^0.25.7" + regenerator-runtime "^0.13.7" + systemjs "^6.8.3" + "@vitejs/plugin-vue-jsx@^1.1.4": version "1.1.4" resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-1.1.4.tgz#3af194202f9ed38a7384f7a7c72f5b66ce863859" @@ -1721,6 +1737,11 @@ copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" +core-js@^3.8.2: + version "3.12.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.12.1.tgz#6b5af4ff55616c08a44d386f1f510917ff204112" + integrity sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw== + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -4514,6 +4535,11 @@ readable-stream@~1.0.26, readable-stream@~1.0.26-4: isarray "0.0.1" string_decoder "~0.10.x" +regenerator-runtime@^0.13.7: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -5159,6 +5185,11 @@ symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" +systemjs@^6.8.3: + version "6.9.0" + resolved "https://registry.yarnpkg.com/systemjs/-/systemjs-6.9.0.tgz#f01a0093d4d70332fff59f2e5ff385de28284ff5" + integrity sha512-THLzcb7WzoW0I+tHB4PQge0BqqN+CAUQJ9gPc1MieqD1gnhxNUKYrhRlN5ov94saOYVVR5NZFQqQhnxi9/WEGg== + table@^6.0.4: version "6.7.0" resolved "https://registry.yarnpkg.com/table/-/table-6.7.0.tgz#26274751f0ee099c547f6cb91d3eff0d61d155b2" -- GitLab