Comparing version 0.21.1-dev.1 to 0.21.1-dev.2
@@ -25,7 +25,7 @@ #!/usr/bin/env node | ||
const $=async(b,$)=>{const{tryGet:q,tryGetFirst:T,getFirst:O}=$ | ||
const N=q("quiet")?()=>{}:console.log | ||
const P=(e,r)=>e(r).then(()=>N(`[${b}] done: ${r}`),e=>N(`[${b}] error: ${r}\n${e.stack||e}`)) | ||
const k=q(b)||[] | ||
const x=Boolean(q("json")) | ||
const A=T("input-file") | ||
const A=q("quiet")?()=>{}:console.log | ||
const N=(e,r)=>e(r).then(()=>A(`[${b}] done: ${r}`),e=>A(`[${b}] error: ${r}\n${e.stack||e}`)) | ||
const P=q(b)||[] | ||
const k=Boolean(q("json")) | ||
const x=T("input-file") | ||
const F=T("output-file") | ||
@@ -35,8 +35,8 @@ const j=async()=>{const e=(T("host")||"").split(":") | ||
return{hostname:r,port:Number(e[1]||await(0,l.autoTestServerPort)([80,8080,8888,8800,8e3],r))}} | ||
switch(b){case"eval":case"eval-readline":{let t=await(0,w.evalScript)(A?String((0,r.readFileSync)(A)):k[0],A?k:k.slice(1),A?(0,e.dirname)(A):process.cwd(),$) | ||
"eval-readline"===b&&(t=await(0,w.evalReadlineExtend)(t,O("root"),N)) | ||
switch(b){case"eval":case"eval-readline":{let t=await(0,w.evalScript)(x?String((0,r.readFileSync)(x)):P[0],x?P:P.slice(1),x?(0,e.dirname)(x):process.cwd(),$) | ||
"eval-readline"===b&&(t=await(0,w.evalReadlineExtend)(t,O("root"),A)) | ||
return void 0!==t&&(e=>F?(0,r.writeFileSync)(F,e):(0,n.pipeStreamAsync)(process.stdout,(0,n.bufferToStream)(e)))(t instanceof Buffer?t:Buffer.from(String(t)))}case"repl":return(0,t.start)({prompt:"> ",input:process.stdin,output:process.stdout,useGlobal:!0}).context.require=require | ||
case"wait":{const e=k[0]||2e3 | ||
return(0,o.setTimeoutAsync)(e)}case"echo":return h(k) | ||
case"cat":if(k.length)for(const e of k)await(0,n.pipeStreamAsync)(process.stdout,(0,r.createReadStream)(e)) | ||
case"wait":{const e=P[0]||2e3 | ||
return(0,o.setTimeoutAsync)(e)}case"echo":return h(P) | ||
case"cat":if(P.length)for(const e of P)await(0,n.pipeStreamAsync)(process.stdout,(0,r.createReadStream)(e)) | ||
else process.stdin.isTTY||await(0,n.pipeStreamAsync)(process.stdout,process.stdin) | ||
@@ -46,42 +46,42 @@ return | ||
const l="write"===b?"w":"a" | ||
return(0,n.pipeStreamAsync)((0,r.createWriteStream)(k[0],{flags:l}),process.stdin) | ||
case"open":{const r=k[0]||"." | ||
return(0,d.runSync)({command:(0,m.getDefaultOpen)(),argList:[r.includes("://")?r:(0,e.normalize)(r)]})}case"status":return h(x?{system:(0,f.getSystemStatus)(),process:(0,f.getProcessStatus)()}:(0,f.describeSystemStatus)()) | ||
case"file-list":case"file-list-all":case"file-tree":return h(await(0,w.collectFile)(b,k[0]||process.cwd())) | ||
case"file-create-directory":for(const e of k)await P(c.createDirectory,e) | ||
return(0,n.pipeStreamAsync)((0,r.createWriteStream)(P[0],{flags:l}),process.stdin) | ||
case"open":{const r=P[0]||"." | ||
return(0,d.runSync)({command:(0,m.getDefaultOpen)(),argList:[r.includes("://")?r:(0,e.normalize)(r)]})}case"status":return h(k?{system:(0,f.getSystemStatus)(),process:(0,f.getCurrentProcessStatus)()}:(0,f.describeSystemStatus)()) | ||
case"file-list":case"file-list-all":case"file-tree":return h(await(0,w.collectFile)(b,P[0]||process.cwd())) | ||
case"file-create-directory":for(const e of P)await N(c.createDirectory,e) | ||
return | ||
case"file-modify-copy":return u.modify.copy(k[0],k[1]) | ||
case"file-modify-move":return u.modify.move(k[0],k[1]) | ||
case"file-modify-delete":for(const e of k)await P(u.modify.delete,e) | ||
case"file-modify-copy":return u.modify.copy(P[0],P[1]) | ||
case"file-modify-move":return u.modify.move(P[0],P[1]) | ||
case"file-modify-delete":for(const e of P)await N(u.modify.delete,e) | ||
return | ||
case"file-merge":{const[e,...t]=k | ||
case"file-merge":{const[e,...t]=P | ||
for(const s of t)await(0,n.pipeStreamAsync)((0,r.createWriteStream)(e,{flags:"a"}),(0,r.createReadStream)(s)) | ||
return}case"fetch":{let[e,t=4,a=0]=k | ||
return}case"fetch":{let[e,t=4,a=0]=P | ||
t=Number(t)||0 | ||
a=Number(a)||0 | ||
const o=await(0,w.fetchWithJump)(e,{headers:{accept:"*/*","user-agent":`${w.packageName}/${w.packageVersion}`},timeout:a},t,(e,r,o)=>N(`[fetch] url: ${e}, jump: ${r}/${t}, timeout: ${a?(0,s.time)(a):"none"}, cookie: ${o.length}`)) | ||
const o=await(0,w.fetchWithJump)(e,{headers:{accept:"*/*","user-agent":`${w.packageName}/${w.packageVersion}`},timeout:a},t,(e,r,o)=>A(`[fetch] url: ${e}, jump: ${r}/${t}, timeout: ${a?(0,s.time)(a):"none"}, cookie: ${o.length}`)) | ||
const i=Number(o.headers["content-length"]) | ||
N(`[fetch] get status: ${o.status}, fetch response content${i?` (${(0,s.binary)(i)}B)`:""}...`) | ||
A(`[fetch] get status: ${o.status}, fetch response content${i?` (${(0,s.binary)(i)}B)`:""}...`) | ||
await(e=>(0,n.pipeStreamAsync)(F?(0,r.createWriteStream)(F):process.stdout,e))(o.stream()) | ||
return N("\n[fetch] done")}case"process-status":{const[e="pid--"]=k | ||
return h(await(0,y.collectAllProcessStatus)(e,x))}case"json-format":{const[e=2]=k | ||
const t=JSON.parse((0,r.readFileSync)(A)) | ||
return A("\n[fetch] done")}case"process-status":{const[e="pid--"]=P | ||
return h(await(k?y.getAllProcessStatusAsync:y.describeAllProcessStatusAsync)(e))}case"json-format":{const[e=2]=P | ||
const t=JSON.parse((0,r.readFileSync)(x)) | ||
const a=(0,s.prettyStringifyJSON)(t,e) | ||
return(0,r.writeFileSync)(F||A,a)}case"server-serve-static":case"server-serve-static-simple":{const[e=3e5]=k | ||
return(0,r.writeFileSync)(F||x,a)}case"server-serve-static":case"server-serve-static-simple":{const[e=3e5]=P | ||
const r="server-serve-static-simple"===b | ||
const t=T("root")||process.cwd() | ||
return(0,v.startServerServeStatic)(Object.assign({isSimpleServe:r,expireTime:Number(e),staticRoot:t,log:N},await j()))}case"server-websocket-group":return(0,S.startServerWebSocketGroup)(Object.assign({log:N},await j())) | ||
case"server-test-connection":return(0,g.startServerTestConnection)(Object.assign({log:N},await j())) | ||
return(0,v.startServerServeStatic)(Object.assign({isSimpleServe:r,expireTime:Number(e),staticRoot:t,log:A},await j()))}case"server-websocket-group":return(0,S.startServerWebSocketGroup)(Object.assign({log:A},await j())) | ||
case"server-test-connection":return(0,g.startServerTestConnection)(Object.assign({log:A},await j())) | ||
case"server-tcp-proxy":{let e | ||
let r | ||
if((0,i.isBasicFunction)(k[0])){e=[{hostname:"custom-hostname",port:"custom-port"}] | ||
r=k[0]}else{e=k.map(e=>{const[r,t]=e.split(":") | ||
if((0,i.isBasicFunction)(P[0])){e=[{hostname:"custom-hostname",port:"custom-port"}] | ||
r=P[0]}else{e=P.map(e=>{const[r,t]=e.split(":") | ||
return{hostname:r||"localhost",port:Number(t)}}) | ||
let t=0 | ||
r=(r=>{t=(t+1)%e.length | ||
r=r=>{t=(t+1)%e.length | ||
const s=e[t] | ||
N(`[CONNECT] ${r.remoteAddress}:${r.remotePort} => ${s.hostname}:${s.port}`) | ||
return s})}const{option:t,start:s}=(0,p.createTCPProxyServer)(Object.assign({getTargetOption:r},await j())) | ||
A(`[CONNECT] ${r.remoteAddress}:${r.remotePort} => ${s.hostname}:${s.port}`) | ||
return s}}const{option:t,start:s}=(0,p.createTCPProxyServer)(Object.assign({getTargetOption:r},await j())) | ||
await s() | ||
return N((0,a.indentList)("[TCPProxy]",[`pid: ${process.pid}`,`at: ${t.hostname}:${t.port}`,...e.map(e=>`proxy to: ${e.hostname}:${e.port}`)]))}}};(async()=>{const e=await(0,b.parseOption)() | ||
return A((0,a.indentList)("[TCPProxy]",[`pid: ${process.pid}`,`at: ${t.hostname}:${t.port}`,...e.map(e=>`proxy to: ${e.hostname}:${e.port}`)]))}}};(async()=>{const e=await(0,b.parseOption)() | ||
const r=b.MODE_NAME_LIST.find(r=>e.tryGet(r)) | ||
@@ -88,0 +88,0 @@ if(!r)return h(e.tryGet("version")?(0,w.getVersion)():(0,b.formatUsage)(null,e.tryGet("help")?null:"simple")) |
@@ -14,7 +14,7 @@ var e=require("path") | ||
var d=require("../function") | ||
exports.startServerServeStatic=(async({isSimpleServe:e,expireTime:r,staticRoot:o,protocol:i="http:",hostname:n,port:c,log:m})=>{const u=(0,a.createPathPrefixLock)(o) | ||
exports.startServerServeStatic=async({isSimpleServe:e,expireTime:r,staticRoot:o,protocol:i="http:",hostname:n,port:c,log:m})=>{const u=(0,a.createPathPrefixLock)(o) | ||
const f=e=>u(decodeURIComponent((0,l.getRouteParamAny)(e))) | ||
const y=(0,p.createResponderServeStatic)({expireTime:r}) | ||
const b=[[e?"/*":"/file/*","GET",e=>y(e,f(e))],!e&&["/list/*","GET",e=>v(e,f(e),o)],!e&&[["/","/*","/file","/list"],"GET",e=>(0,s.responderEndWithRedirect)(e,{redirectUrl:"/list/"})]].filter(Boolean) | ||
await(0,d.commonStartServer)({protocol:i,hostname:n,port:c,routeConfigList:b,isAddFavicon:!e,title:`ServerServeStatic|${e?"no-list":"with-list"}`,extraInfoList:[`staticRoot: '${o}'`,`expireTime: ${(0,t.time)(r)}`],log:m})}) | ||
await(0,d.commonStartServer)({protocol:i,hostname:n,port:c,routeConfigList:b,isAddFavicon:!e,title:`ServerServeStatic|${e?"no-list":"with-list"}`,extraInfoList:[`staticRoot: '${o}'`,`expireTime: ${(0,t.time)(r)}`],log:m})} | ||
const v=async(r,t,s)=>{const l=(0,e.relative)(s,t) | ||
@@ -21,0 +21,0 @@ const p=`/${(0,o.escapeHTML)((0,a.toPosixPath)(l))}` |
@@ -11,3 +11,3 @@ var e=require("../../library/common/time") | ||
const i=["GET","POST","PUT","DELETE"] | ||
exports.startServerTestConnection=(async({protocol:d="http:",hostname:m,port:p,log:f})=>{const y=(0,a.prepareBufferData)(Buffer.from("TEST CONTENT")) | ||
exports.startServerTestConnection=async({protocol:d="http:",hostname:m,port:p,log:f})=>{const y=(0,a.prepareBufferData)(Buffer.from("TEST CONTENT")) | ||
const S=[[["/test-describe","/test-describe/*"],Object.keys(u.METHOD_MAP),async e=>{const{url:s,method:o,httpVersion:n,rawHeaders:u,socket:{remoteAddress:c,remotePort:i}}=e.request | ||
@@ -25,2 +25,2 @@ const d=JSON.stringify({from:`${c}:${i}`,request:{url:s,method:o,httpVersion:n,headers:(0,r.arraySplitChunk)(u,2).map(e=>e.join(": "))}},null,2) | ||
s===t?(0,a.responderSendJSON)(r,{object:{}}):r.response.destroy()}})()],["/","GET",(0,u.createResponderRouteList)({getRouteMap:()=>(0,u.createRouteMap)(S),extraBodyList:[(0,s.DR_BROWSER_SCRIPT_TAG)()]})]] | ||
await(0,c.commonStartServer)({protocol:d,hostname:m,port:p,routeConfigList:S,isAddFavicon:!0,title:"TestConnection",log:f})}) | ||
await(0,c.commonStartServer)({protocol:d,hostname:m,port:p,routeConfigList:S,isAddFavicon:!0,title:"TestConnection",log:f})} |
@@ -61,5 +61,5 @@ var e=require("../../library/common/error") | ||
const S=(e,t)=>{return e.find(t.has,t)} | ||
exports.startServerWebSocketGroup=(async({protocol:e="http:",hostname:r,port:i,log:u})=>{const f=(0,a.prepareBufferData)(Buffer.from((0,d.COMMON_LAYOUT)([(0,d.COMMON_STYLE)(),k],[E,(0,d.COMMON_SCRIPT)({TYPE_CLOSE:"#CLOSE",TYPE_INFO_GROUP:"#INFO_GROUP",TYPE_INFO_USER:"#INFO_USER",TYPE_BUFFER_GROUP:"#BUFFER_GROUP",TYPE_BUFFER_SINGLE:"#BUFFER_SINGLE",FRAME_LENGTH_LIMIT:268435456,onload:h}),(0,o.DR_BROWSER_SCRIPT_TAG)()])),t.BASIC_EXTENSION_MAP.html) | ||
exports.startServerWebSocketGroup=async({protocol:e="http:",hostname:r,port:i,log:u})=>{const f=(0,a.prepareBufferData)(Buffer.from((0,d.COMMON_LAYOUT)([(0,d.COMMON_STYLE)(),k],[E,(0,d.COMMON_SCRIPT)({TYPE_CLOSE:"#CLOSE",TYPE_INFO_GROUP:"#INFO_GROUP",TYPE_INFO_USER:"#INFO_USER",TYPE_BUFFER_GROUP:"#BUFFER_GROUP",TYPE_BUFFER_SINGLE:"#BUFFER_SINGLE",FRAME_LENGTH_LIMIT:268435456,onload:h}),(0,o.DR_BROWSER_SCRIPT_TAG)()])),t.BASIC_EXTENSION_MAP.html) | ||
const y=[["/","GET",e=>(0,a.responderSendBufferCompress)(e,f)],["/*","GET",e=>(0,n.responderEndWithRedirect)(e,{redirectUrl:"/"})]] | ||
const{server:g,option:{baseUrl:b}}=await(0,p.commonStartServer)({protocol:e,hostname:r,port:i,routeConfigList:y,isAddFavicon:!0,title:"WebSocketGroup",log:u});(0,l.enableWebSocketServer)({server:g,onUpgradeRequest:(0,c.createUpdateRequestListener)({responderList:[(0,s.createResponderRouter)({routeMap:(0,s.createRouteMap)([["/websocket-group/*","GET",m]]),baseUrl:b})]}),frameLengthLimit:268435456})}) | ||
const{server:g,option:{baseUrl:b}}=await(0,p.commonStartServer)({protocol:e,hostname:r,port:i,routeConfigList:y,isAddFavicon:!0,title:"WebSocketGroup",log:u});(0,l.enableWebSocketServer)({server:g,onUpgradeRequest:(0,c.createUpdateRequestListener)({responderList:[(0,s.createResponderRouter)({routeMap:(0,s.createRouteMap)([["/websocket-group/*","GET",m]]),baseUrl:b})]}),frameLengthLimit:268435456})} | ||
const k="<style>\nlabel { display: flex; align-items: center; }\np { position: relative; padding: 14px 4px 2px; border-top: 1px solid #ddd; word-break: break-all; }\np:hover { background: #f5f5f5; }\npre { overflow: auto; padding: 0 2px; max-height: 10em; border-left: 1px solid #ddd; color: #666; }\ninput { flex: 1; }\n.flex-column { display: flex; flex-flow: column; }\n.non-flex { flex-shrink: 0; }\n.time-tag, .id-tag { position: absolute; top: 0; font-size: 12px; line-height: 12px; }\n.time-tag { right: 0; color: #aaa }\n.id-tag { left: 0; }\n.color-self { color: #63aeff }\n.color-system { color: #aaa }\n</style>" | ||
@@ -66,0 +66,0 @@ const E='\n<div id="setup" class="flex-column">\n <input id="group-path" class="auto-height" type="text" placeholder="group-path" autofocus />\n <input id="id" class="auto-height" type="text" placeholder="id" />\n</div>\n<button id="button-toggle"></button>\n<div id="log" style="overflow-y: auto; flex: 1; min-height: 0;"></div>\n<button id="button-log-clear" class="non-flex">Clear Log [Ctrl+l]</button>\n<div id="main" class="flex-column non-flex">\n <label for="payload-text">Message Text: </label>\n <textarea id="payload-text" style="min-height: 6em;"></textarea>\n <label>Message File: <input id="payload-file" class="auto-height" type="file" /></label>\n <button id="button-send"></button>\n</div>\n' |
@@ -1,4 +0,4 @@ | ||
exports.isString=(t=>"string"==typeof t) | ||
exports.isBoolean=(t=>"boolean"==typeof t) | ||
exports.isNumber=(t=>"number"==typeof t) | ||
exports.isString=t=>"string"==typeof t | ||
exports.isBoolean=t=>"boolean"==typeof t | ||
exports.isNumber=t=>"number"==typeof t | ||
const t=Number.isInteger | ||
@@ -11,13 +11,13 @@ exports.isInteger=t | ||
exports.isBasicObject=r | ||
exports.isObjectKey=((t,e)=>r(t)&&t.hasOwnProperty(e)) | ||
exports.isObjectContain=((t,e)=>r(t)&&Object.entries(e).every(([e,r])=>t[e]===r)) | ||
exports.isObjectKey=(t,e)=>r(t)&&t.hasOwnProperty(e) | ||
exports.isObjectContain=(t,e)=>r(t)&&Object.entries(e).every(([e,r])=>t[e]===r) | ||
const s=Array.isArray | ||
exports.isBasicArray=s | ||
exports.isArrayLength=((t,e)=>s(t)&&t.length===e) | ||
exports.isBasicFunction=(t=>"function"==typeof t) | ||
exports.isPromiseAlike=(t=>Boolean(t&&"function"==typeof t.then)) | ||
exports.isOneOf=((t,e)=>e.includes(t)) | ||
exports.isFunctionThrow=(t=>{try{return t()&&!1}catch(t){return!0}}) | ||
exports.isFunctionThrowAsync=(async t=>{try{return await t()&&!1}catch(t){return!0}}) | ||
exports.isStrictEqual=((t,e)=>Object.is(t,e)) | ||
exports.isStringifyEqual=((t,r)=>!!Object.is(t,r)||!(!e(t)||!e(r))&&JSON.stringify(t)===JSON.stringify(r)) | ||
exports.isArrayLength=(t,e)=>s(t)&&t.length===e | ||
exports.isBasicFunction=t=>"function"==typeof t | ||
exports.isPromiseAlike=t=>Boolean(t&&"function"==typeof t.then) | ||
exports.isOneOf=(t,e)=>e.includes(t) | ||
exports.isFunctionThrow=t=>{try{return t()&&!1}catch(t){return!0}} | ||
exports.isFunctionThrowAsync=async t=>{try{return await t()&&!1}catch(t){return!0}} | ||
exports.isStrictEqual=(t,e)=>Object.is(t,e) | ||
exports.isStringifyEqual=(t,r)=>!!Object.is(t,r)||!(!e(t)||!e(r))&&JSON.stringify(t)===JSON.stringify(r) |
@@ -1,4 +0,4 @@ | ||
exports.compareString=((e,r)=>e<r?-1:e>r?1:0) | ||
exports.compareStringLocale=((e,r)=>e.localeCompare(r)) | ||
exports.compareStringWithNumber=((t="",o="")=>{if(t===o)return 0 | ||
exports.compareString=(e,r)=>e<r?-1:e>r?1:0 | ||
exports.compareStringLocale=(e,r)=>e.localeCompare(r) | ||
exports.compareStringWithNumber=(t="",o="")=>{if(t===o)return 0 | ||
let c=-1 | ||
@@ -11,3 +11,3 @@ let a,n | ||
const h=e(n) | ||
return l&&(h||e(o.charCodeAt(c-1)))||h&&(l||e(t.charCodeAt(c-1)))?r(t,l?c:c-1)-r(o,h?c:c-1):(a||0)-(n||0)}) | ||
return l&&(h||e(o.charCodeAt(c-1)))||h&&(l||e(t.charCodeAt(c-1)))?r(t,l?c:c-1)-r(o,h?c:c-1):(a||0)-(n||0)} | ||
const e=e=>e>=48&&e<=57 | ||
@@ -14,0 +14,0 @@ const r=(r="",t)=>{let o=t-1 |
@@ -1,2 +0,2 @@ | ||
exports.isEqualArrayBuffer=((t,e)=>{if(t===e)return!0 | ||
exports.isEqualArrayBuffer=(t,e)=>{if(t===e)return!0 | ||
if(t.byteLength!==e.byteLength)return!1 | ||
@@ -6,3 +6,3 @@ const r=new Uint8Array(t) | ||
for(let e=0,o=t.byteLength;e<o;e++)if(r[e]!==n[e])return!1 | ||
return!0}) | ||
return!0} | ||
const t=(t=[])=>{const e=new Uint8Array(t.reduce((t,e)=>t+e.byteLength,0)) | ||
@@ -15,14 +15,14 @@ let r=0 | ||
exports.concatArrayBuffer=t | ||
exports.deconcatArrayBuffer=((t,e,r=0)=>e.map(e=>{const n=t.slice(r,r+e) | ||
exports.deconcatArrayBuffer=(t,e,r=0)=>e.map(e=>{const n=t.slice(r,r+e) | ||
r+=e | ||
return n})) | ||
return n}) | ||
const e=Uint8Array.of(0) | ||
const r=Uint8Array.of(255,255) | ||
exports.toString=(n=>{const o=t([n.byteLength%2?e:r,n]) | ||
exports.toString=n=>{const o=t([n.byteLength%2?e:r,n]) | ||
const f=new DataView(o) | ||
const s=[] | ||
for(let t=0,e=f.byteLength/2;t<e;t++)s.push(String.fromCharCode(f.getUint16(2*t,!1))) | ||
return s.join("")}) | ||
exports.fromString=((t="")=>{const n=new DataView(new ArrayBuffer(2*t.length)) | ||
return s.join("")} | ||
exports.fromString=(t="")=>{const n=new DataView(new ArrayBuffer(2*t.length)) | ||
for(let e=0,r=t.length;e<r;e++)n.setUint16(2*e,t.charCodeAt(e),!1) | ||
return n.buffer.slice(0===n.getUint8(0)?e.byteLength:r.byteLength)}) | ||
return n.buffer.slice(0===n.getUint8(0)?e.byteLength:r.byteLength)} |
@@ -14,12 +14,12 @@ var r=require("./ArrayBuffer") | ||
exports.parseArrayBufferHeader=a | ||
exports.packArrayBufferPacket=((a,n=e)=>(0,r.concatArrayBuffer)([...t((0,r.fromString)(a)),n])) | ||
exports.parseArrayBufferPacket=(e=>{const[t,n]=a(e) | ||
return[(0,r.toString)(t),e.slice(n)]}) | ||
exports.packChainArrayBufferPacket=((e=[])=>{const a=new DataView(new ArrayBuffer(4*e.length)) | ||
exports.packArrayBufferPacket=(a,n=e)=>(0,r.concatArrayBuffer)([...t((0,r.fromString)(a)),n]) | ||
exports.parseArrayBufferPacket=e=>{const[t,n]=a(e) | ||
return[(0,r.toString)(t),e.slice(n)]} | ||
exports.packChainArrayBufferPacket=(e=[])=>{const a=new DataView(new ArrayBuffer(4*e.length)) | ||
e.forEach(({byteLength:r},e)=>a.setUint32(4*e,r,!1)) | ||
return(0,r.concatArrayBuffer)([...t(a.buffer),...e])}) | ||
exports.parseChainArrayBufferPacket=(e=>{const[t,n]=a(e) | ||
return(0,r.concatArrayBuffer)([...t(a.buffer),...e])} | ||
exports.parseChainArrayBufferPacket=e=>{const[t,n]=a(e) | ||
const f=new DataView(t) | ||
const s=[] | ||
for(let r=0,e=f.byteLength/4;r<e;r++)s.push(f.getUint32(4*r,!1)) | ||
return(0,r.deconcatArrayBuffer)(e,s,n)}) | ||
return(0,r.deconcatArrayBuffer)(e,s,n)} |
@@ -5,3 +5,3 @@ var e=require("../module/Event") | ||
exports.createCache=r | ||
exports.createCacheMap=(({valueSizeSumMax:s,valueSizeSingleMax:a=Math.max(.05*s,1),eventHub:i=(0,e.createHub)()})=>{const n=Boolean(i) | ||
exports.createCacheMap=({valueSizeSumMax:s,valueSizeSingleMax:a=Math.max(.05*s,1),eventHub:i=(0,e.createHub)()})=>{const n=Boolean(i) | ||
const{clear:u,subscribe:c,unsubscribe:o,send:l}=n?i:{} | ||
@@ -33,2 +33,2 @@ const p=new Map | ||
return e},parseList:(e,t=Date.now())=>e.forEach(({key:e,value:s,size:a,expireAt:i})=>{const n=r(e,s,a,i) | ||
n.expireAt<=t?k(n):b(n)})}}) | ||
n.expireAt<=t?k(n):b(n)})}} |
@@ -1,5 +0,5 @@ | ||
exports.hashStringToNumber=((t="",r=0)=>{for(let e=0,o=t.length;e<o;e++)r=(r<<5)-r+t.charCodeAt(e)>>>0 | ||
return r}) | ||
exports.reverseString=(t=>[...t].reverse().join("")) | ||
exports.swapObfuscateString=((t="")=>{const r=t.length | ||
exports.hashStringToNumber=(t="",r=0)=>{for(let e=0,o=t.length;e<o;e++)r=(r<<5)-r+t.charCodeAt(e)>>>0 | ||
return r} | ||
exports.reverseString=t=>[...t].reverse().join("") | ||
exports.swapObfuscateString=(t="")=>{const r=t.length | ||
const e=r-1 | ||
@@ -11,6 +11,6 @@ const o=Math.floor(.5*r) | ||
n[r]=t.charAt(o) | ||
n[e-r]=t.charAt(e-o)}return n.join("")}) | ||
exports.tryParseJSONObject=((t,r={})=>{try{const r=JSON.parse(t) | ||
if("object"==typeof r&&null!==r)return r}catch(t){}return r}) | ||
exports.getValueByKeyList=((t,r)=>{for(const e of r){if(!t||"object"!=typeof t||!t.hasOwnProperty(e))return | ||
t=t[e]}return t}) | ||
n[e-r]=t.charAt(e-o)}return n.join("")} | ||
exports.tryParseJSONObject=(t,r={})=>{try{const r=JSON.parse(t) | ||
if("object"==typeof r&&null!==r)return r}catch(t){}return r} | ||
exports.getValueByKeyList=(t,r)=>{for(const e of r){if(!t||"object"!=typeof t||!t.hasOwnProperty(e))return | ||
t=t[e]}return t} |
@@ -1,2 +0,2 @@ | ||
exports.createDoublyLinkedList=(()=>{let t,n,r | ||
exports.createDoublyLinkedList=()=>{let t,n,r | ||
const p=()=>{t=e(null) | ||
@@ -59,4 +59,4 @@ n=e(null) | ||
e.next=n | ||
n.prev=e},push:e=>x(e,n),pop:()=>o(n.prev),unshift:e=>v(e,t),shift:()=>o(t.next)}}) | ||
n.prev=e},push:e=>x(e,n),pop:()=>o(n.prev),unshift:e=>v(e,t),shift:()=>o(t.next)}} | ||
const e=(e,t=null,n=null)=>({value:e,prev:t,next:n}) | ||
exports.createNode=e |
@@ -1,2 +0,2 @@ | ||
exports.createListMap=(()=>{const e=new Map | ||
exports.createListMap=()=>{const e=new Map | ||
return{clear:()=>{e.clear()},add:(t,r)=>{let s=e.get(t) | ||
@@ -11,2 +11,2 @@ if(void 0===s){s=[] | ||
return s&&s[r]},getList:t=>e.get(t),has:(t,r)=>{const s=e.get(t) | ||
return Boolean(s&&s.includes(r))},hasList:t=>e.has(t),forEach:t=>{e.forEach((e,r)=>e.forEach(e=>t(e,r)))},forEachList:t=>{e.forEach(t)}}}) | ||
return Boolean(s&&s.includes(r))},hasList:t=>e.has(t),forEach:t=>{e.forEach((e,r)=>e.forEach(e=>t(e,r)))},forEachList:t=>{e.forEach(t)}}} |
var e=require("../error") | ||
const t=()=>{} | ||
exports.createSaveQueue=(({onError:r,doSave:a,beforeSave:n=t,afterSave:c=t})=>{let o=[] | ||
exports.createSaveQueue=({onError:r,doSave:a,beforeSave:n=t,afterSave:c=t})=>{let o=[] | ||
let s=!1 | ||
@@ -15,2 +15,2 @@ let g={} | ||
if(r)throw r | ||
c()})().catch(r)},filter:e=>{o=o.filter(e)},getLength:()=>o.length,getIsSaving:()=>s,getSavingState:()=>g}}) | ||
c()})().catch(r)},filter:e=>{o=o.filter(e)},getLength:()=>o.length,getIsSaving:()=>s,getSavingState:()=>g}} |
@@ -12,3 +12,3 @@ const e=()=>{const e=new Map | ||
exports.createSetMap=e | ||
exports.getInvertSetMap=((t,r=e())=>{t.forEach((e,t)=>r.add(e,t)) | ||
return r}) | ||
exports.getInvertSetMap=(t,r=e())=>{t.forEach((e,t)=>r.add(e,t)) | ||
return r} |
@@ -1,6 +0,6 @@ | ||
exports.createToggle=(()=>{const e=new Map | ||
exports.createToggle=()=>{const e=new Map | ||
const t=(t,r)=>{void 0===r&&(r=!e.get(t)) | ||
e.set(t,r) | ||
return r} | ||
t.get=(t=>e.get(t)) | ||
return t}) | ||
t.get=t=>e.get(t) | ||
return t} |
@@ -9,3 +9,3 @@ const t=t=>{const r=(r,e)=>{const n=t(e) | ||
exports.createTreeDepthFirstSearch=t | ||
exports.createTreeDepthFirstSearchAsync=(t=>{const r=async(r,e)=>{const n=await t(e) | ||
exports.createTreeDepthFirstSearchAsync=t=>{const r=async(r,e)=>{const n=await t(e) | ||
Array.isArray(n)&&r.unshift(...n)} | ||
@@ -16,4 +16,4 @@ return async(t,e)=>{let n | ||
for(;n=s.shift();){if(await e(n))return n | ||
await r(s,n)}}}) | ||
exports.createTreeBreadthFirstSearch=(t=>{const r=(r,e)=>{const n=t(e) | ||
await r(s,n)}}} | ||
exports.createTreeBreadthFirstSearch=t=>{const r=(r,e)=>{const n=t(e) | ||
Array.isArray(n)&&r.push(...n)} | ||
@@ -24,4 +24,4 @@ return(t,e)=>{let n | ||
for(;n=s.shift();){if(e(n))return n | ||
r(s,n)}}}) | ||
exports.createTreeBreadthFirstSearchAsync=(t=>{const r=async(r,e)=>{const n=await t(e) | ||
r(s,n)}}} | ||
exports.createTreeBreadthFirstSearchAsync=t=>{const r=async(r,e)=>{const n=await t(e) | ||
Array.isArray(n)&&r.push(...n)} | ||
@@ -32,4 +32,4 @@ return async(t,e)=>{let n | ||
for(;n=s.shift();){if(await e(n))return n | ||
await r(s,n)}}}) | ||
exports.createTreeBottomUpSearch=(t=>{const r=(r,e)=>{const n=t(e) | ||
await r(s,n)}}} | ||
exports.createTreeBottomUpSearch=t=>{const r=(r,e)=>{const n=t(e) | ||
return Boolean(Array.isArray(n)&&r.push([e,n]))} | ||
@@ -41,4 +41,4 @@ return(t,e)=>{const n=[] | ||
if(0!==n.length&&e(t))return t}else{const t=s.shift() | ||
if(!r(n,t)&&e(t))return t}}}}) | ||
exports.createTreeBottomUpSearchAsync=(t=>{const r=async(r,e)=>{const n=await t(e) | ||
if(!r(n,t)&&e(t))return t}}}} | ||
exports.createTreeBottomUpSearchAsync=t=>{const r=async(r,e)=>{const n=await t(e) | ||
return Boolean(Array.isArray(n)&&r.push([e,n]))} | ||
@@ -50,7 +50,7 @@ return async(t,e)=>{const n=[] | ||
if(0!==n.length&&await e(t))return t}else{const t=s.shift() | ||
if(!await r(n,t)&&await e(t))return t}}}}) | ||
exports.prettyStringifyTree=((r,e,n)=>{const s=[] | ||
if(!await r(n,t)&&await e(t))return t}}}} | ||
exports.prettyStringifyTree=(r,e,n)=>{const s=[] | ||
t(e)(r,([t,r,e])=>{s.length=r | ||
0!==r&&(s[r-1]=e?"├─ ":"└─ ") | ||
n(s.join(""),t) | ||
0!==r&&(s[r-1]=e?"│ ":" ")})}) | ||
0!==r&&(s[r-1]=e?"│ ":" ")})} |
@@ -1,7 +0,7 @@ | ||
exports.rethrowError=(r=>{console.warn(r) | ||
throw r}) | ||
exports.tryCall=((r,t,...e)=>{try{return r[t](...e)}catch(r){}}) | ||
exports.catchSync=((r,...t)=>{let e,c | ||
try{e=r(...t)}catch(r){c=r||new Error}return{result:e,error:c}}) | ||
exports.catchAsync=(async(r,...t)=>{let e,c | ||
try{e=await r(...t)}catch(r){c=r||new Error}return{result:e,error:c}}) | ||
exports.rethrowError=r=>{console.warn(r) | ||
throw r} | ||
exports.tryCall=(r,t,...e)=>{try{return r[t](...e)}catch(r){}} | ||
exports.catchSync=(r,...t)=>{let e,c | ||
try{e=r(...t)}catch(r){c=r||new Error}return{result:e,error:c}} | ||
exports.catchAsync=async(r,...t)=>{let e,c | ||
try{e=await r(...t)}catch(r){c=r||new Error}return{result:e,error:c}} |
@@ -1,20 +0,20 @@ | ||
exports.describe=(t=>{const e=typeof t | ||
exports.describe=t=>{const e=typeof t | ||
let o | ||
if("function"===e)o="()=>{...}" | ||
else try{o=JSON.stringify(t)}catch(t){o="{...}"}return`<${e}> ${o}`}) | ||
exports.percent=(t=>`${(100*t).toFixed(2)}%`) | ||
else try{o=JSON.stringify(t)}catch(t){o="{...}"}return`<${e}> ${o}`} | ||
exports.percent=t=>`${(100*t).toFixed(2)}%` | ||
const t=t=>String(Math.floor(t)).padStart(2,"0") | ||
exports.mediaTime=(e=>{const o=Math.abs(e) | ||
return`${e<0?"-":""}${t(o/60)}:${t(o%60)}`}) | ||
exports.decimal=(t=>{const e=.75*Math.abs(t) | ||
return 0===e?"0":e<1e-9?`${(t/1e-12).toFixed(2)}pico`:e<1e-6?`${(t/1e-9).toFixed(2)}nano`:e<.001?`${(t/1e-6).toFixed(2)}micro`:e<1?`${(t/.001).toFixed(2)}milli`:e<1e3?`${(t/1).toFixed(2)}`:e<1e6?`${(t/1e3).toFixed(2)}kilo`:e<1e9?`${(t/1e6).toFixed(2)}mega`:e<1e12?`${(t/1e9).toFixed(2)}giga`:e<1e15?`${(t/1e12).toFixed(2)}tera`:e<1e18?`${(t/1e15).toFixed(2)}peta`:`${(t/1e18).toFixed(2)}exa`}) | ||
exports.time=(t=>{const e=.75*Math.abs(t) | ||
return e<1e3?`${Math.floor(t)}ms`:e<6e4?`${(t/1e3).toFixed(2)}s`:e<36e5?`${(t/6e4).toFixed(2)}m`:e<864e5?`${(t/36e5).toFixed(2)}h`:`${(t/864e5).toFixed(2)}d`}) | ||
exports.binary=(t=>{const e=.75*Math.abs(t) | ||
return e<1024?`${Math.floor(t)}`:e<1048576?`${(t/1024).toFixed(2)}Ki`:e<1073741824?`${(t/1048576).toFixed(2)}Mi`:e<1099511627776?`${(t/1073741824).toFixed(2)}Gi`:`${(t/1099511627776).toFixed(2)}Ti`}) | ||
exports.padTable=(({table:t,padFuncList:e=[],cellPad:o=" | ",rowPad:i="\n",widthMaxList:r=t.reduce((t,e)=>{e.forEach((e,o)=>{t[o]=Math.max(String(e).length,t[o]||0)}) | ||
exports.mediaTime=e=>{const o=Math.abs(e) | ||
return`${e<0?"-":""}${t(o/60)}:${t(o%60)}`} | ||
exports.decimal=t=>{const e=.75*Math.abs(t) | ||
return 0===e?"0":e<1e-9?`${(t/1e-12).toFixed(2)}pico`:e<1e-6?`${(t/1e-9).toFixed(2)}nano`:e<.001?`${(t/1e-6).toFixed(2)}micro`:e<1?`${(t/.001).toFixed(2)}milli`:e<1e3?`${(t/1).toFixed(2)}`:e<1e6?`${(t/1e3).toFixed(2)}kilo`:e<1e9?`${(t/1e6).toFixed(2)}mega`:e<1e12?`${(t/1e9).toFixed(2)}giga`:e<1e15?`${(t/1e12).toFixed(2)}tera`:e<1e18?`${(t/1e15).toFixed(2)}peta`:`${(t/1e18).toFixed(2)}exa`} | ||
exports.time=t=>{const e=.75*Math.abs(t) | ||
return e<1e3?`${Math.floor(t)}ms`:e<6e4?`${(t/1e3).toFixed(2)}s`:e<36e5?`${(t/6e4).toFixed(2)}m`:e<864e5?`${(t/36e5).toFixed(2)}h`:`${(t/864e5).toFixed(2)}d`} | ||
exports.binary=t=>{const e=.75*Math.abs(t) | ||
return e<1024?`${Math.floor(t)}`:e<1048576?`${(t/1024).toFixed(2)}Ki`:e<1073741824?`${(t/1048576).toFixed(2)}Mi`:e<1099511627776?`${(t/1073741824).toFixed(2)}Gi`:`${(t/1099511627776).toFixed(2)}Ti`} | ||
exports.padTable=({table:t,padFuncList:e=[],cellPad:o=" | ",rowPad:i="\n",widthMaxList:r=t.reduce((t,e)=>{e.forEach((e,o)=>{t[o]=Math.max(String(e).length,t[o]||0)}) | ||
return t},[])})=>t.map(t=>t.map((t,o)=>{const i=String(t) | ||
const n=e[o] | ||
const s=r[o] | ||
return n&&"L"!==n?"R"===n?i.padStart(s):n(i,s):i.padEnd(s)}).join(o)).join(i)) | ||
return n&&"L"!==n?"R"===n?i.padStart(s):n(i,s):i.padEnd(s)}).join(o)).join(i) | ||
const e=(t,o,i,r)=>{if(i>=1&&o){if(Array.isArray(o))return((t,o,i,r)=>{if(0===o.length)return t.push("[]") | ||
@@ -37,4 +37,4 @@ t.push("[\n") | ||
t[t.length-1]=`\n${r}}`})(t,o,i,r)}t.push(JSON.stringify(o))} | ||
exports.prettyStringifyJSON=((t,o=2)=>{const i=[] | ||
exports.prettyStringifyJSON=(t,o=2)=>{const i=[] | ||
e(i,t,Math.max(o,0)||0,"") | ||
return i.join("")}) | ||
return i.join("")} |
@@ -11,3 +11,3 @@ var t=require("./time") | ||
exports.debounce=o | ||
exports.throttle=((t,e=250,r=!1)=>{let o=null | ||
exports.throttle=(t,e=250,r=!1)=>{let o=null | ||
return(...n)=>{if(o)return | ||
@@ -17,9 +17,9 @@ const s=r&&null===o | ||
!r&&t.apply(null,n)},e) | ||
s&&t.apply(null,n)}}) | ||
exports.lossyAsync=((t,o=e.rethrowError)=>{let n | ||
s&&t.apply(null,n)}} | ||
exports.lossyAsync=(t,o=e.rethrowError)=>{let n | ||
const s=()=>{n=void 0} | ||
const l=t=>{n=void 0 | ||
o(t)} | ||
return{trigger:(...e)=>{if(!n)try{const o=t.apply(null,e);(0,r.isPromiseAlike)(o)?n=o.then(s,l):s()}catch(t){l(t)}},getRunningPromise:()=>n}}) | ||
exports.withDelayArgvQueue=((t,e=o,...r)=>{let n=[] | ||
return{trigger:(...e)=>{if(!n)try{const o=t.apply(null,e);(0,r.isPromiseAlike)(o)?n=o.then(s,l):s()}catch(t){l(t)}},getRunningPromise:()=>n}} | ||
exports.withDelayArgvQueue=(t,e=o,...r)=>{let n=[] | ||
const s=e(()=>{const e=n | ||
@@ -29,7 +29,7 @@ n=[] | ||
return(...t)=>{n.push(t) | ||
s()}}) | ||
exports.withRepeat=((t,e=0)=>{let r=0 | ||
s()}} | ||
exports.withRepeat=(t,e=0)=>{let r=0 | ||
for(;e>r;){t(r,e) | ||
r++}}) | ||
exports.withRepeatAsync=(async(e,r=0,o=0)=>{let n=0 | ||
r++}} | ||
exports.withRepeatAsync=async(e,r=0,o=0)=>{let n=0 | ||
for(;r>n;){const s=(0,t.clock)() | ||
@@ -39,11 +39,11 @@ await e(n,r) | ||
const l=o-((0,t.clock)()-s) | ||
l>0&&await(0,t.setTimeoutAsync)(l)}}) | ||
exports.withRetry=((t,e=1/0)=>{let r=0 | ||
for(;;)try{return t(r,e)}catch(t){if(e<++r)throw t}}) | ||
exports.withRetryAsync=(async(e,r=1/0,o=0)=>{let n=0 | ||
l>0&&await(0,t.setTimeoutAsync)(l)}} | ||
exports.withRetry=(t,e=1/0)=>{let r=0 | ||
for(;;)try{return t(r,e)}catch(t){if(e<++r)throw t}} | ||
exports.withRetryAsync=async(e,r=1/0,o=0)=>{let n=0 | ||
for(;;){const s=(0,t.clock)() | ||
try{return await e(n,r)}catch(e){if(r<++n)throw e | ||
const l=o-((0,t.clock)()-s) | ||
l>0&&await(0,t.setTimeoutAsync)(l)}}}) | ||
exports.withTimeoutAsync=((t,e)=>n(t(),e)) | ||
l>0&&await(0,t.setTimeoutAsync)(l)}}} | ||
exports.withTimeoutAsync=(t,e)=>n(t(),e) | ||
const n=(t,e)=>{let r=null | ||
@@ -54,3 +54,3 @@ return Promise.race([t,new Promise((t,o)=>{r=setTimeout(()=>o(new Error(`timeout after: ${e}`)),e)})]).then(t=>{clearTimeout(r) | ||
exports.withTimeoutPromise=n | ||
exports.createInsideOutPromise=(()=>{let t,e | ||
exports.createInsideOutPromise=()=>{let t,e | ||
return{promise:new Promise((r,o)=>{t=r | ||
@@ -61,2 +61,2 @@ e=o}),resolve:r=>{const o=t | ||
t=e=void 0 | ||
o&&o(r)}}}) | ||
o&&o(r)}}} |
@@ -5,3 +5,3 @@ const e=Math.PI/180 | ||
exports.RADIAN_TO_DEGREE=t | ||
exports.fromDegree=(t=>t*e) | ||
exports.getDegree=(e=>e*t) | ||
exports.fromDegree=t=>t*e | ||
exports.getDegree=e=>e*t |
@@ -1,9 +0,9 @@ | ||
exports.fromEmpty=(()=>({left:1/0,right:-1/0,top:1/0,bottom:-1/0})) | ||
exports.fromPoint=((t,o)=>({left:Math.min(t.x,o.x),right:Math.max(t.x,o.x),top:Math.min(t.y,o.y),bottom:Math.max(t.y,o.y)})) | ||
exports.fromWidget=(({center:t,size:o,rotate:a})=>{const e=Math.cos(a) | ||
exports.fromEmpty=()=>({left:1/0,right:-1/0,top:1/0,bottom:-1/0}) | ||
exports.fromPoint=(t,o)=>({left:Math.min(t.x,o.x),right:Math.max(t.x,o.x),top:Math.min(t.y,o.y),bottom:Math.max(t.y,o.y)}) | ||
exports.fromWidget=({center:t,size:o,rotate:a})=>{const e=Math.cos(a) | ||
const h=Math.sin(a) | ||
const r=.5*(Math.abs(o.x*e)+Math.abs(o.y*h)) | ||
const s=.5*(Math.abs(o.x*h)+Math.abs(o.y*e)) | ||
return{left:t.x-r,right:t.x+r,top:t.y-s,bottom:t.y+s}}) | ||
exports.fromWidgetList=(t=>t.reduce((t,{center:o,size:a,rotate:e})=>{const h=Math.cos(e) | ||
return{left:t.x-r,right:t.x+r,top:t.y-s,bottom:t.y+s}} | ||
exports.fromWidgetList=t=>t.reduce((t,{center:o,size:a,rotate:e})=>{const h=Math.cos(e) | ||
const r=Math.sin(e) | ||
@@ -16,6 +16,6 @@ const s=.5*(Math.abs(a.x*h)+Math.abs(a.y*r)) | ||
t.bottom=Math.max(t.bottom,o.y+i) | ||
return t},{left:1/0,right:-1/0,top:1/0,bottom:-1/0})) | ||
exports.getCenter=(({left:t,right:o,top:a,bottom:e})=>({x:.5*(t+o),y:.5*(a+e)})) | ||
exports.getUnion=((t,o)=>({left:Math.min(t.left,o.left),right:Math.max(t.right,o.right),top:Math.min(t.top,o.top),bottom:Math.max(t.bottom,o.bottom)})) | ||
exports.isIntersect=((t,o)=>!(t.left>o.right||t.right<o.left||t.top>o.bottom||t.bottom<o.top)) | ||
exports.isContainPoint=(({left:t,right:o,top:a,bottom:e},{x:h,y:r})=>h>=t&&h<=o&&r>=a&&r<=e) | ||
return t},{left:1/0,right:-1/0,top:1/0,bottom:-1/0}) | ||
exports.getCenter=({left:t,right:o,top:a,bottom:e})=>({x:.5*(t+o),y:.5*(a+e)}) | ||
exports.getUnion=(t,o)=>({left:Math.min(t.left,o.left),right:Math.max(t.right,o.right),top:Math.min(t.top,o.top),bottom:Math.max(t.bottom,o.bottom)}) | ||
exports.isIntersect=(t,o)=>!(t.left>o.right||t.right<o.left||t.top>o.bottom||t.bottom<o.top) | ||
exports.isContainPoint=({left:t,right:o,top:a,bottom:e},{x:h,y:r})=>h>=t&&h<=o&&r>=a&&r<=e |
@@ -1,3 +0,3 @@ | ||
exports.fromWidget=(({center:t,size:e,rotate:n})=>{const o=e.y*Math.sin(n)*.5 | ||
exports.fromWidget=({center:t,size:e,rotate:n})=>{const o=e.y*Math.sin(n)*.5 | ||
const r=e.y*Math.cos(n)*-.5 | ||
return{begin:{x:t.x+o,y:t.y+r},end:{x:t.x-o,y:t.y-r}}}) | ||
return{begin:{x:t.x+o,y:t.y+r},end:{x:t.x-o,y:t.y-r}}} |
var x=require("./Vector") | ||
exports.fromEmpty=(()=>({min:{x:1/0,y:1/0},max:{x:-1/0,y:-1/0}})) | ||
exports.fromPoint=((m,i)=>({min:(0,x.min)(m,i),max:(0,x.max)(m,i)})) | ||
exports.fromBoundingRect=(({left:x,right:m,top:i,bottom:n})=>({min:{x,y:i},max:{x:m,y:n}})) | ||
exports.getCenter=(({min:x,max:m})=>({x:.5*(x.x+m.x),y:.5*(x.y+m.y)})) | ||
exports.getSize=(({min:x,max:m})=>({x:m.x-x.x,y:m.y-x.y})) | ||
exports.getUnion=((m,i)=>({min:(0,x.min)(m.min,i.min),max:(0,x.max)(m.max,i.max)})) | ||
exports.getUnionOfList=(x=>x.reduce((x,{min:m,max:i})=>{x.min.x=Math.min(x.min.x,m.x) | ||
exports.fromEmpty=()=>({min:{x:1/0,y:1/0},max:{x:-1/0,y:-1/0}}) | ||
exports.fromPoint=(m,i)=>({min:(0,x.min)(m,i),max:(0,x.max)(m,i)}) | ||
exports.fromBoundingRect=({left:x,right:m,top:i,bottom:n})=>({min:{x,y:i},max:{x:m,y:n}}) | ||
exports.getCenter=({min:x,max:m})=>({x:.5*(x.x+m.x),y:.5*(x.y+m.y)}) | ||
exports.getSize=({min:x,max:m})=>({x:m.x-x.x,y:m.y-x.y}) | ||
exports.getUnion=(m,i)=>({min:(0,x.min)(m.min,i.min),max:(0,x.max)(m.max,i.max)}) | ||
exports.getUnionOfList=x=>x.reduce((x,{min:m,max:i})=>{x.min.x=Math.min(x.min.x,m.x) | ||
x.min.y=Math.min(x.min.y,m.y) | ||
x.max.x=Math.max(x.max.x,i.x) | ||
x.max.y=Math.max(x.max.y,i.y) | ||
return x},{min:{x:1/0,y:1/0},max:{x:-1/0,y:-1/0}})) | ||
exports.isEmpty=(({min:x,max:m})=>m.x<=x.x||m.y<=x.y) | ||
exports.isIntersect=((x,m)=>!(x.max.x<m.min.x||x.min.x>m.max.x||x.max.y<m.min.y||x.min.y>m.max.y)) | ||
exports.isContain=((x,m)=>x.min.x<=m.min.x&&x.max.x>=m.max.x&&x.min.y<=m.min.y&&x.max.y>=m.max.y) | ||
exports.isContainPoint=(({min:x,max:m},{x:i,y:n})=>i>=x.x&&i<=m.x&&n>=x.y&&n<=m.y) | ||
return x},{min:{x:1/0,y:1/0},max:{x:-1/0,y:-1/0}}) | ||
exports.isEmpty=({min:x,max:m})=>m.x<=x.x||m.y<=x.y | ||
exports.isIntersect=(x,m)=>!(x.max.x<m.min.x||x.min.x>m.max.x||x.max.y<m.min.y||x.min.y>m.max.y) | ||
exports.isContain=(x,m)=>x.min.x<=m.min.x&&x.max.x>=m.max.x&&x.min.y<=m.min.y&&x.max.y>=m.max.y | ||
exports.isContainPoint=({min:x,max:m},{x:i,y:n})=>i>=x.x&&i<=m.x&&n>=x.y&&n<=m.y |
const t=2*Math.PI | ||
exports.fromOrigin=(()=>({x:0,y:0})) | ||
exports.fromAngleLength=((t,x)=>({x:x*Math.cos(t),y:x*Math.sin(t)})) | ||
exports.fromOrigin=()=>({x:0,y:0}) | ||
exports.fromAngleLength=(t,x)=>({x:x*Math.cos(t),y:x*Math.sin(t)}) | ||
const x=({x:t,y:x})=>Math.sqrt(t*t+x*x) | ||
exports.getLength=x | ||
exports.getLengthSq=(({x:t,y:x})=>t*t+x*x) | ||
exports.getDist=((t,x)=>Math.sqrt(y(t,x))) | ||
exports.getLengthSq=({x:t,y:x})=>t*t+x*x | ||
exports.getDist=(t,x)=>Math.sqrt(y(t,x)) | ||
const y=(t,x)=>{const y=t.x-x.x | ||
@@ -12,23 +12,23 @@ const e=t.y-x.y | ||
exports.getDistSq=y | ||
exports.getAngle=(({x,y})=>{const e=Math.atan2(y,x) | ||
return e>=0?e:e+t}) | ||
exports.getRotate=((x,y)=>{const e=Math.atan2(x.y-y.y,x.x-y.x) | ||
return e>=0?e:e+t}) | ||
exports.getRotateDelta=((x,y,e)=>{const o=Math.atan2(x.y-e.y,x.x-e.x)-Math.atan2(x.y-y.y,x.x-y.x) | ||
return o>=0?o:o+t}) | ||
exports.getAngle=({x,y})=>{const e=Math.atan2(y,x) | ||
return e>=0?e:e+t} | ||
exports.getRotate=(x,y)=>{const e=Math.atan2(x.y-y.y,x.x-y.x) | ||
return e>=0?e:e+t} | ||
exports.getRotateDelta=(x,y,e)=>{const o=Math.atan2(x.y-e.y,x.x-e.x)-Math.atan2(x.y-y.y,x.x-y.x) | ||
return o>=0?o:o+t} | ||
const e=(t,x)=>t.x*x.x+t.y*x.y | ||
exports.getDotProduct=e | ||
exports.add=((t,x)=>({x:t.x+x.x,y:t.y+x.y})) | ||
exports.sub=((t,x)=>({x:t.x-x.x,y:t.y-x.y})) | ||
exports.multiply=((t,x)=>({x:t.x*x.x,y:t.y*x.y})) | ||
exports.divide=((t,x)=>({x:t.x/x.x,y:t.y/x.y})) | ||
exports.add=(t,x)=>({x:t.x+x.x,y:t.y+x.y}) | ||
exports.sub=(t,x)=>({x:t.x-x.x,y:t.y-x.y}) | ||
exports.multiply=(t,x)=>({x:t.x*x.x,y:t.y*x.y}) | ||
exports.divide=(t,x)=>({x:t.x/x.x,y:t.y/x.y}) | ||
const o=({x:t,y:x},y)=>({x:t*y,y:x*y}) | ||
exports.scale=o | ||
exports.project=((t,y)=>o(y,e(t,y)/Math.pow(x(y),2))) | ||
exports.min=((t,x)=>({x:Math.min(t.x,x.x),y:Math.min(t.y,x.y)})) | ||
exports.max=((t,x)=>({x:Math.max(t.x,x.x),y:Math.max(t.y,x.y)})) | ||
exports.clamp=(({x:t,y:x},y,e)=>({x:Math.max(Math.min(t,e.x),y.x),y:Math.max(Math.min(x,e.y),y.y)})) | ||
exports.abs=(({x:t,y:x})=>({x:Math.abs(t),y:Math.abs(x)})) | ||
exports.round=(({x:t,y:x})=>({x:Math.round(t),y:Math.round(x)})) | ||
exports.lerp=((t,x,y)=>({x:t.x+(x.x-t.x)*y,y:t.y+(x.y-t.y)*y})) | ||
exports.isZero=(({x:t,y:x})=>0===t&&0===x) | ||
exports.project=(t,y)=>o(y,e(t,y)/Math.pow(x(y),2)) | ||
exports.min=(t,x)=>({x:Math.min(t.x,x.x),y:Math.min(t.y,x.y)}) | ||
exports.max=(t,x)=>({x:Math.max(t.x,x.x),y:Math.max(t.y,x.y)}) | ||
exports.clamp=({x:t,y:x},y,e)=>({x:Math.max(Math.min(t,e.x),y.x),y:Math.max(Math.min(x,e.y),y.y)}) | ||
exports.abs=({x:t,y:x})=>({x:Math.abs(t),y:Math.abs(x)}) | ||
exports.round=({x:t,y:x})=>({x:Math.round(t),y:Math.round(x)}) | ||
exports.lerp=(t,x,y)=>({x:t.x+(x.x-t.x)*y,y:t.y+(x.y-t.y)*y}) | ||
exports.isZero=({x:t,y:x})=>0===t&&0===x |
var t=require("../../math/base") | ||
var e=require("./Vector") | ||
const o=.5*Math.PI | ||
exports.fromPoint=((t,e,o)=>Object.assign({},o,{center:{x:.5*(t.x+e.x),y:.5*(t.y+e.y)},size:{x:Math.abs(t.x-e.x),y:Math.abs(t.y-e.y)},rotate:0})) | ||
exports.fromLine=(({begin:t,end:n},s,r)=>Object.assign({},r,{center:{x:.5*(t.x+n.x),y:.5*(t.y+n.y)},size:{x:s,y:(0,e.getDist)(n,t)},rotate:(0,e.getRotate)(n,t)-o})) | ||
exports.fromBoundingRect=(({left:t,right:e,top:o,bottom:n},s)=>Object.assign({},s,{center:{x:.5*(t+e),y:.5*(o+n)},size:{x:e-t,y:n-o},rotate:0})) | ||
exports.getBoundingSize=(({size:{x:t,y:e},rotate:o})=>{const n=Math.cos(o) | ||
exports.fromPoint=(t,e,o)=>Object.assign({},o,{center:{x:.5*(t.x+e.x),y:.5*(t.y+e.y)},size:{x:Math.abs(t.x-e.x),y:Math.abs(t.y-e.y)},rotate:0}) | ||
exports.fromLine=({begin:t,end:n},s,r)=>Object.assign({},r,{center:{x:.5*(t.x+n.x),y:.5*(t.y+n.y)},size:{x:s,y:(0,e.getDist)(n,t)},rotate:(0,e.getRotate)(n,t)-o}) | ||
exports.fromBoundingRect=({left:t,right:e,top:o,bottom:n},s)=>Object.assign({},s,{center:{x:.5*(t+e),y:.5*(o+n)},size:{x:e-t,y:n-o},rotate:0}) | ||
exports.getBoundingSize=({size:{x:t,y:e},rotate:o})=>{const n=Math.cos(o) | ||
const s=Math.sin(o) | ||
return{x:Math.abs(t*n)+Math.abs(e*s),y:Math.abs(t*s)+Math.abs(e*n)}}) | ||
return{x:Math.abs(t*n)+Math.abs(e*s),y:Math.abs(t*s)+Math.abs(e*n)}} | ||
const n=({size:{x:t,y:e},rotate:o})=>Math.abs(t*Math.cos(o))+Math.abs(e*Math.sin(o)) | ||
@@ -14,13 +14,13 @@ exports.getBoundingWidth=n | ||
exports.getBoundingHeight=s | ||
exports.getBoundingLeft=(t=>t.center.x-.5*n(t)) | ||
exports.getBoundingRight=(t=>t.center.x+.5*n(t)) | ||
exports.getBoundingTop=(t=>t.center.y-.5*s(t)) | ||
exports.getBoundingBottom=(t=>t.center.y+.5*s(t)) | ||
exports.round=(o=>Object.assign({},o,{center:(0,e.round)(o.center),size:(0,e.round)(o.size),rotate:(0,t.roundFloat)(o.rotate)})) | ||
exports.localPoint=(({center:t,rotate:e},{x:o,y:n})=>{const s=o-t.x | ||
exports.getBoundingLeft=t=>t.center.x-.5*n(t) | ||
exports.getBoundingRight=t=>t.center.x+.5*n(t) | ||
exports.getBoundingTop=t=>t.center.y-.5*s(t) | ||
exports.getBoundingBottom=t=>t.center.y+.5*s(t) | ||
exports.round=o=>Object.assign({},o,{center:(0,e.round)(o.center),size:(0,e.round)(o.size),rotate:(0,t.roundFloat)(o.rotate)}) | ||
exports.localPoint=({center:t,rotate:e},{x:o,y:n})=>{const s=o-t.x | ||
const r=n-t.y | ||
const a=Math.cos(-e) | ||
const i=Math.sin(-e) | ||
return{x:s*a-r*i,y:s*i+r*a}}) | ||
exports.localBoundingRect=(({center:t,rotate:e},o)=>{const n=o.center.x-t.x | ||
return{x:s*a-r*i,y:s*i+r*a}} | ||
exports.localBoundingRect=({center:t,rotate:e},o)=>{const n=o.center.x-t.x | ||
const s=o.center.y-t.y | ||
@@ -34,4 +34,4 @@ const r=o.rotate-e | ||
const g=.5*(o.size.x*i+o.size.y*a) | ||
return{left:c-y,right:c+y,top:x-g,bottom:x+g}}) | ||
exports.isContainBoundingRect=(({center:t,size:e},o)=>t.x-.5*e.x<=o.left&&t.x+.5*e.x>=o.right&&t.y-.5*e.y<=o.top&&t.y+.5*e.y>=o.bottom) | ||
exports.isInterceptBoundingRect=(({center:t,size:e},o)=>!(t.x+.5*e.x<o.left||t.x-.5*e.x>o.right||t.y+.5*e.y<o.top||t.y-.5*e.y>o.bottom)) | ||
return{left:c-y,right:c+y,top:x-g,bottom:x+g}} | ||
exports.isContainBoundingRect=({center:t,size:e},o)=>t.x-.5*e.x<=o.left&&t.x+.5*e.x>=o.right&&t.y-.5*e.y<=o.top&&t.y+.5*e.y>=o.bottom | ||
exports.isInterceptBoundingRect=({center:t,size:e},o)=>!(t.x+.5*e.x<o.left||t.x-.5*e.x>o.right||t.y+.5*e.y<o.top||t.y-.5*e.y>o.bottom) |
@@ -1,35 +0,35 @@ | ||
exports.arraySet=((r,e,t)=>{if(r[e]===t)return r | ||
exports.arraySet=(r,e,t)=>{if(r[e]===t)return r | ||
const n=[...r] | ||
n[e]=t | ||
return n}) | ||
exports.arrayDelete=((r,e)=>e>=0&&e<=r.length-1?[...r.slice(0,e),...r.slice(e+1)]:r) | ||
exports.arrayInsert=((r,e,t)=>[...r.slice(0,e),t,...r.slice(e)]) | ||
return n} | ||
exports.arrayDelete=(r,e)=>e>=0&&e<=r.length-1?[...r.slice(0,e),...r.slice(e+1)]:r | ||
exports.arrayInsert=(r,e,t)=>[...r.slice(0,e),t,...r.slice(e)] | ||
const r=(r,e,t)=>t===e?r:t<e?[...r.slice(0,t),...r.slice(t+1,e+1),r[t],...r.slice(e+1)]:[...r.slice(0,e),r[t],...r.slice(e,t),...r.slice(t+1)] | ||
exports.arrayMove=r | ||
exports.arrayPush=((r,e)=>[...r,e]) | ||
exports.arrayUnshift=((r,e)=>[e,...r]) | ||
exports.arrayPop=(r=>{if(0===r.length)return r | ||
exports.arrayPush=(r,e)=>[...r,e] | ||
exports.arrayUnshift=(r,e)=>[e,...r] | ||
exports.arrayPop=r=>{if(0===r.length)return r | ||
const e=[...r] | ||
e.pop() | ||
return e}) | ||
exports.arrayShift=(r=>{if(0===r.length)return r | ||
return e} | ||
exports.arrayShift=r=>{if(0===r.length)return r | ||
const e=[...r] | ||
e.shift() | ||
return e}) | ||
exports.arrayConcat=((r,e)=>e&&e.length?[...r,...e]:r) | ||
exports.arrayMatchPush=((r,e)=>r.includes(e)?r:[...r,e]) | ||
exports.arrayMatchDelete=((r,e)=>{const t=r.indexOf(e) | ||
return~t?[...r.slice(0,t),...r.slice(t+1)]:r}) | ||
exports.arrayMatchMove=((e,t,n)=>{const s=e.indexOf(n) | ||
return~s?r(e,t,s):e}) | ||
exports.arrayFindDelete=((r,e)=>{const t=r.findIndex(e) | ||
return~t?[...r.slice(0,t),...r.slice(t+1)]:r}) | ||
exports.arrayFindMove=((e,t,n)=>{const s=e.findIndex(t) | ||
return~s?r(e,n,s):e}) | ||
exports.arrayFindSet=((r,e,t)=>{const n=r.findIndex(e) | ||
return e} | ||
exports.arrayConcat=(r,e)=>e&&e.length?[...r,...e]:r | ||
exports.arrayMatchPush=(r,e)=>r.includes(e)?r:[...r,e] | ||
exports.arrayMatchDelete=(r,e)=>{const t=r.indexOf(e) | ||
return~t?[...r.slice(0,t),...r.slice(t+1)]:r} | ||
exports.arrayMatchMove=(e,t,n)=>{const s=e.indexOf(n) | ||
return~s?r(e,t,s):e} | ||
exports.arrayFindDelete=(r,e)=>{const t=r.findIndex(e) | ||
return~t?[...r.slice(0,t),...r.slice(t+1)]:r} | ||
exports.arrayFindMove=(e,t,n)=>{const s=e.findIndex(t) | ||
return~s?r(e,n,s):e} | ||
exports.arrayFindSet=(r,e,t)=>{const n=r.findIndex(e) | ||
if(!~n||r[n]===t)return r | ||
const s=[...r] | ||
s[n]=t | ||
return s}) | ||
exports.arrayFindSetOrPush=((r,e,t)=>{const n=r.findIndex(e) | ||
return s} | ||
exports.arrayFindSetOrPush=(r,e,t)=>{const n=r.findIndex(e) | ||
if(!~n)return[...r,t] | ||
@@ -39,6 +39,6 @@ if(r[n]===t)return r | ||
s[n]=t | ||
return s}) | ||
exports.arrayFindOrPush=((r,e,t)=>void 0===r.find(e)?[...r,t]:r) | ||
exports.arraySplitChunk=((r,e)=>{const t=[] | ||
return s} | ||
exports.arrayFindOrPush=(r,e,t)=>void 0===r.find(e)?[...r,t]:r | ||
exports.arraySplitChunk=(r,e)=>{const t=[] | ||
for(let n=0,s=r.length;n<s;n+=e)t.push(r.slice(n,n+e)) | ||
return t}) | ||
return t} |
@@ -1,2 +0,2 @@ | ||
exports.isObjectShallowEqual=((t,e)=>{if(t===e)return!0 | ||
exports.isObjectShallowEqual=(t,e)=>{if(t===e)return!0 | ||
const r=Object.keys(t) | ||
@@ -7,7 +7,7 @@ const n=Object.keys(e) | ||
const s=n[l] | ||
if(!e.hasOwnProperty(o)||t[o]!==e[s])return!1}return!0}) | ||
exports.isArrayShallowEqual=((t,e)=>t===e||t.length===e.length&&t.every((t,r)=>t===e[r])) | ||
exports.isCompactArrayShallowEqual=((t,e)=>{if(t===e)return!0 | ||
if(!e.hasOwnProperty(o)||t[o]!==e[s])return!1}return!0} | ||
exports.isArrayShallowEqual=(t,e)=>t===e||t.length===e.length&&t.every((t,r)=>t===e[r]) | ||
exports.isCompactArrayShallowEqual=(t,e)=>{if(t===e)return!0 | ||
if(t.length!==e.length)return!1 | ||
for(let r=0,n=t.length;r<n;r++)if(t[r]!==e[r])return!1 | ||
return!0}) | ||
return!0} |
var l=require("./check") | ||
exports.transformCache=(r=>{let e=null | ||
exports.transformCache=r=>{let e=null | ||
let a=null | ||
return(...t)=>{if(!a||!(0,l.isCompactArrayShallowEqual)(a,t)){e=r.apply(null,t) | ||
a=t}return e}}) | ||
a=t}return e}} |
@@ -1,18 +0,18 @@ | ||
exports.objectSet=((e,t,r)=>e[t]!==r?Object.assign({},e,{[t]:r}):e) | ||
exports.objectDelete=((e,t)=>{if(!e.hasOwnProperty(t))return e | ||
exports.objectSet=(e,t,r)=>e[t]!==r?Object.assign({},e,{[t]:r}):e | ||
exports.objectDelete=(e,t)=>{if(!e.hasOwnProperty(t))return e | ||
const r=Object.assign({},e) | ||
delete r[t] | ||
return r}) | ||
exports.objectMerge=((e,t)=>{for(const[r,o]of Object.entries(t))if(e[r]!==o)return Object.assign({},e,t) | ||
return e}) | ||
exports.objectMap=((e,t)=>{const r={} | ||
return r} | ||
exports.objectMerge=(e,t)=>{for(const[r,o]of Object.entries(t))if(e[r]!==o)return Object.assign({},e,t) | ||
return e} | ||
exports.objectMap=(e,t)=>{const r={} | ||
for(const[o,n]of Object.entries(e))r[o]=t(n,o) | ||
return r}) | ||
exports.objectPickKey=((e,t)=>{const r={} | ||
return r} | ||
exports.objectPickKey=(e,t)=>{const r={} | ||
for(const o of t)e.hasOwnProperty(o)&&(r[o]=e[o]) | ||
return r}) | ||
exports.objectFindKey=((e,t)=>{const r=Object.entries(e).find(t) | ||
return r&&r[0]}) | ||
exports.objectDeleteUndefined=(e=>{let t | ||
return r} | ||
exports.objectFindKey=(e,t)=>{const r=Object.entries(e).find(t) | ||
return r&&r[0]} | ||
exports.objectDeleteUndefined=e=>{let t | ||
for(const[r,o]of Object.entries(e))if(void 0===o){void 0===t&&(t=Object.assign({},e)) | ||
delete t[r]}return t||e}) | ||
delete t[r]}return t||e} |
@@ -12,4 +12,4 @@ var e=require("../verify") | ||
exports.createStateStore=s | ||
exports.createStateStoreLite=(e=>({getState:()=>e,setState:t=>e=Object.assign({},e,t)})) | ||
exports.createStateStoreEnhanced=(({initialState:t,enhancer:r,reducer:c})=>{(0,e.basicFunction)(r,"enhancer function required");(0,e.basicFunction)(c,"reducer function required") | ||
exports.createStateStoreLite=e=>({getState:()=>e,setState:t=>e=Object.assign({},e,t)}) | ||
exports.createStateStoreEnhanced=({initialState:t,enhancer:r,reducer:c})=>{(0,e.basicFunction)(r,"enhancer function required");(0,e.basicFunction)(c,"reducer function required") | ||
const{subscribe:n,unsubscribe:a,getState:u,setState:i}=s(t) | ||
@@ -31,7 +31,7 @@ let o=null | ||
const p={getState:l,dispatch:d} | ||
return{subscribe:n,unsubscribe:a,getState:l,dispatch:d}}) | ||
exports.toReduxStore=(t=>{const{subscribe:r,unsubscribe:s}=t;(0,e.basicFunction)(r,"store.subscribe required");(0,e.basicFunction)(s,"store.unsubscribe required") | ||
return{subscribe:n,unsubscribe:a,getState:l,dispatch:d}} | ||
exports.toReduxStore=t=>{const{subscribe:r,unsubscribe:s}=t;(0,e.basicFunction)(r,"store.subscribe required");(0,e.basicFunction)(s,"store.unsubscribe required") | ||
return Object.assign({},t,{subscribe:e=>{r(e) | ||
return()=>s(e)}})}) | ||
exports.reducerFromMap=(e=>{const t=Object.keys(e) | ||
return()=>s(e)}})} | ||
exports.reducerFromMap=e=>{const t=Object.keys(e) | ||
const r=t.length | ||
@@ -44,6 +44,6 @@ return(s,c)=>{const n={} | ||
n[r]=o | ||
a=a||o!==i}return a?n:s}}) | ||
exports.createEntryEnhancer=(e=>(t,r)=>{const s=e[r.type] | ||
return s&&s(t,r)}) | ||
exports.createStoreStateSyncReducer=((e,{getState:t,setState:r})=>(s,{type:c,payload:n})=>{c===e&&r(n) | ||
return t()}) | ||
a=a||o!==i}return a?n:s}} | ||
exports.createEntryEnhancer=e=>(t,r)=>{const s=e[r.type] | ||
return s&&s(t,r)} | ||
exports.createStoreStateSyncReducer=(e,{getState:t,setState:r})=>(s,{type:c,payload:n})=>{c===e&&r(n) | ||
return t()} |
@@ -1,6 +0,6 @@ | ||
exports.roundFloat=(t=>Math.round(1e4*t)/1e4) | ||
exports.addAbs=((t,a)=>Math.sign(t)*Math.max(0,Math.abs(t)+a)) | ||
exports.euclideanModulo=((t,a)=>(t%a+a)%a) | ||
exports.clamp=((t,a,o)=>Math.max(a,Math.min(o,t))) | ||
exports.smoothstep=((t,a,o)=>t<=a?0:t>=o?1:(t=(t-a)/(o-a))*t*(3-2*t)) | ||
exports.lerp=((t,a,o)=>t+(a-t)*o) | ||
exports.roundFloat=t=>Math.round(1e4*t)/1e4 | ||
exports.addAbs=(t,a)=>Math.sign(t)*Math.max(0,Math.abs(t)+a) | ||
exports.euclideanModulo=(t,a)=>(t%a+a)%a | ||
exports.clamp=(t,a,o)=>Math.max(a,Math.min(o,t)) | ||
exports.smoothstep=(t,a,o)=>t<=a?0:t>=o?1:(t=(t-a)/(o-a))*t*(3-2*t) | ||
exports.lerp=(t,a,o)=>t+(a-t)*o |
@@ -1,23 +0,23 @@ | ||
exports.linear=(t=>t) | ||
exports.easeInQuad=(t=>t*t) | ||
exports.easeOutQuad=(t=>t*(2-t)) | ||
exports.easeInOutQuad=(t=>t<.5?t*t*2:t*(2-t)*2-1) | ||
exports.easeInCubic=(t=>Math.pow(t,3)) | ||
exports.easeOutCubic=(t=>Math.pow(t-1,3)+1) | ||
exports.easeInOutCubic=(t=>t<.5?4*Math.pow(t,3):Math.pow(2*t-2,3)/2+1) | ||
exports.easeInQuart=(t=>Math.pow(t,4)) | ||
exports.easeOutQuart=(t=>1-Math.pow(t-1,4)) | ||
exports.easeInOutQuart=(t=>t<.5?8*Math.pow(t,4):1-Math.pow(2*t-2,4)/2) | ||
exports.easeInQuint=(t=>Math.pow(t,5)) | ||
exports.easeOutQuint=(t=>Math.pow(t-1,5)+1) | ||
exports.easeInOutQuint=(t=>t<.5?16*Math.pow(t,5):Math.pow(2*t-2,5)/2+1) | ||
exports.linear=t=>t | ||
exports.easeInQuad=t=>t*t | ||
exports.easeOutQuad=t=>t*(2-t) | ||
exports.easeInOutQuad=t=>t<.5?t*t*2:t*(2-t)*2-1 | ||
exports.easeInCubic=t=>Math.pow(t,3) | ||
exports.easeOutCubic=t=>Math.pow(t-1,3)+1 | ||
exports.easeInOutCubic=t=>t<.5?4*Math.pow(t,3):Math.pow(2*t-2,3)/2+1 | ||
exports.easeInQuart=t=>Math.pow(t,4) | ||
exports.easeOutQuart=t=>1-Math.pow(t-1,4) | ||
exports.easeInOutQuart=t=>t<.5?8*Math.pow(t,4):1-Math.pow(2*t-2,4)/2 | ||
exports.easeInQuint=t=>Math.pow(t,5) | ||
exports.easeOutQuint=t=>Math.pow(t-1,5)+1 | ||
exports.easeInOutQuint=t=>t<.5?16*Math.pow(t,5):Math.pow(2*t-2,5)/2+1 | ||
const t=Math.PI/2 | ||
exports.easeInSine=(e=>1-Math.cos(e*t)) | ||
exports.easeOutSine=(e=>Math.sin(e*t)) | ||
exports.easeInOutSine=(t=>.5-Math.cos(t*Math.PI)/2) | ||
exports.easeInExpo=(t=>Math.pow(2,10*t-10)) | ||
exports.easeOutExpo=(t=>1-Math.pow(2,-10*t)) | ||
exports.easeInOutExpo=(t=>t<.5?Math.pow(2,20*t-10)/2:1-Math.pow(2,10-20*t)/2) | ||
exports.easeInCirc=(t=>1-Math.sqrt(1-t*t)) | ||
exports.easeOutCirc=(t=>Math.sqrt((2-t)*t)) | ||
exports.easeInOutCirc=(t=>t<.5?.5-Math.sqrt(.25-t*t):Math.sqrt(t*(2-t)-.75)+.5) | ||
exports.easeInSine=e=>1-Math.cos(e*t) | ||
exports.easeOutSine=e=>Math.sin(e*t) | ||
exports.easeInOutSine=t=>.5-Math.cos(t*Math.PI)/2 | ||
exports.easeInExpo=t=>Math.pow(2,10*t-10) | ||
exports.easeOutExpo=t=>1-Math.pow(2,-10*t) | ||
exports.easeInOutExpo=t=>t<.5?Math.pow(2,20*t-10)/2:1-Math.pow(2,10-20*t)/2 | ||
exports.easeInCirc=t=>1-Math.sqrt(1-t*t) | ||
exports.easeOutCirc=t=>Math.sqrt((2-t)*t) | ||
exports.easeInOutCirc=t=>t<.5?.5-Math.sqrt(.25-t*t):Math.sqrt(t*(2-t)-.75)+.5 |
var t=require("../../env/tryRequire") | ||
const r=(t,r)=>Math.floor(Math.random()*(r-t+1)+t) | ||
exports.getRandomInt=((t,e=0)=>r(Math.min(t,e),Math.max(t,e))) | ||
exports.getRandomIntList=((t,e,n)=>{const o=Math.min(t,e) | ||
exports.getRandomInt=(t,e=0)=>r(Math.min(t,e),Math.max(t,e)) | ||
exports.getRandomIntList=(t,e,n)=>{const o=Math.min(t,e) | ||
const a=Math.max(t,e) | ||
@@ -10,4 +10,4 @@ const c=[] | ||
for(;n<c.length&&!(c[n]>e);){e++ | ||
n++}c.splice(n,0,e)}return c}) | ||
exports.getRandomId=((t="")=>`${t}${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`) | ||
n++}c.splice(n,0,e)}return c} | ||
exports.getRandomId=(t="")=>`${t}${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}` | ||
const e=(()=>{try{const{crypto:t}=global | ||
@@ -14,0 +14,0 @@ const r=r=>{const e=new ArrayBuffer(r) |
@@ -5,3 +5,3 @@ const e=(e,t)=>{const p=[] | ||
exports.getSample=e | ||
exports.getSampleRange=((t,p)=>e(e=>e+t,p-t+1)) | ||
exports.getSampleRate=(t=>e(e=>e/t,1+t)) | ||
exports.getSampleRange=(t,p)=>e(e=>e+t,p-t+1) | ||
exports.getSampleRate=t=>e(e=>e/t,1+t) |
var e=require("./AsyncTaskQueue") | ||
exports.createAsyncTaskLane=(({laneSize:t,selectLane:n=u})=>{if(!((t=Number(t))>=1))throw new Error(`invalid laneSize: ${t}`) | ||
exports.createAsyncTaskLane=({laneSize:t,selectLane:n=u})=>{if(!((t=Number(t))>=1))throw new Error(`invalid laneSize: ${t}`) | ||
const s=[] | ||
@@ -10,4 +10,4 @@ for(let u=0;u<t;u++)s.push({index:u,infoQueue:[],taskQueue:(0,e.createAsyncTaskQueue)()}) | ||
r.length=a.getLength() | ||
return i}}}) | ||
return i}}} | ||
const u=e=>e.reduce((e,u)=>e.taskQueue.getLength()>u.taskQueue.getLength()?u:e,e[0]) | ||
exports.selectMinLoadLane=u |
var e=require("../function") | ||
const r=(e=0,r=!0)=>({A:()=>e,B:()=>++e,C:()=>--e,D:()=>r,E:()=>r=!1}) | ||
exports.createAsyncTaskQueue=((t=(e=>{}))=>{let s=r() | ||
exports.createAsyncTaskQueue=(t=(e=>{}))=>{let s=r() | ||
let n=Promise.resolve("QUEUE_HEAD") | ||
@@ -13,2 +13,2 @@ return{reset:()=>{s.E() | ||
n=o | ||
return u}}}) | ||
return u}}} |
var e=require("../time") | ||
var t=require("./AsyncTaskQueue") | ||
exports.createAsyncTaskRunner=(({clearRunner:s=(()=>{}),resetRunner:a=((e,t)=>{}),getTaskId:n,getTaskInitialState:r=(e=>e),runTask:u})=>{const{reset:c,getLength:o,pushTask:g}=(0,t.createAsyncTaskQueue)() | ||
exports.createAsyncTaskRunner=({clearRunner:s=(()=>{}),resetRunner:a=((e,t)=>{}),getTaskId:n,getTaskInitialState:r=(e=>e),runTask:u})=>{const{reset:c,getLength:o,pushTask:g}=(0,t.createAsyncTaskQueue)() | ||
const T=new Map | ||
@@ -17,7 +17,7 @@ const k=e=>T.get(e) | ||
return c})(s,t)},endTask:i,autoEndTask:t=>{const s=(0,e.getTimestamp)()-Math.abs(t) | ||
T.forEach((e,t)=>{e.endAt&&e.endAt<=s&&i(t)})}}}) | ||
exports.createAsyncTaskRunnerCluster=(({runnerList:e=[],getRunnerByTaskId:t,selectRunner:a=s})=>({clear:()=>e.map(e=>e.clear()),getStatus:t=>e.map(e=>e.getStatus(t)),getQueueLength:()=>e.map(e=>e.getQueueLength()),getTaskState:s=>{const a=t(e,s) | ||
T.forEach((e,t)=>{e.endAt&&e.endAt<=s&&i(t)})}}} | ||
exports.createAsyncTaskRunnerCluster=({runnerList:e=[],getRunnerByTaskId:t,selectRunner:a=s})=>({clear:()=>e.map(e=>e.clear()),getStatus:t=>e.map(e=>e.getStatus(t)),getQueueLength:()=>e.map(e=>e.getQueueLength()),getTaskState:s=>{const a=t(e,s) | ||
return a&&a.getTaskState(s)},startTask:t=>a(e,t).startTask(t),endTask:s=>{const a=t(e,s) | ||
return a&&a.endTask(s)},autoEndTask:t=>e.forEach(e=>e.autoEndTask(t))})) | ||
return a&&a.endTask(s)},autoEndTask:t=>e.forEach(e=>e.autoEndTask(t))}) | ||
const s=e=>e.reduce((e,t)=>e.getQueueLength()>t.getQueueLength()?t:e,e[0]) | ||
exports.selectMinLoadRunner=s |
@@ -8,2 +8,2 @@ var e=require("../math/base") | ||
exports.getBlockBar=r | ||
exports.getBlockChart=(({valueList:t=[],valueMax:a=t.reduce((e,t)=>Math.max(e,t),-1/0),valueMin:l=t.reduce((e,t)=>Math.min(e,t),1/0),width:o=20})=>t.map(t=>r((0,e.clamp)(t,l,a)/(a-l)*o))) | ||
exports.getBlockChart=({valueList:t=[],valueMax:a=t.reduce((e,t)=>Math.max(e,t),-1/0),valueMin:l=t.reduce((e,t)=>Math.min(e,t),1/0),width:o=20})=>t.map(t=>r((0,e.clamp)(t,l,a)/(a-l)*o)) |
@@ -1,3 +0,3 @@ | ||
exports.createHub=(()=>{const e=new Set | ||
return{clear:()=>e.clear(),subscribe:t=>{e.add(t)},unsubscribe:t=>{e.delete(t)},send:t=>e.forEach(e=>e(t))}}) | ||
exports.createHub=()=>{const e=new Set | ||
return{clear:()=>e.clear(),subscribe:t=>{e.add(t)},unsubscribe:t=>{e.delete(t)},send:t=>e.forEach(e=>e(t))}} | ||
const e=()=>{const e=new Map | ||
@@ -8,7 +8,7 @@ return{setMap:e,clear:()=>e.clear(),on:(t,r)=>{const n=e.get(t) | ||
n&&0===n.size&&e.delete(t)}}} | ||
exports.createEventTarget=(()=>{const{setMap:t,clear:r,on:n,off:s}=e() | ||
exports.createEventTarget=()=>{const{setMap:t,clear:r,on:n,off:s}=e() | ||
return{clear:r,dispatchEvent:e=>{const r=t.get(e.type) | ||
r&&r.forEach(t=>t(e))},addEventListener:n,removeEventListener:s}}) | ||
exports.createEventEmitter=(()=>{const{setMap:t,clear:r,on:n,off:s}=e() | ||
r&&r.forEach(t=>t(e))},addEventListener:n,removeEventListener:s}} | ||
exports.createEventEmitter=()=>{const{setMap:t,clear:r,on:n,off:s}=e() | ||
return{clear:r,emit:(e,...r)=>{const n=t.get(e) | ||
n&&n.forEach(e=>e(...r))},on:n,off:s,addListener:n,removeListener:s,removeAllListeners:(...e)=>{e.length?e.forEach(e=>t.delete(e)):t.clear()}}}) | ||
n&&n.forEach(e=>e(...r))},on:n,off:s,addListener:n,removeListener:s,removeAllListeners:(...e)=>{e.length?e.forEach(e=>t.delete(e)):t.clear()}}} |
@@ -8,3 +8,3 @@ const e=(...e)=>`@/${e.join("/")}` | ||
exports.reduceKeySelector=t | ||
exports.createMultiKeySwitch=(({keyCount:r})=>{const n={} | ||
exports.createMultiKeySwitch=({keyCount:r})=>{const n={} | ||
return{set:(e,o)=>o.forEach(o=>{if(r!==o.length)throw new Error(`invalid keySelectorList length: ${o.length}, expect: ${r}`) | ||
@@ -19,2 +19,2 @@ t(...o).forEach(t=>{if(n[t])throw new Error(`duplicate switchKey: ${t}`) | ||
console.warn("[verifyFull] unsetKeyList",e) | ||
throw new Error("[verifyFull] not all possible key is set")}}}}) | ||
throw new Error("[verifyFull] not all possible key is set")}}}} |
var e=require("../compare") | ||
const t=/[\w-]+/ | ||
exports.createKeyTree=(({NAME_KEY:r="key",NAME_SUB_LIST:n="subList"})=>{if(!t.test(r))throw new Error(`expect ${r} to match: ${t}`) | ||
if(!t.test(n))throw new Error(`expect ${n} to match: ${t}`) | ||
const c=new RegExp(`"},{"${r}":"`,"g") | ||
const o=new RegExp(`(?:","${n}":|^)\\[{"${r}":"`,"g") | ||
const s=new RegExp(`"((?:}])+)(?:},{"${r}":"|$)`,"g") | ||
const p=new RegExp(",","g") | ||
const g=new RegExp("\\[","g") | ||
const a=new RegExp("(]+)","g") | ||
return{stringify:e=>JSON.stringify(e).replace(o,"[").replace(s,(e,t)=>"]".repeat(t.length/2)).replace(c,","),parse:e=>JSON.parse(e.replace(p,`"},{"${r}":"`).replace(a,(e,t,n,c)=>`"${"}]".repeat(t.length)}${n+e.length!==c.length?`},{"${r}":"`:""}`).replace(g,(e,t)=>`${0!==t?`","${n}":`:""}[{"${r}":"`)),createBuilder:t=>{const c=new Map | ||
const o=e=>{const t={[r]:e} | ||
const p=c.get(e) | ||
c.delete(e) | ||
void 0!==p&&0!==p.length&&(t[n]=p.sort(s).map(([e])=>o(e))) | ||
var t=require("../data/Tree") | ||
const r=/[\w-]+/ | ||
const n=({NAME_KEY:e="key",NAME_SUB_LIST:t="subList"})=>{if(!r.test(e))throw new Error(`expect ${e} to match: ${r}`) | ||
if(!r.test(t))throw new Error(`expect ${t} to match: ${r}`) | ||
const n=new RegExp(`"},{"${e}":"`,"g") | ||
const s=new RegExp(`(?:","${t}":|^)\\[{"${e}":"`,"g") | ||
const c=new RegExp(`"((?:}])+)(?:},{"${e}":"|$)`,"g") | ||
const o=new RegExp(",","g") | ||
const a=new RegExp("\\[","g") | ||
const p=new RegExp("(]+)","g") | ||
return{stringify:e=>JSON.stringify(e).replace(s,"[").replace(c,(e,t)=>"]".repeat(t.length/2)).replace(n,","),parse:r=>JSON.parse(r.replace(o,`"},{"${e}":"`).replace(p,(t,r,n,s)=>`"${"}]".repeat(r.length)}${n+t.length!==s.length?`},{"${e}":"`:""}`).replace(a,(r,n)=>`${0!==n?`","${t}":`:""}[{"${e}":"`))}} | ||
exports.createKeyTree=n | ||
exports.createKeyTreeEnhanced=({NAME_KEY:r="key",NAME_SUB_LIST:s="subList"})=>{const c=(0,t.createTreeDepthFirstSearch)(([e,t,n])=>e[s]&&e[s].length&&e[s].map((t,n)=>[t,n,e[r]])) | ||
return Object.assign({},n({NAME_KEY:r,NAME_SUB_LIST:s}),{createBuilder:t=>{const n=new Map | ||
const c=e=>{const t={[r]:e} | ||
const a=n.get(e) | ||
n.delete(e) | ||
void 0!==a&&0!==a.length&&(t[s]=a.sort(o).map(([e])=>c(e))) | ||
return t} | ||
const s=([t,r],[n,c])=>r-c||(0,e.compareString)(t,n) | ||
return{add:(e,t,r)=>{let n=c.get(r) | ||
if(void 0===n){n=[] | ||
c.set(r,n)}n.push([e,t])},build:()=>{const e=[] | ||
let s=t | ||
for(;s;){const{[n]:t}=o(s) | ||
const o=([t,r],[n,s])=>r-s||(0,e.compareString)(t,n) | ||
return{add:(e,t,r)=>{let s=n.get(r) | ||
if(void 0===s){s=[] | ||
n.set(r,s)}s.push([e,t])},build:()=>{const e=[] | ||
let o=t | ||
for(;o;){const{[s]:t}=c(o) | ||
void 0!==t&&e.push(...t) | ||
s=c.keys().next().value}return 0===e.length?{[r]:t}:{[r]:t,[n]:e}}}}}}) | ||
o=n.keys().next().value}return 0===e.length?{[r]:t}:{[r]:t,[s]:e}}}},walkKeyTreeJSON:(e,t=(([e,t,r])=>{}))=>c([e,0,void 0],t)})} |
const e=[] | ||
const t=[] | ||
exports.getLevenshteinDistance=((r,o)=>{if(r===o)return 0 | ||
exports.getLevenshteinDistance=(r,o)=>{if(r===o)return 0 | ||
r.length>o.length&&([r,o]=[o,r]) | ||
@@ -21,2 +21,2 @@ let n=r.length | ||
d=e[c] | ||
f=e[c]=d>f?A>f?f+1:A:A>d?d+1:A}}return f}) | ||
f=e[c]=d>f?A>f?f+1:A:A>d?d+1:A}}return f} |
@@ -7,3 +7,3 @@ exports.DEFAULT_MIME="application/octet-stream" | ||
const i=/\.(\w+)$/ | ||
exports.getMIMETypeFromFileName=(o=>{const a=i.exec(o) | ||
return a&&t[a[1]]||"application/octet-stream"}) | ||
exports.getMIMETypeFromFileName=o=>{const a=i.exec(o) | ||
return a&&t[a[1]]||"application/octet-stream"} |
@@ -1,2 +0,2 @@ | ||
exports.createPatchKit=(({NAME_KEY:e="key",NAME_MODIFY_TIME:t="mtime",EPSILON_MODIFY_TIME:c=1,isChanged:a=((e,c)=>e[t]!==c[t]),shouldApplyDelete:n=((e,c)=>e[t]>=c[t]),shouldApplyUpdate:r=((e,c)=>e[t]>c[t]),getPatchData:s=((e,a)=>e[t]<a[t]?Object.assign({},e,{[t]:a[t]+c}):e)})=>{const o=(t,c)=>t.set(c[e],c) | ||
exports.createPatchKit=({NAME_KEY:e="key",NAME_MODIFY_TIME:t="mtime",EPSILON_MODIFY_TIME:c=1,isChanged:a=((e,c)=>e[t]!==c[t]),shouldApplyDelete:n=((e,c)=>e[t]>=c[t]),shouldApplyUpdate:r=((e,c)=>e[t]>c[t]),getPatchData:s=((e,a)=>e[t]<a[t]?Object.assign({},e,{[t]:a[t]+c}):e)})=>{const o=(t,c)=>t.set(c[e],c) | ||
return{NAME_KEY:e,NAME_MODIFY_TIME:t,isChanged:a,shouldApplyDelete:n,shouldApplyUpdate:r,hasPatch:(t,c)=>{for(let n=0,r=c.length;n<r;n++){const r=c[n] | ||
@@ -32,8 +32,8 @@ const s=r[e] | ||
h=!0}) | ||
return h},arrayMapReducer:o}}) | ||
exports.toObjectPatchKit=(e=>{const{NAME_KEY:t,hasPatch:c,countPatch:a,generatePatch:n,applyPatch:r}=e | ||
return h},arrayMapReducer:o}} | ||
exports.toObjectPatchKit=e=>{const{NAME_KEY:t,hasPatch:c,countPatch:a,generatePatch:n,applyPatch:r}=e | ||
return{hasObjectPatch:(e,t)=>c(new Map(Object.entries(e)),Object.values(t)),countObjectPatch:(e,t)=>a(new Map(Object.entries(e)),Object.values(t)),generateObjectPatch:(e,t)=>n(new Map(Object.entries(e)),Object.values(t)),applyObjectPatch:(e,{deleteList:c,updateList:a})=>{const n={} | ||
return r(c,a,Object.values(e),(e,c)=>{void 0!==e&&(n[e[t]]=e)})?n:e}}}) | ||
exports.toArrayWithKeyPatchKit=(e=>{const{hasPatch:t,countPatch:c,generatePatch:a,applyPatch:n,arrayMapReducer:r}=e | ||
return r(c,a,Object.values(e),(e,c)=>{void 0!==e&&(n[e[t]]=e)})?n:e}}} | ||
exports.toArrayWithKeyPatchKit=e=>{const{hasPatch:t,countPatch:c,generatePatch:a,applyPatch:n,arrayMapReducer:r}=e | ||
return{hasArrayWithKeyPatch:(e,c)=>t(e.reduce(r,new Map),c),countArrayWithKeyPatch:(e,t)=>c(e.reduce(r,new Map),t),generateArrayWithKeyPatch:(e,t)=>a(e.reduce(r,new Map),t),applyArrayWithKeyPatch:(e,{deleteList:t,updateList:c})=>{const a=[] | ||
return n(t,c,e,(e,t)=>{void 0!==e&&a.push(e)})?a:e}}}) | ||
return n(t,c,e,(e,t)=>{void 0!==e&&a.push(e)})?a:e}}} |
@@ -24,4 +24,4 @@ const r=(r,e)=>void 0===r[e]?r[e]={}:r[e] | ||
exports.appendRouteMap=o | ||
exports.createRouteMap=(r=>r.reduce((r,[e,t])=>o(r,e,t),{})) | ||
exports.parseRouteUrl=((r,e)=>{const o=t(r,e) | ||
exports.createRouteMap=r=>r.reduce((r,[e,t])=>o(r,e,t),{}) | ||
exports.parseRouteUrl=(r,e)=>{const o=t(r,e) | ||
if(void 0===o)return | ||
@@ -32,4 +32,4 @@ const{routeNode:a,paramValueList:u}=o | ||
return{route:s,paramMap:n.reduce((r,e,t)=>{r[e]=u[t] | ||
return r},{}),data:p}}) | ||
exports.getRouteParamAny=(({paramMap:r})=>r["/*"]) | ||
exports.getRouteParam=(({paramMap:r},e)=>r[e]) | ||
return r},{}),data:p}} | ||
exports.getRouteParamAny=({paramMap:r})=>r["/*"] | ||
exports.getRouteParam=({paramMap:r},e)=>r[e] |
@@ -10,5 +10,5 @@ var r=require("../compare") | ||
exports.parseSemVer=t | ||
exports.compareSemVer=((r,e)=>{const o=t(r) | ||
exports.compareSemVer=(r,e)=>{const o=t(r) | ||
const s=t(e) | ||
return o.major-s.major||o.minor-s.minor||o.patch-s.patch||a(o.label,s.label)}) | ||
return o.major-s.major||o.minor-s.minor||o.patch-s.patch||a(o.label,s.label)} | ||
const a=(e,t)=>e===t?0:t.startsWith(e)?1:e.startsWith(t)?-1:(0,r.compareStringWithNumber)(e,t) |
@@ -18,4 +18,4 @@ var e=require("../time") | ||
exports.verifyOption=n | ||
exports.verifyCheckCode=((t,r,a=(0,e.getTimestamp)())=>{if("string"!=typeof r||r.length<t.tokenSize)throw new Error(`invalid checkCode: ${r}`) | ||
s(t,c(r),a)}) | ||
exports.verifyCheckCode=(t,r,a=(0,e.getTimestamp)())=>{if("string"!=typeof r||r.length<t.tokenSize)throw new Error(`invalid checkCode: ${r}`) | ||
s(t,c(r),a)} | ||
const s=({tag:t,size:r,tokenSize:a,timeGap:i,dataView:n},[s,p,c],f=(0,e.getTimestamp)())=>{if(s!==t)throw new Error(`tag mismatch: ${s}, expect: ${t}`) | ||
@@ -26,6 +26,6 @@ if(Math.abs(f-p)>i)throw new Error(`timestamp mismatch: ${p}, expect: ${f}±${i}`) | ||
exports.verifyParsedCheckCode=s | ||
exports.generateLookupData=(e=>{e=n(e) | ||
return Object.assign({},e,{dataView:new DataView((0,t.getRandomArrayBuffer)(e.size))})}) | ||
exports.generateCheckCode=(({tag:t,size:r,tokenSize:a,timeGap:i,dataView:n},s=(0,e.getTimestamp)())=>{const c=o(r,a,n,s/i) | ||
return p(t,s,c)}) | ||
exports.generateLookupData=e=>{e=n(e) | ||
return Object.assign({},e,{dataView:new DataView((0,t.getRandomArrayBuffer)(e.size))})} | ||
exports.generateCheckCode=({tag:t,size:r,tokenSize:a,timeGap:i,dataView:n},s=(0,e.getTimestamp)())=>{const c=o(r,a,n,s/i) | ||
return p(t,s,c)} | ||
const p=(e,t,a)=>(0,r.swapObfuscateString)([e,t.toString(36),a].join("-")) | ||
@@ -37,5 +37,5 @@ exports.packCheckCode=p | ||
exports.parseCheckCode=c | ||
exports.packDataArrayBuffer=(({tag:e,size:t,tokenSize:r,timeGap:i,dataView:o})=>(0,a.packArrayBufferPacket)(JSON.stringify([e,t,r,i]),o.buffer)) | ||
exports.parseDataArrayBuffer=(e=>{const[t,r]=(0,a.parseArrayBufferPacket)(e) | ||
exports.packDataArrayBuffer=({tag:e,size:t,tokenSize:r,timeGap:i,dataView:o})=>(0,a.packArrayBufferPacket)(JSON.stringify([e,t,r,i]),o.buffer) | ||
exports.parseDataArrayBuffer=e=>{const[t,r]=(0,a.parseArrayBufferPacket)(e) | ||
const[i,o,n,s]=JSON.parse(t) | ||
return{tag:i,size:o,tokenSize:n,timeGap:s,dataView:new DataView(r)}}) | ||
return{tag:i,size:o,tokenSize:n,timeGap:s,dataView:new DataView(r)}} |
@@ -21,4 +21,4 @@ var e=require("../time") | ||
exports.createUpdater=c | ||
exports.createUpdateLoop=(({delay:t,queueTask:a=e.requestFrameUpdate,cancelTask:u=e.cancelFrameUpdate}={})=>{const{clear:r,pushFunc:s,setFunc:n,deleteFunc:l,update:o}=c() | ||
exports.createUpdateLoop=({delay:t,queueTask:a=e.requestFrameUpdate,cancelTask:u=e.cancelFrameUpdate}={})=>{const{clear:r,pushFunc:s,setFunc:n,deleteFunc:l,update:o}=c() | ||
const{start:p,stop:d}=(0,e.createTimer)({func:o,queueTask:a,cancelTask:u,delay:t}) | ||
return{start:p,stop:d,clear:r,pushFunc:s,setFunc:n,deleteFunc:l}}) | ||
return{start:p,stop:d,clear:r,pushFunc:s,setFunc:n,deleteFunc:l}} |
@@ -7,5 +7,5 @@ var e=require("../check") | ||
exports.objectMergeDeep=c | ||
exports.objectSortKey=((e,c=r.compareStringLocale)=>{Object.keys(e).sort(c).forEach(r=>{const c=e[r] | ||
exports.objectSortKey=(e,c=r.compareStringLocale)=>{Object.keys(e).sort(c).forEach(r=>{const c=e[r] | ||
delete e[r] | ||
e[r]=c}) | ||
return e}) | ||
return e} |
const e=/\n/g | ||
const s=(s,t=" ",o=t)=>`${o}${s.replace(e,`\n${t}`)}` | ||
exports.indentLine=s | ||
exports.indentList=((e,t=[],o=" - ",p=" ".repeat(o.length))=>[e,...t.map(e=>s(e,p,o))].join("\n")) | ||
exports.autoEllipsis=((e="",s=64,t=32,o=16)=>e.length>s?`${e.slice(0,t)}...${o>0?e.slice(-o):""} (+${e.length-t-o})`:e) | ||
exports.indentList=(e,t=[],o=" - ",p=" ".repeat(o.length))=>[e,...t.map(e=>s(e,p,o))].join("\n") | ||
exports.autoEllipsis=(e="",s=64,t=32,o=16)=>e.length>s?`${e.slice(0,t)}...${o>0?e.slice(-o):""} (+${e.length-t-o})`:e | ||
const t=/[^A-Z]/ | ||
const o=/([^A-Z]|[A-Z]{2,})([A-Z])/g | ||
exports.splitCamelCase=(e=>t.test(e)?e.replace(o,"$1 $2").split(" "):[e]) | ||
exports.splitSnakeCase=(e=>e.split("_")) | ||
exports.splitKebabCase=(e=>e.split("-")) | ||
exports.joinCamelCase=((e,s=1)=>e.reduce((e,t,o)=>e+(o<s?t:p(t)),"")) | ||
exports.joinSnakeCase=(e=>e.join("_").toUpperCase()) | ||
exports.joinKebabCase=(e=>e.join("-").toLowerCase()) | ||
exports.splitCamelCase=e=>t.test(e)?e.replace(o,"$1 $2").split(" "):[e] | ||
exports.splitSnakeCase=e=>e.split("_") | ||
exports.splitKebabCase=e=>e.split("-") | ||
exports.joinCamelCase=(e,s=1)=>e.reduce((e,t,o)=>e+(o<s?t:p(t)),"") | ||
exports.joinSnakeCase=e=>e.join("_").toUpperCase() | ||
exports.joinKebabCase=e=>e.join("-").toLowerCase() | ||
const p=e=>e.charAt(0).toUpperCase()+e.slice(1) | ||
@@ -18,8 +18,8 @@ const n={'"':""","&":"&","'":"'","<":"<",">":">"} | ||
const r=e=>n[e]||e | ||
exports.escapeHTML=(e=>e&&e.replace(a,r)) | ||
exports.escapeHTML=e=>e&&e.replace(a,r) | ||
const c={""":'"',""":'"',"&":"&","&":"&","'":"'","'":"'","<":"<","<":"<",">":">",">":">"} | ||
const l=/&(?:#34|quot|#38|amp|#39|apos|#60|lt|#62|gt);/g | ||
const i=e=>c[e]||e | ||
exports.unescapeHTML=(e=>e&&e.replace(l,i)) | ||
exports.unescapeHTML=e=>e&&e.replace(l,i) | ||
const x=/[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm | ||
exports.removeInvalidCharXML=(e=>e.replace(x,"")) | ||
exports.removeInvalidCharXML=e=>e.replace(x,"") |
@@ -11,8 +11,8 @@ var e=require("../env/global") | ||
exports.clock=t | ||
exports.getTimestamp=(()=>Math.floor(.001*Date.now())) | ||
exports.setTimeoutAsync=((e=0)=>new Promise(t=>setTimeout(t,e))) | ||
exports.getTimestamp=()=>Math.floor(.001*Date.now()) | ||
exports.setTimeoutAsync=(e=0)=>new Promise(t=>setTimeout(t,e)) | ||
const[o,r]=e.global.requestAnimationFrame?[e.global.requestAnimationFrame,e.global.cancelAnimationFrame]:[e=>setTimeout(e,1e3/60),clearTimeout] | ||
exports.cancelFrameUpdate=r | ||
exports.requestFrameUpdate=o | ||
exports.createTimer=(({func:e,delay:t,queueTask:o=setTimeout,cancelTask:r=clearTimeout})=>{let s=null | ||
exports.createTimer=({func:e,delay:t,queueTask:o=setTimeout,cancelTask:r=clearTimeout})=>{let s=null | ||
const a=()=>{if(s){s=o(a,t) | ||
@@ -25,6 +25,6 @@ e()}} | ||
c() | ||
n()}}}}) | ||
exports.createStepper=((e=t())=>()=>{const o=t() | ||
n()}}}} | ||
exports.createStepper=(e=t())=>()=>{const o=t() | ||
const r=o-e | ||
e=o | ||
return r}) | ||
return r} |
@@ -17,7 +17,7 @@ var t=require("./check") | ||
exports.basicObject=u | ||
exports.objectKey=((e,r,i)=>(0,t.isObjectKey)(e,r)||o("ObjectKey",i,`expect to have key: ${r}`)) | ||
exports.objectContain=((r,i,s)=>(0,t.isObjectContain)(r,i)||o("ObjectContain",s,`expect to contain: ${(0,e.describe)(i)}`)) | ||
exports.objectKey=(e,r,i)=>(0,t.isObjectKey)(e,r)||o("ObjectKey",i,`expect to have key: ${r}`) | ||
exports.objectContain=(r,i,s)=>(0,t.isObjectContain)(r,i)||o("ObjectContain",s,`expect to contain: ${(0,e.describe)(i)}`) | ||
const l=r("Array",t.isBasicArray) | ||
exports.basicArray=l | ||
exports.arrayLength=((r,i,s)=>(0,t.isArrayLength)(r,i)||o("ArrayLength",s,`expect length: ${i}, get: ${(0,t.isBasicArray)(r)?r.length:(0,e.describe)(r)}`)) | ||
exports.arrayLength=(r,i,s)=>(0,t.isArrayLength)(r,i)||o("ArrayLength",s,`expect length: ${i}, get: ${(0,t.isBasicArray)(r)?r.length:(0,e.describe)(r)}`) | ||
const y=r("Function",t.isBasicFunction) | ||
@@ -27,11 +27,11 @@ exports.basicFunction=y | ||
exports.promiseAlike=p | ||
exports.oneOf=((r,i,s)=>(0,t.isOneOf)(r,i)||o("OneOf",s,`expect one of: [${i}], get: ${(0,e.describe)(r)}`)) | ||
exports.doThrow=((e,r)=>(0,t.isFunctionThrow)(e)||o("DoThrow",r)) | ||
exports.doNotThrow=((e,r)=>(0,t.isFunctionThrow)(e)&&o("DoNotThrow",r)) | ||
exports.doThrowAsync=(async(e,r)=>await(0,t.isFunctionThrowAsync)(e)||o("DoThrowAsync",r)) | ||
exports.doNotThrowAsync=(async(e,r)=>await(0,t.isFunctionThrowAsync)(e)&&o("DoThrowAsync",r)) | ||
exports.oneOf=(r,i,s)=>(0,t.isOneOf)(r,i)||o("OneOf",s,`expect one of: [${i}], get: ${(0,e.describe)(r)}`) | ||
exports.doThrow=(e,r)=>(0,t.isFunctionThrow)(e)||o("DoThrow",r) | ||
exports.doNotThrow=(e,r)=>(0,t.isFunctionThrow)(e)&&o("DoNotThrow",r) | ||
exports.doThrowAsync=async(e,r)=>await(0,t.isFunctionThrowAsync)(e)||o("DoThrowAsync",r) | ||
exports.doNotThrowAsync=async(e,r)=>await(0,t.isFunctionThrowAsync)(e)&&o("DoThrowAsync",r) | ||
const x=(t,o)=>`\nactual: ${(0,e.describe)(t)}\nexpect: ${(0,e.describe)(o)}` | ||
exports.strictEqual=((e,r,i)=>(0,t.isStrictEqual)(e,r)||o("StrictEqual",i,x(e,r))) | ||
exports.notStrictEqual=((e,r,i)=>(0,t.isStrictEqual)(e,r)&&o("NotStrictEqual",i,x(e,r))) | ||
exports.stringifyEqual=((e,r,i="should stringify equal")=>(0,t.isStringifyEqual)(e,r)||o("StringifyEqual",i,x(e,r))) | ||
exports.notStringifyEqual=((e,r,i="should not stringify equal")=>(0,t.isStringifyEqual)(e,r)&&o("NotStringifyEqual",i,x(e,r))) | ||
exports.strictEqual=(e,r,i)=>(0,t.isStrictEqual)(e,r)||o("StrictEqual",i,x(e,r)) | ||
exports.notStrictEqual=(e,r,i)=>(0,t.isStrictEqual)(e,r)&&o("NotStrictEqual",i,x(e,r)) | ||
exports.stringifyEqual=(e,r,i="should stringify equal")=>(0,t.isStringifyEqual)(e,r)||o("StringifyEqual",i,x(e,r)) | ||
exports.notStringifyEqual=(e,r,i="should not stringify equal")=>(0,t.isStringifyEqual)(e,r)&&o("NotStringifyEqual",i,x(e,r)) |
@@ -119,6 +119,6 @@ root=window,factory=function(){return function(t){var e={} | ||
n.d(h,"createSetMap",()=>Ht) | ||
n.d(h,"getInvertSetMap",()=>Gt) | ||
n.d(h,"getInvertSetMap",()=>Yt) | ||
var p={} | ||
n.r(p) | ||
n.d(p,"createToggle",()=>Yt) | ||
n.d(p,"createToggle",()=>Gt) | ||
var f={} | ||
@@ -196,4 +196,4 @@ n.r(f) | ||
n.d(w,"getUnionOfList",()=>He) | ||
n.d(w,"isEmpty",()=>Ge) | ||
n.d(w,"isIntersect",()=>Ye) | ||
n.d(w,"isEmpty",()=>Ye) | ||
n.d(w,"isIntersect",()=>Ge) | ||
n.d(w,"isContain",()=>We) | ||
@@ -262,4 +262,4 @@ n.d(w,"isContainPoint",()=>Je) | ||
n.d(S,"objectPickKey",()=>Hn) | ||
n.d(S,"objectFindKey",()=>Gn) | ||
n.d(S,"objectDeleteUndefined",()=>Yn) | ||
n.d(S,"objectFindKey",()=>Yn) | ||
n.d(S,"objectDeleteUndefined",()=>Gn) | ||
var O={} | ||
@@ -320,4 +320,4 @@ n.r(O) | ||
n.d(k,"createStateStore",()=>Hr) | ||
n.d(k,"createStateStoreLite",()=>Gr) | ||
n.d(k,"createStateStoreEnhanced",()=>Yr) | ||
n.d(k,"createStateStoreLite",()=>Yr) | ||
n.d(k,"createStateStoreEnhanced",()=>Gr) | ||
n.d(k,"toReduxStore",()=>Wr) | ||
@@ -393,4 +393,4 @@ n.d(k,"reducerFromMap",()=>Jr) | ||
n.d(R,"withRetry",()=>Ho) | ||
n.d(R,"withRetryAsync",()=>Go) | ||
n.d(R,"withTimeoutAsync",()=>Yo) | ||
n.d(R,"withRetryAsync",()=>Yo) | ||
n.d(R,"withTimeoutAsync",()=>Go) | ||
n.d(R,"withTimeoutPromise",()=>Wo) | ||
@@ -427,80 +427,81 @@ n.d(R,"createInsideOutPromise",()=>Jo) | ||
n.d(I,"createKeyTree",()=>vs) | ||
n.d(I,"createKeyTreeEnhanced",()=>ws) | ||
var z={} | ||
n.r(z) | ||
n.d(z,"getLevenshteinDistance",()=>bs) | ||
n.d(z,"getLevenshteinDistance",()=>Es) | ||
var U={} | ||
n.r(U) | ||
n.d(U,"DEFAULT_MIME",()=>Es) | ||
n.d(U,"BASIC_EXTENSION_MAP",()=>As) | ||
n.d(U,"getMIMETypeFromFileName",()=>Ss) | ||
n.d(U,"DEFAULT_MIME",()=>As) | ||
n.d(U,"BASIC_EXTENSION_MAP",()=>Ms) | ||
n.d(U,"getMIMETypeFromFileName",()=>Os) | ||
var q={} | ||
n.r(q) | ||
n.d(q,"createPatchKit",()=>Os) | ||
n.d(q,"toObjectPatchKit",()=>Ls) | ||
n.d(q,"toArrayWithKeyPatchKit",()=>Ts) | ||
n.d(q,"createPatchKit",()=>Ls) | ||
n.d(q,"toObjectPatchKit",()=>Ts) | ||
n.d(q,"toArrayWithKeyPatchKit",()=>ks) | ||
var K={} | ||
n.r(K) | ||
n.d(K,"parseRouteToMap",()=>js) | ||
n.d(K,"findRouteFromMap",()=>Ds) | ||
n.d(K,"appendRouteMap",()=>Cs) | ||
n.d(K,"createRouteMap",()=>Rs) | ||
n.d(K,"parseRouteUrl",()=>Ps) | ||
n.d(K,"getRouteParamAny",()=>$s) | ||
n.d(K,"getRouteParam",()=>_s) | ||
n.d(K,"parseRouteToMap",()=>Ds) | ||
n.d(K,"findRouteFromMap",()=>Cs) | ||
n.d(K,"appendRouteMap",()=>Rs) | ||
n.d(K,"createRouteMap",()=>Ps) | ||
n.d(K,"parseRouteUrl",()=>$s) | ||
n.d(K,"getRouteParamAny",()=>_s) | ||
n.d(K,"getRouteParam",()=>Bs) | ||
var Q={} | ||
n.r(Q) | ||
n.d(Q,"parseSemVer",()=>Ns) | ||
n.d(Q,"compareSemVer",()=>Fs) | ||
n.d(Q,"parseSemVer",()=>Fs) | ||
n.d(Q,"compareSemVer",()=>Is) | ||
var V={} | ||
n.r(V) | ||
n.d(V,"verifyOption",()=>qs) | ||
n.d(V,"verifyCheckCode",()=>Ks) | ||
n.d(V,"verifyParsedCheckCode",()=>Qs) | ||
n.d(V,"generateLookupData",()=>Vs) | ||
n.d(V,"generateCheckCode",()=>Hs) | ||
n.d(V,"verifyOption",()=>Ks) | ||
n.d(V,"verifyCheckCode",()=>Qs) | ||
n.d(V,"verifyParsedCheckCode",()=>Vs) | ||
n.d(V,"generateLookupData",()=>Hs) | ||
n.d(V,"generateCheckCode",()=>Ys) | ||
n.d(V,"packCheckCode",()=>Gs) | ||
n.d(V,"parseCheckCode",()=>Ys) | ||
n.d(V,"packDataArrayBuffer",()=>Ws) | ||
n.d(V,"parseDataArrayBuffer",()=>Js) | ||
n.d(V,"parseCheckCode",()=>Ws) | ||
n.d(V,"packDataArrayBuffer",()=>Js) | ||
n.d(V,"parseDataArrayBuffer",()=>Xs) | ||
var H={} | ||
n.r(H) | ||
n.d(H,"createUpdater",()=>Xs) | ||
n.d(H,"createUpdateLoop",()=>Zs) | ||
n.d(H,"createUpdater",()=>Zs) | ||
n.d(H,"createUpdateLoop",()=>ta) | ||
var Y={} | ||
n.r(Y) | ||
n.d(Y,"AsyncTaskLane",()=>$) | ||
n.d(Y,"AsyncTaskQueue",()=>P) | ||
n.d(Y,"AsyncTaskRunner",()=>_) | ||
n.d(Y,"BlockChart",()=>B) | ||
n.d(Y,"Event",()=>a) | ||
n.d(Y,"KeySelector",()=>N) | ||
n.d(Y,"KeyTree",()=>I) | ||
n.d(Y,"LevenshteinDistance",()=>z) | ||
n.d(Y,"MIME",()=>U) | ||
n.d(Y,"Patch",()=>q) | ||
n.d(Y,"RouteMap",()=>K) | ||
n.d(Y,"SemVer",()=>Q) | ||
n.d(Y,"TimedLookup",()=>V) | ||
n.d(Y,"UpdateLoop",()=>H) | ||
var G={} | ||
n.r(G) | ||
n.d(G,"AsyncTaskLane",()=>$) | ||
n.d(G,"AsyncTaskQueue",()=>P) | ||
n.d(G,"AsyncTaskRunner",()=>_) | ||
n.d(G,"BlockChart",()=>B) | ||
n.d(G,"Event",()=>a) | ||
n.d(G,"KeySelector",()=>N) | ||
n.d(G,"KeyTree",()=>I) | ||
n.d(G,"LevenshteinDistance",()=>z) | ||
n.d(G,"MIME",()=>U) | ||
n.d(G,"Patch",()=>q) | ||
n.d(G,"RouteMap",()=>K) | ||
n.d(G,"SemVer",()=>Q) | ||
n.d(G,"TimedLookup",()=>V) | ||
n.d(G,"UpdateLoop",()=>H) | ||
var Y={} | ||
n.r(Y) | ||
n.d(Y,"objectMergeDeep",()=>ta) | ||
n.d(Y,"objectSortKey",()=>ea) | ||
n.d(G,"objectMergeDeep",()=>ea) | ||
n.d(G,"objectSortKey",()=>na) | ||
var W={} | ||
n.r(W) | ||
n.d(W,"Object",()=>Y) | ||
n.d(W,"Object",()=>G) | ||
var J={} | ||
n.r(J) | ||
n.d(J,"indentLine",()=>ra) | ||
n.d(J,"indentList",()=>oa) | ||
n.d(J,"autoEllipsis",()=>sa) | ||
n.d(J,"splitCamelCase",()=>ia) | ||
n.d(J,"joinCamelCase",()=>la) | ||
n.d(J,"splitSnakeCase",()=>da) | ||
n.d(J,"joinSnakeCase",()=>ha) | ||
n.d(J,"splitKebabCase",()=>ua) | ||
n.d(J,"joinKebabCase",()=>pa) | ||
n.d(J,"escapeHTML",()=>va) | ||
n.d(J,"unescapeHTML",()=>Ea) | ||
n.d(J,"removeInvalidCharXML",()=>Ma) | ||
n.d(J,"indentLine",()=>oa) | ||
n.d(J,"indentList",()=>sa) | ||
n.d(J,"autoEllipsis",()=>aa) | ||
n.d(J,"splitCamelCase",()=>da) | ||
n.d(J,"joinCamelCase",()=>ha) | ||
n.d(J,"splitSnakeCase",()=>ua) | ||
n.d(J,"joinSnakeCase",()=>pa) | ||
n.d(J,"splitKebabCase",()=>la) | ||
n.d(J,"joinKebabCase",()=>fa) | ||
n.d(J,"escapeHTML",()=>wa) | ||
n.d(J,"unescapeHTML",()=>Aa) | ||
n.d(J,"removeInvalidCharXML",()=>Sa) | ||
var X={} | ||
@@ -512,3 +513,3 @@ n.r(X) | ||
n.d(X,"Math",()=>D) | ||
n.d(X,"Module",()=>G) | ||
n.d(X,"Module",()=>Y) | ||
n.d(X,"Mutable",()=>W) | ||
@@ -525,10 +526,10 @@ n.d(X,"Check",()=>O) | ||
n.r(Z) | ||
n.d(Z,"Blob",()=>Sa) | ||
n.d(Z,"parseBlobAsText",()=>Ta) | ||
n.d(Z,"parseBlobAsDataURL",()=>ka) | ||
n.d(Z,"parseBlobAsArrayBuffer",()=>ja) | ||
n.d(Z,"Blob",()=>Oa) | ||
n.d(Z,"parseBlobAsText",()=>ka) | ||
n.d(Z,"parseBlobAsDataURL",()=>ja) | ||
n.d(Z,"parseBlobAsArrayBuffer",()=>Da) | ||
var tt={} | ||
n.r(tt) | ||
n.d(tt,"packBlobPacket",()=>Ca) | ||
n.d(tt,"parseBlobPacket",()=>Ra) | ||
n.d(tt,"packBlobPacket",()=>Ra) | ||
n.d(tt,"parseBlobPacket",()=>Pa) | ||
var et={} | ||
@@ -540,9 +541,9 @@ n.r(et) | ||
n.r(nt) | ||
n.d(nt,"createKeyCommandHub",()=>Pa) | ||
n.d(nt,"createKeyCommandHub",()=>$a) | ||
var rt={} | ||
n.r(rt) | ||
n.d(rt,"POINTER_EVENT_TYPE",()=>$a) | ||
n.d(rt,"applyPointerEventListener",()=>_a) | ||
n.d(rt,"ENHANCED_POINTER_EVENT_TYPE",()=>Ba) | ||
n.d(rt,"applyEnhancedPointerEventListener",()=>Na) | ||
n.d(rt,"POINTER_EVENT_TYPE",()=>_a) | ||
n.d(rt,"applyPointerEventListener",()=>Ba) | ||
n.d(rt,"ENHANCED_POINTER_EVENT_TYPE",()=>Na) | ||
n.d(rt,"applyEnhancedPointerEventListener",()=>Fa) | ||
var ot={} | ||
@@ -554,6 +555,6 @@ n.r(ot) | ||
n.r(st) | ||
n.d(st,"createHistoryStateStore",()=>Fa) | ||
n.d(st,"createHistoryStateStore",()=>Ia) | ||
var at={} | ||
n.r(at) | ||
n.d(at,"createSyncStateStorage",()=>Ia) | ||
n.d(at,"createSyncStateStorage",()=>za) | ||
var ct={} | ||
@@ -565,21 +566,21 @@ n.r(ct) | ||
n.r(it) | ||
n.d(it,"throttleByAnimationFrame",()=>za) | ||
n.d(it,"applyDragFileListListener",()=>qa) | ||
n.d(it,"getPathElementList",()=>Ka) | ||
n.d(it,"getElementAtViewport",()=>Qa) | ||
n.d(it,"throttleByAnimationFrame",()=>Ua) | ||
n.d(it,"applyDragFileListListener",()=>Ka) | ||
n.d(it,"getPathElementList",()=>Qa) | ||
n.d(it,"getElementAtViewport",()=>Va) | ||
var dt={} | ||
n.r(dt) | ||
n.d(dt,"fetchLikeRequest",()=>Wa) | ||
n.d(dt,"fetchLikeRequest",()=>Ja) | ||
var ut={} | ||
n.r(ut) | ||
n.d(ut,"loadText",()=>dc) | ||
n.d(ut,"loadImage",()=>uc) | ||
n.d(ut,"loadScript",()=>lc) | ||
n.d(ut,"createDownload",()=>hc) | ||
n.d(ut,"createDownloadWithBlob",()=>pc) | ||
n.d(ut,"createDownloadWithString",()=>fc) | ||
n.d(ut,"createDownloadWithObject",()=>yc) | ||
n.d(ut,"saveArrayBufferCache",()=>gc) | ||
n.d(ut,"loadArrayBufferCache",()=>mc) | ||
n.d(ut,"deleteArrayBufferCache",()=>vc) | ||
n.d(ut,"loadText",()=>uc) | ||
n.d(ut,"loadImage",()=>lc) | ||
n.d(ut,"loadScript",()=>hc) | ||
n.d(ut,"createDownload",()=>pc) | ||
n.d(ut,"createDownloadWithBlob",()=>fc) | ||
n.d(ut,"createDownloadWithString",()=>yc) | ||
n.d(ut,"createDownloadWithObject",()=>gc) | ||
n.d(ut,"saveArrayBufferCache",()=>mc) | ||
n.d(ut,"loadArrayBufferCache",()=>vc) | ||
n.d(ut,"deleteArrayBufferCache",()=>wc) | ||
var lt={} | ||
@@ -793,9 +794,9 @@ n.r(lt) | ||
r&&r.forEach(n)}}} | ||
const Gt=(t,e=Ht())=>{t.forEach((t,n)=>e.add(t,n)) | ||
const Yt=(t,e=Ht())=>{t.forEach((t,n)=>e.add(t,n)) | ||
return e} | ||
const Yt=()=>{const t=new Map | ||
const Gt=()=>{const t=new Map | ||
const e=(e,n)=>{void 0===n&&(n=!t.get(e)) | ||
t.set(e,n) | ||
return n} | ||
e.get=(e=>t.get(e)) | ||
e.get=e=>t.get(e) | ||
return e} | ||
@@ -929,4 +930,4 @@ const Wt=t=>{const e=(e,n)=>{const r=t(n) | ||
return t},ze()) | ||
const Ge=({min:t,max:e})=>e.x<=t.x||e.y<=t.y | ||
const Ye=(t,e)=>!(t.max.x<e.min.x||t.min.x>e.max.x||t.max.y<e.min.y||t.min.y>e.max.y) | ||
const Ye=({min:t,max:e})=>e.x<=t.x||e.y<=t.y | ||
const Ge=(t,e)=>!(t.max.x<e.min.x||t.min.x>e.max.x||t.max.y<e.min.y||t.min.y>e.max.y) | ||
const We=(t,e)=>t.min.x<=e.min.x&&t.max.x>=e.max.x&&t.min.y<=e.min.y&&t.max.y>=e.max.y | ||
@@ -1030,5 +1031,5 @@ const Je=({min:t,max:e},{x:n,y:r})=>n>=t.x&&n<=e.x&&r>=t.y&&r<=e.y | ||
return n} | ||
const Gn=(t,e)=>{const n=Object.entries(t).find(e) | ||
const Yn=(t,e)=>{const n=Object.entries(t).find(e) | ||
return n&&n[0]} | ||
const Yn=t=>{let e | ||
const Gn=t=>{let e | ||
for(const[n,r]of Object.entries(t))if(void 0===r){void 0===e&&(e=Object.assign({},t)) | ||
@@ -1124,4 +1125,4 @@ delete e[n]}return e||t} | ||
return t}}} | ||
const Gr=t=>({getState:()=>t,setState:e=>t=Object.assign({},t,e)}) | ||
const Yr=({initialState:t,enhancer:e,reducer:n})=>{$r(e,"enhancer function required") | ||
const Yr=t=>({getState:()=>t,setState:e=>t=Object.assign({},t,e)}) | ||
const Gr=({initialState:t,enhancer:e,reducer:n})=>{$r(e,"enhancer function required") | ||
$r(n,"reducer function required") | ||
@@ -1267,3 +1268,3 @@ const{subscribe:r,unsubscribe:o,getState:s,setState:a}=Hr(t) | ||
for(;;)try{return t(n,e)}catch(t){if(e<++n)throw t}} | ||
const Go=async(t,e=1/0,n=0)=>{let r=0 | ||
const Yo=async(t,e=1/0,n=0)=>{let r=0 | ||
for(;;){const o=Po() | ||
@@ -1273,3 +1274,3 @@ try{return await t(r,e)}catch(t){if(e<++r)throw t | ||
s>0&&await _o(s)}}} | ||
const Yo=(t,e)=>Wo(t(),e) | ||
const Go=(t,e)=>Wo(t(),e) | ||
const Wo=(t,e)=>{let n=null | ||
@@ -1375,3 +1376,5 @@ return Promise.race([t,new Promise((t,r)=>{n=setTimeout(()=>r(new Error(`timeout after: ${e}`)),e)})]).then(t=>{clearTimeout(n) | ||
const c=new RegExp("(]+)","g") | ||
return{stringify:t=>JSON.stringify(t).replace(r,"[").replace(o,(t,e)=>"]".repeat(e.length/2)).replace(n,","),parse:n=>JSON.parse(n.replace(s,`"},{"${t}":"`).replace(c,(e,n,r,o)=>`"${"}]".repeat(n.length)}${r+e.length!==o.length?`},{"${t}":"`:""}`).replace(a,(n,r)=>`${0!==r?`","${e}":`:""}[{"${t}":"`)),createBuilder:n=>{const r=new Map | ||
return{stringify:t=>JSON.stringify(t).replace(r,"[").replace(o,(t,e)=>"]".repeat(e.length/2)).replace(n,","),parse:n=>JSON.parse(n.replace(s,`"},{"${t}":"`).replace(c,(e,n,r,o)=>`"${"}]".repeat(n.length)}${r+e.length!==o.length?`},{"${t}":"`:""}`).replace(a,(n,r)=>`${0!==r?`","${e}":`:""}[{"${t}":"`))}} | ||
const ws=({NAME_KEY:t="key",NAME_SUB_LIST:e="subList"})=>{const n=Wt(([n,r,o])=>n[e]&&n[e].length&&n[e].map((e,r)=>[e,r,n[t]])) | ||
return Object.assign({},vs({NAME_KEY:t,NAME_SUB_LIST:e}),{createBuilder:n=>{const r=new Map | ||
const o=n=>{const a={[t]:n} | ||
@@ -1389,6 +1392,6 @@ const c=r.get(n) | ||
void 0!==t&&s.push(...t) | ||
a=r.keys().next().value}return 0===s.length?{[t]:n}:{[t]:n,[e]:s}}}}}} | ||
const ws=[] | ||
a=r.keys().next().value}return 0===s.length?{[t]:n}:{[t]:n,[e]:s}}}},walkKeyTreeJSON:(t,e=(([t,e,n])=>{}))=>n([t,0,void 0],e)})} | ||
const xs=[] | ||
const bs=(t,e)=>{if(t===e)return 0 | ||
const bs=[] | ||
const Es=(t,e)=>{if(t===e)return 0 | ||
t.length>e.length&&([t,e]=[e,t]) | ||
@@ -1403,4 +1406,4 @@ let n=t.length | ||
let s=0 | ||
for(;s<n;){xs[s]=t.charCodeAt(o+s) | ||
ws[s]=++s}let a,c,i,d | ||
for(;s<n;){bs[s]=t.charCodeAt(o+s) | ||
xs[s]=++s}let a,c,i,d | ||
let u=0 | ||
@@ -1410,13 +1413,13 @@ for(;u<r;){a=e.charCodeAt(o+u) | ||
c=u | ||
for(s=0;s<n;s++){d=a===xs[s]?i:i+1 | ||
i=ws[s] | ||
c=ws[s]=i>c?d>c?c+1:d:d>i?i+1:d}}return c} | ||
const Es="application/octet-stream" | ||
const As=["application/gzip;gz","application/javascript;js;mjs","application/json","application/pdf","application/xml","application/x-7z-compressed;7z","application/x-tar;tar","application/zip","audio/midi;mid","audio/mpeg;mp3","audio/ogg","audio/wav","audio/webm;weba","audio/x-flac;flac","font/ttf","font/otf","font/woff","font/woff2","image/bmp","image/gif","image/jpeg;jpg","image/png","image/svg+xml;svg","image/webp","image/x-icon;ico","text/css","text/csv","text/html;htm","text/plain;txt;text;conf;log;ini","text/rtf","text/xml","video/mp4;mp4v;mpg4","video/mpeg;mpg","video/webm","video/x-flv;flv","video/x-ms-wmv;wmv","video/x-msvideo;avi"].reduce((t,e)=>{const[n]=e.split(";") | ||
for(s=0;s<n;s++){d=a===bs[s]?i:i+1 | ||
i=xs[s] | ||
c=xs[s]=i>c?d>c?c+1:d:d>i?i+1:d}}return c} | ||
const As="application/octet-stream" | ||
const Ms=["application/gzip;gz","application/javascript;js;mjs","application/json","application/pdf","application/xml","application/x-7z-compressed;7z","application/x-tar;tar","application/zip","audio/midi;mid","audio/mpeg;mp3","audio/ogg","audio/wav","audio/webm;weba","audio/x-flac;flac","font/ttf","font/otf","font/woff","font/woff2","image/bmp","image/gif","image/jpeg;jpg","image/png","image/svg+xml;svg","image/webp","image/x-icon;ico","text/css","text/csv","text/html;htm","text/plain;txt;text;conf;log;ini","text/rtf","text/xml","video/mp4;mp4v;mpg4","video/mpeg;mpg","video/webm","video/x-flv;flv","video/x-ms-wmv;wmv","video/x-msvideo;avi"].reduce((t,e)=>{const[n]=e.split(";") | ||
e.split("/")[1].split(";").forEach(e=>t[e]=n) | ||
return t},{}) | ||
const Ms=/\.(\w+)$/ | ||
const Ss=t=>{const e=Ms.exec(t) | ||
return e&&As[e[1]]||Es} | ||
const Os=({NAME_KEY:t="key",NAME_MODIFY_TIME:e="mtime",EPSILON_MODIFY_TIME:n=1,isChanged:r=((t,n)=>t[e]!==n[e]),shouldApplyDelete:o=((t,n)=>t[e]>=n[e]),shouldApplyUpdate:s=((t,n)=>t[e]>n[e]),getPatchData:a=((t,r)=>t[e]<r[e]?Object.assign({},t,{[e]:r[e]+n}):t)})=>{const c=(e,n)=>e.set(n[t],n) | ||
const Ss=/\.(\w+)$/ | ||
const Os=t=>{const e=Ss.exec(t) | ||
return e&&Ms[e[1]]||As} | ||
const Ls=({NAME_KEY:t="key",NAME_MODIFY_TIME:e="mtime",EPSILON_MODIFY_TIME:n=1,isChanged:r=((t,n)=>t[e]!==n[e]),shouldApplyDelete:o=((t,n)=>t[e]>=n[e]),shouldApplyUpdate:s=((t,n)=>t[e]>n[e]),getPatchData:a=((t,r)=>t[e]<r[e]?Object.assign({},t,{[e]:r[e]+n}):t)})=>{const c=(e,n)=>e.set(n[t],n) | ||
return{NAME_KEY:t,NAME_MODIFY_TIME:e,isChanged:r,shouldApplyDelete:o,shouldApplyUpdate:s,hasPatch:(e,n)=>{for(let o=0,s=n.length;o<s;o++){const s=n[o] | ||
@@ -1453,16 +1456,16 @@ const a=s[t] | ||
return i},arrayMapReducer:c}} | ||
const Ls=t=>{const{NAME_KEY:e,hasPatch:n,countPatch:r,generatePatch:o,applyPatch:s}=t | ||
const Ts=t=>{const{NAME_KEY:e,hasPatch:n,countPatch:r,generatePatch:o,applyPatch:s}=t | ||
return{hasObjectPatch:(t,e)=>n(new Map(Object.entries(t)),Object.values(e)),countObjectPatch:(t,e)=>r(new Map(Object.entries(t)),Object.values(e)),generateObjectPatch:(t,e)=>o(new Map(Object.entries(t)),Object.values(e)),applyObjectPatch:(t,{deleteList:n,updateList:r})=>{const o={} | ||
return s(n,r,Object.values(t),(t,n)=>{void 0!==t&&(o[t[e]]=t)})?o:t}}} | ||
const Ts=t=>{const{hasPatch:e,countPatch:n,generatePatch:r,applyPatch:o,arrayMapReducer:s}=t | ||
const ks=t=>{const{hasPatch:e,countPatch:n,generatePatch:r,applyPatch:o,arrayMapReducer:s}=t | ||
return{hasArrayWithKeyPatch:(t,n)=>e(t.reduce(s,new Map),n),countArrayWithKeyPatch:(t,e)=>n(t.reduce(s,new Map),e),generateArrayWithKeyPatch:(t,e)=>r(t.reduce(s,new Map),e),applyArrayWithKeyPatch:(t,{deleteList:e,updateList:n})=>{const r=[] | ||
return o(e,n,t,(t,e)=>{void 0!==t&&r.push(t)})?r:t}}} | ||
const ks=(t,e)=>void 0===t[e]?t[e]={}:t[e] | ||
const js=(t,e)=>{const n=[] | ||
const js=(t,e)=>void 0===t[e]?t[e]={}:t[e] | ||
const Ds=(t,e)=>{const n=[] | ||
return{routeNode:t=e.split("/").reduce((t,r)=>{if("*"===r){n.push("/*") | ||
return ks(t,"/*")}if(":"===r[0]){const o=r.slice(1) | ||
return js(t,"/*")}if(":"===r[0]){const o=r.slice(1) | ||
if(!o||n.includes(o))throw new Error(`invalid frag [${r}] for route: ${e}`) | ||
n.push(o) | ||
return ks(t,"/:PARAM")}return ks(t,r)},t),paramNameList:n}} | ||
const Ds=(t,e)=>{const n=[] | ||
return js(t,"/:PARAM")}return js(t,r)},t),paramNameList:n}} | ||
const Cs=(t,e)=>{const n=[] | ||
const r=e.split("/") | ||
@@ -1475,9 +1478,9 @@ for(let e=0,o=r.length;e<o;e++){const o=r[e] | ||
t=t["/:PARAM"]}}return{routeNode:t,paramValueList:n}} | ||
const Cs=(t={},e="/",n)=>{if(Array.isArray(e))return e.reduce((e,r)=>Cs(t,r,n),t) | ||
const{routeNode:r,paramNameList:o}=js(t,e) | ||
const Rs=(t={},e="/",n)=>{if(Array.isArray(e))return e.reduce((e,r)=>Rs(t,r,n),t) | ||
const{routeNode:r,paramNameList:o}=Ds(t,e) | ||
if(r["/DATA"])throw new Error(`duplicate route: ${e}`) | ||
r["/DATA"]={route:e,paramNameList:o,data:n} | ||
return t} | ||
const Rs=t=>t.reduce((t,[e,n])=>Cs(t,e,n),{}) | ||
const Ps=(t,e)=>{const n=Ds(t,e) | ||
const Ps=t=>t.reduce((t,[e,n])=>Rs(t,e,n),{}) | ||
const $s=(t,e)=>{const n=Cs(t,e) | ||
if(void 0===n)return | ||
@@ -1489,6 +1492,6 @@ const{routeNode:r,paramValueList:o}=n | ||
return t},{}),data:c}} | ||
const $s=({paramMap:t})=>t["/*"] | ||
const _s=({paramMap:t},e)=>t[e] | ||
const Bs=/^(\d+)\.(\d+)\.(\d+)(.*)$/ | ||
const Ns=t=>{let[,e,n,r,o=""]=Bs.exec(t)||[] | ||
const _s=({paramMap:t})=>t["/*"] | ||
const Bs=({paramMap:t},e)=>t[e] | ||
const Ns=/^(\d+)\.(\d+)\.(\d+)(.*)$/ | ||
const Fs=t=>{let[,e,n,r,o=""]=Ns.exec(t)||[] | ||
e=parseInt(e) | ||
@@ -1499,14 +1502,14 @@ n=parseInt(n) | ||
return{major:e,minor:n,patch:r,label:o}} | ||
const Fs=(t,e)=>{const n=Ns(t) | ||
const r=Ns(e) | ||
return n.major-r.major||n.minor-r.minor||n.patch-r.patch||Is(n.label,r.label)} | ||
const Is=(t,e)=>t===e?0:e.startsWith(t)?1:t.startsWith(e)?-1:fs(t,e) | ||
const zs="1".charCodeAt(0) | ||
const Us=(t,e,n,r=0)=>{const o=(r=Math.floor(r)).toString(2) | ||
const Is=(t,e)=>{const n=Fs(t) | ||
const r=Fs(e) | ||
return n.major-r.major||n.minor-r.minor||n.patch-r.patch||zs(n.label,r.label)} | ||
const zs=(t,e)=>t===e?0:e.startsWith(t)?1:t.startsWith(e)?-1:fs(t,e) | ||
const Us="1".charCodeAt(0) | ||
const qs=(t,e,n,r=0)=>{const o=(r=Math.floor(r)).toString(2) | ||
const s=Math.pow(16,e) | ||
let a=r%t | ||
let c=n.getUint8(a) | ||
for(let e=0,r=o.length;e<r;e++){o.charCodeAt(e)===zs?a=(a+n.getUint8((a+1)%t))%t:c*=16 | ||
for(let e=0,r=o.length;e<r;e++){o.charCodeAt(e)===Us?a=(a+n.getUint8((a+1)%t))%t:c*=16 | ||
c=(c+n.getUint8(a))%s}return(c%Math.pow(2,4*e)).toString(16).padStart(e,"0")} | ||
const qs=({tag:t=$o().toString(36),size:e=65536,tokenSize:n=8,timeGap:r=30})=>{if(!/^\w*$/.test(t))throw new Error(`invalid tag: ${t}`) | ||
const Ks=({tag:t=$o().toString(36),size:e=65536,tokenSize:n=8,timeGap:r=30})=>{if(!/^\w*$/.test(t))throw new Error(`invalid tag: ${t}`) | ||
if(!Number.isInteger(e)||e<=1024||e%32)throw new Error(`invalid size: ${e}`) | ||
@@ -1516,21 +1519,21 @@ if(!Number.isInteger(n)||n>13||n<2)throw new Error(`invalid tokenSize: ${n}`) | ||
return{tag:t,size:e,tokenSize:n,timeGap:r}} | ||
const Ks=(t,e,n=$o())=>{if("string"!=typeof e||e.length<t.tokenSize)throw new Error(`invalid checkCode: ${e}`) | ||
Qs(t,Ys(e),n)} | ||
const Qs=({tag:t,size:e,tokenSize:n,timeGap:r,dataView:o},[s,a,c],i=$o())=>{if(s!==t)throw new Error(`tag mismatch: ${s}, expect: ${t}`) | ||
const Qs=(t,e,n=$o())=>{if("string"!=typeof e||e.length<t.tokenSize)throw new Error(`invalid checkCode: ${e}`) | ||
Vs(t,Ws(e),n)} | ||
const Vs=({tag:t,size:e,tokenSize:n,timeGap:r,dataView:o},[s,a,c],i=$o())=>{if(s!==t)throw new Error(`tag mismatch: ${s}, expect: ${t}`) | ||
if(Math.abs(i-a)>r)throw new Error(`timestamp mismatch: ${a}, expect: ${i}±${r}`) | ||
const d=Us(e,n,o,a/r) | ||
const d=qs(e,n,o,a/r) | ||
if(d!==c)throw new Error(`code mismatch: ${c}, expect: ${d}`)} | ||
const Vs=t=>{t=qs(t) | ||
const Hs=t=>{t=Ks(t) | ||
return Object.assign({},t,{dataView:new DataView(Object(To.a)(t.size))})} | ||
const Hs=({tag:t,size:e,tokenSize:n,timeGap:r,dataView:o},s=$o())=>{const a=Us(e,n,o,s/r) | ||
const Ys=({tag:t,size:e,tokenSize:n,timeGap:r,dataView:o},s=$o())=>{const a=qs(e,n,o,s/r) | ||
return Gs(t,s,a)} | ||
const Gs=(t,e,n)=>se([t,e.toString(36),n].join("-")) | ||
const Ys=t=>{const e=se(t).split("-") | ||
const Ws=t=>{const e=se(t).split("-") | ||
e[1]=Number.parseInt(e[1],36) | ||
return e} | ||
const Ws=({tag:t,size:e,tokenSize:n,timeGap:r,dataView:o})=>Tt(JSON.stringify([t,e,n,r]),o.buffer) | ||
const Js=t=>{const[e,n]=kt(t) | ||
const Js=({tag:t,size:e,tokenSize:n,timeGap:r,dataView:o})=>Tt(JSON.stringify([t,e,n,r]),o.buffer) | ||
const Xs=t=>{const[e,n]=kt(t) | ||
const[r,o,s,a]=JSON.parse(e) | ||
return{tag:r,size:o,tokenSize:s,timeGap:a,dataView:new DataView(n)}} | ||
const Xs=()=>{let t | ||
const Zs=()=>{let t | ||
let e | ||
@@ -1552,48 +1555,48 @@ let n | ||
n.forEach(s)}}} | ||
const Zs=({delay:t,queueTask:e=Bo,cancelTask:n=No}={})=>{const{clear:r,pushFunc:o,setFunc:s,deleteFunc:a,update:c}=Xs() | ||
const ta=({delay:t,queueTask:e=Bo,cancelTask:n=No}={})=>{const{clear:r,pushFunc:o,setFunc:s,deleteFunc:a,update:c}=Zs() | ||
const{start:i,stop:d}=Fo({func:c,queueTask:e,cancelTask:n,delay:t}) | ||
return{start:i,stop:d,clear:r,pushFunc:o,setFunc:s,deleteFunc:a}} | ||
const ta=(t,e)=>{Object.entries(e).forEach(([e,n])=>{const r=t[e] | ||
r!==n&&(t[e]=er(r)&&er(n)?ta(r,n):n)}) | ||
const ea=(t,e)=>{Object.entries(e).forEach(([e,n])=>{const r=t[e] | ||
r!==n&&(t[e]=er(r)&&er(n)?ea(r,n):n)}) | ||
return t} | ||
const ea=(t,e=ps)=>{Object.keys(t).sort(e).forEach(e=>{const n=t[e] | ||
const na=(t,e=ps)=>{Object.keys(t).sort(e).forEach(e=>{const n=t[e] | ||
delete t[e] | ||
t[e]=n}) | ||
return t} | ||
const na=/\n/g | ||
const ra=(t,e=" ",n=e)=>`${n}${t.replace(na,`\n${e}`)}` | ||
const oa=(t,e=[],n=" - ",r=" ".repeat(n.length))=>[t,...e.map(t=>ra(t,r,n))].join("\n") | ||
const sa=(t="",e=64,n=32,r=16)=>t.length>e?`${t.slice(0,n)}...${r>0?t.slice(-r):""} (+${t.length-n-r})`:t | ||
const aa=/[^A-Z]/ | ||
const ca=/([^A-Z]|[A-Z]{2,})([A-Z])/g | ||
const ia=t=>aa.test(t)?t.replace(ca,"$1 $2").split(" "):[t] | ||
const da=t=>t.split("_") | ||
const ua=t=>t.split("-") | ||
const la=(t,e=1)=>t.reduce((t,n,r)=>t+(r<e?n:fa(n)),"") | ||
const ha=t=>t.join("_").toUpperCase() | ||
const pa=t=>t.join("-").toLowerCase() | ||
const fa=t=>t.charAt(0).toUpperCase()+t.slice(1) | ||
const ya={'"':""","&":"&","'":"'","<":"<",">":">"} | ||
const ga=/["&'<>]/g | ||
const ma=t=>ya[t]||t | ||
const va=t=>t&&t.replace(ga,ma) | ||
const wa={""":'"',""":'"',"&":"&","&":"&","'":"'","'":"'","<":"<","<":"<",">":">",">":">"} | ||
const xa=/&(?:#34|quot|#38|amp|#39|apos|#60|lt|#62|gt);/g | ||
const ba=t=>wa[t]||t | ||
const Ea=t=>t&&t.replace(xa,ba) | ||
const Aa=/[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm | ||
const Ma=t=>t.replace(Aa,"") | ||
const{Blob:Sa,FileReader:Oa}=window | ||
const La=t=>e=>new Promise((n,r)=>{const o=new Oa | ||
const ra=/\n/g | ||
const oa=(t,e=" ",n=e)=>`${n}${t.replace(ra,`\n${e}`)}` | ||
const sa=(t,e=[],n=" - ",r=" ".repeat(n.length))=>[t,...e.map(t=>oa(t,r,n))].join("\n") | ||
const aa=(t="",e=64,n=32,r=16)=>t.length>e?`${t.slice(0,n)}...${r>0?t.slice(-r):""} (+${t.length-n-r})`:t | ||
const ca=/[^A-Z]/ | ||
const ia=/([^A-Z]|[A-Z]{2,})([A-Z])/g | ||
const da=t=>ca.test(t)?t.replace(ia,"$1 $2").split(" "):[t] | ||
const ua=t=>t.split("_") | ||
const la=t=>t.split("-") | ||
const ha=(t,e=1)=>t.reduce((t,n,r)=>t+(r<e?n:ya(n)),"") | ||
const pa=t=>t.join("_").toUpperCase() | ||
const fa=t=>t.join("-").toLowerCase() | ||
const ya=t=>t.charAt(0).toUpperCase()+t.slice(1) | ||
const ga={'"':""","&":"&","'":"'","<":"<",">":">"} | ||
const ma=/["&'<>]/g | ||
const va=t=>ga[t]||t | ||
const wa=t=>t&&t.replace(ma,va) | ||
const xa={""":'"',""":'"',"&":"&","&":"&","'":"'","'":"'","<":"<","<":"<",">":">",">":">"} | ||
const ba=/&(?:#34|quot|#38|amp|#39|apos|#60|lt|#62|gt);/g | ||
const Ea=t=>xa[t]||t | ||
const Aa=t=>t&&t.replace(ba,Ea) | ||
const Ma=/[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm | ||
const Sa=t=>t.replace(Ma,"") | ||
const{Blob:Oa,FileReader:La}=window | ||
const Ta=t=>e=>new Promise((n,r)=>{const o=new La | ||
o.addEventListener("error",r) | ||
o.addEventListener("load",()=>n(o.result)) | ||
o[t](e)}) | ||
const Ta=La("readAsText") | ||
const ka=La("readAsDataURL") | ||
const ja=La("readAsArrayBuffer") | ||
const Da=new Sa | ||
const Ca=(t,e=Da)=>new Sa([...Ot(Et(t)),e]) | ||
const Ra=async t=>{const e=new DataView(await ja(t.slice(0,Mt))).getUint32(0,!1) | ||
return[bt(await ja(t.slice(Mt,Mt+e))),t.slice(Mt+e)]} | ||
const Pa=({eventSource:t=window.document,isSkipPreventDefault:e=!1})=>{const n=new Map | ||
const ka=Ta("readAsText") | ||
const ja=Ta("readAsDataURL") | ||
const Da=Ta("readAsArrayBuffer") | ||
const Ca=new Oa | ||
const Ra=(t,e=Ca)=>new Oa([...Ot(Et(t)),e]) | ||
const Pa=async t=>{const e=new DataView(await Da(t.slice(0,Mt))).getUint32(0,!1) | ||
return[bt(await Da(t.slice(Mt,Mt+e))),t.slice(Mt+e)]} | ||
const $a=({eventSource:t=window.document,isSkipPreventDefault:e=!1})=>{const n=new Map | ||
const r=t=>n.forEach(n=>{const{target:r,checkMap:o,callback:s}=n | ||
@@ -1607,4 +1610,4 @@ if((!r||r.contains(t.target))&&rr(t,o)){!e&&t.preventDefault() | ||
return t},deleteKeyCommand:({id:t})=>n.delete(t)}} | ||
const $a={START:"START",MOVE:"MOVE",END:"END",CANCEL:"CANCEL"} | ||
const _a=({element:t,onEvent:e,isGlobal:n=!1,isCancel:r=!0,isCancelOnOutOfBound:o=!0,isUseTouchEvent:s=!0})=>{!window.getComputedStyle(t).touchAction&&console.warn("[applyPointerEventListener] should set CSS 'touch-action' to 'none' to prevent browser defaults") | ||
const _a={START:"START",MOVE:"MOVE",END:"END",CANCEL:"CANCEL"} | ||
const Ba=({element:t,onEvent:e,isGlobal:n=!1,isCancel:r=!0,isCancelOnOutOfBound:o=!0,isUseTouchEvent:s=!0})=>{!window.getComputedStyle(t).touchAction&&console.warn("[applyPointerEventListener] should set CSS 'touch-action' to 'none' to prevent browser defaults") | ||
const a=n?window.document:t | ||
@@ -1645,10 +1648,10 @@ o=r&&o | ||
s&&r&&a.addEventListener("touchcancel",w) | ||
e($a.START,t,f)}} | ||
e(_a.START,t,f)}} | ||
const m=n=>{if(y(n))return | ||
const{point:r}=f(n) | ||
if(o&&!ye(t.getBoundingClientRect(),r))return w(n) | ||
e($a.MOVE,n,f)} | ||
const v=t=>{if(!y(t)){e($a.END,t,f) | ||
e(_a.MOVE,n,f)} | ||
const v=t=>{if(!y(t)){e(_a.END,t,f) | ||
h()}} | ||
const w=t=>{if(!y(t)){e($a.CANCEL,t,f) | ||
const w=t=>{if(!y(t)){e(_a.CANCEL,t,f) | ||
h()}} | ||
@@ -1661,4 +1664,4 @@ t.addEventListener("pointerdown",g) | ||
h()}} | ||
const Ba={TAP:"TAP",HOLD:"HOLD",DRAG_MOVE:"DRAG_MOVE",DRAG_END:"DRAG_END",DRAG_CANCEL:"DRAG_CANCEL"} | ||
const Na=t=>{let{onEnhancedEvent:e,onEvent:n,holdDurationThreshold:r=500,dragDistanceThreshold:o=5}=t,s=function(t,e){if(null==t)return{} | ||
const Na={TAP:"TAP",HOLD:"HOLD",DRAG_MOVE:"DRAG_MOVE",DRAG_END:"DRAG_END",DRAG_CANCEL:"DRAG_CANCEL"} | ||
const Fa=t=>{let{onEnhancedEvent:e,onEvent:n,holdDurationThreshold:r=500,dragDistanceThreshold:o=5}=t,s=function(t,e){if(null==t)return{} | ||
var n={} | ||
@@ -1670,11 +1673,11 @@ var r=Object.keys(t) | ||
let a=!1 | ||
return _a(Object.assign({onEvent:(t,s,c)=>{const i=c(s) | ||
switch(t){case $a.START:a=!1 | ||
return Ba(Object.assign({onEvent:(t,s,c)=>{const i=c(s) | ||
switch(t){case _a.START:a=!1 | ||
break | ||
case $a.MOVE:(a|=i.distance>=o)&&e(Ba.DRAG_MOVE,i) | ||
case _a.MOVE:(a|=i.distance>=o)&&e(Na.DRAG_MOVE,i) | ||
break | ||
case $a.END:a?e(Ba.DRAG_END,i):i.duration>=r?e(Ba.HOLD,i):e(Ba.TAP,i) | ||
case _a.END:a?e(Na.DRAG_END,i):i.duration>=r?e(Na.HOLD,i):e(Na.TAP,i) | ||
break | ||
case $a.CANCEL:a&&e(Ba.DRAG_CANCEL,i)}n&&n(t,s,c)}},s))} | ||
const Fa=(t=window.location.href)=>{const e=(e,n)=>{if("string"!=typeof e)throw new Error(`non-string href: ${e}`) | ||
case _a.CANCEL:a&&e(Na.DRAG_CANCEL,i)}n&&n(t,s,c)}},s))} | ||
const Ia=(t=window.location.href)=>{const e=(e,n)=>{if("string"!=typeof e)throw new Error(`non-string href: ${e}`) | ||
if(e===t)return t | ||
@@ -1695,3 +1698,3 @@ const r=t | ||
window.removeEventListener("hashchange",r)}}}} | ||
const Ia=({keyPrefix:t="STATE",setItem:e=((e,n)=>window.localStorage.setItem(`${t}|${e}`,JSON.stringify(n))),getItem:n=(e=>JSON.parse(window.localStorage.getItem(`${t}|${e}`))),removeItem:r=(e=>window.localStorage.removeItem(`${t}|${e}`))})=>{let o={} | ||
const za=({keyPrefix:t="STATE",setItem:e=((e,n)=>window.localStorage.setItem(`${t}|${e}`,JSON.stringify(n))),getItem:n=(e=>JSON.parse(window.localStorage.getItem(`${t}|${e}`))),removeItem:r=(e=>window.localStorage.removeItem(`${t}|${e}`))})=>{let o={} | ||
let s=[] | ||
@@ -1712,3 +1715,3 @@ const a=t=>{o={} | ||
return{reset:a,init:t=>a(Object.assign({},t,i())),save:c,load:i}} | ||
const za=t=>{let e=null | ||
const Ua=t=>{let e=null | ||
const n=()=>{const n=e | ||
@@ -1719,14 +1722,14 @@ e=null | ||
e=t}} | ||
const Ua=t=>{t.stopPropagation() | ||
const qa=t=>{t.stopPropagation() | ||
t.preventDefault()} | ||
const qa=(t=window.document,e)=>{const n=t=>{Ua(t) | ||
const Ka=(t=window.document,e)=>{const n=t=>{qa(t) | ||
const{files:n}=t.dataTransfer | ||
n&&n.length&&e(n)} | ||
t.addEventListener("dragenter",Ua) | ||
t.addEventListener("dragover",Ua) | ||
t.addEventListener("dragenter",qa) | ||
t.addEventListener("dragover",qa) | ||
t.addEventListener("drop",n) | ||
return()=>{t.removeEventListener("dragenter",Ua) | ||
t.removeEventListener("dragover",Ua) | ||
return()=>{t.removeEventListener("dragenter",qa) | ||
t.removeEventListener("dragover",qa) | ||
t.removeEventListener("drop",n)}} | ||
const Ka=(t,e)=>{if(!t.contains(e))return[] | ||
const Qa=(t,e)=>{if(!t.contains(e))return[] | ||
let n=e | ||
@@ -1736,3 +1739,3 @@ const r=[] | ||
n=n.parentElement}return r} | ||
const Qa=(t,e)=>{const n=e&&e.map(t=>{const{visibility:e}=t.style | ||
const Va=(t,e)=>{const n=e&&e.map(t=>{const{visibility:e}=t.style | ||
t.style.visibility="hidden" | ||
@@ -1743,15 +1746,15 @@ return e}) | ||
return r} | ||
const{XMLHttpRequest:Va,Blob:Ha,TextDecoder:Ga}=ft.c | ||
const Ya=/[\r\n]+/ | ||
const Wa=(t,{method:e="GET",headers:n,body:r,timeout:o=0,credentials:s,onUploadProgress:a,onDownloadProgress:c}={})=>new Promise((i,d)=>{const u=(n,r)=>Object.assign(new Error(n),{status:r,url:t,method:e}) | ||
const l=new Va | ||
l.onerror=(()=>d(u("NETWORK_ERROR",-1))) | ||
l.ontimeout=(()=>d(u("NETWORK_TIMEOUT",-1))) | ||
l.onreadystatechange=(()=>{const{readyState:t,status:e}=l | ||
const{XMLHttpRequest:Ha,Blob:Ya,TextDecoder:Ga}=ft.c | ||
const Wa=/[\r\n]+/ | ||
const Ja=(t,{method:e="GET",headers:n,body:r,timeout:o=0,credentials:s,onUploadProgress:a,onDownloadProgress:c}={})=>new Promise((i,d)=>{const u=(n,r)=>Object.assign(new Error(n),{status:r,url:t,method:e}) | ||
const l=new Ha | ||
l.onerror=()=>d(u("NETWORK_ERROR",-1)) | ||
l.ontimeout=()=>d(u("NETWORK_TIMEOUT",-1)) | ||
l.onreadystatechange=()=>{const{readyState:t,status:e}=l | ||
if(2!==t)return | ||
if(0===e){l.abort() | ||
return d(u("HEADER_STATUS_ERROR",-1))}const n=l.getAllResponseHeaders().split(Ya).reduce((t,e)=>{const[n,...r]=e.split(":") | ||
return d(u("HEADER_STATUS_ERROR",-1))}const n=l.getAllResponseHeaders().split(Wa).reduce((t,e)=>{const[n,...r]=e.split(":") | ||
r.length&&(t[n.trim().toLowerCase()]=r.join(":").trim()) | ||
return t},{}) | ||
i(Object.assign({status:e,ok:e>=200&&e<300,headers:n},Ja(l,u)))}) | ||
i(Object.assign({status:e,ok:e>=200&&e<300,headers:n},Xa(l,u)))} | ||
a&&l.upload&&(l.upload.onprogress=a) | ||
@@ -1765,3 +1768,3 @@ c&&(l.onprogress=c) | ||
l.send(r||null)}) | ||
const Ja=(t,e)=>{let n | ||
const Xa=(t,e)=>{let n | ||
let r | ||
@@ -1773,35 +1776,35 @@ setTimeout(()=>{if(!n){r=!0 | ||
n=!0 | ||
return new Promise((n,r)=>{t.onerror=(()=>r(e("PAYLOAD_ERROR",-1))) | ||
t.ontimeout=(()=>r(e("PAYLOAD_TIMEOUT",-1))) | ||
t.onreadystatechange=(()=>{if(4===t.readyState){if(0===t.status)return r(e("PAYLOAD_STATUS_ERROR",-1)) | ||
n(t.response)}})})} | ||
const s=()=>o().then(Za) | ||
return{arrayBuffer:o,blob:()=>o().then(Xa),text:s,json:()=>s().then(tc)}} | ||
const Xa=t=>new Ha([t]) | ||
const Za=t=>(new Ga).decode(t) | ||
const tc=t=>JSON.parse(t) | ||
const{fetch:ec,navigator:nc,caches:rc,URL:oc,Blob:sc,Request:ac,Response:cc}=window | ||
const ic=(t,e={})=>Object.assign(document.createElement(t),e) | ||
const dc=async t=>(await ec(t)).text() | ||
const uc=t=>new Promise((e,n)=>ic("img",{src:t,onerror:n,onload:t=>e(t.currentTarget)})) | ||
const lc=t=>new Promise((e,n)=>document.body.appendChild(ic("script",{src:t,async:!1,type:As.js,onerror:n,onload:t=>e(t.currentTarget)}))) | ||
const hc=(t,e)=>{const n=ic("a",{download:t,href:e}) | ||
return new Promise((n,r)=>{t.onerror=()=>r(e("PAYLOAD_ERROR",-1)) | ||
t.ontimeout=()=>r(e("PAYLOAD_TIMEOUT",-1)) | ||
t.onreadystatechange=()=>{if(4===t.readyState){if(0===t.status)return r(e("PAYLOAD_STATUS_ERROR",-1)) | ||
n(t.response)}}})} | ||
const s=()=>o().then(tc) | ||
return{arrayBuffer:o,blob:()=>o().then(Za),text:s,json:()=>s().then(ec)}} | ||
const Za=t=>new Ya([t]) | ||
const tc=t=>(new Ga).decode(t) | ||
const ec=t=>JSON.parse(t) | ||
const{fetch:nc,navigator:rc,caches:oc,URL:sc,Blob:ac,Request:cc,Response:ic}=window | ||
const dc=(t,e={})=>Object.assign(document.createElement(t),e) | ||
const uc=async t=>(await nc(t)).text() | ||
const lc=t=>new Promise((e,n)=>dc("img",{src:t,onerror:n,onload:t=>e(t.currentTarget)})) | ||
const hc=t=>new Promise((e,n)=>document.body.appendChild(dc("script",{src:t,async:!1,type:Ms.js,onerror:n,onload:t=>e(t.currentTarget)}))) | ||
const pc=(t,e)=>{const n=dc("a",{download:t,href:e}) | ||
document.body.appendChild(n) | ||
n.click() | ||
document.body.removeChild(n)} | ||
const pc=(t,e)=>{if(nc.msSaveOrOpenBlob)return nc.msSaveOrOpenBlob(e,t) | ||
const n=oc.createObjectURL(e) | ||
hc(t,n) | ||
setTimeout(()=>oc.revokeObjectURL(n),5e3)} | ||
const fc=(t,e,n=As.txt)=>pc(t,new sc([e],{type:n})) | ||
const yc=(t,e,n=As.json)=>fc(t,JSON.stringify(e),n) | ||
const gc=async(t,e,n)=>{const r=await rc.open(t) | ||
await r.put(new ac(e),new cc(n)) | ||
const fc=(t,e)=>{if(rc.msSaveOrOpenBlob)return rc.msSaveOrOpenBlob(e,t) | ||
const n=sc.createObjectURL(e) | ||
pc(t,n) | ||
setTimeout(()=>sc.revokeObjectURL(n),5e3)} | ||
const yc=(t,e,n=Ms.txt)=>fc(t,new ac([e],{type:n})) | ||
const gc=(t,e,n=Ms.json)=>yc(t,JSON.stringify(e),n) | ||
const mc=async(t,e,n)=>{const r=await oc.open(t) | ||
await r.put(new cc(e),new ic(n)) | ||
return{bucketName:t,key:e}} | ||
const mc=async(t,e)=>{const n=await rc.open(t) | ||
const r=await n.match(new ac(e)) | ||
const vc=async(t,e)=>{const n=await oc.open(t) | ||
const r=await n.match(new cc(e)) | ||
return r&&r.arrayBuffer()} | ||
const vc=async(t,e)=>{if(!e)return rc.delete(t) | ||
const n=await rc.open(t) | ||
return n&&n.delete(new ac(e))} | ||
const wc=async(t,e)=>{if(!e)return oc.delete(t) | ||
const n=await oc.open(t) | ||
return n&&n.delete(new cc(e))} | ||
n.d(e,"Env",()=>r) | ||
@@ -1808,0 +1811,0 @@ n.d(e,"Common",()=>X) |
@@ -1,2 +0,2 @@ | ||
exports.getEndianness=(()=>{try{const r=new Uint8Array(new ArrayBuffer(2)) | ||
exports.getEndianness=()=>{try{const r=new Uint8Array(new ArrayBuffer(2)) | ||
const n=new Uint16Array(r.buffer) | ||
@@ -6,4 +6,4 @@ r[0]=161 | ||
if(45729===n[0])return"little" | ||
if(41394===n[0])return"big"}catch(r){console.error("[getEndianness]",r)}return"unknown"}) | ||
exports.assert=((r,...n)=>{if(!r){console.error("[ASSERT]",...n) | ||
throw new Error(`[ASSERT] ${n.join(", ")}`)}}) | ||
if(41394===n[0])return"big"}catch(r){console.error("[getEndianness]",r)}return"unknown"} | ||
exports.assert=(r,...n)=>{if(!r){console.error("[ASSERT]",...n) | ||
throw new Error(`[ASSERT] ${n.join(", ")}`)}} |
const o=()=>"undefined"!=typeof window?window:"undefined"!=typeof global?global:void 0 | ||
exports.getGlobal=o | ||
exports.getEnvironment=(()=>{const{process:n,window:e,document:s}=o() | ||
exports.getEnvironment=()=>{const{process:n,window:e,document:s}=o() | ||
const d=void 0!==n&&void 0!==n.versions&&n.versions.node | ||
const i=void 0!==e&&void 0!==s | ||
return{isNode:d,isBrowser:i,environmentName:d?"node":i?"browser":"unknown"}}) | ||
return{isNode:d,isBrowser:i,environmentName:d?"node":i?"browser":"unknown"}} | ||
const n=o() | ||
exports.global=n |
@@ -1,11 +0,11 @@ | ||
exports.receiveBufferAsync=(e=>new Promise((r,o)=>{const n=[] | ||
exports.receiveBufferAsync=e=>new Promise((r,o)=>{const n=[] | ||
e.on("error",o) | ||
e.on("data",e=>n.push(e)) | ||
e.on("end",()=>{e.off("error",o) | ||
r(Buffer.concat(n))})})) | ||
exports.sendBufferAsync=((e,r)=>new Promise((o,n)=>{if(0===r.length)return o() | ||
r(Buffer.concat(n))})}) | ||
exports.sendBufferAsync=(e,r)=>new Promise((o,n)=>{if(0===r.length)return o() | ||
e.on("error",n) | ||
e.write(r,()=>{e.off("error",n) | ||
o()})})) | ||
exports.toArrayBuffer=(e=>{const{buffer:r,byteOffset:o,byteLength:n}=e | ||
return r.byteLength===n?r:r.slice(o,o+n)}) | ||
o()})}) | ||
exports.toArrayBuffer=e=>{const{buffer:r,byteOffset:o,byteLength:n}=e | ||
return r.byteLength===n?r:r.slice(o,o+n)} |
@@ -5,4 +5,4 @@ var r=require("../../common/data/ArrayBuffer") | ||
const f=Buffer.allocUnsafe(0) | ||
exports.packBufferPacket=((a,E=f)=>Buffer.concat([...(0,e.packArrayBufferHeader)((0,r.fromString)(a)).map(r=>Buffer.from(r)),E])) | ||
exports.parseBufferPacket=(f=>{const E=f.readUIntBE(0,e.HEADER_BYTE_SIZE,!0) | ||
return[(0,r.toString)((0,a.toArrayBuffer)(f.slice(e.HEADER_BYTE_SIZE,e.HEADER_BYTE_SIZE+E))),f.slice(e.HEADER_BYTE_SIZE+E)]}) | ||
exports.packBufferPacket=(a,E=f)=>Buffer.concat([...(0,e.packArrayBufferHeader)((0,r.fromString)(a)).map(r=>Buffer.from(r)),E]) | ||
exports.parseBufferPacket=f=>{const E=f.readUIntBE(0,e.HEADER_BYTE_SIZE,!0) | ||
return[(0,r.toString)((0,a.toArrayBuffer)(f.slice(e.HEADER_BYTE_SIZE,e.HEADER_BYTE_SIZE+E))),f.slice(e.HEADER_BYTE_SIZE+E)]} |
var r=require("crypto") | ||
const e=(0,require("util").promisify)(r.randomFill) | ||
exports.getRandomBufferAsync=(r=>e(Buffer.allocUnsafe(r))) | ||
exports.getRandomBufferAsync=r=>e(Buffer.allocUnsafe(r)) |
@@ -1,2 +0,2 @@ | ||
exports.createLogQueue=(({outputStream:e,queueLengthThreshold:t=1024})=>{const n=[] | ||
exports.createLogQueue=({outputStream:e,queueLengthThreshold:t=1024})=>{const n=[] | ||
const r=()=>{n.push("") | ||
@@ -9,2 +9,2 @@ const e=n.join("\n") | ||
n.length>t&&u()},save:u,end:()=>{0!==n.length&&e.write(r()) | ||
e.end()}}}) | ||
e.end()}}} |
var e=require("stream") | ||
exports.pipeStreamAsync=((e,r)=>new Promise((o,n)=>{r.on("error",n) | ||
exports.pipeStreamAsync=(e,r)=>new Promise((o,n)=>{r.on("error",n) | ||
r.on("end",()=>{r.off("error",n) | ||
o()}) | ||
r.pipe(e)})) | ||
exports.bufferToStream=(r=>{const o=new e.Duplex | ||
r.pipe(e)}) | ||
exports.bufferToStream=r=>{const o=new e.Duplex | ||
o.push(r) | ||
o.push(null) | ||
return o}) | ||
return o} |
@@ -13,6 +13,6 @@ var e=require("zlib") | ||
exports.compressFile=s | ||
exports.compressFileList=(async({fileList:a,fileSuffix:i=".gz",createCompressStream:o=e.createGzip,deleteBloat:n=!1,bloatRatio:c=1})=>{for(const e of a){if(e.endsWith(i))continue | ||
exports.compressFileList=async({fileList:a,fileSuffix:i=".gz",createCompressStream:o=e.createGzip,deleteBloat:n=!1,bloatRatio:c=1})=>{for(const e of a){if(e.endsWith(i))continue | ||
const a=`${e}${i}` | ||
await(0,t.readableAsync)(a)||await s(e,a,o()) | ||
n&&await r(e,a,c)&&await(0,t.unlinkAsync)(a)}}) | ||
n&&await r(e,a,c)&&await(0,t.unlinkAsync)(a)}} | ||
const r=async(e,s,r)=>{const{size:a}=await(0,t.statAsync)(e) | ||
@@ -19,0 +19,0 @@ const{size:i}=await(0,t.statAsync)(s) |
@@ -33,3 +33,3 @@ var t=require("path") | ||
exports.walkDirectoryInfoTreeBottomUp=n | ||
exports.copyDirectoryInfoTree=(async(o,a)=>{await(0,e.createDirectory)(a) | ||
exports.copyDirectoryInfoTree=async(o,a)=>{await(0,e.createDirectory)(a) | ||
const r={[o.root]:a} | ||
@@ -39,8 +39,8 @@ return s(o,({path:o,name:a,stat:s})=>{const n=(0,t.dirname)(o) | ||
r[o]=c | ||
return(0,e.copyPath)(o,c,s)})}) | ||
exports.moveDirectoryInfoTree=(async({root:o,subInfoListMap:a},r)=>{await(0,e.createDirectory)(r) | ||
return(0,e.copyPath)(o,c,s)})} | ||
exports.moveDirectoryInfoTree=async({root:o,subInfoListMap:a},r)=>{await(0,e.createDirectory)(r) | ||
for(const s of a[o]){const{path:o,name:a,stat:n}=s | ||
await(0,e.movePath)(o,(0,t.join)(r,a),n)}}) | ||
exports.deleteDirectoryInfoTree=(async t=>n(t,({path:t,stat:o})=>(0,e.deletePath)(t,o))) | ||
exports.getFileList=(async(o,a=c)=>{const n=[] | ||
await(0,e.movePath)(o,(0,t.join)(r,a),n)}} | ||
exports.deleteDirectoryInfoTree=async t=>n(t,({path:t,stat:o})=>(0,e.deletePath)(t,o)) | ||
exports.getFileList=async(o,a=c)=>{const n=[] | ||
const i=await(0,e.getPathStat)(o) | ||
@@ -52,3 +52,3 @@ const p=(0,e.getPathTypeFromStat)(i) | ||
break | ||
default:throw new Error(`invalid pathType: ${p} for ${o}`)}return n}) | ||
default:throw new Error(`invalid pathType: ${p} for ${o}`)}return n} | ||
const c=(t,{path:o})=>t.push(o) |
@@ -14,3 +14,3 @@ var r=require("fs") | ||
exports.getPathStat=s | ||
exports.getPathTypeFromStat=(r=>r.isDirectory()?o.Directory:r.isFile()?o.File:r!==e?o.Other:o.Error) | ||
exports.getPathTypeFromStat=r=>r.isDirectory()?o.Directory:r.isFile()?o.File:r!==e?o.Other:o.Error | ||
const y=async(r,o)=>{void 0===o&&(o=await s(r)) | ||
@@ -25,8 +25,8 @@ if(!o.isDirectory()){if(o!==e)throw new Error(`path already taken by non-directory: ${r}`) | ||
exports.trimDirectory=h | ||
exports.movePath=(async(r,t,o)=>{void 0===o&&(o=await s(r)) | ||
exports.movePath=async(r,t,o)=>{void 0===o&&(o=await s(r)) | ||
if(o===e)throw new Error(`missing path from ${r}`) | ||
return(0,i.renameAsync)(r,t)}) | ||
exports.copyPath=(async(r,t,e)=>{void 0===e&&(e=await s(r)) | ||
return(!e.isDirectory()||!(await s(t)).isDirectory())&&(e.isDirectory()?(0,i.mkdirAsync)(t):(0,i.copyFileAsync)(r,t))}) | ||
exports.deletePath=(async(r,t)=>{void 0===t&&(t=await s(r)) | ||
return t.isDirectory()?(0,i.rmdirAsync)(r):(0,i.unlinkAsync)(r)}) | ||
return(0,i.renameAsync)(r,t)} | ||
exports.copyPath=async(r,t,e)=>{void 0===e&&(e=await s(r)) | ||
return(!e.isDirectory()||!(await s(t)).isDirectory())&&(e.isDirectory()?(0,i.mkdirAsync)(t):(0,i.copyFileAsync)(r,t))} | ||
exports.deletePath=async(r,t)=>{void 0===t&&(t=await s(r)) | ||
return t.isDirectory()?(0,i.rmdirAsync)(r):(0,i.unlinkAsync)(r)} |
@@ -25,8 +25,8 @@ Object.defineProperty(exports,"createReadStream",{enumerable:!0,get:function(){return r.createReadStream}}) | ||
exports.visibleAsync=A | ||
exports.nearestExistAsync=(async r=>{for(;r&&!await A(r);)r=(0,e.dirname)(r) | ||
return r}) | ||
exports.createPathPrefixLock=(r=>{r=(0,e.resolve)(r) | ||
exports.nearestExistAsync=async r=>{for(;r&&!await A(r);)r=(0,e.dirname)(r) | ||
return r} | ||
exports.createPathPrefixLock=r=>{r=(0,e.resolve)(r) | ||
return t=>{const s=(0,e.resolve)(r,t) | ||
if(!s.startsWith(r))throw new Error(`invalid relativePath: ${t}`) | ||
return s}}) | ||
return s}} | ||
const h=(e,r)=>new Promise((t,n)=>{const a=(0,s.createInterface)({input:e,historySize:0,crlfDelay:1/0}) | ||
@@ -38,5 +38,5 @@ a.on("error",e=>{a.close() | ||
exports.createReadlineFromStreamAsync=h | ||
exports.createReadlineFromFileAsync=((e,t)=>h((0,r.createReadStream)(e),t)) | ||
exports.trimPathDepth=((r,t)=>(0,e.normalize)(r).split(e.sep).slice(0,t).join(e.sep)) | ||
exports.createReadlineFromFileAsync=(e,t)=>h((0,r.createReadStream)(e),t) | ||
exports.trimPathDepth=(r,t)=>(0,e.normalize)(r).split(e.sep).slice(0,t).join(e.sep) | ||
const v=/\\/g | ||
exports.toPosixPath=(e=>e.replace(v,"/")) | ||
exports.toPosixPath=e=>e.replace(v,"/") |
@@ -23,3 +23,3 @@ var e=require("path") | ||
exports.modify=p | ||
exports.withTempDirectory=(async(o,i)=>{const c=await(0,t.nearestExistAsync)(o) | ||
exports.withTempDirectory=async(o,i)=>{const c=await(0,t.nearestExistAsync)(o) | ||
await(0,a.createDirectory)(o) | ||
@@ -31,2 +31,2 @@ if(c===o)return i() | ||
if(p)throw p | ||
return s}) | ||
return s} |
@@ -7,3 +7,3 @@ var e=require("path") | ||
const s=()=>null | ||
exports.createFileWatcher=(({wait:c=250,persistent:i=!1})=>{const o=(0,n.createHub)() | ||
exports.createFileWatcher=({wait:c=250,persistent:i=!1})=>{const o=(0,n.createHub)() | ||
let l | ||
@@ -48,2 +48,2 @@ let u | ||
await g() | ||
b=l===w?u:null},subscribe:e=>o.subscribe(e),unsubscribe:e=>o.unsubscribe(e)}}) | ||
b=l===w?u:null},subscribe:e=>o.subscribe(e),unsubscribe:e=>o.unsubscribe(e)}} |
var t=require("crypto") | ||
var e=require("../data/Buffer") | ||
exports.getEntityTagByContentHash=(e=>`"${e.length.toString(16)}-${(0,t.createHash)("sha1").update(e).digest("base64")}"`) | ||
exports.getEntityTagByContentHashAsync=(async a=>{const r=a.length.toString(16) | ||
exports.getEntityTagByContentHash=e=>`"${e.length.toString(16)}-${(0,t.createHash)("sha1").update(e).digest("base64")}"` | ||
exports.getEntityTagByContentHashAsync=async a=>{const r=a.length.toString(16) | ||
const n=(0,t.createHash)("sha1") | ||
n.write(a) | ||
n.end() | ||
return`"${r}-${(await(0,e.receiveBufferAsync)(n)).toString("base64")}"`}) | ||
exports.getWeakEntityTagByStat=(t=>`W/"${t.size.toString(16)}-${t.mtimeMs.toString(16)}"`) | ||
return`"${r}-${(await(0,e.receiveBufferAsync)(n)).toString("base64")}"`} | ||
exports.getWeakEntityTagByStat=t=>`W/"${t.size.toString(16)}-${t.mtimeMs.toString(16)}"` |
@@ -14,3 +14,3 @@ var t=require("path") | ||
exports.INITIAL_FACT_INFO=F | ||
exports.createFactDatabase=(async e=>{let{initialFactInfo:c,initialState:n=l,applyFact:u=((t,e)=>Object.assign({},t,e)),encodeFact:h=JSON.stringify,decodeFact:p=JSON.parse,pathFactDirectory:g,nameFactLogFile:y=s,nameFactCacheFile:I=f,onError:m}=e,S=function(t,e){if(null==t)return{} | ||
exports.createFactDatabase=async e=>{let{initialFactInfo:c,initialState:n=l,applyFact:u=((t,e)=>Object.assign({},t,e)),encodeFact:h=JSON.stringify,decodeFact:p=JSON.parse,pathFactDirectory:g,nameFactLogFile:y=s,nameFactCacheFile:I=f,onError:m}=e,S=function(t,e){if(null==t)return{} | ||
var a={} | ||
@@ -40,3 +40,3 @@ var c=Object.keys(t) | ||
D.end() | ||
j()}}}}) | ||
j()}}}} | ||
const d=async(t,{applyFact:a,decodeFact:c,pathFactDirectory:i,nameFactLogFile:r,nameFactCacheFile:o})=>{const s=[] | ||
@@ -64,3 +64,3 @@ const f=[] | ||
o=e}})}return Object.assign({},t,{factId:i,factState:n,factLogFile:o})} | ||
exports.tryDeleteExtraCache=(async({pathFactDirectory:t,nameFactCacheFile:a=f,keepFactId:c=1/0,keepFileCount:i=2})=>{const o=(await(0,n.getDirectorySubInfoList)(t)).map(({path:t,name:e})=>{const c=e.startsWith(a)&&h.test(e)&&parseInt(h.exec(e)[1]) | ||
exports.tryDeleteExtraCache=async({pathFactDirectory:t,nameFactCacheFile:a=f,keepFactId:c=1/0,keepFileCount:i=2})=>{const o=(await(0,n.getDirectorySubInfoList)(t)).map(({path:t,name:e})=>{const c=e.startsWith(a)&&h.test(e)&&parseInt(h.exec(e)[1]) | ||
return Number.isInteger(c)&&{fileId:c,path:t,name:e}}).filter(Boolean) | ||
@@ -73,2 +73,2 @@ if(!o.length)return | ||
if(s<i){s+=1 | ||
continue}const{error:f}=await(0,e.catchAsync)(r.unlinkAsync,n)}}) | ||
continue}const{error:f}=await(0,e.catchAsync)(r.unlinkAsync,n)}} |
@@ -15,3 +15,3 @@ var e=require("path") | ||
const u=864e5 | ||
exports.createLogger=(async t=>{let{pathLogDirectory:a,getLogFileName:i=(()=>`${(new Date).toISOString().replace(/\W/g,"-")}.log`),saveInterval:s=o,splitInterval:c=u}=t,g=l(t,["pathLogDirectory","getLogFileName","saveInterval","splitInterval"]) | ||
exports.createLogger=async t=>{let{pathLogDirectory:a,getLogFileName:i=(()=>`${(new Date).toISOString().replace(/\W/g,"-")}.log`),saveInterval:s=o,splitInterval:c=u}=t,g=l(t,["pathLogDirectory","getLogFileName","saveInterval","splitInterval"]) | ||
let v | ||
@@ -35,2 +35,2 @@ let h | ||
d() | ||
return{add:(...e)=>{v&&v.add(e.join(" "))},save:L,split:f,end:m}}) | ||
return{add:(...e)=>{v&&v.add(e.join(" "))},save:L,split:f,end:m}} |
var t=require("../../../common/string") | ||
const e={name:"",nameENV:"",nameCONFIG:"",shortName:"",aliasNameList:[],optional:!1,argumentCount:"0",argumentLengthMin:0,argumentLengthMax:0,argumentListNormalize:t=>t,argumentListVerify:t=>{},description:"",extendFormatList:[]} | ||
exports.createOptionParser=(({formatList:e,prefixENV:r="",prefixCONFIG:i=""})=>{const u=new Map | ||
exports.createOptionParser=({formatList:e,prefixENV:r="",prefixCONFIG:i=""})=>{const u=new Map | ||
const g=new Map | ||
@@ -26,3 +26,3 @@ const h=new Map | ||
e.extendFormatList.forEach((t,n)=>E(t,n,e))};(e=e.map((t,e)=>o(t,e,null))).forEach((t,e)=>E(t,e,null)) | ||
return{parseCLI:p(c(u,g)),parseENV:l(h),parseCONFIG:$(N),processOptionMap:L(f,C),formatUsage:(t,n=!1)=>V(t&&`Message:\n${b(t.toString())}`,`CLI Usage:\n${b(d(e))}`,!n&&`ENV Usage:\n${b(x(e))}`,!n&&`CONFIG Usage:\n${b(O(e))}`)}}) | ||
return{parseCLI:p(c(u,g)),parseENV:l(h),parseCONFIG:$(N),processOptionMap:L(f,C),formatUsage:(t,n=!1)=>V(t&&`Message:\n${b(t.toString())}`,`CLI Usage:\n${b(d(e))}`,!n&&`ENV Usage:\n${b(x(e))}`,!n&&`CONFIG Usage:\n${b(O(e))}`)}} | ||
const n=/^(\d+)(-)?(\d+)?$/ | ||
@@ -29,0 +29,0 @@ const a=(t,e)=>{"function"!=typeof t&&(t=!!t&&s) |
@@ -25,5 +25,5 @@ var e=require("path") | ||
c[o]=t}) | ||
exports.getOptionalFormatFlag=((...e)=>t=>!e.some(e=>Boolean(t[e]))) | ||
exports.getOptionalFormatValue=((e,...t)=>r=>{const o=r[e] | ||
return o&&!t.includes(o.argumentList[0])}) | ||
exports.getOptionalFormatFlag=(...e)=>t=>!e.some(e=>Boolean(t[e])) | ||
exports.getOptionalFormatValue=(e,...t)=>r=>{const o=r[e] | ||
return o&&!t.includes(o.argumentList[0])} | ||
const m=async({parseCLI:r,parseENV:o,parseCONFIG:n,processOptionMap:a})=>{const s=g(r(process.argv.slice(2)),process.cwd()) | ||
@@ -43,3 +43,3 @@ const p=s.config&&s.config.argumentList[0] | ||
exports.createOptionGetter=u | ||
exports.prepareOption=(e=>{const{parseCLI:t,parseENV:r,parseCONFIG:o,processOptionMap:n,formatUsage:a}=(0,s.createOptionParser)(e) | ||
return{parseOption:async()=>u(await m({parseCLI:t,parseENV:r,parseCONFIG:o,processOptionMap:n})),formatUsage:a}}) | ||
exports.prepareOption=e=>{const{parseCLI:t,parseENV:r,parseCONFIG:o,processOptionMap:n,formatUsage:a}=(0,s.createOptionParser)(e) | ||
return{parseOption:async()=>u(await m({parseCLI:t,parseENV:r,parseCONFIG:o,processOptionMap:n})),formatUsage:a}} |
var e=require("fs") | ||
var r=require("../../common/error") | ||
exports.createSafeWriteStream=(({pathOutputFile:t,flag:n="w",mode:o=438,onError:l=r.rethrowError})=>{let i=(0,e.openSync)(t,n,o) | ||
exports.createSafeWriteStream=({pathOutputFile:t,flag:n="w",mode:o=438,onError:l=r.rethrowError})=>{let i=(0,e.openSync)(t,n,o) | ||
let c=[] | ||
@@ -13,2 +13,2 @@ let s=[] | ||
i=null | ||
s.length=c.length=0}}}) | ||
s.length=c.length=0}}} |
@@ -16,7 +16,7 @@ var e=require("http") | ||
exports.requestAsync=s | ||
exports.ping=(async(e,{method:t="GET",headers:r,body:n,wait:c=5e3,maxRetry:a=0}={})=>(0,o.withRetryAsync)(async()=>{(await s(e,{method:t,headers:r,timeout:c},n)).destroy()},a,c)) | ||
exports.fetchLikeRequest=(async(e,{method:t="GET",headers:r,body:o,timeout:n=1e4}={})=>{const a={method:t,headers:Object.assign({"accept-encoding":"gzip"},r),timeout:n} | ||
exports.ping=async(e,{method:t="GET",headers:r,body:n,wait:c=5e3,maxRetry:a=0}={})=>(0,o.withRetryAsync)(async()=>{(await s(e,{method:t,headers:r,timeout:c},n)).destroy()},a,c) | ||
exports.fetchLikeRequest=async(e,{method:t="GET",headers:r,body:o,timeout:n=1e4}={})=>{const a={method:t,headers:Object.assign({"accept-encoding":"gzip"},r),timeout:n} | ||
const i=await s(e,a,o) | ||
const u=i.statusCode | ||
return Object.assign({status:u,ok:u>=200&&u<300,headers:i.headers},c(i,n))}) | ||
return Object.assign({status:u,ok:u>=200&&u<300,headers:i.headers},c(i,n))} | ||
const c=(e,t)=>{let o | ||
@@ -23,0 +23,0 @@ let s |
@@ -9,4 +9,4 @@ var r=require("fs") | ||
let o | ||
exports.DR_BROWSER_SCRIPT_TAG=(()=>{void 0===o&&(o=`<script>${(0,r.readFileSync)(i())}<\/script>`) | ||
return o}) | ||
exports.DR_BROWSER_SCRIPT_TAG=()=>{void 0===o&&(o=`<script>${(0,r.readFileSync)(i())}<\/script>`) | ||
return o} | ||
const n=async r=>{const s=await(await(0,t.fetchLikeRequest)(r)).text() | ||
@@ -18,3 +18,3 @@ return(0,e.runInThisContext)(s,{filename:r,displayErrors:!0})} | ||
exports.loadLocalScript=c | ||
exports.loadScript=(r=>r.includes("://")?n(r):c(r)) | ||
exports.loadScript=r=>r.includes("://")?n(r):c(r) | ||
const l=async r=>(await(0,t.fetchLikeRequest)(r)).json() | ||
@@ -24,2 +24,2 @@ exports.loadRemoteJSON=l | ||
exports.loadLocalJSON=u | ||
exports.loadJSON=(r=>r.includes("://")?l(r):u(r)) | ||
exports.loadJSON=r=>r.includes("://")?l(r):u(r) |
@@ -1,7 +0,7 @@ | ||
exports.COMMON_LAYOUT=((t=[],e=[])=>["<!DOCTYPE html>","<html>","<head>",'<meta charset="utf-8">','<meta name="viewport" content="minimum-scale=1, width=device-width">',...t,"</head>","<body>",...e,"</body>","</html>"].join("\n")) | ||
exports.COMMON_STYLE=(()=>"<style>\n*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; outline-color: #f00; }\n::-webkit-scrollbar-thumb { background: #0004; }\n::-webkit-scrollbar-thumb:hover { background: #0006; }\nbody { overflow: auto; display: flex; flex-flow: column; height: 100vh; font-family: monospace; font-size: 16px; }\nbutton, .button { text-decoration: none; cursor: pointer; margin: 4px; padding: 4px; min-width: 32px; border: 0; border-radius: 4px; background: hsla(0, 0%, 70%, 0.4); box-shadow: inset 0 0 0 1px #888; }\nbutton:hover, .button:hover { background: hsla(0, 0%, 80%, 0.4); box-shadow: inset 0 0 0 1px #aaa; }\nbutton.select, button:hover.select, .button.select, .button:hover.select { color: #e00; box-shadow: inset 0 0 0 1px #e00; }\nbutton:disabled, button:disabled:hover, .button:disabled, .button:disabled:hover { cursor: default; background: hsla(0, 0%, 100%, 0.4); box-shadow: unset; }\n@media (pointer: fine) {\n ::-webkit-scrollbar { width: 14px; height: 14px; }\n button, .button, .auto-height { min-height: 20px; font-size: 14px; } \n}\n@media (pointer: coarse) {\n ::-webkit-scrollbar { width: 6px; height: 6px; }\n button, .button, .auto-height { min-height: 32px; font-size: 18px; } \n}\n</style>") | ||
exports.COMMON_SCRIPT=(c=>{const d={} | ||
exports.COMMON_LAYOUT=(t=[],e=[])=>["<!DOCTYPE html>","<html>","<head>",'<meta charset="utf-8">','<meta name="viewport" content="minimum-scale=1, width=device-width">',...t,"</head>","<body>",...e,"</body>","</html>"].join("\n") | ||
exports.COMMON_STYLE=()=>"<style>\n*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; outline-color: #f00; }\n::-webkit-scrollbar-thumb { background: #0004; }\n::-webkit-scrollbar-thumb:hover { background: #0006; }\nbody { overflow: auto; display: flex; flex-flow: column; height: 100vh; font-family: monospace; font-size: 16px; }\nbutton, .button { text-decoration: none; cursor: pointer; margin: 4px; padding: 4px; min-width: 32px; border: 0; border-radius: 4px; background: hsla(0, 0%, 70%, 0.4); box-shadow: inset 0 0 0 1px #888; }\nbutton:hover, .button:hover { background: hsla(0, 0%, 80%, 0.4); box-shadow: inset 0 0 0 1px #aaa; }\nbutton.select, button:hover.select, .button.select, .button:hover.select { color: #e00; box-shadow: inset 0 0 0 1px #e00; }\nbutton:disabled, button:disabled:hover, .button:disabled, .button:disabled:hover { cursor: default; background: hsla(0, 0%, 100%, 0.4); box-shadow: unset; }\n@media (pointer: fine) {\n ::-webkit-scrollbar { width: 14px; height: 14px; }\n button, .button, .auto-height { min-height: 20px; font-size: 14px; } \n}\n@media (pointer: coarse) {\n ::-webkit-scrollbar { width: 6px; height: 6px; }\n button, .button, .auto-height { min-height: 32px; font-size: 18px; } \n}\n</style>" | ||
exports.COMMON_SCRIPT=c=>{const d={} | ||
const b=[] | ||
Object.entries(Object.assign({qS:t,qSA:e,cE:n,aCL:o,mECN:i,mEA:r,iDR:s,tDR:a},c)).forEach(([t,e])=>{"function"==typeof e?b.push(`<script>window[${JSON.stringify(t)}] = ${e.toString()}<\/script>`):d[t]=e}) | ||
return[`<script>Object.assign(window, ${JSON.stringify(d)})<\/script>`,...b].join("\n")}) | ||
return[`<script>Object.assign(window, ${JSON.stringify(d)})<\/script>`,...b].join("\n")} | ||
const t=(t,e)=>{const n=document.querySelector(t) | ||
@@ -8,0 +8,0 @@ n&&"string"==typeof e&&(n.innerHTML=e) |
var r=require("../../common/error") | ||
var e=require("net") | ||
exports.parseCookieString=(r=>r.split(";").reduce((r,e)=>{const[t,...o]=e.split("=") | ||
exports.parseCookieString=r=>r.split(";").reduce((r,e)=>{const[t,...o]=e.split("=") | ||
const s=o.join("=").trim() | ||
""!==s&&(r[t.trim()]=s) | ||
return r},{})) | ||
return r},{}) | ||
const t=(r=0,t="0.0.0.0")=>new Promise((o,s)=>{const n=(0,e.createServer)() | ||
@@ -13,3 +13,3 @@ n.on("error",s) | ||
exports.getUnusedPort=t | ||
exports.autoTestServerPort=(async(e,o)=>{for(const s of e){const{result:e,error:n}=await(0,r.catchAsync)(t,s,o) | ||
if(e)return e}return t(0,o)}) | ||
exports.autoTestServerPort=async(e,o)=>{for(const s of e){const{result:e,error:n}=await(0,r.catchAsync)(t,s,o) | ||
if(e)return e}return t(0,o)} |
var e=require("../../../common/time") | ||
var r=require("../../../common/format") | ||
exports.responderEnd=(e=>{if(e.response.finished)return | ||
exports.responderEnd=e=>{if(e.response.finished)return | ||
const{error:r}=e.getState() | ||
!e.response.headersSent&&e.response.writeHead(r?500:400) | ||
e.response.end()}) | ||
exports.responderEndWithStatusCode=((e,{statusCode:r=500,headerMap:s})=>{if(!e.response.finished){!e.response.headersSent&&e.response.writeHead(r,s) | ||
e.response.end()}}) | ||
exports.responderEndWithRedirect=((e,{statusCode:r=302,redirectUrl:s})=>{if(!e.response.finished){!e.response.headersSent&&e.response.writeHead(r,{location:s}) | ||
e.response.end()}}) | ||
exports.responderSetHeaderCacheControlImmutable=(e=>{e.response.setHeader("cache-control","max-age=315360000, public, immutable")}) | ||
e.response.end()} | ||
exports.responderEndWithStatusCode=(e,{statusCode:r=500,headerMap:s})=>{if(!e.response.finished){!e.response.headersSent&&e.response.writeHead(r,s) | ||
e.response.end()}} | ||
exports.responderEndWithRedirect=(e,{statusCode:r=302,redirectUrl:s})=>{if(!e.response.finished){!e.response.headersSent&&e.response.writeHead(r,{location:s}) | ||
e.response.end()}} | ||
exports.responderSetHeaderCacheControlImmutable=e=>{e.response.setHeader("cache-control","max-age=315360000, public, immutable")} | ||
const s=({url:e,method:r,headers:{host:s},socket:{remoteAddress:t,remotePort:o}})=>`[${r}] ${s||""}${e} (${t}:${o})` | ||
exports.createResponderLog=(({log:e,describeRequest:r=s})=>s=>{const t=s.request.headers["user-agent"]||"no-user-agent" | ||
e(r(s.request),"[UA]",t)}) | ||
exports.createResponderLogEnd=(({log:t,describeRequest:o=s})=>s=>{const{statusCode:n}=s.response | ||
exports.createResponderLog=({log:e,describeRequest:r=s})=>s=>{const t=s.request.headers["user-agent"]||"no-user-agent" | ||
e(r(s.request),"[UA]",t)} | ||
exports.createResponderLogEnd=({log:t,describeRequest:o=s})=>s=>{const{statusCode:n}=s.response | ||
const{time:a,error:d}=s.getState() | ||
const p=(0,r.time)((0,e.clock)()-a) | ||
t(o(s.request),d?`[ERROR|${n}|${p}] ${d.stack||d}`:`[END|${n}|${p}]`)}) | ||
exports.createResponderSetHeaderHSTS=(({protocol:e})=>"https:"!==e?()=>{}:e=>{e.response.setHeader("strict-transport-security","max-age=31536000; includeSubDomains; preload")}) | ||
exports.createResponderHostMapper=(({hostResponderMap:e,responderDefault:r})=>s=>{const t=e[(s.request.headers.host||"").toLowerCase()]||r | ||
return t&&t(s)}) | ||
t(o(s.request),d?`[ERROR|${n}|${p}] ${d.stack||d}`:`[END|${n}|${p}]`)} | ||
exports.createResponderSetHeaderHSTS=({protocol:e})=>"https:"!==e?()=>{}:e=>{e.response.setHeader("strict-transport-security","max-age=31536000; includeSubDomains; preload")} | ||
exports.createResponderHostMapper=({hostResponderMap:e,responderDefault:r})=>s=>{const t=e[(s.request.headers.host||"").toLowerCase()]||r | ||
return t&&t(s)} |
@@ -7,3 +7,3 @@ var e=require("../../../common/error") | ||
const a=()=>(0,t.createCacheMap)({valueSizeSumMax:32768,eventHub:null}) | ||
exports.createResponderRateLimit=(({responderNext:e,responderDeny:t=n,getRequestKey:r=o,limitCount:s=32,expireTime:c=6e5,rateCacheMap:i=a()})=>n=>{const o=r(n) | ||
exports.createResponderRateLimit=({responderNext:e,responderDeny:t=n,getRequestKey:r=o,limitCount:s=32,expireTime:c=6e5,rateCacheMap:i=a()})=>n=>{const o=r(n) | ||
let a=i.get(o) | ||
@@ -13,4 +13,4 @@ void 0===a&&(a=s) | ||
i.set(o,a-1,1,Date.now()+c) | ||
return e(n,a)}) | ||
exports.createResponderCheckRateLimit=(({checkFunc:t,responderNext:r,responderDeny:s=n,getRequestKey:c=o,limitCount:i=32,expireTime:u=6e5,rateCacheMap:d=a()})=>async n=>{const o=c(n) | ||
return e(n,a)} | ||
exports.createResponderCheckRateLimit=({checkFunc:t,responderNext:r,responderDeny:s=n,getRequestKey:c=o,limitCount:i=32,expireTime:u=6e5,rateCacheMap:d=a()})=>async n=>{const o=c(n) | ||
let a=d.get(o) | ||
@@ -22,2 +22,2 @@ void 0===a&&(a=i) | ||
d.set(o,a-1,1,Date.now()+u) | ||
return s(n,a,p)}) | ||
return s(n,a,p)} |
@@ -19,4 +19,4 @@ var e=require("../../../common/check") | ||
exports.appendRouteMap=s | ||
exports.createRouteMap=(e=>e.reduce((e,[r,t,o])=>s(e,r,t,o),{})) | ||
exports.createResponderRouter=(({routeMap:e,baseUrl:r="",getMethodUrl:o=c(new URL(r))})=>r=>{const{method:a,url:u}=o(r) | ||
exports.createRouteMap=e=>e.reduce((e,[r,t,o])=>s(e,r,t,o),{}) | ||
exports.createResponderRouter=({routeMap:e,baseUrl:r="",getMethodUrl:o=c(new URL(r))})=>r=>{const{method:a,url:u}=o(r) | ||
const s=n[a] | ||
@@ -31,7 +31,7 @@ if(void 0===s)return | ||
return e},{}) | ||
return T(r,r.setState({method:a,url:u,route:p,paramMap:E}))}) | ||
return T(r,r.setState({method:a,url:u,route:p,paramMap:E}))} | ||
const c=e=>({request:{method:r,url:t}})=>({method:r,url:new URL(t.replace(d,"/"),e)}) | ||
const d=/\/\//g | ||
exports.getRouteParamAny=(e=>(0,t.getRouteParamAny)(e.getState())) | ||
exports.getRouteParam=((e,r)=>(0,t.getRouteParam)(e.getState(),r)) | ||
exports.getRouteParamAny=e=>(0,t.getRouteParamAny)(e.getState()) | ||
exports.getRouteParam=(e,r)=>(0,t.getRouteParam)(e.getState(),r) | ||
const i=e=>{const r=[] | ||
@@ -43,5 +43,5 @@ const t=new Set(Object.values(n)) | ||
const p=(0,r.createTreeDepthFirstSearch)(([r,t])=>(0,e.isBasicObject)(t)&&Object.entries(t)) | ||
exports.createResponderRouteList=(({getRouteMap:e,extraBodyList:r})=>{let t | ||
exports.createResponderRouteList=({getRouteMap:e,extraBodyList:r})=>{let t | ||
return async a=>{void 0===t&&(t=await(0,u.prepareBufferData)(Buffer.from(m(e(),r)),o.BASIC_EXTENSION_MAP.html)) | ||
return(0,u.responderSendBufferCompress)(a,t)}}) | ||
return(0,u.responderSendBufferCompress)(a,t)}} | ||
const m=(e,r=[])=>(0,a.COMMON_LAYOUT)([(0,a.COMMON_STYLE)(),"<style>body { align-items: start; }</style>"],["<h2>Route List</h2>","<table>",...i(e).map(({method:e,route:r})=>`<tr><td><b>${e}</b></td><td>${"/GET"===e?`<a href="${r}">${r}</a>`:r}</td></tr>`),"</table>",...r]) |
@@ -16,4 +16,4 @@ var e=require("zlib") | ||
return!0}} | ||
exports.responderSendBuffer=((e,{buffer:t,entityTag:s,type:a=n.DEFAULT_MIME,length:o=t.length})=>p(e,s,a,o)&&o&&(0,r.sendBufferAsync)(e.response,t)) | ||
exports.responderSendBufferRange=((e,{buffer:t,entityTag:s,type:a=n.DEFAULT_MIME,length:o=t.length},[p,i])=>c(e,s,a,o,p,i)&&o&&(0,r.sendBufferAsync)(e.response,t.slice(p,i+1))) | ||
exports.responderSendBuffer=(e,{buffer:t,entityTag:s,type:a=n.DEFAULT_MIME,length:o=t.length})=>p(e,s,a,o)&&o&&(0,r.sendBufferAsync)(e.response,t) | ||
exports.responderSendBufferRange=(e,{buffer:t,entityTag:s,type:a=n.DEFAULT_MIME,length:o=t.length},[p,i])=>c(e,s,a,o,p,i)&&o&&(0,r.sendBufferAsync)(e.response,t.slice(p,i+1)) | ||
const i=async(e,{buffer:t,bufferGzip:s,entityTag:a,type:p=n.DEFAULT_MIME,length:c=t.length})=>{if(e.request.aborted)return | ||
@@ -27,5 +27,5 @@ a&&e.response.setHeader("etag",a) | ||
exports.responderSendBufferCompress=i | ||
exports.responderSendStream=((e,{stream:t,entityTag:r,type:a=n.DEFAULT_MIME,length:o})=>p(e,r,a,o)&&(0,s.pipeStreamAsync)(e.response,t)) | ||
exports.responderSendStreamRange=((e,{streamRange:t,entityTag:r,type:a=n.DEFAULT_MIME,length:o},[p,i])=>c(e,r,a,o,p,i)&&(0,s.pipeStreamAsync)(e.response,t)) | ||
exports.responderSendStreamCompress=(async(t,{stream:r,streamGzip:a,entityTag:o,type:p=n.DEFAULT_MIME,length:c})=>{if(t.request.aborted)return | ||
exports.responderSendStream=(e,{stream:t,entityTag:r,type:a=n.DEFAULT_MIME,length:o})=>p(e,r,a,o)&&(0,s.pipeStreamAsync)(e.response,t) | ||
exports.responderSendStreamRange=(e,{streamRange:t,entityTag:r,type:a=n.DEFAULT_MIME,length:o},[p,i])=>c(e,r,a,o,p,i)&&(0,s.pipeStreamAsync)(e.response,t) | ||
exports.responderSendStreamCompress=async(t,{stream:r,streamGzip:a,entityTag:o,type:p=n.DEFAULT_MIME,length:c})=>{if(t.request.aborted)return | ||
o&&t.response.setHeader("etag",o) | ||
@@ -35,8 +35,8 @@ const i=!o||!t.request.headers["if-none-match"]||!t.request.headers["if-none-match"].includes(o) | ||
i?t.response.writeHead(200,g?{"content-type":p,"content-encoding":"gzip"}:{"content-type":p,"content-length":c}):t.response.writeHead(304,{"content-type":p}) | ||
return i&&c&&(0,s.pipeStreamAsync)(t.response,g?a||r.pipe((0,e.createGzip)()):r)}) | ||
exports.responderSendJSON=((e,{object:t,entityTag:r})=>i(e,{buffer:Buffer.from(JSON.stringify(t)),type:n.BASIC_EXTENSION_MAP.json,entityTag:r})) | ||
return i&&c&&(0,s.pipeStreamAsync)(t.response,g?a||r.pipe((0,e.createGzip)()):r)} | ||
exports.responderSendJSON=(e,{object:t,entityTag:r})=>i(e,{buffer:Buffer.from(JSON.stringify(t)),type:n.BASIC_EXTENSION_MAP.json,entityTag:r}) | ||
const g=(t,n)=>({type:n,buffer:t,bufferGzip:(0,e.gzipSync)(t),entityTag:(0,a.getEntityTagByContentHash)(t),length:t.length}) | ||
exports.prepareBufferData=g | ||
exports.prepareBufferDataAsync=(async(e,t)=>({type:t,buffer:e,bufferGzip:await o(e),entityTag:await(0,a.getEntityTagByContentHashAsync)(e),length:e.length})) | ||
exports.createResponderFavicon=(()=>{const e=g(Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNMXvf/PwAGnQMR4CJUOAAAAABJRU5ErkJggg==","base64"),n.BASIC_EXTENSION_MAP.png) | ||
return t=>i(t,e)}) | ||
exports.prepareBufferDataAsync=async(e,t)=>({type:t,buffer:e,bufferGzip:await o(e),entityTag:await(0,a.getEntityTagByContentHashAsync)(e),length:e.length}) | ||
exports.createResponderFavicon=()=>{const e=g(Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNMXvf/PwAGnQMR4CJUOAAAAABJRU5ErkJggg==","base64"),n.BASIC_EXTENSION_MAP.png) | ||
return t=>i(t,e)} |
@@ -8,7 +8,7 @@ var e=require("../../../common/data/CacheMap") | ||
exports.createDefaultCacheMap=s | ||
exports.createResponderBufferCache=(({getBufferData:e,sizeSingleMax:t=524288,expireTime:r=6e4,isEnableGzip:a=!1,serveCacheMap:i=s()})=>{const o=a?n.responderSendBufferCompress:n.responderSendBuffer | ||
exports.createResponderBufferCache=({getBufferData:e,sizeSingleMax:t=524288,expireTime:r=6e4,isEnableGzip:a=!1,serveCacheMap:i=s()})=>{const o=a?n.responderSendBufferCompress:n.responderSendBuffer | ||
return async(a,n)=>{let s=i.get(n) | ||
s||(s=await e(a,n)).length<=t&&i.set(n,s,s.length,Date.now()+r) | ||
return o(a,s)}}) | ||
exports.createResponderServeStatic=(({sizeSingleMax:e=524288,expireTime:c=6e4,isEnableGzip:d=!1,isEnableRange:p=!0,serveCacheMap:g=s()})=>{const u=async(e,t,r,a)=>{let s=g.get(t) | ||
return o(a,s)}} | ||
exports.createResponderServeStatic=({sizeSingleMax:e=524288,expireTime:c=6e4,isEnableGzip:d=!1,isEnableRange:p=!0,serveCacheMap:g=s()})=>{const u=async(e,t,r,a)=>{let s=g.get(t) | ||
if(!s)return!1 | ||
@@ -35,3 +35,3 @@ r&&e.response.setHeader("content-encoding",r) | ||
const s=(0,t.getMIMETypeFromFileName)(r) | ||
if(!(a&&await f(e,r+".gz",s,"gzip")||await f(e,r,s,void 0,n)))throw new Error(`miss file: ${r}`)}}) | ||
if(!(a&&await f(e,r+".gz",s,"gzip")||await f(e,r,s,void 0,n)))throw new Error(`miss file: ${r}`)}} | ||
const i=/gzip/i | ||
@@ -38,0 +38,0 @@ const o=e=>{const t=c.exec(e) |
@@ -11,3 +11,3 @@ var e=require("crypto") | ||
const l=new Set([c.protocol,i.protocol]) | ||
exports.createServer=(e=>{let{protocol:o}=e,s=function(e,r){if(null==e)return{} | ||
exports.createServer=e=>{let{protocol:o}=e,s=function(e,r){if(null==e)return{} | ||
var t={} | ||
@@ -26,8 +26,8 @@ var o=Object.keys(e) | ||
a.listen(s.port,s.hostname,()=>{a.off("error",r) | ||
e()})}),stop:async()=>a.listening&&new Promise(e=>a.close(e))}}) | ||
e()})}),stop:async()=>a.listening&&new Promise(e=>a.close(e))}} | ||
const p=(e,r)=>e.setState({error:r}) | ||
const u=a.responderEnd | ||
exports.createRequestListener=(({responderList:e=[],responderError:r=p,responderEnd:t=u})=>async(n,a)=>{const c=(0,s.createStateStoreLite)({time:(0,o.clock)(),error:null}) | ||
exports.createRequestListener=({responderList:e=[],responderError:r=p,responderEnd:t=u})=>async(n,a)=>{const c=(0,s.createStateStoreLite)({time:(0,o.clock)(),error:null}) | ||
c.request=n | ||
c.response=a | ||
try{for(const r of e)await r(c)}catch(e){await r(c,e)}await t(c)}) | ||
try{for(const r of e)await r(c)}catch(e){await r(c,e)}await t(c)} |
var t=require("net") | ||
exports.createTCPProxyServer=(({hostname:o="localhost",port:e,targetHostname:r="localhost",targetPort:n,getTargetOption:s=(t=>({hostname:r,port:n}))})=>{const a=(0,t.createServer)() | ||
exports.createTCPProxyServer=({hostname:o="localhost",port:e,targetHostname:r="localhost",targetPort:n,getTargetOption:s=(t=>({hostname:r,port:n}))})=>{const a=(0,t.createServer)() | ||
const c={hostname:o,port:e,getTargetOption:s} | ||
@@ -27,2 +27,2 @@ const i=new Set | ||
i.clear() | ||
a.close(t)})}}) | ||
a.close(t)})}} |
var e=require("./function") | ||
const r=e=>{} | ||
exports.createFrameReceiverStore=(e=>{let n=Promise.resolve("HEAD") | ||
exports.createFrameReceiverStore=e=>{let n=Promise.resolve("HEAD") | ||
let l=null | ||
@@ -8,4 +8,4 @@ return{dispose:()=>{n.then(r,r) | ||
l&&l() | ||
l=null},queuePromise:(e,r)=>n=n.then(e,r),setClearSocketListener:e=>{l=e},frameDecoder:t(e),frameLengthLimit:e}}) | ||
exports.listenAndReceiveFrame=((e,r,t,n=e.dispose)=>{let l=null | ||
l=null},queuePromise:(e,r)=>n=n.then(e,r),setClearSocketListener:e=>{l=e},frameDecoder:t(e),frameLengthLimit:e}} | ||
exports.listenAndReceiveFrame=(e,r,t,n=e.dispose)=>{let l=null | ||
let o=null | ||
@@ -30,3 +30,3 @@ const f=()=>{o&&r.off("error",o) | ||
e.setClearSocketListener(()=>{r.off("data",u) | ||
f()})}) | ||
f()})} | ||
const t=r=>{const{pushBufferFrag:t,tryShiftMergedBuffer:l}=n() | ||
@@ -33,0 +33,0 @@ let o=null |
@@ -5,5 +5,5 @@ var e=require("crypto") | ||
const t=e=>{} | ||
exports.createFrameSenderStore=(e=>{let r=Promise.resolve("HEAD") | ||
exports.createFrameSenderStore=e=>{let r=Promise.resolve("HEAD") | ||
return{dispose:()=>{r.then(t,t) | ||
r=null},queuePromise:(e,n)=>r=r.then(e,n),encodedFrameHeaderBuffer:null,encodedFrameDataBuffer:null,frameLengthLimit:e}}) | ||
r=null},queuePromise:(e,n)=>r=r.then(e,n),encodedFrameHeaderBuffer:null,encodedFrameDataBuffer:null,frameLengthLimit:e}} | ||
const o=(t,o,a,f,d)=>{const[c,s]=o | ||
@@ -30,10 +30,10 @@ const{length:u}=f | ||
exports.encodeFrame=o | ||
exports.encodeCloseFrame=((e,n=1e3,t="",a)=>{const f=Buffer.byteLength(t) | ||
exports.encodeCloseFrame=(e,n=1e3,t="",a)=>{const f=Buffer.byteLength(t) | ||
const d=Buffer.allocUnsafe(2+f) | ||
d.writeUInt16BE(n,0,!0) | ||
d.write(t,2,f) | ||
o(e,r.FRAME_CONFIG.COMPLETE,r.OPCODE_TYPE.CLOSE,d,a)}) | ||
exports.encodePingFrame=((e,n,t)=>o(e,r.FRAME_CONFIG.COMPLETE,r.OPCODE_TYPE.PING,n,t)) | ||
exports.encodePongFrame=((e,n,t)=>o(e,r.FRAME_CONFIG.COMPLETE,r.OPCODE_TYPE.PONG,n,t)) | ||
exports.sendEncodedFrame=((e,r)=>{const n=e.encodedFrameHeaderBuffer | ||
o(e,r.FRAME_CONFIG.COMPLETE,r.OPCODE_TYPE.CLOSE,d,a)} | ||
exports.encodePingFrame=(e,n,t)=>o(e,r.FRAME_CONFIG.COMPLETE,r.OPCODE_TYPE.PING,n,t) | ||
exports.encodePongFrame=(e,n,t)=>o(e,r.FRAME_CONFIG.COMPLETE,r.OPCODE_TYPE.PONG,n,t) | ||
exports.sendEncodedFrame=(e,r)=>{const n=e.encodedFrameHeaderBuffer | ||
const t=e.encodedFrameDataBuffer | ||
@@ -47,2 +47,2 @@ e.encodedFrameHeaderBuffer=null | ||
else{r.write(n) | ||
r.write(t,a)}}))}) | ||
r.write(t,a)}}))} |
@@ -7,6 +7,6 @@ var e=require("crypto") | ||
exports.WEBSOCKET_EVENT={OPEN:"ws:open",FRAME:"ws:frame",CLOSE:"ws:close"} | ||
exports.getRequestKey=(()=>(0,e.randomBytes)(16).toString("base64")) | ||
exports.getRespondKey=(s=>(0,e.createHash)("sha1").update(`${s}258EAFA5-E914-47DA-95CA-C5AB0DC85B11`).digest("base64")) | ||
exports.getRequestKey=()=>(0,e.randomBytes)(16).toString("base64") | ||
exports.getRespondKey=s=>(0,e.createHash)("sha1").update(`${s}258EAFA5-E914-47DA-95CA-C5AB0DC85B11`).digest("base64") | ||
const t=s.constants.MAX_LENGTH | ||
exports.BUFFER_MAX_LENGTH=t | ||
exports.applyMaskQuadletBufferInPlace=((e,s)=>{for(let t=0,E=e.length;t<E;t++)e[t]^=s[3&t]}) | ||
exports.applyMaskQuadletBufferInPlace=(e,s)=>{for(let t=0,E=e.length;t<E;t++)e[t]^=s[3&t]} |
@@ -7,3 +7,3 @@ var e=require("../../../common/module/Event") | ||
const a=Buffer.from("Dr") | ||
exports.createWebSocket=(({socket:s,frameLengthLimit:c=8388608,isMask:d=!1,shouldPing:i=!1})=>{const u=(0,e.createEventEmitter)() | ||
exports.createWebSocket=({socket:s,frameLengthLimit:c=8388608,isMask:d=!1,shouldPing:i=!1})=>{const u=(0,e.createEventEmitter)() | ||
const f=(0,t.createFrameSenderStore)(c) | ||
@@ -71,2 +71,2 @@ const l=(0,n.createFrameReceiverStore)(c) | ||
return(0,t.sendEncodedFrame)(f,s)},sendBuffer:e=>{if(1!==O)throw new Error(`not open yet: readyState = ${O}`);(0,t.encodeFrame)(f,r.FRAME_CONFIG.COMPLETE,r.OPCODE_TYPE.BINARY,e,d) | ||
return(0,t.sendEncodedFrame)(f,s)},setNextPing:h,setNextPong:N,sendPing:L,sendPong:y})}) | ||
return(0,t.sendEncodedFrame)(f,s)},setNextPing:h,setNextPong:N,sendPing:L,sendPong:y})} |
@@ -8,3 +8,3 @@ var e=require("http") | ||
const n=(e,o,t)=>e.doCloseSocket() | ||
exports.createWebSocketClient=(({urlString:i,option:{key:a,headers:p,origin:w="",requestProtocolString:h=""}={},onError:d,onUpgradeResponse:l=n,frameLengthLimit:g})=>{const u=new URL(i) | ||
exports.createWebSocketClient=({urlString:i,option:{key:a,headers:p,origin:w="",requestProtocolString:h=""}={},onError:d,onUpgradeResponse:l=n,frameLengthLimit:g})=>{const u=new URL(i) | ||
if(!s.has(u.protocol))throw new Error(`invalid url protocol: ${u.protocol}`) | ||
@@ -30,2 +30,2 @@ if(!u.host)throw new Error(`invalid url host: ${u.host}`) | ||
e.protocol=s | ||
e.open()})(s,e,S,h)})}) | ||
e.open()})(s,e,S,h)})} |
var e=require("./function") | ||
var o=require("./WebSocket") | ||
const r=(e,o,r)=>e.doCloseSocket() | ||
exports.enableWebSocketServer=(({server:t,onUpgradeRequest:s=r,frameLengthLimit:c})=>{const n=new Set | ||
exports.enableWebSocketServer=({server:t,onUpgradeRequest:s=r,frameLengthLimit:c})=>{const n=new Set | ||
t.on("upgrade",async(r,t,i)=>{const a=(0,o.createWebSocket)({socket:t,frameLengthLimit:c,isMask:!1,shouldPing:!0}) | ||
@@ -22,2 +22,2 @@ const{responseKey:d}=((o,r)=>{const t=r.headers["sec-websocket-key"] | ||
a.on(e.WEBSOCKET_EVENT.CLOSE,()=>{n.delete(a)})}}}) | ||
return n}) | ||
return n} |
@@ -5,3 +5,3 @@ var e=require("../../../common/time") | ||
e.setState({error:t})} | ||
exports.createUpdateRequestListener=(({responderList:o=[],responderError:a=r})=>async(r,c,s)=>{const n=(0,t.createStateStoreLite)({time:(0,e.clock)(),error:null,protocol:""}) | ||
exports.createUpdateRequestListener=({responderList:o=[],responderError:a=r})=>async(r,c,s)=>{const n=(0,t.createStateStoreLite)({time:(0,e.clock)(),error:null,protocol:""}) | ||
n.request=c | ||
@@ -11,2 +11,2 @@ n.response={finished:!0} | ||
n.bodyHeadBuffer=s | ||
try{for(const e of o)await e(n)}catch(e){await a(n,e)}return n.getState().protocol}) | ||
try{for(const e of o)await e(n)}catch(e){await a(n,e)}return n.getState().protocol} |
const r={linux:"xdg-open",win32:"start",darwin:"open",android:"termux-open"} | ||
exports.getDefaultOpen=(()=>{const o=r[process.platform] | ||
exports.getDefaultOpen=()=>{const o=r[process.platform] | ||
if(!o)throw new Error(`unsupported platform: ${process.platform}`) | ||
return o}) | ||
return o} |
@@ -15,10 +15,10 @@ var e=require("../../common/error") | ||
t.forEach(({event:e,listener:t})=>process.off(e,t))} | ||
exports.clearExitListener=(()=>{n.clear() | ||
exports.clearExitListener=()=>{n.clear() | ||
r.clear() | ||
i()}) | ||
exports.addExitListenerSync=((...e)=>{e.forEach(e=>n.add(e)) | ||
!s&&a()}) | ||
exports.addExitListenerAsync=((...e)=>{e.forEach(e=>r.add(e)) | ||
!s&&a()}) | ||
exports.deleteExitListenerSync=((...e)=>{e.forEach(e=>n.delete(e))}) | ||
exports.deleteExitListenerAsync=((...e)=>{e.forEach(e=>r.delete(e))}) | ||
i()} | ||
exports.addExitListenerSync=(...e)=>{e.forEach(e=>n.add(e)) | ||
!s&&a()} | ||
exports.addExitListenerAsync=(...e)=>{e.forEach(e=>r.add(e)) | ||
!s&&a()} | ||
exports.deleteExitListenerSync=(...e)=>{e.forEach(e=>n.delete(e))} | ||
exports.deleteExitListenerAsync=(...e)=>{e.forEach(e=>r.delete(e))} |
var e=require("os") | ||
exports.getNetworkIPv4AddressList=(()=>Object.entries((0,e.networkInterfaces)()).reduce((e,[r,t])=>{t.forEach(t=>{"IPv4"===t.family&&!1===t.internal&&e.push(Object.assign({},t,{interfaceName:r}))}) | ||
return e},[])) | ||
exports.getNetworkIPv4AddressList=()=>Object.entries((0,e.networkInterfaces)()).reduce((e,[r,t])=>{t.forEach(t=>{"IPv4"===t.family&&!1===t.internal&&e.push(Object.assign({},t,{interfaceName:r}))}) | ||
return e},[]) |
var t=require("../../common/time") | ||
var e=require("../../common/string") | ||
var i=require("../../common/format") | ||
var s=require("../../common/string") | ||
var e=require("../../common/format") | ||
var o=require("../../common/data/Tree") | ||
var r=require("./Run") | ||
const s=(t,e,i,o)=>async()=>{const{promise:s,stdoutBufferPromise:n}=(0,r.runQuiet)({command:t}) | ||
await s | ||
return((t,e,i=[],o=[])=>{const[r,...s]=t.split(e) | ||
const n=(t=>{let e=" "===t.charAt(0) | ||
let i=2 | ||
const i={INIT:!1,linux:null,win32:null,darwin:null,android:null} | ||
const n=()=>{!1===i.INIT&&(()=>{const t=(t,s,e,o)=>async()=>{const{promise:i,stdoutBufferPromise:n}=(0,r.runQuiet)({command:t}) | ||
await i | ||
return((t,s,e=[],o=[])=>{const[r,...i]=t.split(s) | ||
const n=(t=>{let s=" "===t.charAt(0) | ||
let e=2 | ||
const o=[0] | ||
for(let r=0,s=t.length;r<s;r++)if(e!==(" "===t.charAt(r))){e=!e | ||
if(0==--i){o.push(r) | ||
i=2}}return o})(r) | ||
if(n.length!==i.length)throw new Error(`title col mismatch: ${n.length}, expect: ${i.length}`) | ||
return s.map(t=>t&&((t,e,i,o)=>{const r={} | ||
for(let s=0,n=e.length;s<n;s++)r[i[s]]=o[s](t.slice(e[s],e[s+1])) | ||
return r})(t,n,i,o)).filter(Boolean)})((await n).toString(),e,i,o)} | ||
const n=t=>t.trim() | ||
const p=t=>parseInt(t) | ||
const c=["ps ax -ww -o pid,ppid,args","\n",["pid","ppid","command"],[p,p,n]] | ||
const a=["ps ax -o pid,ppid,args",...c.slice(1)] | ||
const d=["WMIC PROCESS get Commandline,ParentProcessId,Processid","\r\r\n",["command","ppid","pid"],[n,p,p]] | ||
const m=s(...c) | ||
const l=s(...a) | ||
const u={linux:m,win32:s(...d),darwin:m,android:l} | ||
const w=()=>{const t=u[process.platform] | ||
for(let r=0,i=t.length;r<i;r++)if(s!==(" "===t.charAt(r))){s=!s | ||
if(0==--e){o.push(r) | ||
e=2}}return o})(r) | ||
if(n.length!==e.length)throw new Error(`title col mismatch: ${n.length}, expect: ${e.length}`) | ||
return i.map(t=>t&&((t,s,e,o)=>{const r={} | ||
for(let i=0,n=s.length;i<n;i++)r[e[i]]=o[i](t.slice(s[i],s[i+1])) | ||
return r})(t,n,e,o)).filter(Boolean)})((await n).toString(),s,e,o)} | ||
const s=t=>String(t).trim() | ||
const e=t=>parseInt(t) | ||
const o=["ps ax -ww -o pid,ppid,args","\n",["pid","ppid","command"],[e,e,s]] | ||
const n=["ps ax -o pid,ppid,args",...o.slice(1)] | ||
const c=["WMIC PROCESS get Commandline,ParentProcessId,Processid","\r\r\n",["command","ppid","pid"],[s,e,e]] | ||
const p=t(...o) | ||
const a=t(...n) | ||
const d=t(...c) | ||
Object.assign(i,{INIT:!0,linux:p,win32:d,darwin:p,android:a})})() | ||
const t=i[process.platform] | ||
if(!t)throw new Error(`unsupported platform: ${process.platform}`) | ||
return t()} | ||
exports.getProcessList=w | ||
const f={"pid++":(t,e)=>t.pid-e.pid,"pid--":(t,e)=>e.pid-t.pid,"ppid++":(t,e)=>t.ppid-e.ppid||t.pid-e.pid,"ppid--":(t,e)=>e.ppid-t.ppid||t.pid-e.pid} | ||
const h=(t,e="pid--")=>t.sort(f[e]) | ||
exports.sortProcessList=h | ||
const T=async t=>{void 0===t&&(t=await w()) | ||
return t.reduce((t,e)=>{t[e.pid]=e | ||
return t},{})} | ||
exports.getProcessPidMap=T | ||
const g=async t=>{void 0===t&&(t=await w()) | ||
const e={pid:0,ppid:-1,command:"ROOT"} | ||
const i={0:e} | ||
exports.getProcessList=exports.getProcessListAsync=n | ||
const c={"pid++":(t,s)=>t.pid-s.pid,"pid--":(t,s)=>s.pid-t.pid,"ppid++":(t,s)=>t.ppid-s.ppid||t.pid-s.pid,"ppid--":(t,s)=>s.ppid-t.ppid||t.pid-s.pid} | ||
const p=(t,s="pid--")=>t.sort(c[s]) | ||
exports.sortProcessList=p | ||
const a=t=>t.reduce((t,s)=>{t[s.pid]=s | ||
return t},{}) | ||
exports.toProcessPidMap=a | ||
const d=t=>{const s={pid:0,ppid:-1,command:"ROOT"} | ||
const e={0:s} | ||
const o={0:{}} | ||
for(const e of t){const{pid:t,ppid:r}=e | ||
if(0!==t){i[t]=e | ||
for(const s of t){const{pid:t,ppid:r}=s | ||
if(0!==t){e[t]=s | ||
void 0===o[r]&&(o[r]={}) | ||
o[r][t]=e}}i[e.pid]=e | ||
Object.entries(o).forEach(([t,r])=>{let s=i[t] | ||
s||(o[(s={pid:t,ppid:e.pid,command:""}).ppid][s.pid]=s) | ||
s.subTree=r}) | ||
return e} | ||
exports.getProcessTree=g | ||
exports.findProcessTreeNode=(async(t,e)=>{void 0===e&&(e=await g()) | ||
return b(e,e=>P(t,e))}) | ||
const y=async(t,e)=>{void 0===e&&(e=await T()) | ||
return P(t,e[t.pid])} | ||
exports.checkProcessExist=y | ||
const P=({pid:t,ppid:e,command:i},o)=>o&&o.pid===t&&(void 0===e||o.ppid===e)&&(void 0===i||o.command===i) | ||
const v=async e=>{if(await y(e)){process.kill(e.pid) | ||
o[r][t]=s}}e[s.pid]=s | ||
Object.entries(o).forEach(([t,r])=>{let i=e[t] | ||
i||(o[(i={pid:t,ppid:s.pid,command:""}).ppid][i.pid]=i) | ||
i.subTree=r}) | ||
return s} | ||
exports.toProcessTree=d | ||
const l=({pid:t,ppid:s,command:e},o)=>o&&o.pid===t&&(void 0===s||o.ppid===s)&&(void 0===e||o.command===e) | ||
const m=(t,s)=>l(t,s[t.pid])?s[t.pid]:void 0 | ||
exports.findProcessPidMapInfo=m | ||
const u=(t,s)=>P(s,s=>l(t,s)) | ||
exports.findProcessTreeInfo=u | ||
const w=async s=>{const e=async()=>g(s.pid)&&m(s,a(await n())) | ||
if(await e()){process.kill(s.pid) | ||
await(0,t.setTimeoutAsync)(500) | ||
if(await y(e)){process.kill(e.pid) | ||
if(await e()){process.kill(s.pid) | ||
await(0,t.setTimeoutAsync)(2e3) | ||
if(await y(e)){process.kill(e.pid,"SIGKILL") | ||
if(await e()){process.kill(s.pid,"SIGKILL") | ||
await(0,t.setTimeoutAsync)(4e3) | ||
if(await y(e))throw new Error(`failed to stop process, pid: ${e.pid}, ppid: ${e.ppid}, command: ${e.command}`)}}}} | ||
exports.tryKillProcess=v | ||
exports.tryKillProcessTreeNode=(async(t,e=!1)=>{const i=e?v:({pid:t,command:e})=>v({pid:t,command:e}) | ||
t&&await $(t,i) | ||
t&&await i(t)}) | ||
const x=t=>t.subTree&&Object.values(t.subTree) | ||
const b=(0,o.createTreeDepthFirstSearch)(x) | ||
const $=(0,o.createTreeBottomUpSearchAsync)(x) | ||
exports.collectAllProcessStatus=(async(t,o)=>{if(t.startsWith("t")){const i=await g() | ||
if(o)return i | ||
const r=S(i) | ||
return"tree-wide"!==t&&"tw"!==t?r.split("\n").map(t=>(0,e.autoEllipsis)(t,128,96,16)).join("\n"):r}const r=h(await w(),t) | ||
return o?r:(0,i.padTable)({table:[["pid","ppid","command"],...r.map(({pid:t,ppid:e,command:i})=>[t,e,i])]})}) | ||
const S=t=>{const e=[] | ||
const i=(t,{pid:i,command:o})=>e.push(`${`${i}`.padStart(8," ")} | ${t}${o||"..."}`) | ||
i("",{pid:"pid",command:"command"});(0,o.prettyStringifyTree)([t,-1,!1],([t,e,i])=>t.subTree&&Object.values(t.subTree).map((t,i,{length:o})=>[t,e+1,i!==o-1]),i) | ||
return e.join("\n")} | ||
if(await e())throw new Error(`failed to stop process, pid: ${s.pid}, ppid: ${s.ppid}, command: ${s.command}`)}}}} | ||
exports.tryKillProcess=exports.killProcessInfoAsync=w | ||
exports.tryKillProcessTreeNode=exports.killProcessTreeInfoAsync=async(t,s=!1)=>{const e=s?w:({pid:t,command:s})=>w({pid:t,command:s}) | ||
await x(t,e) | ||
await e(t)} | ||
const f=t=>t.subTree&&Object.values(t.subTree) | ||
const P=(0,o.createTreeDepthFirstSearch)(f) | ||
const x=(0,o.createTreeBottomUpSearchAsync)(f) | ||
const y=async t=>{const s=await n() | ||
return t.startsWith("t")?d(s):p(s,t)} | ||
exports.getAllProcessStatusAsync=y | ||
const h=async t=>{const o=await y(t) | ||
if(t.startsWith("t")){const e=T(o) | ||
return"tree-wide"!==t&&"tw"!==t?e.split("\n").map(t=>(0,s.autoEllipsis)(t,128,96,16)).join("\n"):e}return(0,e.padTable)({table:[["pid","ppid","command"],...o.map(({pid:t,ppid:s,command:e})=>[t,s,e])]})} | ||
exports.describeAllProcessStatusAsync=h | ||
const T=t=>{const s=[] | ||
const e=(t,{pid:e,command:o})=>s.push(`${`${e}`.padStart(8," ")} | ${t}${o||"..."}`) | ||
e("",{pid:"pid",command:"command"});(0,o.prettyStringifyTree)([t,-1,!1],([t,s,e])=>t.subTree&&Object.values(t.subTree).map((t,e,{length:o})=>[t,s+1,e!==o-1]),e) | ||
return s.join("\n")} | ||
const g=t=>{try{process.kill(t,0) | ||
return!0}catch(t){return!1}} | ||
exports.isPidExist=g | ||
const I=async t=>a(t||await n()) | ||
exports.getProcessPidMap=I | ||
const A=async t=>d(t||await n()) | ||
exports.getProcessTree=A | ||
exports.findProcessTreeNode=async(t,s)=>u(t,s||await A()) | ||
exports.checkProcessExist=async(t,s)=>Boolean(m(t,s||await I())) | ||
exports.collectAllProcessStatus=async(t,s)=>s?y(t):h(t) |
@@ -10,8 +10,8 @@ var r=require("child_process") | ||
exports.run=n | ||
exports.runSync=(({command:s,argList:e=[],option:n})=>{const{status:i,signal:t,error:c}=(0,r.spawnSync)(s,e,Object.assign({stdio:"inherit",shell:!0},n)) | ||
exports.runSync=({command:s,argList:e=[],option:n})=>{const{status:i,signal:t,error:c}=(0,r.spawnSync)(s,e,Object.assign({stdio:"inherit",shell:!0},n)) | ||
if(c||i)throw o(c,{command:s,argList:e,code:i,signal:t}) | ||
return{command:s,argList:e,code:i,signal:t}}) | ||
exports.runQuiet=(({command:r,argList:s,option:o})=>{const{subProcess:i,promise:t}=n({command:r,argList:s,option:Object.assign({stdio:["ignore","pipe","pipe"]},o)}) | ||
return{subProcess:i,promise:t,stdoutBufferPromise:(0,e.receiveBufferAsync)(i.stdout),stderrBufferPromise:(0,e.receiveBufferAsync)(i.stderr)}}) | ||
exports.withCwd=((r,e)=>async(...o)=>{const n=process.cwd() | ||
return{command:s,argList:e,code:i,signal:t}} | ||
exports.runQuiet=({command:r,argList:s,option:o})=>{const{subProcess:i,promise:t}=n({command:r,argList:s,option:Object.assign({stdio:["ignore","pipe","pipe"]},o)}) | ||
return{subProcess:i,promise:t,stdoutBufferPromise:(0,e.receiveBufferAsync)(i.stdout),stderrBufferPromise:(0,e.receiveBufferAsync)(i.stderr)}} | ||
exports.withCwd=(r,e)=>async(...o)=>{const n=process.cwd() | ||
process.chdir(r) | ||
@@ -21,2 +21,2 @@ const{result:i,error:t}=await(0,s.catchAsync)(e,...o) | ||
if(t)throw t | ||
return i}) | ||
return i} |
@@ -13,6 +13,6 @@ var e=require("os") | ||
exports.describeSystemProcessor=c | ||
const m=()=>({total:(0,e.totalmem)(),free:(0,e.freemem)()}) | ||
exports.getSystemMemory=m | ||
const n=({total:e,free:s}=m())=>[`Used: ${(0,t.percent)((e-s)/e)}`,`Total: ${(0,t.binary)(e)}B`,`Free: ${(0,t.binary)(s)}B`].join("\n") | ||
exports.describeSystemMemory=n | ||
const n=()=>({total:(0,e.totalmem)(),free:(0,e.freemem)()}) | ||
exports.getSystemMemory=n | ||
const m=({total:e,free:s}=n())=>[`Used: ${(0,t.percent)((e-s)/e)}`,`Total: ${(0,t.binary)(e)}B`,`Free: ${(0,t.binary)(s)}B`].join("\n") | ||
exports.describeSystemMemory=m | ||
const p=()=>({hostname:(0,e.hostname)(),networkInterface:(0,e.networkInterfaces)()}) | ||
@@ -26,6 +26,6 @@ exports.getSystemNetwork=p | ||
exports.describeSystemActivity=y | ||
const g=()=>({platform:o(),processor:a(),memory:m(),network:p(),activity:l()}) | ||
const g=()=>({platform:o(),processor:a(),memory:n(),network:p(),activity:l()}) | ||
exports.getSystemStatus=g | ||
exports.describeSystemStatus=(({platform:e,processor:t,memory:r,network:o,activity:a}=g())=>Object.entries({platform:i(e),processor:c(t),memory:n(r),network:d(o),activity:y(a)}).map(([e,t])=>`[${e}]\n${(0,s.indentLine)(t)}`).join("\n")) | ||
exports.getProcessStatus=(()=>({title:process.title,pid:process.pid,ppid:process.ppid,uid:(0,r.tryCall)(process,"getuid"),gid:(0,r.tryCall)(process,"getgid"),groups:(0,r.tryCall)(process,"getgroups")||[],euid:(0,r.tryCall)(process,"geteuid"),egid:(0,r.tryCall)(process,"getegid"),stdio:{stdin:u("stdin"),stdout:u("stdout"),stderr:u("stderr")},isConnectedIPC:Boolean(process.connected),execPath:process.execPath,execArgv:process.execArgv,argv:process.argv,cwd:process.cwd(),uptime:1e3*process.uptime(),cpuUsage:process.cpuUsage(),memoryUsage:process.memoryUsage()})) | ||
exports.describeSystemStatus=({platform:e,processor:t,memory:r,network:o,activity:a}=g())=>Object.entries({platform:i(e),processor:c(t),memory:m(r),network:d(o),activity:y(a)}).map(([e,t])=>`[${e}]\n${(0,s.indentLine)(t)}`).join("\n") | ||
exports.getProcessStatus=exports.getCurrentProcessStatus=()=>({title:process.title,pid:process.pid,ppid:process.ppid,uid:(0,r.tryCall)(process,"getuid"),gid:(0,r.tryCall)(process,"getgid"),groups:(0,r.tryCall)(process,"getgroups")||[],euid:(0,r.tryCall)(process,"geteuid"),egid:(0,r.tryCall)(process,"getegid"),stdio:{stdin:u("stdin"),stdout:u("stdout"),stderr:u("stderr")},isConnectedIPC:Boolean(process.connected),execPath:process.execPath,execArgv:process.execArgv,argv:process.argv,cwd:process.cwd(),uptime:1e3*process.uptime(),cpuUsage:process.cpuUsage(),memoryUsage:process.memoryUsage()}) | ||
const u=e=>({isTTY:Boolean(process[e].isTTY)}) |
@@ -11,5 +11,5 @@ import { global } from "../env/global"; | ||
const request = new XMLHttpRequest(); | ||
request.onerror = (() => reject(getError("NETWORK_ERROR", -1))); | ||
request.ontimeout = (() => reject(getError("NETWORK_TIMEOUT", -1))); | ||
request.onreadystatechange = (() => { | ||
request.onerror = () => reject(getError("NETWORK_ERROR", -1)); | ||
request.ontimeout = () => reject(getError("NETWORK_TIMEOUT", -1)); | ||
request.onreadystatechange = () => { | ||
const {readyState, status} = request; | ||
@@ -32,3 +32,3 @@ if (2 !== readyState) return; | ||
}); | ||
}); | ||
}; | ||
onUploadProgress && request.upload && (request.upload.onprogress = onUploadProgress); | ||
@@ -57,5 +57,5 @@ onDownloadProgress && (request.onprogress = onDownloadProgress); | ||
return new Promise((resolve, reject) => { | ||
request.onerror = (() => reject(getError("PAYLOAD_ERROR", -1))); | ||
request.ontimeout = (() => reject(getError("PAYLOAD_TIMEOUT", -1))); | ||
request.onreadystatechange = (() => { | ||
request.onerror = () => reject(getError("PAYLOAD_ERROR", -1)); | ||
request.ontimeout = () => reject(getError("PAYLOAD_TIMEOUT", -1)); | ||
request.onreadystatechange = () => { | ||
if (4 === request.readyState) { | ||
@@ -65,3 +65,3 @@ if (0 === request.status) return reject(getError("PAYLOAD_STATUS_ERROR", -1)); | ||
} | ||
}); | ||
}; | ||
}); | ||
@@ -68,0 +68,0 @@ }; |
@@ -8,5 +8,5 @@ const createToggle = () => { | ||
}; | ||
toggle.get = (key => data.get(key)); | ||
toggle.get = key => data.get(key); | ||
return toggle; | ||
}; | ||
export { createToggle }; |
import { compareString } from "../compare"; | ||
import { createTreeDepthFirstSearch } from "../data/Tree"; | ||
const REGEXP_NAME = /[\w-]+/; | ||
@@ -14,3 +15,12 @@ const createKeyTree = ({NAME_KEY = "key", NAME_SUB_LIST = "subList"}) => { | ||
stringify: keyTreeJSON => JSON.stringify(keyTreeJSON).replace(REGEXP_MAX_BRACKET_LEFT, "[").replace(REGEXP_MAX_BRACKET_RIGHT, (match, $1) => "]".repeat($1.length / 2)).replace(REGEXP_MAX_COMMA, ","), | ||
parse: keyTreeString => JSON.parse(keyTreeString.replace(REGEXP_MIN_COMMA, `"},{"${NAME_KEY}":"`).replace(REGEXP_MIN_BRACKET_RIGHT, (match, $1, offset, string) => `"${"}]".repeat($1.length)}${offset + match.length !== string.length ? `},{"${NAME_KEY}":"` : ""}`).replace(REGEXP_MIN_BRACKET_LEFT, (match, offset) => `${0 !== offset ? `","${NAME_SUB_LIST}":` : ""}[{"${NAME_KEY}":"`)), | ||
parse: keyTreeString => JSON.parse(keyTreeString.replace(REGEXP_MIN_COMMA, `"},{"${NAME_KEY}":"`).replace(REGEXP_MIN_BRACKET_RIGHT, (match, $1, offset, string) => `"${"}]".repeat($1.length)}${offset + match.length !== string.length ? `},{"${NAME_KEY}":"` : ""}`).replace(REGEXP_MIN_BRACKET_LEFT, (match, offset) => `${0 !== offset ? `","${NAME_SUB_LIST}":` : ""}[{"${NAME_KEY}":"`)) | ||
}; | ||
}; | ||
const createKeyTreeEnhanced = ({NAME_KEY = "key", NAME_SUB_LIST = "subList"}) => { | ||
const keyTreeJSONDepthFirstSearch = createTreeDepthFirstSearch(([node, index, upperKey]) => node[NAME_SUB_LIST] && node[NAME_SUB_LIST].length && node[NAME_SUB_LIST].map((subNode, index) => [ subNode, index, node[NAME_KEY] ])); | ||
return { | ||
...createKeyTree({ | ||
NAME_KEY, | ||
NAME_SUB_LIST | ||
}), | ||
createBuilder: rootKey => { | ||
@@ -53,5 +63,6 @@ const listMap = new Map(); | ||
}; | ||
} | ||
}, | ||
walkKeyTreeJSON: (keyTreeJSON, func = (([node, index, upperKey]) => {})) => keyTreeJSONDepthFirstSearch([ keyTreeJSON, 0, void 0 ], func) | ||
}; | ||
}; | ||
export { createKeyTree }; | ||
export { createKeyTree, createKeyTreeEnhanced }; |
@@ -6,48 +6,59 @@ import { setTimeoutAsync } from "../../common/time"; | ||
import { runQuiet } from "./Run"; | ||
const createGetProcessList = (command, lineSeparator, keyList, valueProcessList) => async () => { | ||
const {promise, stdoutBufferPromise} = runQuiet({ | ||
command | ||
}); | ||
await promise; | ||
return ((outputString, lineSeparator, keyList = [], valueProcessList = []) => { | ||
const [titleLine, ...rowList] = outputString.split(lineSeparator); | ||
const colStartIndexList = (titleString => { | ||
let flipCharType = " " === titleString.charAt(0); | ||
let flipCount = 2; | ||
const colStartIndexList = [ 0 ]; | ||
for (let index = 0, indexMax = titleString.length; index < indexMax; index++) if (flipCharType !== (" " === titleString.charAt(index))) { | ||
flipCharType = !flipCharType; | ||
if (0 == --flipCount) { | ||
colStartIndexList.push(index); | ||
flipCount = 2; | ||
} | ||
} | ||
return colStartIndexList; | ||
})(titleLine); | ||
if (colStartIndexList.length !== keyList.length) throw new Error(`title col mismatch: ${colStartIndexList.length}, expect: ${keyList.length}`); | ||
return rowList.map(rowString => rowString && ((rowString, colStartIndexList, keyList, valueProcessList) => { | ||
const itemMap = {}; | ||
for (let index = 0, indexMax = colStartIndexList.length; index < indexMax; index++) itemMap[keyList[index]] = valueProcessList[index](rowString.slice(colStartIndexList[index], colStartIndexList[index + 1])); | ||
return itemMap; | ||
})(rowString, colStartIndexList, keyList, valueProcessList)).filter(Boolean); | ||
})((await stdoutBufferPromise).toString(), lineSeparator, keyList, valueProcessList); | ||
const GET_PROCESS_LIST_ASYNC_MAP = { | ||
INIT: !1, | ||
linux: null, | ||
win32: null, | ||
darwin: null, | ||
android: null | ||
}; | ||
const valueProcessString = string => string.trim(); | ||
const valueProcessInteger = string => parseInt(string); | ||
const ProcessListLinux = [ "ps ax -ww -o pid,ppid,args", "\n", [ "pid", "ppid", "command" ], [ valueProcessInteger, valueProcessInteger, valueProcessString ] ]; | ||
const ProcessListAndroid = [ "ps ax -o pid,ppid,args", ...ProcessListLinux.slice(1) ]; | ||
const ProcessListWin32 = [ "WMIC PROCESS get Commandline,ParentProcessId,Processid", "\r\r\n", [ "command", "ppid", "pid" ], [ valueProcessString, valueProcessInteger, valueProcessInteger ] ]; | ||
const getProcessListLinux = createGetProcessList(...ProcessListLinux); | ||
const getProcessListAndroid = createGetProcessList(...ProcessListAndroid); | ||
const GET_PROCESS_LIST_MAP = { | ||
linux: getProcessListLinux, | ||
win32: createGetProcessList(...ProcessListWin32), | ||
darwin: getProcessListLinux, | ||
android: getProcessListAndroid | ||
const getProcessListAsync = () => { | ||
!1 === GET_PROCESS_LIST_ASYNC_MAP.INIT && (() => { | ||
const createGetProcessListAsync = (command, lineSeparator, keyList, valueProcessList) => async () => { | ||
const {promise, stdoutBufferPromise} = runQuiet({ | ||
command | ||
}); | ||
await promise; | ||
return ((outputString, lineSeparator, keyList = [], valueProcessList = []) => { | ||
const [titleLine, ...rowList] = outputString.split(lineSeparator); | ||
const colStartIndexList = (titleString => { | ||
let flipCharType = " " === titleString.charAt(0); | ||
let flipCount = 2; | ||
const colStartIndexList = [ 0 ]; | ||
for (let index = 0, indexMax = titleString.length; index < indexMax; index++) if (flipCharType !== (" " === titleString.charAt(index))) { | ||
flipCharType = !flipCharType; | ||
if (0 == --flipCount) { | ||
colStartIndexList.push(index); | ||
flipCount = 2; | ||
} | ||
} | ||
return colStartIndexList; | ||
})(titleLine); | ||
if (colStartIndexList.length !== keyList.length) throw new Error(`title col mismatch: ${colStartIndexList.length}, expect: ${keyList.length}`); | ||
return rowList.map(rowString => rowString && ((rowString, colStartIndexList, keyList, valueProcessList) => { | ||
const itemMap = {}; | ||
for (let index = 0, indexMax = colStartIndexList.length; index < indexMax; index++) itemMap[keyList[index]] = valueProcessList[index](rowString.slice(colStartIndexList[index], colStartIndexList[index + 1])); | ||
return itemMap; | ||
})(rowString, colStartIndexList, keyList, valueProcessList)).filter(Boolean); | ||
})((await stdoutBufferPromise).toString(), lineSeparator, keyList, valueProcessList); | ||
}; | ||
const valueProcessString = string => String(string).trim(); | ||
const valueProcessInteger = string => parseInt(string); | ||
const ProcessListLinux = [ "ps ax -ww -o pid,ppid,args", "\n", [ "pid", "ppid", "command" ], [ valueProcessInteger, valueProcessInteger, valueProcessString ] ]; | ||
const ProcessListAndroid = [ "ps ax -o pid,ppid,args", ...ProcessListLinux.slice(1) ]; | ||
const ProcessListWin32 = [ "WMIC PROCESS get Commandline,ParentProcessId,Processid", "\r\r\n", [ "command", "ppid", "pid" ], [ valueProcessString, valueProcessInteger, valueProcessInteger ] ]; | ||
const getProcessListAsyncLinux = createGetProcessListAsync(...ProcessListLinux); | ||
const getProcessListAsyncAndroid = createGetProcessListAsync(...ProcessListAndroid); | ||
const getProcessListAsyncWin32 = createGetProcessListAsync(...ProcessListWin32); | ||
Object.assign(GET_PROCESS_LIST_ASYNC_MAP, { | ||
INIT: !0, | ||
linux: getProcessListAsyncLinux, | ||
win32: getProcessListAsyncWin32, | ||
darwin: getProcessListAsyncLinux, | ||
android: getProcessListAsyncAndroid | ||
}); | ||
})(); | ||
const getProcessListAsync = GET_PROCESS_LIST_ASYNC_MAP[process.platform]; | ||
if (!getProcessListAsync) throw new Error(`unsupported platform: ${process.platform}`); | ||
return getProcessListAsync(); | ||
}; | ||
const getProcessList = () => { | ||
const getProcessList = GET_PROCESS_LIST_MAP[process.platform]; | ||
if (!getProcessList) throw new Error(`unsupported platform: ${process.platform}`); | ||
return getProcessList(); | ||
}; | ||
const PROCESS_LIST_SORT_MAP = { | ||
@@ -60,11 +71,7 @@ "pid++": (a, b) => a.pid - b.pid, | ||
const sortProcessList = (processList, sortOrder = "pid--") => processList.sort(PROCESS_LIST_SORT_MAP[sortOrder]); | ||
const getProcessPidMap = async processList => { | ||
void 0 === processList && (processList = await getProcessList()); | ||
return processList.reduce((o, info) => { | ||
o[info.pid] = info; | ||
return o; | ||
}, {}); | ||
}; | ||
const getProcessTree = async processList => { | ||
void 0 === processList && (processList = await getProcessList()); | ||
const toProcessPidMap = processList => processList.reduce((o, info) => { | ||
o[info.pid] = info; | ||
return o; | ||
}, {}); | ||
const toProcessTree = processList => { | ||
const rootInfo = { | ||
@@ -101,22 +108,17 @@ pid: 0, | ||
}; | ||
const findProcessTreeNode = async (info, processTree) => { | ||
void 0 === processTree && (processTree = await getProcessTree()); | ||
return processTreeDepthFirstSearch(processTree, searchInfo => isSameInfo(info, searchInfo)); | ||
}; | ||
const checkProcessExist = async (info, processPidMap) => { | ||
void 0 === processPidMap && (processPidMap = await getProcessPidMap()); | ||
return isSameInfo(info, processPidMap[info.pid]); | ||
}; | ||
const isSameInfo = ({pid, ppid, command}, info) => info && info.pid === pid && (void 0 === ppid || info.ppid === ppid) && (void 0 === command || info.command === command); | ||
const tryKillProcess = async info => { | ||
if (await checkProcessExist(info)) { | ||
const isInfoMatch = ({pid, ppid, command}, info) => info && info.pid === pid && (void 0 === ppid || info.ppid === ppid) && (void 0 === command || info.command === command); | ||
const findProcessPidMapInfo = (info, processPidMap) => isInfoMatch(info, processPidMap[info.pid]) ? processPidMap[info.pid] : void 0; | ||
const findProcessTreeInfo = (info, processTree) => processTreeDepthFirstSearch(processTree, searchInfo => isInfoMatch(info, searchInfo)); | ||
const killProcessInfoAsync = async info => { | ||
const isExistAsync = async () => isPidExist(info.pid) && findProcessPidMapInfo(info, toProcessPidMap(await getProcessListAsync())); | ||
if (await isExistAsync()) { | ||
process.kill(info.pid); | ||
await setTimeoutAsync(500); | ||
if (await checkProcessExist(info)) { | ||
if (await isExistAsync()) { | ||
process.kill(info.pid); | ||
await setTimeoutAsync(2e3); | ||
if (await checkProcessExist(info)) { | ||
if (await isExistAsync()) { | ||
process.kill(info.pid, "SIGKILL"); | ||
await setTimeoutAsync(4e3); | ||
if (await checkProcessExist(info)) throw new Error(`failed to stop process, pid: ${info.pid}, ppid: ${info.ppid}, command: ${info.command}`); | ||
if (await isExistAsync()) throw new Error(`failed to stop process, pid: ${info.pid}, ppid: ${info.ppid}, command: ${info.command}`); | ||
} | ||
@@ -126,9 +128,9 @@ } | ||
}; | ||
const tryKillProcessTreeNode = async (processTreeNode, checkPpid = !1) => { | ||
const tryKillProcessInfo = checkPpid ? tryKillProcess : ({pid, command}) => tryKillProcess({ | ||
const killProcessTreeInfoAsync = async (processTreeInfo, isMatchPpid = !1) => { | ||
const killAsync = isMatchPpid ? killProcessInfoAsync : ({pid, command}) => killProcessInfoAsync({ | ||
pid, | ||
command | ||
}); | ||
processTreeNode && await processTreeBottomUpSearchAsync(processTreeNode, tryKillProcessInfo); | ||
processTreeNode && await tryKillProcessInfo(processTreeNode); | ||
await processTreeBottomUpSearchAsync(processTreeInfo, killAsync); | ||
await killAsync(processTreeInfo); | ||
}; | ||
@@ -138,12 +140,14 @@ const getSubNodeListFunc = info => info.subTree && Object.values(info.subTree); | ||
const processTreeBottomUpSearchAsync = createTreeBottomUpSearchAsync(getSubNodeListFunc); | ||
const collectAllProcessStatus = async (outputMode, isOutputJSON) => { | ||
const getAllProcessStatusAsync = async outputMode => { | ||
const processList = await getProcessListAsync(); | ||
return outputMode.startsWith("t") ? toProcessTree(processList) : sortProcessList(processList, outputMode); | ||
}; | ||
const describeAllProcessStatusAsync = async outputMode => { | ||
const status = await getAllProcessStatusAsync(outputMode); | ||
if (outputMode.startsWith("t")) { | ||
const processRootInfo = await getProcessTree(); | ||
if (isOutputJSON) return processRootInfo; | ||
const text = prettyStringifyProcessTree(processRootInfo); | ||
const text = prettyStringifyProcessTree(status); | ||
return "tree-wide" !== outputMode && "tw" !== outputMode ? text.split("\n").map(line => autoEllipsis(line, 128, 96, 16)).join("\n") : text; | ||
} | ||
const processList = sortProcessList(await getProcessList(), outputMode); | ||
return isOutputJSON ? processList : padTable({ | ||
table: [ [ "pid", "ppid", "command" ], ...processList.map(({pid, ppid, command}) => [ pid, ppid, command ]) ] | ||
return padTable({ | ||
table: [ [ "pid", "ppid", "command" ], ...status.map(({pid, ppid, command}) => [ pid, ppid, command ]) ] | ||
}); | ||
@@ -161,2 +165,15 @@ }; | ||
}; | ||
export { getProcessList, sortProcessList, getProcessPidMap, getProcessTree, findProcessTreeNode, checkProcessExist, tryKillProcess, tryKillProcessTreeNode, collectAllProcessStatus }; | ||
const isPidExist = pid => { | ||
try { | ||
process.kill(pid, 0); | ||
return !0; | ||
} catch (error) { | ||
return !1; | ||
} | ||
}; | ||
const getProcessPidMapAsync = async processList => toProcessPidMap(processList || await getProcessListAsync()); | ||
const getProcessTreeAsync = async processList => toProcessTree(processList || await getProcessListAsync()); | ||
const findProcessTreeNodeAsync = async (info, processTree) => findProcessTreeInfo(info, processTree || await getProcessTreeAsync()); | ||
const checkProcessExistAsync = async (info, processPidMap) => Boolean(findProcessPidMapInfo(info, processPidMap || await getProcessPidMapAsync())); | ||
const collectAllProcessStatusAsync = async (outputMode, isOutputJSON) => isOutputJSON ? getAllProcessStatusAsync(outputMode) : describeAllProcessStatusAsync(outputMode); | ||
export { getProcessListAsync, sortProcessList, toProcessPidMap, findProcessPidMapInfo, toProcessTree, findProcessTreeInfo, killProcessInfoAsync, killProcessTreeInfoAsync, getAllProcessStatusAsync, describeAllProcessStatusAsync, isPidExist, getProcessListAsync as getProcessList, getProcessPidMapAsync as getProcessPidMap, getProcessTreeAsync as getProcessTree, findProcessTreeNodeAsync as findProcessTreeNode, checkProcessExistAsync as checkProcessExist, killProcessInfoAsync as tryKillProcess, killProcessTreeInfoAsync as tryKillProcessTreeNode, collectAllProcessStatusAsync as collectAllProcessStatus }; |
@@ -52,3 +52,3 @@ import { arch, platform, release, hostname, cpus, networkInterfaces, totalmem, freemem, loadavg, uptime } from "os"; | ||
}).map(([k, v]) => `[${k}]\n${indentLine(v)}`).join("\n"); | ||
const getProcessStatus = () => ({ | ||
const getCurrentProcessStatus = () => ({ | ||
title: process.title, | ||
@@ -79,2 +79,2 @@ pid: process.pid, | ||
}); | ||
export { getSystemPlatform, getSystemProcessor, getSystemMemory, getSystemNetwork, getSystemActivity, getSystemStatus, describeSystemPlatform, describeSystemProcessor, describeSystemMemory, describeSystemNetwork, describeSystemActivity, describeSystemStatus, getProcessStatus }; | ||
export { getSystemPlatform, getSystemProcessor, getSystemMemory, getSystemNetwork, getSystemActivity, getSystemStatus, describeSystemPlatform, describeSystemProcessor, describeSystemMemory, describeSystemNetwork, describeSystemActivity, describeSystemStatus, getCurrentProcessStatus, getCurrentProcessStatus as getProcessStatus }; |
@@ -1,1 +0,1 @@ | ||
{"name":"dr-js","version":"0.21.1-dev.1","description":"A collection of strange functions","author":"dr-js","license":"MIT","keywords":["Dr","Dr-js","JavaScript"],"repository":"github:dr-js/dr-js","bin":"bin/index.js","browser":"library/Dr.browser.js","engines":{"node":">=10.15","npm":">=6"},"sideEffects":false} | ||
{"name":"dr-js","version":"0.21.1-dev.2","description":"A collection of strange functions","author":"dr-js","license":"MIT","keywords":["Dr","Dr-js","JavaScript"],"repository":"github:dr-js/dr-js","bin":"bin/index.js","browser":"library/Dr.browser.js","engines":{"node":">=10.15","npm":">=6"},"sideEffects":false} |
@@ -19,2 +19,4 @@ # dr-js | ||
[i:lint]: https://img.shields.io/badge/code_style-standard_ES6+-yellow.svg | ||
[l:lint]: https://standardjs.com | ||
[l:lint]: https://standardjs.com | ||
more in source `README.md` |
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 2 instances in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 2 instances in 1 package
429950
9914
21