@seayoo-web/request 0.7.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -4
- package/dist/inc/main.d.ts +1 -1
- package/dist/inc/rule.d.ts +1 -0
- package/dist/inc/type.d.ts +4 -2
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/node.cjs +1 -1
- package/dist/node.mjs +1 -1
- package/dist/wx.cjs +1 -1
- package/dist/wx.mjs +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
## 特性
|
|
13
13
|
|
|
14
|
-
1. 默认基于 fetch
|
|
14
|
+
1. 默认基于 fetch,请求和响应解析均基于 json 或 text(不支持其他格式)
|
|
15
15
|
2. 支持重试配置 maxRetry / retryResolve / retryInterval
|
|
16
16
|
3. 支持响应结果处理策略 responseRule 和通用提示配置
|
|
17
17
|
4. 支持类型守卫 typeGuard
|
|
@@ -205,11 +205,11 @@ setConfig({ timeout: 5000 })
|
|
|
205
205
|
|
|
206
206
|
说明:两次重试的间隔策略,设置为数字(单位 ms)表示固定间隔,设置为函数则可以自定义间隔;其中 retryIndex 从 1 开始,最大为 10;最小时间间隔为 100ms;
|
|
207
207
|
|
|
208
|
-
###
|
|
208
|
+
### requestHandler
|
|
209
209
|
|
|
210
|
-
类型:null | ((
|
|
210
|
+
类型:null | ((headers: Record<string, string>, params: Record<string, string>, method: string, url: string) => void)
|
|
211
211
|
|
|
212
|
-
说明:发送前用于修改
|
|
212
|
+
说明:发送前用于修改 request headers 或 params 的函数,headers 和 params 为引用数据,可以直接追加字段和内容;通常用于全局追加自定义认证信息;
|
|
213
213
|
|
|
214
214
|
### errorHandler
|
|
215
215
|
|
|
@@ -217,6 +217,12 @@ setConfig({ timeout: 5000 })
|
|
|
217
217
|
|
|
218
218
|
说明:全局错误处理函数,仅仅在 http status 错误时触发
|
|
219
219
|
|
|
220
|
+
### responseHandler
|
|
221
|
+
|
|
222
|
+
类型:null | ((result: IResponseResult, method: string, url: string) => void)
|
|
223
|
+
|
|
224
|
+
说明:请求完成后用于统一检查响应结果,不同于 errorHandler 触发时机,请求任意状态均会触发此函数
|
|
225
|
+
|
|
220
226
|
### messageHandler
|
|
221
227
|
|
|
222
228
|
类型:null | ((isError: boolean, message: string) => void)
|
package/dist/inc/main.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export declare class NetRequestHandler {
|
|
|
17
17
|
*/
|
|
18
18
|
private guard;
|
|
19
19
|
/**
|
|
20
|
-
* 修改默认请求配置: baesURL / timeout / credentials / errorHandler / messageHandler / logHandler / responseRule
|
|
20
|
+
* 修改默认请求配置: baesURL / timeout / credentials / errorHandler / messageHandler / responseHandler / logHandler / responseRule
|
|
21
21
|
*/
|
|
22
22
|
setConfig(config: IGlobalConfig): void;
|
|
23
23
|
/**
|
package/dist/inc/rule.d.ts
CHANGED
|
@@ -8,4 +8,5 @@ export declare function analyseResponse(status: number, statusText: string, resp
|
|
|
8
8
|
* 将 Response Rules 转化成为自然描述语言
|
|
9
9
|
*/
|
|
10
10
|
export declare const getResponseRulesDescription: (rules: IResponseRule) => string;
|
|
11
|
+
export declare function statusOK(status: number): boolean;
|
|
11
12
|
export {};
|
package/dist/inc/type.d.ts
CHANGED
|
@@ -44,10 +44,12 @@ export type IGlobalConfig = {
|
|
|
44
44
|
baseURL?: string;
|
|
45
45
|
/** 用于 get 请求的缓存时长,单位 ms,建议不小于 100 */
|
|
46
46
|
cacheTTL?: number;
|
|
47
|
-
/** 全局
|
|
48
|
-
|
|
47
|
+
/** 全局 request 处理函数,headers 和 params 为引用型数据可直接修改 */
|
|
48
|
+
requestHandler?: null | ((headers: Record<string, string>, params: Record<string, string>, method: string, url: string) => void);
|
|
49
49
|
/** 全局错误处理函数,仅仅在 statusCode 错误时触发 */
|
|
50
50
|
errorHandler?: null | ((status: number, method: string, url: string) => void);
|
|
51
|
+
/** 全局响应处理函数,任意状态都会触发 */
|
|
52
|
+
responseHandler?: null | ((result: IResponseResult, method: string, url: string) => void);
|
|
51
53
|
/** 全局消息提示函数 */
|
|
52
54
|
messageHandler?: null | ((isError: boolean, message: string) => void);
|
|
53
55
|
/** 全局日志打印函数 */
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=require("@seayoo-web/utils");function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},t.apply(this,arguments)}function r(e,t,r){var s=Object.assign({method:"GET"},r),o=s.body instanceof FormData,a=o?"POST":s.method;"GET"!==a&&"HEAD"!==a&&"DELETE"!==a||void 0!==s.body&&(console.warn("request body is invalid with method get, head, delete"),delete s.body);var i=Object.assign(o?{}:{"Content-Type":"application/json;charset=utf-8"},s.headers),u=t.get("headerHandler");u&&u(i,a,e);var c=s.params||{},l={};return Object.keys(c).forEach(function(e){var t;void 0!==c[e]&&(l[e]="string"==typeof(t=c[e])?t:Array.isArray(t)?t.join(","):t+"")}),{method:a,body:n(s.body),params:l,headers:i,timeout:s.timeout||t.get("timeout"),credentials:s.credentials||t.get("credentials")}}function n(e){if(e)return e instanceof Blob||e instanceof ArrayBuffer||e instanceof FormData||e instanceof URLSearchParams||"string"==typeof e?e:JSON.stringify(e)}var s=function(e,t,n){try{var s=r(e,t,n),o=new URL(t.getFullUrl(e)),a=s.params;a instanceof Object&&Object.keys(a).forEach(function(e){return o.searchParams.set(e,a[e])});var i=new AbortController,u=s.timeout>0?setTimeout(function(){return i.abort()},s.timeout):null,c=new Request(o,{method:s.method,headers:new Headers(s.headers),body:s.body,credentials:s.credentials,signal:s.timeout>0?i.signal:null,redirect:"follow"});return Promise.resolve(fetch(c).then(function(e){try{var t=function(e){return{url:u,method:i,status:a,statusText:n,headers:r,body:e}},r=Object.fromEntries(e.headers.entries()),n=e.statusText,a=e.status,i=s.method,u=o.toString();return Promise.resolve("HEAD"===s.method?t(""):Promise.resolve(e.text()).then(t))}catch(e){return Promise.reject(e)}}).catch(function(e){return{url:o.toString(),method:s.method,status:-1,statusText:"NetworkError",body:String(e)}}).finally(function(){null!==u&&clearTimeout(u)}))}catch(e){return Promise.reject(e)}},o=function t(r,n,s,o,a){try{var i,u,c=a||0,l=Math.min(10,null!=(i=null==o?void 0:o.maxRetry)?i:s.get("maxRetry")),d=null!=(u=null==o?void 0:o.retryResolve)?u:s.get("retryResolve"),h=s.get("logHandler")||e.noop;h({type:"prepear",url:n,method:(null==o?void 0:o.method)||"GET",retry:c,maxRetry:l,message:0===c?"start":"retry "+c+"/"+l+" start",options:o});var f=Date.now();return Promise.resolve(r(n,s,o)).then(function(a){var i,u=a.status,g=Date.now()-f,m="[cost "+g+"]["+u+"] "+(u<0?a.body:"");if(h({type:"finished",url:n,method:a.method,retry:c,maxRetry:l,message:0===c?"finish "+m:"retry "+c+"/"+l+" finish "+m,response:a,cost:g}),!l||"network"===d&&u>0||"status"===d&&u>=200&&u<400||c>=l)return a;var v=null!=(i=null==o?void 0:o.retryInterval)?i:s.get("retryInterval");return Promise.resolve(e.sleep(Math.max(100,"function"==typeof v?v(c+1):v))).then(function(){return Promise.resolve(t(r,n,s,o,c+1))})})}catch(e){return Promise.reject(e)}},a="message",i="data";function u(t,r){if(void 0===r&&(r=a),!e.isJsonLike(t))return"";var n,s=e.parseJSON(t);return s&&e.isStringRecord(s)&&r in s?(n=s[r])?"string"==typeof n?n:JSON.stringify(n):"":t}function c(e){var t=e.match(/<title>([^<]+)<\/title>/i);if(t)return t[1];var r=e.match(/<message>([^<]+)<\/message>/i);return r?r[1]:""}function l(r,n,s,o){if(r.status<0)return d({ok:!1,status:r.status,code:r.statusText,headers:{},message:"",data:null},r.method+" "+n+" "+r.statusText,r.method,n,s,o);var l;(r.status<200||r.status>=400)&&(null==(l=s.get("errorHandler"))||l(r.status,r.method,n));var h,f,g,m,v,p=t({},(h=r.status,f=r.statusText,g=r.body,m=s.get("responseRule"),v=(null==o?void 0:o.responseRule)||m,h>=200&&h<400?function(t,r,n,s){var o=t||{resolve:"body"},u={ok:!0,code:n,message:"",data:null};if(202===r||204===r||!s)return u;if("body"===o.resolve)return u.data=e.isJsonLike(s)?e.parseJSON(s):s,u;var c=e.parseJSON(s);if(!c||!e.isStringRecord(c))return u.ok=!1,u.code="ResponseFormatError",u.message="响应内容无法格式化为 Object",u;var l=o.statusField||"code",d=o.statusOKValue||"0",h=o.dataField||i,f=o.messageField||a,g=o.ignoreMessage||"";if(!(l in c))return u.ok=!1,u.code="ResponseFieldMissing",u.message="响应内容找不到状态字段 "+l,u;var m=c[l]+"";return u.ok=m===d,u.code=m,u.message=f in c?c[f]+"":"",u.data=h in c?c[h]:null,g&&u.message&&(Array.isArray(g)&&g.includes(u.message)||"string"==typeof g&&u.message===g)&&(u.message=""),u}(v.ok||m.ok,h,f,g):function(e,t,r){var n=e||{resolve:"json",messageField:a},s={ok:!1,code:t,message:r,data:null};switch(n.resolve){case"auto":s.message=c(r)||u(r,n.messageField)||r;break;case"body":s.message=c(r)||r;break;case"json":s.message=u(r,n.messageField)}return s}(v.failed||m.failed,f,g)),{status:r.status,headers:Object.fromEntries(Object.entries(r.headers||{}).map(function(e){var t=e[1];return[e[0].toLowerCase(),t]}))});return d(p,p.ok?p.message:r.method+" "+n+" ["+p.code+"] "+(p.message||r.statusText),r.method,n,s,o)}function d(e,t,r,n,s,o){return!1!==(null==o?void 0:o.message)&&s.showMessage(e.ok,"function"==typeof(null==o?void 0:o.message)?o.message(e,r,n,t):t),e}var h=/*#__PURE__*/function(){function t(e){this.config={baseURL:"",maxRetry:0,retryInterval:1e3,retryResolve:"network",timeout:5e3,cacheTTL:500,credentials:"same-origin",responseRule:{ok:{resolve:"body"},failed:{resolve:"json",messageField:"message"}}},e&&this.set(e)}var r=t.prototype;return r.set=function(t){if(t.baseURL&&!/^\/.+/.test(t.baseURL)&&!e.isFullURL(t.baseURL))throw console.warn("baseURL 需要以 / 开头,或者是完整的 url 地址"),new Error("BaseURLError");Object.assign(this.config,t)},r.get=function(e){return this.config[e]},r.getFullUrl=function(t){return t.startsWith("/")?e.getFullURL(t):e.getFullURL(t,this.config.baseURL)},r.showMessage=function(e,t){this.config.messageHandler&&t&&this.config.messageHandler(e,t)},t}(),f=function(n,s,o){try{var a=t({},r(n,s,o),{onUploadProgress:null==o?void 0:o.onUploadProgress}),i=a.method,u=a.onUploadProgress||function(){return 0},c=e.addParamsToString(s.getFullUrl(n),a.params);return Promise.resolve(new Promise(function(e){var t=1,r=0,s=new XMLHttpRequest;s.upload.addEventListener("progress",function(e){t=e.total,u({total:e.total,loaded:e.loaded})}),s.addEventListener("load",function(){r&&clearTimeout(r),u({loaded:t,total:t}),e({url:c,method:i,status:s.status,statusText:s.statusText,headers:g(s),body:"HEAD"===i?"":s.responseText})}),s.addEventListener("error",function(){r&&clearTimeout(r),e({url:c,method:i,status:-2,statusText:"Failed",body:"Request "+i+" "+n+" Failed"})}),s.addEventListener("abort",function(){r&&clearTimeout(r),e({url:c,method:i,status:-3,statusText:"Aborted",body:"Request "+i+" "+n+" Aborted"})}),Object.entries(a.headers).forEach(function(e){s.setRequestHeader(e[0],e[1])}),"include"===a.credentials&&(s.withCredentials=!0),s.open(i,c,!0),a.body&&s.send(a.body),a.timeout>0&&(r=setTimeout(function(){s.abort()},a.timeout))}))}catch(e){return Promise.reject(e)}};function g(e){var t={};if(!e)return t;var r=e.getAllResponseHeaders();return r&&"null"!==r&&r.replace(/\r/g,"").split("\n").forEach(function(e){var r=e.trim();if(r){var n=r.split(":"),s=n[0].trim();s&&(t[s]=(n[1]||"").trim())}}),t}var m=function(e,t,r){try{return Promise.resolve(o(s,e,t,r)).then(function(n){return l(n,e,t,r)})}catch(e){return Promise.reject(e)}},v=function(e,t,r){try{return Promise.resolve(o(f,e,t,r)).then(function(n){return l(n,e,t,r)})}catch(e){return Promise.reject(e)}},p=/*#__PURE__*/function(){function e(e){void 0===e&&(e=500),this.ttl=void 0,this.cache=void 0,this.cache={},this.ttl=Math.max(e,0)}var t=e.prototype;return t.getKey=function(e,t){return e+Object.keys(t||{}).sort().map(function(e){return e+"#"+(null==t?void 0:t[e])}).join(",")},t.updateTTL=function(e){this.ttl=Math.max(e,0)},t.get=function(e){if(0===this.ttl)return null;var t=this.cache[e];return t?t.ttl<Date.now()?(delete this.cache[e],null):t.res:null},t.set=function(e,t){0!==this.ttl&&(this.cache[e]={ttl:Date.now()+this.ttl,res:t})},e}(),y=/*#__PURE__*/function(){function t(e,t){this.agent=void 0,this.config=void 0,this.cache=void 0,this.config=new h(t),this.agent=e,this.cache=new p(this.config.get("cacheTTL")),this.setConfig=this.setConfig.bind(this),this.getConfig=this.getConfig.bind(this),this.get=this.get.bind(this),this.post=this.post.bind(this),this.del=this.del.bind(this),this.patch=this.patch.bind(this),this.put=this.put.bind(this)}var r=t.prototype;return r.exec=function(e,t){try{return Promise.resolve(this.agent(e,this.config,t))}catch(e){return Promise.reject(e)}},r.guard=function(t,r,n){try{return Promise.resolve(function(t,r,n,s){if(r.ok&&!e.isEmpty(r.data)&&null!==s){var o=e.getTypeGuard(s,"响应数据未能正确识别");if(o.guard(r.data))return r;console.error("response type check faild",t,r.data),n.showMessage(!0,t+" "+o.message)}return r.data=null,r}(t,r,this.config,n))}catch(e){return Promise.reject(e)}},r.setConfig=function(e){this.config.set(e),this.cache.updateTTL(this.config.get("cacheTTL"))},r.getConfig=function(e){return this.config.get(e)},r.head=function(e,t){try{var r=this,n=Object.assign({},t||null);n.method="HEAD";var s=r.guard;return Promise.resolve(r.exec(e,n)).then(function(t){return s.call(r,e,t,null)})}catch(e){return Promise.reject(e)}},r.get=function(e,t,r){try{var n,s=function(r){if(n)return r;var s=o.exec(e,a);o.cache.set(i,s);var u=o.guard;return Promise.resolve(s).then(function(r){return u.call(o,e,r,t||null)})},o=this,a=Object.assign({},r||null);a.method="GET";var i=o.cache.getKey(e,a.params),u=o.cache.get(i),c=function(){if(u){var r=o.guard;return Promise.resolve(u).then(function(s){var a=r.call(o,e,s,t||null);return n=1,a})}}();return Promise.resolve(c&&c.then?c.then(s):s(c))}catch(e){return Promise.reject(e)}},r.post=function(e,t,r,n){try{var s=this,o=Object.assign({},n||null);o.method="POST",o.body=t;var a=s.guard;return Promise.resolve(s.exec(e,o)).then(function(t){return a.call(s,e,t,r||null)})}catch(e){return Promise.reject(e)}},r.del=function(e,t,r){try{var n=this,s=Object.assign({},r||null);s.method="DELETE";var o=n.guard;return Promise.resolve(n.exec(e,s)).then(function(r){return o.call(n,e,r,t||null)})}catch(e){return Promise.reject(e)}},r.put=function(e,t,r,n){try{var s=this,o=Object.assign({},n||null);o.method="PUT",o.body=t;var a=s.guard;return Promise.resolve(s.exec(e,o)).then(function(t){return a.call(s,e,t,r||null)})}catch(e){return Promise.reject(e)}},r.patch=function(e,t,r,n){try{var s=this,o=Object.assign({},n||null);o.method="PATCH",o.body=t;var a=s.guard;return Promise.resolve(s.exec(e,o)).then(function(t){return a.call(s,e,t,r||null)})}catch(e){return Promise.reject(e)}},t}();function b(e){return"fetch"in window?new y(m,e):new y(v,e)}var j=b(),P=j.setConfig,w=j.head,T=j.get,x=j.post,R=j.del,O=j.put,k=j.patch;exports.NetRequest=b,exports.del=R,exports.get=T,exports.getResponseRulesDescription=function(e){var t=[],r=e.failed||{resolve:"json"};switch(t.push("- 当http状态码 <200 或者 >=400 时"),r.resolve){case"body":t.push(" 将响应内容格式化为字符串并作为错误消息");break;case"json":t.push(" 将响应解析为json,并读取 "+(r.messageField||a)+" 作为错误消息");break;case"auto":t.push(" 尝试解析为json,并读取 "+(r.messageField||a)+" 作为错误消息,如果失败则将响应内容作为错误消息")}var n=e.ok||{resolve:"body"};switch(t.push("- 当http状态码 >=200 并且 <400 时"),n.resolve){case"body":t.push(" 将响应解析为 json,并作为数据内容返回");break;case"json":t.push(" 将响应解析为 json,读取 "+(n.dataField||i)+" 作为响应数据,读取 "+(n.messageField||a)+" 作为提示消息"),n.statusField&&n.statusOKValue&&t.push(" 当 "+n.statusField+" 为 "+n.statusOKValue+" 时是成功提示,否则是错误消息"),n.ignoreMessage&&t.push(" 并忽略以下消息:"+n.ignoreMessage)}return t.join("\n")},exports.head=w,exports.jsonp=function(t,r,n){void 0===n&&(n={});try{var s=window;"callback"in n||(n.callback="jsonxData"+Math.random().toString(16).slice(2));var o=n.callback+"";if(!t)return Promise.resolve(null);var a=e.addParamsToString(t,n,!0);return Promise.resolve(new Promise(function(n){s[o]=function(e){if(o in window&&delete s[o],r(e))return e;console.warn("response type check faild",t,e),n(null)},e.loadJS(a).catch(function(){n(null),delete s[o]})}))}catch(e){return Promise.reject(e)}},exports.jsonx=function(t,r,n){void 0===n&&(n={});try{var s=window;return"var"in n||(n.var="jsonxData"+Math.random().toString(16).slice(2)),Promise.resolve(t?e.loadJS(e.addParamsToString(t,n,!0)).then(function(){var e=s[n.var+""];return r(e)?e:(console.warn("response type check faild",t,e),null)}).catch(function(){return null}):null)}catch(e){return Promise.reject(e)}},exports.patch=k,exports.post=x,exports.put=O,exports.setGlobalConfig=P,exports.upload=function(e,r,n){try{return Promise.resolve(function(e,r,n,s){try{var o=new FormData,a=null==n?void 0:n.body,i=t({},r);for(var u in a instanceof Object&&Object.entries(a).forEach(function(e){var t=e[0],r=e[1];r instanceof Blob?i[t]=r:Array.isArray(r)?r.forEach(function(e,r){o.append(t+"["+r+"]",String(e))}):o.append(t,String(r))}),i)o.append(u,i[u]);var c=new h(s);return Promise.resolve(f(e,c,t({},n,{method:"POST",body:o}))).then(function(t){return l(t,e,c,n)})}catch(e){return Promise.reject(e)}}(e,r,n,{baseURL:j.getConfig("baseURL"),logHandler:j.getConfig("logHandler"),errorHandler:j.getConfig("errorHandler"),headerHandler:j.getConfig("headerHandler"),messageHandler:j.getConfig("messageHandler")}))}catch(e){return Promise.reject(e)}};
|
|
1
|
+
var e=require("@seayoo-web/utils");function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},t.apply(this,arguments)}function r(e,t,r){var s,o=Object.assign({method:"GET"},r),a=o.body instanceof FormData,i=a?"POST":o.method;"GET"!==i&&"HEAD"!==i&&"DELETE"!==i||void 0!==o.body&&(console.warn("request body is invalid with method get, head, delete"),delete o.body);var u=Object.assign(a?{}:{"Content-Type":"application/json;charset=utf-8"},o.headers),c=o.params||{},l={};return Object.keys(c).forEach(function(e){var t;void 0!==c[e]&&(l[e]="string"==typeof(t=c[e])?t:Array.isArray(t)?t.join(","):t+"")}),null==(s=t.get("requestHandler"))||s(u,l,i,e),{method:i,body:n(o.body),params:l,headers:u,timeout:o.timeout||t.get("timeout"),credentials:o.credentials||t.get("credentials")}}function n(e){if(e)return e instanceof Blob||e instanceof ArrayBuffer||e instanceof FormData||e instanceof URLSearchParams||"string"==typeof e?e:JSON.stringify(e)}var s=function(e,t,n){try{var s=r(e,t,n),o=new URL(t.getFullUrl(e)),a=s.params;a instanceof Object&&Object.keys(a).forEach(function(e){return o.searchParams.set(e,a[e])});var i=new AbortController,u=s.timeout>0?setTimeout(function(){return i.abort()},s.timeout):null,c=new Request(o,{method:s.method,headers:new Headers(s.headers),body:s.body,credentials:s.credentials,signal:s.timeout>0?i.signal:null,redirect:"follow"});return Promise.resolve(fetch(c).then(function(e){try{var t=function(e){return{url:u,method:i,status:a,statusText:n,headers:r,body:e}},r=Object.fromEntries(e.headers.entries()),n=e.statusText,a=e.status,i=s.method,u=o.toString();return Promise.resolve("HEAD"===s.method?t(""):Promise.resolve(e.text()).then(t))}catch(e){return Promise.reject(e)}}).catch(function(e){return{url:o.toString(),method:s.method,status:-1,statusText:"NetworkError",body:String(e)}}).finally(function(){null!==u&&clearTimeout(u)}))}catch(e){return Promise.reject(e)}},o="message",a="data";function i(t,r){if(void 0===r&&(r=o),!e.isJsonLike(t))return"";var n,s=e.parseJSON(t);return s&&e.isStringRecord(s)&&r in s?(n=s[r])?"string"==typeof n?n:JSON.stringify(n):"":t}function u(e){var t=e.match(/<title>([^<]+)<\/title>/i);if(t)return t[1];var r=e.match(/<message>([^<]+)<\/message>/i);return r?r[1]:""}function c(e){return e>=200&&e<400}var l=function t(r,n,s,o,a){try{var i,u,l=a||0,d=Math.min(10,null!=(i=null==o?void 0:o.maxRetry)?i:s.get("maxRetry")),h=null!=(u=null==o?void 0:o.retryResolve)?u:s.get("retryResolve"),f=s.get("logHandler")||e.noop;f({type:"prepear",url:n,method:(null==o?void 0:o.method)||"GET",retry:l,maxRetry:d,message:0===l?"start":"retry "+l+"/"+d+" start",options:o});var g=Date.now();return Promise.resolve(r(n,s,o)).then(function(a){var i,u=a.status,m=Date.now()-g,v="[cost "+m+"]["+u+"] "+(u<0?a.body:"");f({type:"finished",url:n,method:a.method,retry:l,maxRetry:d,message:0===l?"finish "+v:"retry "+l+"/"+d+" finish "+v,response:a,cost:m});var p=c(u);if(!d||"network"===h&&u>0||"status"===h&&p||l>=d)return a;var y=null!=(i=null==o?void 0:o.retryInterval)?i:s.get("retryInterval");return Promise.resolve(e.sleep(Math.max(100,"function"==typeof y?y(l+1):y))).then(function(){return Promise.resolve(t(r,n,s,o,l+1))})})}catch(e){return Promise.reject(e)}};function d(r,n,s,l){var d,f;if(r.status<0)return h({ok:!1,status:r.status,code:r.statusText,headers:{},message:"",data:null},r.method+" "+n+" "+r.statusText,r.method,n,s,l);c(r.status)||null==(f=s.get("errorHandler"))||f(r.status,r.method,n);var g,m,v,p,y,b=t({},(g=r.status,m=r.statusText,v=r.body,p=s.get("responseRule"),y=(null==l?void 0:l.responseRule)||p,c(g)?function(t,r,n,s){var i=t||{resolve:"body"},u={ok:!0,code:n,message:"",data:null};if(202===r||204===r||!s)return u;if("body"===i.resolve)return u.data=e.isJsonLike(s)?e.parseJSON(s):s,u;var c=e.parseJSON(s);if(!c||!e.isStringRecord(c))return u.ok=!1,u.code="ResponseFormatError",u.message="响应内容无法格式化为 Object",u;var l=i.statusField||"code",d=i.statusOKValue||"0",h=i.dataField||a,f=i.messageField||o,g=i.ignoreMessage||"";if(!(l in c))return u.ok=!1,u.code="ResponseFieldMissing",u.message="响应内容找不到状态字段 "+l,u;var m=c[l]+"";return u.ok=m===d,u.code=m,u.message=f in c?c[f]+"":"",u.data=h in c?c[h]:null,g&&u.message&&(Array.isArray(g)&&g.includes(u.message)||"string"==typeof g&&u.message===g)&&(u.message=""),u}(y.ok||p.ok,g,m,v):function(e,t,r){var n=e||{resolve:"json",messageField:o},s={ok:!1,code:t,message:r,data:null};switch(n.resolve){case"auto":s.message=u(r)||i(r,n.messageField)||r;break;case"body":s.message=u(r)||r;break;case"json":s.message=i(r,n.messageField)}return s}(y.failed||p.failed,m,v)),{status:r.status,headers:Object.fromEntries(Object.entries(r.headers||{}).map(function(e){var t=e[1];return[e[0].toLowerCase(),t]}))});return null==(d=s.get("responseHandler"))||d(t({},b),r.method,n),h(b,b.ok?b.message:r.method+" "+n+" ["+b.code+"] "+(b.message||r.statusText),r.method,n,s,l)}function h(e,t,r,n,s,o){return!1!==(null==o?void 0:o.message)&&s.showMessage(!e.ok,"function"==typeof(null==o?void 0:o.message)?o.message(e,r,n,t):t),e}var f=/*#__PURE__*/function(){function t(e){this.config={baseURL:"",maxRetry:0,retryInterval:1e3,retryResolve:"network",timeout:5e3,cacheTTL:500,credentials:"same-origin",responseRule:{ok:{resolve:"body"},failed:{resolve:"json",messageField:"message"}}},e&&this.set(e)}var r=t.prototype;return r.set=function(t){if(t.baseURL&&!/^\/.+/.test(t.baseURL)&&!e.isFullURL(t.baseURL))throw console.warn("baseURL 需要以 / 开头,或者是完整的 url 地址"),new Error("BaseURLError");Object.assign(this.config,t)},r.get=function(e){return this.config[e]},r.getFullUrl=function(t){return t.startsWith("/")?e.getFullURL(t):e.getFullURL(t,this.config.baseURL)},r.showMessage=function(e,t){this.config.messageHandler&&t&&this.config.messageHandler(e,t)},t}(),g=function(n,s,o){try{var a=t({},r(n,s,o),{onUploadProgress:null==o?void 0:o.onUploadProgress}),i=a.method,u=a.onUploadProgress||function(){return 0},c=e.addParamsToString(s.getFullUrl(n),a.params);return Promise.resolve(new Promise(function(e){var t=1,r=0,s=new XMLHttpRequest;s.upload.addEventListener("progress",function(e){t=e.total,u({total:e.total,loaded:e.loaded})}),s.addEventListener("load",function(){r&&clearTimeout(r),u({loaded:t,total:t}),e({url:c,method:i,status:s.status,statusText:s.statusText,headers:m(s),body:"HEAD"===i?"":s.responseText})}),s.addEventListener("error",function(){r&&clearTimeout(r),e({url:c,method:i,status:-2,statusText:"Failed",body:"Request "+i+" "+n+" Failed"})}),s.addEventListener("abort",function(){r&&clearTimeout(r),e({url:c,method:i,status:-3,statusText:"Aborted",body:"Request "+i+" "+n+" Aborted"})}),Object.entries(a.headers).forEach(function(e){s.setRequestHeader(e[0],e[1])}),"include"===a.credentials&&(s.withCredentials=!0),s.open(i,c,!0),a.body&&s.send(a.body),a.timeout>0&&(r=setTimeout(function(){s.abort()},a.timeout))}))}catch(e){return Promise.reject(e)}};function m(e){var t={};if(!e)return t;var r=e.getAllResponseHeaders();return r&&"null"!==r&&r.replace(/\r/g,"").split("\n").forEach(function(e){var r=e.trim();if(r){var n=r.split(":"),s=n[0].trim();s&&(t[s]=(n[1]||"").trim())}}),t}var v=function(e,t,r){try{return Promise.resolve(l(s,e,t,r)).then(function(n){return d(n,e,t,r)})}catch(e){return Promise.reject(e)}},p=function(e,t,r){try{return Promise.resolve(l(g,e,t,r)).then(function(n){return d(n,e,t,r)})}catch(e){return Promise.reject(e)}},y=/*#__PURE__*/function(){function e(e){void 0===e&&(e=500),this.ttl=void 0,this.cache=void 0,this.cache={},this.ttl=Math.max(e,0)}var t=e.prototype;return t.getKey=function(e,t){return e+Object.keys(t||{}).sort().map(function(e){return e+"#"+(null==t?void 0:t[e])}).join(",")},t.updateTTL=function(e){this.ttl=Math.max(e,0)},t.get=function(e){if(0===this.ttl)return null;var t=this.cache[e];return t?t.ttl<Date.now()?(delete this.cache[e],null):t.res:null},t.set=function(e,t){0!==this.ttl&&(this.cache[e]={ttl:Date.now()+this.ttl,res:t})},e}(),b=/*#__PURE__*/function(){function t(e,t){this.agent=void 0,this.config=void 0,this.cache=void 0,this.config=new f(t),this.agent=e,this.cache=new y(this.config.get("cacheTTL")),this.setConfig=this.setConfig.bind(this),this.getConfig=this.getConfig.bind(this),this.get=this.get.bind(this),this.post=this.post.bind(this),this.del=this.del.bind(this),this.patch=this.patch.bind(this),this.put=this.put.bind(this),this.head=this.head.bind(this)}var r=t.prototype;return r.exec=function(e,t){try{return Promise.resolve(this.agent(e,this.config,t))}catch(e){return Promise.reject(e)}},r.guard=function(t,r,n){try{return Promise.resolve(function(t,r,n,s){if(r.ok&&!e.isEmpty(r.data)&&null!==s){var o=e.getTypeGuard(s,"响应数据未能正确识别");if(o.guard(r.data))return r;console.error("response type check faild",t,r.data),n.showMessage(!0,t+" "+o.message)}return r.data=null,r}(t,r,this.config,n))}catch(e){return Promise.reject(e)}},r.setConfig=function(e){this.config.set(e),this.cache.updateTTL(this.config.get("cacheTTL"))},r.getConfig=function(e){return this.config.get(e)},r.head=function(e,t){try{var r=this,n=Object.assign({},t||null);n.method="HEAD";var s=r.guard;return Promise.resolve(r.exec(e,n)).then(function(t){return s.call(r,e,t,null)})}catch(e){return Promise.reject(e)}},r.get=function(e,t,r){try{var n,s=function(r){if(n)return r;var s=o.exec(e,a);o.cache.set(i,s);var u=o.guard;return Promise.resolve(s).then(function(r){return u.call(o,e,r,t||null)})},o=this,a=Object.assign({},r||null);a.method="GET";var i=o.cache.getKey(e,a.params),u=o.cache.get(i),c=function(){if(u){var r=o.guard;return Promise.resolve(u).then(function(s){var a=r.call(o,e,s,t||null);return n=1,a})}}();return Promise.resolve(c&&c.then?c.then(s):s(c))}catch(e){return Promise.reject(e)}},r.post=function(e,t,r,n){try{var s=this,o=Object.assign({},n||null);o.method="POST",o.body=t;var a=s.guard;return Promise.resolve(s.exec(e,o)).then(function(t){return a.call(s,e,t,r||null)})}catch(e){return Promise.reject(e)}},r.del=function(e,t,r){try{var n=this,s=Object.assign({},r||null);s.method="DELETE";var o=n.guard;return Promise.resolve(n.exec(e,s)).then(function(r){return o.call(n,e,r,t||null)})}catch(e){return Promise.reject(e)}},r.put=function(e,t,r,n){try{var s=this,o=Object.assign({},n||null);o.method="PUT",o.body=t;var a=s.guard;return Promise.resolve(s.exec(e,o)).then(function(t){return a.call(s,e,t,r||null)})}catch(e){return Promise.reject(e)}},r.patch=function(e,t,r,n){try{var s=this,o=Object.assign({},n||null);o.method="PATCH",o.body=t;var a=s.guard;return Promise.resolve(s.exec(e,o)).then(function(t){return a.call(s,e,t,r||null)})}catch(e){return Promise.reject(e)}},t}();function j(e){return"fetch"in window?new b(v,e):new b(p,e)}var P=j(),w=P.setConfig,T=P.head,x=P.get,R=P.post,O=P.del,k=P.put,E=P.patch;exports.NetRequest=j,exports.del=O,exports.get=x,exports.getResponseRulesDescription=function(e){var t=[],r=e.failed||{resolve:"json"};switch(t.push("- 当http状态码 <200 或者 >=400 时"),r.resolve){case"body":t.push(" 将响应内容格式化为字符串并作为错误消息");break;case"json":t.push(" 将响应解析为json,并读取 "+(r.messageField||o)+" 作为错误消息");break;case"auto":t.push(" 尝试解析为json,并读取 "+(r.messageField||o)+" 作为错误消息,如果失败则将响应内容作为错误消息")}var n=e.ok||{resolve:"body"};switch(t.push("- 当http状态码 >=200 并且 <400 时"),n.resolve){case"body":t.push(" 将响应解析为 json,并作为数据内容返回");break;case"json":t.push(" 将响应解析为 json,读取 "+(n.dataField||a)+" 作为响应数据,读取 "+(n.messageField||o)+" 作为提示消息"),n.statusField&&n.statusOKValue&&t.push(" 当 "+n.statusField+" 为 "+n.statusOKValue+" 时是成功提示,否则是错误消息"),n.ignoreMessage&&t.push(" 并忽略以下消息:"+n.ignoreMessage)}return t.join("\n")},exports.head=T,exports.jsonp=function(t,r,n){void 0===n&&(n={});try{var s=window;"callback"in n||(n.callback="jsonxData"+Math.random().toString(16).slice(2));var o=n.callback+"";if(!t)return Promise.resolve(null);var a=e.addParamsToString(t,n,!0);return Promise.resolve(new Promise(function(n){s[o]=function(e){if(o in window&&delete s[o],r(e))return e;console.warn("response type check faild",t,e),n(null)},e.loadJS(a).catch(function(){n(null),delete s[o]})}))}catch(e){return Promise.reject(e)}},exports.jsonx=function(t,r,n){void 0===n&&(n={});try{var s=window;return"var"in n||(n.var="jsonxData"+Math.random().toString(16).slice(2)),Promise.resolve(t?e.loadJS(e.addParamsToString(t,n,!0)).then(function(){var e=s[n.var+""];return r(e)?e:(console.warn("response type check faild",t,e),null)}).catch(function(){return null}):null)}catch(e){return Promise.reject(e)}},exports.patch=E,exports.post=R,exports.put=k,exports.setGlobalConfig=w,exports.upload=function(e,r,n){try{return Promise.resolve(function(e,r,n,s){try{var o=new FormData,a=null==n?void 0:n.body,i=t({},r);for(var u in a instanceof Object&&Object.entries(a).forEach(function(e){var t=e[0],r=e[1];r instanceof Blob?i[t]=r:Array.isArray(r)?r.forEach(function(e,r){o.append(t+"["+r+"]",String(e))}):o.append(t,String(r))}),i)o.append(u,i[u]);var c=new f(s);return Promise.resolve(g(e,c,t({},n,{method:"POST",body:o}))).then(function(t){return d(t,e,c,n)})}catch(e){return Promise.reject(e)}}(e,r,n,{baseURL:P.getConfig("baseURL"),logHandler:P.getConfig("logHandler"),errorHandler:P.getConfig("errorHandler"),requestHandler:P.getConfig("requestHandler"),messageHandler:P.getConfig("messageHandler"),responseHandler:P.getConfig("responseHandler")}))}catch(e){return Promise.reject(e)}};
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{noop as e,sleep as t,isJsonLike as r,parseJSON as n,isStringRecord as s,isFullURL as o,getFullURL as a,addParamsToString as i,isEmpty as u,getTypeGuard as c,loadJS as l}from"@seayoo-web/utils";function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},d.apply(this,arguments)}function h(e,t,r){var n=Object.assign({method:"GET"},r),s=n.body instanceof FormData,o=s?"POST":n.method;"GET"!==o&&"HEAD"!==o&&"DELETE"!==o||void 0!==n.body&&(console.warn("request body is invalid with method get, head, delete"),delete n.body);var a=Object.assign(s?{}:{"Content-Type":"application/json;charset=utf-8"},n.headers),i=t.get("headerHandler");i&&i(a,o,e);var u=n.params||{},c={};return Object.keys(u).forEach(function(e){var t;void 0!==u[e]&&(c[e]="string"==typeof(t=u[e])?t:Array.isArray(t)?t.join(","):t+"")}),{method:o,body:f(n.body),params:c,headers:a,timeout:n.timeout||t.get("timeout"),credentials:n.credentials||t.get("credentials")}}function f(e){if(e)return e instanceof Blob||e instanceof ArrayBuffer||e instanceof FormData||e instanceof URLSearchParams||"string"==typeof e?e:JSON.stringify(e)}var m=function(e,t,r){try{var n=h(e,t,r),s=new URL(t.getFullUrl(e)),o=n.params;o instanceof Object&&Object.keys(o).forEach(function(e){return s.searchParams.set(e,o[e])});var a=new AbortController,i=n.timeout>0?setTimeout(function(){return a.abort()},n.timeout):null,u=new Request(s,{method:n.method,headers:new Headers(n.headers),body:n.body,credentials:n.credentials,signal:n.timeout>0?a.signal:null,redirect:"follow"});return Promise.resolve(fetch(u).then(function(e){try{var t=function(e){return{url:u,method:i,status:a,statusText:o,headers:r,body:e}},r=Object.fromEntries(e.headers.entries()),o=e.statusText,a=e.status,i=n.method,u=s.toString();return Promise.resolve("HEAD"===n.method?t(""):Promise.resolve(e.text()).then(t))}catch(e){return Promise.reject(e)}}).catch(function(e){return{url:s.toString(),method:n.method,status:-1,statusText:"NetworkError",body:String(e)}}).finally(function(){null!==i&&clearTimeout(i)}))}catch(e){return Promise.reject(e)}},g=function r(n,s,o,a,i){try{var u,c,l=i||0,d=Math.min(10,null!=(u=null==a?void 0:a.maxRetry)?u:o.get("maxRetry")),h=null!=(c=null==a?void 0:a.retryResolve)?c:o.get("retryResolve"),f=o.get("logHandler")||e;f({type:"prepear",url:s,method:(null==a?void 0:a.method)||"GET",retry:l,maxRetry:d,message:0===l?"start":"retry "+l+"/"+d+" start",options:a});var m=Date.now();return Promise.resolve(n(s,o,a)).then(function(e){var i,u=e.status,c=Date.now()-m,g="[cost "+c+"]["+u+"] "+(u<0?e.body:"");if(f({type:"finished",url:s,method:e.method,retry:l,maxRetry:d,message:0===l?"finish "+g:"retry "+l+"/"+d+" finish "+g,response:e,cost:c}),!d||"network"===h&&u>0||"status"===h&&u>=200&&u<400||l>=d)return e;var v=null!=(i=null==a?void 0:a.retryInterval)?i:o.get("retryInterval");return Promise.resolve(t(Math.max(100,"function"==typeof v?v(l+1):v))).then(function(){return Promise.resolve(r(n,s,o,a,l+1))})})}catch(e){return Promise.reject(e)}},v="message",y="data",p=function(e){var t=[],r=e.failed||{resolve:"json"};switch(t.push("- 当http状态码 <200 或者 >=400 时"),r.resolve){case"body":t.push(" 将响应内容格式化为字符串并作为错误消息");break;case"json":t.push(" 将响应解析为json,并读取 "+(r.messageField||v)+" 作为错误消息");break;case"auto":t.push(" 尝试解析为json,并读取 "+(r.messageField||v)+" 作为错误消息,如果失败则将响应内容作为错误消息")}var n=e.ok||{resolve:"body"};switch(t.push("- 当http状态码 >=200 并且 <400 时"),n.resolve){case"body":t.push(" 将响应解析为 json,并作为数据内容返回");break;case"json":t.push(" 将响应解析为 json,读取 "+(n.dataField||y)+" 作为响应数据,读取 "+(n.messageField||v)+" 作为提示消息"),n.statusField&&n.statusOKValue&&t.push(" 当 "+n.statusField+" 为 "+n.statusOKValue+" 时是成功提示,否则是错误消息"),n.ignoreMessage&&t.push(" 并忽略以下消息:"+n.ignoreMessage)}return t.join("\n")};function b(e,t){if(void 0===t&&(t=v),!r(e))return"";var o,a=n(e);return a&&s(a)&&t in a?(o=a[t])?"string"==typeof o?o:JSON.stringify(o):"":e}function j(e){var t=e.match(/<title>([^<]+)<\/title>/i);if(t)return t[1];var r=e.match(/<message>([^<]+)<\/message>/i);return r?r[1]:""}function P(e,t,o,a){if(e.status<0)return w({ok:!1,status:e.status,code:e.statusText,headers:{},message:"",data:null},e.method+" "+t+" "+e.statusText,e.method,t,o,a);var i;(e.status<200||e.status>=400)&&(null==(i=o.get("errorHandler"))||i(e.status,e.method,t));var u,c,l,h,f,m=d({},(u=e.status,c=e.statusText,l=e.body,h=o.get("responseRule"),f=(null==a?void 0:a.responseRule)||h,u>=200&&u<400?function(e,t,o,a){var i=e||{resolve:"body"},u={ok:!0,code:o,message:"",data:null};if(202===t||204===t||!a)return u;if("body"===i.resolve)return u.data=r(a)?n(a):a,u;var c=n(a);if(!c||!s(c))return u.ok=!1,u.code="ResponseFormatError",u.message="响应内容无法格式化为 Object",u;var l=i.statusField||"code",d=i.statusOKValue||"0",h=i.dataField||y,f=i.messageField||v,m=i.ignoreMessage||"";if(!(l in c))return u.ok=!1,u.code="ResponseFieldMissing",u.message="响应内容找不到状态字段 "+l,u;var g=c[l]+"";return u.ok=g===d,u.code=g,u.message=f in c?c[f]+"":"",u.data=h in c?c[h]:null,m&&u.message&&(Array.isArray(m)&&m.includes(u.message)||"string"==typeof m&&u.message===m)&&(u.message=""),u}(f.ok||h.ok,u,c,l):function(e,t,r){var n=e||{resolve:"json",messageField:v},s={ok:!1,code:t,message:r,data:null};switch(n.resolve){case"auto":s.message=j(r)||b(r,n.messageField)||r;break;case"body":s.message=j(r)||r;break;case"json":s.message=b(r,n.messageField)}return s}(f.failed||h.failed,c,l)),{status:e.status,headers:Object.fromEntries(Object.entries(e.headers||{}).map(function(e){var t=e[1];return[e[0].toLowerCase(),t]}))});return w(m,m.ok?m.message:e.method+" "+t+" ["+m.code+"] "+(m.message||e.statusText),e.method,t,o,a)}function w(e,t,r,n,s,o){return!1!==(null==o?void 0:o.message)&&s.showMessage(e.ok,"function"==typeof(null==o?void 0:o.message)?o.message(e,r,n,t):t),e}var T=/*#__PURE__*/function(){function e(e){this.config={baseURL:"",maxRetry:0,retryInterval:1e3,retryResolve:"network",timeout:5e3,cacheTTL:500,credentials:"same-origin",responseRule:{ok:{resolve:"body"},failed:{resolve:"json",messageField:"message"}}},e&&this.set(e)}var t=e.prototype;return t.set=function(e){if(e.baseURL&&!/^\/.+/.test(e.baseURL)&&!o(e.baseURL))throw console.warn("baseURL 需要以 / 开头,或者是完整的 url 地址"),new Error("BaseURLError");Object.assign(this.config,e)},t.get=function(e){return this.config[e]},t.getFullUrl=function(e){return e.startsWith("/")?a(e):a(e,this.config.baseURL)},t.showMessage=function(e,t){this.config.messageHandler&&t&&this.config.messageHandler(e,t)},e}(),O=function(e,t,r){try{var n=d({},h(e,t,r),{onUploadProgress:null==r?void 0:r.onUploadProgress}),s=n.method,o=n.onUploadProgress||function(){return 0},a=i(t.getFullUrl(e),n.params);return Promise.resolve(new Promise(function(t){var r=1,i=0,u=new XMLHttpRequest;u.upload.addEventListener("progress",function(e){r=e.total,o({total:e.total,loaded:e.loaded})}),u.addEventListener("load",function(){i&&clearTimeout(i),o({loaded:r,total:r}),t({url:a,method:s,status:u.status,statusText:u.statusText,headers:x(u),body:"HEAD"===s?"":u.responseText})}),u.addEventListener("error",function(){i&&clearTimeout(i),t({url:a,method:s,status:-2,statusText:"Failed",body:"Request "+s+" "+e+" Failed"})}),u.addEventListener("abort",function(){i&&clearTimeout(i),t({url:a,method:s,status:-3,statusText:"Aborted",body:"Request "+s+" "+e+" Aborted"})}),Object.entries(n.headers).forEach(function(e){u.setRequestHeader(e[0],e[1])}),"include"===n.credentials&&(u.withCredentials=!0),u.open(s,a,!0),n.body&&u.send(n.body),n.timeout>0&&(i=setTimeout(function(){u.abort()},n.timeout))}))}catch(e){return Promise.reject(e)}};function x(e){var t={};if(!e)return t;var r=e.getAllResponseHeaders();return r&&"null"!==r&&r.replace(/\r/g,"").split("\n").forEach(function(e){var r=e.trim();if(r){var n=r.split(":"),s=n[0].trim();s&&(t[s]=(n[1]||"").trim())}}),t}var k=function(e,t,r){try{return Promise.resolve(g(m,e,t,r)).then(function(n){return P(n,e,t,r)})}catch(e){return Promise.reject(e)}},E=function(e,t,r){try{return Promise.resolve(g(O,e,t,r)).then(function(n){return P(n,e,t,r)})}catch(e){return Promise.reject(e)}},R=/*#__PURE__*/function(){function e(e){void 0===e&&(e=500),this.ttl=void 0,this.cache=void 0,this.cache={},this.ttl=Math.max(e,0)}var t=e.prototype;return t.getKey=function(e,t){return e+Object.keys(t||{}).sort().map(function(e){return e+"#"+(null==t?void 0:t[e])}).join(",")},t.updateTTL=function(e){this.ttl=Math.max(e,0)},t.get=function(e){if(0===this.ttl)return null;var t=this.cache[e];return t?t.ttl<Date.now()?(delete this.cache[e],null):t.res:null},t.set=function(e,t){0!==this.ttl&&(this.cache[e]={ttl:Date.now()+this.ttl,res:t})},e}(),L=/*#__PURE__*/function(){function e(e,t){this.agent=void 0,this.config=void 0,this.cache=void 0,this.config=new T(t),this.agent=e,this.cache=new R(this.config.get("cacheTTL")),this.setConfig=this.setConfig.bind(this),this.getConfig=this.getConfig.bind(this),this.get=this.get.bind(this),this.post=this.post.bind(this),this.del=this.del.bind(this),this.patch=this.patch.bind(this),this.put=this.put.bind(this)}var t=e.prototype;return t.exec=function(e,t){try{return Promise.resolve(this.agent(e,this.config,t))}catch(e){return Promise.reject(e)}},t.guard=function(e,t,r){try{return Promise.resolve(function(e,t,r,n){if(t.ok&&!u(t.data)&&null!==n){var s=c(n,"响应数据未能正确识别");if(s.guard(t.data))return t;console.error("response type check faild",e,t.data),r.showMessage(!0,e+" "+s.message)}return t.data=null,t}(e,t,this.config,r))}catch(e){return Promise.reject(e)}},t.setConfig=function(e){this.config.set(e),this.cache.updateTTL(this.config.get("cacheTTL"))},t.getConfig=function(e){return this.config.get(e)},t.head=function(e,t){try{var r=this,n=Object.assign({},t||null);n.method="HEAD";var s=r.guard;return Promise.resolve(r.exec(e,n)).then(function(t){return s.call(r,e,t,null)})}catch(e){return Promise.reject(e)}},t.get=function(e,t,r){try{var n,s=function(r){if(n)return r;var s=o.exec(e,a);o.cache.set(i,s);var u=o.guard;return Promise.resolve(s).then(function(r){return u.call(o,e,r,t||null)})},o=this,a=Object.assign({},r||null);a.method="GET";var i=o.cache.getKey(e,a.params),u=o.cache.get(i),c=function(){if(u){var r=o.guard;return Promise.resolve(u).then(function(s){var a=r.call(o,e,s,t||null);return n=1,a})}}();return Promise.resolve(c&&c.then?c.then(s):s(c))}catch(e){return Promise.reject(e)}},t.post=function(e,t,r,n){try{var s=this,o=Object.assign({},n||null);o.method="POST",o.body=t;var a=s.guard;return Promise.resolve(s.exec(e,o)).then(function(t){return a.call(s,e,t,r||null)})}catch(e){return Promise.reject(e)}},t.del=function(e,t,r){try{var n=this,s=Object.assign({},r||null);s.method="DELETE";var o=n.guard;return Promise.resolve(n.exec(e,s)).then(function(r){return o.call(n,e,r,t||null)})}catch(e){return Promise.reject(e)}},t.put=function(e,t,r,n){try{var s=this,o=Object.assign({},n||null);o.method="PUT",o.body=t;var a=s.guard;return Promise.resolve(s.exec(e,o)).then(function(t){return a.call(s,e,t,r||null)})}catch(e){return Promise.reject(e)}},t.patch=function(e,t,r,n){try{var s=this,o=Object.assign({},n||null);o.method="PATCH",o.body=t;var a=s.guard;return Promise.resolve(s.exec(e,o)).then(function(t){return a.call(s,e,t,r||null)})}catch(e){return Promise.reject(e)}},e}(),F=function(e,t,r){void 0===r&&(r={});try{var n=window;return"var"in r||(r.var="jsonxData"+Math.random().toString(16).slice(2)),Promise.resolve(e?l(i(e,r,!0)).then(function(){var s=n[r.var+""];return t(s)?s:(console.warn("response type check faild",e,s),null)}).catch(function(){return null}):null)}catch(e){return Promise.reject(e)}},H=function(e,t,r){void 0===r&&(r={});try{var n=window;"callback"in r||(r.callback="jsonxData"+Math.random().toString(16).slice(2));var s=r.callback+"";if(!e)return Promise.resolve(null);var o=i(e,r,!0);return Promise.resolve(new Promise(function(r){n[s]=function(o){if(s in window&&delete n[s],t(o))return o;console.warn("response type check faild",e,o),r(null)},l(o).catch(function(){r(null),delete n[s]})}))}catch(e){return Promise.reject(e)}},U=function(e,t,r){try{return Promise.resolve(function(e,t,r,n){try{var s=new FormData,o=null==r?void 0:r.body,a=d({},t);for(var i in o instanceof Object&&Object.entries(o).forEach(function(e){var t=e[0],r=e[1];r instanceof Blob?a[t]=r:Array.isArray(r)?r.forEach(function(e,r){s.append(t+"["+r+"]",String(e))}):s.append(t,String(r))}),a)s.append(i,a[i]);var u=new T(n);return Promise.resolve(O(e,u,d({},r,{method:"POST",body:s}))).then(function(t){return P(t,e,u,r)})}catch(e){return Promise.reject(e)}}(e,t,r,{baseURL:A.getConfig("baseURL"),logHandler:A.getConfig("logHandler"),errorHandler:A.getConfig("errorHandler"),headerHandler:A.getConfig("headerHandler"),messageHandler:A.getConfig("messageHandler")}))}catch(e){return Promise.reject(e)}};function C(e){return"fetch"in window?new L(k,e):new L(E,e)}var A=C(),D=A.setConfig,M=A.head,S=A.get,q=A.post,K=A.del,B=A.put,G=A.patch;export{C as NetRequest,K as del,S as get,p as getResponseRulesDescription,M as head,H as jsonp,F as jsonx,G as patch,q as post,B as put,D as setGlobalConfig,U as upload};
|
|
1
|
+
import{isJsonLike as e,parseJSON as t,isStringRecord as r,noop as n,sleep as s,isFullURL as o,getFullURL as a,addParamsToString as i,isEmpty as u,getTypeGuard as c,loadJS as l}from"@seayoo-web/utils";function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},d.apply(this,arguments)}function h(e,t,r){var n,s=Object.assign({method:"GET"},r),o=s.body instanceof FormData,a=o?"POST":s.method;"GET"!==a&&"HEAD"!==a&&"DELETE"!==a||void 0!==s.body&&(console.warn("request body is invalid with method get, head, delete"),delete s.body);var i=Object.assign(o?{}:{"Content-Type":"application/json;charset=utf-8"},s.headers),u=s.params||{},c={};return Object.keys(u).forEach(function(e){var t;void 0!==u[e]&&(c[e]="string"==typeof(t=u[e])?t:Array.isArray(t)?t.join(","):t+"")}),null==(n=t.get("requestHandler"))||n(i,c,a,e),{method:a,body:f(s.body),params:c,headers:i,timeout:s.timeout||t.get("timeout"),credentials:s.credentials||t.get("credentials")}}function f(e){if(e)return e instanceof Blob||e instanceof ArrayBuffer||e instanceof FormData||e instanceof URLSearchParams||"string"==typeof e?e:JSON.stringify(e)}var m=function(e,t,r){try{var n=h(e,t,r),s=new URL(t.getFullUrl(e)),o=n.params;o instanceof Object&&Object.keys(o).forEach(function(e){return s.searchParams.set(e,o[e])});var a=new AbortController,i=n.timeout>0?setTimeout(function(){return a.abort()},n.timeout):null,u=new Request(s,{method:n.method,headers:new Headers(n.headers),body:n.body,credentials:n.credentials,signal:n.timeout>0?a.signal:null,redirect:"follow"});return Promise.resolve(fetch(u).then(function(e){try{var t=function(e){return{url:u,method:i,status:a,statusText:o,headers:r,body:e}},r=Object.fromEntries(e.headers.entries()),o=e.statusText,a=e.status,i=n.method,u=s.toString();return Promise.resolve("HEAD"===n.method?t(""):Promise.resolve(e.text()).then(t))}catch(e){return Promise.reject(e)}}).catch(function(e){return{url:s.toString(),method:n.method,status:-1,statusText:"NetworkError",body:String(e)}}).finally(function(){null!==i&&clearTimeout(i)}))}catch(e){return Promise.reject(e)}},g="message",v="data",y=function(e){var t=[],r=e.failed||{resolve:"json"};switch(t.push("- 当http状态码 <200 或者 >=400 时"),r.resolve){case"body":t.push(" 将响应内容格式化为字符串并作为错误消息");break;case"json":t.push(" 将响应解析为json,并读取 "+(r.messageField||g)+" 作为错误消息");break;case"auto":t.push(" 尝试解析为json,并读取 "+(r.messageField||g)+" 作为错误消息,如果失败则将响应内容作为错误消息")}var n=e.ok||{resolve:"body"};switch(t.push("- 当http状态码 >=200 并且 <400 时"),n.resolve){case"body":t.push(" 将响应解析为 json,并作为数据内容返回");break;case"json":t.push(" 将响应解析为 json,读取 "+(n.dataField||v)+" 作为响应数据,读取 "+(n.messageField||g)+" 作为提示消息"),n.statusField&&n.statusOKValue&&t.push(" 当 "+n.statusField+" 为 "+n.statusOKValue+" 时是成功提示,否则是错误消息"),n.ignoreMessage&&t.push(" 并忽略以下消息:"+n.ignoreMessage)}return t.join("\n")};function p(n,s){if(void 0===s&&(s=g),!e(n))return"";var o,a=t(n);return a&&r(a)&&s in a?(o=a[s])?"string"==typeof o?o:JSON.stringify(o):"":n}function b(e){var t=e.match(/<title>([^<]+)<\/title>/i);if(t)return t[1];var r=e.match(/<message>([^<]+)<\/message>/i);return r?r[1]:""}function j(e){return e>=200&&e<400}var P=function e(t,r,o,a,i){try{var u,c,l=i||0,d=Math.min(10,null!=(u=null==a?void 0:a.maxRetry)?u:o.get("maxRetry")),h=null!=(c=null==a?void 0:a.retryResolve)?c:o.get("retryResolve"),f=o.get("logHandler")||n;f({type:"prepear",url:r,method:(null==a?void 0:a.method)||"GET",retry:l,maxRetry:d,message:0===l?"start":"retry "+l+"/"+d+" start",options:a});var m=Date.now();return Promise.resolve(t(r,o,a)).then(function(n){var i,u=n.status,c=Date.now()-m,g="[cost "+c+"]["+u+"] "+(u<0?n.body:"");f({type:"finished",url:r,method:n.method,retry:l,maxRetry:d,message:0===l?"finish "+g:"retry "+l+"/"+d+" finish "+g,response:n,cost:c});var v=j(u);if(!d||"network"===h&&u>0||"status"===h&&v||l>=d)return n;var y=null!=(i=null==a?void 0:a.retryInterval)?i:o.get("retryInterval");return Promise.resolve(s(Math.max(100,"function"==typeof y?y(l+1):y))).then(function(){return Promise.resolve(e(t,r,o,a,l+1))})})}catch(e){return Promise.reject(e)}};function w(n,s,o,a){var i,u;if(n.status<0)return T({ok:!1,status:n.status,code:n.statusText,headers:{},message:"",data:null},n.method+" "+s+" "+n.statusText,n.method,s,o,a);j(n.status)||null==(u=o.get("errorHandler"))||u(n.status,n.method,s);var c,l,h,f,m,y=d({},(c=n.status,l=n.statusText,h=n.body,f=o.get("responseRule"),m=(null==a?void 0:a.responseRule)||f,j(c)?function(n,s,o,a){var i=n||{resolve:"body"},u={ok:!0,code:o,message:"",data:null};if(202===s||204===s||!a)return u;if("body"===i.resolve)return u.data=e(a)?t(a):a,u;var c=t(a);if(!c||!r(c))return u.ok=!1,u.code="ResponseFormatError",u.message="响应内容无法格式化为 Object",u;var l=i.statusField||"code",d=i.statusOKValue||"0",h=i.dataField||v,f=i.messageField||g,m=i.ignoreMessage||"";if(!(l in c))return u.ok=!1,u.code="ResponseFieldMissing",u.message="响应内容找不到状态字段 "+l,u;var y=c[l]+"";return u.ok=y===d,u.code=y,u.message=f in c?c[f]+"":"",u.data=h in c?c[h]:null,m&&u.message&&(Array.isArray(m)&&m.includes(u.message)||"string"==typeof m&&u.message===m)&&(u.message=""),u}(m.ok||f.ok,c,l,h):function(e,t,r){var n=e||{resolve:"json",messageField:g},s={ok:!1,code:t,message:r,data:null};switch(n.resolve){case"auto":s.message=b(r)||p(r,n.messageField)||r;break;case"body":s.message=b(r)||r;break;case"json":s.message=p(r,n.messageField)}return s}(m.failed||f.failed,l,h)),{status:n.status,headers:Object.fromEntries(Object.entries(n.headers||{}).map(function(e){var t=e[1];return[e[0].toLowerCase(),t]}))});return null==(i=o.get("responseHandler"))||i(d({},y),n.method,s),T(y,y.ok?y.message:n.method+" "+s+" ["+y.code+"] "+(y.message||n.statusText),n.method,s,o,a)}function T(e,t,r,n,s,o){return!1!==(null==o?void 0:o.message)&&s.showMessage(!e.ok,"function"==typeof(null==o?void 0:o.message)?o.message(e,r,n,t):t),e}var O=/*#__PURE__*/function(){function e(e){this.config={baseURL:"",maxRetry:0,retryInterval:1e3,retryResolve:"network",timeout:5e3,cacheTTL:500,credentials:"same-origin",responseRule:{ok:{resolve:"body"},failed:{resolve:"json",messageField:"message"}}},e&&this.set(e)}var t=e.prototype;return t.set=function(e){if(e.baseURL&&!/^\/.+/.test(e.baseURL)&&!o(e.baseURL))throw console.warn("baseURL 需要以 / 开头,或者是完整的 url 地址"),new Error("BaseURLError");Object.assign(this.config,e)},t.get=function(e){return this.config[e]},t.getFullUrl=function(e){return e.startsWith("/")?a(e):a(e,this.config.baseURL)},t.showMessage=function(e,t){this.config.messageHandler&&t&&this.config.messageHandler(e,t)},e}(),x=function(e,t,r){try{var n=d({},h(e,t,r),{onUploadProgress:null==r?void 0:r.onUploadProgress}),s=n.method,o=n.onUploadProgress||function(){return 0},a=i(t.getFullUrl(e),n.params);return Promise.resolve(new Promise(function(t){var r=1,i=0,u=new XMLHttpRequest;u.upload.addEventListener("progress",function(e){r=e.total,o({total:e.total,loaded:e.loaded})}),u.addEventListener("load",function(){i&&clearTimeout(i),o({loaded:r,total:r}),t({url:a,method:s,status:u.status,statusText:u.statusText,headers:k(u),body:"HEAD"===s?"":u.responseText})}),u.addEventListener("error",function(){i&&clearTimeout(i),t({url:a,method:s,status:-2,statusText:"Failed",body:"Request "+s+" "+e+" Failed"})}),u.addEventListener("abort",function(){i&&clearTimeout(i),t({url:a,method:s,status:-3,statusText:"Aborted",body:"Request "+s+" "+e+" Aborted"})}),Object.entries(n.headers).forEach(function(e){u.setRequestHeader(e[0],e[1])}),"include"===n.credentials&&(u.withCredentials=!0),u.open(s,a,!0),n.body&&u.send(n.body),n.timeout>0&&(i=setTimeout(function(){u.abort()},n.timeout))}))}catch(e){return Promise.reject(e)}};function k(e){var t={};if(!e)return t;var r=e.getAllResponseHeaders();return r&&"null"!==r&&r.replace(/\r/g,"").split("\n").forEach(function(e){var r=e.trim();if(r){var n=r.split(":"),s=n[0].trim();s&&(t[s]=(n[1]||"").trim())}}),t}var E=function(e,t,r){try{return Promise.resolve(P(m,e,t,r)).then(function(n){return w(n,e,t,r)})}catch(e){return Promise.reject(e)}},R=function(e,t,r){try{return Promise.resolve(P(x,e,t,r)).then(function(n){return w(n,e,t,r)})}catch(e){return Promise.reject(e)}},H=/*#__PURE__*/function(){function e(e){void 0===e&&(e=500),this.ttl=void 0,this.cache=void 0,this.cache={},this.ttl=Math.max(e,0)}var t=e.prototype;return t.getKey=function(e,t){return e+Object.keys(t||{}).sort().map(function(e){return e+"#"+(null==t?void 0:t[e])}).join(",")},t.updateTTL=function(e){this.ttl=Math.max(e,0)},t.get=function(e){if(0===this.ttl)return null;var t=this.cache[e];return t?t.ttl<Date.now()?(delete this.cache[e],null):t.res:null},t.set=function(e,t){0!==this.ttl&&(this.cache[e]={ttl:Date.now()+this.ttl,res:t})},e}(),L=/*#__PURE__*/function(){function e(e,t){this.agent=void 0,this.config=void 0,this.cache=void 0,this.config=new O(t),this.agent=e,this.cache=new H(this.config.get("cacheTTL")),this.setConfig=this.setConfig.bind(this),this.getConfig=this.getConfig.bind(this),this.get=this.get.bind(this),this.post=this.post.bind(this),this.del=this.del.bind(this),this.patch=this.patch.bind(this),this.put=this.put.bind(this),this.head=this.head.bind(this)}var t=e.prototype;return t.exec=function(e,t){try{return Promise.resolve(this.agent(e,this.config,t))}catch(e){return Promise.reject(e)}},t.guard=function(e,t,r){try{return Promise.resolve(function(e,t,r,n){if(t.ok&&!u(t.data)&&null!==n){var s=c(n,"响应数据未能正确识别");if(s.guard(t.data))return t;console.error("response type check faild",e,t.data),r.showMessage(!0,e+" "+s.message)}return t.data=null,t}(e,t,this.config,r))}catch(e){return Promise.reject(e)}},t.setConfig=function(e){this.config.set(e),this.cache.updateTTL(this.config.get("cacheTTL"))},t.getConfig=function(e){return this.config.get(e)},t.head=function(e,t){try{var r=this,n=Object.assign({},t||null);n.method="HEAD";var s=r.guard;return Promise.resolve(r.exec(e,n)).then(function(t){return s.call(r,e,t,null)})}catch(e){return Promise.reject(e)}},t.get=function(e,t,r){try{var n,s=function(r){if(n)return r;var s=o.exec(e,a);o.cache.set(i,s);var u=o.guard;return Promise.resolve(s).then(function(r){return u.call(o,e,r,t||null)})},o=this,a=Object.assign({},r||null);a.method="GET";var i=o.cache.getKey(e,a.params),u=o.cache.get(i),c=function(){if(u){var r=o.guard;return Promise.resolve(u).then(function(s){var a=r.call(o,e,s,t||null);return n=1,a})}}();return Promise.resolve(c&&c.then?c.then(s):s(c))}catch(e){return Promise.reject(e)}},t.post=function(e,t,r,n){try{var s=this,o=Object.assign({},n||null);o.method="POST",o.body=t;var a=s.guard;return Promise.resolve(s.exec(e,o)).then(function(t){return a.call(s,e,t,r||null)})}catch(e){return Promise.reject(e)}},t.del=function(e,t,r){try{var n=this,s=Object.assign({},r||null);s.method="DELETE";var o=n.guard;return Promise.resolve(n.exec(e,s)).then(function(r){return o.call(n,e,r,t||null)})}catch(e){return Promise.reject(e)}},t.put=function(e,t,r,n){try{var s=this,o=Object.assign({},n||null);o.method="PUT",o.body=t;var a=s.guard;return Promise.resolve(s.exec(e,o)).then(function(t){return a.call(s,e,t,r||null)})}catch(e){return Promise.reject(e)}},t.patch=function(e,t,r,n){try{var s=this,o=Object.assign({},n||null);o.method="PATCH",o.body=t;var a=s.guard;return Promise.resolve(s.exec(e,o)).then(function(t){return a.call(s,e,t,r||null)})}catch(e){return Promise.reject(e)}},e}(),F=function(e,t,r){void 0===r&&(r={});try{var n=window;return"var"in r||(r.var="jsonxData"+Math.random().toString(16).slice(2)),Promise.resolve(e?l(i(e,r,!0)).then(function(){var s=n[r.var+""];return t(s)?s:(console.warn("response type check faild",e,s),null)}).catch(function(){return null}):null)}catch(e){return Promise.reject(e)}},C=function(e,t,r){void 0===r&&(r={});try{var n=window;"callback"in r||(r.callback="jsonxData"+Math.random().toString(16).slice(2));var s=r.callback+"";if(!e)return Promise.resolve(null);var o=i(e,r,!0);return Promise.resolve(new Promise(function(r){n[s]=function(o){if(s in window&&delete n[s],t(o))return o;console.warn("response type check faild",e,o),r(null)},l(o).catch(function(){r(null),delete n[s]})}))}catch(e){return Promise.reject(e)}},U=function(e,t,r){try{return Promise.resolve(function(e,t,r,n){try{var s=new FormData,o=null==r?void 0:r.body,a=d({},t);for(var i in o instanceof Object&&Object.entries(o).forEach(function(e){var t=e[0],r=e[1];r instanceof Blob?a[t]=r:Array.isArray(r)?r.forEach(function(e,r){s.append(t+"["+r+"]",String(e))}):s.append(t,String(r))}),a)s.append(i,a[i]);var u=new O(n);return Promise.resolve(x(e,u,d({},r,{method:"POST",body:s}))).then(function(t){return w(t,e,u,r)})}catch(e){return Promise.reject(e)}}(e,t,r,{baseURL:D.getConfig("baseURL"),logHandler:D.getConfig("logHandler"),errorHandler:D.getConfig("errorHandler"),requestHandler:D.getConfig("requestHandler"),messageHandler:D.getConfig("messageHandler"),responseHandler:D.getConfig("responseHandler")}))}catch(e){return Promise.reject(e)}};function A(e){return"fetch"in window?new L(E,e):new L(R,e)}var D=A(),M=D.setConfig,S=D.head,q=D.get,K=D.post,B=D.del,G=D.put,I=D.patch;export{A as NetRequest,B as del,q as get,y as getResponseRulesDescription,S as head,C as jsonp,F as jsonx,I as patch,K as post,G as put,M as setGlobalConfig,U as upload};
|
package/dist/node.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=require("node:http"),t=require("node:https"),r=require("@seayoo-web/utils");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=/*#__PURE__*/s(e),o=/*#__PURE__*/s(t),a=function e(t,s,n,o,a){try{var i,u,
|
|
1
|
+
var e=require("node:http"),t=require("node:https"),r=require("@seayoo-web/utils");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=/*#__PURE__*/s(e),o=/*#__PURE__*/s(t),a="message";function i(e,t){if(void 0===t&&(t=a),!r.isJsonLike(e))return"";var s,n=r.parseJSON(e);return n&&r.isStringRecord(n)&&t in n?(s=n[t])?"string"==typeof s?s:JSON.stringify(s):"":e}function u(e){var t=e.match(/<title>([^<]+)<\/title>/i);if(t)return t[1];var r=e.match(/<message>([^<]+)<\/message>/i);return r?r[1]:""}function c(e){return e>=200&&e<400}var l=function e(t,s,n,o,a){try{var i,u,l=a||0,h=Math.min(10,null!=(i=null==o?void 0:o.maxRetry)?i:n.get("maxRetry")),d=null!=(u=null==o?void 0:o.retryResolve)?u:n.get("retryResolve"),f=n.get("logHandler")||r.noop;f({type:"prepear",url:s,method:(null==o?void 0:o.method)||"GET",retry:l,maxRetry:h,message:0===l?"start":"retry "+l+"/"+h+" start",options:o});var g=Date.now();return Promise.resolve(t(s,n,o)).then(function(a){var i,u=a.status,m=Date.now()-g,v="[cost "+m+"]["+u+"] "+(u<0?a.body:"");f({type:"finished",url:s,method:a.method,retry:l,maxRetry:h,message:0===l?"finish "+v:"retry "+l+"/"+h+" finish "+v,response:a,cost:m});var y=c(u);if(!h||"network"===d&&u>0||"status"===d&&y||l>=h)return a;var p=null!=(i=null==o?void 0:o.retryInterval)?i:n.get("retryInterval");return Promise.resolve(r.sleep(Math.max(100,"function"==typeof p?p(l+1):p))).then(function(){return Promise.resolve(e(t,s,n,o,l+1))})})}catch(e){return Promise.reject(e)}};function h(){return h=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},h.apply(this,arguments)}function d(e,t,r,s,n,o){return!1!==(null==o?void 0:o.message)&&n.showMessage(!e.ok,"function"==typeof(null==o?void 0:o.message)?o.message(e,r,s,t):t),e}function f(e){if(e)return e instanceof Blob||e instanceof ArrayBuffer||e instanceof FormData||e instanceof URLSearchParams||"string"==typeof e?e:JSON.stringify(e)}var g=function(e,t,s){try{return Promise.resolve(l(m,e,t,s)).then(function(n){return function(e,t,s,n){var o,l;if(e.status<0)return d({ok:!1,status:e.status,code:e.statusText,headers:{},message:"",data:null},e.method+" "+t+" "+e.statusText,e.method,t,s,n);c(e.status)||null==(l=s.get("errorHandler"))||l(e.status,e.method,t);var f,g,m,v,y,p=h({},(f=e.status,g=e.statusText,m=e.body,v=s.get("responseRule"),y=(null==n?void 0:n.responseRule)||v,c(f)?function(e,t,s,n){var o=e||{resolve:"body"},i={ok:!0,code:s,message:"",data:null};if(202===t||204===t||!n)return i;if("body"===o.resolve)return i.data=r.isJsonLike(n)?r.parseJSON(n):n,i;var u=r.parseJSON(n);if(!u||!r.isStringRecord(u))return i.ok=!1,i.code="ResponseFormatError",i.message="响应内容无法格式化为 Object",i;var c=o.statusField||"code",l=o.statusOKValue||"0",h=o.dataField||"data",d=o.messageField||a,f=o.ignoreMessage||"";if(!(c in u))return i.ok=!1,i.code="ResponseFieldMissing",i.message="响应内容找不到状态字段 "+c,i;var g=u[c]+"";return i.ok=g===l,i.code=g,i.message=d in u?u[d]+"":"",i.data=h in u?u[h]:null,f&&i.message&&(Array.isArray(f)&&f.includes(i.message)||"string"==typeof f&&i.message===f)&&(i.message=""),i}(y.ok||v.ok,f,g,m):function(e,t,r){var s=e||{resolve:"json",messageField:a},n={ok:!1,code:t,message:r,data:null};switch(s.resolve){case"auto":n.message=u(r)||i(r,s.messageField)||r;break;case"body":n.message=u(r)||r;break;case"json":n.message=i(r,s.messageField)}return n}(y.failed||v.failed,g,m)),{status:e.status,headers:Object.fromEntries(Object.entries(e.headers||{}).map(function(e){var t=e[1];return[e[0].toLowerCase(),t]}))});return null==(o=s.get("responseHandler"))||o(h({},p),e.method,t),d(p,p.ok?p.message:e.method+" "+t+" ["+p.code+"] "+(p.message||e.statusText),e.method,t,s,n)}(n,e,t,s)})}catch(e){return Promise.reject(e)}},m=function(e,t,s){try{var a=function(e,t,r){var s,n=Object.assign({method:"GET"},r),o=n.body instanceof FormData,a=o?"POST":n.method;"GET"!==a&&"HEAD"!==a&&"DELETE"!==a||void 0!==n.body&&(console.warn("request body is invalid with method get, head, delete"),delete n.body);var i=Object.assign(o?{}:{"Content-Type":"application/json;charset=utf-8"},n.headers),u=n.params||{},c={};return Object.keys(u).forEach(function(e){var t;void 0!==u[e]&&(c[e]="string"==typeof(t=u[e])?t:Array.isArray(t)?t.join(","):t+"")}),null==(s=t.get("requestHandler"))||s(i,c,a,e),{method:a,body:f(n.body),params:c,headers:i,timeout:n.timeout||t.get("timeout"),credentials:n.credentials||t.get("credentials")}}(e,t,s);if(!r.isFullURL(e))return Promise.resolve({url:e,method:a.method,status:-2,statusText:"URLFormatError",headers:{},body:""});var i=/^https:\/\//i.test(e)?o.default:n.default,u=new URL(e),c=a.params;c instanceof Object&&Object.keys(c).forEach(function(e){return u.searchParams.set(e,c[e])});var l="HEAD"===a.method;return Promise.resolve(new Promise(function(t){var r=i.request(u,{headers:a.headers,method:a.method,timeout:a.timeout>0?a.timeout:void 0},function(r){var s=[];l||r.on("data",function(e){return s.push(e)}),r.on("end",function(){var n=Object.fromEntries(Object.entries(r.headers).map(function(e){var t=e[1];return[e[0].toLowerCase(),Array.isArray(t)?t.join(","):t]}));t({url:e,method:a.method,status:r.statusCode||-3,statusText:r.statusMessage||"Unknown",headers:n,body:l?"":Buffer.concat(s).toString("utf-8")})})});r.on("error",function(r){t({url:e,method:a.method,status:-1,statusText:r.name||"Unknown",body:r.message})}),a.body&&r.write(a.body),r.end()}))}catch(e){return Promise.reject(e)}},v=/*#__PURE__*/function(){function e(e){void 0===e&&(e=500),this.ttl=void 0,this.cache=void 0,this.cache={},this.ttl=Math.max(e,0)}var t=e.prototype;return t.getKey=function(e,t){return e+Object.keys(t||{}).sort().map(function(e){return e+"#"+(null==t?void 0:t[e])}).join(",")},t.updateTTL=function(e){this.ttl=Math.max(e,0)},t.get=function(e){if(0===this.ttl)return null;var t=this.cache[e];return t?t.ttl<Date.now()?(delete this.cache[e],null):t.res:null},t.set=function(e,t){0!==this.ttl&&(this.cache[e]={ttl:Date.now()+this.ttl,res:t})},e}(),y=/*#__PURE__*/function(){function e(e){this.config={baseURL:"",maxRetry:0,retryInterval:1e3,retryResolve:"network",timeout:5e3,cacheTTL:500,credentials:"same-origin",responseRule:{ok:{resolve:"body"},failed:{resolve:"json",messageField:"message"}}},e&&this.set(e)}var t=e.prototype;return t.set=function(e){if(e.baseURL&&!/^\/.+/.test(e.baseURL)&&!r.isFullURL(e.baseURL))throw console.warn("baseURL 需要以 / 开头,或者是完整的 url 地址"),new Error("BaseURLError");Object.assign(this.config,e)},t.get=function(e){return this.config[e]},t.getFullUrl=function(e){return e.startsWith("/")?r.getFullURL(e):r.getFullURL(e,this.config.baseURL)},t.showMessage=function(e,t){this.config.messageHandler&&t&&this.config.messageHandler(e,t)},e}(),p=/*#__PURE__*/function(){function e(e,t){this.agent=void 0,this.config=void 0,this.cache=void 0,this.config=new y(t),this.agent=e,this.cache=new v(this.config.get("cacheTTL")),this.setConfig=this.setConfig.bind(this),this.getConfig=this.getConfig.bind(this),this.get=this.get.bind(this),this.post=this.post.bind(this),this.del=this.del.bind(this),this.patch=this.patch.bind(this),this.put=this.put.bind(this),this.head=this.head.bind(this)}var t=e.prototype;return t.exec=function(e,t){try{return Promise.resolve(this.agent(e,this.config,t))}catch(e){return Promise.reject(e)}},t.guard=function(e,t,s){try{return Promise.resolve(function(e,t,s,n){if(t.ok&&!r.isEmpty(t.data)&&null!==n){var o=r.getTypeGuard(n,"响应数据未能正确识别");if(o.guard(t.data))return t;console.error("response type check faild",e,t.data),s.showMessage(!0,e+" "+o.message)}return t.data=null,t}(e,t,this.config,s))}catch(e){return Promise.reject(e)}},t.setConfig=function(e){this.config.set(e),this.cache.updateTTL(this.config.get("cacheTTL"))},t.getConfig=function(e){return this.config.get(e)},t.head=function(e,t){try{var r=this,s=Object.assign({},t||null);s.method="HEAD";var n=r.guard;return Promise.resolve(r.exec(e,s)).then(function(t){return n.call(r,e,t,null)})}catch(e){return Promise.reject(e)}},t.get=function(e,t,r){try{var s,n=function(r){if(s)return r;var n=o.exec(e,a);o.cache.set(i,n);var u=o.guard;return Promise.resolve(n).then(function(r){return u.call(o,e,r,t||null)})},o=this,a=Object.assign({},r||null);a.method="GET";var i=o.cache.getKey(e,a.params),u=o.cache.get(i),c=function(){if(u){var r=o.guard;return Promise.resolve(u).then(function(n){var a=r.call(o,e,n,t||null);return s=1,a})}}();return Promise.resolve(c&&c.then?c.then(n):n(c))}catch(e){return Promise.reject(e)}},t.post=function(e,t,r,s){try{var n=this,o=Object.assign({},s||null);o.method="POST",o.body=t;var a=n.guard;return Promise.resolve(n.exec(e,o)).then(function(t){return a.call(n,e,t,r||null)})}catch(e){return Promise.reject(e)}},t.del=function(e,t,r){try{var s=this,n=Object.assign({},r||null);n.method="DELETE";var o=s.guard;return Promise.resolve(s.exec(e,n)).then(function(r){return o.call(s,e,r,t||null)})}catch(e){return Promise.reject(e)}},t.put=function(e,t,r,s){try{var n=this,o=Object.assign({},s||null);o.method="PUT",o.body=t;var a=n.guard;return Promise.resolve(n.exec(e,o)).then(function(t){return a.call(n,e,t,r||null)})}catch(e){return Promise.reject(e)}},t.patch=function(e,t,r,s){try{var n=this,o=Object.assign({},s||null);o.method="PATCH",o.body=t;var a=n.guard;return Promise.resolve(n.exec(e,o)).then(function(t){return a.call(n,e,t,r||null)})}catch(e){return Promise.reject(e)}},e}();function b(e){return new p(g,e)}var j=b(),P=j.setConfig,x=j.head,O=j.get,R=j.post,T=j.del,w=j.put,L=j.patch;exports.NetRequest=b,exports.del=T,exports.get=O,exports.head=x,exports.patch=L,exports.post=R,exports.put=w,exports.setGlobalConfig=P;
|
package/dist/node.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"node:http";import t from"node:https";import{
|
|
1
|
+
import e from"node:http";import t from"node:https";import{isJsonLike as r,parseJSON as n,isStringRecord as s,noop as o,sleep as a,isFullURL as i,isEmpty as u,getTypeGuard as c,getFullURL as l}from"@seayoo-web/utils";var h="message";function d(e,t){if(void 0===t&&(t=h),!r(e))return"";var o,a=n(e);return a&&s(a)&&t in a?(o=a[t])?"string"==typeof o?o:JSON.stringify(o):"":e}function f(e){var t=e.match(/<title>([^<]+)<\/title>/i);if(t)return t[1];var r=e.match(/<message>([^<]+)<\/message>/i);return r?r[1]:""}function m(e){return e>=200&&e<400}var g=function e(t,r,n,s,i){try{var u,c,l=i||0,h=Math.min(10,null!=(u=null==s?void 0:s.maxRetry)?u:n.get("maxRetry")),d=null!=(c=null==s?void 0:s.retryResolve)?c:n.get("retryResolve"),f=n.get("logHandler")||o;f({type:"prepear",url:r,method:(null==s?void 0:s.method)||"GET",retry:l,maxRetry:h,message:0===l?"start":"retry "+l+"/"+h+" start",options:s});var g=Date.now();return Promise.resolve(t(r,n,s)).then(function(o){var i,u=o.status,c=Date.now()-g,v="[cost "+c+"]["+u+"] "+(u<0?o.body:"");f({type:"finished",url:r,method:o.method,retry:l,maxRetry:h,message:0===l?"finish "+v:"retry "+l+"/"+h+" finish "+v,response:o,cost:c});var y=m(u);if(!h||"network"===d&&u>0||"status"===d&&y||l>=h)return o;var p=null!=(i=null==s?void 0:s.retryInterval)?i:n.get("retryInterval");return Promise.resolve(a(Math.max(100,"function"==typeof p?p(l+1):p))).then(function(){return Promise.resolve(e(t,r,n,s,l+1))})})}catch(e){return Promise.reject(e)}};function v(){return v=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},v.apply(this,arguments)}function y(e,t,r,n,s,o){return!1!==(null==o?void 0:o.message)&&s.showMessage(!e.ok,"function"==typeof(null==o?void 0:o.message)?o.message(e,r,n,t):t),e}function p(e){if(e)return e instanceof Blob||e instanceof ArrayBuffer||e instanceof FormData||e instanceof URLSearchParams||"string"==typeof e?e:JSON.stringify(e)}var b=function(e,t,o){try{return Promise.resolve(g(j,e,t,o)).then(function(a){return function(e,t,o,a){var i,u;if(e.status<0)return y({ok:!1,status:e.status,code:e.statusText,headers:{},message:"",data:null},e.method+" "+t+" "+e.statusText,e.method,t,o,a);m(e.status)||null==(u=o.get("errorHandler"))||u(e.status,e.method,t);var c,l,g,p,b,j=v({},(c=e.status,l=e.statusText,g=e.body,p=o.get("responseRule"),b=(null==a?void 0:a.responseRule)||p,m(c)?function(e,t,o,a){var i=e||{resolve:"body"},u={ok:!0,code:o,message:"",data:null};if(202===t||204===t||!a)return u;if("body"===i.resolve)return u.data=r(a)?n(a):a,u;var c=n(a);if(!c||!s(c))return u.ok=!1,u.code="ResponseFormatError",u.message="响应内容无法格式化为 Object",u;var l=i.statusField||"code",d=i.statusOKValue||"0",f=i.dataField||"data",m=i.messageField||h,g=i.ignoreMessage||"";if(!(l in c))return u.ok=!1,u.code="ResponseFieldMissing",u.message="响应内容找不到状态字段 "+l,u;var v=c[l]+"";return u.ok=v===d,u.code=v,u.message=m in c?c[m]+"":"",u.data=f in c?c[f]:null,g&&u.message&&(Array.isArray(g)&&g.includes(u.message)||"string"==typeof g&&u.message===g)&&(u.message=""),u}(b.ok||p.ok,c,l,g):function(e,t,r){var n=e||{resolve:"json",messageField:h},s={ok:!1,code:t,message:r,data:null};switch(n.resolve){case"auto":s.message=f(r)||d(r,n.messageField)||r;break;case"body":s.message=f(r)||r;break;case"json":s.message=d(r,n.messageField)}return s}(b.failed||p.failed,l,g)),{status:e.status,headers:Object.fromEntries(Object.entries(e.headers||{}).map(function(e){var t=e[1];return[e[0].toLowerCase(),t]}))});return null==(i=o.get("responseHandler"))||i(v({},j),e.method,t),y(j,j.ok?j.message:e.method+" "+t+" ["+j.code+"] "+(j.message||e.statusText),e.method,t,o,a)}(a,e,t,o)})}catch(e){return Promise.reject(e)}},j=function(r,n,s){try{var o=function(e,t,r){var n,s=Object.assign({method:"GET"},r),o=s.body instanceof FormData,a=o?"POST":s.method;"GET"!==a&&"HEAD"!==a&&"DELETE"!==a||void 0!==s.body&&(console.warn("request body is invalid with method get, head, delete"),delete s.body);var i=Object.assign(o?{}:{"Content-Type":"application/json;charset=utf-8"},s.headers),u=s.params||{},c={};return Object.keys(u).forEach(function(e){var t;void 0!==u[e]&&(c[e]="string"==typeof(t=u[e])?t:Array.isArray(t)?t.join(","):t+"")}),null==(n=t.get("requestHandler"))||n(i,c,a,e),{method:a,body:p(s.body),params:c,headers:i,timeout:s.timeout||t.get("timeout"),credentials:s.credentials||t.get("credentials")}}(r,n,s);if(!i(r))return Promise.resolve({url:r,method:o.method,status:-2,statusText:"URLFormatError",headers:{},body:""});var a=/^https:\/\//i.test(r)?t:e,u=new URL(r),c=o.params;c instanceof Object&&Object.keys(c).forEach(function(e){return u.searchParams.set(e,c[e])});var l="HEAD"===o.method;return Promise.resolve(new Promise(function(e){var t=a.request(u,{headers:o.headers,method:o.method,timeout:o.timeout>0?o.timeout:void 0},function(t){var n=[];l||t.on("data",function(e){return n.push(e)}),t.on("end",function(){var s=Object.fromEntries(Object.entries(t.headers).map(function(e){var t=e[1];return[e[0].toLowerCase(),Array.isArray(t)?t.join(","):t]}));e({url:r,method:o.method,status:t.statusCode||-3,statusText:t.statusMessage||"Unknown",headers:s,body:l?"":Buffer.concat(n).toString("utf-8")})})});t.on("error",function(t){e({url:r,method:o.method,status:-1,statusText:t.name||"Unknown",body:t.message})}),o.body&&t.write(o.body),t.end()}))}catch(e){return Promise.reject(e)}},P=/*#__PURE__*/function(){function e(e){void 0===e&&(e=500),this.ttl=void 0,this.cache=void 0,this.cache={},this.ttl=Math.max(e,0)}var t=e.prototype;return t.getKey=function(e,t){return e+Object.keys(t||{}).sort().map(function(e){return e+"#"+(null==t?void 0:t[e])}).join(",")},t.updateTTL=function(e){this.ttl=Math.max(e,0)},t.get=function(e){if(0===this.ttl)return null;var t=this.cache[e];return t?t.ttl<Date.now()?(delete this.cache[e],null):t.res:null},t.set=function(e,t){0!==this.ttl&&(this.cache[e]={ttl:Date.now()+this.ttl,res:t})},e}(),T=/*#__PURE__*/function(){function e(e){this.config={baseURL:"",maxRetry:0,retryInterval:1e3,retryResolve:"network",timeout:5e3,cacheTTL:500,credentials:"same-origin",responseRule:{ok:{resolve:"body"},failed:{resolve:"json",messageField:"message"}}},e&&this.set(e)}var t=e.prototype;return t.set=function(e){if(e.baseURL&&!/^\/.+/.test(e.baseURL)&&!i(e.baseURL))throw console.warn("baseURL 需要以 / 开头,或者是完整的 url 地址"),new Error("BaseURLError");Object.assign(this.config,e)},t.get=function(e){return this.config[e]},t.getFullUrl=function(e){return e.startsWith("/")?l(e):l(e,this.config.baseURL)},t.showMessage=function(e,t){this.config.messageHandler&&t&&this.config.messageHandler(e,t)},e}(),w=/*#__PURE__*/function(){function e(e,t){this.agent=void 0,this.config=void 0,this.cache=void 0,this.config=new T(t),this.agent=e,this.cache=new P(this.config.get("cacheTTL")),this.setConfig=this.setConfig.bind(this),this.getConfig=this.getConfig.bind(this),this.get=this.get.bind(this),this.post=this.post.bind(this),this.del=this.del.bind(this),this.patch=this.patch.bind(this),this.put=this.put.bind(this),this.head=this.head.bind(this)}var t=e.prototype;return t.exec=function(e,t){try{return Promise.resolve(this.agent(e,this.config,t))}catch(e){return Promise.reject(e)}},t.guard=function(e,t,r){try{return Promise.resolve(function(e,t,r,n){if(t.ok&&!u(t.data)&&null!==n){var s=c(n,"响应数据未能正确识别");if(s.guard(t.data))return t;console.error("response type check faild",e,t.data),r.showMessage(!0,e+" "+s.message)}return t.data=null,t}(e,t,this.config,r))}catch(e){return Promise.reject(e)}},t.setConfig=function(e){this.config.set(e),this.cache.updateTTL(this.config.get("cacheTTL"))},t.getConfig=function(e){return this.config.get(e)},t.head=function(e,t){try{var r=this,n=Object.assign({},t||null);n.method="HEAD";var s=r.guard;return Promise.resolve(r.exec(e,n)).then(function(t){return s.call(r,e,t,null)})}catch(e){return Promise.reject(e)}},t.get=function(e,t,r){try{var n,s=function(r){if(n)return r;var s=o.exec(e,a);o.cache.set(i,s);var u=o.guard;return Promise.resolve(s).then(function(r){return u.call(o,e,r,t||null)})},o=this,a=Object.assign({},r||null);a.method="GET";var i=o.cache.getKey(e,a.params),u=o.cache.get(i),c=function(){if(u){var r=o.guard;return Promise.resolve(u).then(function(s){var a=r.call(o,e,s,t||null);return n=1,a})}}();return Promise.resolve(c&&c.then?c.then(s):s(c))}catch(e){return Promise.reject(e)}},t.post=function(e,t,r,n){try{var s=this,o=Object.assign({},n||null);o.method="POST",o.body=t;var a=s.guard;return Promise.resolve(s.exec(e,o)).then(function(t){return a.call(s,e,t,r||null)})}catch(e){return Promise.reject(e)}},t.del=function(e,t,r){try{var n=this,s=Object.assign({},r||null);s.method="DELETE";var o=n.guard;return Promise.resolve(n.exec(e,s)).then(function(r){return o.call(n,e,r,t||null)})}catch(e){return Promise.reject(e)}},t.put=function(e,t,r,n){try{var s=this,o=Object.assign({},n||null);o.method="PUT",o.body=t;var a=s.guard;return Promise.resolve(s.exec(e,o)).then(function(t){return a.call(s,e,t,r||null)})}catch(e){return Promise.reject(e)}},t.patch=function(e,t,r,n){try{var s=this,o=Object.assign({},n||null);o.method="PATCH",o.body=t;var a=s.guard;return Promise.resolve(s.exec(e,o)).then(function(t){return a.call(s,e,t,r||null)})}catch(e){return Promise.reject(e)}},e}();function O(e){return new w(b,e)}var x=O(),R=x.setConfig,k=x.head,E=x.get,L=x.post,U=x.del,F=x.put,C=x.patch;export{O as NetRequest,U as del,E as get,k as head,C as patch,L as post,F as put,R as setGlobalConfig};
|
package/dist/wx.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=require("@seayoo-web/utils");function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},t.apply(this,arguments)}var r=function t(r,s,n,
|
|
1
|
+
var e=require("@seayoo-web/utils");function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},t.apply(this,arguments)}var r="message";function s(t,s){if(void 0===s&&(s=r),!e.isJsonLike(t))return"";var n,o=e.parseJSON(t);return o&&e.isStringRecord(o)&&s in o?(n=o[s])?"string"==typeof n?n:JSON.stringify(n):"":t}function n(e){var t=e.match(/<title>([^<]+)<\/title>/i);if(t)return t[1];var r=e.match(/<message>([^<]+)<\/message>/i);return r?r[1]:""}function o(e){return e>=200&&e<400}var a=function t(r,s,n,a,i){try{var u,c,l=i||0,h=Math.min(10,null!=(u=null==a?void 0:a.maxRetry)?u:n.get("maxRetry")),d=null!=(c=null==a?void 0:a.retryResolve)?c:n.get("retryResolve"),g=n.get("logHandler")||e.noop;g({type:"prepear",url:s,method:(null==a?void 0:a.method)||"GET",retry:l,maxRetry:h,message:0===l?"start":"retry "+l+"/"+h+" start",options:a});var f=Date.now();return Promise.resolve(r(s,n,a)).then(function(i){var u,c=i.status,m=Date.now()-f,v="[cost "+m+"]["+c+"] "+(c<0?i.body:"");g({type:"finished",url:s,method:i.method,retry:l,maxRetry:h,message:0===l?"finish "+v:"retry "+l+"/"+h+" finish "+v,response:i,cost:m});var y=o(c);if(!h||"network"===d&&c>0||"status"===d&&y||l>=h)return i;var p=null!=(u=null==a?void 0:a.retryInterval)?u:n.get("retryInterval");return Promise.resolve(e.sleep(Math.max(100,"function"==typeof p?p(l+1):p))).then(function(){return Promise.resolve(t(r,s,n,a,l+1))})})}catch(e){return Promise.reject(e)}};function i(e,t,r,s,n,o){return!1!==(null==o?void 0:o.message)&&n.showMessage(!e.ok,"function"==typeof(null==o?void 0:o.message)?o.message(e,r,s,t):t),e}function u(e){if(e)return e instanceof Blob||e instanceof ArrayBuffer||e instanceof FormData||e instanceof URLSearchParams||"string"==typeof e?e:JSON.stringify(e)}var c=function(u,c,h){try{return Promise.resolve(a(l,u,c,h)).then(function(a){return function(a,u,c,l){var h,d;if(a.status<0)return i({ok:!1,status:a.status,code:a.statusText,headers:{},message:"",data:null},a.method+" "+u+" "+a.statusText,a.method,u,c,l);o(a.status)||null==(d=c.get("errorHandler"))||d(a.status,a.method,u);var g,f,m,v,y,p=t({},(g=a.status,f=a.statusText,m=a.body,v=c.get("responseRule"),y=(null==l?void 0:l.responseRule)||v,o(g)?function(t,s,n,o){var a=t||{resolve:"body"},i={ok:!0,code:n,message:"",data:null};if(202===s||204===s||!o)return i;if("body"===a.resolve)return i.data=e.isJsonLike(o)?e.parseJSON(o):o,i;var u=e.parseJSON(o);if(!u||!e.isStringRecord(u))return i.ok=!1,i.code="ResponseFormatError",i.message="响应内容无法格式化为 Object",i;var c=a.statusField||"code",l=a.statusOKValue||"0",h=a.dataField||"data",d=a.messageField||r,g=a.ignoreMessage||"";if(!(c in u))return i.ok=!1,i.code="ResponseFieldMissing",i.message="响应内容找不到状态字段 "+c,i;var f=u[c]+"";return i.ok=f===l,i.code=f,i.message=d in u?u[d]+"":"",i.data=h in u?u[h]:null,g&&i.message&&(Array.isArray(g)&&g.includes(i.message)||"string"==typeof g&&i.message===g)&&(i.message=""),i}(y.ok||v.ok,g,f,m):function(e,t,o){var a=e||{resolve:"json",messageField:r},i={ok:!1,code:t,message:o,data:null};switch(a.resolve){case"auto":i.message=n(o)||s(o,a.messageField)||o;break;case"body":i.message=n(o)||o;break;case"json":i.message=s(o,a.messageField)}return i}(y.failed||v.failed,f,m)),{status:a.status,headers:Object.fromEntries(Object.entries(a.headers||{}).map(function(e){var t=e[1];return[e[0].toLowerCase(),t]}))});return null==(h=c.get("responseHandler"))||h(t({},p),a.method,u),i(p,p.ok?p.message:a.method+" "+u+" ["+p.code+"] "+(p.message||a.statusText),a.method,u,c,l)}(a,u,c,h)})}catch(e){return Promise.reject(e)}},l=function(r,s,n){try{var o=function(e,t,r){var s,n=Object.assign({method:"GET"},r),o=n.body instanceof FormData,a=o?"POST":n.method;"GET"!==a&&"HEAD"!==a&&"DELETE"!==a||void 0!==n.body&&(console.warn("request body is invalid with method get, head, delete"),delete n.body);var i=Object.assign(o?{}:{"Content-Type":"application/json;charset=utf-8"},n.headers),c=n.params||{},l={};return Object.keys(c).forEach(function(e){var t;void 0!==c[e]&&(l[e]="string"==typeof(t=c[e])?t:Array.isArray(t)?t.join(","):t+"")}),null==(s=t.get("requestHandler"))||s(i,l,a,e),{method:a,body:u(n.body),params:l,headers:i,timeout:n.timeout||t.get("timeout"),credentials:n.credentials||t.get("credentials")}}(r,s,n),a="PATCH"===o.method?"POST":o.method,i=e.addParamsToString(s.getFullUrl(r),o.params);return globalThis.wx?Promise.resolve(new Promise(function(e){wx.request({url:i,data:o.body,header:o.headers,method:a,dataType:"string",responseType:"text",fail:function(){e({url:i,method:a,status:-1,statusText:"NetworkError",body:"Network Error"})},success:function(r){var s;e({url:i,method:a,status:r.statusCode,statusText:r.statusCode+"",headers:t({},r.header),body:(s=r.data,"string"==typeof s?s:s instanceof ArrayBuffer&&"TextDecoder"in globalThis?(new TextDecoder).decode(s):JSON.stringify(s))})}})})):Promise.resolve({url:i,method:a,status:-2,statusText:"NotSupport",body:"NotFound namespace of wx"})}catch(e){return Promise.reject(e)}},h=/*#__PURE__*/function(){function e(e){void 0===e&&(e=500),this.ttl=void 0,this.cache=void 0,this.cache={},this.ttl=Math.max(e,0)}var t=e.prototype;return t.getKey=function(e,t){return e+Object.keys(t||{}).sort().map(function(e){return e+"#"+(null==t?void 0:t[e])}).join(",")},t.updateTTL=function(e){this.ttl=Math.max(e,0)},t.get=function(e){if(0===this.ttl)return null;var t=this.cache[e];return t?t.ttl<Date.now()?(delete this.cache[e],null):t.res:null},t.set=function(e,t){0!==this.ttl&&(this.cache[e]={ttl:Date.now()+this.ttl,res:t})},e}(),d=/*#__PURE__*/function(){function t(e){this.config={baseURL:"",maxRetry:0,retryInterval:1e3,retryResolve:"network",timeout:5e3,cacheTTL:500,credentials:"same-origin",responseRule:{ok:{resolve:"body"},failed:{resolve:"json",messageField:"message"}}},e&&this.set(e)}var r=t.prototype;return r.set=function(t){if(t.baseURL&&!/^\/.+/.test(t.baseURL)&&!e.isFullURL(t.baseURL))throw console.warn("baseURL 需要以 / 开头,或者是完整的 url 地址"),new Error("BaseURLError");Object.assign(this.config,t)},r.get=function(e){return this.config[e]},r.getFullUrl=function(t){return t.startsWith("/")?e.getFullURL(t):e.getFullURL(t,this.config.baseURL)},r.showMessage=function(e,t){this.config.messageHandler&&t&&this.config.messageHandler(e,t)},t}(),g=/*#__PURE__*/function(){function t(e,t){this.agent=void 0,this.config=void 0,this.cache=void 0,this.config=new d(t),this.agent=e,this.cache=new h(this.config.get("cacheTTL")),this.setConfig=this.setConfig.bind(this),this.getConfig=this.getConfig.bind(this),this.get=this.get.bind(this),this.post=this.post.bind(this),this.del=this.del.bind(this),this.patch=this.patch.bind(this),this.put=this.put.bind(this),this.head=this.head.bind(this)}var r=t.prototype;return r.exec=function(e,t){try{return Promise.resolve(this.agent(e,this.config,t))}catch(e){return Promise.reject(e)}},r.guard=function(t,r,s){try{return Promise.resolve(function(t,r,s,n){if(r.ok&&!e.isEmpty(r.data)&&null!==n){var o=e.getTypeGuard(n,"响应数据未能正确识别");if(o.guard(r.data))return r;console.error("response type check faild",t,r.data),s.showMessage(!0,t+" "+o.message)}return r.data=null,r}(t,r,this.config,s))}catch(e){return Promise.reject(e)}},r.setConfig=function(e){this.config.set(e),this.cache.updateTTL(this.config.get("cacheTTL"))},r.getConfig=function(e){return this.config.get(e)},r.head=function(e,t){try{var r=this,s=Object.assign({},t||null);s.method="HEAD";var n=r.guard;return Promise.resolve(r.exec(e,s)).then(function(t){return n.call(r,e,t,null)})}catch(e){return Promise.reject(e)}},r.get=function(e,t,r){try{var s,n=function(r){if(s)return r;var n=o.exec(e,a);o.cache.set(i,n);var u=o.guard;return Promise.resolve(n).then(function(r){return u.call(o,e,r,t||null)})},o=this,a=Object.assign({},r||null);a.method="GET";var i=o.cache.getKey(e,a.params),u=o.cache.get(i),c=function(){if(u){var r=o.guard;return Promise.resolve(u).then(function(n){var a=r.call(o,e,n,t||null);return s=1,a})}}();return Promise.resolve(c&&c.then?c.then(n):n(c))}catch(e){return Promise.reject(e)}},r.post=function(e,t,r,s){try{var n=this,o=Object.assign({},s||null);o.method="POST",o.body=t;var a=n.guard;return Promise.resolve(n.exec(e,o)).then(function(t){return a.call(n,e,t,r||null)})}catch(e){return Promise.reject(e)}},r.del=function(e,t,r){try{var s=this,n=Object.assign({},r||null);n.method="DELETE";var o=s.guard;return Promise.resolve(s.exec(e,n)).then(function(r){return o.call(s,e,r,t||null)})}catch(e){return Promise.reject(e)}},r.put=function(e,t,r,s){try{var n=this,o=Object.assign({},s||null);o.method="PUT",o.body=t;var a=n.guard;return Promise.resolve(n.exec(e,o)).then(function(t){return a.call(n,e,t,r||null)})}catch(e){return Promise.reject(e)}},r.patch=function(e,t,r,s){try{var n=this,o=Object.assign({},s||null);o.method="PATCH",o.body=t;var a=n.guard;return Promise.resolve(n.exec(e,o)).then(function(t){return a.call(n,e,t,r||null)})}catch(e){return Promise.reject(e)}},t}();function f(e){return new g(c,e)}var m=f(),v=m.setConfig,y=m.head,p=m.get,b=m.post,T=m.del,P=m.put;exports.NetRequest=f,exports.del=T,exports.get=p,exports.head=y,exports.post=b,exports.put=P,exports.setGlobalConfig=v;
|
package/dist/wx.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{isJsonLike as e,parseJSON as t,isStringRecord as r,noop as s,sleep as n,addParamsToString as o,isEmpty as a,getTypeGuard as i,isFullURL as u,getFullURL as c}from"@seayoo-web/utils";function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(e[s]=r[s])}return e},l.apply(this,arguments)}var h="message";function d(s,n){if(void 0===n&&(n=h),!e(s))return"";var o,a=t(s);return a&&r(a)&&n in a?(o=a[n])?"string"==typeof o?o:JSON.stringify(o):"":s}function f(e){var t=e.match(/<title>([^<]+)<\/title>/i);if(t)return t[1];var r=e.match(/<message>([^<]+)<\/message>/i);return r?r[1]:""}function g(e){return e>=200&&e<400}var m=function e(t,r,o,a,i){try{var u,c,l=i||0,h=Math.min(10,null!=(u=null==a?void 0:a.maxRetry)?u:o.get("maxRetry")),d=null!=(c=null==a?void 0:a.retryResolve)?c:o.get("retryResolve"),f=o.get("logHandler")||s;f({type:"prepear",url:r,method:(null==a?void 0:a.method)||"GET",retry:l,maxRetry:h,message:0===l?"start":"retry "+l+"/"+h+" start",options:a});var m=Date.now();return Promise.resolve(t(r,o,a)).then(function(s){var i,u=s.status,c=Date.now()-m,v="[cost "+c+"]["+u+"] "+(u<0?s.body:"");f({type:"finished",url:r,method:s.method,retry:l,maxRetry:h,message:0===l?"finish "+v:"retry "+l+"/"+h+" finish "+v,response:s,cost:c});var y=g(u);if(!h||"network"===d&&u>0||"status"===d&&y||l>=h)return s;var p=null!=(i=null==a?void 0:a.retryInterval)?i:o.get("retryInterval");return Promise.resolve(n(Math.max(100,"function"==typeof p?p(l+1):p))).then(function(){return Promise.resolve(e(t,r,o,a,l+1))})})}catch(e){return Promise.reject(e)}};function v(e,t,r,s,n,o){return!1!==(null==o?void 0:o.message)&&n.showMessage(!e.ok,"function"==typeof(null==o?void 0:o.message)?o.message(e,r,s,t):t),e}function y(e){if(e)return e instanceof Blob||e instanceof ArrayBuffer||e instanceof FormData||e instanceof URLSearchParams||"string"==typeof e?e:JSON.stringify(e)}var p=function(s,n,o){try{return Promise.resolve(m(b,s,n,o)).then(function(a){return function(s,n,o,a){var i,u;if(s.status<0)return v({ok:!1,status:s.status,code:s.statusText,headers:{},message:"",data:null},s.method+" "+n+" "+s.statusText,s.method,n,o,a);g(s.status)||null==(u=o.get("errorHandler"))||u(s.status,s.method,n);var c,m,y,p,b,P=l({},(c=s.status,m=s.statusText,y=s.body,p=o.get("responseRule"),b=(null==a?void 0:a.responseRule)||p,g(c)?function(s,n,o,a){var i=s||{resolve:"body"},u={ok:!0,code:o,message:"",data:null};if(202===n||204===n||!a)return u;if("body"===i.resolve)return u.data=e(a)?t(a):a,u;var c=t(a);if(!c||!r(c))return u.ok=!1,u.code="ResponseFormatError",u.message="响应内容无法格式化为 Object",u;var l=i.statusField||"code",d=i.statusOKValue||"0",f=i.dataField||"data",g=i.messageField||h,m=i.ignoreMessage||"";if(!(l in c))return u.ok=!1,u.code="ResponseFieldMissing",u.message="响应内容找不到状态字段 "+l,u;var v=c[l]+"";return u.ok=v===d,u.code=v,u.message=g in c?c[g]+"":"",u.data=f in c?c[f]:null,m&&u.message&&(Array.isArray(m)&&m.includes(u.message)||"string"==typeof m&&u.message===m)&&(u.message=""),u}(b.ok||p.ok,c,m,y):function(e,t,r){var s=e||{resolve:"json",messageField:h},n={ok:!1,code:t,message:r,data:null};switch(s.resolve){case"auto":n.message=f(r)||d(r,s.messageField)||r;break;case"body":n.message=f(r)||r;break;case"json":n.message=d(r,s.messageField)}return n}(b.failed||p.failed,m,y)),{status:s.status,headers:Object.fromEntries(Object.entries(s.headers||{}).map(function(e){var t=e[1];return[e[0].toLowerCase(),t]}))});return null==(i=o.get("responseHandler"))||i(l({},P),s.method,n),v(P,P.ok?P.message:s.method+" "+n+" ["+P.code+"] "+(P.message||s.statusText),s.method,n,o,a)}(a,s,n,o)})}catch(e){return Promise.reject(e)}},b=function(e,t,r){try{var s=function(e,t,r){var s,n=Object.assign({method:"GET"},r),o=n.body instanceof FormData,a=o?"POST":n.method;"GET"!==a&&"HEAD"!==a&&"DELETE"!==a||void 0!==n.body&&(console.warn("request body is invalid with method get, head, delete"),delete n.body);var i=Object.assign(o?{}:{"Content-Type":"application/json;charset=utf-8"},n.headers),u=n.params||{},c={};return Object.keys(u).forEach(function(e){var t;void 0!==u[e]&&(c[e]="string"==typeof(t=u[e])?t:Array.isArray(t)?t.join(","):t+"")}),null==(s=t.get("requestHandler"))||s(i,c,a,e),{method:a,body:y(n.body),params:c,headers:i,timeout:n.timeout||t.get("timeout"),credentials:n.credentials||t.get("credentials")}}(e,t,r),n="PATCH"===s.method?"POST":s.method,a=o(t.getFullUrl(e),s.params);return globalThis.wx?Promise.resolve(new Promise(function(e){wx.request({url:a,data:s.body,header:s.headers,method:n,dataType:"string",responseType:"text",fail:function(){e({url:a,method:n,status:-1,statusText:"NetworkError",body:"Network Error"})},success:function(t){var r;e({url:a,method:n,status:t.statusCode,statusText:t.statusCode+"",headers:l({},t.header),body:(r=t.data,"string"==typeof r?r:r instanceof ArrayBuffer&&"TextDecoder"in globalThis?(new TextDecoder).decode(r):JSON.stringify(r))})}})})):Promise.resolve({url:a,method:n,status:-2,statusText:"NotSupport",body:"NotFound namespace of wx"})}catch(e){return Promise.reject(e)}},P=/*#__PURE__*/function(){function e(e){void 0===e&&(e=500),this.ttl=void 0,this.cache=void 0,this.cache={},this.ttl=Math.max(e,0)}var t=e.prototype;return t.getKey=function(e,t){return e+Object.keys(t||{}).sort().map(function(e){return e+"#"+(null==t?void 0:t[e])}).join(",")},t.updateTTL=function(e){this.ttl=Math.max(e,0)},t.get=function(e){if(0===this.ttl)return null;var t=this.cache[e];return t?t.ttl<Date.now()?(delete this.cache[e],null):t.res:null},t.set=function(e,t){0!==this.ttl&&(this.cache[e]={ttl:Date.now()+this.ttl,res:t})},e}(),T=/*#__PURE__*/function(){function e(e){this.config={baseURL:"",maxRetry:0,retryInterval:1e3,retryResolve:"network",timeout:5e3,cacheTTL:500,credentials:"same-origin",responseRule:{ok:{resolve:"body"},failed:{resolve:"json",messageField:"message"}}},e&&this.set(e)}var t=e.prototype;return t.set=function(e){if(e.baseURL&&!/^\/.+/.test(e.baseURL)&&!u(e.baseURL))throw console.warn("baseURL 需要以 / 开头,或者是完整的 url 地址"),new Error("BaseURLError");Object.assign(this.config,e)},t.get=function(e){return this.config[e]},t.getFullUrl=function(e){return e.startsWith("/")?c(e):c(e,this.config.baseURL)},t.showMessage=function(e,t){this.config.messageHandler&&t&&this.config.messageHandler(e,t)},e}(),j=/*#__PURE__*/function(){function e(e,t){this.agent=void 0,this.config=void 0,this.cache=void 0,this.config=new T(t),this.agent=e,this.cache=new P(this.config.get("cacheTTL")),this.setConfig=this.setConfig.bind(this),this.getConfig=this.getConfig.bind(this),this.get=this.get.bind(this),this.post=this.post.bind(this),this.del=this.del.bind(this),this.patch=this.patch.bind(this),this.put=this.put.bind(this),this.head=this.head.bind(this)}var t=e.prototype;return t.exec=function(e,t){try{return Promise.resolve(this.agent(e,this.config,t))}catch(e){return Promise.reject(e)}},t.guard=function(e,t,r){try{return Promise.resolve(function(e,t,r,s){if(t.ok&&!a(t.data)&&null!==s){var n=i(s,"响应数据未能正确识别");if(n.guard(t.data))return t;console.error("response type check faild",e,t.data),r.showMessage(!0,e+" "+n.message)}return t.data=null,t}(e,t,this.config,r))}catch(e){return Promise.reject(e)}},t.setConfig=function(e){this.config.set(e),this.cache.updateTTL(this.config.get("cacheTTL"))},t.getConfig=function(e){return this.config.get(e)},t.head=function(e,t){try{var r=this,s=Object.assign({},t||null);s.method="HEAD";var n=r.guard;return Promise.resolve(r.exec(e,s)).then(function(t){return n.call(r,e,t,null)})}catch(e){return Promise.reject(e)}},t.get=function(e,t,r){try{var s,n=function(r){if(s)return r;var n=o.exec(e,a);o.cache.set(i,n);var u=o.guard;return Promise.resolve(n).then(function(r){return u.call(o,e,r,t||null)})},o=this,a=Object.assign({},r||null);a.method="GET";var i=o.cache.getKey(e,a.params),u=o.cache.get(i),c=function(){if(u){var r=o.guard;return Promise.resolve(u).then(function(n){var a=r.call(o,e,n,t||null);return s=1,a})}}();return Promise.resolve(c&&c.then?c.then(n):n(c))}catch(e){return Promise.reject(e)}},t.post=function(e,t,r,s){try{var n=this,o=Object.assign({},s||null);o.method="POST",o.body=t;var a=n.guard;return Promise.resolve(n.exec(e,o)).then(function(t){return a.call(n,e,t,r||null)})}catch(e){return Promise.reject(e)}},t.del=function(e,t,r){try{var s=this,n=Object.assign({},r||null);n.method="DELETE";var o=s.guard;return Promise.resolve(s.exec(e,n)).then(function(r){return o.call(s,e,r,t||null)})}catch(e){return Promise.reject(e)}},t.put=function(e,t,r,s){try{var n=this,o=Object.assign({},s||null);o.method="PUT",o.body=t;var a=n.guard;return Promise.resolve(n.exec(e,o)).then(function(t){return a.call(n,e,t,r||null)})}catch(e){return Promise.reject(e)}},t.patch=function(e,t,r,s){try{var n=this,o=Object.assign({},s||null);o.method="PATCH",o.body=t;var a=n.guard;return Promise.resolve(n.exec(e,o)).then(function(t){return a.call(n,e,t,r||null)})}catch(e){return Promise.reject(e)}},e}();function x(e){return new j(p,e)}var w=x(),O=w.setConfig,k=w.head,R=w.get,E=w.post,L=w.del,F=w.put;export{x as NetRequest,L as del,R as get,k as head,E as post,F as put,O as setGlobalConfig};
|