Comparing version 0.21.1 to 0.21.2-dev.0
exports.createDoublyLinkedList=()=>{let t,n,r | ||
const p=()=>{t=e(null) | ||
const x=()=>{t=e(null) | ||
n=e(null) | ||
@@ -7,4 +7,4 @@ t.next=n | ||
r=0} | ||
p() | ||
const v=(e,t)=>{const{next:n}=t | ||
x() | ||
const p=(e,t)=>{const{next:n}=t | ||
t.next=n.prev=e | ||
@@ -14,3 +14,3 @@ e.prev=t | ||
r++} | ||
const x=(e,t)=>{const{prev:n}=t | ||
const v=(e,t)=>{const{prev:n}=t | ||
t.prev=n.next=e | ||
@@ -25,18 +25,21 @@ e.prev=n | ||
r--} | ||
return{clear:p,getHead:()=>t,getTail:()=>n,getLength:()=>r,insertAfter:v,insertBefore:x,remove:o,removeBetween:(e,t)=>{const{prev:n}=e | ||
const{next:p}=t | ||
n.next=p | ||
p.prev=n | ||
return{clear:x,getHead:()=>t,getTail:()=>n,getLength:()=>r,getNode:e=>{let n=t.next | ||
e=Math.min(e,r-1) | ||
for(;0!==e;){n=n.next | ||
e--}return n},insertAfter:p,insertBefore:v,remove:o,removeBetween:(e,t)=>{const{prev:n}=e | ||
const{next:x}=t | ||
n.next=x | ||
x.prev=n | ||
e.prev=t.next=null | ||
let v=e | ||
for(;v;){r-- | ||
v=v.next}},forEach:e=>{let r=t.next | ||
let p=0 | ||
for(;r!==n;){e(r,p) | ||
let p=e | ||
for(;p;){r-- | ||
p=p.next}},forEach:e=>{let r=t.next | ||
let x=0 | ||
for(;r!==n;){e(r,x) | ||
r=r.next | ||
p++}},forEachReverse:e=>{let p=n.prev | ||
let v=r-1 | ||
for(;p!==t;){e(p,v) | ||
p=p.prev | ||
v--}},reverse:()=>{let e=t.next | ||
x++}},forEachReverse:e=>{let x=n.prev | ||
let p=r-1 | ||
for(;x!==t;){e(x,p) | ||
x=x.prev | ||
p--}},reverse:()=>{let e=t.next | ||
for(;e!==n;){const{prev:t,next:n}=e | ||
@@ -46,6 +49,6 @@ e.prev=n | ||
e=n}const{next:r}=t | ||
const{prev:p}=n | ||
t.next=p | ||
const{prev:x}=n | ||
t.next=x | ||
n.prev=r | ||
p.prev=t | ||
x.prev=t | ||
r.next=n},setFirst:e=>{if(e===t.next)return | ||
@@ -57,10 +60,10 @@ const{prev:n,next:r}=e | ||
e.next=t.next | ||
t.next=e},setLast:e=>{if(e===n.prev)return | ||
e.next.prev=t.next=e},setLast:e=>{if(e===n.prev)return | ||
const{prev:t,next:r}=e | ||
t.next=r | ||
r.prev=t | ||
e.next=n | ||
e.prev=n.prev | ||
e.next=n | ||
n.prev=e},push:e=>x(e,n),pop:()=>o(n.prev),unshift:e=>v(e,t),shift:()=>o(t.next)}} | ||
e.prev.next=n.prev=e},push:e=>v(e,n),pop:()=>o(n.prev),unshift:e=>p(e,t),shift:()=>o(t.next)}} | ||
const e=(e,t=null,n=null)=>({value:e,prev:t,next:n}) | ||
exports.createNode=e |
@@ -676,3 +676,6 @@ root=window,factory=function(){return function(t){var e={} | ||
n--} | ||
return{clear:r,getHead:()=>t,getTail:()=>e,getLength:()=>n,insertAfter:o,insertBefore:s,remove:a,removeBetween:(t,e)=>{const{prev:r}=t | ||
return{clear:r,getHead:()=>t,getTail:()=>e,getLength:()=>n,getNode:e=>{let r=t.next | ||
e=Math.min(e,n-1) | ||
for(;0!==e;){r=r.next | ||
e--}return r},insertAfter:o,insertBefore:s,remove:a,removeBetween:(t,e)=>{const{prev:r}=t | ||
const{next:o}=e | ||
@@ -707,9 +710,9 @@ r.next=o | ||
e.next=t.next | ||
t.next=e},setLast:t=>{if(t===e.prev)return | ||
e.next.prev=t.next=e},setLast:t=>{if(t===e.prev)return | ||
const{prev:n,next:r}=t | ||
n.next=r | ||
r.prev=n | ||
t.next=e | ||
t.prev=e.prev | ||
t.next=e | ||
e.prev=t},push:t=>s(t,e),pop:()=>a(e.prev),unshift:e=>o(e,t),shift:()=>a(t.next)}} | ||
t.prev.next=e.prev=t},push:t=>s(t,e),pop:()=>a(e.prev),unshift:e=>o(e,t),shift:()=>a(t.next)}} | ||
const Nt=(t,e=null,n=null)=>({value:t,prev:e,next:n}) | ||
@@ -716,0 +719,0 @@ const Ft=(t,e,n,r)=>Object.assign({},Nt(e),{key:t,size:n,expireAt:r}) |
var e=require("../../../common/data/CacheMap") | ||
var t=require("../../../common/module/MIME") | ||
var r=require("../../file/function") | ||
var a=require("../../module/EntityTag") | ||
var n=require("./Send") | ||
const s=()=>(0,e.createCacheMap)({valueSizeSumMax:33554432}) | ||
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 | ||
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) | ||
if(!s)return!1 | ||
var a=require("../../file/File") | ||
var n=require("../../module/EntityTag") | ||
var s=require("./Send") | ||
const i=()=>(0,e.createCacheMap)({valueSizeSumMax:33554432}) | ||
exports.createDefaultCacheMap=i | ||
exports.createResponderBufferCache=({getBufferData:e,sizeSingleMax:t=524288,expireTime:r=6e4,isEnableGzip:a=!1,serveCacheMap:n=i()})=>{const o=a?s.responderSendBufferCompress:s.responderSendBuffer | ||
return async(a,s)=>{let i=n.get(s) | ||
i||(i=await e(a,s)).length<=t&&n.set(s,i,i.length,Date.now()+r) | ||
return o(a,i)}} | ||
exports.createResponderServeStatic=({sizeSingleMax:e=524288,expireTime:d=6e4,isEnableGzip:p=!1,isEnableRange:g=!0,serveCacheMap:u=i()})=>{const f=async(e,t,r,a)=>{let n=u.get(t) | ||
if(!n)return!1 | ||
r&&e.response.setHeader("content-encoding",r) | ||
if(a){a[1]===1/0&&(a[1]=s.length-1) | ||
await(0,n.responderSendBufferRange)(e,s,a)}else await(0,n.responderSendBuffer)(e,s) | ||
if(a){a[1]===1/0&&(a[1]=n.length-1) | ||
await(0,s.responderSendBufferRange)(e,n,a)}else await(0,s.responderSendBuffer)(e,n) | ||
return!0} | ||
const f=async(t,s,i,o,d)=>{const p=await(0,r.statAsync)(s).catch(e=>{}) | ||
if(!p||!p.isFile())return!1 | ||
const u=p.size | ||
const f=(0,a.getWeakEntityTagByStat)(p) | ||
o&&t.response.setHeader("content-encoding",o) | ||
if(d){d[1]===1/0&&(d[1]=u-1) | ||
await(0,n.responderSendStreamRange)(t,{streamRange:(0,r.createReadStream)(s,{start:d[0],end:d[1]}),length:u,type:i,entityTag:f},d)}else if(u>e)await(0,n.responderSendStream)(t,{stream:(0,r.createReadStream)(s),length:u,type:i,entityTag:f}) | ||
else{const e={buffer:await(0,r.readFileAsync)(s),length:u,type:i,entityTag:f} | ||
g.set(s,e,u,Date.now()+c) | ||
await(0,n.responderSendBuffer)(t,e)}return!0} | ||
return async(e,r)=>{const a=d&&i.test(e.request.headers["accept-encoding"]) | ||
const n=p&&o(e.request.headers.range) | ||
p&&!a&&e.response.setHeader("accept-ranges","bytes") | ||
if(a&&await u(e,r+".gz","gzip"))return | ||
if(await u(e,r,void 0,n))return | ||
const l=async(t,i,o,c,p)=>{const g=await(0,a.getPathStat)(i) | ||
if(!g.isFile()||!g.size)return!1 | ||
const f=g.size | ||
const l=(0,n.getWeakEntityTagByStat)(g) | ||
c&&t.response.setHeader("content-encoding",c) | ||
if(p){p[1]===1/0&&(p[1]=f-1) | ||
await(0,s.responderSendStreamRange)(t,{streamRange:(0,r.createReadStream)(i,{start:p[0],end:p[1]}),length:f,type:o,entityTag:l},p)}else if(f>e)await(0,s.responderSendStream)(t,{stream:(0,r.createReadStream)(i),length:f,type:o,entityTag:l}) | ||
else{const e={buffer:await(0,r.readFileAsync)(i),length:f,type:o,entityTag:l} | ||
u.set(i,e,f,Date.now()+d) | ||
await(0,s.responderSendBuffer)(t,e)}return!0} | ||
return async(e,r)=>{const a=p&&o.test(e.request.headers["accept-encoding"]) | ||
const n=g&&c(e.request.headers.range) | ||
g&&!a&&e.response.setHeader("accept-ranges","bytes") | ||
if(a&&await f(e,r+".gz","gzip"))return | ||
if(await f(e,r,void 0,n))return | ||
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}`)}} | ||
const i=/gzip/i | ||
const o=e=>{const t=c.exec(e) | ||
if(!(a&&await l(e,r+".gz",s,"gzip")||await l(e,r,s,void 0,n)))throw new Error(`miss file: ${r}`)}} | ||
const o=/gzip/i | ||
const c=e=>{const t=d.exec(e) | ||
if(!t)return | ||
@@ -42,2 +43,2 @@ const[,r,a]=t | ||
return n<s?[n,s]:void 0} | ||
const c=/bytes=(\d+)-(\d+)?$/i | ||
const d=/bytes=(\d+)-(\d+)?$/i |
@@ -37,2 +37,11 @@ const createDoublyLinkedList = () => { | ||
getLength: () => length, | ||
getNode: index => { | ||
let node = head.next; | ||
index = Math.min(index, length - 1); | ||
for (;0 !== index; ) { | ||
node = node.next; | ||
index--; | ||
} | ||
return node; | ||
}, | ||
insertAfter, | ||
@@ -93,3 +102,3 @@ insertBefore, | ||
node.next = head.next; | ||
head.next = node; | ||
node.next.prev = head.next = node; | ||
}, | ||
@@ -101,5 +110,5 @@ setLast: node => { | ||
next.prev = prev; | ||
node.next = tail; | ||
node.prev = tail.prev; | ||
node.next = tail; | ||
tail.prev = node; | ||
node.prev.next = tail.prev = node; | ||
}, | ||
@@ -106,0 +115,0 @@ push: node => insertBefore(node, tail), |
import { createCacheMap } from "../../../common/data/CacheMap"; | ||
import { getMIMETypeFromFileName } from "../../../common/module/MIME"; | ||
import { statAsync, readFileAsync, createReadStream } from "../../file/function"; | ||
import { readFileAsync, createReadStream } from "../../file/function"; | ||
import { getPathStat } from "../../file/File"; | ||
import { getWeakEntityTagByStat } from "../../module/EntityTag"; | ||
@@ -29,4 +30,4 @@ import { responderSendBuffer, responderSendBufferRange, responderSendBufferCompress, responderSendStream, responderSendStreamRange } from "./Send"; | ||
const serve = async (store, filePath, type, encoding, range) => { | ||
const stat = await statAsync(filePath).catch(error => {}); | ||
if (!stat || !stat.isFile()) return !1; | ||
const stat = await getPathStat(filePath); | ||
if (!stat.isFile() || !stat.size) return !1; | ||
const length = stat.size; | ||
@@ -33,0 +34,0 @@ const entityTag = getWeakEntityTagByStat(stat); |
@@ -1,1 +0,1 @@ | ||
{"name":"dr-js","version":"0.21.1","description":"A collection of strange functions","author":"dr-js","license":"MIT","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.2-dev.0","description":"A collection of strange functions","author":"dr-js","license":"MIT","repository":"github:dr-js/dr-js","bin":"bin/index.js","browser":"library/Dr.browser.js","engines":{"node":">=10.15","npm":">=6"},"sideEffects":false} |
431502
9959