utils-uniapp 1.1.7 → 1.1.9

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.
@@ -0,0 +1,140 @@
1
+ /**
2
+ * 存储介质模式类型
3
+ * - local:uni本地存储 / localStorage
4
+ * - session:会话存储,小程序/App自动降级为local
5
+ */
6
+ type StorageMode = 'session' | 'local';
7
+
8
+
9
+ /**
10
+ * 底层存储适配器接口,抹平uni‑storage与sessionStorage API差异
11
+ */
12
+ interface IStorageAdapter {
13
+ /**
14
+ * 设置存储键值
15
+ * @param key 存储原始key
16
+ * @param value 存储序列化对象
17
+ */
18
+ set(key: string, value: any): void;
19
+
20
+ /**
21
+ * 获取存储值
22
+ * @param key 存储原始key
23
+ * @returns 解析后的值,不存在返回null
24
+ */
25
+ get(key: string): any | null;
26
+
27
+ /**
28
+ * 删除单个key
29
+ * @param key 存储原始key
30
+ */
31
+ remove(key: string): void;
32
+
33
+ /**
34
+ * 获取存储介质下全部key列表
35
+ * @returns key字符串数组
36
+ */
37
+ keys(): string[];
38
+
39
+ /**
40
+ * 清空整个存储介质(实例层不直接暴露给业务调用)
41
+ */
42
+ clear(): void;
43
+ }
44
+
45
+
46
+ /**
47
+ * StorageCache实例构造配置项
48
+ */
49
+ interface StorageCacheOptions {
50
+ /** 存储介质模式,默认local */
51
+ mode?: StorageMode;
52
+ /** 缓存版本号,版本不匹配自动丢弃旧缓存,默认v1 */
53
+ version?: string | number;
54
+ /** 实例隔离前缀,内部自动追加下划线分隔,默认空字符串 */
55
+ prefix?: string;
56
+ /**
57
+ * 实例默认过期秒数;set不传expire时使用该值
58
+ * <=0代表永不过期,默认0
59
+ */
60
+ defaultExpire?: number;
61
+ }
62
+
63
+
64
+ /**
65
+ * 多端缓存工具类
66
+ * 特性:过期控制、版本校验、实例key隔离前缀;适配uni‑app、H5‑sessionStorage
67
+ * 优先级说明:set传入expire > 实例defaultExpire;仅不传参(undefined)才使用实例默认配置
68
+ * 注意:
69
+ * 1. 业务传入key为业务key,内部自动拼接实例prefix
70
+ * 2. clear仅删除本实例前缀key,无prefix时不执行删除
71
+ * 3. removeByPrefix仅允许带实例隔离前缀的实例调用,全局实例禁止使用
72
+ */
73
+ export declare class StorageCache {
74
+ /**
75
+ * 构造函数,创建 StorageCache 缓存实例
76
+ * @param options 实例配置对象,可选,默认空对象{}
77
+ */
78
+ constructor(options?: StorageCacheOptions);
79
+
80
+ /**
81
+ * 设置缓存,支持过期
82
+ * @param key 业务缓存key
83
+ * @param data 缓存数据
84
+ * @param expire 过期时间,单位秒;不传使用实例defaultExpire;<=0永不过期
85
+ * @returns true成功,false异常失败
86
+ */
87
+ set(key: string, data: any, expire?: number): boolean;
88
+
89
+ /**
90
+ * 获取缓存,自动校验格式、版本、过期,失效自动删除
91
+ * @param key 业务缓存key
92
+ * @param defaultValue 兜底返回值
93
+ * @returns 缓存数据或defaultValue
94
+ */
95
+ get<T = any>(key: string, defaultValue?: T | null): T | null;
96
+
97
+ /**
98
+ * 缓存续期,重置时间戳,沿用原有expire时长
99
+ * @param key 业务缓存key
100
+ * @returns true续期成功;false不存在/过期/版本不匹配/异常
101
+ */
102
+ renew(key: string): boolean;
103
+
104
+ /**
105
+ * 删除单个业务缓存
106
+ * @param key 业务缓存key
107
+ * @returns boolean
108
+ */
109
+ remove(key: string): boolean;
110
+
111
+ /**
112
+ * 清空本实例全部缓存;仅删除实例前缀下key,无prefix时不做任何删除
113
+ * @returns boolean
114
+ */
115
+ clear(): boolean;
116
+
117
+ /**
118
+ * 按业务key前缀批量删除;无实例隔离前缀直接返回false,禁止调用
119
+ * @param prefix 业务key前缀,不需要携带实例内部前缀
120
+ * @returns boolean
121
+ */
122
+ removeByPrefix(prefix: string): boolean;
123
+ }
124
+
125
+
126
+ /**
127
+ * 全局默认local缓存实例,无实例隔离前缀,直接操作原始key,默认永不过期
128
+ * @type {StorageCache}
129
+ */
130
+ export declare const localCache: StorageCache;
131
+
132
+
133
+ /**
134
+ * 全局默认session缓存实例,无实例隔离前缀;小程序/App自动降级为local,默认永不过期
135
+ * @type {StorageCache}
136
+ */
137
+ export declare const sessionCache: StorageCache;
138
+
139
+
140
+ export default StorageCache;
@@ -0,0 +1 @@
1
+ "use strict";var p=(i,r,e)=>{if(!r.has(i))throw TypeError("Cannot "+e)};var n=(i,r,e)=>(p(i,r,"read from private field"),e?e.call(i):r.get(i)),l=(i,r,e)=>{if(r.has(i))throw TypeError("Cannot add the same private member more than once");r instanceof WeakSet?r.add(i):r.set(i,e)},y=(i,r,e,s)=>(p(i,r,"write to private field"),s?s.call(i,e):r.set(i,e),e);var h=(i,r,e)=>(p(i,r,"access private method"),e);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var o,f,c,v,S,x,u,m;const w=class w{constructor(){l(this,u);l(this,o,void 0);l(this,f,void 0);l(this,c,void 0);l(this,v,void 0);var g;let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const{mode:e="local",version:s="v1",prefix:t="",defaultExpire:a=0}=r;y(this,o,h(g=w,S,x).call(g,e)),y(this,f,String(s)),y(this,c,t?t+"_":""),y(this,v,Number(a)),Object.seal(this)}set(r,e,s){try{const t=s!==void 0?s:n(this,v);let a=Number(t);Number.isFinite(a)||(a=0);const g=a>0?Math.round(a)*1e3:a,I=h(this,u,m).call(this,r);return n(this,o).set(I,{time:Date.now(),expire:g,version:n(this,f),data:e}),!0}catch(t){return console.error(`设置缓存[${r}]失败:`,t),!1}}get(r){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;try{const s=h(this,u,m).call(this,r),t=n(this,o).get(s);return!t||typeof t!="object"||Array.isArray(t)||!("time"in t)||!("expire"in t)||!("version"in t)?(t&&n(this,o).remove(s),e):t.version!==n(this,f)?(n(this,o).remove(s),e):t.expire>0&&Date.now()-t.time>=t.expire?(n(this,o).remove(s),e):t.data}catch(s){return console.error(`获取缓存[${r}]失败:`,s),e}}renew(r){try{const e=h(this,u,m).call(this,r),s=n(this,o).get(e);if(!s||typeof s!="object"||Array.isArray(s)||!("time"in s)||!("expire"in s)||!("version"in s))return!1;if(s.version!==n(this,f))return n(this,o).remove(e),!1;if(s.expire>0){if(Date.now()-s.time>=s.expire)return n(this,o).remove(e),!1;s.time=Date.now(),n(this,o).set(e,s)}return!0}catch(e){return console.error(`续期缓存[${r}]失败:`,e),!1}}remove(r){try{const e=h(this,u,m).call(this,r);return n(this,o).remove(e),!0}catch(e){return console.error(`删除缓存[${r}]失败:`,e),!1}}clear(){try{return n(this,o).keys().forEach(e=>{n(this,c)&&e.startsWith(n(this,c))&&n(this,o).remove(e)}),!0}catch(r){return console.error("清空实例缓存失败:",r),!1}}removeByPrefix(r){if(!r)return!1;if(!n(this,c))return console.warn("StorageCache: 当前实例无隔离前缀,禁止调用removeByPrefix,避免误删"),!1;try{const e=h(this,u,m).call(this,r);return n(this,o).keys().forEach(t=>{t.startsWith(e)&&n(this,o).remove(t)}),!0}catch(e){return console.error(`按前缀删除缓存[${r}]失败:`,e),!1}}};o=new WeakMap,f=new WeakMap,c=new WeakMap,v=new WeakMap,S=new WeakSet,x=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"local";const e=typeof window<"u"&&window.sessionStorage,s={set(t,a){uni.setStorageSync(t,a)},get(t){return uni.getStorageSync(t)},remove(t){uni.removeStorageSync(t)},keys(){try{return uni.getStorageInfoSync().keys||[]}catch(t){return console.error("uni getStorageInfoSync error",t),[]}},clear(){uni.clearStorageSync()}};return e&&r==="session"?{set(t,a){try{window.sessionStorage.setItem(t,JSON.stringify(a))}catch(g){console.error("sessionStorage set error",g)}},get(t){const a=window.sessionStorage.getItem(t);if(a===null)return null;try{return JSON.parse(a)}catch{return window.sessionStorage.removeItem(t),null}},remove(t){window.sessionStorage.removeItem(t)},keys(){return Object.keys(window.sessionStorage)},clear(){window.sessionStorage.clear()}}:s},u=new WeakSet,m=function(r){return n(this,c)+r},l(w,S);let d=w;const b=new d,K=new d({mode:"session"});exports.StorageCache=d;exports.default=d;exports.localCache=b;exports.sessionCache=K;
package/lib/fs/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=require("../index-4975afce.js"),I=require("../http/index.js");require("../object/index.js");const x=I.createDownloadFile(),u=uni.getFileSystemManager(),P=["ascii","base64","binary","hex","ucs2","ucs-2","utf16le","utf-16le","utf-8","utf8","latin1"];function A(){return`data:image/${arguments.length>0&&arguments[0]!==void 0?arguments[0]:"png"};base64,`}function y(r){let{filePath:n,encoding:t,sync:e,opts:i={}}=r;if(!P.includes(t))throw"编码不符合";if(e===!0)try{return u.readFileSync(n,t,i.position,i.length)}catch(a){return console.error(a),null}return new Promise(function(a,s){u.readFile({filePath:n,encoding:t,...i,success(o){a(o)},fail:s})})}y.sync=function(r){return y({...r,sync:!0})};function g(r){let{filePath:n,data:t,encoding:e,sync:i,opts:a}=r;if(e=e||"binary",!P.includes(e))throw"编码不符合";if(i===!0)try{return u.writeFileSync(n,t,e),{tempFilePath:n,unlink:()=>u.unlinkSync(n)}}catch(s){return console.error(s),null}return new Promise(function(s,o){u.writeFile({filePath:n,encoding:e,data:t,...a,success(f){if(f.errMsg!=="writeFile:ok")return o(new Error(f.errMsg));s({tempFilePath:n,unlink:()=>u.unlinkSync(n)})},fail:o})})}g.sync=function(r){return g({...r,sync:!0})};function M(r){let{arraybuffer:n,fileType:t,method:e,canvasId:i,width:a,height:s,ctx:o,sync:f}=r;if(typeof n!="object"||n.toString().slice(8,-1)!=="ArrayBuffer")return reject(new Error("ArrayBuffer must be a ArrayBuffer"));if(e=e||"canvas",t=t||"png",e==="fs"){const d=wx.env.USER_DATA_PATH+"/"+Date.now()+"."+t;return g({filePath:d,data:n,sync:f})}if(e==="canvas")return new Promise(function(d,l){if(!["canvas","fs"].includes(e))return l(new Error("method must be canvas | fs"));const F=`data:image/${t};base64,${uni.arrayBufferToBase64(n)}`;if(typeof i!="string")return l(new Error("canvasId must be a string [#id]"));const w=uni.createSelectorQuery();o&&w.in(o),w.select(i).fields({node:!0,size:!0}).exec(function(){var b=v._asyncToGenerator(function*(c){if(c=c[0],!c)return l(new Error("No canvas nodes were obtained"));a=a||c.width,s=s||c.height;const m=c.node;if(!m)return l(new Error("No canvas instances were obtained"));const p=m.getContext("2d"),h=m.createImage();yield new Promise(T=>{h.onload=T,h.src=F}).catch(l),p.clearRect(0,0,a,s),p.drawImage(h,0,0,a,s),uni.canvasToTempFilePath({canvas:m,width:a,height:s,fileType:t,success:d,fail:l})});return function(c){return b.apply(this,arguments)}}())})}const S=uni.canIUse("chooseMedia");function B(r){return r={count:1,...r},new Promise((n,t)=>{S?uni.chooseMedia({...r,mediaType:"image",sizeType:["original","compressed"],success(e){if(e.errMsg=="chooseMedia:ok"&&e.tempFiles[0]){const i=e.tempFiles.map(a=>a.tempFilePath);n(i)}else t(e.errMsg)},fail(e){t(e)}}):uni.chooseImage({count:r.count,success(e){n(e.tempFilePaths)},fail(e){t(e)}})})}function E(r){return new Promise((n,t)=>{x(r).then(e=>{uni.saveImageToPhotosAlbum({filePath:e.tempFilePath,success:i=>{uni.showToast({icon:"none",title:"保存成功"}),n(i)},fail:i=>{t(i)}})})})}exports.$fs=u;exports.chooseImg=B;exports.getArraybufferTempPath=M;exports.getImgBase64Prefix=A;exports.readFile=y;exports.saveImageToPhotosAlbum=E;exports.writeFile=g;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=require("../index-1b48ae95.js"),I=require("../http/index.js");require("../object/index.js");const x=I.createDownloadFile(),u=uni.getFileSystemManager(),P=["ascii","base64","binary","hex","ucs2","ucs-2","utf16le","utf-16le","utf-8","utf8","latin1"];function A(){return`data:image/${arguments.length>0&&arguments[0]!==void 0?arguments[0]:"png"};base64,`}function y(r){let{filePath:n,encoding:t,sync:e,opts:i={}}=r;if(!P.includes(t))throw"编码不符合";if(e===!0)try{return u.readFileSync(n,t,i.position,i.length)}catch(a){return console.error(a),null}return new Promise(function(a,s){u.readFile({filePath:n,encoding:t,...i,success(o){a(o)},fail:s})})}y.sync=function(r){return y({...r,sync:!0})};function g(r){let{filePath:n,data:t,encoding:e,sync:i,opts:a}=r;if(e=e||"binary",!P.includes(e))throw"编码不符合";if(i===!0)try{return u.writeFileSync(n,t,e),{tempFilePath:n,unlink:()=>u.unlinkSync(n)}}catch(s){return console.error(s),null}return new Promise(function(s,o){u.writeFile({filePath:n,encoding:e,data:t,...a,success(f){if(f.errMsg!=="writeFile:ok")return o(new Error(f.errMsg));s({tempFilePath:n,unlink:()=>u.unlinkSync(n)})},fail:o})})}g.sync=function(r){return g({...r,sync:!0})};function M(r){let{arraybuffer:n,fileType:t,method:e,canvasId:i,width:a,height:s,ctx:o,sync:f}=r;if(typeof n!="object"||n.toString().slice(8,-1)!=="ArrayBuffer")return reject(new Error("ArrayBuffer must be a ArrayBuffer"));if(e=e||"canvas",t=t||"png",e==="fs"){const d=wx.env.USER_DATA_PATH+"/"+Date.now()+"."+t;return g({filePath:d,data:n,sync:f})}if(e==="canvas")return new Promise(function(d,l){if(!["canvas","fs"].includes(e))return l(new Error("method must be canvas | fs"));const F=`data:image/${t};base64,${uni.arrayBufferToBase64(n)}`;if(typeof i!="string")return l(new Error("canvasId must be a string [#id]"));const w=uni.createSelectorQuery();o&&w.in(o),w.select(i).fields({node:!0,size:!0}).exec(function(){var b=v._asyncToGenerator(function*(c){if(c=c[0],!c)return l(new Error("No canvas nodes were obtained"));a=a||c.width,s=s||c.height;const m=c.node;if(!m)return l(new Error("No canvas instances were obtained"));const p=m.getContext("2d"),h=m.createImage();yield new Promise(T=>{h.onload=T,h.src=F}).catch(l),p.clearRect(0,0,a,s),p.drawImage(h,0,0,a,s),uni.canvasToTempFilePath({canvas:m,width:a,height:s,fileType:t,success:d,fail:l})});return function(c){return b.apply(this,arguments)}}())})}const S=uni.canIUse("chooseMedia");function B(r){return r={count:1,...r},new Promise((n,t)=>{S?uni.chooseMedia({...r,mediaType:"image",sizeType:["original","compressed"],success(e){if(e.errMsg=="chooseMedia:ok"&&e.tempFiles[0]){const i=e.tempFiles.map(a=>a.tempFilePath);n(i)}else t(e.errMsg)},fail(e){t(e)}}):uni.chooseImage({count:r.count,success(e){n(e.tempFilePaths)},fail(e){t(e)}})})}function E(r){return new Promise((n,t)=>{x(r).then(e=>{uni.saveImageToPhotosAlbum({filePath:e.tempFilePath,success:i=>{uni.showToast({icon:"none",title:"保存成功"}),n(i)},fail:i=>{t(i)}})})})}exports.$fs=u;exports.chooseImg=B;exports.getArraybufferTempPath=M;exports.getImgBase64Prefix=A;exports.readFile=y;exports.saveImageToPhotosAlbum=E;exports.writeFile=g;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("../index-4975afce.js"),g="/packageOther/pages/errorPage/errorPage",m={altitude:!0,type:"gcj02"},d={check:!1,errorPage:{path:g,message:"定位失败",type:2,enabled:!0}};function a(e,n){try{return e()}catch(o){console.warn(n||"执行失败",o);return}}function w(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;const n=k(e);return new Promise((o,r)=>{const{success:l,fail:i,...t}=n.locationParams||{},c={...m,...t,success:o,fail:u=>{N(u,n,r)}};uni.getLocation(c)})}function k(e){return typeof e=="boolean"?{check:e,locationParams:{},errorPage:{...d.errorPage},onLocationFail:null,onNetworkFail:null}:e&&typeof e=="object"&&!Array.isArray(e)?{check:e.check!==!1,locationParams:e.locationParams||{},errorPage:{...d.errorPage,...e.errorPage||{}},onLocationFail:e.onLocationFail||null,onNetworkFail:e.onNetworkFail||null}:{check:d.check,locationParams:{},errorPage:{...d.errorPage},onLocationFail:null,onNetworkFail:null}}function N(e,n,o){a(()=>{var r;return(r=n.onLocationFail)===null||r===void 0?void 0:r.call(n,e)},"onLocationFail 回调执行失败"),n.check&&F(n),o(e)}function F(e){uni.getNetworkType({success:n=>{n.networkType==="none"?f(e,new Error("无网络连接")):P(e.errorPage)},fail:n=>{console.warn("网络检测失败",n),f(e,n),P(e.errorPage)}})}function f(e,n){if(typeof e.onNetworkFail=="function")a(()=>e.onNetworkFail(n),"onNetworkFail 回调执行失败");else{const o=(n==null?void 0:n.errMsg)||(n==null?void 0:n.message)||"网络连接异常";a(()=>{uni.showToast({title:o,icon:"none"})},"显示提示失败")}}function P(e){if((e==null?void 0:e.enabled)===!1)return;const n=v();if(!n){console.warn("无法获取当前页面");return}if(L(n))return;const o=y(n,e);a(()=>{uni.redirectTo({url:o})},"跳转错误页面失败")}function v(){try{const e=getCurrentPages();return e&&e.length>0?e[e.length-1]:null}catch(e){return console.warn("获取当前页面失败",e),null}}function L(e){const n=(e==null?void 0:e.route)||"",o=g.replace("/","");return n===o||n.startsWith(o+"/")}function y(e,n){var o;const{path:r,message:l,type:i}=n||{},t={url:(e==null||(o=e.$page)===null||o===void 0?void 0:o.fullPath)||"",message:l||"定位失败",type:i||2};return`${r||g}${h.toQueryString(t)}`}function E(e){let{latitude:n,longitude:o,name:r="",address:l=""}=e;return new Promise((i,t)=>{const c=Number(n),u=Number(o);if(isNaN(c)||isNaN(u)){const s=new Error("经纬度参数无效");a(()=>{uni.showToast({icon:"none",title:"位置信息不完整"})}),t(s);return}uni.openLocation({latitude:c,longitude:u,name:r||"",address:l||"",success:i,fail:s=>{a(()=>{uni.showToast({icon:"none",title:s.errMsg||"打开地图失败"})}),t(s)}})})}exports.getLocation=w;exports.openLocation=E;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("../index-1b48ae95.js"),g="/packageOther/pages/errorPage/errorPage",m={altitude:!0,type:"gcj02"},d={check:!1,errorPage:{path:g,message:"定位失败",type:2,enabled:!0}};function a(e,n){try{return e()}catch(o){console.warn(n||"执行失败",o);return}}function w(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;const n=k(e);return new Promise((o,r)=>{const{success:l,fail:i,...t}=n.locationParams||{},c={...m,...t,success:o,fail:u=>{N(u,n,r)}};uni.getLocation(c)})}function k(e){return typeof e=="boolean"?{check:e,locationParams:{},errorPage:{...d.errorPage},onLocationFail:null,onNetworkFail:null}:e&&typeof e=="object"&&!Array.isArray(e)?{check:e.check!==!1,locationParams:e.locationParams||{},errorPage:{...d.errorPage,...e.errorPage||{}},onLocationFail:e.onLocationFail||null,onNetworkFail:e.onNetworkFail||null}:{check:d.check,locationParams:{},errorPage:{...d.errorPage},onLocationFail:null,onNetworkFail:null}}function N(e,n,o){a(()=>{var r;return(r=n.onLocationFail)===null||r===void 0?void 0:r.call(n,e)},"onLocationFail 回调执行失败"),n.check&&F(n),o(e)}function F(e){uni.getNetworkType({success:n=>{n.networkType==="none"?f(e,new Error("无网络连接")):P(e.errorPage)},fail:n=>{console.warn("网络检测失败",n),f(e,n),P(e.errorPage)}})}function f(e,n){if(typeof e.onNetworkFail=="function")a(()=>e.onNetworkFail(n),"onNetworkFail 回调执行失败");else{const o=(n==null?void 0:n.errMsg)||(n==null?void 0:n.message)||"网络连接异常";a(()=>{uni.showToast({title:o,icon:"none"})},"显示提示失败")}}function P(e){if((e==null?void 0:e.enabled)===!1)return;const n=v();if(!n){console.warn("无法获取当前页面");return}if(L(n))return;const o=y(n,e);a(()=>{uni.redirectTo({url:o})},"跳转错误页面失败")}function v(){try{const e=getCurrentPages();return e&&e.length>0?e[e.length-1]:null}catch(e){return console.warn("获取当前页面失败",e),null}}function L(e){const n=(e==null?void 0:e.route)||"",o=g.replace("/","");return n===o||n.startsWith(o+"/")}function y(e,n){var o;const{path:r,message:l,type:i}=n||{},t={url:(e==null||(o=e.$page)===null||o===void 0?void 0:o.fullPath)||"",message:l||"定位失败",type:i||2};return`${r||g}${h.toQueryString(t)}`}function E(e){let{latitude:n,longitude:o,name:r="",address:l=""}=e;return new Promise((i,t)=>{const c=Number(n),u=Number(o);if(isNaN(c)||isNaN(u)){const s=new Error("经纬度参数无效");a(()=>{uni.showToast({icon:"none",title:"位置信息不完整"})}),t(s);return}uni.openLocation({latitude:c,longitude:u,name:r||"",address:l||"",success:i,fail:s=>{a(()=>{uni.showToast({icon:"none",title:s.errMsg||"打开地图失败"})}),t(s)}})})}exports.getLocation=w;exports.openLocation=E;
@@ -1,98 +1,131 @@
1
1
  /**
2
+ * 依赖说明:需要安装 @types/uni‑app,提供 UniApp.* 命名空间类型
2
3
  * 请求Content‑Type常量
3
4
  */
