@seayoo-web/request 1.7.1 → 1.7.2

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 CHANGED
@@ -261,9 +261,9 @@ status 表示网络错误或者http 状态码错误时重试;
261
261
 
262
262
  ### errorHandler
263
263
 
264
- 类型:null | ((status: number, method: string, url: string) => void)
264
+ 类型:null | ((status: number, method: string, url: string, rawError?: Error | ProgressEvent) => void)
265
265
 
266
- 说明:全局错误处理函数,仅仅在 http status 错误时触发,通常用于检查 401 未登录状态进行跳转登录
266
+ 说明:全局错误处理函数,仅仅在 http status 错误时触发,通常用于检查 401 未登录状态进行跳转登录,其中 rawError 为请求工具的原始错误,可用以进行 Sentry 信息上报;
267
267
 
268
268
  ### responseHandler
269
269
 
@@ -59,6 +59,8 @@ export interface IOtherRequestOptions {
59
59
  }
60
60
  /** 对外工具接口的请求配置 */
61
61
  export type IRequestOptions = IBaseRequestOptions & IRetryRequestOptions & IOtherRequestOptions;
62
+ /** 请求的原始错误信息 */
63
+ type ERequestRawError = Error | ProgressEvent;
62
64
  /** 全局默认配置 */
63
65
  export type IRequestGlobalConfig = {
64
66
  /**
@@ -85,7 +87,7 @@ export type IRequestGlobalConfig = {
85
87
  body?: IBaseRequestBody;
86
88
  }) => MaybePromise<void | string>);
87
89
  /** 全局错误处理函数,仅仅在 statusCode 错误时触发 */
88
- errorHandler?: null | ((status: number, method: string, url: string) => void);
90
+ errorHandler?: null | ((status: number, method: string, url: string, rawError?: ERequestRawError) => void);
89
91
  /** 全局响应处理函数,任意状态都会触发 */
90
92
  responseHandler?: null | ((result: IResponseResult, method: string, url: string) => void);
91
93
  /** 全局消息提示函数 */
@@ -156,6 +158,8 @@ export interface IRequestBaseResponse {
156
158
  headers?: Record<string, string | undefined>;
157
159
  /** 响应体,如果网络错误或 204/202,则返回空或错误信息 */
158
160
  body: string;
161
+ /** 原始的请求错误信息,仅当请求失败时有值,用以进行错误上报用 */
162
+ rawError?: ERequestRawError;
159
163
  }
160
164
  /** 对外工具接口的返回内容 */
161
165
  export interface IResponseResult<T = unknown> {
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./version-Cx7ZvtPo.cjs"),y=require("./request.fetch-CaHYPyjf.cjs"),m=async function(t,o,e){return s.handleResponse(await s.retryRequest(w,t,o,e),t,o,e)};async function q(t,o,e,n){const r=e==null?void 0:e.body,d=(e==null?void 0:e.method)==="PUT"?"PUT":"POST";if(o instanceof Blob){const l=new s.RequestGlobalConfig(n),f=await w(t,l,{...e,method:d,body:o});return s.handleResponse(f,t,l,e)}const a=new FormData,u={...o};r instanceof Object&&Object.entries(r).forEach(([l,f])=>{f instanceof Blob?u[l]=f:Array.isArray(f)?f.forEach((c,g)=>{a.append(`${l}[${g}]`,String(c))}):a.append(l,String(f))});for(const l in u)a.append(l,u[l]);const b=new s.RequestGlobalConfig(n),p=await w(t,b,{...e,method:d,body:a});return s.handleResponse(p,t,b,e)}const w=async function(t,o,e){const n=await s.convertOptions(t,o,e),r=n.method,d=e==null?void 0:e.onUploadProgress,a=s.Ut(n.url,n.params);return await new Promise(u=>{let b=null,p=!1;const l=function(){p||(c.abort(),p=!0)};function f(){b!==null&&clearTimeout(b),n.abort&&n.abort.removeEventListener("abort",l)}const c=new XMLHttpRequest;if(c.open(r,a,!0),d){let g=1;c.upload.addEventListener("progress",h=>{g=h.total,d({total:h.total,loaded:h.loaded})}),c.addEventListener("load",()=>{f(),d({loaded:g,total:g}),u({url:a,method:r,status:c.status,statusText:c.statusText,headers:H(c),body:r==="HEAD"?"":c.responseText})})}c.addEventListener("error",()=>{f(),u({url:a,method:r,status:-1,statusText:"Failed",body:""})}),c.addEventListener("abort",()=>{f(),u({url:a,method:r,status:-1,statusText:"Aborted",body:""})}),Object.entries(n.headers).forEach(([g,h])=>{c.setRequestHeader(g,h)}),n.credentials==="include"&&(c.withCredentials=!0),c.send(n.body||void 0),n.abort&&n.abort.addEventListener("abort",l),n.timeout>0&&(b=setTimeout(l,n.timeout))})};function H(t){const o={};if(!t)return o;const e=t.getAllResponseHeaders();return e&&e!=="null"&&e.replace(/\r/g,"").split(`
2
- `).forEach(n=>{const r=n.trim();if(!r)return;const d=r.split(":"),a=d[0].trim();a&&(o[a]=(d[1]||"").trim())}),o}async function T(t,o,e={}){const n=window;"callback"in e||(e.callback="jsonxData"+Math.random().toString(16).slice(2));const r=e.callback+"";if(!t)return null;const d=s.Ut(t,e,!0);return new Promise(a=>{n[r]=function(u){if(r in window&&delete n[r],o(u))return u;console.warn("response type check faild",t,u),a(null)},s.Ae(d).catch(function(){a(null),delete n[r]})})}async function C(t,o,e={}){const n=window;return"var"in e||(e.var="jsonxData"+Math.random().toString(16).slice(2)),t?await s.Ae(s.Ut(t,e,!0)).then(()=>{const r=n[e.var+""];return o(r)?r:(console.warn("response type check faild",t,r),null)}).catch(()=>null):null}const E=async function(t,o,e){return await q(t,o,e,{baseURL:i.getConfig("baseURL"),logHandler:i.getConfig("logHandler"),errorHandler:i.getConfig("errorHandler"),requestTransformer:i.getConfig("requestTransformer"),messageHandler:i.getConfig("messageHandler"),responseHandler:i.getConfig("responseHandler")})};function R(t){if(!s.Support.window)throw new Error("Default Module Only Support In Browser");return s.Support.fetch?new s.NetRequestHandler(y.fetchRequest,t):new s.NetRequestHandler(m,t)}const i=R(),S=i.setConfig,x=i.head,U=i.get,j=i.post,v=i.del,L=i.put,D=i.patch;exports.getResponseRulesDescription=s.getResponseRulesDescription;exports.version=s.version;exports.NetRequest=R;exports.del=v;exports.get=U;exports.head=x;exports.jsonp=T;exports.jsonx=C;exports.patch=D;exports.post=j;exports.put=L;exports.setGlobalConfig=S;exports.upload=E;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./version-BZ8fy-0W.cjs"),y=require("./request.fetch-BtrGinni.cjs"),m=async function(t,o,e){return s.handleResponse(await s.retryRequest(w,t,o,e),t,o,e)};async function q(t,o,e,n){const r=e==null?void 0:e.body,d=(e==null?void 0:e.method)==="PUT"?"PUT":"POST";if(o instanceof Blob){const l=new s.RequestGlobalConfig(n),f=await w(t,l,{...e,method:d,body:o});return s.handleResponse(f,t,l,e)}const a=new FormData,u={...o};r instanceof Object&&Object.entries(r).forEach(([l,f])=>{f instanceof Blob?u[l]=f:Array.isArray(f)?f.forEach((c,g)=>{a.append(`${l}[${g}]`,String(c))}):a.append(l,String(f))});for(const l in u)a.append(l,u[l]);const b=new s.RequestGlobalConfig(n),p=await w(t,b,{...e,method:d,body:a});return s.handleResponse(p,t,b,e)}const w=async function(t,o,e){const n=await s.convertOptions(t,o,e),r=n.method,d=e==null?void 0:e.onUploadProgress,a=s.Ut(n.url,n.params);return await new Promise(u=>{let b=null,p=!1;const l=function(){p||(c.abort(),p=!0)};function f(){b!==null&&clearTimeout(b),n.abort&&n.abort.removeEventListener("abort",l)}const c=new XMLHttpRequest;if(c.open(r,a,!0),d){let g=1;c.upload.addEventListener("progress",h=>{g=h.total,d({total:h.total,loaded:h.loaded})}),c.addEventListener("load",()=>{f(),d({loaded:g,total:g}),u({url:a,method:r,status:c.status,statusText:c.statusText,headers:H(c),body:r==="HEAD"?"":c.responseText})})}c.addEventListener("error",g=>{f(),u({url:a,method:r,status:-1,statusText:"Failed",body:"",rawError:g})},!0),c.addEventListener("abort",()=>{f(),u({url:a,method:r,status:-1,statusText:"Aborted",body:""})}),Object.entries(n.headers).forEach(([g,h])=>{c.setRequestHeader(g,h)}),n.credentials==="include"&&(c.withCredentials=!0),c.send(n.body||void 0),n.abort&&n.abort.addEventListener("abort",l),n.timeout>0&&(b=setTimeout(l,n.timeout))})};function H(t){const o={};if(!t)return o;const e=t.getAllResponseHeaders();return e&&e!=="null"&&e.replace(/\r/g,"").split(`
2
+ `).forEach(n=>{const r=n.trim();if(!r)return;const d=r.split(":"),a=d[0].trim();a&&(o[a]=(d[1]||"").trim())}),o}async function T(t,o,e={}){const n=window;"callback"in e||(e.callback="jsonxData"+Math.random().toString(16).slice(2));const r=e.callback+"";if(!t)return null;const d=s.Ut(t,e,!0);return new Promise(a=>{n[r]=function(u){if(r in window&&delete n[r],o(u))return u;console.warn("response type check faild",t,u),a(null)},s.Ae(d).catch(function(){a(null),delete n[r]})})}async function E(t,o,e={}){const n=window;return"var"in e||(e.var="jsonxData"+Math.random().toString(16).slice(2)),t?await s.Ae(s.Ut(t,e,!0)).then(()=>{const r=n[e.var+""];return o(r)?r:(console.warn("response type check faild",t,r),null)}).catch(()=>null):null}const C=async function(t,o,e){return await q(t,o,e,{baseURL:i.getConfig("baseURL"),logHandler:i.getConfig("logHandler"),errorHandler:i.getConfig("errorHandler"),requestTransformer:i.getConfig("requestTransformer"),messageHandler:i.getConfig("messageHandler"),responseHandler:i.getConfig("responseHandler")})};function R(t){if(!s.Support.window)throw new Error("Default Module Only Support In Browser");return s.Support.fetch?new s.NetRequestHandler(y.fetchRequest,t):new s.NetRequestHandler(m,t)}const i=R(),S=i.setConfig,x=i.head,U=i.get,j=i.post,v=i.del,L=i.put,D=i.patch;exports.getResponseRulesDescription=s.getResponseRulesDescription;exports.version=s.version;exports.NetRequest=R;exports.del=v;exports.get=U;exports.head=x;exports.jsonp=T;exports.jsonx=E;exports.patch=D;exports.post=j;exports.put=L;exports.setGlobalConfig=S;exports.upload=C;
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import { h as w, r as q, R as y, c as x, U as p, A as T, S as R, N as H } from "./version-C-bTPkwR.js";
2
- import { g as z, v as I } from "./version-C-bTPkwR.js";
3
- import { f as E } from "./request.fetch-DnbU5fqv.js";
1
+ import { h as w, r as E, R as y, c as q, U as p, A as T, S as R, N as H } from "./version-BLZ49ejb.js";
2
+ import { g as z, v as I } from "./version-BLZ49ejb.js";
3
+ import { f as x } from "./request.fetch-DlebtNMD.js";
4
4
  const C = async function(t, a, e) {
5
- return w(await q(m, t, a, e), t, a, e);
5
+ return w(await E(m, t, a, e), t, a, e);
6
6
  };
7
7
  async function S(t, a, e, n) {
8
8
  const r = e == null ? void 0 : e.body, i = (e == null ? void 0 : e.method) === "PUT" ? "PUT" : "POST";
@@ -30,7 +30,7 @@ async function S(t, a, e, n) {
30
30
  return w(h, t, b, e);
31
31
  }
32
32
  const m = async function(t, a, e) {
33
- const n = await x(t, a, e), r = n.method, i = e == null ? void 0 : e.onUploadProgress, o = p(n.url, n.params);
33
+ const n = await q(t, a, e), r = n.method, i = e == null ? void 0 : e.onUploadProgress, o = p(n.url, n.params);
34
34
  return await new Promise((d) => {
35
35
  let b = null, h = !1;
36
36
  const c = function() {
@@ -55,15 +55,20 @@ const m = async function(t, a, e) {
55
55
  });
56
56
  });
57
57
  }
58
- s.addEventListener("error", () => {
59
- u(), d({
60
- url: o,
61
- method: r,
62
- status: -1,
63
- statusText: "Failed",
64
- body: ""
65
- });
66
- }), s.addEventListener("abort", () => {
58
+ s.addEventListener(
59
+ "error",
60
+ (f) => {
61
+ u(), d({
62
+ url: o,
63
+ method: r,
64
+ status: -1,
65
+ statusText: "Failed",
66
+ body: "",
67
+ rawError: f
68
+ });
69
+ },
70
+ !0
71
+ ), s.addEventListener("abort", () => {
67
72
  u(), d({
68
73
  url: o,
69
74
  method: r,
@@ -127,7 +132,7 @@ const D = async function(t, a, e) {
127
132
  function L(t) {
128
133
  if (!R.window)
129
134
  throw new Error("Default Module Only Support In Browser");
130
- return R.fetch ? new H(E, t) : new H(C, t);
135
+ return R.fetch ? new H(x, t) : new H(C, t);
131
136
  }
132
137
  const l = L(), O = l.setConfig, P = l.head, M = l.get, N = l.post, B = l.del, F = l.put, X = l.patch;
133
138
  export {
package/dist/node.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("node:http"),R=require("node:https"),e=require("./version-Cx7ZvtPo.cjs"),g=require("./request.fetch-CaHYPyjf.cjs"),w=async function(s,u,c){return e.handleResponse(await e.retryRequest(S,s,u,c),s,u,c)},S=async function(s,u,c){const t=await e.convertOptions(s,u,c);if(!e.D(t.url))return{url:t.url,method:t.method,status:-1,statusText:"URLFormatError",headers:{},body:""};const f=/^https:\/\//i.test(t.url)?R:y,a=new URL(t.url),i=t.params;i instanceof Object&&Object.keys(i).forEach(r=>a.searchParams.set(r,i[r]));const q=t.method==="HEAD";return new Promise(r=>{const d=f.request(a,{headers:t.headers,method:t.method,timeout:t.timeout>0?t.timeout:void 0},function(o){const p=[];o.on("data",h=>p.push(h)),o.on("end",()=>{const h=e.fromEntries(Object.entries(o.headers).map(([b,m])=>[b.toLowerCase(),Array.isArray(m)?m.join(","):m]));r({url:a.toString(),method:t.method,status:o.statusCode||-1,statusText:o.statusMessage||"Unknown",headers:h,body:q?"":Buffer.concat(p).toString("utf-8")})})});d.on("error",o=>{r({url:a.toString(),method:t.method,status:-1,statusText:o.name||"Unknown",body:o.message})}),d.on("timeout",()=>{r({url:a.toString(),method:t.method,status:-1,statusText:"Timeout",body:""})}),t.body&&d.write(t.body),d.end()})};function l(s){return e.Support.fetch?new e.NetRequestHandler(g.fetchRequest,s):new e.NetRequestHandler(w,s)}const n=l(),T=n.setConfig,j=n.head,C=n.get,N=n.post,O=n.del,U=n.put,x=n.patch;exports.version=e.version;exports.NetRequest=l;exports.del=O;exports.get=C;exports.head=j;exports.patch=x;exports.post=N;exports.put=U;exports.setGlobalConfig=T;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("node:http"),R=require("node:https"),o=require("./version-BZ8fy-0W.cjs"),g=require("./request.fetch-BtrGinni.cjs"),w=async function(s,u,c){return o.handleResponse(await o.retryRequest(S,s,u,c),s,u,c)},S=async function(s,u,c){const t=await o.convertOptions(s,u,c);if(!o.D(t.url))return{url:t.url,method:t.method,status:-1,statusText:"URLFormatError",headers:{},body:""};const f=/^https:\/\//i.test(t.url)?R:y,a=new URL(t.url),i=t.params;i instanceof Object&&Object.keys(i).forEach(r=>a.searchParams.set(r,i[r]));const q=t.method==="HEAD";return new Promise(r=>{const d=f.request(a,{headers:t.headers,method:t.method,timeout:t.timeout>0?t.timeout:void 0},function(e){const p=[];e.on("data",h=>p.push(h)),e.on("end",()=>{const h=o.fromEntries(Object.entries(e.headers).map(([b,m])=>[b.toLowerCase(),Array.isArray(m)?m.join(","):m]));r({url:a.toString(),method:t.method,status:e.statusCode||-1,statusText:e.statusMessage||"Unknown",headers:h,body:q?"":Buffer.concat(p).toString("utf-8")})})});d.on("error",e=>{r({url:a.toString(),method:t.method,status:-1,statusText:e.name||"Unknown",body:e.message,rawError:e})}),d.on("timeout",()=>{r({url:a.toString(),method:t.method,status:-1,statusText:"Timeout",body:""})}),t.body&&d.write(t.body),d.end()})};function l(s){return o.Support.fetch?new o.NetRequestHandler(g.fetchRequest,s):new o.NetRequestHandler(w,s)}const n=l(),T=n.setConfig,j=n.head,C=n.get,E=n.post,N=n.del,O=n.put,U=n.patch;exports.version=o.version;exports.NetRequest=l;exports.del=N;exports.get=C;exports.head=j;exports.patch=U;exports.post=E;exports.put=O;exports.setGlobalConfig=T;
package/dist/node.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import y from "node:http";
2
2
  import R from "node:https";
3
- import { h as q, r as w, c as g, D as x, f as S, S as T, N as p } from "./version-C-bTPkwR.js";
4
- import { v as z } from "./version-C-bTPkwR.js";
5
- import { f as U } from "./request.fetch-DnbU5fqv.js";
6
- const j = async function(o, a, u) {
7
- return q(await w(C, o, a, u), o, a, u);
8
- }, C = async function(o, a, u) {
3
+ import { h as w, r as q, c as g, D as x, f as S, S as E, N as p } from "./version-BLZ49ejb.js";
4
+ import { v as z } from "./version-BLZ49ejb.js";
5
+ import { f as T } from "./request.fetch-DlebtNMD.js";
6
+ const U = async function(o, a, u) {
7
+ return w(await q(j, o, a, u), o, a, u);
8
+ }, j = async function(o, a, u) {
9
9
  const t = await g(o, a, u);
10
10
  if (!x(t.url))
11
11
  return {
@@ -16,12 +16,12 @@ const j = async function(o, a, u) {
16
16
  headers: {},
17
17
  body: ""
18
18
  };
19
- const f = /^https:\/\//i.test(t.url) ? R : y, r = new URL(t.url), d = t.params;
20
- d instanceof Object && Object.keys(d).forEach((n) => r.searchParams.set(n, d[n]));
19
+ const f = /^https:\/\//i.test(t.url) ? R : y, n = new URL(t.url), d = t.params;
20
+ d instanceof Object && Object.keys(d).forEach((r) => n.searchParams.set(r, d[r]));
21
21
  const b = t.method === "HEAD";
22
- return new Promise((n) => {
22
+ return new Promise((r) => {
23
23
  const c = f.request(
24
- r,
24
+ n,
25
25
  {
26
26
  headers: t.headers,
27
27
  method: t.method,
@@ -33,8 +33,8 @@ const j = async function(o, a, u) {
33
33
  const i = S(
34
34
  Object.entries(e.headers).map(([l, m]) => [l.toLowerCase(), Array.isArray(m) ? m.join(",") : m])
35
35
  );
36
- n({
37
- url: r.toString(),
36
+ r({
37
+ url: n.toString(),
38
38
  method: t.method,
39
39
  status: e.statusCode || -1,
40
40
  statusText: e.statusMessage || "Unknown",
@@ -45,16 +45,17 @@ const j = async function(o, a, u) {
45
45
  }
46
46
  );
47
47
  c.on("error", (e) => {
48
- n({
49
- url: r.toString(),
48
+ r({
49
+ url: n.toString(),
50
50
  method: t.method,
51
51
  status: -1,
52
52
  statusText: e.name || "Unknown",
53
- body: e.message
53
+ body: e.message,
54
+ rawError: e
54
55
  });
55
56
  }), c.on("timeout", () => {
56
- n({
57
- url: r.toString(),
57
+ r({
58
+ url: n.toString(),
58
59
  method: t.method,
59
60
  status: -1,
60
61
  statusText: "Timeout",
@@ -63,12 +64,12 @@ const j = async function(o, a, u) {
63
64
  }), t.body && c.write(t.body), c.end();
64
65
  });
65
66
  };
66
- function E(o) {
67
- return T.fetch ? new p(U, o) : new p(j, o);
67
+ function C(o) {
68
+ return E.fetch ? new p(T, o) : new p(U, o);
68
69
  }
69
- const s = E(), H = s.setConfig, k = s.head, D = s.get, P = s.post, B = s.del, F = s.put, G = s.patch;
70
+ const s = C(), H = s.setConfig, k = s.head, D = s.get, P = s.post, B = s.del, F = s.put, G = s.patch;
70
71
  export {
71
- E as NetRequest,
72
+ C as NetRequest,
72
73
  B as del,
73
74
  D as get,
74
75
  k as head,
@@ -0,0 +1 @@
1
+ "use strict";const s=require("./version-BZ8fy-0W.cjs"),b=async function(r,o,n){return s.handleResponse(await s.retryRequest(m,r,o,n),r,o,n)},m=async function(r,o,n){const t=await s.convertOptions(r,o,n),i=new URL(t.url),d=t.params;d instanceof Object&&Object.keys(d).forEach(a=>i.searchParams.set(a,d[a]));const e=s.Support.AbortController?new AbortController:null;function u(){e&&!e.signal.aborted&&e.abort()}t.abort&&t.abort.addEventListener("abort",u);const c=t.timeout>0?setTimeout(u,t.timeout):null,h=new Request(i,{method:t.method,headers:Object.keys(t.headers).length>0?new Headers(t.headers):void 0,body:t.body,credentials:t.credentials,signal:e==null?void 0:e.signal,redirect:"follow"});return await fetch(h).then(async a=>({url:i.toString(),method:t.method,status:a.status,statusText:a.statusText,headers:s.fromEntries([...a.headers.entries()]),body:t.method==="HEAD"?"":await a.text()})).catch(a=>({url:i.toString(),method:t.method,status:-1,statusText:e!=null&&e.signal.aborted?"Aborted":"NetworkError",body:String(a),rawError:e!=null&&e.signal.aborted?void 0:a})).finally(()=>{c!==null&&clearTimeout(c),t.abort&&t.abort.removeEventListener("abort",u)})};exports.fetchRequest=b;
@@ -1,15 +1,15 @@
1
- import { h, r as b, c as l, S as m, f } from "./version-C-bTPkwR.js";
2
- const p = async function(r, s, o) {
3
- return h(await b(w, r, s, o), r, s, o);
4
- }, w = async function(r, s, o) {
5
- const t = await l(r, s, o), n = new URL(t.url), i = t.params;
1
+ import { h, r as b, c as m, S as l, f } from "./version-BLZ49ejb.js";
2
+ const g = async function(s, r, o) {
3
+ return h(await b(w, s, r, o), s, r, o);
4
+ }, w = async function(s, r, o) {
5
+ const t = await m(s, r, o), n = new URL(t.url), i = t.params;
6
6
  i instanceof Object && Object.keys(i).forEach((a) => n.searchParams.set(a, i[a]));
7
- const e = m.AbortController ? new AbortController() : null;
8
- function c() {
7
+ const e = l.AbortController ? new AbortController() : null;
8
+ function d() {
9
9
  e && !e.signal.aborted && e.abort();
10
10
  }
11
- t.abort && t.abort.addEventListener("abort", c);
12
- const d = t.timeout > 0 ? setTimeout(c, t.timeout) : null, u = new Request(n, {
11
+ t.abort && t.abort.addEventListener("abort", d);
12
+ const u = t.timeout > 0 ? setTimeout(d, t.timeout) : null, c = new Request(n, {
13
13
  method: t.method,
14
14
  headers: Object.keys(t.headers).length > 0 ? new Headers(t.headers) : void 0,
15
15
  body: t.body,
@@ -17,7 +17,7 @@ const p = async function(r, s, o) {
17
17
  signal: e == null ? void 0 : e.signal,
18
18
  redirect: "follow"
19
19
  });
20
- return await fetch(u).then(async (a) => ({
20
+ return await fetch(c).then(async (a) => ({
21
21
  url: n.toString(),
22
22
  method: t.method,
23
23
  status: a.status,
@@ -29,11 +29,12 @@ const p = async function(r, s, o) {
29
29
  method: t.method,
30
30
  status: -1,
31
31
  statusText: e != null && e.signal.aborted ? "Aborted" : "NetworkError",
32
- body: String(a)
32
+ body: String(a),
33
+ rawError: e != null && e.signal.aborted ? void 0 : a
33
34
  })).finally(() => {
34
- d !== null && clearTimeout(d), t.abort && t.abort.removeEventListener("abort", c);
35
+ u !== null && clearTimeout(u), t.abort && t.abort.removeEventListener("abort", d);
35
36
  });
36
37
  };
37
38
  export {
38
- p as f
39
+ g as f
39
40
  };
@@ -462,7 +462,7 @@ function je(t, e, s, n) {
462
462
  s,
463
463
  n
464
464
  );
465
- T(t.status) || (o = s.get("errorHandler")) == null || o(t.status, t.method, e);
465
+ T(t.status) || (o = s.get("errorHandler")) == null || o(t.status, t.method, e, t.rawError);
466
466
  const a = {
467
467
  ...re(t.status, t.statusText, t.body, s.get("responseRule"), n == null ? void 0 : n.responseRule),
468
468
  status: t.status,
@@ -480,7 +480,7 @@ function _(t, e, s, n, a, r) {
480
480
  }
481
481
  return t;
482
482
  }
483
- const $e = "1.7.1";
483
+ const $e = "1.7.2";
484
484
  export {
485
485
  me as A,
486
486
  A as D,
@@ -1,2 +1,2 @@
1
- "use strict";var N=Object.defineProperty;var G=(t,e,s)=>e in t?N(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var f=(t,e,s)=>(G(t,typeof e!="symbol"?e+"":e,s),s);const m=typeof globalThis<"u"?globalThis:typeof global<"u"?global:typeof window<"u"?window:{},b={fetch:"fetch"in m,window:"window"in m,FormData:"FormData"in m,Blob:"Blob"in m,wx:"wx"in m,TextDecoder:"TextDecoder"in m,AbortController:"AbortController"in m};function B(t){return t.reduce((e,[s,n])=>(s&&(e[s]=n||""),e),{})}function J(t){return new Promise(e=>setTimeout(e,Math.max(0,t)))}function V(){}function j(t){return t?t[0].toLowerCase()+t.slice(1):""}const P=/_\w*/,S=/-\w*/;function U(t){const e=P.test(t)?t.replace(/(?:^_*|_*$)/g,"").replace(/_+([^_])/g,(s,n)=>n.toUpperCase()):S.test(t)?t.replace(/(?:^-*|-*$)/g,"").replace(/-+(\w)/g,(s,n)=>n.toUpperCase()):t;return j(e)}function D(t){return P.test(t)?j(t).replace(/(?:^_*|_*$)/g,"").replace(/_+([^_])/g,(e,s)=>"_"+s.toLowerCase()):S.test(t)?j(t.replace(/(?:^-*|-*$)/g,"")).replace(/-+(\w)/g,(e,s)=>"_"+s.toLowerCase()):j(t).replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`)}const W=/^(?:https?:)?\/\/.+$/i,Z=/^https?:\/\/.+$/i,z=/^\{[\d\D]*\}$/,Q=/^\[[\d\D]*\]$/;function v(t,e=!1){return e?W.test(t):Z.test(t)}function X(t){return t==null}function C(t,...e){if(!t||typeof t!="object")return!1;const s=Object.getPrototypeOf(t);return s!==Object.prototype&&s!==null?!1:e.every(n=>n in t)}function H(t){return z.test(t)||Q.test(t)}function F(t,e){try{const s=JSON.parse(t);return e?e(s)?s:null:s}catch{return null}}""+Math.random().toString(32).slice(2);function $(t,e=!1){return typeof t=="string"?U(t):Array.isArray(t)?t.map(s=>!e||typeof s=="string"?$(s):typeof s=="object"&&s?$(s,!0):s):C(t)?Object.keys(t).reduce((s,n)=>{const a=U(String(n)),r=a.charAt(0).toLowerCase()+a.slice(1);return s[r]=e?t[n]:$(t[n]),s},{}):t}function O(t,e=!1){return typeof t=="string"?D(t):Array.isArray(t)?t.map(s=>!e||typeof s=="string"?O(s):typeof s=="object"&&s?O(s,e):s):C(t)?Object.keys(t).reduce((s,n)=>{const a=D(String(n));return s[a]=e?t[n]:O(t[n]),s},{}):t}async function Y(t){return await new Promise(function(e){const s=document.getElementsByTagName("head")[0],n=document.createElement("script");n.setAttribute("type","text/javascript"),n.setAttribute("charset","utf-8"),n.onload=function(){s.removeChild(n),e(!0)},n.onerror=function(){s.removeChild(n),e(!1)},n.setAttribute("src",t),s.appendChild(n)})}function ee(t,e="数据未能正确识别"){return typeof t=="function"?{guard:t,message:e}:{guard:t.guard,message:t.message||e}}function M(t,e=""){return!e||v(t,!0)?L(t):(L(e)+"/"+t).replace(/\/{2,}/g,"/").replace(/:\//,"://")}function L(t){return v(t,!0)?t.startsWith("http")?t:("location"in globalThis?location.protocol:"https:")+t:("location"in globalThis?location.origin:"http://127.0.0.1")+"/"+t.replace(/^\/+/,"")}function te(t,e){const s={};return(t.match(/([^=&#?]+)=[^&#]*/g)||[]).forEach(function(n){const a=n.split("="),r=a[0],o=decodeURIComponent(a[1]||"");s[r]!==void 0?s[r]+=","+o:s[r]=o}),e!==!0?s[e]||"":s}function se(t,e){if(e){if(e===!0)return t.replace(/\?[^#]*/,"")}else return t;const s=t.split("#"),n=s[0].split("?"),a=n[0],r=n.length>1?n[1]:"",o=s.length>1?"#"+s[1]:"",c=typeof e=="string"?[e]:Array.isArray(e)?e:[];return!c.length||!r?s[0]+o:(c.map(i=>i.replace(/([\\(){}[\]^$+\-*?|])/g,"\\$1")),(a+"?"+r.replace(new RegExp("(?:^|&)(?:"+c.join("|")+")=[^&$]+","g"),"").replace(/^&/,"")).replace(/\?$/,"")+o)}function ne(t,e,s=!1){const n=typeof e=="string"?e:Object.keys(e).map(o=>`${o}=${encodeURIComponent(e[o])}`).join("&");if(!n)return t;const a=t.split("#");s&&(a[0]=se(a[0],(n.match(/([^=&#?]+)=[^&#]+/g)||[]).map(o=>o.replace(/=.+$/,""))));const r=a[0].indexOf("?")+1?"&":"?";return(a[0]+r+n+(a.length>1?"#"+a[1]:"")).replace(/\?&/,"?")}function re(t){const e=t.match(/(?:\?|&)([^=]+)(?:&|$)/g);return e?e.join("").replace(/(?:\?|^&+|&+$)/g,"").replace(/&{2}/g,"&").split("&").sort():[]}class ae{constructor(e=500){f(this,"ttl");f(this,"cache");this.cache={},this.ttl=Math.max(e,0)}getKey(e,s){const n=e.replace(/#.+/,""),a=n.replace(/\?.+/g,""),r=Object.assign(te(n,!0),s),o=re(n),c=Object.keys(r).sort().map(i=>`${i}#${r[i]}`);return`${a}_${c.join(",")}_${o.join(",")}`}updateTTL(e){this.ttl=Math.max(e,0)}get(e){if(this.ttl===0)return null;const s=this.cache[e];return s?s.ttl<Date.now()?(delete this.cache[e],null):s.res:null}set(e,s){this.ttl!==0&&(this.cache[e]={ttl:Date.now()+this.ttl,res:s})}}function oe(t,e,s,n){if(e.ok&&!X(e.data)&&n){const a=ee(n,"响应数据未能正确识别");return a.guard(e.data)||(console.error("ResponseCheckFaild",t,e.data),s.showMessage(!0,`${t} ${a.message}`),e.data=null),e}return e}class q{constructor(e){f(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)}set(e){if(e.baseURL&&!/^\/.+/.test(e.baseURL)&&!v(e.baseURL))throw console.warn("baseURL 需要以 / 开头,或者是完整的 url 地址"),new Error("BaseURLError");Object.assign(this.config,e)}get(e){return this.config[e]}getFullUrl(e){return e.startsWith("/")?M(e):M(e,this.config.baseURL)}showMessage(e,s){this.config.messageHandler&&s&&this.config.messageHandler(e,s)}}class ce{constructor(e,s){f(this,"agent");f(this,"config");f(this,"cache");this.config=new q(s),this.agent=e,this.cache=new ae(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)}async exec(e,s){try{return await this.agent(e,this.config,s)}catch(n){return console.error("RequestError",n),{ok:!1,status:-9,code:"Unkonwn",message:String(n),headers:{},data:null}}}async guard(e,s,n){return oe(e,s,this.config,n)}setConfig(e){this.config.set(e),this.cache.updateTTL(this.config.get("cacheTTL"))}getConfig(e){return this.config.get(e)}async head(e,s){const n=Object.assign({},s||null);return n.method="HEAD",this.guard(e,await this.exec(e,n),null)}async get(e,s,n){const a=Object.assign({},n||null);a.method="GET";const r=this.cache.getKey(e,a.params),o=this.cache.get(r);if(o)return this.guard(e,await o,s||null);const c=this.exec(e,a);return this.cache.set(r,c),this.guard(e,await c,s||null)}async post(e,s,n,a){const r=Object.assign({},a||null);return r.method="POST",r.body=s,this.guard(e,await this.exec(e,r),n||null)}async del(e,s,n){const a=Object.assign({},n||null);return a.method="DELETE",this.guard(e,await this.exec(e,a),s||null)}async put(e,s,n,a){const r=Object.assign({},a||null);return r.method="PUT",r.body=s,this.guard(e,await this.exec(e,r),n||null)}async patch(e,s,n,a){const r=Object.assign({},a||null);return r.method="PATCH",r.body=s,this.guard(e,await this.exec(e,r),n||null)}}const I="data",w="message";function ie(t,e,s,n,a){const r=a||n;return T(t)?me(r.ok||n.ok,t,e,s):le(r.failed||n.failed,e,s)}const ue=function(t){const e=[],s=t.failed||{resolve:"json"};switch(e.push("- 当http状态码 <200 或者 >=400 时"),s.resolve){case"body":e.push(" 将响应内容格式化为字符串并作为错误消息");break;case"json":e.push(" 将响应解析为json,并读取 "+(s.messageField||w)+" 作为错误消息");break}const n=t.ok||{resolve:"body"};switch(e.push("- 当http状态码 >=200 并且 <400 时"),n.resolve){case"body":e.push(" 将响应尝试解析为 json,并作为数据内容返回");break;case"json":e.push(" 将响应解析为 json,读取 "+(n.dataField||I)+" 作为响应数据,读取 "+(n.messageField||w)+" 作为提示消息"),n.statusField&&e.push(" 当 "+n.statusField+" 为 "+(n.statusOKValue||"空值")+" 时是成功提示,否则是错误消息"),n.ignoreMessage&&e.push(" 并忽略以下消息:"+n.ignoreMessage);break}return e.join(`
2
- `)};function le(t,e,s){const n=t||{resolve:"json",messageField:w},a={ok:!1,code:e,message:s,data:null};switch(n.resolve){case"body":a.message=x(s)||s;break;case"json":const{code:r,message:o}=he(s,n.converter,n.statusField,n.messageField);a.code=r||e,a.message=x(s)||o;break}return a}function he(t,e,s,n=w){if(!H(t))return{message:""};const a=A(F(t),e);return!a||!C(a)?{message:t}:{code:s?k(a,s):"",message:k(a,n)||t}}function k(t,e){const s=Array.isArray(e)?e:[e];for(const n of s)if(n in t)return de(t[n]);return""}function de(t){return t?typeof t=="string"?t:JSON.stringify(t):""}const ge=/<title>([^<]+)<\/title>/i,fe=/<message>([^<]+)<\/message>/i;function x(t){const e=t.match(ge);if(e)return e[1];const s=t.match(fe);return s?s[1]:""}function me(t,e,s,n){const a=t||{resolve:"body"},r={ok:!0,code:s,message:"",data:null};if(e===204||!n)return r;if(a.resolve==="body")return r.data=H(n)?A(F(n),t.converter):n,r;const o=A(F(n),t.converter);if(!o||!C(o))return r.ok=!1,r.code="ResponseFormatError",r.message="响应内容无法格式化为 Object",r;const c=a.statusField,i=a.statusOKValue||"",l=a.dataField||I,h=a.messageField||w,u=a.ignoreMessage||"";if(c&&!(c in o))return r.ok=!1,r.code="ResponseFieldMissing",r.message="响应内容找不到状态字段 "+c,r;const d=c?o[c]+"":"";return r.ok=c?d===i:!0,r.code=d||s,r.data=l===!0?o:l in o?o[l]:null,r.message=k(o,h),u&&r.message&&(Array.isArray(u)&&u.includes(r.message)||typeof u=="string"&&r.message===u)&&(r.message=""),r}function T(t){return t>=200&&t<400}function A(t,e){return e==="camelize"?$(t):e==="snakify"?O(t):t}async function K(t,e,s,n,a){const r=a||0,o=Math.max(0,Math.min(10,(n==null?void 0:n.maxRetry)??s.get("maxRetry")??0)),c=(n==null?void 0:n.retryResolve)??s.get("retryResolve"),i=s.get("logHandler")||V;i({type:"prepear",url:e,method:(n==null?void 0:n.method)||"GET",retry:r,maxRetry:o,message:r===0?"start":`retry ${r}/${o} start`,headers:n==null?void 0:n.headers,options:n});const l=Date.now(),h=await t(e,s,n),u=h.status,d=Date.now()-l,y=`[cost ${d}][${u}] ${u<0?h.body:""}`;i({type:"finished",url:e,method:h.method,retry:r,maxRetry:o,message:r===0?`finish ${y}`:`retry ${r}/${o} finish ${y}`,response:h,headers:h.headers,cost:d});const R=T(u);if(!o||c==="network"&&u>0||c==="status"&&R||Array.isArray(c)&&!c.includes(u)||typeof c=="function"&&c(h,r)!==!0||r>=o)return h;const g=(n==null?void 0:n.retryInterval)??s.get("retryInterval")??1e3;return await J(Math.max(100,g==="2EB"?Math.pow(2,r)*1e3:typeof g=="function"?g(r+1)||0:g)),await K(t,e,s,n,r+1)}async function ye(t,e,s){var g;const n=Object.assign({method:"GET"},s),a=b.FormData?n.body instanceof FormData:!1,r=a&&n.method!=="POST"&&n.method!=="PUT"?"POST":n.method,o=r==="GET"||r==="HEAD"||r==="DELETE";o&&n.body!==void 0&&(console.warn("request body is invalid with method get, head, delete"),delete n.body);const c=Object.assign(a||o?{}:{"Content-Type":b.Blob&&n.body instanceof Blob?n.body.type||"application/octet-stream":"application/json;charset=utf-8"},n.headers),i=n.params||{},l={};Object.keys(i).forEach(p=>{i[p]!==void 0&&(l[p]=pe(i[p]))});const h=e.getFullUrl(t),u=be(n.body),d=n.timeout||e.get("timeout"),y=await async function(){var E;const p=e.get("requestTransformer");return p?await p({headers:c,params:l,method:r,url:h,body:u}):await((E=e.get("requestHandler"))==null?void 0:E(c,l,r,t))}(),R=typeof y=="string"&&y?y:h;return(g=e.get("logHandler"))==null||g({type:"ready",url:R,method:r,headers:c,timeout:d,body:u}),{url:R,method:r,body:u,params:l,headers:c,timeout:d,abort:n.abort,credentials:n.credentials||e.get("credentials")}}function pe(t){return typeof t=="string"?t:Array.isArray(t)?t.join(","):t+""}function be(t){if(t)return typeof t=="string"||t instanceof URLSearchParams||t instanceof ArrayBuffer||b.Blob&&t instanceof Blob||b.FormData&&t instanceof FormData?t:JSON.stringify(t)}function we(t,e,s,n){var o,c;if(t.status<0)return _({ok:!1,status:t.status,code:t.statusText,headers:{},message:"",data:null},`${t.method} ${e} ${t.statusText}`,t.method,e,s,n);T(t.status)||(o=s.get("errorHandler"))==null||o(t.status,t.method,e);const a={...ie(t.status,t.statusText,t.body,s.get("responseRule"),n==null?void 0:n.responseRule),status:t.status,headers:B(Object.entries(t.headers||{}).map(([i,l])=>[i.toLowerCase(),l]))};(c=s.get("responseHandler"))==null||c({...a},t.method,e);const r=a.ok?a.message:`${t.method} ${e} [${a.code||t.statusText}] ${a.message||t.statusText}`;return _(a,r,t.method,e,s,n)}function _(t,e,s,n,a,r){const o=a.get("message"),c=o===!1||(r==null?void 0:r.message)===!1?!1:(r==null?void 0:r.message)||o;if(c!==!1){const i=typeof c=="function"?c(t,s,n,e):e;i instanceof Error?a.showMessage(!0,i.message):i&&typeof i=="object"&&"message"in i?a.showMessage(!1,i.message):a.showMessage(!t.ok,i)}return t}const Re="1.7.1";exports.Ae=Y;exports.D=v;exports.NetRequestHandler=ce;exports.RequestGlobalConfig=q;exports.Support=b;exports.Ut=ne;exports.convertOptions=ye;exports.fromEntries=B;exports.getResponseRulesDescription=ue;exports.handleResponse=we;exports.retryRequest=K;exports.version=Re;
1
+ "use strict";var N=Object.defineProperty;var G=(t,e,s)=>e in t?N(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var f=(t,e,s)=>(G(t,typeof e!="symbol"?e+"":e,s),s);const m=typeof globalThis<"u"?globalThis:typeof global<"u"?global:typeof window<"u"?window:{},b={fetch:"fetch"in m,window:"window"in m,FormData:"FormData"in m,Blob:"Blob"in m,wx:"wx"in m,TextDecoder:"TextDecoder"in m,AbortController:"AbortController"in m};function B(t){return t.reduce((e,[s,n])=>(s&&(e[s]=n||""),e),{})}function J(t){return new Promise(e=>setTimeout(e,Math.max(0,t)))}function V(){}function j(t){return t?t[0].toLowerCase()+t.slice(1):""}const P=/_\w*/,S=/-\w*/;function U(t){const e=P.test(t)?t.replace(/(?:^_*|_*$)/g,"").replace(/_+([^_])/g,(s,n)=>n.toUpperCase()):S.test(t)?t.replace(/(?:^-*|-*$)/g,"").replace(/-+(\w)/g,(s,n)=>n.toUpperCase()):t;return j(e)}function D(t){return P.test(t)?j(t).replace(/(?:^_*|_*$)/g,"").replace(/_+([^_])/g,(e,s)=>"_"+s.toLowerCase()):S.test(t)?j(t.replace(/(?:^-*|-*$)/g,"")).replace(/-+(\w)/g,(e,s)=>"_"+s.toLowerCase()):j(t).replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`)}const W=/^(?:https?:)?\/\/.+$/i,Z=/^https?:\/\/.+$/i,z=/^\{[\d\D]*\}$/,Q=/^\[[\d\D]*\]$/;function v(t,e=!1){return e?W.test(t):Z.test(t)}function X(t){return t==null}function C(t,...e){if(!t||typeof t!="object")return!1;const s=Object.getPrototypeOf(t);return s!==Object.prototype&&s!==null?!1:e.every(n=>n in t)}function H(t){return z.test(t)||Q.test(t)}function F(t,e){try{const s=JSON.parse(t);return e?e(s)?s:null:s}catch{return null}}""+Math.random().toString(32).slice(2);function $(t,e=!1){return typeof t=="string"?U(t):Array.isArray(t)?t.map(s=>!e||typeof s=="string"?$(s):typeof s=="object"&&s?$(s,!0):s):C(t)?Object.keys(t).reduce((s,n)=>{const a=U(String(n)),r=a.charAt(0).toLowerCase()+a.slice(1);return s[r]=e?t[n]:$(t[n]),s},{}):t}function O(t,e=!1){return typeof t=="string"?D(t):Array.isArray(t)?t.map(s=>!e||typeof s=="string"?O(s):typeof s=="object"&&s?O(s,e):s):C(t)?Object.keys(t).reduce((s,n)=>{const a=D(String(n));return s[a]=e?t[n]:O(t[n]),s},{}):t}async function Y(t){return await new Promise(function(e){const s=document.getElementsByTagName("head")[0],n=document.createElement("script");n.setAttribute("type","text/javascript"),n.setAttribute("charset","utf-8"),n.onload=function(){s.removeChild(n),e(!0)},n.onerror=function(){s.removeChild(n),e(!1)},n.setAttribute("src",t),s.appendChild(n)})}function ee(t,e="数据未能正确识别"){return typeof t=="function"?{guard:t,message:e}:{guard:t.guard,message:t.message||e}}function M(t,e=""){return!e||v(t,!0)?L(t):(L(e)+"/"+t).replace(/\/{2,}/g,"/").replace(/:\//,"://")}function L(t){return v(t,!0)?t.startsWith("http")?t:("location"in globalThis?location.protocol:"https:")+t:("location"in globalThis?location.origin:"http://127.0.0.1")+"/"+t.replace(/^\/+/,"")}function te(t,e){const s={};return(t.match(/([^=&#?]+)=[^&#]*/g)||[]).forEach(function(n){const a=n.split("="),r=a[0],o=decodeURIComponent(a[1]||"");s[r]!==void 0?s[r]+=","+o:s[r]=o}),e!==!0?s[e]||"":s}function se(t,e){if(e){if(e===!0)return t.replace(/\?[^#]*/,"")}else return t;const s=t.split("#"),n=s[0].split("?"),a=n[0],r=n.length>1?n[1]:"",o=s.length>1?"#"+s[1]:"",c=typeof e=="string"?[e]:Array.isArray(e)?e:[];return!c.length||!r?s[0]+o:(c.map(i=>i.replace(/([\\(){}[\]^$+\-*?|])/g,"\\$1")),(a+"?"+r.replace(new RegExp("(?:^|&)(?:"+c.join("|")+")=[^&$]+","g"),"").replace(/^&/,"")).replace(/\?$/,"")+o)}function ne(t,e,s=!1){const n=typeof e=="string"?e:Object.keys(e).map(o=>`${o}=${encodeURIComponent(e[o])}`).join("&");if(!n)return t;const a=t.split("#");s&&(a[0]=se(a[0],(n.match(/([^=&#?]+)=[^&#]+/g)||[]).map(o=>o.replace(/=.+$/,""))));const r=a[0].indexOf("?")+1?"&":"?";return(a[0]+r+n+(a.length>1?"#"+a[1]:"")).replace(/\?&/,"?")}function re(t){const e=t.match(/(?:\?|&)([^=]+)(?:&|$)/g);return e?e.join("").replace(/(?:\?|^&+|&+$)/g,"").replace(/&{2}/g,"&").split("&").sort():[]}class ae{constructor(e=500){f(this,"ttl");f(this,"cache");this.cache={},this.ttl=Math.max(e,0)}getKey(e,s){const n=e.replace(/#.+/,""),a=n.replace(/\?.+/g,""),r=Object.assign(te(n,!0),s),o=re(n),c=Object.keys(r).sort().map(i=>`${i}#${r[i]}`);return`${a}_${c.join(",")}_${o.join(",")}`}updateTTL(e){this.ttl=Math.max(e,0)}get(e){if(this.ttl===0)return null;const s=this.cache[e];return s?s.ttl<Date.now()?(delete this.cache[e],null):s.res:null}set(e,s){this.ttl!==0&&(this.cache[e]={ttl:Date.now()+this.ttl,res:s})}}function oe(t,e,s,n){if(e.ok&&!X(e.data)&&n){const a=ee(n,"响应数据未能正确识别");return a.guard(e.data)||(console.error("ResponseCheckFaild",t,e.data),s.showMessage(!0,`${t} ${a.message}`),e.data=null),e}return e}class q{constructor(e){f(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)}set(e){if(e.baseURL&&!/^\/.+/.test(e.baseURL)&&!v(e.baseURL))throw console.warn("baseURL 需要以 / 开头,或者是完整的 url 地址"),new Error("BaseURLError");Object.assign(this.config,e)}get(e){return this.config[e]}getFullUrl(e){return e.startsWith("/")?M(e):M(e,this.config.baseURL)}showMessage(e,s){this.config.messageHandler&&s&&this.config.messageHandler(e,s)}}class ce{constructor(e,s){f(this,"agent");f(this,"config");f(this,"cache");this.config=new q(s),this.agent=e,this.cache=new ae(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)}async exec(e,s){try{return await this.agent(e,this.config,s)}catch(n){return console.error("RequestError",n),{ok:!1,status:-9,code:"Unkonwn",message:String(n),headers:{},data:null}}}async guard(e,s,n){return oe(e,s,this.config,n)}setConfig(e){this.config.set(e),this.cache.updateTTL(this.config.get("cacheTTL"))}getConfig(e){return this.config.get(e)}async head(e,s){const n=Object.assign({},s||null);return n.method="HEAD",this.guard(e,await this.exec(e,n),null)}async get(e,s,n){const a=Object.assign({},n||null);a.method="GET";const r=this.cache.getKey(e,a.params),o=this.cache.get(r);if(o)return this.guard(e,await o,s||null);const c=this.exec(e,a);return this.cache.set(r,c),this.guard(e,await c,s||null)}async post(e,s,n,a){const r=Object.assign({},a||null);return r.method="POST",r.body=s,this.guard(e,await this.exec(e,r),n||null)}async del(e,s,n){const a=Object.assign({},n||null);return a.method="DELETE",this.guard(e,await this.exec(e,a),s||null)}async put(e,s,n,a){const r=Object.assign({},a||null);return r.method="PUT",r.body=s,this.guard(e,await this.exec(e,r),n||null)}async patch(e,s,n,a){const r=Object.assign({},a||null);return r.method="PATCH",r.body=s,this.guard(e,await this.exec(e,r),n||null)}}const I="data",w="message";function ie(t,e,s,n,a){const r=a||n;return E(t)?me(r.ok||n.ok,t,e,s):le(r.failed||n.failed,e,s)}const ue=function(t){const e=[],s=t.failed||{resolve:"json"};switch(e.push("- 当http状态码 <200 或者 >=400 时"),s.resolve){case"body":e.push(" 将响应内容格式化为字符串并作为错误消息");break;case"json":e.push(" 将响应解析为json,并读取 "+(s.messageField||w)+" 作为错误消息");break}const n=t.ok||{resolve:"body"};switch(e.push("- 当http状态码 >=200 并且 <400 时"),n.resolve){case"body":e.push(" 将响应尝试解析为 json,并作为数据内容返回");break;case"json":e.push(" 将响应解析为 json,读取 "+(n.dataField||I)+" 作为响应数据,读取 "+(n.messageField||w)+" 作为提示消息"),n.statusField&&e.push(" 当 "+n.statusField+" 为 "+(n.statusOKValue||"空值")+" 时是成功提示,否则是错误消息"),n.ignoreMessage&&e.push(" 并忽略以下消息:"+n.ignoreMessage);break}return e.join(`
2
+ `)};function le(t,e,s){const n=t||{resolve:"json",messageField:w},a={ok:!1,code:e,message:s,data:null};switch(n.resolve){case"body":a.message=x(s)||s;break;case"json":const{code:r,message:o}=he(s,n.converter,n.statusField,n.messageField);a.code=r||e,a.message=x(s)||o;break}return a}function he(t,e,s,n=w){if(!H(t))return{message:""};const a=A(F(t),e);return!a||!C(a)?{message:t}:{code:s?k(a,s):"",message:k(a,n)||t}}function k(t,e){const s=Array.isArray(e)?e:[e];for(const n of s)if(n in t)return de(t[n]);return""}function de(t){return t?typeof t=="string"?t:JSON.stringify(t):""}const ge=/<title>([^<]+)<\/title>/i,fe=/<message>([^<]+)<\/message>/i;function x(t){const e=t.match(ge);if(e)return e[1];const s=t.match(fe);return s?s[1]:""}function me(t,e,s,n){const a=t||{resolve:"body"},r={ok:!0,code:s,message:"",data:null};if(e===204||!n)return r;if(a.resolve==="body")return r.data=H(n)?A(F(n),t.converter):n,r;const o=A(F(n),t.converter);if(!o||!C(o))return r.ok=!1,r.code="ResponseFormatError",r.message="响应内容无法格式化为 Object",r;const c=a.statusField,i=a.statusOKValue||"",l=a.dataField||I,h=a.messageField||w,u=a.ignoreMessage||"";if(c&&!(c in o))return r.ok=!1,r.code="ResponseFieldMissing",r.message="响应内容找不到状态字段 "+c,r;const d=c?o[c]+"":"";return r.ok=c?d===i:!0,r.code=d||s,r.data=l===!0?o:l in o?o[l]:null,r.message=k(o,h),u&&r.message&&(Array.isArray(u)&&u.includes(r.message)||typeof u=="string"&&r.message===u)&&(r.message=""),r}function E(t){return t>=200&&t<400}function A(t,e){return e==="camelize"?$(t):e==="snakify"?O(t):t}async function K(t,e,s,n,a){const r=a||0,o=Math.max(0,Math.min(10,(n==null?void 0:n.maxRetry)??s.get("maxRetry")??0)),c=(n==null?void 0:n.retryResolve)??s.get("retryResolve"),i=s.get("logHandler")||V;i({type:"prepear",url:e,method:(n==null?void 0:n.method)||"GET",retry:r,maxRetry:o,message:r===0?"start":`retry ${r}/${o} start`,headers:n==null?void 0:n.headers,options:n});const l=Date.now(),h=await t(e,s,n),u=h.status,d=Date.now()-l,y=`[cost ${d}][${u}] ${u<0?h.body:""}`;i({type:"finished",url:e,method:h.method,retry:r,maxRetry:o,message:r===0?`finish ${y}`:`retry ${r}/${o} finish ${y}`,response:h,headers:h.headers,cost:d});const R=E(u);if(!o||c==="network"&&u>0||c==="status"&&R||Array.isArray(c)&&!c.includes(u)||typeof c=="function"&&c(h,r)!==!0||r>=o)return h;const g=(n==null?void 0:n.retryInterval)??s.get("retryInterval")??1e3;return await J(Math.max(100,g==="2EB"?Math.pow(2,r)*1e3:typeof g=="function"?g(r+1)||0:g)),await K(t,e,s,n,r+1)}async function ye(t,e,s){var g;const n=Object.assign({method:"GET"},s),a=b.FormData?n.body instanceof FormData:!1,r=a&&n.method!=="POST"&&n.method!=="PUT"?"POST":n.method,o=r==="GET"||r==="HEAD"||r==="DELETE";o&&n.body!==void 0&&(console.warn("request body is invalid with method get, head, delete"),delete n.body);const c=Object.assign(a||o?{}:{"Content-Type":b.Blob&&n.body instanceof Blob?n.body.type||"application/octet-stream":"application/json;charset=utf-8"},n.headers),i=n.params||{},l={};Object.keys(i).forEach(p=>{i[p]!==void 0&&(l[p]=pe(i[p]))});const h=e.getFullUrl(t),u=be(n.body),d=n.timeout||e.get("timeout"),y=await async function(){var T;const p=e.get("requestTransformer");return p?await p({headers:c,params:l,method:r,url:h,body:u}):await((T=e.get("requestHandler"))==null?void 0:T(c,l,r,t))}(),R=typeof y=="string"&&y?y:h;return(g=e.get("logHandler"))==null||g({type:"ready",url:R,method:r,headers:c,timeout:d,body:u}),{url:R,method:r,body:u,params:l,headers:c,timeout:d,abort:n.abort,credentials:n.credentials||e.get("credentials")}}function pe(t){return typeof t=="string"?t:Array.isArray(t)?t.join(","):t+""}function be(t){if(t)return typeof t=="string"||t instanceof URLSearchParams||t instanceof ArrayBuffer||b.Blob&&t instanceof Blob||b.FormData&&t instanceof FormData?t:JSON.stringify(t)}function we(t,e,s,n){var o,c;if(t.status<0)return _({ok:!1,status:t.status,code:t.statusText,headers:{},message:"",data:null},`${t.method} ${e} ${t.statusText}`,t.method,e,s,n);E(t.status)||(o=s.get("errorHandler"))==null||o(t.status,t.method,e,t.rawError);const a={...ie(t.status,t.statusText,t.body,s.get("responseRule"),n==null?void 0:n.responseRule),status:t.status,headers:B(Object.entries(t.headers||{}).map(([i,l])=>[i.toLowerCase(),l]))};(c=s.get("responseHandler"))==null||c({...a},t.method,e);const r=a.ok?a.message:`${t.method} ${e} [${a.code||t.statusText}] ${a.message||t.statusText}`;return _(a,r,t.method,e,s,n)}function _(t,e,s,n,a,r){const o=a.get("message"),c=o===!1||(r==null?void 0:r.message)===!1?!1:(r==null?void 0:r.message)||o;if(c!==!1){const i=typeof c=="function"?c(t,s,n,e):e;i instanceof Error?a.showMessage(!0,i.message):i&&typeof i=="object"&&"message"in i?a.showMessage(!1,i.message):a.showMessage(!t.ok,i)}return t}const Re="1.7.2";exports.Ae=Y;exports.D=v;exports.NetRequestHandler=ce;exports.RequestGlobalConfig=q;exports.Support=b;exports.Ut=ne;exports.convertOptions=ye;exports.fromEntries=B;exports.getResponseRulesDescription=ue;exports.handleResponse=we;exports.retryRequest=K;exports.version=Re;
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "1.7.1";
1
+ export declare const version = "1.7.2";
package/dist/wx.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./version-Cx7ZvtPo.cjs"),p=async function(t,r,n){return e.handleResponse(await e.retryRequest(l,t,r,n),t,r,n)},l=async function(t,r,n){const o=await e.convertOptions(t,r,n),u=o.method==="PATCH"?"POST":o.method,a=e.Ut(o.url,o.params);return e.Support.wx?new Promise(d=>{wx.request({url:a,data:o.body,header:o.headers,method:u,dataType:"string",responseType:"text",fail(){d({url:a,method:u,status:-1,statusText:"NetworkError",body:""})},success(c){d({url:a,method:u,status:c.statusCode,statusText:c.statusCode+"",headers:{...c.header},body:o.method==="HEAD"?"":f(c.data)})}})}):{url:a,method:u,status:-1,statusText:"NotSupport",body:"NotFound namespace of wx"}};function f(t){return typeof t=="string"?t:t instanceof ArrayBuffer&&e.Support.TextDecoder?new TextDecoder().decode(t):JSON.stringify(t)}function i(t){return new e.NetRequestHandler(p,t)}const s=i(),y=s.setConfig,g=s.head,h=s.get,x=s.post,w=s.del,T=s.put;exports.version=e.version;exports.NetRequest=i;exports.del=w;exports.get=h;exports.head=g;exports.post=x;exports.put=T;exports.setGlobalConfig=y;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./version-BZ8fy-0W.cjs"),p=async function(t,r,n){return e.handleResponse(await e.retryRequest(l,t,r,n),t,r,n)},l=async function(t,r,n){const o=await e.convertOptions(t,r,n),u=o.method==="PATCH"?"POST":o.method,a=e.Ut(o.url,o.params);return e.Support.wx?new Promise(d=>{wx.request({url:a,data:o.body,header:o.headers,method:u,dataType:"string",responseType:"text",fail(){d({url:a,method:u,status:-1,statusText:"NetworkError",body:""})},success(c){d({url:a,method:u,status:c.statusCode,statusText:c.statusCode+"",headers:{...c.header},body:o.method==="HEAD"?"":f(c.data)})}})}):{url:a,method:u,status:-1,statusText:"NotSupport",body:"NotFound namespace of wx"}};function f(t){return typeof t=="string"?t:t instanceof ArrayBuffer&&e.Support.TextDecoder?new TextDecoder().decode(t):JSON.stringify(t)}function i(t){return new e.NetRequestHandler(p,t)}const s=i(),y=s.setConfig,g=s.head,h=s.get,x=s.post,w=s.del,T=s.put;exports.version=e.version;exports.NetRequest=i;exports.del=w;exports.get=h;exports.head=g;exports.post=x;exports.put=T;exports.setGlobalConfig=y;
package/dist/wx.js CHANGED
@@ -1,5 +1,5 @@
1
- import { h as i, r as p, c as f, U as l, S as d, N as x } from "./version-C-bTPkwR.js";
2
- import { v as D } from "./version-C-bTPkwR.js";
1
+ import { h as i, r as p, c as f, U as l, S as d, N as x } from "./version-BLZ49ejb.js";
2
+ import { v as D } from "./version-BLZ49ejb.js";
3
3
  const h = async function(t, o, r) {
4
4
  return i(await p(y, t, o, r), t, o, r);
5
5
  }, y = async function(t, o, r) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seayoo-web/request",
3
- "version": "1.7.1",
3
+ "version": "1.7.2",
4
4
  "description": "requst tools for seayoo web",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -1 +0,0 @@
1
- "use strict";const s=require("./version-Cx7ZvtPo.cjs"),b=async function(o,a,n){return s.handleResponse(await s.retryRequest(l,o,a,n),o,a,n)},l=async function(o,a,n){const t=await s.convertOptions(o,a,n),i=new URL(t.url),c=t.params;c instanceof Object&&Object.keys(c).forEach(r=>i.searchParams.set(r,c[r]));const e=s.Support.AbortController?new AbortController:null;function u(){e&&!e.signal.aborted&&e.abort()}t.abort&&t.abort.addEventListener("abort",u);const d=t.timeout>0?setTimeout(u,t.timeout):null,h=new Request(i,{method:t.method,headers:Object.keys(t.headers).length>0?new Headers(t.headers):void 0,body:t.body,credentials:t.credentials,signal:e==null?void 0:e.signal,redirect:"follow"});return await fetch(h).then(async r=>({url:i.toString(),method:t.method,status:r.status,statusText:r.statusText,headers:s.fromEntries([...r.headers.entries()]),body:t.method==="HEAD"?"":await r.text()})).catch(r=>({url:i.toString(),method:t.method,status:-1,statusText:e!=null&&e.signal.aborted?"Aborted":"NetworkError",body:String(r)})).finally(()=>{d!==null&&clearTimeout(d),t.abort&&t.abort.removeEventListener("abort",u)})};exports.fetchRequest=b;