s94-utils 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # **s94-utils**
2
+ > 封装了同步加载CommonJS模块的require方法,以及一些常用的js方法,
3
+
4
+ ## **安装**
5
+ ```
6
+ npm install s94-utils
7
+ ```
8
+ ## **使用**
9
+
10
+ s94本人常用的工具方法包
11
+
12
+ # **属性和方法**
13
+
14
+ Queue [队列构建类](#Queue)
15
+
16
+ Cache [缓存器构建类](#Cache)
17
+
18
+ var_type [判断变量类型](#var_type)
19
+
20
+ to_string [变量转字符串,没有toString方法的对象,返回空字符](#to_string)
21
+
22
+ trim [清理字符串两端的空白字符](#trim)
23
+
24
+ path [相对路径计算](#path)
25
+
26
+ each [遍历对象](#each)
27
+
28
+ eachloop [递归遍历对象](#eachloop)
29
+
30
+ param_decode [url查询参数解码](#param_decode)
31
+
32
+ param_encode [url查询参数编码](#param_encode)
33
+
34
+ encode [数据签名](#encode)
35
+
36
+ map [对象的指定值获取、设定](#map)
37
+
38
+ date [日期处理](#date)
39
+
40
+ event_manage [事件管理,on,off,emit](#event_manage)
41
+
42
+
43
+ <p id="__stack"></p>
package/dist/index.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function C(t){return t&&typeof t=="object"&&typeof t.then=="function"}class I{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);C(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 U{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-"+N(e),n=this.Storage.getItem(i);function o(s,c){try{var f=JSON.parse(s);return!f||typeof f!="object"||f.expire!==-1&&f.expire<new Date().getTime()?c:f.main}catch{return c}}return typeof n=="string"?o(n,r):n.then(s=>o(s,r))}set(e,r,i){i=i&&i>0?Number(i):-1;let n=i===-1?-1:new Date().getTime()+i;const o="s94_cache-"+N(e),s=JSON.stringify({main:r,expire:n,name:e});return Promise.resolve(this.Storage.setItem(o,s))}remove(e){const r="s94_cache-"+N(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 o=typeof e=="function"?{each:e}:e;if(typeof o.each!="function")throw"参数错误,缺少遍历回调函数(each)";o.over=typeof o.over=="function"?o.over:function(){};let s=0,c=o.limit||1,f=!1;function h(){for(;s<c&&n<i.length&&!f;){let u=i[n++],a=t[u],l=o.each.call(r||a,a,u,t,[u]);l===!1?(o.over&&o.over(),f=!0):C(l)&&(s++,l.then(()=>{s--,h()}).catch(()=>{o.over&&o.over(),f=!0}))}!f&&!s&&n>=i.length&&o.over&&o.over()}h()}function S(t,e,r,i,n){function o(s,c){let f=[],h=!0;for(const u in s){if(!s.hasOwnProperty(u))continue;let a=s[u];if(h=r.call(n||a,a,u,s,c.concat(u)),h&&a&&typeof a=="object"){let l=e?a[e]:a;l&&typeof l=="object"&&(i?f.push({child:l,ks:c.concat(u)}):h=o(l,c.concat(u)))}if(h===!1)break}for(let u=0;u<f.length;u++){let a=f[u];if(h=o(a.child,a.ks),h===!1)break}return h}o(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]||""),o=decodeURIComponent(i[0]).split("]"),s=[];for(let f=0;f<o.length;f++){let h=o[f];if(f===0){let u=h.match(/^([^\[]+)(\[[\s\S.]*)?$/);u&&(s.push(u[1]),u[2]&&s.push(u[2].substring(1)))}else if(h)s.push(h.substring(1));else break}let c=e;s.forEach(function(f,h){if(f=f||(function(){var u=-1;return Object.keys(c).forEach(function(a){let l=Number(a);/^\d+$/.test(a)&&l>u&&(u=l)}),String(u+1)})(),h==s.length-1)c[f]=n;else{let u=s[h+1]==""||/^\d+$/.test(s[h+1]);c[f]=typeof c[f]<"u"?c[f]:u?[]:{},c=c[f]}})}),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,o){if(typeof r!="object"){let s=o.map((c,f)=>f>0?"["+encodeURIComponent(c)+"]":encodeURIComponent(c)).join("");e.push(s+"="+encodeURIComponent(r))}return!0});return e.join("&")}function N(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="",o=0;for(let s=0;s<e;s++){for(let c=s;c<i.length;c+=e)o+=i.charCodeAt(c);n+=r[o%e],o=Math.floor(o/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("."),o=n.pop();if(!o)continue;let s=e[i],c=t;n.forEach(function(f,h){(c[f]===null||typeof c[f]!="object")&&(c[f]={}),c=c[f]}),c[o]=s}return t}else{let i=e?d(e).split("."):[],n=t;for(let o=0;o<i.length;o++){let s=i[o];if(n===null||typeof n>"u")return r;n=n[s]}return n===null||typeof n>"u"?r:n}}function F(t,e="",r){function i(c,f,h){let u=c.match(/\d+/g)||[],a=[];if(f)f=f.replace(/\\[ymdhis]/ig,""),a=f.match(/[ymdhis]/ig)||[];else{let g=u.findIndex(m=>Number(m)>1e3);if(g===0)a=["y","m","d","h","i","s"];else if(g===2)a=["d","m","y","h","i","s"];else throw new Error("日期异常")}let l={};a.forEach((g,m)=>{l[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=>{l[g]=l[g]||0,g==="m"&&l[g]===0&&(l[g]=1);let m=y[g];p[m](g==="m"?l[g]-1:l[g])}),l.w=p.getUTCDay(),l.timestamp=p.getTime()-h,l}function n(c,f,h){const u=new Date(c+h);function a(y){return y<10?"0"+y:y}let l={y:u.getUTCFullYear(),m:u.getUTCMonth()+1,d:u.getUTCDate(),h:u.getUTCHours(),i:u.getUTCMinutes(),s:u.getUTCSeconds(),w:u.getUTCDay(),string:""},p={...l,W:["日","一","二","三","四","五","六"][l.w],w:["7","1","2","3","4","5","6"][l.w]};return p.Y=p.y,p.M=a(p.m),p.D=a(p.d),p.H=a(p.h),p.I=a(p.i),p.S=a(p.s),l.string=f.replace(/(^|[^\\])([YMDHISWymdhisw]+)/g,function(y,g,m){let w=g;for(let v=0;v<m.length;v++)w+=p[m[v]];return w}).replace(/\\([YMDHISWymdhisw])/g,"$1"),l}r=Number(r),isNaN(r)&&(r=-new Date().getTimezoneOffset()/60);const o=r*3600*1e3,s={timestamp:NaN,y:NaN,m:NaN,d:NaN,h:NaN,i:NaN,s:NaN,w:NaN,string:"",zone:r};if(t instanceof Date){let c=t.getTime();Object.assign(s,n(c,e,o)),s.timestamp=c}else typeof t=="number"?(Object.assign(s,n(t,e,o)),s.timestamp=t):typeof t=="string"&&(Object.assign(s,i(t,e,o)),s.string=t);return s}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=U;exports.Queue=I;exports.date=F;exports.each=x;exports.eachloop=S;exports.encode=N;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
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
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:any)=>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 {string} name 缓存名称\r\n * @param {any} value 缓存值\r\n * @param {number} timeout 过期时间(毫秒),默认或者小于0,表示永久\r\n * @returns {Promise<any>}\r\n */\r\n set(name:string, 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:string){\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){\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 option.over = typeof option.over == 'function' ? option.over : function (){}\r\n let runing = 0, limit = option.limit || 1, is_break = false;\r\n\r\n function __run(){\r\n while (runing < limit && index < ks.length && !is_break){\r\n // @ts-ignore\r\n let k = ks[index++], v = obj[k];\r\n let res = option.each.call( (thisArg || v), v, k, obj, [k]);\r\n if (res === false) {\r\n if(option.over) option.over()\r\n is_break=true;\r\n }else if (isPromise(res)){\r\n runing++;\r\n res.then(()=>{\r\n runing--;\r\n __run();\r\n }).catch(()=>{\r\n if(option.over) option.over();\r\n is_break=true;\r\n })\r\n }\r\n }\r\n if (!is_break && !runing && index >= ks.length && option.over) option.over()\r\n }\r\n __run();\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","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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"}
package/dist/index.mjs ADDED
@@ -0,0 +1,376 @@
1
+ function C(t) {
2
+ return t && typeof t == "object" && typeof t.then == "function";
3
+ }
4
+ class I {
5
+ // 0,停止,1开始
6
+ /**
7
+ * 构建队列
8
+ * @param {number} [limit] 同时执行的槽位数量限制,默认为:1
9
+ * @param {boolean} [start] 构建好后,是否直接开始队列
10
+ * @returns {Queue}
11
+ */
12
+ constructor(e, r) {
13
+ return this.list = [], this.running = 0, this.limit = 1, this.status = 0, this.limit = e || 1, r && this.start(), this;
14
+ }
15
+ __run() {
16
+ for (; this.status === 1 && this.running < this.limit; ) {
17
+ let e = this.list.shift();
18
+ if (!e) break;
19
+ let { callback: r, thisArg: i } = e, n = r.call(i);
20
+ C(n) && (this.running++, n.then(() => {
21
+ this.running--, this.__run();
22
+ }));
23
+ }
24
+ return this;
25
+ }
26
+ /**
27
+ * 插入执行
28
+ * @param {function} callback 回调函数,如果返回 Promise ,会占用执行槽位直到 Promise 兑现
29
+ * @param {any} thisArg 执行时的this对象
30
+ * @returns {Queue}
31
+ */
32
+ add(e, r) {
33
+ return typeof e != "function" ? this : (this.list.push({ callback: e, thisArg: r }), this.__run());
34
+ }
35
+ start() {
36
+ return this.status = 1, this.__run();
37
+ }
38
+ stop() {
39
+ this.status = 0;
40
+ }
41
+ }
42
+ class U {
43
+ /**
44
+ * 构建缓存器,传入缓存引擎对象,
45
+ * @param { {getItem:(name:string)=>string|Promise<string>, setItem:(name:string, data:any)=>Promise<any>, removeItem?:(name:string)=>Promise<any>, clear?:()=>any } } engine
46
+ */
47
+ constructor(e) {
48
+ if (typeof e != "object" || typeof e.getItem != "function" || typeof e.setItem != "function")
49
+ throw new Error("缓存引擎必须为对象,并且包含方法:getItem、setItem");
50
+ this.Storage = e;
51
+ }
52
+ /**
53
+ * 获取缓存
54
+ * @param {any} name 缓存名
55
+ * @param {any} def 默认值
56
+ * @returns {any | Promise<any>} 由引擎的 getItem 确定是否返回 Promise
57
+ */
58
+ get(e, r) {
59
+ const i = "s94_cache-" + w(e), n = this.Storage.getItem(i);
60
+ function s(o, u) {
61
+ try {
62
+ var f = JSON.parse(o);
63
+ return !f || typeof f != "object" || f.expire !== -1 && f.expire < (/* @__PURE__ */ new Date()).getTime() ? u : f.main;
64
+ } catch {
65
+ return u;
66
+ }
67
+ }
68
+ return typeof n == "string" ? s(n, r) : n.then((o) => s(o, r));
69
+ }
70
+ /**
71
+ * 设定缓存
72
+ * @param {string} name 缓存名称
73
+ * @param {any} value 缓存值
74
+ * @param {number} timeout 过期时间(毫秒),默认或者小于0,表示永久
75
+ * @returns {Promise<any>}
76
+ */
77
+ set(e, r, i) {
78
+ i = i && i > 0 ? Number(i) : -1;
79
+ let n = i === -1 ? -1 : (/* @__PURE__ */ new Date()).getTime() + i;
80
+ const s = "s94_cache-" + w(e), o = JSON.stringify({ main: r, expire: n, name: e });
81
+ return Promise.resolve(this.Storage.setItem(s, o));
82
+ }
83
+ /**
84
+ * 移除缓存
85
+ * @param {string} name
86
+ * @returns {Promise<any>}
87
+ */
88
+ remove(e) {
89
+ const r = "s94_cache-" + w(e);
90
+ return typeof this.Storage.removeItem == "function" ? Promise.resolve(this.Storage.removeItem(r)) : Promise.resolve(this.Storage.getItem(r)).then((i) => {
91
+ if (i) {
92
+ const n = JSON.stringify({ main: "", expire: 1, name: e });
93
+ return this.Storage.setItem(r, n);
94
+ }
95
+ return i;
96
+ });
97
+ }
98
+ /**
99
+ * 清理缓存,如果引擎存在 clear 方法,
100
+ * @returns {Promise<any>}
101
+ */
102
+ clear() {
103
+ if (typeof this.Storage.clear == "function")
104
+ return Promise.resolve(this.Storage.clear());
105
+ }
106
+ }
107
+ function T(t) {
108
+ const e = Object.prototype.toString.call(t);
109
+ return e.substring(8, e.length - 1);
110
+ }
111
+ function d(t) {
112
+ if (typeof t == "string") return t;
113
+ try {
114
+ return t.toString();
115
+ } catch {
116
+ return "";
117
+ }
118
+ }
119
+ function b(t, e) {
120
+ if (t = d(t), !t) return "";
121
+ if (typeof t.trim == "function" && !e)
122
+ return t.trim();
123
+ e = d(e), e && (e = e.replace(/([\$\(\)\*\+\?\.\[\]\\\^\{\}\|]){1}/g, "\\$1"));
124
+ let r = `^[\\s\\uFEFF\\xA0${e}]+|[\\s\\uFEFF\\xA0${e}]+$`;
125
+ return t.replace(new RegExp(r, "g"), "");
126
+ }
127
+ function O(t, e) {
128
+ if (!e || t.indexOf("/") === 0) return t;
129
+ e = d(e);
130
+ var r = e.split(/\\|\//);
131
+ r.pop();
132
+ for (var i = 0, n = t.split(/\\|\//); i < n.length; i++)
133
+ switch (n[i]) {
134
+ case ".":
135
+ break;
136
+ case "..":
137
+ r.pop();
138
+ break;
139
+ default:
140
+ r.push(n[i]);
141
+ break;
142
+ }
143
+ return r.join(~e.indexOf("\\") ? "\\" : "/");
144
+ }
145
+ function x(t, e, r) {
146
+ let i = Object.keys(t), n = 0;
147
+ const s = typeof e == "function" ? { each: e } : e;
148
+ if (typeof s.each != "function") throw "参数错误,缺少遍历回调函数(each)";
149
+ s.over = typeof s.over == "function" ? s.over : function() {
150
+ };
151
+ let o = 0, u = s.limit || 1, f = !1;
152
+ function a() {
153
+ for (; o < u && n < i.length && !f; ) {
154
+ let c = i[n++], h = t[c], l = s.each.call(r || h, h, c, t, [c]);
155
+ l === !1 ? (s.over && s.over(), f = !0) : C(l) && (o++, l.then(() => {
156
+ o--, a();
157
+ }).catch(() => {
158
+ s.over && s.over(), f = !0;
159
+ }));
160
+ }
161
+ !f && !o && n >= i.length && s.over && s.over();
162
+ }
163
+ a();
164
+ }
165
+ function S(t, e, r, i, n) {
166
+ function s(o, u) {
167
+ let f = [], a = !0;
168
+ for (const c in o) {
169
+ if (!o.hasOwnProperty(c)) continue;
170
+ let h = o[c];
171
+ if (a = r.call(n || h, h, c, o, u.concat(c)), a && h && typeof h == "object") {
172
+ let l = e ? h[e] : h;
173
+ l && typeof l == "object" && (i ? f.push({ child: l, ks: u.concat(c) }) : a = s(l, u.concat(c)));
174
+ }
175
+ if (a === !1) break;
176
+ }
177
+ for (let c = 0; c < f.length; c++) {
178
+ let h = f[c];
179
+ if (a = s(h.child, h.ks), a === !1) break;
180
+ }
181
+ return a;
182
+ }
183
+ s(t, []);
184
+ }
185
+ function D(t) {
186
+ let e = {};
187
+ return !t || typeof t != "string" || t.split("&").forEach(function(r) {
188
+ let i = r.split("=");
189
+ if (!i[0]) return;
190
+ let n = decodeURIComponent(i[1] || ""), s = decodeURIComponent(i[0]).split("]"), o = [];
191
+ for (let f = 0; f < s.length; f++) {
192
+ let a = s[f];
193
+ if (f === 0) {
194
+ let c = a.match(/^([^\[]+)(\[[\s\S.]*)?$/);
195
+ c && (o.push(c[1]), c[2] && o.push(c[2].substring(1)));
196
+ } else if (a)
197
+ o.push(a.substring(1));
198
+ else
199
+ break;
200
+ }
201
+ let u = e;
202
+ o.forEach(function(f, a) {
203
+ if (f = f || (function() {
204
+ var c = -1;
205
+ return Object.keys(u).forEach(function(h) {
206
+ let l = Number(h);
207
+ /^\d+$/.test(h) && l > c && (c = l);
208
+ }), String(c + 1);
209
+ })(), a == o.length - 1)
210
+ u[f] = n;
211
+ else {
212
+ let c = o[a + 1] == "" || /^\d+$/.test(o[a + 1]);
213
+ u[f] = typeof u[f] < "u" ? u[f] : c ? [] : {}, u = u[f];
214
+ }
215
+ });
216
+ }), e;
217
+ }
218
+ function E(t) {
219
+ if (!t) return "";
220
+ if (typeof t == "string") return t;
221
+ let e = [];
222
+ if (t instanceof FormData)
223
+ for (let r of t.entries())
224
+ e.push(encodeURIComponent(r[0]) + "=" + encodeURIComponent(String(r[1])));
225
+ else
226
+ S(t, "", function(r, i, n, s) {
227
+ if (typeof r != "object") {
228
+ let o = s.map((u, f) => f > 0 ? "[" + encodeURIComponent(u) + "]" : encodeURIComponent(u)).join("");
229
+ e.push(o + "=" + encodeURIComponent(r));
230
+ }
231
+ return !0;
232
+ });
233
+ return e.join("&");
234
+ }
235
+ function w(t, e = 64) {
236
+ if (!t) return "";
237
+ let r = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-";
238
+ e = e && e > 1 && e <= 64 ? Number(e) : 64;
239
+ let i = JSON.stringify(t).replace(/\"/g, ""), n = "", s = 0;
240
+ for (let o = 0; o < e; o++) {
241
+ for (let u = o; u < i.length; u += e)
242
+ s += i.charCodeAt(u);
243
+ n += r[s % e], s = Math.floor(s / e);
244
+ }
245
+ return n;
246
+ }
247
+ function F(t, e, r) {
248
+ if (typeof e == "object" && e) {
249
+ (t === null || typeof t != "object") && (t = {});
250
+ for (const i in e) {
251
+ let n = i.split("."), s = n.pop();
252
+ if (!s) continue;
253
+ let o = e[i], u = t;
254
+ n.forEach(function(f, a) {
255
+ (u[f] === null || typeof u[f] != "object") && (u[f] = {}), u = u[f];
256
+ }), u[s] = o;
257
+ }
258
+ return t;
259
+ } else {
260
+ let i = e ? d(e).split(".") : [], n = t;
261
+ for (let s = 0; s < i.length; s++) {
262
+ let o = i[s];
263
+ if (n === null || typeof n > "u") return r;
264
+ n = n[o];
265
+ }
266
+ return n === null || typeof n > "u" ? r : n;
267
+ }
268
+ }
269
+ function j(t, e = "", r) {
270
+ function i(u, f, a) {
271
+ let c = u.match(/\d+/g) || [], h = [];
272
+ if (f)
273
+ f = f.replace(/\\[ymdhis]/ig, ""), h = f.match(/[ymdhis]/ig) || [];
274
+ else {
275
+ let g = c.findIndex((m) => Number(m) > 1e3);
276
+ if (g === 0)
277
+ h = ["y", "m", "d", "h", "i", "s"];
278
+ else if (g === 2)
279
+ h = ["d", "m", "y", "h", "i", "s"];
280
+ else
281
+ throw new Error("日期异常");
282
+ }
283
+ let l = {};
284
+ h.forEach((g, m) => {
285
+ l[g.toLowerCase()] = Number(c[m] || 0);
286
+ });
287
+ let p = /* @__PURE__ */ new Date(), y = { y: "setUTCFullYear", m: "setUTCMonth", d: "setUTCDate", h: "setUTCHours", i: "setUTCMinutes", s: "setUTCSeconds" };
288
+ return Object.keys(y).forEach((g) => {
289
+ l[g] = l[g] || 0, g === "m" && l[g] === 0 && (l[g] = 1);
290
+ let m = y[g];
291
+ p[m](g === "m" ? l[g] - 1 : l[g]);
292
+ }), l.w = p.getUTCDay(), l.timestamp = p.getTime() - a, l;
293
+ }
294
+ function n(u, f, a) {
295
+ const c = new Date(u + a);
296
+ function h(y) {
297
+ return y < 10 ? "0" + y : y;
298
+ }
299
+ let l = {
300
+ y: c.getUTCFullYear(),
301
+ m: c.getUTCMonth() + 1,
302
+ d: c.getUTCDate(),
303
+ h: c.getUTCHours(),
304
+ i: c.getUTCMinutes(),
305
+ s: c.getUTCSeconds(),
306
+ w: c.getUTCDay(),
307
+ string: ""
308
+ }, p = {
309
+ ...l,
310
+ W: ["日", "一", "二", "三", "四", "五", "六"][l.w],
311
+ w: ["7", "1", "2", "3", "4", "5", "6"][l.w]
312
+ };
313
+ return p.Y = p.y, p.M = h(p.m), p.D = h(p.d), p.H = h(p.h), p.I = h(p.i), p.S = h(p.s), l.string = f.replace(/(^|[^\\])([YMDHISWymdhisw]+)/g, function(y, g, m) {
314
+ let v = g;
315
+ for (let N = 0; N < m.length; N++)
316
+ v += p[m[N]];
317
+ return v;
318
+ }).replace(/\\([YMDHISWymdhisw])/g, "$1"), l;
319
+ }
320
+ r = Number(r), isNaN(r) && (r = -(/* @__PURE__ */ new Date()).getTimezoneOffset() / 60);
321
+ const s = r * 3600 * 1e3, o = {
322
+ timestamp: NaN,
323
+ y: NaN,
324
+ m: NaN,
325
+ d: NaN,
326
+ h: NaN,
327
+ i: NaN,
328
+ s: NaN,
329
+ w: NaN,
330
+ string: "",
331
+ zone: r
332
+ };
333
+ if (t instanceof Date) {
334
+ let u = t.getTime();
335
+ Object.assign(o, n(u, e, s)), o.timestamp = u;
336
+ } else typeof t == "number" ? (Object.assign(o, n(t, e, s)), o.timestamp = t) : typeof t == "string" && (Object.assign(o, i(t, e, s)), o.string = t);
337
+ return o;
338
+ }
339
+ const _ = {
340
+ __event_list: {},
341
+ on(t, e, r) {
342
+ if (!t || typeof t != "string" || typeof e != "function") return;
343
+ let i = _.__event_list[t] || [];
344
+ r ? i.unshift(e) : i.push(e), _.__event_list[t] = i;
345
+ },
346
+ off(t, e) {
347
+ if (!(!t || typeof t != "string"))
348
+ if (typeof e == "function") {
349
+ let r = _.__event_list[t] || [], i = r.indexOf(e);
350
+ i !== -1 && r.splice(i, 1), _.__event_list[t] = r;
351
+ } else typeof e > "u" && (_.__event_list[t] = []);
352
+ },
353
+ emit(t, e, r) {
354
+ if (!t || typeof t != "string") return;
355
+ let i = _.__event_list[t] || [];
356
+ for (let n = 0; n < i.length && i[n].call(r, e) !== !1; n++)
357
+ ;
358
+ }
359
+ };
360
+ export {
361
+ U as Cache,
362
+ I as Queue,
363
+ j as date,
364
+ x as each,
365
+ S as eachloop,
366
+ w as encode,
367
+ _ as event_manage,
368
+ F as map,
369
+ D as param_decode,
370
+ E as param_encode,
371
+ O as path,
372
+ d as to_string,
373
+ b as trim,
374
+ T as var_type
375
+ };
376
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
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:any)=>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 {string} name 缓存名称\r\n * @param {any} value 缓存值\r\n * @param {number} timeout 过期时间(毫秒),默认或者小于0,表示永久\r\n * @returns {Promise<any>}\r\n */\r\n set(name:string, 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:string){\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){\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 option.over = typeof option.over == 'function' ? option.over : function (){}\r\n let runing = 0, limit = option.limit || 1, is_break = false;\r\n\r\n function __run(){\r\n while (runing < limit && index < ks.length && !is_break){\r\n // @ts-ignore\r\n let k = ks[index++], v = obj[k];\r\n let res = option.each.call( (thisArg || v), v, k, obj, [k]);\r\n if (res === false) {\r\n if(option.over) option.over()\r\n is_break=true;\r\n }else if (isPromise(res)){\r\n runing++;\r\n res.then(()=>{\r\n runing--;\r\n __run();\r\n }).catch(()=>{\r\n if(option.over) option.over();\r\n is_break=true;\r\n })\r\n }\r\n }\r\n if (!is_break && !runing && index >= ks.length && option.over) option.over()\r\n }\r\n __run();\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","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":"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,GAAaQ,GAAWC,GAAgB;AACxC,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,GAAY;AACf,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,GAAQ;AACvB,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,GAAa;AACvE,MAAI2B,IAAK,OAAO,KAAKjC,CAAG,GAAGkC,IAAM;AACjC,QAAMC,IAAS,OAAOH,KAAM,aAAa,EAAC,MAAMA,MAAMA;AACtD,MAAI,OAAOG,EAAO,QAAQ,WAAY,OAAM;AAC5C,EAAAA,EAAO,OAAO,OAAOA,EAAO,QAAQ,aAAaA,EAAO,OAAO,WAAW;AAAA,EAAC;AAC3E,MAAIC,IAAS,GAAGlC,IAAQiC,EAAO,SAAS,GAAGE,IAAW;AAEtD,WAASC,IAAO;AACZ,WAAOF,IAASlC,KAASgC,IAAQD,EAAG,UAAU,CAACI,KAAS;AAEpD,UAAIE,IAAIN,EAAGC,GAAO,GAAGjB,IAAIjB,EAAIuC,CAAC,GAC1BhC,IAAM4B,EAAO,KAAK,KAAO7B,KAAWW,GAAIA,GAAGsB,GAAGvC,GAAK,CAACuC,CAAC,CAAC;AAC1D,MAAIhC,MAAQ,MACL4B,EAAO,QAAMA,EAAO,KAAA,GACvBE,IAAS,MACHtC,EAAUQ,CAAG,MACnB6B,KACA7B,EAAI,KAAK,MAAI;AACT,QAAA6B,KACAE,EAAA;AAAA,MACJ,CAAC,EAAE,MAAM,MAAI;AACT,QAAGH,EAAO,QAAMA,EAAO,KAAA,GACvBE,IAAS;AAAA,MACb,CAAC;AAAA,IAET;AACA,IAAI,CAACA,KAAY,CAACD,KAAUF,KAASD,EAAG,UAAUE,EAAO,QAAMA,EAAO,KAAA;AAAA,EAC1E;AACA,EAAAG,EAAA;AACJ;AAWA,SAASE,EAASxC,GAAYyC,GAAiBpC,GAA2BqC,GAAmBpC,GAAc;AACvG,WAASqC,EAAK3C,GAAYiC,GAC1B;AACI,QAAIW,IAAa,CAAA,GACbrC,IAAU;AACd,eAAWgC,KAAKvC,GAAK;AACjB,UAAI,CAACA,EAAI,eAAeuC,CAAC,EAAG;AAE5B,UAAInC,IAAMJ,EAAIuC,CAAC;AAEf,UADAhC,IAAMF,EAAS,KAAOC,KAAWF,GAAMA,GAAKmC,GAAGvC,GAAKiC,EAAG,OAAOM,CAAC,CAAE,GAC7DhC,KAAOH,KAAO,OAAOA,KAAM,UAAU;AACrC,YAAIyC,IAAQJ,IAAWrC,EAAIqC,CAAQ,IAAIrC;AACvC,QAAIyC,KAAS,OAAOA,KAAQ,aACpBH,IACAE,EAAW,KAAK,EAAC,OAAAC,GAAa,IAAGZ,EAAG,OAAOM,CAAC,GAAE,IAE9ChC,IAAMoC,EAAKE,GAAOZ,EAAG,OAAOM,CAAC,CAAC;AAAA,MAG1C;AACA,UAAIhC,MAAQ,GAAO;AAAA,IACvB;AACA,aAASuC,IAAI,GAAGA,IAAIF,EAAW,QAAQE,KAAK;AACxC,UAAI1C,IAAMwC,EAAWE,CAAC;AAEtB,UADAvC,IAAMoC,EAAKvC,EAAI,OAAOA,EAAI,EAAE,GACxBG,MAAQ,GAAO;AAAA,IACvB;AACA,WAAOA;AAAA,EACX;AACA,EAAAoC,EAAK3C,GAAK,EAAE;AAChB;AAMA,SAAS+C,EAAajC,GAAW;AAC7B,MAAIP,IAAM,CAAA;AACV,SAAI,CAACO,KAAO,OAAOA,KAAQ,YAC3BA,EAAI,MAAM,GAAG,EAAE,QAAQ,SAAUV,GAAI;AACjC,QAAI4C,IAAK5C,EAAI,MAAM,GAAG;AACtB,QAAI,CAAC4C,EAAG,CAAC,EAAG;AACZ,QAAIzB,IAAM,mBAAmByB,EAAG,CAAC,KAAK,EAAE,GACpCC,IAAM,mBAAmBD,EAAG,CAAC,CAAC,EAAE,MAAM,GAAG,GAAGf,IAAG,CAAA;AACnD,aAASa,IAAI,GAAGA,IAAIG,EAAI,QAAQH,KAAK;AACjC,UAAI1C,IAAM6C,EAAIH,CAAC;AACf,UAAIA,MAAI,GAAE;AACN,YAAII,IAAK9C,EAAI,MAAM,yBAAyB;AAC5C,QAAI8C,MACAjB,EAAG,KAAKiB,EAAG,CAAC,CAAC,GACTA,EAAG,CAAC,KAAGjB,EAAG,KAAKiB,EAAG,CAAC,EAAE,UAAU,CAAC,CAAC;AAAA,MAE7C,WAAS9C;AACL,QAAA6B,EAAG,KAAK7B,EAAI,UAAU,CAAC,CAAC;AAAA;AAExB;AAAA,IAER;AACA,QAAI+C,IAAyB5C;AAC7B,IAAA0B,EAAG,QAAQ,SAAUM,GAAEO,GAAE;AASrB,UARAP,IAAIA,MAAM,WAAU;AAChB,YAAIa,IAAG;AACP,sBAAO,KAAKD,CAAK,EAAE,QAAQ,SAAS/C,GAAI;AACpC,cAAIiD,IAAM,OAAOjD,CAAG;AACpB,UAAG,QAAQ,KAAKA,CAAG,KAAKiD,IAAID,MAAIA,IAAKC;AAAA,QACzC,CAAC,GACM,OAAOD,IAAG,CAAC;AAAA,MACtB,GAAA,GACIN,KAAKb,EAAG,SAAO;AACf,QAAAkB,EAAMZ,CAAC,IAAIhB;AAAA,WACT;AACF,YAAI+B,IAASrB,EAAGa,IAAE,CAAC,KAAK,MAAM,QAAQ,KAAKb,EAAGa,IAAE,CAAC,CAAC;AAClD,QAAAK,EAAMZ,CAAC,IAAI,OAAOY,EAAMZ,CAAC,IAAI,MAAcY,EAAMZ,CAAC,IAAKe,IAAS,CAAA,IAAK,CAAA,GACrEH,IAAQA,EAAMZ,CAAC;AAAA,MACnB;AAAA,IACJ,CAAC;AAAA,EACL,CAAC,GACMhC;AACX;AAMA,SAASgD,EAAavD,GAAQ;AAC1B,MAAI,CAACA,EAAK,QAAO;AACjB,MAAG,OAAOA,KAAM,SAAU,QAAOA;AACjC,MAAIwD,IAAY,CAAA;AAChB,MAAIxD,aAAe;AACf,aAAQyD,KAAQzD,EAAI;AAChB,MAAAwD,EAAU,KAAK,mBAAmBC,EAAK,CAAC,CAAC,IAAI,MAAM,mBAAmB,OAAOA,EAAK,CAAC,CAAC,CAAC,CAAE;AAAA;AAG3F,IAAAjB,EAASxC,GAAK,IAAI,SAAUI,GAAKmC,GAAGmB,GAAKzB,GAAG;AACxC,UAAG,OAAO7B,KAAS,UAAU;AACzB,YAAIM,IAAOuB,EAAG,IAAI,CAAChB,GAAE6B,MAAaA,IAAE,IAAI,MAAI,mBAAmB7B,CAAC,IAAE,MAAM,mBAAmBA,CAAC,CAAI,EAAE,KAAK,EAAE;AACzG,QAAAuC,EAAU,KAAK9C,IAAO,MAAM,mBAAmBN,CAAG,CAAC;AAAA,MACvD;AACA,aAAO;AAAA,IACX,CAAC;AAEL,SAAOoD,EAAU,KAAK,GAAG;AAC7B;AAOA,SAAS3C,EAAOG,GAAU2C,IAAI,IAAG;AAC7B,MAAI,CAAC3C,EAAM,QAAO;AAClB,MAAI4C,IAAS;AACb,EAAAD,IAAOA,KAAOA,IAAI,KAAKA,KAAK,KAAK,OAAOA,CAAG,IAAI;AAC/C,MAAI7C,IAAM,KAAK,UAAUE,CAAI,EAAE,QAAQ,OAAM,EAAE,GAC3CT,IAAM,IAAIsD,IAAK;AACnB,WAASC,IAAI,GAAGA,IAAIH,GAAKG,KAAK;AAC1B,aAAShB,IAAIgB,GAAGhB,IAAIhC,EAAI,QAAQgC,KAAGa;AAC/B,MAAAE,KAAM/C,EAAI,WAAWgC,CAAC;AAG1B,IAAAvC,KAAOqD,EAAOC,IAAGF,CAAG,GACpBE,IAAK,KAAK,MAAMA,IAAGF,CAAG;AAAA,EAC1B;AACA,SAAOpD;AACX;AAQA,SAASwD,EAAI/C,GAAUgD,GAAqCrD,GAAQ;AAChE,MAAI,OAAOqD,KAAa,YAAYA,GAAS;AACzC,KAAGhD,MAAS,QAAQ,OAAOA,KAAS,kBAAiB,CAAA;AACrD,eAAWiD,KAAOD,GAAU;AACxB,UAAIE,IAAUD,EAAI,MAAM,GAAG,GACvBE,IAASD,EAAQ,IAAA;AACrB,UAAI,CAACC,EAAQ;AACb,UAAIlD,IAAI+C,EAASC,CAAG,GAChBG,IAAapD;AACjB,MAAAkD,EAAQ,QAAQ,SAAU3B,GAAGO,GAAE;AAC3B,SAAIsB,EAAW7B,CAAC,MAAM,QAAQ,OAAO6B,EAAW7B,CAAC,KAAM,cACnD6B,EAAW7B,CAAC,IAAI,CAAA,IAEpB6B,IAAaA,EAAW7B,CAAC;AAAA,MAC7B,CAAC,GACD6B,EAAWD,CAAM,IAAIlD;AAAA,IACzB;AACA,WAAOD;AAAA,EACX,OAAM;AACF,QAAIkD,IAAUF,IAAW1C,EAAU0C,CAAQ,EAAE,MAAM,GAAG,IAAI,CAAA,GACtDzD,IAAMS;AACV,aAAS8B,IAAI,GAAGA,IAAIoB,EAAQ,QAAQpB,KAAK;AACrC,UAAIP,IAAI2B,EAAQpB,CAAC;AACjB,UAAIvC,MAAQ,QAAQ,OAAOA,IAAQ,IAAa,QAAOI;AACvD,MAAAJ,IAAMA,EAAIgC,CAAC;AAAA,IACf;AACA,WAAIhC,MAAQ,QAAQ,OAAOA,IAAQ,MAAoBI,IAChDJ;AAAA,EACX;AACJ;AAqBA,SAAS8D,EAAKA,GAAyBC,IAAW,IAAIC,GAAa;AAC/D,WAASC,EAAS1D,GAAYwD,GAAYG,GAAkB;AAExD,QAAIC,IAAa5D,EAAI,MAAM,MAAM,KAAK,CAAA,GAClCoD,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,OAAOzD,CAAC,IAAE,GAAI;AACvD,UAAI0D,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,CAAC3B,GAAGO,MAAI;AACpB,MAAA8B,EAAUrC,EAAE,aAAa,IAAI,OAAOmC,EAAW5B,CAAC,KAAK,CAAC;AAAA,IAC1D,CAAC;AACD,QAAIuB,wBAAW,KAAA,GACXQ,IAAe,EAAE,GAAE,kBAAiB,GAAE,eAAc,GAAE,cAAa,GAAE,eAAc,GAAE,iBAAgB,GAAE,gBAAA;AAC3G,kBAAO,KAAKA,CAAY,EAAE,QAAQ,CAAAtC,MAAG;AACjC,MAAAqC,EAAUrC,CAAC,IAAIqC,EAAUrC,CAAC,KAAK,GAC3BA,MAAM,OAAOqC,EAAUrC,CAAC,MAAM,MAE9BqC,EAAUrC,CAAC,IAAI;AAGnB,UAAIuC,IAAgBD,EAAatC,CAAC;AAElC8B,MAAAA,EAAKS,CAAa,EAAGvC,MAAI,MAAMqC,EAAUrC,CAAC,IAAE,IAAIqC,EAAUrC,CAAC,CAAE;AAAA,IACjE,CAAC,GACDqC,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,QAAI5E,IAAM;AAAA,MACN,GAAG0E,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,GAERhE,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,IAAIiE,EAAKjE,EAAE,CAAC,GAAGA,EAAE,IAAIiE,EAAKjE,EAAE,CAAC,GAAGA,EAAE,IAAIiE,EAAKjE,EAAE,CAAC,GAAGA,EAAE,IAAIiE,EAAKjE,EAAE,CAAC,GAAGA,EAAE,IAAIiE,EAAKjE,EAAE,CAAC,GAC7FV,EAAI,SAAS+D,EAAI,QAAQ,iCAAiC,SAASc,GAAEC,GAAGC,GAAG;AACvE,UAAIxE,IAAMuE;AACV,eAAQvC,IAAE,GAAGA,IAAEwC,EAAG,QAAQxC;AACtB,QAAAhC,KAAOG,EAAEqE,EAAGxC,CAAC,CAAC;AAElB,aAAOhC;AAAA,IACX,CAAC,EAAE,QAAQ,yBAAyB,IAAI,GACjCP;AAAAA,EACX;AAEA,EAAAgE,IAAO,OAAOA,CAAI,GAGd,MAAMA,CAAI,MACVA,IAAO,EAAE,oBAAI,KAAA,GAAQ,sBAAoB;AAE7C,QAAME,IAAaF,IAAK,OAAK,KAEvBhE,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,MAAAgE;AAAA,EAAA;AAEJ,MAAIF,aAAgB,MAAK;AACrB,QAAIW,IAAYX,EAAK,QAAA;AACrB,WAAO,OAAO9D,GAAKwE,EAAYC,GAAWV,GAAKG,CAAU,CAAC,GAC1DlE,EAAI,YAAYyE;AAAA,EACpB,MAAA,CAAU,OAAOX,KAAS,YACtB,OAAO,OAAO9D,GAAKwE,EAAYV,GAAMC,GAAKG,CAAU,CAAC,GACrDlE,EAAI,YAAY8D,KACV,OAAOA,KAAS,aACtB,OAAO,OAAO9D,GAAKiE,EAASH,GAAMC,GAAKG,CAAU,CAAC,GAClDlE,EAAI,SAAS8D;AAEjB,SAAO9D;AACX;AAKA,MAAMgF,IAAe;AAAA,EACjB,cAAc,CAAA;AAAA,EACd,GAAGC,GAAmBnF,GAA2BoF,GAAW;AAExD,QADI,CAACD,KAAc,OAAOA,KAAe,YACrC,OAAOnF,KAAa,WAAY;AACpC,QAAIqF,IAAOH,EAAa,aAAaC,CAAU,KAAK,CAAA;AACpD,IAAAC,IAAQC,EAAK,QAAQrF,CAAQ,IAAIqF,EAAK,KAAKrF,CAAQ,GACnDkF,EAAa,aAAaC,CAAU,IAAIE;AAAA,EAC5C;AAAA,EACA,IAAIF,GAAmBnF,GAA0B;AAC7C,QAAI,GAACmF,KAAc,OAAOA,KAAe;AACzC,UAAI,OAAOnF,KAAa,YAAW;AAC/B,YAAIqF,IAAOH,EAAa,aAAaC,CAAU,KAAK,CAAA,GAChD,IAAIE,EAAK,QAAQrF,CAAQ;AAC7B,QAAI,MAAM,MAAIqF,EAAK,OAAO,GAAE,CAAC,GAC7BH,EAAa,aAAaC,CAAU,IAAIE;AAAA,MAC5C,MAAA,CAAU,OAAOrF,IAAa,QAC1BkF,EAAa,aAAaC,CAAU,IAAI,CAAA;AAAA,EAEhD;AAAA,EACA,KAAKA,GAAmBxE,GAAUV,GAAa;AAC3C,QAAI,CAACkF,KAAc,OAAOA,KAAe,SAAU;AACnD,QAAIE,IAAOH,EAAa,aAAaC,CAAU,KAAK,CAAA;AACpD,aAAS1C,IAAI,GAAGA,IAAI4C,EAAK,UACjBA,EAAK5C,CAAC,EAAE,KAAKxC,GAASU,CAAI,MAAM,IADP8B;AAC7B;AAAA,EAER;AACJ;"}