s94-utils 0.0.4 → 0.0.5
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/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +185 -183
- package/dist/index.mjs.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/package.json +36 -36
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function I(t){return t&&typeof t=="object"&&typeof t.then=="function"}class U{constructor(e,r){return this.list=[],this.running=0,this.limit=1,this.status=0,this.limit=e||1,r&&this.start(),this}__run(){for(;this.status===1&&this.running<this.limit;){let e=this.list.shift();if(!e)break;let{callback:r,thisArg:i}=e,n=r.call(i);I(n)&&(this.running++,n.then(()=>{this.running--,this.__run()}))}return this}add(e,r){return typeof e!="function"?this:(this.list.push({callback:e,thisArg:r}),this.__run())}start(){return this.status=1,this.__run()}stop(){this.status=0}}class v{constructor(e){if(typeof e!="object"||typeof e.getItem!="function"||typeof e.setItem!="function")throw new Error("缓存引擎必须为对象,并且包含方法:getItem、setItem");this.Storage=e}get(e,r){const i="s94_cache-"+w(e),n=this.Storage.getItem(i);function c(f,o){try{var s=JSON.parse(f);return!s||typeof s!="object"||s.expire!==-1&&s.expire<new Date().getTime()?o:s.main}catch{return o}}return typeof n=="string"?c(n,r):n.then(f=>c(f,r))}set(e,r,i){i=i&&i>0?Number(i):-1;let n=i===-1?-1:new Date().getTime()+i;const c="s94_cache-"+w(e),f=JSON.stringify({main:r,expire:n,name:e});return Promise.resolve(this.Storage.setItem(c,f))}remove(e){const r="s94_cache-"+w(e);return typeof this.Storage.removeItem=="function"?Promise.resolve(this.Storage.removeItem(r)):Promise.resolve(this.Storage.getItem(r)).then(i=>{if(i){const n=JSON.stringify({main:"",expire:1,name:e});return this.Storage.setItem(r,n)}return i})}clear(){if(typeof this.Storage.clear=="function")return Promise.resolve(this.Storage.clear())}}function T(t){const e=Object.prototype.toString.call(t);return e.substring(8,e.length-1)}function d(t){if(typeof t=="string")return t;try{return t.toString()}catch{return""}}function b(t,e){if(t=d(t),!t)return"";if(typeof t.trim=="function"&&!e)return t.trim();e=d(e),e&&(e=e.replace(/([\$\(\)\*\+\?\.\[\]\\\^\{\}\|]){1}/g,"\\$1"));let r=`^[\\s\\uFEFF\\xA0${e}]+|[\\s\\uFEFF\\xA0${e}]+$`;return t.replace(new RegExp(r,"g"),"")}function O(t,e){if(!e||t.indexOf("/")===0)return t;e=d(e);var r=e.split(/\\|\//);r.pop();for(var i=0,n=t.split(/\\|\//);i<n.length;i++)switch(n[i]){case".":break;case"..":r.pop();break;default:r.push(n[i]);break}return r.join(~e.indexOf("\\")?"\\":"/")}function x(t,e,r){let i=Object.keys(t),n=0;const c=typeof e=="function"?{each:e}:e;if(typeof c.each!="function")throw"参数错误,缺少遍历回调函数(each)";let f=c.limit||1,o=!1,s,h=[];async function u(){for(;n<i.length&&!o&&!s;){let l=i[n++],a=t[l];try{let p=await c.each.call(r||a,a,l,t,[l]);o=o||p===!1}catch(p){s=p}}}for(let l=0;l<f;l++)h.push(u());return Promise.all(h).then(()=>{if(typeof c.over=="function"&&c.over(),s)throw s})}function S(t,e,r,i,n){function c(f,o){let s=[],h=!0;for(const u in f){if(!f.hasOwnProperty(u))continue;let l=f[u];if(h=r.call(n||l,l,u,f,o.concat(u)),h&&l&&typeof l=="object"){let a=e?l[e]:l;a&&typeof a=="object"&&(i?s.push({child:a,ks:o.concat(u)}):h=c(a,o.concat(u)))}if(h===!1)break}for(let u=0;u<s.length;u++){let l=s[u];if(h=c(l.child,l.ks),h===!1)break}return h}c(t,[])}function D(t){let e={};return!t||typeof t!="string"||t.split("&").forEach(function(r){let i=r.split("=");if(!i[0])return;let n=decodeURIComponent(i[1]||""),c=decodeURIComponent(i[0]).split("]"),f=[];for(let s=0;s<c.length;s++){let h=c[s];if(s===0){let u=h.match(/^([^\[]+)(\[[\s\S.]*)?$/);u&&(f.push(u[1]),u[2]&&f.push(u[2].substring(1)))}else if(h)f.push(h.substring(1));else break}let o=e;f.forEach(function(s,h){if(s=s||(function(){var u=-1;return Object.keys(o).forEach(function(l){let a=Number(l);/^\d+$/.test(l)&&a>u&&(u=a)}),String(u+1)})(),h==f.length-1)o[s]=n;else{let u=f[h+1]==""||/^\d+$/.test(f[h+1]);o[s]=typeof o[s]<"u"?o[s]:u?[]:{},o=o[s]}})}),e}function E(t){if(!t)return"";if(typeof t=="string")return t;let e=[];if(t instanceof FormData)for(let r of t.entries())e.push(encodeURIComponent(r[0])+"="+encodeURIComponent(String(r[1])));else S(t,"",function(r,i,n,c){if(typeof r!="object"){let f=c.map((o,s)=>s>0?"["+encodeURIComponent(o)+"]":encodeURIComponent(o)).join("");e.push(f+"="+encodeURIComponent(r))}return!0});return e.join("&")}function w(t,e=64){if(!t)return"";let r="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-";e=e&&e>1&&e<=64?Number(e):64;let i=JSON.stringify(t).replace(/\"/g,""),n="",c=0;for(let f=0;f<e;f++){for(let o=f;o<i.length;o+=e)c+=i.charCodeAt(o);n+=r[c%e],c=Math.floor(c/e)}return n}function j(t,e,r){if(typeof e=="object"&&e){(t===null||typeof t!="object")&&(t={});for(const i in e){let n=i.split("."),c=n.pop();if(!c)continue;let f=e[i],o=t;n.forEach(function(s,h){(o[s]===null||typeof o[s]!="object")&&(o[s]={}),o=o[s]}),o[c]=f}return t}else{let i=e?d(e).split("."):[],n=t;for(let c=0;c<i.length;c++){let f=i[c];if(n===null||typeof n>"u")return r;n=n[f]}return n===null||typeof n>"u"?r:n}}function F(t,e="",r){function i(o,s,h){let u=o.match(/\d+/g)||[],l=[];if(s)s=s.replace(/\\[ymdhis]/ig,""),l=s.match(/[ymdhis]/ig)||[];else{let g=u.findIndex(m=>Number(m)>1e3);if(g===0)l=["y","m","d","h","i","s"];else if(g===2)l=["d","m","y","h","i","s"];else throw new Error("日期异常")}let a={};l.forEach((g,m)=>{a[g.toLowerCase()]=Number(u[m]||0)});let p=new Date,y={y:"setUTCFullYear",m:"setUTCMonth",d:"setUTCDate",h:"setUTCHours",i:"setUTCMinutes",s:"setUTCSeconds"};return Object.keys(y).forEach(g=>{a[g]=a[g]||0,g==="m"&&a[g]===0&&(a[g]=1);let m=y[g];p[m](g==="m"?a[g]-1:a[g])}),a.w=p.getUTCDay(),a.timestamp=p.getTime()-h,a}function n(o,s,h){const u=new Date(o+h);function l(y){return y<10?"0"+y:y}let a={y:u.getUTCFullYear(),m:u.getUTCMonth()+1,d:u.getUTCDate(),h:u.getUTCHours(),i:u.getUTCMinutes(),s:u.getUTCSeconds(),w:u.getUTCDay(),string:""},p={...a,W:["日","一","二","三","四","五","六"][a.w],w:["7","1","2","3","4","5","6"][a.w]};return p.Y=p.y,p.M=l(p.m),p.D=l(p.d),p.H=l(p.h),p.I=l(p.i),p.S=l(p.s),a.string=s.replace(/(^|[^\\])([YMDHISWymdhisw]+)/g,function(y,g,m){let C=g;for(let N=0;N<m.length;N++)C+=p[m[N]];return C}).replace(/\\([YMDHISWymdhisw])/g,"$1"),a}r=Number(r),isNaN(r)&&(r=-new Date().getTimezoneOffset()/60);const c=r*3600*1e3,f={timestamp:NaN,y:NaN,m:NaN,d:NaN,h:NaN,i:NaN,s:NaN,w:NaN,string:"",zone:r};if(t instanceof Date){let o=t.getTime();Object.assign(f,n(o,e,c)),f.timestamp=o}else typeof t=="number"?(Object.assign(f,n(t,e,c)),f.timestamp=t):typeof t=="string"&&(Object.assign(f,i(t,e,c)),f.string=t);return f}const _={__event_list:{},on(t,e,r){if(!t||typeof t!="string"||typeof e!="function")return;let i=_.__event_list[t]||[];r?i.unshift(e):i.push(e),_.__event_list[t]=i},off(t,e){if(!(!t||typeof t!="string"))if(typeof e=="function"){let r=_.__event_list[t]||[],i=r.indexOf(e);i!==-1&&r.splice(i,1),_.__event_list[t]=r}else typeof e>"u"&&(_.__event_list[t]=[])},emit(t,e,r){if(!t||typeof t!="string")return;let i=_.__event_list[t]||[];for(let n=0;n<i.length&&i[n].call(r,e)!==!1;n++);}};exports.Cache=v;exports.Queue=U;exports.date=F;exports.each=x;exports.eachloop=S;exports.encode=w;exports.event_manage=_;exports.map=j;exports.param_decode=D;exports.param_encode=E;exports.path=O;exports.to_string=d;exports.trim=b;exports.var_type=T;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["function isPromise(obj:any){\n return obj && typeof obj == 'object' && typeof obj.then == 'function';\n}\n\nclass Queue{\n list = [] as {callback:()=>any, thisArg:any}[];\n running = 0;\n limit = 1;\n status = 0; // 0,停止,1开始\n\n /**\n * 构建队列\n * @param {number} [limit] 同时执行的槽位数量限制,默认为:1\n * @param {boolean} [start] 构建好后,是否直接开始队列\n * @returns {Queue}\n */\n constructor(limit?:number, start?:boolean) {\n this.limit = limit || 1;\n\n if (start) this.start()\n return this;\n }\n __run(){\n while (this.status===1 && this.running < this.limit){\n let row = this.list.shift();\n if (!row) break;\n let {callback, thisArg} = row;\n let res = callback.call(thisArg);\n\n if (isPromise(res)){\n this.running++;\n res.then(()=>{\n this.running--;\n this.__run();\n })\n }\n }\n return this;\n }\n\n /**\n * 插入执行\n * @param {function} callback 回调函数,如果返回 Promise ,会占用执行槽位直到 Promise 兑现\n * @param {any} thisArg 执行时的this对象\n * @returns {Queue}\n */\n add(callback:()=>any, thisArg:any){\n if(typeof(callback)!=='function') return this;\n this.list.push({callback, thisArg});\n return this.__run();\n }\n start(){\n this.status = 1;\n return this.__run();\n }\n stop(){\n this.status = 0;\n }\n}\n\ntype TypeCacheEngine = {\n getItem:(name:string)=>string|Promise<string>,\n setItem:(name:string, data:string)=>Promise<any>,\n removeItem?:(name:string)=>Promise<any>,\n clear?:()=>any\n}\n\nclass Cache{\n Storage:TypeCacheEngine;\n /**\n * 构建缓存器,传入缓存引擎对象,\n * @param { {getItem:(name:string)=>string|Promise<string>, setItem:(name:string, data:any)=>Promise<any>, removeItem?:(name:string)=>Promise<any>, clear?:()=>any } } engine\n */\n constructor(engine:TypeCacheEngine) {\n if (typeof(engine)!=\"object\" || typeof(engine.getItem)!='function' || typeof(engine.setItem)!='function'){\n throw new Error('缓存引擎必须为对象,并且包含方法:getItem、setItem');\n }\n this.Storage = engine;\n }\n\n /**\n * 获取缓存\n * @param {any} name 缓存名\n * @param {any} def 默认值\n * @returns {any | Promise<any>} 由引擎的 getItem 确定是否返回 Promise\n */\n get(name:any, def?:any){\n const cache_name = 's94_cache-'+encode(name);\n const str = this.Storage.getItem(cache_name);\n function _get(str:string, def:any){\n try {\n var data = JSON.parse(str);\n if(!data || typeof(data)!=='object') return def;\n if( data['expire'] !== -1 && data['expire'] < (new Date).getTime() ) return def;\n return data['main'];\n } catch (error) {\n return def;\n }\n }\n if (typeof str === 'string'){\n return _get(str, def);\n }else {\n return str.then(v=>_get(v, def))\n }\n }\n /**\n * 设定缓存\n * @param {any} name 缓存名称\n * @param {any} value 缓存值\n * @param {number} timeout 过期时间(毫秒),默认或者小于0,表示永久\n * @returns {Promise<any>}\n */\n set(name:any, value:any, timeout?:number){\n timeout = timeout && timeout>0 ? Number(timeout) : -1;\n let expire = timeout === -1 ? -1 : (new Date).getTime() + timeout;\n\n const cache_name = 's94_cache-'+encode(name);\n const data = JSON.stringify({main:value, expire, name});\n return Promise.resolve(this.Storage.setItem(cache_name, data));\n }\n\n /**\n * 移除缓存\n * @param {string} name\n * @returns {Promise<any>}\n */\n remove(name:any){\n const cache_name = 's94_cache-'+encode(name);\n if(typeof(this.Storage.removeItem) === 'function') {\n return Promise.resolve( this.Storage.removeItem(cache_name) );\n }else {\n return Promise.resolve( this.Storage.getItem(cache_name) ).then((res)=>{\n if (res) {\n // 如果有缓存数据,就设定一个保证过期的数据替换\n const data = JSON.stringify({main:'', expire:1, name});\n return this.Storage.setItem(cache_name, data);\n }\n return res\n })\n }\n }\n\n /**\n * 清理缓存,如果引擎存在 clear 方法,\n * @returns {Promise<any>}\n */\n clear(){\n if (typeof(this.Storage.clear) === 'function'){\n return Promise.resolve( this.Storage.clear() );\n }\n }\n}\n\n\n/**\n * 返回参数的类型,例如 Object,Date\n * @param {any} obj\n * @returns {string}\n */\nfunction var_type(obj:any){\n const str = Object.prototype.toString.call(obj);\n return str.substring(8,str.length-1);\n}\n/**\n * 转字符串\n * @param {any} val\n * @returns {string}\n */\nfunction to_string(val:any):string{\n if (typeof val === 'string') return val;\n try {\n return val.toString();\n } catch (e) {\n return '';\n }\n}\n/**\n * 去除字符串两边的空白\n * @param {string} str\n * @param {string} [mask] 额外需要去除的字符串\n * @returns {string}\n */\nfunction trim(str:string, mask?:string) {\n str = to_string(str)\n if (!str) return \"\";\n if (typeof str.trim === 'function' && !mask) {\n return str.trim();\n }\n mask = to_string(mask)\n if (mask) mask = mask.replace(/([\\$\\(\\)\\*\\+\\?\\.\\[\\]\\\\\\^\\{\\}\\|]){1}/g, '\\\\$1');\n let reg_code = `^[\\\\s\\\\uFEFF\\\\xA0${mask}]+|[\\\\s\\\\uFEFF\\\\xA0${mask}]+$`\n return str.replace(new RegExp(reg_code, 'g'), '');\n}\n/**\n * 计算相对路径\n * @param {string} path\n * @param {string} base\n * @returns {*|string}\n */\nfunction path(path:string, base:string){\n if (!base || path.indexOf('/')===0) return path;\n base = to_string(base);\n var base_arr = base.split(/\\\\|\\//);\n base_arr.pop();\n for (var i=0,path_arr = path.split(/\\\\|\\//); i<path_arr.length; i++) {\n switch (path_arr[i]){\n case '.':break;\n case '..':base_arr.pop();break;\n default:base_arr.push(path_arr[i]);break;\n }\n }\n return base_arr.join(~base.indexOf('\\\\') ? '\\\\' : '/');\n}\n\n\ntype TypeEachCallback = (v:any, k:string, obj:Object, ks:string[])=>any\ntype TypeEachOption = {\n each: TypeEachCallback,\n over?: ()=>any,\n limit?: number\n}\n/**\n * 遍历对象\n * @param {Object} obj\n * @param { TypeEachOption | (v:any, k:string, obj:Object)=>any } op 遍历回调函数 或者 包含遍历回调的配置\n * @param {any} [thisArg] 回调函数的this对象\n */\nfunction each(obj:Object, op:TypeEachOption|TypeEachCallback, thisArg?:any) {\n let ks = Object.keys(obj), index=0;\n const option = typeof op == 'function' ? {each: op} : op;\n if (typeof option.each != 'function') throw '参数错误,缺少遍历回调函数(each)';\n option.over = typeof option.over == 'function' ? option.over : function (){}\n let runing = 0, limit = option.limit || 1, is_break = false;\n\n function __run(){\n while (runing < limit && index < ks.length && !is_break){\n // @ts-ignore\n let k = ks[index++], v = obj[k];\n let res = option.each.call( (thisArg || v), v, k, obj, [k]);\n if (res === false) {\n if(option.over) option.over()\n is_break=true;\n }else if (isPromise(res)){\n runing++;\n res.then(()=>{\n runing--;\n __run();\n }).catch(()=>{\n if(option.over) option.over();\n is_break=true;\n })\n }\n }\n if (!is_break && !runing && index >= ks.length && option.over) option.over()\n }\n __run();\n}\n\n\n/**\n * 递归遍历\n * @param {Object} obj 遍历的对象\n * @param {string} childkey 递归遍历子对象的参数名,如果为空表示遍历整个子对象\n * @param { (v:any, k:string, obj:Object, ks:string[])=>any } callback 遍历回调函数\n * @param {boolean} [is_layer] 是否按层结构(0,1,00,01,10...)递归,false表示按树结构(0,00,01,1,10...)\n * @param {any} [thisArg] 遍历回调的this,默认为子对象\n */\nfunction eachloop(obj:Object, childkey:string, callback:TypeEachCallback, is_layer?:boolean, thisArg?:any) {\n function loop(obj:Object, ks:string[]):boolean|any\n {\n let next_layer = [];\n let res:any = true;\n for (const k in obj) {\n if (!obj.hasOwnProperty(k)) continue;\n // @ts-ignore\n let row = obj[k];\n res = callback.call( (thisArg || row), row, k, obj, ks.concat(k) );\n if (res && row && typeof(row)==\"object\") {\n let child = childkey ? row[childkey] : row;\n if (child && typeof(child)==\"object\") {\n if (is_layer){\n next_layer.push({child:child, ks:ks.concat(k)})\n }else {\n res = loop(child, ks.concat(k));\n }\n }\n }\n if (res === false) break;\n }\n for (let i = 0; i < next_layer.length; i++) {\n let row = next_layer[i];\n res = loop(row.child, row.ks);\n if (res === false) break;\n }\n return res;\n }\n loop(obj, [])\n}\n/**\n * url查询参数解码\n * @param {string} str url查询参数字符串,例如:a=1&b[]=2&b[]=3\n * @returns {{[key:string]: string|Object}}\n */\nfunction param_decode(str:string){\n let res = {};\n if (!str || typeof str !== 'string') return res;\n str.split('&').forEach(function (row){\n let kv = row.split('=');\n if (!kv[0]) return;\n let val = decodeURIComponent(kv[1] || '');\n let arr = decodeURIComponent(kv[0]).split(']'), ks=[];\n for (let i = 0; i < arr.length; i++) {\n let row = arr[i];\n if (i===0){\n let ms = row.match(/^([^\\[]+)(\\[[\\s\\S.]*)?$/);\n if (ms){\n ks.push(ms[1]);\n if (ms[2]) ks.push(ms[2].substring(1));\n }\n }else if(row){\n ks.push(row.substring(1));\n }else {\n break;\n }\n }\n let cache:{[k:string]:any} = res;\n ks.forEach(function (k,i){\n k = k || (function(){\n var ki=-1;\n Object.keys(cache).forEach(function(row){\n let num = Number(row)\n if(/^\\d+$/.test(row) && num>ki) ki = num;\n })\n return String(ki+1);\n })();\n if (i == ks.length-1){\n cache[k] = val;\n }else {\n let is_arr = ks[i+1] == '' || /^\\d+$/.test(ks[i+1]);\n cache[k] = typeof(cache[k])!=\"undefined\" ? cache[k] : (is_arr ? [] : {});\n cache = cache[k];\n }\n })\n })\n return res;\n}\n/**\n * url查询参数编码\n * @param {Object} obj 数据对象\n * @returns {string}\n */\nfunction param_encode(obj:any){\n if (!obj) return '';\n if(typeof(obj)=='string') return obj;\n let param_arr = [];\n if (obj instanceof FormData){\n for(let pair of obj.entries()) {\n param_arr.push(encodeURIComponent(pair[0]) + '=' + encodeURIComponent(String(pair[1])) );\n }\n }else{\n eachloop(obj, '', function (row, k, all, ks){\n if(typeof(row) !== \"object\") {\n let name = ks.map((v,i)=>{ return i>0 ? '['+encodeURIComponent(v)+']' : encodeURIComponent(v); }).join('');\n param_arr.push(name + '=' + encodeURIComponent(row));\n }\n return true;\n })\n }\n return param_arr.join('&');\n}\n/**\n * 数据签名\n * @param {any} data 数据\n * @param {number} len 长度, 默认64\n * @returns {string}\n */\nfunction encode(data:any, len=64){\n if (!data) return '';\n let strmap = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-';\n len = len && len>1 && len<=64 ? Number(len) : 64;\n let str = JSON.stringify(data).replace(/\\\"/g,'');\n let res = '', vi = 0;\n for (let j = 0; j < len; j++) {\n for (let i = j; i < str.length; i+=len) {\n vi += str.charCodeAt(i);\n }\n let v = vi%len;\n res += strmap[vi%len];\n vi = Math.floor(vi/len);\n }\n return res;\n}\n/**\n * 对象的指定值获取 或者 设定\n * @param {any} data 数据源\n * @param {string|{[key:string]: any}} key_data 获取的键,或者设定数据的键值对\n * @param {any} def 值不存在的默认值\n * @returns {*}\n */\nfunction map(data:any, key_data:string|{[key:string]: any}, def?:any){\n if (typeof(key_data) == 'object' && key_data){\n if(data === null || typeof data !== 'object') data = {};\n for (const key in key_data) {\n let key_arr = key.split('.');\n let k_last = key_arr.pop();\n if (!k_last) continue;\n let v = key_data[key];\n let cache_data = data;\n key_arr.forEach(function (k, i){\n if (cache_data[k] === null || typeof cache_data[k] !== 'object'){\n cache_data[k] = {}\n }\n cache_data = cache_data[k];\n })\n cache_data[k_last] = v;\n }\n return data;\n }else {\n let key_arr = key_data ? to_string(key_data).split('.') : [];\n let res = data;\n for (let i = 0; i < key_arr.length; i++) {\n let k = key_arr[i];\n if (res === null || typeof res === 'undefined') return def;\n res = res[k];\n }\n if (res === null || typeof res === 'undefined') return def;\n return res;\n }\n}\n\ntype TypeDateReturn = {\n timestamp: number,\n y: number,\n m: number,\n d: number,\n h: number,\n i: number,\n s: number,\n w: number,\n string: string,\n zone: number,\n}\n/**\n * 日期处理\n * @param {string|number|Date} date 日期,可以是字符串、时间戳(毫秒)\n * @param {string} fmt 日期字符串格式,如果data为字符串,然后fmt为空,那么会推定日期为 年月日时分秒、日月年时分秒 中的一种\n * @param {number} [zone] 时区,东正,西负。-12~12\n * @returns {{timestamp: number, y: number, m: number, d: number, h: number, i: number, s: number, w: number, string: string, zone: number}}\n */\nfunction date(date:string|number|Date, fmt:string='', zone?:number){\n function utc_date(str:string, fmt:string, utc_offset:number){\n // 宽松的日期解析,按 fmt 指定的标识顺序位置的数字\n let number_arr = str.match(/\\d+/g) || [];\n let key_arr:string[] = []\n if (fmt){\n fmt = fmt.replace(/\\\\[ymdhis]/ig, ''); // 排除掉 \\Y 之类的转义字符\n key_arr = fmt.match(/[ymdhis]/ig) || [];\n } else {\n // 没有指定 fmt 的情况下,根据年(值>1000)所在位置判断,分两种情况:年月日时分秒、日月年时分秒\n let year_index = number_arr.findIndex(v=>Number(v)>1000)\n if (year_index === 0){\n key_arr = ['y','m','d','h','i','s']\n }else if (year_index === 2){\n key_arr = ['d','m','y','h','i','s']\n }else {\n throw new Error('日期异常')\n }\n }\n let value_map:{[k:string]: number} = {}\n key_arr.forEach((k, i)=>{\n value_map[k.toLowerCase()] = Number(number_arr[i] || 0)\n })\n let date = new Date()\n let function_map = { y:'setUTCFullYear',m:'setUTCMonth',d:'setUTCDate',h:'setUTCHours',i:'setUTCMinutes',s:'setUTCSeconds' };\n Object.keys(function_map).forEach(k=>{\n value_map[k] = value_map[k] || 0;\n if (k === 'm' && value_map[k] === 0){\n // 月的默认值应该是 1 不是 0\n value_map[k] = 1\n }\n // @ts-ignore\n let function_name = function_map[k]\n // @ts-ignore\n date[function_name]( k==='m' ? value_map[k]-1 : value_map[k] );\n })\n value_map.w = date.getUTCDay();\n // 时区转换,例如:在东8时区传入的是1970 年 1 月 1 日 08:00:00。因为使用的是 setUTCHours ,得到的 date.getTime() = 8*60*1000,\n value_map.timestamp = date.getTime() - utc_offset;\n return value_map;\n }\n function format_time(timestamp:number, fmt:string, utc_offset:number){\n const time = new Date(timestamp + utc_offset)\n function add0(n:any){ return n < 10 ? ('0' + n) : n}\n let res = {\n y: time.getUTCFullYear(),\n m: time.getUTCMonth() + 1,\n d: time.getUTCDate(),\n h: time.getUTCHours(),\n i: time.getUTCMinutes(),\n s: time.getUTCSeconds(),\n w: time.getUTCDay(),\n string: ''\n }\n let v:{[k:string]: any} = {\n ...res,\n W: ['日','一','二','三','四','五','六'][res.w],\n w: ['7','1','2','3','4','5','6'][res.w],\n }\n v.Y = v.y; v.M = add0(v.m); v.D = add0(v.d); v.H = add0(v.h); v.I = add0(v.i); v.S = add0(v.s);\n res.string = fmt.replace(/(^|[^\\\\])([YMDHISWymdhisw]+)/g, function(m,m1,m2){\n let str = m1;\n for(let i=0; i<m2.length; i++ ){\n str += v[m2[i]];\n }\n return str;\n }).replace(/\\\\([YMDHISWymdhisw])/g, \"$1\");\n return res;\n }\n\n zone = Number(zone);\n // utc需要偏移多少毫秒后,才能得到和指定时区相同的日期,例如:东8时区8点时,utc得到的是0点,需要+480分钟后,utc得到的才是8点,那么 utc_offset=480*60*1000\n // 即:(new Date(时间戳)).getHours() == (new Date(时间戳 + utc_offset)).getUTCHours()\n if (isNaN(zone)){\n zone = -(new Date()).getTimezoneOffset()/60\n }\n const utc_offset = zone*3600*1000;\n\n const res:TypeDateReturn = {\n timestamp: NaN,\n y: NaN,\n m: NaN,\n d: NaN,\n h: NaN,\n i: NaN,\n s: NaN,\n w: NaN,\n string: '',\n zone,\n }\n if (date instanceof Date){\n let timestamp = date.getTime();\n Object.assign(res, format_time(timestamp, fmt, utc_offset))\n res.timestamp = timestamp;\n }else if (typeof date === 'number'){\n Object.assign(res, format_time(date, fmt, utc_offset))\n res.timestamp = date;\n }else if (typeof date === 'string'){\n Object.assign(res, utc_date(date, fmt, utc_offset))\n res.string = date;\n }\n return res;\n}\n\n/**\n * 事件管理,on,off,emit\n */\nconst event_manage = {\n __event_list: {} as {[k:string]: ((data?:any)=>any)[]},\n on(event_name:string, callback:(data?:any)=>any, first?:any){\n if (!event_name || typeof event_name !== 'string') return;\n if (typeof callback !== 'function') return;\n let list = event_manage.__event_list[event_name] || [];\n first ? list.unshift(callback) : list.push(callback);\n event_manage.__event_list[event_name] = list;\n },\n off(event_name:string, callback:(data?:any)=>any){\n if (!event_name || typeof event_name !== 'string') return;\n if (typeof callback === 'function'){\n let list = event_manage.__event_list[event_name] || [];\n let i = list.indexOf(callback);\n if (i !== -1) list.splice(i,1);\n event_manage.__event_list[event_name] = list;\n }else if (typeof callback === 'undefined'){\n event_manage.__event_list[event_name] = [];\n }\n },\n emit(event_name:string, data:any, thisArg?:any){\n if (!event_name || typeof event_name !== 'string') return;\n let list = event_manage.__event_list[event_name] || [];\n for (let i = 0; i < list.length; i++) {\n if (list[i].call(thisArg, data) === false) break;\n }\n },\n}\n\nexport {\n Queue,\n Cache,\n var_type,\n to_string,\n trim,\n path,\n each,\n eachloop,\n param_decode,\n param_encode,\n encode,\n map,\n date,\n event_manage,\n}"],"names":["isPromise","obj","Queue","limit","start","row","callback","thisArg","res","Cache","engine","name","def","cache_name","encode","str","_get","data","v","value","timeout","expire","var_type","to_string","val","trim","mask","reg_code","path","base","base_arr","path_arr","each","op","ks","index","option","runing","is_break","__run","k","eachloop","childkey","is_layer","loop","next_layer","child","i","param_decode","kv","arr","ms","cache","ki","num","is_arr","param_encode","param_arr","pair","all","len","strmap","vi","j","map","key_data","key","key_arr","k_last","cache_data","date","fmt","zone","utc_date","utc_offset","number_arr","year_index","value_map","function_map","function_name","format_time","timestamp","time","add0","n","m","m1","m2","event_manage","event_name","first","list"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["function isPromise(obj:any){\r\n return obj && typeof obj == 'object' && typeof obj.then == 'function';\r\n}\r\n\r\nclass Queue{\r\n list = [] as {callback:()=>any, thisArg:any}[];\r\n running = 0;\r\n limit = 1;\r\n status = 0; // 0,停止,1开始\r\n\r\n /**\r\n * 构建队列\r\n * @param {number} [limit] 同时执行的槽位数量限制,默认为:1\r\n * @param {boolean} [start] 构建好后,是否直接开始队列\r\n * @returns {Queue}\r\n */\r\n constructor(limit?:number, start?:boolean) {\r\n this.limit = limit || 1;\r\n\r\n if (start) this.start()\r\n return this;\r\n }\r\n __run(){\r\n while (this.status===1 && this.running < this.limit){\r\n let row = this.list.shift();\r\n if (!row) break;\r\n let {callback, thisArg} = row;\r\n let res = callback.call(thisArg);\r\n\r\n if (isPromise(res)){\r\n this.running++;\r\n res.then(()=>{\r\n this.running--;\r\n this.__run();\r\n })\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * 插入执行\r\n * @param {function} callback 回调函数,如果返回 Promise ,会占用执行槽位直到 Promise 兑现\r\n * @param {any} thisArg 执行时的this对象\r\n * @returns {Queue}\r\n */\r\n add(callback:()=>any, thisArg:any){\r\n if(typeof(callback)!=='function') return this;\r\n this.list.push({callback, thisArg});\r\n return this.__run();\r\n }\r\n start(){\r\n this.status = 1;\r\n return this.__run();\r\n }\r\n stop(){\r\n this.status = 0;\r\n }\r\n}\r\n\r\ntype TypeCacheEngine = {\r\n getItem:(name:string)=>string|Promise<string>,\r\n setItem:(name:string, data:string)=>Promise<any>,\r\n removeItem?:(name:string)=>Promise<any>,\r\n clear?:()=>any\r\n}\r\n\r\nclass Cache{\r\n Storage:TypeCacheEngine;\r\n /**\r\n * 构建缓存器,传入缓存引擎对象,\r\n * @param { {getItem:(name:string)=>string|Promise<string>, setItem:(name:string, data:any)=>Promise<any>, removeItem?:(name:string)=>Promise<any>, clear?:()=>any } } engine\r\n */\r\n constructor(engine:TypeCacheEngine) {\r\n if (typeof(engine)!=\"object\" || typeof(engine.getItem)!='function' || typeof(engine.setItem)!='function'){\r\n throw new Error('缓存引擎必须为对象,并且包含方法:getItem、setItem');\r\n }\r\n this.Storage = engine;\r\n }\r\n\r\n /**\r\n * 获取缓存\r\n * @param {any} name 缓存名\r\n * @param {any} def 默认值\r\n * @returns {any | Promise<any>} 由引擎的 getItem 确定是否返回 Promise\r\n */\r\n get(name:any, def?:any){\r\n const cache_name = 's94_cache-'+encode(name);\r\n const str = this.Storage.getItem(cache_name);\r\n function _get(str:string, def:any){\r\n try {\r\n var data = JSON.parse(str);\r\n if(!data || typeof(data)!=='object') return def;\r\n if( data['expire'] !== -1 && data['expire'] < (new Date).getTime() ) return def;\r\n return data['main'];\r\n } catch (error) {\r\n return def;\r\n }\r\n }\r\n if (typeof str === 'string'){\r\n return _get(str, def);\r\n }else {\r\n return str.then(v=>_get(v, def))\r\n }\r\n }\r\n /**\r\n * 设定缓存\r\n * @param {any} name 缓存名称\r\n * @param {any} value 缓存值\r\n * @param {number} timeout 过期时间(毫秒),默认或者小于0,表示永久\r\n * @returns {Promise<any>}\r\n */\r\n set(name:any, value:any, timeout?:number){\r\n timeout = timeout && timeout>0 ? Number(timeout) : -1;\r\n let expire = timeout === -1 ? -1 : (new Date).getTime() + timeout;\r\n\r\n const cache_name = 's94_cache-'+encode(name);\r\n const data = JSON.stringify({main:value, expire, name});\r\n return Promise.resolve(this.Storage.setItem(cache_name, data));\r\n }\r\n\r\n /**\r\n * 移除缓存\r\n * @param {string} name\r\n * @returns {Promise<any>}\r\n */\r\n remove(name:any){\r\n const cache_name = 's94_cache-'+encode(name);\r\n if(typeof(this.Storage.removeItem) === 'function') {\r\n return Promise.resolve( this.Storage.removeItem(cache_name) );\r\n }else {\r\n return Promise.resolve( this.Storage.getItem(cache_name) ).then((res)=>{\r\n if (res) {\r\n // 如果有缓存数据,就设定一个保证过期的数据替换\r\n const data = JSON.stringify({main:'', expire:1, name});\r\n return this.Storage.setItem(cache_name, data);\r\n }\r\n return res\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * 清理缓存,如果引擎存在 clear 方法,\r\n * @returns {Promise<any>}\r\n */\r\n clear(){\r\n if (typeof(this.Storage.clear) === 'function'){\r\n return Promise.resolve( this.Storage.clear() );\r\n }\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 返回参数的类型,例如 Object,Date\r\n * @param {any} obj\r\n * @returns {string}\r\n */\r\nfunction var_type(obj:any){\r\n const str = Object.prototype.toString.call(obj);\r\n return str.substring(8,str.length-1);\r\n}\r\n/**\r\n * 转字符串\r\n * @param {any} val\r\n * @returns {string}\r\n */\r\nfunction to_string(val:any):string{\r\n if (typeof val === 'string') return val;\r\n try {\r\n return val.toString();\r\n } catch (e) {\r\n return '';\r\n }\r\n}\r\n/**\r\n * 去除字符串两边的空白\r\n * @param {string} str\r\n * @param {string} [mask] 额外需要去除的字符串\r\n * @returns {string}\r\n */\r\nfunction trim(str:string, mask?:string) {\r\n str = to_string(str)\r\n if (!str) return \"\";\r\n if (typeof str.trim === 'function' && !mask) {\r\n return str.trim();\r\n }\r\n mask = to_string(mask)\r\n if (mask) mask = mask.replace(/([\\$\\(\\)\\*\\+\\?\\.\\[\\]\\\\\\^\\{\\}\\|]){1}/g, '\\\\$1');\r\n let reg_code = `^[\\\\s\\\\uFEFF\\\\xA0${mask}]+|[\\\\s\\\\uFEFF\\\\xA0${mask}]+$`\r\n return str.replace(new RegExp(reg_code, 'g'), '');\r\n}\r\n/**\r\n * 计算相对路径\r\n * @param {string} path\r\n * @param {string} base\r\n * @returns {*|string}\r\n */\r\nfunction path(path:string, base:string){\r\n if (!base || path.indexOf('/')===0) return path;\r\n base = to_string(base);\r\n var base_arr = base.split(/\\\\|\\//);\r\n base_arr.pop();\r\n for (var i=0,path_arr = path.split(/\\\\|\\//); i<path_arr.length; i++) {\r\n switch (path_arr[i]){\r\n case '.':break;\r\n case '..':base_arr.pop();break;\r\n default:base_arr.push(path_arr[i]);break;\r\n }\r\n }\r\n return base_arr.join(~base.indexOf('\\\\') ? '\\\\' : '/');\r\n}\r\n\r\n\r\ntype TypeEachCallback = (v:any, k:string, obj:Object, ks:string[])=>any\r\ntype TypeEachOption = {\r\n each: TypeEachCallback,\r\n over?: ()=>any,\r\n limit?: number\r\n}\r\n/**\r\n * 遍历对象\r\n * @param {Object} obj\r\n * @param { TypeEachOption | (v:any, k:string, obj:Object)=>any } op 遍历回调函数 或者 包含遍历回调的配置\r\n * @param {any} [thisArg] 回调函数的this对象\r\n */\r\nfunction each(obj:Object, op:TypeEachOption|TypeEachCallback, thisArg?:any) {\r\n let ks = Object.keys(obj), index=0;\r\n const option = typeof op == 'function' ? {each: op} : op;\r\n if (typeof option.each != 'function') throw '参数错误,缺少遍历回调函数(each)';\r\n let limit = option.limit || 1, is_break = false, error:any;\r\n let queue_list = [];\r\n async function queue_row(){\r\n while (index < ks.length && !is_break && !error){\r\n // @ts-ignore\r\n let k = ks[index++], v = obj[k];\r\n try {\r\n let res = await option.each.call((thisArg || v), v, k, obj, [k]);\r\n is_break = is_break || (res === false);\r\n } catch (e) {\r\n error = e;\r\n }\r\n }\r\n }\r\n for (let i = 0; i < limit; i++) {\r\n queue_list.push(queue_row())\r\n }\r\n return Promise.all(queue_list).then(()=>{\r\n if (typeof option.over == 'function') option.over()\r\n if (error) throw error;\r\n });\r\n}\r\n\r\n\r\n/**\r\n * 递归遍历\r\n * @param {Object} obj 遍历的对象\r\n * @param {string} childkey 递归遍历子对象的参数名,如果为空表示遍历整个子对象\r\n * @param { (v:any, k:string, obj:Object, ks:string[])=>any } callback 遍历回调函数\r\n * @param {boolean} [is_layer] 是否按层结构(0,1,00,01,10...)递归,false表示按树结构(0,00,01,1,10...)\r\n * @param {any} [thisArg] 遍历回调的this,默认为子对象\r\n */\r\nfunction eachloop(obj:Object, childkey:string, callback:TypeEachCallback, is_layer?:boolean, thisArg?:any) {\r\n function loop(obj:Object, ks:string[]):boolean|any\r\n {\r\n let next_layer = [];\r\n let res:any = true;\r\n for (const k in obj) {\r\n if (!obj.hasOwnProperty(k)) continue;\r\n // @ts-ignore\r\n let row = obj[k];\r\n res = callback.call( (thisArg || row), row, k, obj, ks.concat(k) );\r\n if (res && row && typeof(row)==\"object\") {\r\n let child = childkey ? row[childkey] : row;\r\n if (child && typeof(child)==\"object\") {\r\n if (is_layer){\r\n next_layer.push({child:child, ks:ks.concat(k)})\r\n }else {\r\n res = loop(child, ks.concat(k));\r\n }\r\n }\r\n }\r\n if (res === false) break;\r\n }\r\n for (let i = 0; i < next_layer.length; i++) {\r\n let row = next_layer[i];\r\n res = loop(row.child, row.ks);\r\n if (res === false) break;\r\n }\r\n return res;\r\n }\r\n loop(obj, [])\r\n}\r\n/**\r\n * url查询参数解码\r\n * @param {string} str url查询参数字符串,例如:a=1&b[]=2&b[]=3\r\n * @returns {{[key:string]: string|Object}}\r\n */\r\nfunction param_decode(str:string){\r\n let res = {};\r\n if (!str || typeof str !== 'string') return res;\r\n str.split('&').forEach(function (row){\r\n let kv = row.split('=');\r\n if (!kv[0]) return;\r\n let val = decodeURIComponent(kv[1] || '');\r\n let arr = decodeURIComponent(kv[0]).split(']'), ks=[];\r\n for (let i = 0; i < arr.length; i++) {\r\n let row = arr[i];\r\n if (i===0){\r\n let ms = row.match(/^([^\\[]+)(\\[[\\s\\S.]*)?$/);\r\n if (ms){\r\n ks.push(ms[1]);\r\n if (ms[2]) ks.push(ms[2].substring(1));\r\n }\r\n }else if(row){\r\n ks.push(row.substring(1));\r\n }else {\r\n break;\r\n }\r\n }\r\n let cache:{[k:string]:any} = res;\r\n ks.forEach(function (k,i){\r\n k = k || (function(){\r\n var ki=-1;\r\n Object.keys(cache).forEach(function(row){\r\n let num = Number(row)\r\n if(/^\\d+$/.test(row) && num>ki) ki = num;\r\n })\r\n return String(ki+1);\r\n })();\r\n if (i == ks.length-1){\r\n cache[k] = val;\r\n }else {\r\n let is_arr = ks[i+1] == '' || /^\\d+$/.test(ks[i+1]);\r\n cache[k] = typeof(cache[k])!=\"undefined\" ? cache[k] : (is_arr ? [] : {});\r\n cache = cache[k];\r\n }\r\n })\r\n })\r\n return res;\r\n}\r\n/**\r\n * url查询参数编码\r\n * @param {Object} obj 数据对象\r\n * @returns {string}\r\n */\r\nfunction param_encode(obj:any){\r\n if (!obj) return '';\r\n if(typeof(obj)=='string') return obj;\r\n let param_arr = [];\r\n if (obj instanceof FormData){\r\n for(let pair of obj.entries()) {\r\n param_arr.push(encodeURIComponent(pair[0]) + '=' + encodeURIComponent(String(pair[1])) );\r\n }\r\n }else{\r\n eachloop(obj, '', function (row, k, all, ks){\r\n if(typeof(row) !== \"object\") {\r\n let name = ks.map((v,i)=>{ return i>0 ? '['+encodeURIComponent(v)+']' : encodeURIComponent(v); }).join('');\r\n param_arr.push(name + '=' + encodeURIComponent(row));\r\n }\r\n return true;\r\n })\r\n }\r\n return param_arr.join('&');\r\n}\r\n/**\r\n * 数据签名\r\n * @param {any} data 数据\r\n * @param {number} len 长度, 默认64\r\n * @returns {string}\r\n */\r\nfunction encode(data:any, len=64){\r\n if (!data) return '';\r\n let strmap = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-';\r\n len = len && len>1 && len<=64 ? Number(len) : 64;\r\n let str = JSON.stringify(data).replace(/\\\"/g,'');\r\n let res = '', vi = 0;\r\n for (let j = 0; j < len; j++) {\r\n for (let i = j; i < str.length; i+=len) {\r\n vi += str.charCodeAt(i);\r\n }\r\n let v = vi%len;\r\n res += strmap[vi%len];\r\n vi = Math.floor(vi/len);\r\n }\r\n return res;\r\n}\r\n/**\r\n * 对象的指定值获取 或者 设定\r\n * @param {any} data 数据源\r\n * @param {string|{[key:string]: any}} key_data 获取的键,或者设定数据的键值对\r\n * @param {any} def 值不存在的默认值\r\n * @returns {*}\r\n */\r\nfunction map(data:any, key_data:string|{[key:string]: any}, def?:any){\r\n if (typeof(key_data) == 'object' && key_data){\r\n if(data === null || typeof data !== 'object') data = {};\r\n for (const key in key_data) {\r\n let key_arr = key.split('.');\r\n let k_last = key_arr.pop();\r\n if (!k_last) continue;\r\n let v = key_data[key];\r\n let cache_data = data;\r\n key_arr.forEach(function (k, i){\r\n if (cache_data[k] === null || typeof cache_data[k] !== 'object'){\r\n cache_data[k] = {}\r\n }\r\n cache_data = cache_data[k];\r\n })\r\n cache_data[k_last] = v;\r\n }\r\n return data;\r\n }else {\r\n let key_arr = key_data ? to_string(key_data).split('.') : [];\r\n let res = data;\r\n for (let i = 0; i < key_arr.length; i++) {\r\n let k = key_arr[i];\r\n if (res === null || typeof res === 'undefined') return def;\r\n res = res[k];\r\n }\r\n if (res === null || typeof res === 'undefined') return def;\r\n return res;\r\n }\r\n}\r\n\r\ntype TypeDateReturn = {\r\n timestamp: number,\r\n y: number,\r\n m: number,\r\n d: number,\r\n h: number,\r\n i: number,\r\n s: number,\r\n w: number,\r\n string: string,\r\n zone: number,\r\n}\r\n/**\r\n * 日期处理\r\n * @param {string|number|Date} date 日期,可以是字符串、时间戳(毫秒)\r\n * @param {string} fmt 日期字符串格式,如果data为字符串,然后fmt为空,那么会推定日期为 年月日时分秒、日月年时分秒 中的一种\r\n * @param {number} [zone] 时区,东正,西负。-12~12\r\n * @returns {{timestamp: number, y: number, m: number, d: number, h: number, i: number, s: number, w: number, string: string, zone: number}}\r\n */\r\nfunction date(date:string|number|Date, fmt:string='', zone?:number){\r\n function utc_date(str:string, fmt:string, utc_offset:number){\r\n // 宽松的日期解析,按 fmt 指定的标识顺序位置的数字\r\n let number_arr = str.match(/\\d+/g) || [];\r\n let key_arr:string[] = []\r\n if (fmt){\r\n fmt = fmt.replace(/\\\\[ymdhis]/ig, ''); // 排除掉 \\Y 之类的转义字符\r\n key_arr = fmt.match(/[ymdhis]/ig) || [];\r\n } else {\r\n // 没有指定 fmt 的情况下,根据年(值>1000)所在位置判断,分两种情况:年月日时分秒、日月年时分秒\r\n let year_index = number_arr.findIndex(v=>Number(v)>1000)\r\n if (year_index === 0){\r\n key_arr = ['y','m','d','h','i','s']\r\n }else if (year_index === 2){\r\n key_arr = ['d','m','y','h','i','s']\r\n }else {\r\n throw new Error('日期异常')\r\n }\r\n }\r\n let value_map:{[k:string]: number} = {}\r\n key_arr.forEach((k, i)=>{\r\n value_map[k.toLowerCase()] = Number(number_arr[i] || 0)\r\n })\r\n let date = new Date()\r\n let function_map = { y:'setUTCFullYear',m:'setUTCMonth',d:'setUTCDate',h:'setUTCHours',i:'setUTCMinutes',s:'setUTCSeconds' };\r\n Object.keys(function_map).forEach(k=>{\r\n value_map[k] = value_map[k] || 0;\r\n if (k === 'm' && value_map[k] === 0){\r\n // 月的默认值应该是 1 不是 0\r\n value_map[k] = 1\r\n }\r\n // @ts-ignore\r\n let function_name = function_map[k]\r\n // @ts-ignore\r\n date[function_name]( k==='m' ? value_map[k]-1 : value_map[k] );\r\n })\r\n value_map.w = date.getUTCDay();\r\n // 时区转换,例如:在东8时区传入的是1970 年 1 月 1 日 08:00:00。因为使用的是 setUTCHours ,得到的 date.getTime() = 8*60*1000,\r\n value_map.timestamp = date.getTime() - utc_offset;\r\n return value_map;\r\n }\r\n function format_time(timestamp:number, fmt:string, utc_offset:number){\r\n const time = new Date(timestamp + utc_offset)\r\n function add0(n:any){ return n < 10 ? ('0' + n) : n}\r\n let res = {\r\n y: time.getUTCFullYear(),\r\n m: time.getUTCMonth() + 1,\r\n d: time.getUTCDate(),\r\n h: time.getUTCHours(),\r\n i: time.getUTCMinutes(),\r\n s: time.getUTCSeconds(),\r\n w: time.getUTCDay(),\r\n string: ''\r\n }\r\n let v:{[k:string]: any} = {\r\n ...res,\r\n W: ['日','一','二','三','四','五','六'][res.w],\r\n w: ['7','1','2','3','4','5','6'][res.w],\r\n }\r\n v.Y = v.y; v.M = add0(v.m); v.D = add0(v.d); v.H = add0(v.h); v.I = add0(v.i); v.S = add0(v.s);\r\n res.string = fmt.replace(/(^|[^\\\\])([YMDHISWymdhisw]+)/g, function(m,m1,m2){\r\n let str = m1;\r\n for(let i=0; i<m2.length; i++ ){\r\n str += v[m2[i]];\r\n }\r\n return str;\r\n }).replace(/\\\\([YMDHISWymdhisw])/g, \"$1\");\r\n return res;\r\n }\r\n\r\n zone = Number(zone);\r\n // utc需要偏移多少毫秒后,才能得到和指定时区相同的日期,例如:东8时区8点时,utc得到的是0点,需要+480分钟后,utc得到的才是8点,那么 utc_offset=480*60*1000\r\n // 即:(new Date(时间戳)).getHours() == (new Date(时间戳 + utc_offset)).getUTCHours()\r\n if (isNaN(zone)){\r\n zone = -(new Date()).getTimezoneOffset()/60\r\n }\r\n const utc_offset = zone*3600*1000;\r\n\r\n const res:TypeDateReturn = {\r\n timestamp: NaN,\r\n y: NaN,\r\n m: NaN,\r\n d: NaN,\r\n h: NaN,\r\n i: NaN,\r\n s: NaN,\r\n w: NaN,\r\n string: '',\r\n zone,\r\n }\r\n if (date instanceof Date){\r\n let timestamp = date.getTime();\r\n Object.assign(res, format_time(timestamp, fmt, utc_offset))\r\n res.timestamp = timestamp;\r\n }else if (typeof date === 'number'){\r\n Object.assign(res, format_time(date, fmt, utc_offset))\r\n res.timestamp = date;\r\n }else if (typeof date === 'string'){\r\n Object.assign(res, utc_date(date, fmt, utc_offset))\r\n res.string = date;\r\n }\r\n return res;\r\n}\r\n\r\n/**\r\n * 事件管理,on,off,emit\r\n */\r\nconst event_manage = {\r\n __event_list: {} as {[k:string]: ((data?:any)=>any)[]},\r\n on(event_name:string, callback:(data?:any)=>any, first?:any){\r\n if (!event_name || typeof event_name !== 'string') return;\r\n if (typeof callback !== 'function') return;\r\n let list = event_manage.__event_list[event_name] || [];\r\n first ? list.unshift(callback) : list.push(callback);\r\n event_manage.__event_list[event_name] = list;\r\n },\r\n off(event_name:string, callback:(data?:any)=>any){\r\n if (!event_name || typeof event_name !== 'string') return;\r\n if (typeof callback === 'function'){\r\n let list = event_manage.__event_list[event_name] || [];\r\n let i = list.indexOf(callback);\r\n if (i !== -1) list.splice(i,1);\r\n event_manage.__event_list[event_name] = list;\r\n }else if (typeof callback === 'undefined'){\r\n event_manage.__event_list[event_name] = [];\r\n }\r\n },\r\n emit(event_name:string, data:any, thisArg?:any){\r\n if (!event_name || typeof event_name !== 'string') return;\r\n let list = event_manage.__event_list[event_name] || [];\r\n for (let i = 0; i < list.length; i++) {\r\n if (list[i].call(thisArg, data) === false) break;\r\n }\r\n },\r\n}\r\n\r\nexport {\r\n Queue,\r\n Cache,\r\n var_type,\r\n to_string,\r\n trim,\r\n path,\r\n each,\r\n eachloop,\r\n param_decode,\r\n param_encode,\r\n encode,\r\n map,\r\n date,\r\n event_manage,\r\n}"],"names":["isPromise","obj","Queue","limit","start","row","callback","thisArg","res","Cache","engine","name","def","cache_name","encode","str","_get","data","v","value","timeout","expire","var_type","to_string","val","trim","mask","reg_code","path","base","base_arr","path_arr","each","op","ks","index","option","is_break","error","queue_list","queue_row","k","e","i","eachloop","childkey","is_layer","loop","next_layer","child","param_decode","kv","arr","ms","cache","ki","num","is_arr","param_encode","param_arr","pair","all","len","strmap","vi","j","map","key_data","key","key_arr","k_last","cache_data","date","fmt","zone","utc_date","utc_offset","number_arr","year_index","value_map","function_map","function_name","format_time","timestamp","time","add0","n","m","m1","m2","event_manage","event_name","first","list"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
function
|
|
2
|
-
return
|
|
1
|
+
function S(e) {
|
|
2
|
+
return e && typeof e == "object" && typeof e.then == "function";
|
|
3
3
|
}
|
|
4
|
-
class
|
|
4
|
+
class U {
|
|
5
5
|
// 0,停止,1开始
|
|
6
6
|
/**
|
|
7
7
|
* 构建队列
|
|
@@ -9,15 +9,15 @@ class I {
|
|
|
9
9
|
* @param {boolean} [start] 构建好后,是否直接开始队列
|
|
10
10
|
* @returns {Queue}
|
|
11
11
|
*/
|
|
12
|
-
constructor(
|
|
13
|
-
return this.list = [], this.running = 0, this.limit = 1, this.status = 0, this.limit =
|
|
12
|
+
constructor(t, r) {
|
|
13
|
+
return this.list = [], this.running = 0, this.limit = 1, this.status = 0, this.limit = t || 1, r && this.start(), this;
|
|
14
14
|
}
|
|
15
15
|
__run() {
|
|
16
16
|
for (; this.status === 1 && this.running < this.limit; ) {
|
|
17
|
-
let
|
|
18
|
-
if (!
|
|
19
|
-
let { callback: r, thisArg: i } =
|
|
20
|
-
|
|
17
|
+
let t = this.list.shift();
|
|
18
|
+
if (!t) break;
|
|
19
|
+
let { callback: r, thisArg: i } = t, n = r.call(i);
|
|
20
|
+
S(n) && (this.running++, n.then(() => {
|
|
21
21
|
this.running--, this.__run();
|
|
22
22
|
}));
|
|
23
23
|
}
|
|
@@ -29,8 +29,8 @@ class I {
|
|
|
29
29
|
* @param {any} thisArg 执行时的this对象
|
|
30
30
|
* @returns {Queue}
|
|
31
31
|
*/
|
|
32
|
-
add(
|
|
33
|
-
return typeof
|
|
32
|
+
add(t, r) {
|
|
33
|
+
return typeof t != "function" ? this : (this.list.push({ callback: t, thisArg: r }), this.__run());
|
|
34
34
|
}
|
|
35
35
|
start() {
|
|
36
36
|
return this.status = 1, this.__run();
|
|
@@ -39,15 +39,15 @@ class I {
|
|
|
39
39
|
this.status = 0;
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
class
|
|
42
|
+
class T {
|
|
43
43
|
/**
|
|
44
44
|
* 构建缓存器,传入缓存引擎对象,
|
|
45
45
|
* @param { {getItem:(name:string)=>string|Promise<string>, setItem:(name:string, data:any)=>Promise<any>, removeItem?:(name:string)=>Promise<any>, clear?:()=>any } } engine
|
|
46
46
|
*/
|
|
47
|
-
constructor(
|
|
48
|
-
if (typeof
|
|
47
|
+
constructor(t) {
|
|
48
|
+
if (typeof t != "object" || typeof t.getItem != "function" || typeof t.setItem != "function")
|
|
49
49
|
throw new Error("缓存引擎必须为对象,并且包含方法:getItem、setItem");
|
|
50
|
-
this.Storage =
|
|
50
|
+
this.Storage = t;
|
|
51
51
|
}
|
|
52
52
|
/**
|
|
53
53
|
* 获取缓存
|
|
@@ -55,17 +55,17 @@ class U {
|
|
|
55
55
|
* @param {any} def 默认值
|
|
56
56
|
* @returns {any | Promise<any>} 由引擎的 getItem 确定是否返回 Promise
|
|
57
57
|
*/
|
|
58
|
-
get(
|
|
59
|
-
const i = "s94_cache-" +
|
|
60
|
-
function
|
|
58
|
+
get(t, r) {
|
|
59
|
+
const i = "s94_cache-" + N(t), n = this.Storage.getItem(i);
|
|
60
|
+
function u(f, o) {
|
|
61
61
|
try {
|
|
62
|
-
var
|
|
63
|
-
return !
|
|
62
|
+
var s = JSON.parse(f);
|
|
63
|
+
return !s || typeof s != "object" || s.expire !== -1 && s.expire < (/* @__PURE__ */ new Date()).getTime() ? o : s.main;
|
|
64
64
|
} catch {
|
|
65
|
-
return
|
|
65
|
+
return o;
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
-
return typeof n == "string" ?
|
|
68
|
+
return typeof n == "string" ? u(n, r) : n.then((f) => u(f, r));
|
|
69
69
|
}
|
|
70
70
|
/**
|
|
71
71
|
* 设定缓存
|
|
@@ -74,22 +74,22 @@ class U {
|
|
|
74
74
|
* @param {number} timeout 过期时间(毫秒),默认或者小于0,表示永久
|
|
75
75
|
* @returns {Promise<any>}
|
|
76
76
|
*/
|
|
77
|
-
set(
|
|
77
|
+
set(t, r, i) {
|
|
78
78
|
i = i && i > 0 ? Number(i) : -1;
|
|
79
79
|
let n = i === -1 ? -1 : (/* @__PURE__ */ new Date()).getTime() + i;
|
|
80
|
-
const
|
|
81
|
-
return Promise.resolve(this.Storage.setItem(
|
|
80
|
+
const u = "s94_cache-" + N(t), f = JSON.stringify({ main: r, expire: n, name: t });
|
|
81
|
+
return Promise.resolve(this.Storage.setItem(u, f));
|
|
82
82
|
}
|
|
83
83
|
/**
|
|
84
84
|
* 移除缓存
|
|
85
85
|
* @param {string} name
|
|
86
86
|
* @returns {Promise<any>}
|
|
87
87
|
*/
|
|
88
|
-
remove(
|
|
89
|
-
const r = "s94_cache-" +
|
|
88
|
+
remove(t) {
|
|
89
|
+
const r = "s94_cache-" + N(t);
|
|
90
90
|
return typeof this.Storage.removeItem == "function" ? Promise.resolve(this.Storage.removeItem(r)) : Promise.resolve(this.Storage.getItem(r)).then((i) => {
|
|
91
91
|
if (i) {
|
|
92
|
-
const n = JSON.stringify({ main: "", expire: 1, name:
|
|
92
|
+
const n = JSON.stringify({ main: "", expire: 1, name: t });
|
|
93
93
|
return this.Storage.setItem(r, n);
|
|
94
94
|
}
|
|
95
95
|
return i;
|
|
@@ -104,32 +104,32 @@ class U {
|
|
|
104
104
|
return Promise.resolve(this.Storage.clear());
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
|
-
function
|
|
108
|
-
const
|
|
109
|
-
return
|
|
107
|
+
function b(e) {
|
|
108
|
+
const t = Object.prototype.toString.call(e);
|
|
109
|
+
return t.substring(8, t.length - 1);
|
|
110
110
|
}
|
|
111
|
-
function d(
|
|
112
|
-
if (typeof
|
|
111
|
+
function d(e) {
|
|
112
|
+
if (typeof e == "string") return e;
|
|
113
113
|
try {
|
|
114
|
-
return
|
|
114
|
+
return e.toString();
|
|
115
115
|
} catch {
|
|
116
116
|
return "";
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
|
-
function
|
|
120
|
-
if (
|
|
121
|
-
if (typeof
|
|
122
|
-
return
|
|
123
|
-
|
|
124
|
-
let r = `^[\\s\\uFEFF\\xA0${
|
|
125
|
-
return
|
|
119
|
+
function v(e, t) {
|
|
120
|
+
if (e = d(e), !e) return "";
|
|
121
|
+
if (typeof e.trim == "function" && !t)
|
|
122
|
+
return e.trim();
|
|
123
|
+
t = d(t), t && (t = t.replace(/([\$\(\)\*\+\?\.\[\]\\\^\{\}\|]){1}/g, "\\$1"));
|
|
124
|
+
let r = `^[\\s\\uFEFF\\xA0${t}]+|[\\s\\uFEFF\\xA0${t}]+$`;
|
|
125
|
+
return e.replace(new RegExp(r, "g"), "");
|
|
126
126
|
}
|
|
127
|
-
function O(
|
|
128
|
-
if (!
|
|
129
|
-
|
|
130
|
-
var r =
|
|
127
|
+
function O(e, t) {
|
|
128
|
+
if (!t || e.indexOf("/") === 0) return e;
|
|
129
|
+
t = d(t);
|
|
130
|
+
var r = t.split(/\\|\//);
|
|
131
131
|
r.pop();
|
|
132
|
-
for (var i = 0, n =
|
|
132
|
+
for (var i = 0, n = e.split(/\\|\//); i < n.length; i++)
|
|
133
133
|
switch (n[i]) {
|
|
134
134
|
case ".":
|
|
135
135
|
break;
|
|
@@ -140,163 +140,165 @@ function O(t, e) {
|
|
|
140
140
|
r.push(n[i]);
|
|
141
141
|
break;
|
|
142
142
|
}
|
|
143
|
-
return r.join(~
|
|
143
|
+
return r.join(~t.indexOf("\\") ? "\\" : "/");
|
|
144
144
|
}
|
|
145
|
-
function x(
|
|
146
|
-
let i = Object.keys(
|
|
147
|
-
const
|
|
148
|
-
if (typeof
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
}));
|
|
145
|
+
function x(e, t, r) {
|
|
146
|
+
let i = Object.keys(e), n = 0;
|
|
147
|
+
const u = typeof t == "function" ? { each: t } : t;
|
|
148
|
+
if (typeof u.each != "function") throw "参数错误,缺少遍历回调函数(each)";
|
|
149
|
+
let f = u.limit || 1, o = !1, s, a = [];
|
|
150
|
+
async function c() {
|
|
151
|
+
for (; n < i.length && !o && !s; ) {
|
|
152
|
+
let l = i[n++], h = e[l];
|
|
153
|
+
try {
|
|
154
|
+
let p = await u.each.call(r || h, h, l, e, [l]);
|
|
155
|
+
o = o || p === !1;
|
|
156
|
+
} catch (p) {
|
|
157
|
+
s = p;
|
|
158
|
+
}
|
|
160
159
|
}
|
|
161
|
-
!f && !o && n >= i.length && s.over && s.over();
|
|
162
160
|
}
|
|
163
|
-
|
|
161
|
+
for (let l = 0; l < f; l++)
|
|
162
|
+
a.push(c());
|
|
163
|
+
return Promise.all(a).then(() => {
|
|
164
|
+
if (typeof u.over == "function" && u.over(), s) throw s;
|
|
165
|
+
});
|
|
164
166
|
}
|
|
165
|
-
function
|
|
166
|
-
function
|
|
167
|
-
let
|
|
168
|
-
for (const c in
|
|
169
|
-
if (!
|
|
170
|
-
let
|
|
171
|
-
if (a = r.call(n ||
|
|
172
|
-
let
|
|
173
|
-
|
|
167
|
+
function I(e, t, r, i, n) {
|
|
168
|
+
function u(f, o) {
|
|
169
|
+
let s = [], a = !0;
|
|
170
|
+
for (const c in f) {
|
|
171
|
+
if (!f.hasOwnProperty(c)) continue;
|
|
172
|
+
let l = f[c];
|
|
173
|
+
if (a = r.call(n || l, l, c, f, o.concat(c)), a && l && typeof l == "object") {
|
|
174
|
+
let h = t ? l[t] : l;
|
|
175
|
+
h && typeof h == "object" && (i ? s.push({ child: h, ks: o.concat(c) }) : a = u(h, o.concat(c)));
|
|
174
176
|
}
|
|
175
177
|
if (a === !1) break;
|
|
176
178
|
}
|
|
177
|
-
for (let c = 0; c <
|
|
178
|
-
let
|
|
179
|
-
if (a =
|
|
179
|
+
for (let c = 0; c < s.length; c++) {
|
|
180
|
+
let l = s[c];
|
|
181
|
+
if (a = u(l.child, l.ks), a === !1) break;
|
|
180
182
|
}
|
|
181
183
|
return a;
|
|
182
184
|
}
|
|
183
|
-
|
|
185
|
+
u(e, []);
|
|
184
186
|
}
|
|
185
|
-
function D(
|
|
186
|
-
let
|
|
187
|
-
return !
|
|
187
|
+
function D(e) {
|
|
188
|
+
let t = {};
|
|
189
|
+
return !e || typeof e != "string" || e.split("&").forEach(function(r) {
|
|
188
190
|
let i = r.split("=");
|
|
189
191
|
if (!i[0]) return;
|
|
190
|
-
let n = decodeURIComponent(i[1] || ""),
|
|
191
|
-
for (let
|
|
192
|
-
let a = s
|
|
193
|
-
if (
|
|
192
|
+
let n = decodeURIComponent(i[1] || ""), u = decodeURIComponent(i[0]).split("]"), f = [];
|
|
193
|
+
for (let s = 0; s < u.length; s++) {
|
|
194
|
+
let a = u[s];
|
|
195
|
+
if (s === 0) {
|
|
194
196
|
let c = a.match(/^([^\[]+)(\[[\s\S.]*)?$/);
|
|
195
|
-
c && (
|
|
197
|
+
c && (f.push(c[1]), c[2] && f.push(c[2].substring(1)));
|
|
196
198
|
} else if (a)
|
|
197
|
-
|
|
199
|
+
f.push(a.substring(1));
|
|
198
200
|
else
|
|
199
201
|
break;
|
|
200
202
|
}
|
|
201
|
-
let
|
|
202
|
-
|
|
203
|
-
if (
|
|
203
|
+
let o = t;
|
|
204
|
+
f.forEach(function(s, a) {
|
|
205
|
+
if (s = s || (function() {
|
|
204
206
|
var c = -1;
|
|
205
|
-
return Object.keys(
|
|
206
|
-
let
|
|
207
|
-
/^\d+$/.test(
|
|
207
|
+
return Object.keys(o).forEach(function(l) {
|
|
208
|
+
let h = Number(l);
|
|
209
|
+
/^\d+$/.test(l) && h > c && (c = h);
|
|
208
210
|
}), String(c + 1);
|
|
209
|
-
})(), a ==
|
|
210
|
-
|
|
211
|
+
})(), a == f.length - 1)
|
|
212
|
+
o[s] = n;
|
|
211
213
|
else {
|
|
212
|
-
let c =
|
|
213
|
-
|
|
214
|
+
let c = f[a + 1] == "" || /^\d+$/.test(f[a + 1]);
|
|
215
|
+
o[s] = typeof o[s] < "u" ? o[s] : c ? [] : {}, o = o[s];
|
|
214
216
|
}
|
|
215
217
|
});
|
|
216
|
-
}),
|
|
218
|
+
}), t;
|
|
217
219
|
}
|
|
218
|
-
function E(
|
|
219
|
-
if (!
|
|
220
|
-
if (typeof
|
|
221
|
-
let
|
|
222
|
-
if (
|
|
223
|
-
for (let r of
|
|
224
|
-
|
|
220
|
+
function E(e) {
|
|
221
|
+
if (!e) return "";
|
|
222
|
+
if (typeof e == "string") return e;
|
|
223
|
+
let t = [];
|
|
224
|
+
if (e instanceof FormData)
|
|
225
|
+
for (let r of e.entries())
|
|
226
|
+
t.push(encodeURIComponent(r[0]) + "=" + encodeURIComponent(String(r[1])));
|
|
225
227
|
else
|
|
226
|
-
|
|
228
|
+
I(e, "", function(r, i, n, u) {
|
|
227
229
|
if (typeof r != "object") {
|
|
228
|
-
let
|
|
229
|
-
|
|
230
|
+
let f = u.map((o, s) => s > 0 ? "[" + encodeURIComponent(o) + "]" : encodeURIComponent(o)).join("");
|
|
231
|
+
t.push(f + "=" + encodeURIComponent(r));
|
|
230
232
|
}
|
|
231
233
|
return !0;
|
|
232
234
|
});
|
|
233
|
-
return
|
|
235
|
+
return t.join("&");
|
|
234
236
|
}
|
|
235
|
-
function
|
|
236
|
-
if (!
|
|
237
|
+
function N(e, t = 64) {
|
|
238
|
+
if (!e) return "";
|
|
237
239
|
let r = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-";
|
|
238
|
-
|
|
239
|
-
let i = JSON.stringify(
|
|
240
|
-
for (let
|
|
241
|
-
for (let
|
|
242
|
-
|
|
243
|
-
n += r[
|
|
240
|
+
t = t && t > 1 && t <= 64 ? Number(t) : 64;
|
|
241
|
+
let i = JSON.stringify(e).replace(/\"/g, ""), n = "", u = 0;
|
|
242
|
+
for (let f = 0; f < t; f++) {
|
|
243
|
+
for (let o = f; o < i.length; o += t)
|
|
244
|
+
u += i.charCodeAt(o);
|
|
245
|
+
n += r[u % t], u = Math.floor(u / t);
|
|
244
246
|
}
|
|
245
247
|
return n;
|
|
246
248
|
}
|
|
247
|
-
function F(
|
|
248
|
-
if (typeof
|
|
249
|
-
(
|
|
250
|
-
for (const i in
|
|
251
|
-
let n = i.split("."),
|
|
252
|
-
if (!
|
|
253
|
-
let
|
|
254
|
-
n.forEach(function(
|
|
255
|
-
(
|
|
256
|
-
}), u
|
|
249
|
+
function F(e, t, r) {
|
|
250
|
+
if (typeof t == "object" && t) {
|
|
251
|
+
(e === null || typeof e != "object") && (e = {});
|
|
252
|
+
for (const i in t) {
|
|
253
|
+
let n = i.split("."), u = n.pop();
|
|
254
|
+
if (!u) continue;
|
|
255
|
+
let f = t[i], o = e;
|
|
256
|
+
n.forEach(function(s, a) {
|
|
257
|
+
(o[s] === null || typeof o[s] != "object") && (o[s] = {}), o = o[s];
|
|
258
|
+
}), o[u] = f;
|
|
257
259
|
}
|
|
258
|
-
return
|
|
260
|
+
return e;
|
|
259
261
|
} else {
|
|
260
|
-
let i =
|
|
261
|
-
for (let
|
|
262
|
-
let
|
|
262
|
+
let i = t ? d(t).split(".") : [], n = e;
|
|
263
|
+
for (let u = 0; u < i.length; u++) {
|
|
264
|
+
let f = i[u];
|
|
263
265
|
if (n === null || typeof n > "u") return r;
|
|
264
|
-
n = n[
|
|
266
|
+
n = n[f];
|
|
265
267
|
}
|
|
266
268
|
return n === null || typeof n > "u" ? r : n;
|
|
267
269
|
}
|
|
268
270
|
}
|
|
269
|
-
function j(
|
|
270
|
-
function i(
|
|
271
|
-
let c =
|
|
272
|
-
if (
|
|
273
|
-
|
|
271
|
+
function j(e, t = "", r) {
|
|
272
|
+
function i(o, s, a) {
|
|
273
|
+
let c = o.match(/\d+/g) || [], l = [];
|
|
274
|
+
if (s)
|
|
275
|
+
s = s.replace(/\\[ymdhis]/ig, ""), l = s.match(/[ymdhis]/ig) || [];
|
|
274
276
|
else {
|
|
275
277
|
let g = c.findIndex((m) => Number(m) > 1e3);
|
|
276
278
|
if (g === 0)
|
|
277
|
-
|
|
279
|
+
l = ["y", "m", "d", "h", "i", "s"];
|
|
278
280
|
else if (g === 2)
|
|
279
|
-
|
|
281
|
+
l = ["d", "m", "y", "h", "i", "s"];
|
|
280
282
|
else
|
|
281
283
|
throw new Error("日期异常");
|
|
282
284
|
}
|
|
283
|
-
let
|
|
284
|
-
|
|
285
|
-
|
|
285
|
+
let h = {};
|
|
286
|
+
l.forEach((g, m) => {
|
|
287
|
+
h[g.toLowerCase()] = Number(c[m] || 0);
|
|
286
288
|
});
|
|
287
289
|
let p = /* @__PURE__ */ new Date(), y = { y: "setUTCFullYear", m: "setUTCMonth", d: "setUTCDate", h: "setUTCHours", i: "setUTCMinutes", s: "setUTCSeconds" };
|
|
288
290
|
return Object.keys(y).forEach((g) => {
|
|
289
|
-
|
|
291
|
+
h[g] = h[g] || 0, g === "m" && h[g] === 0 && (h[g] = 1);
|
|
290
292
|
let m = y[g];
|
|
291
|
-
p[m](g === "m" ?
|
|
292
|
-
}),
|
|
293
|
+
p[m](g === "m" ? h[g] - 1 : h[g]);
|
|
294
|
+
}), h.w = p.getUTCDay(), h.timestamp = p.getTime() - a, h;
|
|
293
295
|
}
|
|
294
|
-
function n(
|
|
295
|
-
const c = new Date(
|
|
296
|
-
function
|
|
296
|
+
function n(o, s, a) {
|
|
297
|
+
const c = new Date(o + a);
|
|
298
|
+
function l(y) {
|
|
297
299
|
return y < 10 ? "0" + y : y;
|
|
298
300
|
}
|
|
299
|
-
let
|
|
301
|
+
let h = {
|
|
300
302
|
y: c.getUTCFullYear(),
|
|
301
303
|
m: c.getUTCMonth() + 1,
|
|
302
304
|
d: c.getUTCDate(),
|
|
@@ -306,19 +308,19 @@ function j(t, e = "", r) {
|
|
|
306
308
|
w: c.getUTCDay(),
|
|
307
309
|
string: ""
|
|
308
310
|
}, p = {
|
|
309
|
-
...
|
|
310
|
-
W: ["日", "一", "二", "三", "四", "五", "六"][
|
|
311
|
-
w: ["7", "1", "2", "3", "4", "5", "6"][
|
|
311
|
+
...h,
|
|
312
|
+
W: ["日", "一", "二", "三", "四", "五", "六"][h.w],
|
|
313
|
+
w: ["7", "1", "2", "3", "4", "5", "6"][h.w]
|
|
312
314
|
};
|
|
313
|
-
return p.Y = p.y, p.M =
|
|
314
|
-
let
|
|
315
|
-
for (let
|
|
316
|
-
|
|
317
|
-
return
|
|
318
|
-
}).replace(/\\([YMDHISWymdhisw])/g, "$1"),
|
|
315
|
+
return p.Y = p.y, p.M = l(p.m), p.D = l(p.d), p.H = l(p.h), p.I = l(p.i), p.S = l(p.s), h.string = s.replace(/(^|[^\\])([YMDHISWymdhisw]+)/g, function(y, g, m) {
|
|
316
|
+
let C = g;
|
|
317
|
+
for (let w = 0; w < m.length; w++)
|
|
318
|
+
C += p[m[w]];
|
|
319
|
+
return C;
|
|
320
|
+
}).replace(/\\([YMDHISWymdhisw])/g, "$1"), h;
|
|
319
321
|
}
|
|
320
322
|
r = Number(r), isNaN(r) && (r = -(/* @__PURE__ */ new Date()).getTimezoneOffset() / 60);
|
|
321
|
-
const
|
|
323
|
+
const u = r * 3600 * 1e3, f = {
|
|
322
324
|
timestamp: NaN,
|
|
323
325
|
y: NaN,
|
|
324
326
|
m: NaN,
|
|
@@ -330,47 +332,47 @@ function j(t, e = "", r) {
|
|
|
330
332
|
string: "",
|
|
331
333
|
zone: r
|
|
332
334
|
};
|
|
333
|
-
if (
|
|
334
|
-
let
|
|
335
|
-
Object.assign(
|
|
336
|
-
} else typeof
|
|
337
|
-
return
|
|
335
|
+
if (e instanceof Date) {
|
|
336
|
+
let o = e.getTime();
|
|
337
|
+
Object.assign(f, n(o, t, u)), f.timestamp = o;
|
|
338
|
+
} else typeof e == "number" ? (Object.assign(f, n(e, t, u)), f.timestamp = e) : typeof e == "string" && (Object.assign(f, i(e, t, u)), f.string = e);
|
|
339
|
+
return f;
|
|
338
340
|
}
|
|
339
341
|
const _ = {
|
|
340
342
|
__event_list: {},
|
|
341
|
-
on(
|
|
342
|
-
if (!
|
|
343
|
-
let i = _.__event_list[
|
|
344
|
-
r ? i.unshift(
|
|
343
|
+
on(e, t, r) {
|
|
344
|
+
if (!e || typeof e != "string" || typeof t != "function") return;
|
|
345
|
+
let i = _.__event_list[e] || [];
|
|
346
|
+
r ? i.unshift(t) : i.push(t), _.__event_list[e] = i;
|
|
345
347
|
},
|
|
346
|
-
off(
|
|
347
|
-
if (!(!
|
|
348
|
-
if (typeof
|
|
349
|
-
let r = _.__event_list[
|
|
350
|
-
i !== -1 && r.splice(i, 1), _.__event_list[
|
|
351
|
-
} else typeof
|
|
348
|
+
off(e, t) {
|
|
349
|
+
if (!(!e || typeof e != "string"))
|
|
350
|
+
if (typeof t == "function") {
|
|
351
|
+
let r = _.__event_list[e] || [], i = r.indexOf(t);
|
|
352
|
+
i !== -1 && r.splice(i, 1), _.__event_list[e] = r;
|
|
353
|
+
} else typeof t > "u" && (_.__event_list[e] = []);
|
|
352
354
|
},
|
|
353
|
-
emit(
|
|
354
|
-
if (!
|
|
355
|
-
let i = _.__event_list[
|
|
356
|
-
for (let n = 0; n < i.length && i[n].call(r,
|
|
355
|
+
emit(e, t, r) {
|
|
356
|
+
if (!e || typeof e != "string") return;
|
|
357
|
+
let i = _.__event_list[e] || [];
|
|
358
|
+
for (let n = 0; n < i.length && i[n].call(r, t) !== !1; n++)
|
|
357
359
|
;
|
|
358
360
|
}
|
|
359
361
|
};
|
|
360
362
|
export {
|
|
361
|
-
|
|
362
|
-
|
|
363
|
+
T as Cache,
|
|
364
|
+
U as Queue,
|
|
363
365
|
j as date,
|
|
364
366
|
x as each,
|
|
365
|
-
|
|
366
|
-
|
|
367
|
+
I as eachloop,
|
|
368
|
+
N as encode,
|
|
367
369
|
_ as event_manage,
|
|
368
370
|
F as map,
|
|
369
371
|
D as param_decode,
|
|
370
372
|
E as param_encode,
|
|
371
373
|
O as path,
|
|
372
374
|
d as to_string,
|
|
373
|
-
|
|
374
|
-
|
|
375
|
+
v as trim,
|
|
376
|
+
b as var_type
|
|
375
377
|
};
|
|
376
378
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["function isPromise(obj:any){\n return obj && typeof obj == 'object' && typeof obj.then == 'function';\n}\n\nclass Queue{\n list = [] as {callback:()=>any, thisArg:any}[];\n running = 0;\n limit = 1;\n status = 0; // 0,停止,1开始\n\n /**\n * 构建队列\n * @param {number} [limit] 同时执行的槽位数量限制,默认为:1\n * @param {boolean} [start] 构建好后,是否直接开始队列\n * @returns {Queue}\n */\n constructor(limit?:number, start?:boolean) {\n this.limit = limit || 1;\n\n if (start) this.start()\n return this;\n }\n __run(){\n while (this.status===1 && this.running < this.limit){\n let row = this.list.shift();\n if (!row) break;\n let {callback, thisArg} = row;\n let res = callback.call(thisArg);\n\n if (isPromise(res)){\n this.running++;\n res.then(()=>{\n this.running--;\n this.__run();\n })\n }\n }\n return this;\n }\n\n /**\n * 插入执行\n * @param {function} callback 回调函数,如果返回 Promise ,会占用执行槽位直到 Promise 兑现\n * @param {any} thisArg 执行时的this对象\n * @returns {Queue}\n */\n add(callback:()=>any, thisArg:any){\n if(typeof(callback)!=='function') return this;\n this.list.push({callback, thisArg});\n return this.__run();\n }\n start(){\n this.status = 1;\n return this.__run();\n }\n stop(){\n this.status = 0;\n }\n}\n\ntype TypeCacheEngine = {\n getItem:(name:string)=>string|Promise<string>,\n setItem:(name:string, data:string)=>Promise<any>,\n removeItem?:(name:string)=>Promise<any>,\n clear?:()=>any\n}\n\nclass Cache{\n Storage:TypeCacheEngine;\n /**\n * 构建缓存器,传入缓存引擎对象,\n * @param { {getItem:(name:string)=>string|Promise<string>, setItem:(name:string, data:any)=>Promise<any>, removeItem?:(name:string)=>Promise<any>, clear?:()=>any } } engine\n */\n constructor(engine:TypeCacheEngine) {\n if (typeof(engine)!=\"object\" || typeof(engine.getItem)!='function' || typeof(engine.setItem)!='function'){\n throw new Error('缓存引擎必须为对象,并且包含方法:getItem、setItem');\n }\n this.Storage = engine;\n }\n\n /**\n * 获取缓存\n * @param {any} name 缓存名\n * @param {any} def 默认值\n * @returns {any | Promise<any>} 由引擎的 getItem 确定是否返回 Promise\n */\n get(name:any, def?:any){\n const cache_name = 's94_cache-'+encode(name);\n const str = this.Storage.getItem(cache_name);\n function _get(str:string, def:any){\n try {\n var data = JSON.parse(str);\n if(!data || typeof(data)!=='object') return def;\n if( data['expire'] !== -1 && data['expire'] < (new Date).getTime() ) return def;\n return data['main'];\n } catch (error) {\n return def;\n }\n }\n if (typeof str === 'string'){\n return _get(str, def);\n }else {\n return str.then(v=>_get(v, def))\n }\n }\n /**\n * 设定缓存\n * @param {any} name 缓存名称\n * @param {any} value 缓存值\n * @param {number} timeout 过期时间(毫秒),默认或者小于0,表示永久\n * @returns {Promise<any>}\n */\n set(name:any, value:any, timeout?:number){\n timeout = timeout && timeout>0 ? Number(timeout) : -1;\n let expire = timeout === -1 ? -1 : (new Date).getTime() + timeout;\n\n const cache_name = 's94_cache-'+encode(name);\n const data = JSON.stringify({main:value, expire, name});\n return Promise.resolve(this.Storage.setItem(cache_name, data));\n }\n\n /**\n * 移除缓存\n * @param {string} name\n * @returns {Promise<any>}\n */\n remove(name:any){\n const cache_name = 's94_cache-'+encode(name);\n if(typeof(this.Storage.removeItem) === 'function') {\n return Promise.resolve( this.Storage.removeItem(cache_name) );\n }else {\n return Promise.resolve( this.Storage.getItem(cache_name) ).then((res)=>{\n if (res) {\n // 如果有缓存数据,就设定一个保证过期的数据替换\n const data = JSON.stringify({main:'', expire:1, name});\n return this.Storage.setItem(cache_name, data);\n }\n return res\n })\n }\n }\n\n /**\n * 清理缓存,如果引擎存在 clear 方法,\n * @returns {Promise<any>}\n */\n clear(){\n if (typeof(this.Storage.clear) === 'function'){\n return Promise.resolve( this.Storage.clear() );\n }\n }\n}\n\n\n/**\n * 返回参数的类型,例如 Object,Date\n * @param {any} obj\n * @returns {string}\n */\nfunction var_type(obj:any){\n const str = Object.prototype.toString.call(obj);\n return str.substring(8,str.length-1);\n}\n/**\n * 转字符串\n * @param {any} val\n * @returns {string}\n */\nfunction to_string(val:any):string{\n if (typeof val === 'string') return val;\n try {\n return val.toString();\n } catch (e) {\n return '';\n }\n}\n/**\n * 去除字符串两边的空白\n * @param {string} str\n * @param {string} [mask] 额外需要去除的字符串\n * @returns {string}\n */\nfunction trim(str:string, mask?:string) {\n str = to_string(str)\n if (!str) return \"\";\n if (typeof str.trim === 'function' && !mask) {\n return str.trim();\n }\n mask = to_string(mask)\n if (mask) mask = mask.replace(/([\\$\\(\\)\\*\\+\\?\\.\\[\\]\\\\\\^\\{\\}\\|]){1}/g, '\\\\$1');\n let reg_code = `^[\\\\s\\\\uFEFF\\\\xA0${mask}]+|[\\\\s\\\\uFEFF\\\\xA0${mask}]+$`\n return str.replace(new RegExp(reg_code, 'g'), '');\n}\n/**\n * 计算相对路径\n * @param {string} path\n * @param {string} base\n * @returns {*|string}\n */\nfunction path(path:string, base:string){\n if (!base || path.indexOf('/')===0) return path;\n base = to_string(base);\n var base_arr = base.split(/\\\\|\\//);\n base_arr.pop();\n for (var i=0,path_arr = path.split(/\\\\|\\//); i<path_arr.length; i++) {\n switch (path_arr[i]){\n case '.':break;\n case '..':base_arr.pop();break;\n default:base_arr.push(path_arr[i]);break;\n }\n }\n return base_arr.join(~base.indexOf('\\\\') ? '\\\\' : '/');\n}\n\n\ntype TypeEachCallback = (v:any, k:string, obj:Object, ks:string[])=>any\ntype TypeEachOption = {\n each: TypeEachCallback,\n over?: ()=>any,\n limit?: number\n}\n/**\n * 遍历对象\n * @param {Object} obj\n * @param { TypeEachOption | (v:any, k:string, obj:Object)=>any } op 遍历回调函数 或者 包含遍历回调的配置\n * @param {any} [thisArg] 回调函数的this对象\n */\nfunction each(obj:Object, op:TypeEachOption|TypeEachCallback, thisArg?:any) {\n let ks = Object.keys(obj), index=0;\n const option = typeof op == 'function' ? {each: op} : op;\n if (typeof option.each != 'function') throw '参数错误,缺少遍历回调函数(each)';\n option.over = typeof option.over == 'function' ? option.over : function (){}\n let runing = 0, limit = option.limit || 1, is_break = false;\n\n function __run(){\n while (runing < limit && index < ks.length && !is_break){\n // @ts-ignore\n let k = ks[index++], v = obj[k];\n let res = option.each.call( (thisArg || v), v, k, obj, [k]);\n if (res === false) {\n if(option.over) option.over()\n is_break=true;\n }else if (isPromise(res)){\n runing++;\n res.then(()=>{\n runing--;\n __run();\n }).catch(()=>{\n if(option.over) option.over();\n is_break=true;\n })\n }\n }\n if (!is_break && !runing && index >= ks.length && option.over) option.over()\n }\n __run();\n}\n\n\n/**\n * 递归遍历\n * @param {Object} obj 遍历的对象\n * @param {string} childkey 递归遍历子对象的参数名,如果为空表示遍历整个子对象\n * @param { (v:any, k:string, obj:Object, ks:string[])=>any } callback 遍历回调函数\n * @param {boolean} [is_layer] 是否按层结构(0,1,00,01,10...)递归,false表示按树结构(0,00,01,1,10...)\n * @param {any} [thisArg] 遍历回调的this,默认为子对象\n */\nfunction eachloop(obj:Object, childkey:string, callback:TypeEachCallback, is_layer?:boolean, thisArg?:any) {\n function loop(obj:Object, ks:string[]):boolean|any\n {\n let next_layer = [];\n let res:any = true;\n for (const k in obj) {\n if (!obj.hasOwnProperty(k)) continue;\n // @ts-ignore\n let row = obj[k];\n res = callback.call( (thisArg || row), row, k, obj, ks.concat(k) );\n if (res && row && typeof(row)==\"object\") {\n let child = childkey ? row[childkey] : row;\n if (child && typeof(child)==\"object\") {\n if (is_layer){\n next_layer.push({child:child, ks:ks.concat(k)})\n }else {\n res = loop(child, ks.concat(k));\n }\n }\n }\n if (res === false) break;\n }\n for (let i = 0; i < next_layer.length; i++) {\n let row = next_layer[i];\n res = loop(row.child, row.ks);\n if (res === false) break;\n }\n return res;\n }\n loop(obj, [])\n}\n/**\n * url查询参数解码\n * @param {string} str url查询参数字符串,例如:a=1&b[]=2&b[]=3\n * @returns {{[key:string]: string|Object}}\n */\nfunction param_decode(str:string){\n let res = {};\n if (!str || typeof str !== 'string') return res;\n str.split('&').forEach(function (row){\n let kv = row.split('=');\n if (!kv[0]) return;\n let val = decodeURIComponent(kv[1] || '');\n let arr = decodeURIComponent(kv[0]).split(']'), ks=[];\n for (let i = 0; i < arr.length; i++) {\n let row = arr[i];\n if (i===0){\n let ms = row.match(/^([^\\[]+)(\\[[\\s\\S.]*)?$/);\n if (ms){\n ks.push(ms[1]);\n if (ms[2]) ks.push(ms[2].substring(1));\n }\n }else if(row){\n ks.push(row.substring(1));\n }else {\n break;\n }\n }\n let cache:{[k:string]:any} = res;\n ks.forEach(function (k,i){\n k = k || (function(){\n var ki=-1;\n Object.keys(cache).forEach(function(row){\n let num = Number(row)\n if(/^\\d+$/.test(row) && num>ki) ki = num;\n })\n return String(ki+1);\n })();\n if (i == ks.length-1){\n cache[k] = val;\n }else {\n let is_arr = ks[i+1] == '' || /^\\d+$/.test(ks[i+1]);\n cache[k] = typeof(cache[k])!=\"undefined\" ? cache[k] : (is_arr ? [] : {});\n cache = cache[k];\n }\n })\n })\n return res;\n}\n/**\n * url查询参数编码\n * @param {Object} obj 数据对象\n * @returns {string}\n */\nfunction param_encode(obj:any){\n if (!obj) return '';\n if(typeof(obj)=='string') return obj;\n let param_arr = [];\n if (obj instanceof FormData){\n for(let pair of obj.entries()) {\n param_arr.push(encodeURIComponent(pair[0]) + '=' + encodeURIComponent(String(pair[1])) );\n }\n }else{\n eachloop(obj, '', function (row, k, all, ks){\n if(typeof(row) !== \"object\") {\n let name = ks.map((v,i)=>{ return i>0 ? '['+encodeURIComponent(v)+']' : encodeURIComponent(v); }).join('');\n param_arr.push(name + '=' + encodeURIComponent(row));\n }\n return true;\n })\n }\n return param_arr.join('&');\n}\n/**\n * 数据签名\n * @param {any} data 数据\n * @param {number} len 长度, 默认64\n * @returns {string}\n */\nfunction encode(data:any, len=64){\n if (!data) return '';\n let strmap = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-';\n len = len && len>1 && len<=64 ? Number(len) : 64;\n let str = JSON.stringify(data).replace(/\\\"/g,'');\n let res = '', vi = 0;\n for (let j = 0; j < len; j++) {\n for (let i = j; i < str.length; i+=len) {\n vi += str.charCodeAt(i);\n }\n let v = vi%len;\n res += strmap[vi%len];\n vi = Math.floor(vi/len);\n }\n return res;\n}\n/**\n * 对象的指定值获取 或者 设定\n * @param {any} data 数据源\n * @param {string|{[key:string]: any}} key_data 获取的键,或者设定数据的键值对\n * @param {any} def 值不存在的默认值\n * @returns {*}\n */\nfunction map(data:any, key_data:string|{[key:string]: any}, def?:any){\n if (typeof(key_data) == 'object' && key_data){\n if(data === null || typeof data !== 'object') data = {};\n for (const key in key_data) {\n let key_arr = key.split('.');\n let k_last = key_arr.pop();\n if (!k_last) continue;\n let v = key_data[key];\n let cache_data = data;\n key_arr.forEach(function (k, i){\n if (cache_data[k] === null || typeof cache_data[k] !== 'object'){\n cache_data[k] = {}\n }\n cache_data = cache_data[k];\n })\n cache_data[k_last] = v;\n }\n return data;\n }else {\n let key_arr = key_data ? to_string(key_data).split('.') : [];\n let res = data;\n for (let i = 0; i < key_arr.length; i++) {\n let k = key_arr[i];\n if (res === null || typeof res === 'undefined') return def;\n res = res[k];\n }\n if (res === null || typeof res === 'undefined') return def;\n return res;\n }\n}\n\ntype TypeDateReturn = {\n timestamp: number,\n y: number,\n m: number,\n d: number,\n h: number,\n i: number,\n s: number,\n w: number,\n string: string,\n zone: number,\n}\n/**\n * 日期处理\n * @param {string|number|Date} date 日期,可以是字符串、时间戳(毫秒)\n * @param {string} fmt 日期字符串格式,如果data为字符串,然后fmt为空,那么会推定日期为 年月日时分秒、日月年时分秒 中的一种\n * @param {number} [zone] 时区,东正,西负。-12~12\n * @returns {{timestamp: number, y: number, m: number, d: number, h: number, i: number, s: number, w: number, string: string, zone: number}}\n */\nfunction date(date:string|number|Date, fmt:string='', zone?:number){\n function utc_date(str:string, fmt:string, utc_offset:number){\n // 宽松的日期解析,按 fmt 指定的标识顺序位置的数字\n let number_arr = str.match(/\\d+/g) || [];\n let key_arr:string[] = []\n if (fmt){\n fmt = fmt.replace(/\\\\[ymdhis]/ig, ''); // 排除掉 \\Y 之类的转义字符\n key_arr = fmt.match(/[ymdhis]/ig) || [];\n } else {\n // 没有指定 fmt 的情况下,根据年(值>1000)所在位置判断,分两种情况:年月日时分秒、日月年时分秒\n let year_index = number_arr.findIndex(v=>Number(v)>1000)\n if (year_index === 0){\n key_arr = ['y','m','d','h','i','s']\n }else if (year_index === 2){\n key_arr = ['d','m','y','h','i','s']\n }else {\n throw new Error('日期异常')\n }\n }\n let value_map:{[k:string]: number} = {}\n key_arr.forEach((k, i)=>{\n value_map[k.toLowerCase()] = Number(number_arr[i] || 0)\n })\n let date = new Date()\n let function_map = { y:'setUTCFullYear',m:'setUTCMonth',d:'setUTCDate',h:'setUTCHours',i:'setUTCMinutes',s:'setUTCSeconds' };\n Object.keys(function_map).forEach(k=>{\n value_map[k] = value_map[k] || 0;\n if (k === 'm' && value_map[k] === 0){\n // 月的默认值应该是 1 不是 0\n value_map[k] = 1\n }\n // @ts-ignore\n let function_name = function_map[k]\n // @ts-ignore\n date[function_name]( k==='m' ? value_map[k]-1 : value_map[k] );\n })\n value_map.w = date.getUTCDay();\n // 时区转换,例如:在东8时区传入的是1970 年 1 月 1 日 08:00:00。因为使用的是 setUTCHours ,得到的 date.getTime() = 8*60*1000,\n value_map.timestamp = date.getTime() - utc_offset;\n return value_map;\n }\n function format_time(timestamp:number, fmt:string, utc_offset:number){\n const time = new Date(timestamp + utc_offset)\n function add0(n:any){ return n < 10 ? ('0' + n) : n}\n let res = {\n y: time.getUTCFullYear(),\n m: time.getUTCMonth() + 1,\n d: time.getUTCDate(),\n h: time.getUTCHours(),\n i: time.getUTCMinutes(),\n s: time.getUTCSeconds(),\n w: time.getUTCDay(),\n string: ''\n }\n let v:{[k:string]: any} = {\n ...res,\n W: ['日','一','二','三','四','五','六'][res.w],\n w: ['7','1','2','3','4','5','6'][res.w],\n }\n v.Y = v.y; v.M = add0(v.m); v.D = add0(v.d); v.H = add0(v.h); v.I = add0(v.i); v.S = add0(v.s);\n res.string = fmt.replace(/(^|[^\\\\])([YMDHISWymdhisw]+)/g, function(m,m1,m2){\n let str = m1;\n for(let i=0; i<m2.length; i++ ){\n str += v[m2[i]];\n }\n return str;\n }).replace(/\\\\([YMDHISWymdhisw])/g, \"$1\");\n return res;\n }\n\n zone = Number(zone);\n // utc需要偏移多少毫秒后,才能得到和指定时区相同的日期,例如:东8时区8点时,utc得到的是0点,需要+480分钟后,utc得到的才是8点,那么 utc_offset=480*60*1000\n // 即:(new Date(时间戳)).getHours() == (new Date(时间戳 + utc_offset)).getUTCHours()\n if (isNaN(zone)){\n zone = -(new Date()).getTimezoneOffset()/60\n }\n const utc_offset = zone*3600*1000;\n\n const res:TypeDateReturn = {\n timestamp: NaN,\n y: NaN,\n m: NaN,\n d: NaN,\n h: NaN,\n i: NaN,\n s: NaN,\n w: NaN,\n string: '',\n zone,\n }\n if (date instanceof Date){\n let timestamp = date.getTime();\n Object.assign(res, format_time(timestamp, fmt, utc_offset))\n res.timestamp = timestamp;\n }else if (typeof date === 'number'){\n Object.assign(res, format_time(date, fmt, utc_offset))\n res.timestamp = date;\n }else if (typeof date === 'string'){\n Object.assign(res, utc_date(date, fmt, utc_offset))\n res.string = date;\n }\n return res;\n}\n\n/**\n * 事件管理,on,off,emit\n */\nconst event_manage = {\n __event_list: {} as {[k:string]: ((data?:any)=>any)[]},\n on(event_name:string, callback:(data?:any)=>any, first?:any){\n if (!event_name || typeof event_name !== 'string') return;\n if (typeof callback !== 'function') return;\n let list = event_manage.__event_list[event_name] || [];\n first ? list.unshift(callback) : list.push(callback);\n event_manage.__event_list[event_name] = list;\n },\n off(event_name:string, callback:(data?:any)=>any){\n if (!event_name || typeof event_name !== 'string') return;\n if (typeof callback === 'function'){\n let list = event_manage.__event_list[event_name] || [];\n let i = list.indexOf(callback);\n if (i !== -1) list.splice(i,1);\n event_manage.__event_list[event_name] = list;\n }else if (typeof callback === 'undefined'){\n event_manage.__event_list[event_name] = [];\n }\n },\n emit(event_name:string, data:any, thisArg?:any){\n if (!event_name || typeof event_name !== 'string') return;\n let list = event_manage.__event_list[event_name] || [];\n for (let i = 0; i < list.length; i++) {\n if (list[i].call(thisArg, data) === false) break;\n }\n },\n}\n\nexport {\n Queue,\n Cache,\n var_type,\n to_string,\n trim,\n path,\n each,\n eachloop,\n param_decode,\n param_encode,\n encode,\n map,\n date,\n event_manage,\n}"],"names":["isPromise","obj","Queue","limit","start","row","callback","thisArg","res","Cache","engine","name","def","cache_name","encode","str","_get","data","v","value","timeout","expire","var_type","to_string","val","trim","mask","reg_code","path","base","base_arr","path_arr","each","op","ks","index","option","runing","is_break","__run","k","eachloop","childkey","is_layer","loop","next_layer","child","i","param_decode","kv","arr","ms","cache","ki","num","is_arr","param_encode","param_arr","pair","all","len","strmap","vi","j","map","key_data","key","key_arr","k_last","cache_data","date","fmt","zone","utc_date","utc_offset","number_arr","year_index","value_map","function_map","function_name","format_time","timestamp","time","add0","n","m","m1","m2","event_manage","event_name","first","list"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["function isPromise(obj:any){\r\n return obj && typeof obj == 'object' && typeof obj.then == 'function';\r\n}\r\n\r\nclass Queue{\r\n list = [] as {callback:()=>any, thisArg:any}[];\r\n running = 0;\r\n limit = 1;\r\n status = 0; // 0,停止,1开始\r\n\r\n /**\r\n * 构建队列\r\n * @param {number} [limit] 同时执行的槽位数量限制,默认为:1\r\n * @param {boolean} [start] 构建好后,是否直接开始队列\r\n * @returns {Queue}\r\n */\r\n constructor(limit?:number, start?:boolean) {\r\n this.limit = limit || 1;\r\n\r\n if (start) this.start()\r\n return this;\r\n }\r\n __run(){\r\n while (this.status===1 && this.running < this.limit){\r\n let row = this.list.shift();\r\n if (!row) break;\r\n let {callback, thisArg} = row;\r\n let res = callback.call(thisArg);\r\n\r\n if (isPromise(res)){\r\n this.running++;\r\n res.then(()=>{\r\n this.running--;\r\n this.__run();\r\n })\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * 插入执行\r\n * @param {function} callback 回调函数,如果返回 Promise ,会占用执行槽位直到 Promise 兑现\r\n * @param {any} thisArg 执行时的this对象\r\n * @returns {Queue}\r\n */\r\n add(callback:()=>any, thisArg:any){\r\n if(typeof(callback)!=='function') return this;\r\n this.list.push({callback, thisArg});\r\n return this.__run();\r\n }\r\n start(){\r\n this.status = 1;\r\n return this.__run();\r\n }\r\n stop(){\r\n this.status = 0;\r\n }\r\n}\r\n\r\ntype TypeCacheEngine = {\r\n getItem:(name:string)=>string|Promise<string>,\r\n setItem:(name:string, data:string)=>Promise<any>,\r\n removeItem?:(name:string)=>Promise<any>,\r\n clear?:()=>any\r\n}\r\n\r\nclass Cache{\r\n Storage:TypeCacheEngine;\r\n /**\r\n * 构建缓存器,传入缓存引擎对象,\r\n * @param { {getItem:(name:string)=>string|Promise<string>, setItem:(name:string, data:any)=>Promise<any>, removeItem?:(name:string)=>Promise<any>, clear?:()=>any } } engine\r\n */\r\n constructor(engine:TypeCacheEngine) {\r\n if (typeof(engine)!=\"object\" || typeof(engine.getItem)!='function' || typeof(engine.setItem)!='function'){\r\n throw new Error('缓存引擎必须为对象,并且包含方法:getItem、setItem');\r\n }\r\n this.Storage = engine;\r\n }\r\n\r\n /**\r\n * 获取缓存\r\n * @param {any} name 缓存名\r\n * @param {any} def 默认值\r\n * @returns {any | Promise<any>} 由引擎的 getItem 确定是否返回 Promise\r\n */\r\n get(name:any, def?:any){\r\n const cache_name = 's94_cache-'+encode(name);\r\n const str = this.Storage.getItem(cache_name);\r\n function _get(str:string, def:any){\r\n try {\r\n var data = JSON.parse(str);\r\n if(!data || typeof(data)!=='object') return def;\r\n if( data['expire'] !== -1 && data['expire'] < (new Date).getTime() ) return def;\r\n return data['main'];\r\n } catch (error) {\r\n return def;\r\n }\r\n }\r\n if (typeof str === 'string'){\r\n return _get(str, def);\r\n }else {\r\n return str.then(v=>_get(v, def))\r\n }\r\n }\r\n /**\r\n * 设定缓存\r\n * @param {any} name 缓存名称\r\n * @param {any} value 缓存值\r\n * @param {number} timeout 过期时间(毫秒),默认或者小于0,表示永久\r\n * @returns {Promise<any>}\r\n */\r\n set(name:any, value:any, timeout?:number){\r\n timeout = timeout && timeout>0 ? Number(timeout) : -1;\r\n let expire = timeout === -1 ? -1 : (new Date).getTime() + timeout;\r\n\r\n const cache_name = 's94_cache-'+encode(name);\r\n const data = JSON.stringify({main:value, expire, name});\r\n return Promise.resolve(this.Storage.setItem(cache_name, data));\r\n }\r\n\r\n /**\r\n * 移除缓存\r\n * @param {string} name\r\n * @returns {Promise<any>}\r\n */\r\n remove(name:any){\r\n const cache_name = 's94_cache-'+encode(name);\r\n if(typeof(this.Storage.removeItem) === 'function') {\r\n return Promise.resolve( this.Storage.removeItem(cache_name) );\r\n }else {\r\n return Promise.resolve( this.Storage.getItem(cache_name) ).then((res)=>{\r\n if (res) {\r\n // 如果有缓存数据,就设定一个保证过期的数据替换\r\n const data = JSON.stringify({main:'', expire:1, name});\r\n return this.Storage.setItem(cache_name, data);\r\n }\r\n return res\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * 清理缓存,如果引擎存在 clear 方法,\r\n * @returns {Promise<any>}\r\n */\r\n clear(){\r\n if (typeof(this.Storage.clear) === 'function'){\r\n return Promise.resolve( this.Storage.clear() );\r\n }\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 返回参数的类型,例如 Object,Date\r\n * @param {any} obj\r\n * @returns {string}\r\n */\r\nfunction var_type(obj:any){\r\n const str = Object.prototype.toString.call(obj);\r\n return str.substring(8,str.length-1);\r\n}\r\n/**\r\n * 转字符串\r\n * @param {any} val\r\n * @returns {string}\r\n */\r\nfunction to_string(val:any):string{\r\n if (typeof val === 'string') return val;\r\n try {\r\n return val.toString();\r\n } catch (e) {\r\n return '';\r\n }\r\n}\r\n/**\r\n * 去除字符串两边的空白\r\n * @param {string} str\r\n * @param {string} [mask] 额外需要去除的字符串\r\n * @returns {string}\r\n */\r\nfunction trim(str:string, mask?:string) {\r\n str = to_string(str)\r\n if (!str) return \"\";\r\n if (typeof str.trim === 'function' && !mask) {\r\n return str.trim();\r\n }\r\n mask = to_string(mask)\r\n if (mask) mask = mask.replace(/([\\$\\(\\)\\*\\+\\?\\.\\[\\]\\\\\\^\\{\\}\\|]){1}/g, '\\\\$1');\r\n let reg_code = `^[\\\\s\\\\uFEFF\\\\xA0${mask}]+|[\\\\s\\\\uFEFF\\\\xA0${mask}]+$`\r\n return str.replace(new RegExp(reg_code, 'g'), '');\r\n}\r\n/**\r\n * 计算相对路径\r\n * @param {string} path\r\n * @param {string} base\r\n * @returns {*|string}\r\n */\r\nfunction path(path:string, base:string){\r\n if (!base || path.indexOf('/')===0) return path;\r\n base = to_string(base);\r\n var base_arr = base.split(/\\\\|\\//);\r\n base_arr.pop();\r\n for (var i=0,path_arr = path.split(/\\\\|\\//); i<path_arr.length; i++) {\r\n switch (path_arr[i]){\r\n case '.':break;\r\n case '..':base_arr.pop();break;\r\n default:base_arr.push(path_arr[i]);break;\r\n }\r\n }\r\n return base_arr.join(~base.indexOf('\\\\') ? '\\\\' : '/');\r\n}\r\n\r\n\r\ntype TypeEachCallback = (v:any, k:string, obj:Object, ks:string[])=>any\r\ntype TypeEachOption = {\r\n each: TypeEachCallback,\r\n over?: ()=>any,\r\n limit?: number\r\n}\r\n/**\r\n * 遍历对象\r\n * @param {Object} obj\r\n * @param { TypeEachOption | (v:any, k:string, obj:Object)=>any } op 遍历回调函数 或者 包含遍历回调的配置\r\n * @param {any} [thisArg] 回调函数的this对象\r\n */\r\nfunction each(obj:Object, op:TypeEachOption|TypeEachCallback, thisArg?:any) {\r\n let ks = Object.keys(obj), index=0;\r\n const option = typeof op == 'function' ? {each: op} : op;\r\n if (typeof option.each != 'function') throw '参数错误,缺少遍历回调函数(each)';\r\n let limit = option.limit || 1, is_break = false, error:any;\r\n let queue_list = [];\r\n async function queue_row(){\r\n while (index < ks.length && !is_break && !error){\r\n // @ts-ignore\r\n let k = ks[index++], v = obj[k];\r\n try {\r\n let res = await option.each.call((thisArg || v), v, k, obj, [k]);\r\n is_break = is_break || (res === false);\r\n } catch (e) {\r\n error = e;\r\n }\r\n }\r\n }\r\n for (let i = 0; i < limit; i++) {\r\n queue_list.push(queue_row())\r\n }\r\n return Promise.all(queue_list).then(()=>{\r\n if (typeof option.over == 'function') option.over()\r\n if (error) throw error;\r\n });\r\n}\r\n\r\n\r\n/**\r\n * 递归遍历\r\n * @param {Object} obj 遍历的对象\r\n * @param {string} childkey 递归遍历子对象的参数名,如果为空表示遍历整个子对象\r\n * @param { (v:any, k:string, obj:Object, ks:string[])=>any } callback 遍历回调函数\r\n * @param {boolean} [is_layer] 是否按层结构(0,1,00,01,10...)递归,false表示按树结构(0,00,01,1,10...)\r\n * @param {any} [thisArg] 遍历回调的this,默认为子对象\r\n */\r\nfunction eachloop(obj:Object, childkey:string, callback:TypeEachCallback, is_layer?:boolean, thisArg?:any) {\r\n function loop(obj:Object, ks:string[]):boolean|any\r\n {\r\n let next_layer = [];\r\n let res:any = true;\r\n for (const k in obj) {\r\n if (!obj.hasOwnProperty(k)) continue;\r\n // @ts-ignore\r\n let row = obj[k];\r\n res = callback.call( (thisArg || row), row, k, obj, ks.concat(k) );\r\n if (res && row && typeof(row)==\"object\") {\r\n let child = childkey ? row[childkey] : row;\r\n if (child && typeof(child)==\"object\") {\r\n if (is_layer){\r\n next_layer.push({child:child, ks:ks.concat(k)})\r\n }else {\r\n res = loop(child, ks.concat(k));\r\n }\r\n }\r\n }\r\n if (res === false) break;\r\n }\r\n for (let i = 0; i < next_layer.length; i++) {\r\n let row = next_layer[i];\r\n res = loop(row.child, row.ks);\r\n if (res === false) break;\r\n }\r\n return res;\r\n }\r\n loop(obj, [])\r\n}\r\n/**\r\n * url查询参数解码\r\n * @param {string} str url查询参数字符串,例如:a=1&b[]=2&b[]=3\r\n * @returns {{[key:string]: string|Object}}\r\n */\r\nfunction param_decode(str:string){\r\n let res = {};\r\n if (!str || typeof str !== 'string') return res;\r\n str.split('&').forEach(function (row){\r\n let kv = row.split('=');\r\n if (!kv[0]) return;\r\n let val = decodeURIComponent(kv[1] || '');\r\n let arr = decodeURIComponent(kv[0]).split(']'), ks=[];\r\n for (let i = 0; i < arr.length; i++) {\r\n let row = arr[i];\r\n if (i===0){\r\n let ms = row.match(/^([^\\[]+)(\\[[\\s\\S.]*)?$/);\r\n if (ms){\r\n ks.push(ms[1]);\r\n if (ms[2]) ks.push(ms[2].substring(1));\r\n }\r\n }else if(row){\r\n ks.push(row.substring(1));\r\n }else {\r\n break;\r\n }\r\n }\r\n let cache:{[k:string]:any} = res;\r\n ks.forEach(function (k,i){\r\n k = k || (function(){\r\n var ki=-1;\r\n Object.keys(cache).forEach(function(row){\r\n let num = Number(row)\r\n if(/^\\d+$/.test(row) && num>ki) ki = num;\r\n })\r\n return String(ki+1);\r\n })();\r\n if (i == ks.length-1){\r\n cache[k] = val;\r\n }else {\r\n let is_arr = ks[i+1] == '' || /^\\d+$/.test(ks[i+1]);\r\n cache[k] = typeof(cache[k])!=\"undefined\" ? cache[k] : (is_arr ? [] : {});\r\n cache = cache[k];\r\n }\r\n })\r\n })\r\n return res;\r\n}\r\n/**\r\n * url查询参数编码\r\n * @param {Object} obj 数据对象\r\n * @returns {string}\r\n */\r\nfunction param_encode(obj:any){\r\n if (!obj) return '';\r\n if(typeof(obj)=='string') return obj;\r\n let param_arr = [];\r\n if (obj instanceof FormData){\r\n for(let pair of obj.entries()) {\r\n param_arr.push(encodeURIComponent(pair[0]) + '=' + encodeURIComponent(String(pair[1])) );\r\n }\r\n }else{\r\n eachloop(obj, '', function (row, k, all, ks){\r\n if(typeof(row) !== \"object\") {\r\n let name = ks.map((v,i)=>{ return i>0 ? '['+encodeURIComponent(v)+']' : encodeURIComponent(v); }).join('');\r\n param_arr.push(name + '=' + encodeURIComponent(row));\r\n }\r\n return true;\r\n })\r\n }\r\n return param_arr.join('&');\r\n}\r\n/**\r\n * 数据签名\r\n * @param {any} data 数据\r\n * @param {number} len 长度, 默认64\r\n * @returns {string}\r\n */\r\nfunction encode(data:any, len=64){\r\n if (!data) return '';\r\n let strmap = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-';\r\n len = len && len>1 && len<=64 ? Number(len) : 64;\r\n let str = JSON.stringify(data).replace(/\\\"/g,'');\r\n let res = '', vi = 0;\r\n for (let j = 0; j < len; j++) {\r\n for (let i = j; i < str.length; i+=len) {\r\n vi += str.charCodeAt(i);\r\n }\r\n let v = vi%len;\r\n res += strmap[vi%len];\r\n vi = Math.floor(vi/len);\r\n }\r\n return res;\r\n}\r\n/**\r\n * 对象的指定值获取 或者 设定\r\n * @param {any} data 数据源\r\n * @param {string|{[key:string]: any}} key_data 获取的键,或者设定数据的键值对\r\n * @param {any} def 值不存在的默认值\r\n * @returns {*}\r\n */\r\nfunction map(data:any, key_data:string|{[key:string]: any}, def?:any){\r\n if (typeof(key_data) == 'object' && key_data){\r\n if(data === null || typeof data !== 'object') data = {};\r\n for (const key in key_data) {\r\n let key_arr = key.split('.');\r\n let k_last = key_arr.pop();\r\n if (!k_last) continue;\r\n let v = key_data[key];\r\n let cache_data = data;\r\n key_arr.forEach(function (k, i){\r\n if (cache_data[k] === null || typeof cache_data[k] !== 'object'){\r\n cache_data[k] = {}\r\n }\r\n cache_data = cache_data[k];\r\n })\r\n cache_data[k_last] = v;\r\n }\r\n return data;\r\n }else {\r\n let key_arr = key_data ? to_string(key_data).split('.') : [];\r\n let res = data;\r\n for (let i = 0; i < key_arr.length; i++) {\r\n let k = key_arr[i];\r\n if (res === null || typeof res === 'undefined') return def;\r\n res = res[k];\r\n }\r\n if (res === null || typeof res === 'undefined') return def;\r\n return res;\r\n }\r\n}\r\n\r\ntype TypeDateReturn = {\r\n timestamp: number,\r\n y: number,\r\n m: number,\r\n d: number,\r\n h: number,\r\n i: number,\r\n s: number,\r\n w: number,\r\n string: string,\r\n zone: number,\r\n}\r\n/**\r\n * 日期处理\r\n * @param {string|number|Date} date 日期,可以是字符串、时间戳(毫秒)\r\n * @param {string} fmt 日期字符串格式,如果data为字符串,然后fmt为空,那么会推定日期为 年月日时分秒、日月年时分秒 中的一种\r\n * @param {number} [zone] 时区,东正,西负。-12~12\r\n * @returns {{timestamp: number, y: number, m: number, d: number, h: number, i: number, s: number, w: number, string: string, zone: number}}\r\n */\r\nfunction date(date:string|number|Date, fmt:string='', zone?:number){\r\n function utc_date(str:string, fmt:string, utc_offset:number){\r\n // 宽松的日期解析,按 fmt 指定的标识顺序位置的数字\r\n let number_arr = str.match(/\\d+/g) || [];\r\n let key_arr:string[] = []\r\n if (fmt){\r\n fmt = fmt.replace(/\\\\[ymdhis]/ig, ''); // 排除掉 \\Y 之类的转义字符\r\n key_arr = fmt.match(/[ymdhis]/ig) || [];\r\n } else {\r\n // 没有指定 fmt 的情况下,根据年(值>1000)所在位置判断,分两种情况:年月日时分秒、日月年时分秒\r\n let year_index = number_arr.findIndex(v=>Number(v)>1000)\r\n if (year_index === 0){\r\n key_arr = ['y','m','d','h','i','s']\r\n }else if (year_index === 2){\r\n key_arr = ['d','m','y','h','i','s']\r\n }else {\r\n throw new Error('日期异常')\r\n }\r\n }\r\n let value_map:{[k:string]: number} = {}\r\n key_arr.forEach((k, i)=>{\r\n value_map[k.toLowerCase()] = Number(number_arr[i] || 0)\r\n })\r\n let date = new Date()\r\n let function_map = { y:'setUTCFullYear',m:'setUTCMonth',d:'setUTCDate',h:'setUTCHours',i:'setUTCMinutes',s:'setUTCSeconds' };\r\n Object.keys(function_map).forEach(k=>{\r\n value_map[k] = value_map[k] || 0;\r\n if (k === 'm' && value_map[k] === 0){\r\n // 月的默认值应该是 1 不是 0\r\n value_map[k] = 1\r\n }\r\n // @ts-ignore\r\n let function_name = function_map[k]\r\n // @ts-ignore\r\n date[function_name]( k==='m' ? value_map[k]-1 : value_map[k] );\r\n })\r\n value_map.w = date.getUTCDay();\r\n // 时区转换,例如:在东8时区传入的是1970 年 1 月 1 日 08:00:00。因为使用的是 setUTCHours ,得到的 date.getTime() = 8*60*1000,\r\n value_map.timestamp = date.getTime() - utc_offset;\r\n return value_map;\r\n }\r\n function format_time(timestamp:number, fmt:string, utc_offset:number){\r\n const time = new Date(timestamp + utc_offset)\r\n function add0(n:any){ return n < 10 ? ('0' + n) : n}\r\n let res = {\r\n y: time.getUTCFullYear(),\r\n m: time.getUTCMonth() + 1,\r\n d: time.getUTCDate(),\r\n h: time.getUTCHours(),\r\n i: time.getUTCMinutes(),\r\n s: time.getUTCSeconds(),\r\n w: time.getUTCDay(),\r\n string: ''\r\n }\r\n let v:{[k:string]: any} = {\r\n ...res,\r\n W: ['日','一','二','三','四','五','六'][res.w],\r\n w: ['7','1','2','3','4','5','6'][res.w],\r\n }\r\n v.Y = v.y; v.M = add0(v.m); v.D = add0(v.d); v.H = add0(v.h); v.I = add0(v.i); v.S = add0(v.s);\r\n res.string = fmt.replace(/(^|[^\\\\])([YMDHISWymdhisw]+)/g, function(m,m1,m2){\r\n let str = m1;\r\n for(let i=0; i<m2.length; i++ ){\r\n str += v[m2[i]];\r\n }\r\n return str;\r\n }).replace(/\\\\([YMDHISWymdhisw])/g, \"$1\");\r\n return res;\r\n }\r\n\r\n zone = Number(zone);\r\n // utc需要偏移多少毫秒后,才能得到和指定时区相同的日期,例如:东8时区8点时,utc得到的是0点,需要+480分钟后,utc得到的才是8点,那么 utc_offset=480*60*1000\r\n // 即:(new Date(时间戳)).getHours() == (new Date(时间戳 + utc_offset)).getUTCHours()\r\n if (isNaN(zone)){\r\n zone = -(new Date()).getTimezoneOffset()/60\r\n }\r\n const utc_offset = zone*3600*1000;\r\n\r\n const res:TypeDateReturn = {\r\n timestamp: NaN,\r\n y: NaN,\r\n m: NaN,\r\n d: NaN,\r\n h: NaN,\r\n i: NaN,\r\n s: NaN,\r\n w: NaN,\r\n string: '',\r\n zone,\r\n }\r\n if (date instanceof Date){\r\n let timestamp = date.getTime();\r\n Object.assign(res, format_time(timestamp, fmt, utc_offset))\r\n res.timestamp = timestamp;\r\n }else if (typeof date === 'number'){\r\n Object.assign(res, format_time(date, fmt, utc_offset))\r\n res.timestamp = date;\r\n }else if (typeof date === 'string'){\r\n Object.assign(res, utc_date(date, fmt, utc_offset))\r\n res.string = date;\r\n }\r\n return res;\r\n}\r\n\r\n/**\r\n * 事件管理,on,off,emit\r\n */\r\nconst event_manage = {\r\n __event_list: {} as {[k:string]: ((data?:any)=>any)[]},\r\n on(event_name:string, callback:(data?:any)=>any, first?:any){\r\n if (!event_name || typeof event_name !== 'string') return;\r\n if (typeof callback !== 'function') return;\r\n let list = event_manage.__event_list[event_name] || [];\r\n first ? list.unshift(callback) : list.push(callback);\r\n event_manage.__event_list[event_name] = list;\r\n },\r\n off(event_name:string, callback:(data?:any)=>any){\r\n if (!event_name || typeof event_name !== 'string') return;\r\n if (typeof callback === 'function'){\r\n let list = event_manage.__event_list[event_name] || [];\r\n let i = list.indexOf(callback);\r\n if (i !== -1) list.splice(i,1);\r\n event_manage.__event_list[event_name] = list;\r\n }else if (typeof callback === 'undefined'){\r\n event_manage.__event_list[event_name] = [];\r\n }\r\n },\r\n emit(event_name:string, data:any, thisArg?:any){\r\n if (!event_name || typeof event_name !== 'string') return;\r\n let list = event_manage.__event_list[event_name] || [];\r\n for (let i = 0; i < list.length; i++) {\r\n if (list[i].call(thisArg, data) === false) break;\r\n }\r\n },\r\n}\r\n\r\nexport {\r\n Queue,\r\n Cache,\r\n var_type,\r\n to_string,\r\n trim,\r\n path,\r\n each,\r\n eachloop,\r\n param_decode,\r\n param_encode,\r\n encode,\r\n map,\r\n date,\r\n event_manage,\r\n}"],"names":["isPromise","obj","Queue","limit","start","row","callback","thisArg","res","Cache","engine","name","def","cache_name","encode","str","_get","data","v","value","timeout","expire","var_type","to_string","val","trim","mask","reg_code","path","base","base_arr","path_arr","each","op","ks","index","option","is_break","error","queue_list","queue_row","k","e","i","eachloop","childkey","is_layer","loop","next_layer","child","param_decode","kv","arr","ms","cache","ki","num","is_arr","param_encode","param_arr","pair","all","len","strmap","vi","j","map","key_data","key","key_arr","k_last","cache_data","date","fmt","zone","utc_date","utc_offset","number_arr","year_index","value_map","function_map","function_name","format_time","timestamp","time","add0","n","m","m1","m2","event_manage","event_name","first","list"],"mappings":"AAAA,SAASA,EAAUC,GAAQ;AACvB,SAAOA,KAAO,OAAOA,KAAO,YAAY,OAAOA,EAAI,QAAQ;AAC/D;AAEA,MAAMC,EAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYP,YAAYC,GAAeC,GAAgB;AAX3C,gBAAA,OAAO,CAAA,GACP,KAAA,UAAU,GACV,KAAA,QAAQ,GACR,KAAA,SAAS,GASL,KAAK,QAAQD,KAAS,GAElBC,UAAY,MAAA,GACT;AAAA,EACX;AAAA,EACA,QAAO;AACH,WAAO,KAAK,WAAS,KAAK,KAAK,UAAU,KAAK,SAAM;AAChD,UAAIC,IAAM,KAAK,KAAK,MAAA;AACpB,UAAI,CAACA,EAAK;AACV,UAAI,EAAC,UAAAC,GAAU,SAAAC,EAAA,IAAWF,GACtBG,IAAMF,EAAS,KAAKC,CAAO;AAE/B,MAAIP,EAAUQ,CAAG,MACb,KAAK,WACLA,EAAI,KAAK,MAAI;AACT,aAAK,WACL,KAAK,MAAA;AAAA,MACT,CAAC;AAAA,IAET;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAIF,GAAkBC,GAAY;AAC9B,WAAG,OAAOD,KAAY,aAAmB,QACzC,KAAK,KAAK,KAAK,EAAC,UAAAA,GAAU,SAAAC,GAAQ,GAC3B,KAAK,MAAA;AAAA,EAChB;AAAA,EACA,QAAO;AACH,gBAAK,SAAS,GACP,KAAK,MAAA;AAAA,EAChB;AAAA,EACA,OAAM;AACF,SAAK,SAAS;AAAA,EAClB;AACJ;AASA,MAAME,EAAK;AAAA;AAAA;AAAA;AAAA;AAAA,EAMP,YAAYC,GAAwB;AAChC,QAAI,OAAOA,KAAS,YAAY,OAAOA,EAAO,WAAU,cAAc,OAAOA,EAAO,WAAU;AAC1F,YAAM,IAAI,MAAM,kCAAkC;AAEtD,SAAK,UAAUA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAIC,GAAUC,GAAS;AACnB,UAAMC,IAAa,eAAaC,EAAOH,CAAI,GACrCI,IAAM,KAAK,QAAQ,QAAQF,CAAU;AAC3C,aAASG,EAAKD,GAAYH,GAAQ;AAC9B,UAAI;AACA,YAAIK,IAAO,KAAK,MAAMF,CAAG;AAEzB,eADG,CAACE,KAAQ,OAAOA,KAAQ,YACvBA,EAAK,WAAc,MAAMA,EAAK,UAAa,oBAAI,KAAA,GAAM,QAAA,IAAmBL,IACrEK,EAAK;AAAA,MAChB,QAAgB;AACZ,eAAOL;AAAAA,MACX;AAAA,IACJ;AACA,WAAI,OAAOG,KAAQ,WACRC,EAAKD,GAAKH,CAAG,IAEbG,EAAI,KAAK,CAAAG,MAAGF,EAAKE,GAAGN,CAAG,CAAC;AAAA,EAEvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAID,GAAUQ,GAAWC,GAAgB;AACrC,IAAAA,IAAUA,KAAWA,IAAQ,IAAI,OAAOA,CAAO,IAAI;AACnD,QAAIC,IAASD,MAAY,KAAK,MAAM,oBAAI,KAAA,GAAM,YAAYA;AAE1D,UAAMP,IAAa,eAAaC,EAAOH,CAAI,GACrCM,IAAO,KAAK,UAAU,EAAC,MAAKE,GAAO,QAAAE,GAAQ,MAAAV,GAAK;AACtD,WAAO,QAAQ,QAAQ,KAAK,QAAQ,QAAQE,GAAYI,CAAI,CAAC;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAON,GAAS;AACZ,UAAME,IAAa,eAAaC,EAAOH,CAAI;AAC3C,WAAG,OAAO,KAAK,QAAQ,cAAgB,aAC5B,QAAQ,QAAS,KAAK,QAAQ,WAAWE,CAAU,CAAE,IAErD,QAAQ,QAAS,KAAK,QAAQ,QAAQA,CAAU,CAAE,EAAE,KAAK,CAACL,MAAM;AACnE,UAAIA,GAAK;AAEL,cAAMS,IAAO,KAAK,UAAU,EAAC,MAAK,IAAI,QAAO,GAAG,MAAAN,GAAK;AACrD,eAAO,KAAK,QAAQ,QAAQE,GAAYI,CAAI;AAAA,MAChD;AACA,aAAOT;AAAA,IACX,CAAC;AAAA,EAET;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAO;AACH,QAAI,OAAO,KAAK,QAAQ,SAAW;AAC/B,aAAO,QAAQ,QAAS,KAAK,QAAQ,OAAQ;AAAA,EAErD;AACJ;AAQA,SAASc,EAASrB,GAAQ;AACtB,QAAMc,IAAM,OAAO,UAAU,SAAS,KAAKd,CAAG;AAC9C,SAAOc,EAAI,UAAU,GAAEA,EAAI,SAAO,CAAC;AACvC;AAMA,SAASQ,EAAUC,GAAe;AAC9B,MAAI,OAAOA,KAAQ,SAAU,QAAOA;AACpC,MAAI;AACA,WAAOA,EAAI,SAAA;AAAA,EACf,QAAY;AACR,WAAO;AAAA,EACX;AACJ;AAOA,SAASC,EAAKV,GAAYW,GAAc;AAEpC,MADAX,IAAMQ,EAAUR,CAAG,GACf,CAACA,EAAK,QAAO;AACjB,MAAI,OAAOA,EAAI,QAAS,cAAc,CAACW;AACnC,WAAOX,EAAI,KAAA;AAEf,EAAAW,IAAOH,EAAUG,CAAI,GACjBA,MAAMA,IAAOA,EAAK,QAAQ,wCAAwC,MAAM;AAC5E,MAAIC,IAAW,oBAAoBD,CAAI,sBAAsBA,CAAI;AACjE,SAAOX,EAAI,QAAQ,IAAI,OAAOY,GAAU,GAAG,GAAG,EAAE;AACpD;AAOA,SAASC,EAAKA,GAAaC,GAAY;AACnC,MAAI,CAACA,KAAQD,EAAK,QAAQ,GAAG,MAAI,EAAG,QAAOA;AAC3C,EAAAC,IAAON,EAAUM,CAAI;AACrB,MAAIC,IAAWD,EAAK,MAAM,OAAO;AACjC,EAAAC,EAAS,IAAA;AACT,WAAS,IAAE,GAAEC,IAAWH,EAAK,MAAM,OAAO,GAAG,IAAEG,EAAS,QAAQ;AAC5D,YAAQA,EAAS,CAAC,GAAA;AAAA,MACd,KAAK;AAAI;AAAA,MACT,KAAK;AAAK,QAAAD,EAAS,IAAA;AAAM;AAAA,MACzB;AAAQ,QAAAA,EAAS,KAAKC,EAAS,CAAC,CAAC;AAAE;AAAA,IAAA;AAG3C,SAAOD,EAAS,KAAK,CAACD,EAAK,QAAQ,IAAI,IAAI,OAAO,GAAG;AACzD;AAeA,SAASG,EAAK/B,GAAYgC,GAAoC1B,GAAc;AACxE,MAAI2B,IAAK,OAAO,KAAKjC,CAAG,GAAGkC,IAAM;AACjC,QAAMC,IAAS,OAAOH,KAAM,aAAa,EAAC,MAAMA,MAAMA;AACtD,MAAI,OAAOG,EAAO,QAAQ,WAAY,OAAM;AAC5C,MAAIjC,IAAQiC,EAAO,SAAS,GAAGC,IAAW,IAAOC,GAC7CC,IAAa,CAAA;AACjB,iBAAeC,IAAW;AACtB,WAAOL,IAAQD,EAAG,UAAU,CAACG,KAAY,CAACC,KAAM;AAE5C,UAAIG,IAAIP,EAAGC,GAAO,GAAGjB,IAAIjB,EAAIwC,CAAC;AAC9B,UAAI;AACA,YAAIjC,IAAM,MAAM4B,EAAO,KAAK,KAAM7B,KAAWW,GAAIA,GAAGuB,GAAGxC,GAAK,CAACwC,CAAC,CAAC;AAC/D,QAAAJ,IAAWA,KAAa7B,MAAQ;AAAA,MACpC,SAASkC,GAAG;AACR,QAAAJ,IAAQI;AAAA,MACZ;AAAA,IACJ;AAAA,EACJ;AACA,WAASC,IAAI,GAAGA,IAAIxC,GAAOwC;AACvB,IAAAJ,EAAW,KAAKC,GAAW;AAE/B,SAAO,QAAQ,IAAID,CAAU,EAAE,KAAK,MAAI;AAEpC,QADI,OAAOH,EAAO,QAAQ,gBAAmB,KAAA,GACzCE,EAAO,OAAMA;AAAA,EACrB,CAAC;AACL;AAWA,SAASM,EAAS3C,GAAY4C,GAAiBvC,GAA2BwC,GAAmBvC,GAAc;AACvG,WAASwC,EAAK9C,GAAYiC,GAC1B;AACI,QAAIc,IAAa,CAAA,GACbxC,IAAU;AACd,eAAWiC,KAAKxC,GAAK;AACjB,UAAI,CAACA,EAAI,eAAewC,CAAC,EAAG;AAE5B,UAAIpC,IAAMJ,EAAIwC,CAAC;AAEf,UADAjC,IAAMF,EAAS,KAAOC,KAAWF,GAAMA,GAAKoC,GAAGxC,GAAKiC,EAAG,OAAOO,CAAC,CAAE,GAC7DjC,KAAOH,KAAO,OAAOA,KAAM,UAAU;AACrC,YAAI4C,IAAQJ,IAAWxC,EAAIwC,CAAQ,IAAIxC;AACvC,QAAI4C,KAAS,OAAOA,KAAQ,aACpBH,IACAE,EAAW,KAAK,EAAC,OAAAC,GAAa,IAAGf,EAAG,OAAOO,CAAC,GAAE,IAE9CjC,IAAMuC,EAAKE,GAAOf,EAAG,OAAOO,CAAC,CAAC;AAAA,MAG1C;AACA,UAAIjC,MAAQ,GAAO;AAAA,IACvB;AACA,aAASmC,IAAI,GAAGA,IAAIK,EAAW,QAAQL,KAAK;AACxC,UAAItC,IAAM2C,EAAWL,CAAC;AAEtB,UADAnC,IAAMuC,EAAK1C,EAAI,OAAOA,EAAI,EAAE,GACxBG,MAAQ,GAAO;AAAA,IACvB;AACA,WAAOA;AAAA,EACX;AACA,EAAAuC,EAAK9C,GAAK,EAAE;AAChB;AAMA,SAASiD,EAAanC,GAAW;AAC7B,MAAIP,IAAM,CAAA;AACV,SAAI,CAACO,KAAO,OAAOA,KAAQ,YAC3BA,EAAI,MAAM,GAAG,EAAE,QAAQ,SAAUV,GAAI;AACjC,QAAI8C,IAAK9C,EAAI,MAAM,GAAG;AACtB,QAAI,CAAC8C,EAAG,CAAC,EAAG;AACZ,QAAI3B,IAAM,mBAAmB2B,EAAG,CAAC,KAAK,EAAE,GACpCC,IAAM,mBAAmBD,EAAG,CAAC,CAAC,EAAE,MAAM,GAAG,GAAGjB,IAAG,CAAA;AACnD,aAASS,IAAI,GAAGA,IAAIS,EAAI,QAAQT,KAAK;AACjC,UAAItC,IAAM+C,EAAIT,CAAC;AACf,UAAIA,MAAI,GAAE;AACN,YAAIU,IAAKhD,EAAI,MAAM,yBAAyB;AAC5C,QAAIgD,MACAnB,EAAG,KAAKmB,EAAG,CAAC,CAAC,GACTA,EAAG,CAAC,KAAGnB,EAAG,KAAKmB,EAAG,CAAC,EAAE,UAAU,CAAC,CAAC;AAAA,MAE7C,WAAShD;AACL,QAAA6B,EAAG,KAAK7B,EAAI,UAAU,CAAC,CAAC;AAAA;AAExB;AAAA,IAER;AACA,QAAIiD,IAAyB9C;AAC7B,IAAA0B,EAAG,QAAQ,SAAUO,GAAEE,GAAE;AASrB,UARAF,IAAIA,MAAM,WAAU;AAChB,YAAIc,IAAG;AACP,sBAAO,KAAKD,CAAK,EAAE,QAAQ,SAASjD,GAAI;AACpC,cAAImD,IAAM,OAAOnD,CAAG;AACpB,UAAG,QAAQ,KAAKA,CAAG,KAAKmD,IAAID,MAAIA,IAAKC;AAAA,QACzC,CAAC,GACM,OAAOD,IAAG,CAAC;AAAA,MACtB,GAAA,GACIZ,KAAKT,EAAG,SAAO;AACf,QAAAoB,EAAMb,CAAC,IAAIjB;AAAA,WACT;AACF,YAAIiC,IAASvB,EAAGS,IAAE,CAAC,KAAK,MAAM,QAAQ,KAAKT,EAAGS,IAAE,CAAC,CAAC;AAClD,QAAAW,EAAMb,CAAC,IAAI,OAAOa,EAAMb,CAAC,IAAI,MAAca,EAAMb,CAAC,IAAKgB,IAAS,CAAA,IAAK,CAAA,GACrEH,IAAQA,EAAMb,CAAC;AAAA,MACnB;AAAA,IACJ,CAAC;AAAA,EACL,CAAC,GACMjC;AACX;AAMA,SAASkD,EAAazD,GAAQ;AAC1B,MAAI,CAACA,EAAK,QAAO;AACjB,MAAG,OAAOA,KAAM,SAAU,QAAOA;AACjC,MAAI0D,IAAY,CAAA;AAChB,MAAI1D,aAAe;AACf,aAAQ2D,KAAQ3D,EAAI;AAChB,MAAA0D,EAAU,KAAK,mBAAmBC,EAAK,CAAC,CAAC,IAAI,MAAM,mBAAmB,OAAOA,EAAK,CAAC,CAAC,CAAC,CAAE;AAAA;AAG3F,IAAAhB,EAAS3C,GAAK,IAAI,SAAUI,GAAKoC,GAAGoB,GAAK3B,GAAG;AACxC,UAAG,OAAO7B,KAAS,UAAU;AACzB,YAAIM,IAAOuB,EAAG,IAAI,CAAChB,GAAEyB,MAAaA,IAAE,IAAI,MAAI,mBAAmBzB,CAAC,IAAE,MAAM,mBAAmBA,CAAC,CAAI,EAAE,KAAK,EAAE;AACzG,QAAAyC,EAAU,KAAKhD,IAAO,MAAM,mBAAmBN,CAAG,CAAC;AAAA,MACvD;AACA,aAAO;AAAA,IACX,CAAC;AAEL,SAAOsD,EAAU,KAAK,GAAG;AAC7B;AAOA,SAAS7C,EAAOG,GAAU6C,IAAI,IAAG;AAC7B,MAAI,CAAC7C,EAAM,QAAO;AAClB,MAAI8C,IAAS;AACb,EAAAD,IAAOA,KAAOA,IAAI,KAAKA,KAAK,KAAK,OAAOA,CAAG,IAAI;AAC/C,MAAI/C,IAAM,KAAK,UAAUE,CAAI,EAAE,QAAQ,OAAM,EAAE,GAC3CT,IAAM,IAAIwD,IAAK;AACnB,WAASC,IAAI,GAAGA,IAAIH,GAAKG,KAAK;AAC1B,aAAStB,IAAIsB,GAAGtB,IAAI5B,EAAI,QAAQ4B,KAAGmB;AAC/B,MAAAE,KAAMjD,EAAI,WAAW4B,CAAC;AAG1B,IAAAnC,KAAOuD,EAAOC,IAAGF,CAAG,GACpBE,IAAK,KAAK,MAAMA,IAAGF,CAAG;AAAA,EAC1B;AACA,SAAOtD;AACX;AAQA,SAAS0D,EAAIjD,GAAUkD,GAAqCvD,GAAS;AACjE,MAAI,OAAOuD,KAAa,YAAYA,GAAS;AACzC,KAAGlD,MAAS,QAAQ,OAAOA,KAAS,kBAAiB,CAAA;AACrD,eAAWmD,KAAOD,GAAU;AACxB,UAAIE,IAAUD,EAAI,MAAM,GAAG,GACvBE,IAASD,EAAQ,IAAA;AACrB,UAAI,CAACC,EAAQ;AACb,UAAIpD,IAAIiD,EAASC,CAAG,GAChBG,IAAatD;AACjB,MAAAoD,EAAQ,QAAQ,SAAU5B,GAAGE,GAAE;AAC3B,SAAI4B,EAAW9B,CAAC,MAAM,QAAQ,OAAO8B,EAAW9B,CAAC,KAAM,cACnD8B,EAAW9B,CAAC,IAAI,CAAA,IAEpB8B,IAAaA,EAAW9B,CAAC;AAAA,MAC7B,CAAC,GACD8B,EAAWD,CAAM,IAAIpD;AAAA,IACzB;AACA,WAAOD;AAAA,EACX,OAAM;AACF,QAAIoD,IAAUF,IAAW5C,EAAU4C,CAAQ,EAAE,MAAM,GAAG,IAAI,CAAA,GACtD3D,IAAMS;AACV,aAAS0B,IAAI,GAAGA,IAAI0B,EAAQ,QAAQ1B,KAAK;AACrC,UAAIF,IAAI4B,EAAQ1B,CAAC;AACjB,UAAInC,MAAQ,QAAQ,OAAOA,IAAQ,IAAa,QAAOI;AACvD,MAAAJ,IAAMA,EAAIiC,CAAC;AAAA,IACf;AACA,WAAIjC,MAAQ,QAAQ,OAAOA,IAAQ,MAAoBI,IAChDJ;AAAA,EACX;AACJ;AAqBA,SAASgE,EAAKA,GAAyBC,IAAW,IAAIC,GAAa;AAC/D,WAASC,EAAS5D,GAAY0D,GAAYG,GAAkB;AAExD,QAAIC,IAAa9D,EAAI,MAAM,MAAM,KAAK,CAAA,GAClCsD,IAAmB,CAAA;AACvB,QAAII;AACAA,MAAAA,IAAMA,EAAI,QAAQ,gBAAgB,EAAE,GACpCJ,IAAUI,EAAI,MAAM,YAAY,KAAK,CAAA;AAAA,SAClC;AAEH,UAAIK,IAAaD,EAAW,UAAU,OAAG,OAAO3D,CAAC,IAAE,GAAI;AACvD,UAAI4D,MAAe;AACf,QAAAT,IAAU,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG;AAAA,eAC5BS,MAAe;AACrB,QAAAT,IAAU,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG;AAAA;AAElC,cAAM,IAAI,MAAM,MAAM;AAAA,IAE9B;AACA,QAAIU,IAAiC,CAAA;AACrC,IAAAV,EAAQ,QAAQ,CAAC5B,GAAGE,MAAI;AACpB,MAAAoC,EAAUtC,EAAE,aAAa,IAAI,OAAOoC,EAAWlC,CAAC,KAAK,CAAC;AAAA,IAC1D,CAAC;AACD,QAAI6B,wBAAW,KAAA,GACXQ,IAAe,EAAE,GAAE,kBAAiB,GAAE,eAAc,GAAE,cAAa,GAAE,eAAc,GAAE,iBAAgB,GAAE,gBAAA;AAC3G,kBAAO,KAAKA,CAAY,EAAE,QAAQ,CAAAvC,MAAG;AACjC,MAAAsC,EAAUtC,CAAC,IAAIsC,EAAUtC,CAAC,KAAK,GAC3BA,MAAM,OAAOsC,EAAUtC,CAAC,MAAM,MAE9BsC,EAAUtC,CAAC,IAAI;AAGnB,UAAIwC,IAAgBD,EAAavC,CAAC;AAElC+B,MAAAA,EAAKS,CAAa,EAAGxC,MAAI,MAAMsC,EAAUtC,CAAC,IAAE,IAAIsC,EAAUtC,CAAC,CAAE;AAAA,IACjE,CAAC,GACDsC,EAAU,IAAIP,EAAK,UAAA,GAEnBO,EAAU,YAAYP,EAAK,QAAA,IAAYI,GAChCG;AAAA,EACX;AACA,WAASG,EAAYC,GAAkBV,GAAYG,GAAkB;AACjE,UAAMQ,IAAO,IAAI,KAAKD,IAAYP,CAAU;AAC5C,aAASS,EAAKC,GAAM;AAAE,aAAOA,IAAI,KAAM,MAAMA,IAAKA;AAAA,IAAC;AACnD,QAAI9E,IAAM;AAAA,MACN,GAAG4E,EAAK,eAAA;AAAA,MACR,GAAGA,EAAK,YAAA,IAAgB;AAAA,MACxB,GAAGA,EAAK,WAAA;AAAA,MACR,GAAGA,EAAK,YAAA;AAAA,MACR,GAAGA,EAAK,cAAA;AAAA,MACR,GAAGA,EAAK,cAAA;AAAA,MACR,GAAGA,EAAK,UAAA;AAAA,MACR,QAAQ;AAAA,IAAA,GAERlE,IAAsB;AAAA,MACtB,GAAGV;AAAAA,MACH,GAAG,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,EAAEA,EAAI,CAAC;AAAA,MACtC,GAAG,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,EAAEA,EAAI,CAAC;AAAA,IAAA;AAE1C,WAAAU,EAAE,IAAIA,EAAE,GAAGA,EAAE,IAAImE,EAAKnE,EAAE,CAAC,GAAGA,EAAE,IAAImE,EAAKnE,EAAE,CAAC,GAAGA,EAAE,IAAImE,EAAKnE,EAAE,CAAC,GAAGA,EAAE,IAAImE,EAAKnE,EAAE,CAAC,GAAGA,EAAE,IAAImE,EAAKnE,EAAE,CAAC,GAC7FV,EAAI,SAASiE,EAAI,QAAQ,iCAAiC,SAASc,GAAEC,GAAGC,GAAG;AACvE,UAAI1E,IAAMyE;AACV,eAAQ7C,IAAE,GAAGA,IAAE8C,EAAG,QAAQ9C;AACtB,QAAA5B,KAAOG,EAAEuE,EAAG9C,CAAC,CAAC;AAElB,aAAO5B;AAAA,IACX,CAAC,EAAE,QAAQ,yBAAyB,IAAI,GACjCP;AAAAA,EACX;AAEA,EAAAkE,IAAO,OAAOA,CAAI,GAGd,MAAMA,CAAI,MACVA,IAAO,EAAE,oBAAI,KAAA,GAAQ,sBAAoB;AAE7C,QAAME,IAAaF,IAAK,OAAK,KAEvBlE,IAAqB;AAAA,IACvB,WAAW;AAAA,IACX,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,QAAQ;AAAA,IACR,MAAAkE;AAAA,EAAA;AAEJ,MAAIF,aAAgB,MAAK;AACrB,QAAIW,IAAYX,EAAK,QAAA;AACrB,WAAO,OAAOhE,GAAK0E,EAAYC,GAAWV,GAAKG,CAAU,CAAC,GAC1DpE,EAAI,YAAY2E;AAAA,EACpB,MAAA,CAAU,OAAOX,KAAS,YACtB,OAAO,OAAOhE,GAAK0E,EAAYV,GAAMC,GAAKG,CAAU,CAAC,GACrDpE,EAAI,YAAYgE,KACV,OAAOA,KAAS,aACtB,OAAO,OAAOhE,GAAKmE,EAASH,GAAMC,GAAKG,CAAU,CAAC,GAClDpE,EAAI,SAASgE;AAEjB,SAAOhE;AACX;AAKA,MAAMkF,IAAe;AAAA,EACjB,cAAc,CAAA;AAAA,EACd,GAAGC,GAAmBrF,GAA2BsF,GAAW;AAExD,QADI,CAACD,KAAc,OAAOA,KAAe,YACrC,OAAOrF,KAAa,WAAY;AACpC,QAAIuF,IAAOH,EAAa,aAAaC,CAAU,KAAK,CAAA;AACpD,IAAAC,IAAQC,EAAK,QAAQvF,CAAQ,IAAIuF,EAAK,KAAKvF,CAAQ,GACnDoF,EAAa,aAAaC,CAAU,IAAIE;AAAA,EAC5C;AAAA,EACA,IAAIF,GAAmBrF,GAA0B;AAC7C,QAAI,GAACqF,KAAc,OAAOA,KAAe;AACzC,UAAI,OAAOrF,KAAa,YAAW;AAC/B,YAAIuF,IAAOH,EAAa,aAAaC,CAAU,KAAK,CAAA,GAChD,IAAIE,EAAK,QAAQvF,CAAQ;AAC7B,QAAI,MAAM,MAAIuF,EAAK,OAAO,GAAE,CAAC,GAC7BH,EAAa,aAAaC,CAAU,IAAIE;AAAA,MAC5C,MAAA,CAAU,OAAOvF,IAAa,QAC1BoF,EAAa,aAAaC,CAAU,IAAI,CAAA;AAAA,EAEhD;AAAA,EACA,KAAKA,GAAmB1E,GAAUV,GAAa;AAC3C,QAAI,CAACoF,KAAc,OAAOA,KAAe,SAAU;AACnD,QAAIE,IAAOH,EAAa,aAAaC,CAAU,KAAK,CAAA;AACpD,aAAShD,IAAI,GAAGA,IAAIkD,EAAK,UACjBA,EAAKlD,CAAC,EAAE,KAAKpC,GAASU,CAAI,MAAM,IADP0B;AAC7B;AAAA,EAER;AACJ;"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -102,7 +102,7 @@ type TypeEachOption = {
|
|
|
102
102
|
* @param { TypeEachOption | (v:any, k:string, obj:Object)=>any } op 遍历回调函数 或者 包含遍历回调的配置
|
|
103
103
|
* @param {any} [thisArg] 回调函数的this对象
|
|
104
104
|
*/
|
|
105
|
-
declare function each(obj: Object, op: TypeEachOption | TypeEachCallback, thisArg?: any): void
|
|
105
|
+
declare function each(obj: Object, op: TypeEachOption | TypeEachCallback, thisArg?: any): Promise<void>;
|
|
106
106
|
/**
|
|
107
107
|
* 递归遍历
|
|
108
108
|
* @param {Object} obj 遍历的对象
|
package/package.json
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "s94-utils",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"description": "s94本人常用的工具方法包",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./dist/index.cjs",
|
|
7
|
-
"module": "./dist/index.mjs",
|
|
8
|
-
"types": "./dist/types/index.d.ts",
|
|
9
|
-
"exports": {
|
|
10
|
-
".": {
|
|
11
|
-
"types": "./dist/types/index.d.ts",
|
|
12
|
-
"import": "./dist/index.mjs",
|
|
13
|
-
"require": "./dist/index.cjs",
|
|
14
|
-
"default": "./dist/index.cjs"
|
|
15
|
-
},
|
|
16
|
-
"./package.json": "./package.json"
|
|
17
|
-
},
|
|
18
|
-
"files": [
|
|
19
|
-
"dist",
|
|
20
|
-
"README.md"
|
|
21
|
-
],
|
|
22
|
-
"sideEffects": false,
|
|
23
|
-
"scripts": {
|
|
24
|
-
"dev": "vite build --watch",
|
|
25
|
-
"build": "tsc && vite build",
|
|
26
|
-
"test": "echo \"Error: no test specified\" && exit 1"
|
|
27
|
-
},
|
|
28
|
-
"author": "",
|
|
29
|
-
"license": "ISC",
|
|
30
|
-
"devDependencies": {
|
|
31
|
-
"@types/node": "^25.0.10",
|
|
32
|
-
"typescript": "^5.9.3",
|
|
33
|
-
"vite": "^7.3.1",
|
|
34
|
-
"vite-plugin-dts": "^4.5.4"
|
|
35
|
-
}
|
|
36
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "s94-utils",
|
|
3
|
+
"version": "0.0.5",
|
|
4
|
+
"description": "s94本人常用的工具方法包",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.mjs",
|
|
8
|
+
"types": "./dist/types/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/types/index.d.ts",
|
|
12
|
+
"import": "./dist/index.mjs",
|
|
13
|
+
"require": "./dist/index.cjs",
|
|
14
|
+
"default": "./dist/index.cjs"
|
|
15
|
+
},
|
|
16
|
+
"./package.json": "./package.json"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist",
|
|
20
|
+
"README.md"
|
|
21
|
+
],
|
|
22
|
+
"sideEffects": false,
|
|
23
|
+
"scripts": {
|
|
24
|
+
"dev": "vite build --watch",
|
|
25
|
+
"build": "tsc && vite build",
|
|
26
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
27
|
+
},
|
|
28
|
+
"author": "",
|
|
29
|
+
"license": "ISC",
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/node": "^25.0.10",
|
|
32
|
+
"typescript": "^5.9.3",
|
|
33
|
+
"vite": "^7.3.1",
|
|
34
|
+
"vite-plugin-dts": "^4.5.4"
|
|
35
|
+
}
|
|
36
|
+
}
|