4
5
  export declare const CONTENT_TYPES: Readonly<{
5
- /** json格式 */
6
+ /** json格式 application/json;charset=UTF-8 */
6
7
  JSON: string;
7
- /** 纯文本 */
8
+ /** 纯文本 text/plain;charset=UTF-8 */
8
9
  TEXT: string;
9
- /** url编码表单 */
10
+ /** url编码表单 application/x-www-form-urlencoded;charset=UTF-8 */
10
11
  FORM_URLENCODED: string;
11
- /** 文件上传表单 */
12
+ /** 文件上传表单 multipart/form‑data */
12
13
  FORM_DATA: string;
13
14
  }>;
14
15
 
15
16
  /** uni请求任务对象,依赖uni‑app全局UniApp命名空间 */
16
17
  type UniTask = UniApp.RequestTask | UniApp.UploadTask | UniApp.DownloadTask;
17
18
 
19
+ type UniRequestResult = UniApp.RequestSuccessCallbackResult;
20
+ type UniUploadResult = UniApp.UploadFileSuccessCallbackResult;
21
+ type UniDownloadResult = UniApp.DownloadFileSuccessCallbackResult;
22
+ type UniAnyResult = UniRequestResult | UniUploadResult | UniDownloadResult;
23
+
18
24
  /**
19
- * 请求取消控制器(仿axios CancelToken)
25
+ * 请求失败载荷
20
26
  */
