@koishijs/utils
Advanced tools
Comparing version 5.3.0 to 5.4.0
@@ -1,2 +0,2 @@ | ||
var O=Object.defineProperty;var se=Object.getOwnPropertyDescriptor;var ie=Object.getOwnPropertyNames;var ae=Object.prototype.hasOwnProperty;var ce=t=>O(t,"__esModule",{value:!0}),s=(t,e)=>O(t,"name",{value:e,configurable:!0});var K=(t,e)=>{ce(t);for(var r in e)O(t,r,{get:e[r],enumerable:!0})},d=(t,e,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ie(e))!ae.call(t,n)&&n!=="default"&&O(t,n,{get:()=>e[n],enumerable:!(r=se(e,n))||r.enumerable});return t};var m={};K(m,{Logger:()=>y,Random:()=>T,Schema:()=>G,Time:()=>S,assertProperty:()=>Y,camelCase:()=>X,camelize:()=>ye,capitalize:()=>me,coerce:()=>B,defineEnumProperty:()=>H,enumKeys:()=>k,escapeRegExp:()=>we,hyphenate:()=>ge,interpolate:()=>ee,isInteger:()=>W,isType:()=>j,merge:()=>L,observe:()=>he,paramCase:()=>_,renameProperty:()=>Z,s:()=>Me,sanitize:()=>$e,segment:()=>Me,sleep:()=>I,snakeCase:()=>xe,t:()=>R,template:()=>R,trimSlash:()=>te,uncapitalize:()=>C});import Me from"@koishijs/segment";import{stderr as D}from"supports-color";var S;(function(a){a.millisecond=1,a.second=1e3,a.minute=a.second*60,a.hour=a.minute*60,a.day=a.hour*24,a.week=a.day*7;let p=new Date().getTimezoneOffset();function f(o){p=o}a.setTimezoneOffset=f,s(f,"setTimezoneOffset");function x(){return p}a.getTimezoneOffset=x,s(x,"getTimezoneOffset");function M(o=new Date,u){return typeof o=="number"&&(o=new Date(o)),u===void 0&&(u=p),Math.floor((o.valueOf()/a.minute-u)/1440)}a.getDateNumber=M,s(M,"getDateNumber");function h(o,u){let oe=new Date(o*a.day);return u===void 0&&(u=p),new Date(+oe+u*a.minute)}a.fromDateNumber=h,s(h,"fromDateNumber");let v=/\d+(?:\.\d+)?/.source,g=new RegExp(`^${["w(?:eek(?:s)?)?","d(?:ay(?:s)?)?","h(?:our(?:s)?)?","m(?:in(?:ute)?(?:s)?)?","s(?:ec(?:ond)?(?:s)?)?"].map(o=>`(${v}${o})?`).join("")}$`);function w(o){let u=g.exec(o);return u?(parseFloat(u[1])*a.week||0)+(parseFloat(u[2])*a.day||0)+(parseFloat(u[3])*a.hour||0)+(parseFloat(u[4])*a.minute||0)+(parseFloat(u[5])*a.second||0):0}a.parseTime=w,s(w,"parseTime");function E(o){let u=w(o);return u?o=Date.now()+u:/^\d{1,2}(:\d{1,2}){1,2}$/.test(o)?o=`${new Date().toLocaleDateString()}-${o}`:/^\d{1,2}-\d{1,2}-\d{1,2}(:\d{1,2}){1,2}$/.test(o)&&(o=`${new Date().getFullYear()}-${o}`),o?new Date(o):new Date}a.parseDate=E,s(E,"parseDate");function A(o){let u=Math.abs(o);return u>=a.day-a.hour/2?Math.round(o/a.day)+"d":u>=a.hour-a.minute/2?Math.round(o/a.hour)+"h":u>=a.minute-a.second/2?Math.round(o/a.minute)+"m":u>=a.second?Math.round(o/a.second)+"s":o+"ms"}a.formatTimeShort=A,s(A,"formatTimeShort");function P(o){let u;return o>=a.day-a.hour/2?(o+=a.hour/2,u=Math.floor(o/a.day)+" 天",o%a.day>a.hour&&(u+=` ${Math.floor(o%a.day/a.hour)} 小时`)):o>=a.hour-a.minute/2?(o+=a.minute/2,u=Math.floor(o/a.hour)+" 小时",o%a.hour>a.minute&&(u+=` ${Math.floor(o%a.hour/a.minute)} 分钟`)):o>=a.minute-a.second/2?(o+=a.second/2,u=Math.floor(o/a.minute)+" 分钟",o%a.minute>a.second&&(u+=` ${Math.floor(o%a.minute/a.second)} 秒`)):u=Math.round(o/a.second)+" 秒",u}a.formatTime=P,s(P,"formatTime");let ne=["日","一","二","三","四","五","六"];function $(o,u=2){return o.toString().padStart(u,"0")}s($,"toDigits");function F(o,u=new Date){return o.replace("yyyy",u.getFullYear().toString()).replace("yy",u.getFullYear().toString().slice(2)).replace("MM",$(u.getMonth()+1)).replace("dd",$(u.getDate())).replace("hh",$(u.getHours())).replace("mm",$(u.getMinutes())).replace("ss",$(u.getSeconds())).replace("SSS",$(u.getMilliseconds(),3))}a.template=F,s(F,"template");function z(o){return`${$(o.getHours())}:${$(o.getMinutes())}`}s(z,"toHourMinute");function ve(o,u){return u?u===a.day?`每天 ${z(o)}`:u===a.week?`每周${ne[o.getDay()]} ${z(o)}`:`${F("yyyy-MM-dd hh:mm:ss",o)} 起每隔 ${P(u)}`:F("yyyy-MM-dd hh:mm:ss",o)}a.formatTimeInterval=ve,s(ve,"formatTimeInterval")})(S||(S={}));var ue=[6,2,3,4,5,1],pe=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221],b=class{constructor(e){this.name=e;this.extend=e=>new b(`${this.name}:${e}`);if(e in b.instances)return b.instances[e];b.instances[e]=this,this.code=b.code(e),this.displayName=this.color(e,";1"),this.createMethod("success","[S] ",b.SUCCESS),this.createMethod("error","[E] ",b.ERROR),this.createMethod("info","[I] ",b.INFO),this.createMethod("warn","[W] ",b.WARN),this.createMethod("debug","[D] ",b.DEBUG)}static color(e,r,n=""){return D?`[3${e<8?e:"8;5;"+e}${D.has256?n:""}m${r}[0m`:""+r}static code(e){let r=0;for(let n=0;n<e.length;n++)r=(r<<3)-r+e.charCodeAt(n),r|=0;return b.colors[Math.abs(r)%b.colors.length]}createMethod(e,r,n){this[e]=(...c)=>{if(this.level<n)return;let i=[];if(b.showTime&&i.push(S.template(b.showTime)),i.push(r+this.displayName,...c),b.showDiff){let p=Date.now(),f=b.timestamp&&p-b.timestamp;i.push(this.color("+"+S.formatTimeShort(f))),b.timestamp=p}console[e==="debug"?"debug":"log"](...i)}}color(e,r=""){return b.color(this.code,e,r)}get level(){let e=this.name.split(":"),r=b.levels;do r=r[e.shift()]??r.base;while(e.length&&typeof r=="object");return r}set level(e){let r=this.name.split(":"),n=b.levels;for(;r.length>1;){let c=r.shift(),i=n[c];typeof i=="object"?n=i:n=n[c]={base:i??n.base}}n[r[0]]=e}},y=b;s(y,"Logger"),y.SILENT=0,y.SUCCESS=1,y.ERROR=1,y.INFO=2,y.WARN=2,y.DEBUG=3,y.showDiff=!1,y.showTime="",y.timestamp=0,y.colors=D?D.has256?pe:ue:[],y.instances={},y.levels={base:2};var l={};K(l,{Schema:()=>G,assertProperty:()=>Y,coerce:()=>B,defineEnumProperty:()=>H,enumKeys:()=>k,isInteger:()=>W,isType:()=>j,merge:()=>L,renameProperty:()=>Z,sleep:()=>I});d(l,Ee);import G from"schemastery";import*as Ee from"tikloot";function W(t){return typeof t=="number"&&Math.floor(t)===t}s(W,"isInteger");async function I(t){return new Promise(e=>setTimeout(e,t))}s(I,"sleep");function k(t){return Object.values(t).filter(e=>typeof e=="string")}s(k,"enumKeys");function H(t,e,r){t[e]=r,t[r]=e}s(H,"defineEnumProperty");function L(t,e){return Object.entries(e).forEach(([r,n])=>{if(typeof t[r]=="undefined")return t[r]=e[r];typeof n=="object"&&typeof t[r]=="object"&&(t[r]=L(t[r],n))}),t}s(L,"merge");function Y(t,e){if(!t[e])throw new Error(`missing configuration "${e}"`);return t[e]}s(Y,"assertProperty");function B(t){let{stack:e}=t instanceof Error?t:new Error(t);return e}s(B,"coerce");function Z(t,e,r){t[e]=Reflect.get(t,r),Reflect.deleteProperty(t,r)}s(Z,"renameProperty");var J=typeof self!="undefined"?self:global;function j(t,e){return t in J&&e instanceof J[t]||Object.prototype.toString.call(e).slice(8,-1)===t}s(j,"isType");d(m,l);var N=["number","string","bigint","boolean","symbol","function"],le=["Date","RegExp","Set","Map","WeakSet","WeakMap","Array"];function V(t,e){return j("Date",t)?be(t,e):Array.isArray(t)?de(t,e):Q(t,e)}s(V,"observeProperty");function q(t){return typeof t=="symbol"||t.startsWith("$")}s(q,"untracked");function Q(t,e){let r=e;if(!e){let c=Object.create(null);(0,l.defineProperty)(t,"$diff",c),e=s(i=>{q(i)||(c[i]=t[i])},"notify")}return new Proxy(t,{get(c,i){let p=Reflect.get(c,i);return!p||N.includes(typeof p)||q(i)?p:V(p,r||(()=>e(i)))},set(c,i,p){let f=c[i]===p,x=Reflect.set(c,i,p);return f||!x?x:(e(i),!0)},deleteProperty(c,i){let p=!(i in c),f=Reflect.deleteProperty(c,i);return p||!f?f:(e(i),!0)}})}s(Q,"observeObject");var fe=["pop","shift","splice","sort"];function de(t,e){let r={};for(let n of fe)(0,l.defineProperty)(t,n,function(...c){return e(),Array.prototype[n].apply(this,c)});return new Proxy(t,{get(n,c){if(c in r)return r[c];let i=n[c];return!i||N.includes(typeof i)||typeof c=="symbol"||isNaN(c)?i:V(i,e)},set(n,c,i){return typeof c!="symbol"&&!isNaN(c)&&n[c]!==i&&e(),Reflect.set(n,c,i)}})}s(de,"observeArray");function be(t,e){for(let r of Object.getOwnPropertyNames(Date.prototype))r!=="valueOf"&&(0,l.defineProperty)(t,r,function(...n){let c=t.valueOf(),i=Date.prototype[r].apply(this,n);return t.valueOf()!==c&&e(),i});return t}s(be,"observeDate");function he(t,...e){if(N.includes(typeof t))throw new Error(`cannot observe immutable type "${typeof t}"`);if(!t)throw new Error("cannot observe null or undefined");let r=Object.prototype.toString.call(t).slice(8,-1);if(le.includes(r))throw new Error(`cannot observe instance of type "${r}"`);let n=l.noop;typeof e[0]=="function"&&(n=e.shift());let c=Q(t,null);return(0,l.defineProperty)(c,"$update",s(function(){let p={...this.$diff};if(Object.keys(p).length){for(let x in this.$diff)delete this.$diff[x];return n(p)}},"$update")),(0,l.defineProperty)(c,"$merge",s(function(p){for(let f in p){if(f in this.$diff)throw new Error(`unresolved diff key "${f}"`);t[f]=p[f]}return this},"$merge")),c}s(he,"observe");var T=class{constructor(e=Math.random()){this.value=e}bool(e){return e>=1?!0:e<=0?!1:this.value<e}real(...e){let r=e.length>1?e[0]:0,n=e[e.length-1];return this.value*(n-r)+r}int(...e){return Math.floor(this.real(...e))}pick(e){return e[Math.floor(this.value*e.length)]}splice(e){return e.splice(Math.floor(this.value*e.length),1)[0]}weightedPick(e){let r=Object.entries(e).reduce((i,[,p])=>i+p,0),n=this.value*r,c=0;for(let i in e)if(c+=e[i],n<c)return i}};s(T,"Random");(function(M){let t="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";function e(h=8,v=16){let g="";for(let w=0;w<h;++w)g+=t[Math.floor(Math.random()*v)];return g}M.id=e,s(e,"id");function r(...h){return new M().real(...h)}M.real=r,s(r,"real");function n(...h){return new M().int(...h)}M.int=n,s(n,"int");function c(h){return new M().pick(h)}M.pick=c,s(c,"pick");function i(h){let v=h.slice(),g=[];for(let w=h.length;w>0;--w)g.push(new M().splice(v));return g}M.shuffle=i,s(i,"shuffle");function p(h,v){h=h.slice();let g=[],w=Math.min(h.length,v);for(let E=0;E<w;E+=1){let A=Math.floor(Math.random()*h.length),[P]=h.splice(A,1);g.push(P)}return g}M.multiPick=p,s(p,"multiPick");function f(h){return new M().weightedPick(h)}M.weightedPick=f,s(f,"weightedPick");function x(h){return new M().bool(h)}M.bool=x,s(x,"bool")})(T||(T={}));function U(t){function e(r){if(typeof r!="object"||!r)return r;if(Array.isArray(r))return r.map(e);let n={};for(let c in r)n[t(c)]=e(r[c]);return n}return s(e,"modifyObject"),function(r){return typeof r=="string"?t(r):e(r)}}s(U,"deepen");var X=U(t=>t.replace(/[_-][a-z]/g,e=>e.slice(1).toUpperCase())),_=U(t=>C(t).replace(/_/g,"-").replace(/(?<!^)[A-Z]/g,e=>"-"+e.toLowerCase())),xe=U(t=>C(t).replace(/-/g,"_").replace(/(?<!^)[A-Z]/g,e=>"_"+e.toLowerCase())),ye=X,ge=_;function me(t){return t.charAt(0).toUpperCase()+t.slice(1)}s(me,"capitalize");function C(t){return t.charAt(0).toLowerCase()+t.slice(1)}s(C,"uncapitalize");var ee=new Function("template","context","pattern",` | ||
var U=Object.defineProperty;var o=(e,t)=>U(e,"name",{value:t,configurable:!0});import fe from"@koishijs/segment";import le from"schemastery";import de from"reggol";export*from"cosmokit";function k(e){return typeof e=="number"&&Math.floor(e)===e}o(k,"isInteger");async function Z(e){return new Promise(t=>setTimeout(t,e))}o(Z,"sleep");function _(e){return Object.values(e).filter(t=>typeof t=="string")}o(_,"enumKeys");function I(e,t,n){e[t]=n,e[n]=t}o(I,"defineEnumProperty");function A(e,t){return Object.entries(t).forEach(([n,s])=>{if(typeof e[n]=="undefined")return e[n]=t[n];typeof s=="object"&&typeof e[n]=="object"&&(e[n]=A(e[n],s))}),e}o(A,"merge");function J(e,t){if(!e[t])throw new Error(`missing configuration "${t}"`);return e[t]}o(J,"assertProperty");function V(e){let{stack:t}=e instanceof Error?e:new Error(e);return t}o(V,"coerce");function q(e,t,n){e[t]=Reflect.get(e,n),Reflect.deleteProperty(e,n)}o(q,"renameProperty");var w=typeof self!="undefined"?self:global;function v(e,t){return e in w&&t instanceof w[e]||Object.prototype.toString.call(t).slice(8,-1)===e}o(v,"isType");import{defineProperty as b,noop as E}from"cosmokit";var T=["number","string","bigint","boolean","symbol","function"],M=["Date","RegExp","Set","Map","WeakSet","WeakMap","Array"];function O(e,t){return v("Date",e)?K(e,t):Array.isArray(e)?N(e,t):$(e,t)}o(O,"observeProperty");function R(e){return typeof e=="symbol"||e.startsWith("$")}o(R,"untracked");function $(e,t){let n=t;if(!t){let i=Object.create(null);b(e,"$diff",i),t=o(r=>{R(r)||(i[r]=e[r])},"notify")}return new Proxy(e,{get(i,r){let p=Reflect.get(i,r);return!p||T.includes(typeof p)||R(r)?p:O(p,n||(()=>t(r)))},set(i,r,p){let c=i[r]===p,u=Reflect.set(i,r,p);return c||!u?u:(t(r),!0)},deleteProperty(i,r){let p=!(r in i),c=Reflect.deleteProperty(i,r);return p||!c?c:(t(r),!0)}})}o($,"observeObject");var C=["pop","shift","splice","sort"];function N(e,t){let n={};for(let s of C)b(e,s,function(...i){return t(),Array.prototype[s].apply(this,i)});return new Proxy(e,{get(s,i){if(i in n)return n[i];let r=s[i];return!r||T.includes(typeof r)||typeof i=="symbol"||isNaN(i)?r:O(r,t)},set(s,i,r){return typeof i!="symbol"&&!isNaN(i)&&s[i]!==r&&t(),Reflect.set(s,i,r)}})}o(N,"observeArray");function K(e,t){for(let n of Object.getOwnPropertyNames(Date.prototype))n!=="valueOf"&&b(e,n,function(...s){let i=e.valueOf(),r=Date.prototype[n].apply(this,s);return e.valueOf()!==i&&t(),r});return e}o(K,"observeDate");function X(e,...t){if(T.includes(typeof e))throw new Error(`cannot observe immutable type "${typeof e}"`);if(!e)throw new Error("cannot observe null or undefined");let n=Object.prototype.toString.call(e).slice(8,-1);if(M.includes(n))throw new Error(`cannot observe instance of type "${n}"`);let s=E;typeof t[0]=="function"&&(s=t.shift());let i=$(e,null);return b(i,"$update",o(function(){let p={...this.$diff};if(Object.keys(p).length){for(let u in this.$diff)delete this.$diff[u];return s(p)}},"$update")),b(i,"$merge",o(function(p){for(let c in p){if(c in this.$diff)throw new Error(`unresolved diff key "${c}"`);e[c]=p[c]}return this},"$merge")),i}o(X,"observe");var x=class{constructor(t=Math.random()){this.value=t}bool(t){return t>=1?!0:t<=0?!1:this.value<t}real(...t){let n=t.length>1?t[0]:0,s=t[t.length-1];return this.value*(s-n)+n}int(...t){return Math.floor(this.real(...t))}pick(t){return t[Math.floor(this.value*t.length)]}splice(t){return t.splice(Math.floor(this.value*t.length),1)[0]}weightedPick(t){let n=Object.entries(t).reduce((r,[,p])=>r+p,0),s=this.value*n,i=0;for(let r in t)if(i+=t[r],s<i)return r}};o(x,"Random");(function(d){let e="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";function t(f=8,m=16){let l="";for(let a=0;a<f;++a)l+=e[Math.floor(Math.random()*m)];return l}d.id=t,o(t,"id");function n(...f){return new d().real(...f)}d.real=n,o(n,"real");function s(...f){return new d().int(...f)}d.int=s,o(s,"int");function i(f){return new d().pick(f)}d.pick=i,o(i,"pick");function r(f){let m=f.slice(),l=[];for(let a=f.length;a>0;--a)l.push(new d().splice(m));return l}d.shuffle=r,o(r,"shuffle");function p(f,m){f=f.slice();let l=[],a=Math.min(f.length,m);for(let h=0;h<a;h+=1){let S=Math.floor(Math.random()*f.length),[L]=f.splice(S,1);l.push(L)}return l}d.multiPick=p,o(p,"multiPick");function c(f){return new d().weightedPick(f)}d.weightedPick=c,o(c,"weightedPick");function u(f){return new d().bool(f)}d.bool=u,o(u,"bool")})(x||(x={}));function g(e){function t(n){if(typeof n!="object"||!n)return n;if(Array.isArray(n))return n.map(t);let s={};for(let i in n)s[e(i)]=t(n[i]);return s}return o(t,"modifyObject"),function(n){return typeof n=="string"?e(n):t(n)}}o(g,"deepen");var z=g(e=>e.replace(/[_-][a-z]/g,t=>t.slice(1).toUpperCase())),G=g(e=>j(e).replace(/_/g,"-").replace(/(?<!^)[A-Z]/g,t=>"-"+t.toLowerCase())),te=g(e=>j(e).replace(/-/g,"_").replace(/(?<!^)[A-Z]/g,t=>"_"+t.toLowerCase())),ne=z,re=G;function oe(e){return e.charAt(0).toUpperCase()+e.slice(1)}o(oe,"capitalize");function j(e){return e.charAt(0).toLowerCase()+e.slice(1)}o(j,"uncapitalize");var D=new Function("template","context","pattern",` | ||
return template.replace(pattern || /\\{\\{([\\s\\S]+?)\\}\\}/g, (_, expr) => { | ||
@@ -12,2 +12,2 @@ try { | ||
}) | ||
`);function we(t){return t.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}s(we,"escapeRegExp");function te(t){return t.replace(/\/$/,"")}s(te,"trimSlash");function $e(t){return t.startsWith("/")||(t="/"+t),te(t)}s($e,"sanitize");function R(t,...e){Array.isArray(t)||(t=[t]);for(let r of t){let n=R.get(r);if(typeof n=="string")return R.format(n,...e)}return t[0]}s(R,"template");function re(t,e){return Object.entries(e).forEach(([r,n])=>{typeof n=="object"&&typeof t[r]=="object"?t[r]=re(t[r],n):t[r]=e[r]}),t}s(re,"deepAssign");(function(c){let t={};function e(i,p){let f=i.split("."),x=t;for(;f.length>1;)x=x[f.shift()]||={};re(x,{[f[0]]:p})}c.set=e,s(e,"set");function r(i){let p=i.split("."),f=t;do f=f[p.shift()];while(p.length&&f);if(typeof f=="string")return f}c.get=r,s(r,"get");function n(i,...p){p[0]&&typeof p[0]=="object"&&(i=ee(i,p[0]));let f="",x;for(;x=/\{(\w+)\}/.exec(i);)f+=i.slice(0,x.index)+(x[1]in p?p[x[1]]:""),i=i.slice(x.index+x[0].length);return f+i}c.format=n,s(n,"format")})(R||(R={}));export{y as Logger,T as Random,G as Schema,S as Time,Y as assertProperty,X as camelCase,ye as camelize,me as capitalize,B as coerce,H as defineEnumProperty,k as enumKeys,we as escapeRegExp,ge as hyphenate,ee as interpolate,W as isInteger,j as isType,L as merge,he as observe,_ as paramCase,Z as renameProperty,Me as s,$e as sanitize,Me as segment,I as sleep,xe as snakeCase,R as t,R as template,te as trimSlash,C as uncapitalize}; | ||
`);function ie(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}o(ie,"escapeRegExp");function F(e){return e.replace(/\/$/,"")}o(F,"trimSlash");function se(e){return e.startsWith("/")||(e="/"+e),F(e)}o(se,"sanitize");function y(e,...t){Array.isArray(e)||(e=[e]);for(let n of e){let s=y.get(n);if(typeof s=="string")return y.format(s,...t)}return e[0]}o(y,"template");function P(e,t){return Object.entries(t).forEach(([n,s])=>{typeof s=="object"&&typeof e[n]=="object"?e[n]=P(e[n],s):e[n]=t[n]}),e}o(P,"deepAssign");(function(i){let e={};function t(r,p){let c=r.split("."),u=e;for(;c.length>1;)u=u[c.shift()]||={};P(u,{[c[0]]:p})}i.set=t,o(t,"set");function n(r){let p=r.split("."),c=e;do c=c[p.shift()];while(p.length&&c);if(typeof c=="string")return c}i.get=n,o(n,"get");function s(r,...p){p[0]&&typeof p[0]=="object"&&(r=D(r,p[0]));let c="",u;for(;u=/\{(\w+)\}/.exec(r);)c+=r.slice(0,u.index)+(u[1]in p?p[u[1]]:""),r=r.slice(u.index+u[0].length);return c+r}i.format=s,o(s,"format")})(y||(y={}));export{de as Logger,x as Random,le as Schema,J as assertProperty,z as camelCase,ne as camelize,oe as capitalize,V as coerce,I as defineEnumProperty,_ as enumKeys,ie as escapeRegExp,re as hyphenate,D as interpolate,k as isInteger,v as isType,A as merge,X as observe,G as paramCase,q as renameProperty,fe as s,se as sanitize,fe as segment,Z as sleep,te as snakeCase,y as t,y as template,F as trimSlash,j as uncapitalize}; |
@@ -0,5 +1,4 @@ | ||
import segment from '@koishijs/segment'; | ||
import Schema from 'schemastery'; | ||
import segment from '@koishijs/segment'; | ||
export * from 'tikloot'; | ||
export { Schema }; | ||
import Logger from 'reggol'; | ||
export function isInteger(source: any): boolean; | ||
@@ -164,66 +163,3 @@ export function sleep(ms: number): Promise<void>; | ||
export { template as t }; | ||
export namespace Time { | ||
const millisecond = 1; | ||
const second = 1000; | ||
const minute: number; | ||
const hour: number; | ||
const day: number; | ||
const week: number; | ||
function setTimezoneOffset(offset: number): void; | ||
function getTimezoneOffset(): number; | ||
function getDateNumber(date?: number | Date, offset?: number): number; | ||
function fromDateNumber(value: number, offset?: number): Date; | ||
function parseTime(source: string): number; | ||
function parseDate(date: string): Date; | ||
function formatTimeShort(ms: number): string; | ||
/** @deprecated use i18n formatter instead */ | ||
function formatTime(ms: number): string; | ||
function template(template: string, time?: Date): string; | ||
function formatTimeInterval(time: Date, interval?: number): string; | ||
} | ||
export { segment, segment as s }; | ||
export namespace Logger { | ||
interface LevelConfig { | ||
base: number; | ||
[K: string]: Level; | ||
} | ||
type Level = number | LevelConfig; | ||
type Function = (format: any, ...param: any[]) => void; | ||
type Type = 'success' | 'error' | 'info' | 'warn' | 'debug'; | ||
type Formatter = (this: Logger, value: any) => string; | ||
interface Target { | ||
/** | ||
* - 0: no color support | ||
* - 1: 16 color support | ||
* - 2: 256 color support | ||
* - 3: truecolor support | ||
*/ | ||
colors?: number; | ||
showDiff?: boolean; | ||
showTime?: string; | ||
print(text: string): void; | ||
} | ||
} | ||
export interface Logger extends Record<Logger.Type, Logger.Function> { | ||
} | ||
export class Logger { | ||
static readonly SILENT = 0; | ||
static readonly SUCCESS = 1; | ||
static readonly ERROR = 1; | ||
static readonly INFO = 2; | ||
static readonly WARN = 2; | ||
static readonly DEBUG = 3; | ||
static timestamp: number; | ||
static colors: number[]; | ||
static instances: Record<string, Logger>; | ||
static targets: Logger.Target[]; | ||
static levels: Logger.LevelConfig; | ||
static formatters: Record<string, Logger.Formatter>; | ||
static color(code: number, value: any, decoration?: string): string; | ||
static code(name: string): number; | ||
name: string; | ||
level: number; | ||
private code; | ||
constructor(name: string); | ||
extend(namespace: string): Logger; | ||
} | ||
export { segment, segment as s, Schema, Logger }; | ||
export * from 'cosmokit'; |
388
lib/node.js
@@ -42,6 +42,5 @@ var __create = Object.create; | ||
__export(exports, { | ||
Logger: () => Logger, | ||
Logger: () => import_reggol.default, | ||
Random: () => Random, | ||
Schema: () => import_schemastery.default, | ||
Time: () => Time, | ||
assertProperty: () => assertProperty, | ||
@@ -74,363 +73,7 @@ camelCase: () => camelCase, | ||
var import_segment = __toModule(require("@koishijs/segment")); | ||
var import_schemastery = __toModule(require("schemastery")); | ||
var import_reggol = __toModule(require("reggol")); | ||
__reExport(exports, __toModule(require("cosmokit"))); | ||
// packages/utils/src/logger/node.ts | ||
var import_util = __toModule(require("util")); | ||
var import_supports_color = __toModule(require("supports-color")); | ||
// packages/utils/src/time.ts | ||
var Time; | ||
(function(Time2) { | ||
Time2.millisecond = 1; | ||
Time2.second = 1e3; | ||
Time2.minute = Time2.second * 60; | ||
Time2.hour = Time2.minute * 60; | ||
Time2.day = Time2.hour * 24; | ||
Time2.week = Time2.day * 7; | ||
let timezoneOffset = new Date().getTimezoneOffset(); | ||
function setTimezoneOffset(offset) { | ||
timezoneOffset = offset; | ||
} | ||
Time2.setTimezoneOffset = setTimezoneOffset; | ||
__name(setTimezoneOffset, "setTimezoneOffset"); | ||
function getTimezoneOffset() { | ||
return timezoneOffset; | ||
} | ||
Time2.getTimezoneOffset = getTimezoneOffset; | ||
__name(getTimezoneOffset, "getTimezoneOffset"); | ||
function getDateNumber(date = new Date(), offset) { | ||
if (typeof date === "number") | ||
date = new Date(date); | ||
if (offset === void 0) | ||
offset = timezoneOffset; | ||
return Math.floor((date.valueOf() / Time2.minute - offset) / 1440); | ||
} | ||
Time2.getDateNumber = getDateNumber; | ||
__name(getDateNumber, "getDateNumber"); | ||
function fromDateNumber(value, offset) { | ||
const date = new Date(value * Time2.day); | ||
if (offset === void 0) | ||
offset = timezoneOffset; | ||
return new Date(+date + offset * Time2.minute); | ||
} | ||
Time2.fromDateNumber = fromDateNumber; | ||
__name(fromDateNumber, "fromDateNumber"); | ||
const numeric = /\d+(?:\.\d+)?/.source; | ||
const timeRegExp = new RegExp(`^${[ | ||
"w(?:eek(?:s)?)?", | ||
"d(?:ay(?:s)?)?", | ||
"h(?:our(?:s)?)?", | ||
"m(?:in(?:ute)?(?:s)?)?", | ||
"s(?:ec(?:ond)?(?:s)?)?" | ||
].map((unit) => `(${numeric}${unit})?`).join("")}$`); | ||
function parseTime(source) { | ||
const capture = timeRegExp.exec(source); | ||
if (!capture) | ||
return 0; | ||
return (parseFloat(capture[1]) * Time2.week || 0) + (parseFloat(capture[2]) * Time2.day || 0) + (parseFloat(capture[3]) * Time2.hour || 0) + (parseFloat(capture[4]) * Time2.minute || 0) + (parseFloat(capture[5]) * Time2.second || 0); | ||
} | ||
Time2.parseTime = parseTime; | ||
__name(parseTime, "parseTime"); | ||
function parseDate(date) { | ||
const parsed = parseTime(date); | ||
if (parsed) { | ||
date = Date.now() + parsed; | ||
} else if (/^\d{1,2}(:\d{1,2}){1,2}$/.test(date)) { | ||
date = `${new Date().toLocaleDateString()}-${date}`; | ||
} else if (/^\d{1,2}-\d{1,2}-\d{1,2}(:\d{1,2}){1,2}$/.test(date)) { | ||
date = `${new Date().getFullYear()}-${date}`; | ||
} | ||
return date ? new Date(date) : new Date(); | ||
} | ||
Time2.parseDate = parseDate; | ||
__name(parseDate, "parseDate"); | ||
function formatTimeShort(ms) { | ||
const abs = Math.abs(ms); | ||
if (abs >= Time2.day - Time2.hour / 2) { | ||
return Math.round(ms / Time2.day) + "d"; | ||
} else if (abs >= Time2.hour - Time2.minute / 2) { | ||
return Math.round(ms / Time2.hour) + "h"; | ||
} else if (abs >= Time2.minute - Time2.second / 2) { | ||
return Math.round(ms / Time2.minute) + "m"; | ||
} else if (abs >= Time2.second) { | ||
return Math.round(ms / Time2.second) + "s"; | ||
} | ||
return ms + "ms"; | ||
} | ||
Time2.formatTimeShort = formatTimeShort; | ||
__name(formatTimeShort, "formatTimeShort"); | ||
function formatTime(ms) { | ||
let result; | ||
if (ms >= Time2.day - Time2.hour / 2) { | ||
ms += Time2.hour / 2; | ||
result = Math.floor(ms / Time2.day) + " 天"; | ||
if (ms % Time2.day > Time2.hour) { | ||
result += ` ${Math.floor(ms % Time2.day / Time2.hour)} 小时`; | ||
} | ||
} else if (ms >= Time2.hour - Time2.minute / 2) { | ||
ms += Time2.minute / 2; | ||
result = Math.floor(ms / Time2.hour) + " 小时"; | ||
if (ms % Time2.hour > Time2.minute) { | ||
result += ` ${Math.floor(ms % Time2.hour / Time2.minute)} 分钟`; | ||
} | ||
} else if (ms >= Time2.minute - Time2.second / 2) { | ||
ms += Time2.second / 2; | ||
result = Math.floor(ms / Time2.minute) + " 分钟"; | ||
if (ms % Time2.minute > Time2.second) { | ||
result += ` ${Math.floor(ms % Time2.minute / Time2.second)} 秒`; | ||
} | ||
} else { | ||
result = Math.round(ms / Time2.second) + " 秒"; | ||
} | ||
return result; | ||
} | ||
Time2.formatTime = formatTime; | ||
__name(formatTime, "formatTime"); | ||
const dayMap = ["日", "一", "二", "三", "四", "五", "六"]; | ||
function toDigits(source, length = 2) { | ||
return source.toString().padStart(length, "0"); | ||
} | ||
__name(toDigits, "toDigits"); | ||
function template2(template3, time = new Date()) { | ||
return template3.replace("yyyy", time.getFullYear().toString()).replace("yy", time.getFullYear().toString().slice(2)).replace("MM", toDigits(time.getMonth() + 1)).replace("dd", toDigits(time.getDate())).replace("hh", toDigits(time.getHours())).replace("mm", toDigits(time.getMinutes())).replace("ss", toDigits(time.getSeconds())).replace("SSS", toDigits(time.getMilliseconds(), 3)); | ||
} | ||
Time2.template = template2; | ||
__name(template2, "template"); | ||
function toHourMinute(time) { | ||
return `${toDigits(time.getHours())}:${toDigits(time.getMinutes())}`; | ||
} | ||
__name(toHourMinute, "toHourMinute"); | ||
function formatTimeInterval(time, interval) { | ||
if (!interval) { | ||
return template2("yyyy-MM-dd hh:mm:ss", time); | ||
} else if (interval === Time2.day) { | ||
return `每天 ${toHourMinute(time)}`; | ||
} else if (interval === Time2.week) { | ||
return `每周${dayMap[time.getDay()]} ${toHourMinute(time)}`; | ||
} else { | ||
return `${template2("yyyy-MM-dd hh:mm:ss", time)} 起每隔 ${formatTime(interval)}`; | ||
} | ||
} | ||
Time2.formatTimeInterval = formatTimeInterval; | ||
__name(formatTimeInterval, "formatTimeInterval"); | ||
})(Time || (Time = {})); | ||
// packages/utils/src/logger/node.ts | ||
var c16 = [6, 2, 3, 4, 5, 1]; | ||
var c256 = [ | ||
20, | ||
21, | ||
26, | ||
27, | ||
32, | ||
33, | ||
38, | ||
39, | ||
40, | ||
41, | ||
42, | ||
43, | ||
44, | ||
45, | ||
56, | ||
57, | ||
62, | ||
63, | ||
68, | ||
69, | ||
74, | ||
75, | ||
76, | ||
77, | ||
78, | ||
79, | ||
80, | ||
81, | ||
92, | ||
93, | ||
98, | ||
99, | ||
112, | ||
113, | ||
129, | ||
134, | ||
135, | ||
148, | ||
149, | ||
160, | ||
161, | ||
162, | ||
163, | ||
164, | ||
165, | ||
166, | ||
167, | ||
168, | ||
169, | ||
170, | ||
171, | ||
172, | ||
173, | ||
178, | ||
179, | ||
184, | ||
185, | ||
196, | ||
197, | ||
198, | ||
199, | ||
200, | ||
201, | ||
202, | ||
203, | ||
204, | ||
205, | ||
206, | ||
207, | ||
208, | ||
209, | ||
214, | ||
215, | ||
220, | ||
221 | ||
]; | ||
var _Logger = class { | ||
constructor(name) { | ||
this.name = name; | ||
this.extend = (namespace) => { | ||
return new _Logger(`${this.name}:${namespace}`); | ||
}; | ||
if (name in _Logger.instances) | ||
return _Logger.instances[name]; | ||
_Logger.instances[name] = this; | ||
this.code = _Logger.code(name); | ||
this.createMethod("success", "[S] ", _Logger.SUCCESS); | ||
this.createMethod("error", "[E] ", _Logger.ERROR); | ||
this.createMethod("info", "[I] ", _Logger.INFO); | ||
this.createMethod("warn", "[W] ", _Logger.WARN); | ||
this.createMethod("debug", "[D] ", _Logger.DEBUG); | ||
} | ||
static color(target, code, value, decoration = "") { | ||
if (!target.colors) | ||
return "" + value; | ||
return `[3${code < 8 ? code : "8;5;" + code}${target.colors >= 2 ? decoration : ""}m${value}[0m`; | ||
} | ||
static code(name) { | ||
let hash = 0; | ||
for (let i = 0; i < name.length; i++) { | ||
hash = (hash << 3) - hash + name.charCodeAt(i); | ||
hash |= 0; | ||
} | ||
return _Logger.colors[Math.abs(hash) % _Logger.colors.length]; | ||
} | ||
createMethod(name, prefix, minLevel) { | ||
this[name] = (...args) => { | ||
if (this.level < minLevel) | ||
return; | ||
const now = Date.now(); | ||
for (const target of _Logger.targets) { | ||
let indent = 4, output = ""; | ||
if (target.showTime) { | ||
indent += target.showTime.length + 1; | ||
output += Time.template(target.showTime + " "); | ||
} | ||
output += prefix + this.color(target, this.name, ";1") + " " + this.format(target, indent, ...args); | ||
if (target.showDiff) { | ||
const diff = _Logger.timestamp && now - _Logger.timestamp; | ||
output += this.color(target, " +" + Time.formatTimeShort(diff)); | ||
} | ||
target.print(output); | ||
} | ||
_Logger.timestamp = now; | ||
}; | ||
} | ||
color(target, value, decoration = "") { | ||
return _Logger.color(target, this.code, value, decoration); | ||
} | ||
format(target, indent, ...args) { | ||
if (args[0] instanceof Error) { | ||
args[0] = args[0].stack || args[0].message; | ||
} else if (typeof args[0] !== "string") { | ||
args.unshift("%O"); | ||
} | ||
let index = 0; | ||
args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format2) => { | ||
if (match === "%%") | ||
return "%"; | ||
index += 1; | ||
const formatter = _Logger.formatters[format2]; | ||
if (typeof formatter === "function") { | ||
match = formatter(args[index], target, this); | ||
args.splice(index, 1); | ||
index -= 1; | ||
} | ||
return match; | ||
}).replace(/\n/g, "\n" + " ".repeat(indent)); | ||
return (0, import_util.format)(...args); | ||
} | ||
get level() { | ||
var _a; | ||
const paths = this.name.split(":"); | ||
let config = _Logger.levels; | ||
do { | ||
config = (_a = config[paths.shift()]) != null ? _a : config["base"]; | ||
} while (paths.length && typeof config === "object"); | ||
return config; | ||
} | ||
set level(value) { | ||
const paths = this.name.split(":"); | ||
let config = _Logger.levels; | ||
while (paths.length > 1) { | ||
const name = paths.shift(); | ||
const value2 = config[name]; | ||
if (typeof value2 === "object") { | ||
config = value2; | ||
} else { | ||
config = config[name] = { base: value2 != null ? value2 : config.base }; | ||
} | ||
} | ||
config[paths[0]] = value; | ||
} | ||
}; | ||
var Logger = _Logger; | ||
__name(Logger, "Logger"); | ||
Logger.SILENT = 0; | ||
Logger.SUCCESS = 1; | ||
Logger.ERROR = 1; | ||
Logger.INFO = 2; | ||
Logger.WARN = 2; | ||
Logger.DEBUG = 3; | ||
Logger.timestamp = 0; | ||
Logger.colors = import_supports_color.stderr ? import_supports_color.stderr.has256 ? c256 : c16 : []; | ||
Logger.instances = {}; | ||
Logger.targets = [{ | ||
colors: import_supports_color.stderr && import_supports_color.stderr.level, | ||
print(text) { | ||
process.stderr.write(text + "\n"); | ||
} | ||
}]; | ||
Logger.formatters = { | ||
c: (value, target, logger) => _Logger.color(target, logger.code, value), | ||
C: (value, target) => _Logger.color(target, 15, value, ";1"), | ||
o: (value, target) => (0, import_util.inspect)(value, { colors: !!target.colors }).replace(/\s*\n\s*/g, " ") | ||
}; | ||
Logger.levels = { | ||
base: 2 | ||
}; | ||
// packages/utils/src/misc.ts | ||
var misc_exports = {}; | ||
__export(misc_exports, { | ||
Schema: () => import_schemastery.default, | ||
assertProperty: () => assertProperty, | ||
coerce: () => coerce, | ||
defineEnumProperty: () => defineEnumProperty, | ||
enumKeys: () => enumKeys, | ||
isInteger: () => isInteger, | ||
isType: () => isType, | ||
merge: () => merge, | ||
renameProperty: () => renameProperty, | ||
sleep: () => sleep | ||
}); | ||
var import_schemastery = __toModule(require("schemastery")); | ||
__reExport(misc_exports, __toModule(require("tikloot"))); | ||
function isInteger(source) { | ||
@@ -486,6 +129,4 @@ return typeof source === "number" && Math.floor(source) === source; | ||
// packages/utils/src/index.ts | ||
__reExport(exports, misc_exports); | ||
// packages/utils/src/observe.ts | ||
var import_cosmokit = __toModule(require("cosmokit")); | ||
var immutable = ["number", "string", "bigint", "boolean", "symbol", "function"]; | ||
@@ -511,3 +152,3 @@ var builtin = ["Date", "RegExp", "Set", "Map", "WeakSet", "WeakMap", "Array"]; | ||
const diff = Object.create(null); | ||
(0, misc_exports.defineProperty)(target, "$diff", diff); | ||
(0, import_cosmokit.defineProperty)(target, "$diff", diff); | ||
notify = /* @__PURE__ */ __name((key) => { | ||
@@ -550,3 +191,3 @@ if (untracked(key)) | ||
for (const method of arrayProxyMethods) { | ||
(0, misc_exports.defineProperty)(target, method, function(...args) { | ||
(0, import_cosmokit.defineProperty)(target, method, function(...args) { | ||
update(); | ||
@@ -577,3 +218,3 @@ return Array.prototype[method].apply(this, args); | ||
continue; | ||
(0, misc_exports.defineProperty)(target, method, function(...args) { | ||
(0, import_cosmokit.defineProperty)(target, method, function(...args) { | ||
const oldValue = target.valueOf(); | ||
@@ -599,7 +240,7 @@ const result = Date.prototype[method].apply(this, args); | ||
} | ||
let update = misc_exports.noop; | ||
let update = import_cosmokit.noop; | ||
if (typeof args[0] === "function") | ||
update = args.shift(); | ||
const observer = observeObject(target, null); | ||
(0, misc_exports.defineProperty)(observer, "$update", /* @__PURE__ */ __name(function $update() { | ||
(0, import_cosmokit.defineProperty)(observer, "$update", /* @__PURE__ */ __name(function $update() { | ||
const diff = __spreadValues({}, this.$diff); | ||
@@ -614,3 +255,3 @@ const fields = Object.keys(diff); | ||
}, "$update")); | ||
(0, misc_exports.defineProperty)(observer, "$merge", /* @__PURE__ */ __name(function $merge(value) { | ||
(0, import_cosmokit.defineProperty)(observer, "$merge", /* @__PURE__ */ __name(function $merge(value) { | ||
for (const key in value) { | ||
@@ -836,3 +477,3 @@ if (key in this.$diff) { | ||
__name(get, "get"); | ||
function format2(source, ...params) { | ||
function format(source, ...params) { | ||
if (params[0] && typeof params[0] === "object") { | ||
@@ -849,4 +490,4 @@ source = interpolate(source, params[0]); | ||
} | ||
template2.format = format2; | ||
__name(format2, "format"); | ||
template2.format = format; | ||
__name(format, "format"); | ||
})(template || (template = {})); | ||
@@ -858,3 +499,2 @@ // Annotate the CommonJS export names for ESM import in node: | ||
Schema, | ||
Time, | ||
assertProperty, | ||
@@ -861,0 +501,0 @@ camelCase, |
{ | ||
"name": "@koishijs/utils", | ||
"description": "Utilities for Koishi", | ||
"version": "5.3.0", | ||
"version": "5.4.0", | ||
"main": "lib/node.js", | ||
@@ -33,6 +33,7 @@ "module": "lib/browser.js", | ||
"@koishijs/segment": "^1.1.1", | ||
"schemastery": "^3.3.0", | ||
"supports-color": "^8.1.1", | ||
"tikloot": "^1.0.2" | ||
"cosmokit": "^1.1.1", | ||
"reggol": "^1.0.1", | ||
"schemastery": "^3.3.2", | ||
"supports-color": "^8.1.1" | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
58638
5
710
+ Addedcosmokit@^1.1.1
+ Addedreggol@^1.0.1
+ Addedobject-inspect@1.13.4(transitive)
+ Addedreggol@1.7.1(transitive)
- Removedtikloot@^1.0.2
- Removedtikloot@1.0.2(transitive)
Updatedschemastery@^3.3.2