21
- export declare const CancelToken: {
22
- caches: Record<string, UniTask | undefined>;
27
+ export type RequestFailPayload = {
28
+ type: 'fail';
29
+ res: UniApp.GeneralCallbackResult;
30
+ };
23
31
 
32
+ /**
33
+ * 缓存适配器抽象接口,对接外部缓存实现(如前面StorageCache)
34
+ */
35
+ export interface CacheAdapter {
24
36
  /**
25
- * 注册任务
26
- * @param token 唯一取消令牌
27
- * @param task uni请求task对象
37
+ * 获取缓存
38
+ * @param key 缓存key
39
+ * @returns 缓存值,不存在返回undefined
28
40
  */
29
- add(token: string, task: UniTask): void;
30
-
41
+ get(key: string): unknown;
31
42
  /**
32
- * 移除任务缓存
33
- * @param token 唯一取消令牌
43
+ * 设置缓存
44
+ * @param key 缓存key
45
+ * @param value 缓存存储内容
46
+ * @param expire 过期秒数,<=0永不过期
34
47
  */
35
- delete(token: string): void;
48
+ set(key: string, value: unknown, expire: number): void;
49
+ }
36
50
 
51
+ /**
52
+ * 外部传入缓存配置入参(仅调用方使用,业务传入)
53
+ * @description 开启请求缓存 isCache=true 时,必须传入对应 mode 的适配器 localAdapter / sessionAdapter
54
+ */
55
+ export interface CacheConfigInput {
37
56
  /**
38
- * @internal 内部私有,请勿外部调用
39
- * @param token
57
+ * 自定义缓存业务key;不填默认由url生成,**不包含请求参数**,同URL不同参数务必手动指定key
40
58
  */
41
- _cancel(token: string): void;
42
-
59
+ key?: string;
43
60
  /**
44
- * 取消全部请求
61
+ * 缓存key前缀,用于业务隔离,会拼接在业务key前面
45
62
  */
46
- cancelAll(): void;
47
-
63
+ prefix?: string;
48
64
  /**
49
- * 创建token与取消函数
50
- * @returns { token:string, cancel:()=>void }
65
+ * 缓存存储模式
66
+ * - local:持久存储
67
+ * - session:会话存储(H5会话销毁;小程序降级持久)
51
68
  */
52
- source(): { token: string; cancel: () => void };
53
- };
54
-
55
- type UniRequestResult = UniApp.RequestSuccessCallbackResult;
56
- type UniUploadResult = UniApp.UploadFileSuccessCallbackResult;
57
- type UniDownloadResult = UniApp.DownloadFileSuccessCallbackResult;
58
- type UniAnyResult = UniRequestResult | UniUploadResult | UniDownloadResult;
59
-
60
- /**
61
- * 包装uni异步API为Promise
62
- * @param type uni接口名称 request | uploadFile | downloadFile
63
- * @param opts 请求参数,可以传入 cancelToken 用于请求取消
64
- * @returns uni接口回调结果Promise
65
- */
66
- export declare function promisifyRequest<T = UniAnyResult>(type: 'request' | 'uploadFile' | 'downloadFile', opts: Record<string, any>): Promise<T>;
67
-
68
- /**
69
- * 开启loading计数
70
- * @param title loading提示文本,默认:加载中...
71
- */
72
- export declare function startLoading(title?: string): void;
69
+ mode?: 'local' | 'session';
70
+ /**
71
+ * 缓存过期时间,单位秒;<=0代表永不过期,默认1小时过期
72
+ */
73
+ expire?: number;
74
+ /**
75
+ * local模式对应的缓存适配器实例;mode=local且开启缓存时必填
76
+ */
77
+ localAdapter?: CacheAdapter | null;
78
+ /**
79
+ * session模式对应的缓存适配器实例;mode=session且开启缓存时必填
80
+ */
81
+ sessionAdapter?: CacheAdapter | null;
82
+ }
73
83
 
74
84
  /**
75
- * 关闭loading计数
85
+ * normalizeOpts 之后内部运行时缓存配置对象
86
+ * @description adapter 字段由内部派生生成,外部禁止传入、禁止读取使用
76
87
  */
77
- export declare function endLoading(): void;
88
+ export interface CacheConfig {
89
+ /**
90
+ * 缓存key;默认仅由url生成,**不包含请求参数**,同URL不同参数需手动指定key
91
+ */
92
+ key: string;
93
+ /**
94
+ * 缓存key前缀
95
+ */
96
+ prefix: string;
97
+ /**
98
+ * 缓存模式
99
+ */
100
+ mode: 'local' | 'session';
101
+ /**
102
+ * 过期时间,单位秒;<=0代表永不过期,默认1小时过期
103
+ */
104
+ expire: number;
105
+ /**
106
+ * ⚠️ adapter 为内部运行时派生字段,**外部禁止传入、禁止访问**;
107
+ * 开启 isCache:true,必须传入 CacheConfigInput 对应模式的适配器,否则运行时抛出异常
108
+ */
109
+ adapter: CacheAdapter | null;
110
+ [key: string]: unknown;
111
+ }
78
112
 
79
- // -------------------- 拦截器类型定义(运行时标准化后) --------------------
80
113
  /**
81
114
  * 请求前置拦截器【标准化后】
82
115
  * @param invokeArgs 组装完成即将传给uni的请求参数
83
116
  * @param opts normalizeOpts合并后的完整配置
84
117
  * @returns 处理后的请求参数
85
118
  */
86
- type ReqInterceptor = (invokeArgs: Record<string, any>, opts: NormalizeOpts) => Promise<Record<string, any>>;
119
+ export type ReqInterceptor = (invokeArgs: Record<string, unknown>, opts: RequestOptions) => Promise<Record<string, unknown>> | Record<string, unknown>;
87
120
 
88
121
  /**
89
122
  * 响应拦截器【标准化后】
90
123
  * @param res uni原始响应对象
91
124
  * @param opts normalizeOpts合并后的完整配置
92
- * @param reloadFn 重发当前请求函数,返回Promise
125
+ * @param reloadFn 重发当前请求函数,可为null
93
126
  * @returns 处理后业务数据
94
127
  */
95
- type ResInterceptor = (res: UniAnyResult, opts: NormalizeOpts, reloadFn: () => Promise<any>) => Promise<any>;
128
+ export type ResInterceptor = (res: unknown, opts: RequestOptions, reloadFn: (() => Promise<unknown>) | null) => Promise<unknown> | unknown;
96
129
 
97
130
  /**
98
131
  * 错误拦截器【标准化后】
@@ -100,68 +133,58 @@ type ResInterceptor = (res: UniAnyResult, opts: NormalizeOpts, reloadFn: () => P
100
133
  * @param opts normalizeOpts合并后的完整配置
101
134
  * @returns 返回非undefined代表错误已接管;返回undefined会继续抛出异常
102
135
  */
103
- type ErrInterceptor = (err: any, opts: NormalizeOpts) => Promise<any>;
136
+ export type ErrInterceptor = (err: RequestFailPayload | Error, opts: RequestOptions) => Promise<unknown> | unknown;
104
137
 
105
138
  /**
106
139
  * 用户传入拦截器:支持单个函数 / 函数数组,交由 normalizeInterceptor + composeAsync合并
107
140
  */
108
- type UserReqInterceptor = ReqInterceptor | ReqInterceptor[];
109
- type UserResInterceptor = ResInterceptor | ResInterceptor[];
110
- type UserErrInterceptor = ErrInterceptor | ErrInterceptor[];
111
-
112
- // 导出拦截器类型别名,供业务直接 import type 使用
113
- export type { ReqInterceptor, ResInterceptor, ErrInterceptor, UserReqInterceptor, UserResInterceptor, UserErrInterceptor };
141
+ export type UserReqInterceptor = ReqInterceptor | ReqInterceptor[];
142
+ export type UserResInterceptor = ResInterceptor | ResInterceptor[];
143
+ export type UserErrInterceptor = ErrInterceptor | ErrInterceptor[];
114
144
 
115
145
  /**
116
146
  * normalizeOpts标准化之后的请求额外配置对象【内部运行时】
117
147
  */
118
- export interface NormalizeOpts {
119
- /** post请求是否使用urlencoded表单格式 */
148
+ export interface RequestOptions {
149
+ /** 是否使用url‑encoded表单编码 */
120
150
  qs: boolean;
121
- /** 是否开启默认错误弹窗提示 */
151
+ /** 是否展示错误toast提示 */
122
152
  showError: boolean;
123
- /** 是否开启接口缓存 */
153
+ /** 是否开启请求缓存;开启时cacheConfig必须提供对应mode的适配器 */
124
154
  isCache: boolean;
125
- /** 缓存key前缀;不传/空字符串/undefined默认使用api;设置cacheKey时此配置无效 */
126
- cachePrefix?: string;
127
- /** 完整缓存key,传入则完全覆盖,优先级高于cachePrefix */
128
- cacheKey: string;
129
- /** 缓存过期时间,单位秒(s), 默认1小时过期 */
130
- cacheExpire: number;
131
- /** loading提示文案 */
155
+ /** 缓存配置;adapter为内部运行时派生字段,外部请勿传入、请勿访问;开启isCache:true,必须传入对应模式的适配器,否则运行时抛出异常 */
156
+ cacheConfig: CacheConfig;
157
+ /** loading提示文字 */
132
158
  loadingText: string;
133
- /** 是否开启loading */
159
+ /** 是否开启全局loading弹窗 */
134
160
  loading: boolean;
135
- /** 请求前置拦截器(compose组合完成的单个函数) */
161
+ /** 请求前置拦截器(已合并为单个函数) */
136
162
  reqInterceptor: ReqInterceptor;
137
- /** 响应拦截器(compose组合完成的单个函数) */
163
+ /** 响应拦截器(已合并为单个函数) */
138
164
  resInterceptor: ResInterceptor;
139
- /** 错误拦截器(compose组合完成的单个函数) */
165
+ /** 错误拦截器(已合并为单个函数) */
140
166
  errInterceptor: ErrInterceptor;
141
167
  /** 允许扩展自定义字段 */
142
- [key: string]: any;
168
+ [key: string]: unknown;
143
169
  }
144
170
 
145
171
  /**
146
172
  * 业务侧传入配置【外部用户参数,支持拦截器数组】
147
- * 经过内部 normalizeOpts 之后转换为 NormalizeOpts
173
+ * 经过内部 normalizeOpts 之后转换为 RequestOptions
174
+ * @description isCache 设置为 true 时,cacheConfig 需要传入对应 mode 的适配器 localAdapter / sessionAdapter,否则运行时抛出异常
148
175
  */
149
176
  export interface UserRequestOpts {
150
- /** post请求是否使用urlencoded表单格式 */
177
+ /** 是否使用url‑encoded表单编码 */
151
178
  qs?: boolean;
152
- /** 是否开启默认错误弹窗提示 */
179
+ /** 是否展示错误toast提示 */
153
180
  showError?: boolean;
154
- /** 是否开启接口缓存 */
181
+ /** 是否开启请求缓存;开启时cacheConfig必须提供对应mode的适配器(localAdapter/sessionAdapter) */
155
182
  isCache?: boolean;
156
- /** 缓存key前缀;不传/空字符串/undefined默认使用api;设置cacheKey时此配置无效 */
157
- cachePrefix?: string;
158
- /** 完整缓存key,传入则完全覆盖,优先级高于cachePrefix */
159
- cacheKey?: string;
160
- /** 缓存过期时间,单位秒(s), 默认1小时过期 */
161
- cacheExpire?: number;
162
- /** loading提示文案 */
183
+ /** 缓存配置,用户传入部分字段即可;isCache=true必须传入对应mode适配器 */
184
+ cacheConfig?: Partial<CacheConfigInput>;
185
+ /** loading提示文字 */
163
186
  loadingText?: string;
164
- /** 是否开启loading */
187
+ /** 是否开启全局loading弹窗 */
165
188
  loading?: boolean;
166
189
  /** 请求前置拦截器,支持单个函数或函数数组 */
167
190
  reqInterceptor?: UserReqInterceptor;
@@ -170,68 +193,156 @@ export interface UserRequestOpts {
170
193
  /** 错误拦截器,支持单个函数或函数数组 */
171
194
  errInterceptor?: UserErrInterceptor;
172
195
  /** 允许扩展自定义字段 */
173
- [key: string]: any;
196
+ [key: string]: unknown;
174
197
  }
175
198
 
199
+ /**
200
+ * 请求取消控制器(仿axios CancelToken)
201
+ * 注意:当前实现token由请求内部source生成,**不支持外部传入自定义cancelToken**
202
+ */
203
+ export declare const CancelToken: {
204
+ /** 保存token与uni任务映射 */
205
+ caches: Record<string, UniTask>;
206
+
207
+ /**
208
+ * 注册请求任务
209
+ * @param token 取消令牌
210
+ * @param task uni请求task对象
211
+ */
212
+ add(token: string, task: UniTask): void;
213
+
214
+ /**
215
+ * 移除任务缓存
216
+ * @param token 取消令牌
217
+ */
218
+ delete(token: string): void;
219
+
220
+ /**
221
+ * 根据token终止请求
222
+ * @param token 取消令牌
223
+ */
224
+ _cancel(token: string): void;
225
+
226
+ /**
227
+ * 取消全部缓存中的请求
228
+ */
229
+ cancelAll(): void;
230
+
231
+ /**
232
+ * 创建token与取消函数
233
+ * @returns {{token:string, cancel:()=>void}}
234
+ */
235
+ source(): { token: string; cancel: () => void };
236
+ };
237
+
238
+ /**
239
+ * 包装uni异步API为Promise
240
+ * @param type uni接口名称 request | uploadFile | downloadFile
241
+ * @param opts 请求参数,可以传入 cancelToken 用于请求取消
242
+ * @description 泛型仅为类型断言,运行时不会做类型转换
243
+ * @returns uni接口回调结果Promise
244
+ */
245
+ export declare function promisifyRequest<T = UniAnyResult>(type: 'request' | 'uploadFile' | 'downloadFile', opts: Record<string, unknown>): Promise<T>;
246
+
247
+ /**
248
+ * 底层直接展示loading,不做计数
249
+ * @param title loading提示文字
250
+ */
251
+ export declare function showLoading(title: string): void;
252
+
253
+ /**
254
+ * 底层直接隐藏loading,不做计数
255
+ */
256
+ export declare function hideLoading(): void;
257
+
258
+ /**
259
+ * 开启loading计数,计数>0时展示loading;多次调用会叠加计数
260
+ * @param [title='加载中...'] loading提示文案
261
+ */
262
+ export declare function startLoading(title?: string): void;
263
+
264
+ /**
265
+ * 关闭loading计数,计数归0则真正隐藏loading弹窗
266
+ */
267
+ export declare function endLoading(): void;
268
+
176
269
  /**
177
270
  * createRequest返回的请求实例对象
178
271
  */
179
- interface RequestInstance {
272
+ export interface RequestInstance {
180
273
  /**
181
- * 基础请求方法
274
+ * 基础请求调用
182
275
  * @param url 请求地址
183
- * @param method 请求方法,如 GET / POST / PUT 等,支持自定义method字符串
184
- * @param params 请求参数,允许传null
185
- * @param config uni底层请求配置(header、timeout等)
186
- * @param options 请求扩展配置(loading、缓存、拦截器等,支持拦截器数组)
276
+ * @param method http方法 get/post/put/delete等
277
+ * @param params 请求参数
278
+ * @param [config] 当前请求配置,覆盖实例defaultConfig(baseURL、headers等)
279
+ * @param [options] 当前请求扩展选项,覆盖实例defaultOpts(loading、缓存、拦截器)
280
+ * @returns Promise业务响应数据
187
281
  */
188
- (url: string, method: string, params?: any | null, config?: Record<string, any>, options?: UserRequestOpts): Promise<any>;
282
+ (url: string, method: string, params?: unknown, config?: Record<string, unknown>, options?: UserRequestOpts): Promise<unknown>;
189
283
 
190
284
  /**
191
285
  * get快捷方法
192
286
  * @param url 请求地址
193
- * @param params 请求参数,允许传null
194
- * @param config uni底层请求配置
195
- * @param options 请求扩展配置
287
+ * @param params 请求参数
288
+ * @param [config] 当前请求配置
289
+ * @param [options] 当前请求扩展选项
196
290
  */
197
- get(url: string, params?: any | null, config?: Record<string, any>, options?: UserRequestOpts): Promise<any>;
291
+ get(url: string, params?: unknown, config?: Record<string, unknown>, options?: UserRequestOpts): Promise<unknown>;
198
292
 
199
293
  /**
200
294
  * post快捷方法
201
295
  * @param url 请求地址
202
- * @param params 请求参数,允许传null
203
- * @param config uni底层请求配置
204
- * @param options 请求扩展配置
296
+ * @param params 请求参数
297
+ * @param [config] 当前请求配置
298
+ * @param [options] 当前请求扩展选项
205
299
  */
206
- post(url: string, params?: any | null, config?: Record<string, any>, options?: UserRequestOpts): Promise<any>;
300
+ post(url: string, params?: unknown, config?: Record<string, unknown>, options?: UserRequestOpts): Promise<unknown>;
207
301
  }
208
302
 
209
303
  /**
210
304
  * 创建常规http请求实例(get/post)
211
- * @param defaultConfig 全局基础配置 baseURL、headers等
212
- * @param defaultOpts 全局默认扩展配置 loading、缓存、拦截器等,拦截器支持数组
305
+ * @param defaultConfig 实例默认配置(baseURL、headers等)
306
+ * @param defaultOpts 实例默认扩展选项(loading、缓存、拦截器)
213
307
  * @returns RequestInstance 请求实例
214
308
  */
215
- export declare function createRequest(defaultConfig: Record<string, any>, defaultOpts?: UserRequestOpts): RequestInstance;
309
+ export declare function createRequest(defaultConfig: Record<string, unknown>, defaultOpts?: UserRequestOpts): RequestInstance;
216
310
 
217
311
  /**
218
312
  * 创建上传文件实例
219
- * @param defaultConfig 全局基础配置 baseURL、headers等
220
- * @param defaultOpts 全局默认扩展配置 loading、缓存、拦截器等,拦截器支持数组
221
- * @returns 上传函数
313
+ * @param defaultConfig 实例默认配置(baseURL、headers等)
314
+ * @param defaultOpts 实例默认扩展选项
315
+ * @returns 上传调用函数
222
316
  */
223
317
  export declare function createUploadFile(
224
- defaultConfig: Record<string, any>,
318
+ defaultConfig: Record<string, unknown>,
225
319
  defaultOpts?: UserRequestOpts
226
- ): (url: string, params: { filePath: string; keyName?: string; [key: string]: any }, config?: Record<string, any>, options?: UserRequestOpts) => Promise<any>;
320
+ ): (url: string, params: { filePath: string; keyName?: string; [key: string]: unknown }, config?: Record<string, unknown>, options?: UserRequestOpts) => Promise<unknown>;
227
321
 
228
322
  /**
229
323
  * 创建下载文件实例
230
- * @param defaultConfig 全局基础配置 baseURL、headers等
231
- * @param defaultOpts 全局默认扩展配置 loading、缓存、拦截器等,拦截器支持数组
232
- * @returns 下载函数
324
+ * @param defaultConfig 实例默认配置(baseURL、headers等)
325
+ * @param defaultOpts 实例默认扩展选项
326
+ * @returns 下载调用函数
233
327
  */
234
328
  export declare function createDownloadFile(
235
- defaultConfig: Record<string, any>,
329
+ defaultConfig: Record<string, unknown>,
236
330
  defaultOpts?: UserRequestOpts
237
- ): (url: string, params?: Record<string, any>, config?: Record<string, any>, options?: UserRequestOpts) => Promise<any>;
331
+ ): (url: string, params?: Record<string, unknown>, config?: Record<string, unknown>, options?: UserRequestOpts) => Promise<unknown>;
332
+
333
+ // 导出全部业务可用类型
334
+ export type {
335
+ ReqInterceptor,
336
+ ResInterceptor,
337
+ ErrInterceptor,
338
+ UserReqInterceptor,
339
+ UserResInterceptor,
340
+ UserErrInterceptor,
341
+ CacheAdapter,
342
+ CacheConfigInput,
343
+ CacheConfig,
344
+ RequestFailPayload,
345
+ RequestOptions,
346
+ UserRequestOpts,
347
+ RequestInstance
348
+ };
package/lib/http/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const C=require("../index-4975afce.js"),A=require("../object/index.js"),O=Object.freeze({JSON:"application/json;charset=UTF-8",TEXT:"text/plain;charset=UTF-8",FORM_URLENCODED:"application/x-www-form-urlencoded;charset=UTF-8",FORM_DATA:"multipart/form-data"}),m={caches:Object.create(null),add(e,t){this.caches[e]=t},delete(e){Reflect.deleteProperty(this.caches,e)},_cancel(e){const t=this.caches[e];typeof(t==null?void 0:t.abort)=="function"&&t.abort()},cancelAll(){Object.values(this.caches).forEach(e=>{typeof(e==null?void 0:e.abort)=="function"&&e.abort()}),this.caches=Object.create(null)},source(){const e=`${Date.now()}-${C.getRandomStr(16)}`;return{token:e,cancel:()=>this._cancel(e)}}};function x(e,t){return new Promise((c,n)=>{const r=uni[e]({...t,success(o){if(o.statusCode>=200&&o.statusCode<300)return c(o);n({type:"fail",res:o})},fail(o){n({type:"fail",res:o})},complete(){t.cancelToken&&m.delete(t.cancelToken)}});t.cancelToken&&m.add(t.cancelToken,r)})}let R=0,v=!1;function N(e){v||(v=!0,uni.showLoading({title:e,mask:!0}))}function P(){v&&(v=!1,uni.hideLoading())}function j(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"加载中...";R++,R===1&&N(e)}function D(){R>0&&R--,R===0&&P()}function _(e,t){return function(c,n,r,o){return e(c,t,n,r,o)}}function w(e){return typeof e=="function"?e:()=>e||{}}function k(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const n=w(t.headers)(),r=w(c.headers)(),o={...t,...c,headers:{...n,...r}},{headers:a,...s}=o;return{urlRes:e.startsWith("http")?e:o.baseURL?o.baseURL+e:e,headers:a,configRes:s}}function U(e){return typeof e=="function"?[e]:Array.isArray(e)?e.filter(t=>typeof t=="function"):[]}function F(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const n={qs:!0,showError:!0,isCache:!1,cacheExpire:60*60,loadingText:e.loadingText,loading:!0,reqInterceptor:r=>r,resInterceptor:r=>r,errInterceptor:()=>{},...t,...c};if(!n.cacheKey){const r=(n.cachePrefix||"api").replace(/:$/,"");n.cacheKey=`${r}:${e.url}`}return["reqInterceptor","resInterceptor","errInterceptor"].forEach(r=>{const o=[...U(t[r]),...U(c[r])];n[r]=o.length?C.composeAsync(...o):a=>a}),n}function q(e,t){const c=Array.from(t);return()=>e(...A.cloneDeepWithDescriptors(c))}function E(e,t,c,n,r){return b.apply(this,arguments)}function b(){return b=C._asyncToGenerator(function*(e,t,c,n,r){let o;n.loading&&(j(n.loadingText),o=()=>{D(),o=null});try{var a;const u=yield n.reqInterceptor(c,n),l=yield e(t,u);return(a=o)===null||a===void 0||a(),yield n.resInterceptor(l,n,r)}catch(u){var s;(s=o)===null||s===void 0||s();const l=yield n.errInterceptor(u,n);return l!==void 0?l:Promise.reject(u)}}),b.apply(this,arguments)}function S(e,t){function c(n,r,o,a,s){const u=m.source(),l=q(c,arguments),i=F({url:n,loadingText:"加载中..."},t,s),{urlRes:y,headers:T,configRes:h}=k(n,e,a);if(i.isCache){const d=C.getCache(i.cacheKey);if(d)return Promise.resolve(d)}const p=r.toUpperCase()==="GET"?O.JSON:i.qs?O.FORM_URLENCODED:O.JSON,g={cancelToken:u.token,method:r,url:y,data:o,header:{"Content-Type":p,...T},...h};return E(x,"request",g,i,l).then(d=>(i.isCache&&C.setCache(i.cacheKey,d,i.cacheExpire),d))}return c.get=_(c,"get"),c.post=_(c,"post"),c}function L(e,t){return function c(n,r,o,a){const s=m.source(),u=q(c,arguments),l=F({loadingText:"上传中..."},t,a),{urlRes:i,headers:y,configRes:T}=k(n,e,o),{keyName:h="file",filePath:f,...p}={keyName:"file",...r};if(!f||!f.startsWith("http://tmp")&&!f.startsWith("wxfile://tmp"))return Promise.resolve({data:f});const g={cancelToken:s.token,url:i,filePath:f,name:h,formData:p,header:{...y},...T};return E(x,"uploadFile",g,l,u)}}function $(e,t){return function c(n,r,o,a){const s=m.source(),u=q(c,arguments),l=F({loadingText:"下载中..."},t,a),{urlRes:i,headers:y,configRes:T}=k(n,e,o);let h=i;if(r&&typeof r=="object"){const p=Object.entries(r).filter(g=>{let[,d]=g;return d!=null&&d!==""}).map(g=>{let[d,I]=g;return`${encodeURIComponent(d)}=${encodeURIComponent(I)}`}).join("&");p&&(h+=(h.includes("?")?"&":"?")+p)}const f={cancelToken:s.token,url:h,header:{...y},...T};return E(x,"downloadFile",f,l,u)}}exports.CONTENT_TYPES=O;exports.CancelToken=m;exports.createDownloadFile=$;exports.createRequest=S;exports.createUploadFile=L;exports.endLoading=D;exports.promisifyRequest=x;exports.startLoading=j;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("../index-1b48ae95.js"),P=require("../object/index.js"),k=Object.freeze({JSON:"application/json;charset=UTF-8",TEXT:"text/plain;charset=UTF-8",FORM_URLENCODED:"application/x-www-form-urlencoded;charset=UTF-8",FORM_DATA:"multipart/form-data"}),y={caches:Object.create(null),add(e,t){this.caches[e]=t},delete(e){Reflect.deleteProperty(this.caches,e)},_cancel(e){const t=this.caches[e];typeof(t==null?void 0:t.abort)=="function"&&t.abort()},cancelAll(){Object.values(this.caches).forEach(e=>{typeof(e==null?void 0:e.abort)=="function"&&e.abort()}),this.caches=Object.create(null)},source(){const e=`${Date.now()}-${w.getRandomStr(16)}`;return{token:e,cancel:()=>this._cancel(e)}}};function O(e,t){return new Promise((r,n)=>{const i=uni[e]({...t,success(o){if(o.statusCode>=200&&o.statusCode<300)return r(o);n({type:"fail",res:o})},fail(o){n({type:"fail",res:o})},complete(){t.cancelToken&&y.delete(t.cancelToken)}});t.cancelToken&&y.add(t.cancelToken,i)})}let R=0,x=!1;function U(e){x||(x=!0,uni.showLoading({title:e,mask:!0}))}function D(){x&&(x=!1,uni.hideLoading())}function L(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"加载中...";R++,R===1&&U(e)}function N(){R>0&&R--,R===0&&D()}function j(e,t){return function(r,n,i,o){return e(r,t,n,i,o)}}function A(e){return typeof e=="function"?e:()=>e||{}}function F(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const n=A(t.headers)(),i=A(r.headers)(),o={...t,...r,headers:{...n,...i}},{headers:s,...u}=o;return{urlRes:e.startsWith("http")?e:o.baseURL?o.baseURL+e:e,headers:s,configRes:u}}function I(e){return typeof e=="function"?[e]:Array.isArray(e)?e.filter(t=>typeof t=="function"):[]}function q(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const n={qs:!0,showError:!0,isCache:!1,cacheConfig:{},loadingText:e.loadingText,loading:!0,reqInterceptor:a=>a,resInterceptor:a=>a,errInterceptor:()=>{},...t,...r},i={...t.cacheConfig,...r.cacheConfig},{localAdapter:o,sessionAdapter:s,...u}=i,c={key:"",prefix:"api",mode:"local",expire:60*60,...u};if(!c.key){const a=(c.prefix||"api").replace(/:$/,"");c.key=`${a}:${e.url}`}if(c.adapter=c.mode==="session"?s:o,Object.defineProperty(c,"adapter",{writable:!1,configurable:!1}),n.cacheConfig=c,n.isCache){const a=c.adapter;if(!(a&&typeof a.get=="function"&&typeof a.set=="function"))throw new Error("开启缓存(isCache=true)时,请在cacheConfig传入对应mode的适配器,适配器必须实现 get(key)、set(key,value,expire) 方法")}return["reqInterceptor","resInterceptor","errInterceptor"].forEach(a=>{const l=[...I(t[a]),...I(r[a])];n[a]=l.length?w.composeAsync(...l):g=>g}),n}function E(e,t){const r=Array.from(t);return()=>e(...P.cloneDeepWithDescriptors(r))}function _(e,t,r,n,i){return v.apply(this,arguments)}function v(){return v=w._asyncToGenerator(function*(e,t,r,n,i){let o;n.loading&&(L(n.loadingText),o=()=>{N(),o=null});try{var s;const c=yield n.reqInterceptor(r,n),a=yield e(t,c);return(s=o)===null||s===void 0||s(),yield n.resInterceptor(a,n,i)}catch(c){var u;(u=o)===null||u===void 0||u();const a=yield n.errInterceptor(c,n);return a!==void 0?a:Promise.reject(c)}}),v.apply(this,arguments)}function S(e,t){function r(n,i,o,s,u){const c=y.source(),a=E(r,arguments),l=q({url:n,loadingText:"加载中..."},t,u),{urlRes:g,headers:C,configRes:h}=F(n,e,s),f=l.isCache,d=l.cacheConfig;if(f){const T=d.adapter.get(d.key);if(T)return Promise.resolve(T)}const m=i.toUpperCase()==="GET"?k.JSON:l.qs?k.FORM_URLENCODED:k.JSON,b={cancelToken:c.token,method:i,url:g,data:o,header:{"Content-Type":m,...C},...h};return _(O,"request",b,l,a).then(T=>(f&&d.adapter.set(d.key,T,d.expire),T))}return r.get=j(r,"get"),r.post=j(r,"post"),r}function $(e,t){return function r(n,i,o,s){const u=y.source(),c=E(r,arguments),a=q({loadingText:"上传中..."},t,s),{urlRes:l,headers:g,configRes:C}=F(n,e,o),{keyName:h="file",filePath:f,...d}={keyName:"file",...i};if(!f||!f.startsWith("http://tmp")&&!f.startsWith("wxfile://tmp"))return Promise.resolve({data:f});const p={cancelToken:u.token,url:l,filePath:f,name:h,formData:d,header:{...g},...C};return _(O,"uploadFile",p,a,c)}}function z(e,t){return function r(n,i,o,s){const u=y.source(),c=E(r,arguments),a=q({loadingText:"下载中..."},t,s),{urlRes:l,headers:g,configRes:C}=F(n,e,o);let h=l;if(i&&typeof i=="object"){const d=Object.entries(i).filter(p=>{let[,m]=p;return m!=null&&m!==""}).map(p=>{let[m,b]=p;return`${encodeURIComponent(m)}=${encodeURIComponent(b)}`}).join("&");d&&(h+=(h.includes("?")?"&":"?")+d)}const f={cancelToken:u.token,url:h,header:{...g},...C};return _(O,"downloadFile",f,a,c)}}exports.CONTENT_TYPES=k;exports.CancelToken=y;exports.createDownloadFile=z;exports.createRequest=S;exports.createUploadFile=$;exports.endLoading=N;exports.hideLoading=D;exports.promisifyRequest=O;exports.showLoading=U;exports.startLoading=L;
@@ -0,0 +1 @@
1
+ "use strict";function S(e,o,u,n,r,t,a){try{var i=e[t](a),s=i.value}catch(f){return void u(f)}i.done?o(s):Promise.resolve(s).then(n,r)}function h(e){return function(){var o=this,u=arguments;return new Promise(function(n,r){var t=e.apply(o,u);function a(s){S(t,n,r,a,i,"next",s)}function i(s){S(t,n,r,a,i,"throw",s)}a(void 0)})}}function C(){for(var e=arguments.length,o=new Array(e),u=0;u<e;u++)o[u]=arguments[u];if(o.some(n=>typeof n!="function"))throw new TypeError("compose 参数必须是函数");return o.length===0?function(){for(var n=arguments.length,r=new Array(n),t=0;t<n;t++)r[t]=arguments[t];return r.length===1?r[0]:r}:o.reduce((n,r)=>function(){for(var t=this,a=arguments.length,i=new Array(a),s=0;s<a;s++)i[s]=arguments[s];return r.call(this,function(){for(var f=arguments.length,m=new Array(f),c=0;c<f;c++)m[c]=arguments[c];return n.apply(t,m.concat(i))},...i)})}function I(){for(var e=arguments.length,o=new Array(e),u=0;u<e;u++)o[u]=arguments[u];if(o.some(n=>typeof n!="function"))throw new TypeError("composeAsync 参数必须是函数");return o.length===0?h(function*(){for(var n=arguments.length,r=new Array(n),t=0;t<n;t++)r[t]=arguments[t];return r.length===1?r[0]:r}):o.reduce((n,r)=>h(function*(){for(var t=this,a=arguments.length,i=new Array(a),s=0;s<a;s++)i[s]=arguments[s];return r.call(this,h(function*(){for(var f=arguments.length,m=new Array(f),c=0;c<f;c++)m[c]=arguments[c];return n.apply(t,m.concat(i))}),...i)}))}function R(){for(var e=arguments.length,o=new Array(e),u=0;u<e;u++)o[u]=arguments[u];if(o.some(n=>typeof n!="function"))throw new TypeError("pipe 参数必须是函数");return o.length===0?function(){for(var n=arguments.length,r=new Array(n),t=0;t<n;t++)r[t]=arguments[t];return r.length===1?r[0]:r}:o.reduce((n,r)=>function(){for(var t=this,a=arguments.length,i=new Array(a),s=0;s<a;s++)i[s]=arguments[s];return n.call(this,function(){for(var f=arguments.length,m=new Array(f),c=0;c<f;c++)m[c]=arguments[c];return r.apply(t,m.concat(i))},...i)})}function y(){for(var e=arguments.length,o=new Array(e),u=0;u<e;u++)o[u]=arguments[u];if(o.some(n=>typeof n!="function"))throw new TypeError("pipeAsync 参数必须是函数");return o.length===0?h(function*(){for(var n=arguments.length,r=new Array(n),t=0;t<n;t++)r[t]=arguments[t];return r.length===1?r[0]:r}):o.reduce((n,r)=>h(function*(){for(var t=this,a=arguments.length,i=new Array(a),s=0;s<a;s++)i[s]=arguments[s];return n.call(this,h(function*(){for(var f=arguments.length,m=new Array(f),c=0;c<f;c++)m[c]=arguments[c];return r.apply(t,m.concat(i))}),...i)}))}function x(e,o){let u=null;n.stop=()=>u&&clearTimeout(u);function n(){for(var r=arguments.length,t=new Array(r),a=0;a<r;a++)t[a]=arguments[a];n.stop(),u=setTimeout(()=>{e.apply(this,t)},o)}return n}function T(e,o){let u=null,n=[];r.stop=()=>{if(u){var t;(t=n.shift())===null||t===void 0||t("cancel"),clearTimeout(u)}};function r(){for(var t=arguments.length,a=new Array(t),i=0;i<t;i++)a[i]=arguments[i];return new Promise((s,f)=>{r.stop(),n.push(f),u=setTimeout(()=>{s(e.apply(this,a))},o)})}return r}function U(e){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:500,u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,n;return u?function(){if(!n){n=!0;for(var r=arguments.length,t=new Array(r),a=0;a<r;a++)t[a]=arguments[a];typeof e=="function"&&e.apply(this,t),setTimeout(()=>{n=!1},o)}}:function(){for(var r=arguments.length,t=new Array(r),a=0;a<r;a++)t[a]=arguments[a];n||(n=!0,setTimeout(()=>{n=!1,typeof e=="function"&&e.apply(this,t)},o))}}function Q(e){return encodeURIComponent(JSON.stringify(e||{}))}function b(e){return JSON.parse(decodeURIComponent(e||"{}"))}function v(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const{silent:u=!1,decodePlus:n=!0,strict:r=!1}=o,t={};if(typeof e!="string")return t;function a(c,g){let l=c;n&&(l=l.replace(/\+/g," "));try{return decodeURIComponent(l)}catch(d){return u||console.warn(`Failed to decode ${g?"key":"value"}: ${l}`,d),r?null:(g&&(l=l.replace(/%[0-9a-f]{2}/gi,"")),l)}}const i=e.split("#")[0],s=i.indexOf("?"),f=s>=0?i.slice(s+1):i;if(!f)return t;const m=f.split("&");for(let c=0;c<m.length;c++){const g=m[c];if(!g)continue;const l=g.indexOf("=");let d,P;l===-1?(d=g,P=""):(d=g.slice(0,l),P=g.slice(l+1));const p=a(d,!0);if(p===null)continue;const w=a(P,!1);if(w===null||!p)continue;const A=t[p];A===void 0?t[p]=w:Array.isArray(A)?A.push(w):t[p]=[A,w]}return t}function M(e){return typeof window>"u"?{}:v(window.location.search,e)}function O(e){if(typeof window>"u")return{};const o=window.location.hash,u=o.indexOf("?");if(u===-1)return{};const n=o.substring(u);return v(n,e)}function E(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"-";return[Date.now().toString(),Math.random().toString(16).slice(2,10),Math.random().toString(16).slice(7),e.toString()].join(o)}function j(e){return e.replace(/([^-])([^-]*)/g,function(o,u,n){return u.toLocaleUpperCase()+n.toLocaleLowerCase()}).replace(/-/g,"")}function F(e,o){e=e.split("."),o=o.split(".");const u=Math.max(e.length,o.length);for(;e.length<u;)e.push("0");for(;o.length<u;)o.push("0");for(let n=0;n<u;n++){const r=parseInt(e[n]),t=parseInt(o[n]);if(r>t)return 1;if(r<t)return-1}return 0}function $(){return"#"+Math.floor(Math.random()*16777215).toString(16).padEnd(6,"0")}function q(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:8,o=arguments.length>1?arguments[1]:void 0;e=e||32,o||(o="ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678");const u=o.length;let n="";for(let r=0;r<e;r++)n+=o.charAt(Math.floor(Math.random()*u));return n}function L(e){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(!e||typeof e!="object")return"";const u=[];Object.keys(e).forEach(r=>{const t=e[r];if(t==null)return;const a=encodeURIComponent(r);if(Array.isArray(t)){t.forEach(s=>{const f=encodeURIComponent(s);u.push(`${a}=${f}`)});return}let i=t;typeof i=="object"&&i!==null&&(i=JSON.stringify(i)),u.push(`${a}=${encodeURIComponent(i)}`)});const n=u.join("&");return o&&n?`?${n}`:n}function V(e){const o=e.scene;return o&&(e={fromCode:!0,...e,...v(o)}),e}exports._asyncToGenerator=h;exports.compareVersion=F;exports.compose=C;exports.composeAsync=I;exports.debounce=x;exports.debouncePromise=T;exports.decodeURIParams=b;exports.encodeURIParams=Q;exports.getOnLoadParams=V;exports.getPascalCase=j;exports.getQueryParams=v;exports.getQueryParamsFromHash=O;exports.getQueryParamsFromSearch=M;exports.getRandom=E;exports.getRandomStr=q;exports.pipe=R;exports.pipeAsync=y;exports.randomColor=$;exports.throttle=U;exports.toQueryString=L;
package/lib/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './aliPay';
2
2
  export * from './array';
3
+ export * from './cache';
3
4
  export * from './date';
4
5
  export * from './fs';
5
6
  export * from './getLocation';
package/lib/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("./aliPay/index.js"),a=require("./array/index.js"),s=require("./date/index.js"),o=require("./fs/index.js"),g=require("./getLocation/index.js"),r=require("./http/index.js"),e=require("./index-4975afce.js"),n=require("./object/index.js"),t=require("./pageStack/index.js"),i=require("./validate/index.js"),d=require("./index-9456b3d9.js"),P=require("./lodash");Object.assign(exports,P);exports.alipaySubmit=c.alipaySubmit;exports.exchangeArrP=a.exchangeArrP;exports.filterTree=a.filterTree;exports.findTreeItem=a.findTreeItem;exports.flatWithKey=a.flatWithKey;exports.getTreePath=a.getTreePath;exports.groupBy=a.groupBy;exports.reverseForEach=a.reverseForEach;exports.treeItemSetParent=a.treeItemSetParent;exports.dateFormat=s.dateFormat;exports.getDate=s.getDate;exports.$fs=o.$fs;exports.chooseImg=o.chooseImg;exports.getArraybufferTempPath=o.getArraybufferTempPath;exports.getImgBase64Prefix=o.getImgBase64Prefix;exports.readFile=o.readFile;exports.saveImageToPhotosAlbum=o.saveImageToPhotosAlbum;exports.writeFile=o.writeFile;exports.getLocation=g.getLocation;exports.openLocation=g.openLocation;exports.CONTENT_TYPES=r.CONTENT_TYPES;exports.CancelToken=r.CancelToken;exports.createDownloadFile=r.createDownloadFile;exports.createRequest=r.createRequest;exports.createUploadFile=r.createUploadFile;exports.endLoading=r.endLoading;exports.promisifyRequest=r.promisifyRequest;exports.startLoading=r.startLoading;exports.compareVersion=e.compareVersion;exports.compose=e.compose;exports.composeAsync=e.composeAsync;exports.debounce=e.debounce;exports.debouncePromise=e.debouncePromise;exports.decodeURIParams=e.decodeURIParams;exports.encodeURIParams=e.encodeURIParams;exports.getCache=e.getCache;exports.getOnLoadParams=e.getOnLoadParams;exports.getPascalCase=e.getPascalCase;exports.getQueryParams=e.getQueryParams;exports.getQueryParamsFromHash=e.getQueryParamsFromHash;exports.getQueryParamsFromSearch=e.getQueryParamsFromSearch;exports.getRandom=e.getRandom;exports.getRandomStr=e.getRandomStr;exports.pipe=e.pipe;exports.pipeAsync=e.pipeAsync;exports.randomColor=e.randomColor;exports.removeCache=e.removeCache;exports.renewCache=e.renewCache;exports.setCache=e.setCache;exports.throttle=e.throttle;exports.toQueryString=e.toQueryString;exports.cloneDeepWithDescriptors=n.cloneDeepWithDescriptors;exports.getRawType=n.getRawType;exports.hasOwnProperty=n.hasOwnProperty;exports.backToRoute=t.backToRoute;exports.findPageByFullPath=t.findPageByFullPath;exports.findPageByRoute=t.findPageByRoute;exports.getCurrentPage=t.getCurrentPage;exports.getCurrentPageOptions=t.getCurrentPageOptions;exports.getCurrentRoute=t.getCurrentRoute;exports.getPageStack=t.getPageStack;exports.getPageVm=t.getPageVm;exports.getPrevPage=t.getPrevPage;exports.getPrevRoute=t.getPrevRoute;exports.isExternal=i.isExternal;exports.validDate=i.validDate;exports.validIDCard=i.validIDCard;exports.validPhone=i.validPhone;exports.validPostalCode=i.validPostalCode;exports.validURL=i.validURL;exports.wx=d.index;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("./aliPay/index.js"),r=require("./array/index.js"),n=require("./cache/index.js"),g=require("./date/index.js"),o=require("./fs/index.js"),c=require("./getLocation/index.js"),a=require("./http/index.js"),e=require("./index-1b48ae95.js"),s=require("./object/index.js"),t=require("./pageStack/index.js"),i=require("./validate/index.js"),l=require("./index-9456b3d9.js"),P=require("./lodash");Object.assign(exports,P);exports.alipaySubmit=d.alipaySubmit;exports.exchangeArrP=r.exchangeArrP;exports.filterTree=r.filterTree;exports.findTreeItem=r.findTreeItem;exports.flatWithKey=r.flatWithKey;exports.getTreePath=r.getTreePath;exports.groupBy=r.groupBy;exports.reverseForEach=r.reverseForEach;exports.treeItemSetParent=r.treeItemSetParent;exports.StorageCache=n.StorageCache;exports.localCache=n.localCache;exports.sessionCache=n.sessionCache;exports.dateFormat=g.dateFormat;exports.getDate=g.getDate;exports.$fs=o.$fs;exports.chooseImg=o.chooseImg;exports.getArraybufferTempPath=o.getArraybufferTempPath;exports.getImgBase64Prefix=o.getImgBase64Prefix;exports.readFile=o.readFile;exports.saveImageToPhotosAlbum=o.saveImageToPhotosAlbum;exports.writeFile=o.writeFile;exports.getLocation=c.getLocation;exports.openLocation=c.openLocation;exports.CONTENT_TYPES=a.CONTENT_TYPES;exports.CancelToken=a.CancelToken;exports.createDownloadFile=a.createDownloadFile;exports.createRequest=a.createRequest;exports.createUploadFile=a.createUploadFile;exports.endLoading=a.endLoading;exports.hideLoading=a.hideLoading;exports.promisifyRequest=a.promisifyRequest;exports.showLoading=a.showLoading;exports.startLoading=a.startLoading;exports.compareVersion=e.compareVersion;exports.compose=e.compose;exports.composeAsync=e.composeAsync;exports.debounce=e.debounce;exports.debouncePromise=e.debouncePromise;exports.decodeURIParams=e.decodeURIParams;exports.encodeURIParams=e.encodeURIParams;exports.getOnLoadParams=e.getOnLoadParams;exports.getPascalCase=e.getPascalCase;exports.getQueryParams=e.getQueryParams;exports.getQueryParamsFromHash=e.getQueryParamsFromHash;exports.getQueryParamsFromSearch=e.getQueryParamsFromSearch;exports.getRandom=e.getRandom;exports.getRandomStr=e.getRandomStr;exports.pipe=e.pipe;exports.pipeAsync=e.pipeAsync;exports.randomColor=e.randomColor;exports.throttle=e.throttle;exports.toQueryString=e.toQueryString;exports.cloneDeepWithDescriptors=s.cloneDeepWithDescriptors;exports.getRawType=s.getRawType;exports.hasOwnProperty=s.hasOwnProperty;exports.backToRoute=t.backToRoute;exports.findPageByFullPath=t.findPageByFullPath;exports.findPageByRoute=t.findPageByRoute;exports.getCurrentPage=t.getCurrentPage;exports.getCurrentPageOptions=t.getCurrentPageOptions;exports.getCurrentRoute=t.getCurrentRoute;exports.getPageStack=t.getPageStack;exports.getPageVm=t.getPageVm;exports.getPrevPage=t.getPrevPage;exports.getPrevRoute=t.getPrevRoute;exports.isExternal=i.isExternal;exports.validDate=i.validDate;exports.validIDCard=i.validIDCard;exports.validPhone=i.validPhone;exports.validPostalCode=i.validPostalCode;exports.validURL=i.validURL;exports.wx=l.index;
@@ -180,32 +180,3 @@ export declare function toQueryString(
180
180
  */
181
181
  export function getOnLoadParams<T extends Record<string, any>>(e: T & { scene?: string }): T & { fromCode?: boolean } & Record<string, any>;
182
182
 
183
- /**
184
- * 设置uni‑app本地缓存,支持过期时间控制
185
- * @param key 缓存存储键名
186
- * @param data 需要存储的数据,可以为任意可序列化类型
187
- * @param expire 过期时长,单位:秒;<=0代表永不过期;非法数字自动降级永不过期;默认 3600(1小时)
188
- * @returns true写入成功;false写入发生异常失败
189
- */
190
- export function setCache(key: string, data: any, expire?: number): boolean;
191
-
192
- /**
193
- * 读取本地缓存;自动判断过期,过期自动删除并返回null
194
- * @param key 缓存存储键名
195
- * @returns 缓存有效返回存储data;缓存不存在/结构异常/已过期返回null
196
- */
197
- export function getCache(key: string): any | null;
198
-
199
- /**
200
- * 缓存续期,重置过期计时;永不过期缓存不会写入存储,直接返回true
201
- * @param key 缓存存储键名
202
- * @returns true:缓存有效;false:缓存不存在/结构损坏/已经过期
203
- */
204
- export function renewCache(key: string): boolean;
205
-
206
- /**
207
- * 删除指定key本地缓存
208
- * @param key 缓存存储键名
209
- * @returns true删除成功;false删除异常失败
210
- */
211
- export function removeCache(key: string): boolean;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../index-4975afce.js");exports.compareVersion=e.compareVersion;exports.compose=e.compose;exports.composeAsync=e.composeAsync;exports.debounce=e.debounce;exports.debouncePromise=e.debouncePromise;exports.decodeURIParams=e.decodeURIParams;exports.encodeURIParams=e.encodeURIParams;exports.getCache=e.getCache;exports.getOnLoadParams=e.getOnLoadParams;exports.getPascalCase=e.getPascalCase;exports.getQueryParams=e.getQueryParams;exports.getQueryParamsFromHash=e.getQueryParamsFromHash;exports.getQueryParamsFromSearch=e.getQueryParamsFromSearch;exports.getRandom=e.getRandom;exports.getRandomStr=e.getRandomStr;exports.pipe=e.pipe;exports.pipeAsync=e.pipeAsync;exports.randomColor=e.randomColor;exports.removeCache=e.removeCache;exports.renewCache=e.renewCache;exports.setCache=e.setCache;exports.throttle=e.throttle;exports.toQueryString=e.toQueryString;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../index-1b48ae95.js");exports.compareVersion=e.compareVersion;exports.compose=e.compose;exports.composeAsync=e.composeAsync;exports.debounce=e.debounce;exports.debouncePromise=e.debouncePromise;exports.decodeURIParams=e.decodeURIParams;exports.encodeURIParams=e.encodeURIParams;exports.getOnLoadParams=e.getOnLoadParams;exports.getPascalCase=e.getPascalCase;exports.getQueryParams=e.getQueryParams;exports.getQueryParamsFromHash=e.getQueryParamsFromHash;exports.getQueryParamsFromSearch=e.getQueryParamsFromSearch;exports.getRandom=e.getRandom;exports.getRandomStr=e.getRandomStr;exports.pipe=e.pipe;exports.pipeAsync=e.pipeAsync;exports.randomColor=e.randomColor;exports.throttle=e.throttle;exports.toQueryString=e.toQueryString;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const P=require("../index-4975afce.js");function c(t){if(!t)return null;let n=null,e=null;try{const{route:u,options:r}=t;if(u){const l=P.toQueryString(r??{});n=l?`${u}?${l}`:u,e=`/${n}`}}catch{n=null,e=null}return{...t,fullPath:n,navUrl:e}}function i(){try{const t=getCurrentPages();return t.length?c(t[t.length-1]):null}catch{return null}}function o(){try{const t=getCurrentPages();return t.length<2?null:c(t[t.length-2])}catch{return null}}function a(){try{return getCurrentPages().map(t=>c(t)).filter(Boolean)}catch{return[]}}function d(){try{var t;const n=i();return(t=n==null?void 0:n.route)!==null&&t!==void 0?t:null}catch{return null}}function h(){try{var t;const n=i();return(t=n==null?void 0:n.options)!==null&&t!==void 0?t:null}catch{return null}}function y(){try{var t;const n=o();return(t=n==null?void 0:n.route)!==null&&t!==void 0?t:null}catch{return null}}function g(t){return typeof t!="string"?"":t.replace(/^\/+/,"")}function v(t){try{var n;const e=a(),u=g(t);return u&&(n=e.find(r=>r.route===u))!==null&&n!==void 0?n:null}catch{return null}}function R(t){try{var n;const e=a();return t&&(n=e.find(u=>u.fullPath===t))!==null&&n!==void 0?n:null}catch{return null}}function m(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return new Promise(e=>{try{const u=a(),r=g(t);if(!r){e(!1);return}const l=u.findIndex(s=>s.route===r);if(l===u.length-1){e(!0);return}if(l===-1){n?uni.reLaunch({url:`/${r}`,success:()=>e(!1),fail:()=>e(!1)}):e(!1);return}const f=u.length-1-l;uni.navigateBack({delta:f,success:()=>e(!0),fail:()=>e(!1)})}catch{e(!1)}})}function C(t){try{var n;return t&&(n=t.$vm)!==null&&n!==void 0?n:null}catch{return null}}exports.backToRoute=m;exports.findPageByFullPath=R;exports.findPageByRoute=v;exports.getCurrentPage=i;exports.getCurrentPageOptions=h;exports.getCurrentRoute=d;exports.getPageStack=a;exports.getPageVm=C;exports.getPrevPage=o;exports.getPrevRoute=y;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const P=require("../index-1b48ae95.js");function c(t){if(!t)return null;let n=null,e=null;try{const{route:u,options:r}=t;if(u){const l=P.toQueryString(r??{});n=l?`${u}?${l}`:u,e=`/${n}`}}catch{n=null,e=null}return{...t,fullPath:n,navUrl:e}}function i(){try{const t=getCurrentPages();return t.length?c(t[t.length-1]):null}catch{return null}}function o(){try{const t=getCurrentPages();return t.length<2?null:c(t[t.length-2])}catch{return null}}function a(){try{return getCurrentPages().map(t=>c(t)).filter(Boolean)}catch{return[]}}function d(){try{var t;const n=i();return(t=n==null?void 0:n.route)!==null&&t!==void 0?t:null}catch{return null}}function h(){try{var t;const n=i();return(t=n==null?void 0:n.options)!==null&&t!==void 0?t:null}catch{return null}}function y(){try{var t;const n=o();return(t=n==null?void 0:n.route)!==null&&t!==void 0?t:null}catch{return null}}function g(t){return typeof t!="string"?"":t.replace(/^\/+/,"")}function v(t){try{var n;const e=a(),u=g(t);return u&&(n=e.find(r=>r.route===u))!==null&&n!==void 0?n:null}catch{return null}}function R(t){try{var n;const e=a();return t&&(n=e.find(u=>u.fullPath===t))!==null&&n!==void 0?n:null}catch{return null}}function m(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return new Promise(e=>{try{const u=a(),r=g(t);if(!r){e(!1);return}const l=u.findIndex(s=>s.route===r);if(l===u.length-1){e(!0);return}if(l===-1){n?uni.reLaunch({url:`/${r}`,success:()=>e(!1),fail:()=>e(!1)}):e(!1);return}const f=u.length-1-l;uni.navigateBack({delta:f,success:()=>e(!0),fail:()=>e(!1)})}catch{e(!1)}})}function C(t){try{var n;return t&&(n=t.$vm)!==null&&n!==void 0?n:null}catch{return null}}exports.backToRoute=m;exports.findPageByFullPath=R;exports.findPageByRoute=v;exports.getCurrentPage=i;exports.getCurrentPageOptions=h;exports.getCurrentRoute=d;exports.getPageStack=a;exports.getPageVm=C;exports.getPrevPage=o;exports.getPrevRoute=y;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "utils-uniapp",
3
- "version": "1.1.7",
3
+ "version": "1.1.9",
4
4
  "description": "aubyn's utils for uniapp",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -1 +0,0 @@
1
- "use strict";function C(n,e,u,t,o,r,a){try{var i=n[r](a),c=i.value}catch(f){return void u(f)}i.done?e(c):Promise.resolve(c).then(t,o)}function h(n){return function(){var e=this,u=arguments;return new Promise(function(t,o){var r=n.apply(e,u);function a(c){C(r,t,o,a,i,"next",c)}function i(c){C(r,t,o,a,i,"throw",c)}a(void 0)})}}function y(){for(var n=arguments.length,e=new Array(n),u=0;u<n;u++)e[u]=arguments[u];if(e.some(t=>typeof t!="function"))throw new TypeError("compose 参数必须是函数");return e.length===0?function(){for(var t=arguments.length,o=new Array(t),r=0;r<t;r++)o[r]=arguments[r];return o.length===1?o[0]:o}:e.reduce((t,o)=>function(){for(var r=this,a=arguments.length,i=new Array(a),c=0;c<a;c++)i[c]=arguments[c];return o.call(this,function(){for(var f=arguments.length,l=new Array(f),s=0;s<f;s++)l[s]=arguments[s];return t.apply(r,l.concat(i))},...i)})}function x(){for(var n=arguments.length,e=new Array(n),u=0;u<n;u++)e[u]=arguments[u];if(e.some(t=>typeof t!="function"))throw new TypeError("composeAsync 参数必须是函数");return e.length===0?h(function*(){for(var t=arguments.length,o=new Array(t),r=0;r<t;r++)o[r]=arguments[r];return o.length===1?o[0]:o}):e.reduce((t,o)=>h(function*(){for(var r=this,a=arguments.length,i=new Array(a),c=0;c<a;c++)i[c]=arguments[c];return o.call(this,h(function*(){for(var f=arguments.length,l=new Array(f),s=0;s<f;s++)l[s]=arguments[s];return t.apply(r,l.concat(i))}),...i)}))}function P(){for(var n=arguments.length,e=new Array(n),u=0;u<n;u++)e[u]=arguments[u];if(e.some(t=>typeof t!="function"))throw new TypeError("pipe 参数必须是函数");return e.length===0?function(){for(var t=arguments.length,o=new Array(t),r=0;r<t;r++)o[r]=arguments[r];return o.length===1?o[0]:o}:e.reduce((t,o)=>function(){for(var r=this,a=arguments.length,i=new Array(a),c=0;c<a;c++)i[c]=arguments[c];return t.call(this,function(){for(var f=arguments.length,l=new Array(f),s=0;s<f;s++)l[s]=arguments[s];return o.apply(r,l.concat(i))},...i)})}function I(){for(var n=arguments.length,e=new Array(n),u=0;u<n;u++)e[u]=arguments[u];if(e.some(t=>typeof t!="function"))throw new TypeError("pipeAsync 参数必须是函数");return e.length===0?h(function*(){for(var t=arguments.length,o=new Array(t),r=0;r<t;r++)o[r]=arguments[r];return o.length===1?o[0]:o}):e.reduce((t,o)=>h(function*(){for(var r=this,a=arguments.length,i=new Array(a),c=0;c<a;c++)i[c]=arguments[c];return t.call(this,h(function*(){for(var f=arguments.length,l=new Array(f),s=0;s<f;s++)l[s]=arguments[s];return o.apply(r,l.concat(i))}),...i)}))}function R(n,e){let u=null;t.stop=()=>u&&clearTimeout(u);function t(){for(var o=arguments.length,r=new Array(o),a=0;a<o;a++)r[a]=arguments[a];t.stop(),u=setTimeout(()=>{n.apply(this,r)},e)}return t}function b(n,e){let u=null,t=[];o.stop=()=>{if(u){var r;(r=t.shift())===null||r===void 0||r("cancel"),clearTimeout(u)}};function o(){for(var r=arguments.length,a=new Array(r),i=0;i<r;i++)a[i]=arguments[i];return new Promise((c,f)=>{o.stop(),t.push(f),u=setTimeout(()=>{c(n.apply(this,a))},e)})}return o}function T(n){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:500,u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,t;return u?function(){if(!t){t=!0;for(var o=arguments.length,r=new Array(o),a=0;a<o;a++)r[a]=arguments[a];typeof n=="function"&&n.apply(this,r),setTimeout(()=>{t=!1},e)}}:function(){for(var o=arguments.length,r=new Array(o),a=0;a<o;a++)r[a]=arguments[a];t||(t=!0,setTimeout(()=>{t=!1,typeof n=="function"&&n.apply(this,r)},e))}}function U(n){return encodeURIComponent(JSON.stringify(n||{}))}function E(n){return JSON.parse(decodeURIComponent(n||"{}"))}function A(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const{silent:u=!1,decodePlus:t=!0,strict:o=!1}=e,r={};if(typeof n!="string")return r;function a(s,g){let m=s;t&&(m=m.replace(/\+/g," "));try{return decodeURIComponent(m)}catch(d){return u||console.warn(`Failed to decode ${g?"key":"value"}: ${m}`,d),o?null:(g&&(m=m.replace(/%[0-9a-f]{2}/gi,"")),m)}}const i=n.split("#")[0],c=i.indexOf("?"),f=c>=0?i.slice(c+1):i;if(!f)return r;const l=f.split("&");for(let s=0;s<l.length;s++){const g=l[s];if(!g)continue;const m=g.indexOf("=");let d,S;m===-1?(d=g,S=""):(d=g.slice(0,m),S=g.slice(m+1));const p=a(d,!0);if(p===null)continue;const w=a(S,!1);if(w===null||!p)continue;const v=r[p];v===void 0?r[p]=w:Array.isArray(v)?v.push(w):r[p]=[v,w]}return r}function M(n){return typeof window>"u"?{}:A(window.location.search,n)}function Q(n){if(typeof window>"u")return{};const e=window.location.hash,u=e.indexOf("?");if(u===-1)return{};const t=e.substring(u);return A(t,n)}function $(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"-";return[Date.now().toString(),Math.random().toString(16).slice(2,10),Math.random().toString(16).slice(7),n.toString()].join(e)}function O(n){return n.replace(/([^-])([^-]*)/g,function(e,u,t){return u.toLocaleUpperCase()+t.toLocaleLowerCase()}).replace(/-/g,"")}function j(n,e){n=n.split("."),e=e.split(".");const u=Math.max(n.length,e.length);for(;n.length<u;)n.push("0");for(;e.length<u;)e.push("0");for(let t=0;t<u;t++){const o=parseInt(n[t]),r=parseInt(e[t]);if(o>r)return 1;if(o<r)return-1}return 0}function F(){return"#"+Math.floor(Math.random()*16777215).toString(16).padEnd(6,"0")}function D(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:8,e=arguments.length>1?arguments[1]:void 0;n=n||32,e||(e="ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678");const u=e.length;let t="";for(let o=0;o<n;o++)t+=e.charAt(Math.floor(Math.random()*u));return t}function N(n){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(!n||typeof n!="object")return"";const u=[];Object.keys(n).forEach(o=>{const r=n[o];if(r==null)return;const a=encodeURIComponent(o);if(Array.isArray(r)){r.forEach(c=>{const f=encodeURIComponent(c);u.push(`${a}=${f}`)});return}let i=r;typeof i=="object"&&i!==null&&(i=JSON.stringify(i)),u.push(`${a}=${encodeURIComponent(i)}`)});const t=u.join("&");return e&&t?`?${t}`:t}function q(n){const e=n.scene;return e&&(n={fromCode:!0,...n,...A(e)}),n}function L(n,e){let u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:3600;try{let t=Number(u);Number.isFinite(t)||(t=0);const o=t>0?Math.round(t)*1e3:t;return uni.setStorageSync(n,{time:Date.now(),expire:o,data:e}),!0}catch(t){return console.error(`设置缓存[${n}]失败:`,t),!1}}function V(n){try{const e=uni.getStorageSync(n);return!e||typeof e!="object"||Array.isArray(e)||!("time"in e)||!("expire"in e)?(e&&uni.removeStorageSync(n),null):e.expire>0&&Date.now()-e.time>=e.expire?(uni.removeStorageSync(n),null):e.data}catch(e){return console.error(`获取缓存[${n}]失败:`,e),null}}function G(n){try{const e=uni.getStorageSync(n);if(!e||typeof e!="object"||Array.isArray(e)||!("time"in e)||!("expire"in e))return!1;if(e.expire>0){if(Date.now()-e.time>=e.expire)return uni.removeStorageSync(n),!1;e.time=Date.now(),uni.setStorageSync(n,e)}return!0}catch(e){return console.error(`续期缓存[${n}]失败:`,e),!1}}function H(n){try{return uni.removeStorageSync(n),!0}catch(e){return console.error(`删除缓存[${n}]失败:`,e),!1}}exports._asyncToGenerator=h;exports.compareVersion=j;exports.compose=y;exports.composeAsync=x;exports.debounce=R;exports.debouncePromise=b;exports.decodeURIParams=E;exports.encodeURIParams=U;exports.getCache=V;exports.getOnLoadParams=q;exports.getPascalCase=O;exports.getQueryParams=A;exports.getQueryParamsFromHash=Q;exports.getQueryParamsFromSearch=M;exports.getRandom=$;exports.getRandomStr=D;exports.pipe=P;exports.pipeAsync=I;exports.randomColor=F;exports.removeCache=H;exports.renewCache=G;exports.setCache=L;exports.throttle=T;exports.toQueryString=N;