insite-http 2.1.2 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -4,5 +4,5 @@ export type { Request } from "./Request";
4
4
  export type { Response } from "./Response";
5
5
  export * from "./Server";
6
6
  export * from "./StaticServer";
7
- export type { GenericMiddleware, Middleware, Options, RequestParams, RequestQueryParams, TupleMiddleware } from "./types";
7
+ export type { GenericMiddleware, Handler as RequestHandler, Middleware, Options, RequestParams, RequestQueryParams, TupleMiddleware } from "./types";
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,iBAAiB,EAAE,OAAO,IAAI,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- var m=class{listeners};var ye=void 0;import S from"node:fs";import c from"node:path";import u from"node:zlib";var oe={params:{[u.constants.BROTLI_PARAM_MODE]:u.constants.BROTLI_MODE_TEXT,[u.constants.BROTLI_PARAM_QUALITY]:11}},H={params:{[u.constants.BROTLI_PARAM_MODE]:u.constants.BROTLI_MODE_TEXT,[u.constants.BROTLI_PARAM_QUALITY]:4}},ne={level:9},$={level:3};function I(o){return u.brotliCompressSync(o,oe)}function _(o){return u.gzipSync(o,ne)}function C(o){return o==="br"?u.createBrotliCompress(H):u.createGzip($)}function B(o,e,t,r){let n=/\bbr\b/.test(o.headers["accept-encoding"]);t["Content-Encoding"]=n?"br":"gzip",e.writeHead(200,t).end(n?u.brotliCompressSync(r,H):u.gzipSync(r,$))}var k=[["js",{isText:!0,mimeType:"text/javascript"}],["css",{isText:!0,mimeType:"text/css"}],["ico",{mimeType:"image/x-icon"}],process.env.NODE_ENV==="development"?["css.map",{isText:!0,mimeType:"application/json"}]:null,process.env.NODE_ENV==="development"?["js.map",{isText:!0,mimeType:"application/json"}]:null,["jpg",{mimeType:"image/jpeg"}],["jpeg",{mimeType:"image/jpeg"}]].filter(Boolean);var G=[...process.env.NODE_ENV==="production"?["/index.js","/favicon.ico"]:[]];var se={mimeType:"application/octet-stream"},w=class extends m{constructor({src:e="public",urlPrefix:t="",requestRegExp:r,extensions:n=k,resolved:s,restricted:a,preloaded:p="default"}={}){if(super(),!c.isAbsolute(e)){let[,i]=process.argv;e=c.resolve(S.statSync(i).isDirectory()?i:c.dirname(i),e)}if(this.#e=e,this.#t=t,this.#r=new RegExp(`^${c.join("/",t,"/")}`),n)for(let i of n)i&&this.#a(...i);if(s)for(let i of s)i&&this.#u(...i);if(a)for(let i of a)i&&this.#c(i);if(p){p==="default"&&(p=G);for(let i of p)i&&this.#f(i)}this.listeners={GET:[[r??new RegExp(`^${c.join("/",this.#t,"/")}(\\w[^\\/]*/)*[^\\/]+\\.[^\\/]`),this.#l]]}}#e;#t;#r;#o=new Map;#n=new Map;#s=new Set;#i=new Map;#p(e){return this.#o.get(e.slice(Math.max(0,e.lastIndexOf(".")+1)))??se}#a(e,t){this.#o.set(e,{...t,name:e})}#u(e,t){this.#n.set(e,c.isAbsolute(t)?t:c.join(this.#e,t))}#c(e){this.#s.add(c.join(this.#e,e))}#f(e){e=this.#n.get(e)??c.join(this.#e,e);try{let{isText:t}=this.#p(e),r=S.readFileSync(e,t?"utf8":null);this.#i.set(e,t?{br:I(r),gzip:_(r)}:r)}catch(t){console.warn(`\u26A0\uFE0F inSite Static Server: Unable to preload ${e}`,`
2
- `,t)}}#l=(e,t)=>{let r=decodeURI(e.url).replace(this.#r,"").replaceAll("../","");if(r=this.#n.get(r)??c.join(this.#e,r),this.#s.has(r))return!1;if(!S.existsSync(r))return t.notFound();let{mimeType:n,isText:s}=this.#p(r),a=s?/\bbr\b/.test(e.headers["accept-encoding"])?"br":"gzip":null;t.writeHead(200,{"Content-Type":n+(s?"; charset=utf-8":""),...a&&{"Content-Encoding":a}});let p=this.#i.get(r);return p?t.end(s&&a?p[a]:p):new Promise(i=>{let f=S.createReadStream(r).on("error",()=>i(!1));a&&(f=f.pipe(C(a))),f.on("end",i),f.pipe(t)})}};function y(){}function ie(o,e=0,t={}){let{leading:r=!1,trailing:n=!0}=t,{maxWait:s=1/0}=t,a,p,i,f,O,R,d,P,A=async()=>{let g=Date.now();g>=i?(a=void 0,i=void 0,clearTimeout(p),typeof d=="function"&&await d(),l.resolve(P),l.promise.isResolved=!0,R=r):(clearTimeout(a),a=setTimeout(A,i-g))},q=Number.isFinite(s)?()=>{d===h&&(d=!1),h(),p=setTimeout(q,s)}:null;async function h(){return P=await o.apply(f,O)}r&&typeof r=="boolean"&&(r=h),R=r,n&&typeof n=="boolean"&&(n=h),d=n;let l=Object.assign(function(...g){return O=g,f=this,i=Date.now()+e,d=n,l.promise.isResolved&&(l.promise=Object.assign(new Promise(re=>{l.resolve=re,typeof R=="function"&&(R(),R=!1,d===h&&(d=!1)),a||(a=setTimeout(A,e),q&&(p=setTimeout(q,s)))}),{isResolved:!1})),l.promise},{callback:o,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:y,run:h,clear:async g=>{clearTimeout(a),a=void 0,clearTimeout(p),l.promise.isResolved=!0,l.resolve(g?await h():P)}});return l}ie.noop=Object.assign(()=>{},{callback:y,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:y,run:y,clear:y});function L(o){for(let e in o)return!1;return!0}function D(o,e,t,r,n=!0){return Array.isArray(o)&&(o=o.length),typeof r!="string"&&(n=r??!0,r=t),(n?`${o}\xA0`:"")+D.raw(o,e,t,r)}D.raw=(o,e,t,r=t)=>{o=Math.abs(o);let n=o%10,s=o%100;return n===1&&s!==11?e:n>=2&&n<=4&&!(s>=12&&s<=15)?t:r};var{INSITE_TITLE:pe}=process.env,U={};for(let o in process.env)o.startsWith("INSITE_CLIENT_")&&(U[o.replace(/INSITE_CLIENT_/,"").toLowerCase()]=process.env[o]);var ae={"Content-Type":"text/html; charset=utf-8"},N=class extends m{constructor({requestRegExp:e=/.*/,globals:t={},title:r=pe??"inSite",css:n=[],rootId:s="root"}={}){super(),this.listeners={GET:[[e,this.#n]]},this.#e=r,this.#t=Array.isArray(n)?n:[n],this.#r=s,Object.assign(t,U),this.#o=`<!DOCTYPE html><html lang="ru"><head><meta charset="utf-8" /><meta name="viewport" content="minimum-scale=1, initial-scale=1, width=device-width" /><title>${this.#e}</title>${this.#t.map(a=>`<link rel="stylesheet" href="${a}" />`).join("")}${L(t)?"":`<script>globalThis.__insite=${JSON.stringify(t)};</script>`}<script type="text/javascript" src="/index.js" defer></script></head><body><div id="${this.#r}"></div></body></html>`}#e;#t;#r;#o;#n=(e,t)=>B(e,t,ae,this.#o)};import{createServer as he,resolveSSL as xe,showServerListeningMessage as ee}from"insite-common/backend";import{IncomingMessage as fe}from"node:http";import le from"node:querystring";var T=Symbol("server"),E=Symbol("request"),x=Symbol("match");var ue=/\/(?:(\*)|:([^/?]+)(\?(.*))?)/g;function z(o,e=0){return o.replaceAll(ue,(t,r,n,s,a)=>{if(r)return`/(?<__${e++}>.*?)`;let p=`/(?<${n}>[^/]+)`;return s?`(?:${p}${a?z(a,e):""})?`:p})}function F(o){return new RegExp(`^${z(o)}/?$`)}var ce=/^__/;function Q(o){if(o[x]){let e=o[x];delete o[x];let t=[void 0,...e.slice(1)];if(e.groups)for(let[r,n]of Object.entries(e.groups))t[r.replace(ce,"")]=n;return t}return[]}function W(o){return o.querystring?.split("&").reduce((e,t)=>{let[r,n]=t.split("=");return e[r]=decodeURIComponent(n||""),e},{})??{}}function J(o,e){let t=e.exec(o.path);return t?(o[x]=t,!0):!1}var j=class{constructor(e){this.#e=e}#e;stream(){return this.#e}#t;text(){return new Promise((e,t)=>{if(this.#t)e(this.#t);else{let r="";this.#e.on("data",n=>{r+=n}),this.#e.on("end",()=>{e(this.#t=r)}),this.#e.on("error",t)}})}async bytes(){return new TextEncoder().encode(await this.text())}async arrayBuffer(){return(await this.bytes()).buffer}async json(){return JSON.parse(await this.text())}async urlEncoded(){return le.parse(await this.text())}},b=class extends fe{path;querystring;_addHeaderLine(e,t,r){super._addHeaderLine(e,t,r),this.path||([this.path,this.querystring]=this.url.split("?",2))}[x];#e;get params(){return this.#e??=Q(this)}#t;get query(){return this.#t??=W(this)}#r;get body(){return this.#r??=new j(this)}};import{ServerResponse as de}from"node:http";var M=class extends de{[T];[E];text(e){return this.writeHead(200,{"Content-Type":"text/plain; charset=utf-8","Content-Length":Buffer.byteLength(e)}).end(e)}json(e){let t=JSON.stringify(e);return this.writeHead(200,{"Content-Type":"application/json; charset=utf-8","Content-Length":Buffer.byteLength(t)}).end(t)}urlEncoded(e){let t=new URLSearchParams(e).toString();return this.writeHead(200,{"Content-Type":"application/x-www-form-urlencoded; charset=utf-8","Content-Length":Buffer.byteLength(t)}).end(t)}stream(e,t){return this.writeHead(200,t),e.pipe(this)}error(e,t){return this[T]._throw(this,e,t)}badRequest(e){return this.error(400,e)}unauthorized(e){return this.error(401,e)}forbidden(e){return this.error(403,e)}notFound(e){return this.error(404,e)}requestTimeout(e){return this.error(408,e)}gone(e){return this.error(410,e)}internalServerError(e){return this.error(500,e)}serviceUnavailable(e){return this.error(503,e)}};var me=["DELETE","GET","PATCH","POST","PUT"];function K(o){return me.includes(o)||o==="ALL"}function V(o){return Array.isArray(o)}function X(o){return!Array.isArray(o)}function Y(o,e){return!!(o&&e[o])}function Z(o){return!!o&&"emit"in o}var v=class o{constructor({port:e,ssl:t,listeners:r,errors:n,server:s},a=[]){if(Z(s)?(this.server=s,new Promise(p=>void(s.listening?p():s.on("listening",p))).then(()=>ee(this))):(this.server=he(o.makeProps({ssl:t,server:s})),this.server.listen(typeof e=="string"?Number.parseInt(e):e??(this.isS?443:80),()=>ee(this))),r)for(let[p,i]of Object.entries(r))for(let[f,O]of i)this.addRequestListener(p,f,O);if(n)for(let p of Object.keys(n)){let i=Number.parseInt(p);i&&(this.#r[i]?Object.assign(this.#r[i],n[i]):this.#r[i]=n[i])}if(a)for(let p of a)p&&this.addMiddleware(p);this.server.on("request",this.#t)}icon="\u{1F578}\uFE0F ";name="HTTP";get protocol(){return`http${this.isS?"s":""}`}server;get isS(){return"setSecureContext"in this.server}#e={POST:[],GET:[],PUT:[],PATCH:[],DELETE:[]};#t=async(e,t)=>{if(t[T]=this,t[E]=e,!("status"in e)&&Y(e.method,this.#e)){for(let[r,n]of this.#e[e.method])if(J(e,r)&&await n(e,t)!==!1)return}t.notFound()};#r={400:{content:"Bad Request"},401:{content:"Unauthorized"},403:{content:"Forbidden"},404:{content:"Not Found"},408:{content:"Request Timeout"},410:{content:"Gone"},500:{content:"Internal Server Error"},503:{content:"Service Unavailable"},default:{headers:{"Content-Type":"text/plain; charset=utf-8"},content:"",handler(e,t,{statusCode:r,headers:n,content:s}){return t.writeHead(r,n).end(s)}}};_throw(e,t,r){typeof r=="string"&&(r={content:r});let{handler:n,...s}={...this.#r.default,...this.#r[t],...r};return n?n(e[E],e,{...s,statusCode:t}):e}addRequestListener(e,t,r){if(typeof t=="string"&&(t=F(t)),e&&e!=="ALL")this.#e[e]?.push([t,r]);else for(let n of Object.keys(this.#e))this.addRequestListener(n,t,r);return this}addMiddleware(e){if(e instanceof m){for(let[t,r]of Object.entries(e.listeners))for(let[n,s]of r)this.addRequestListener(t,n,s);e.bindTo?.(this)}else if(V(e)){X(e)&&(e=[e]);for(let t of e)this.addRequestListener(...t.length===2?["GET",...t]:t)}else this.#o(e);return this}#o(e,t="GET",r=""){for(let[n,s]of Object.entries(e))typeof s=="function"?this.addRequestListener(t,`${r}${n}`,s):K(n)?this.#o(s,n,r):this.#o(s,t,`${r}${n}`)}post(e,t){return this.addRequestListener("POST",e,t),this}get(e,t){return this.addRequestListener("GET",e,t),this}put(e,t){return this.addRequestListener("PUT",e,t),this}patch(e,t){return this.addRequestListener("PATCH",e,t),this}delete(e,t){return this.addRequestListener("DELETE",e,t),this}static makeProps({ssl:e,server:t}){return{...xe(e),IncomingMessage:b,ServerResponse:M,...t}}};var te=class extends v{constructor(e,t,r=[]){super(t,[new w(e),...r])}name="Static";icon="\u{1F6D2}"};export{m as ClassMiddleware,v as HTTPServer,ye as InitialsMiddleware,w as StaticMiddleware,te as StaticServer,N as TemplateMiddleware};
1
+ var m=class{listeners};var ye=void 0;import S from"node:fs";import c from"node:path";import u from"node:zlib";var oe={params:{[u.constants.BROTLI_PARAM_MODE]:u.constants.BROTLI_MODE_TEXT,[u.constants.BROTLI_PARAM_QUALITY]:11}},A={params:{[u.constants.BROTLI_PARAM_MODE]:u.constants.BROTLI_MODE_TEXT,[u.constants.BROTLI_PARAM_QUALITY]:4}},ne={level:9},$={level:3};function I(o){return u.brotliCompressSync(o,oe)}function _(o){return u.gzipSync(o,ne)}function C(o){return o==="br"?u.createBrotliCompress(A):u.createGzip($)}function B(o,e,t,r){let n=/\bbr\b/.test(o.headers["accept-encoding"]);t["Content-Encoding"]=n?"br":"gzip",e.writeHead(200,t).end(n?u.brotliCompressSync(r,A):u.gzipSync(r,$))}var k=[["js",{isText:!0,mimeType:"text/javascript"}],["css",{isText:!0,mimeType:"text/css"}],["ico",{mimeType:"image/x-icon"}],process.env.NODE_ENV==="development"?["css.map",{isText:!0,mimeType:"application/json"}]:null,process.env.NODE_ENV==="development"?["js.map",{isText:!0,mimeType:"application/json"}]:null,["jpg",{mimeType:"image/jpeg"}],["jpeg",{mimeType:"image/jpeg"}]].filter(Boolean);var G=[...process.env.NODE_ENV==="production"?["/index.js","/favicon.ico"]:[]];var se={mimeType:"application/octet-stream"},w=class extends m{constructor({src:e="public",urlPrefix:t="",path:r,extensions:n=k,resolved:s,restricted:p,preloaded:a="default"}={}){if(super(),!c.isAbsolute(e)){let[,i]=process.argv;e=c.resolve(S.statSync(i).isDirectory()?i:c.dirname(i),e)}if(this.#e=e,this.#t=t,this.#r=new RegExp(`^${c.join("/",t,"/")}`),n)for(let i of n)i&&this.#p(...i);if(s)for(let i of s)i&&this.#u(...i);if(p)for(let i of p)i&&this.#c(i);if(a){a==="default"&&(a=G);for(let i of a)i&&this.#l(i)}this.listeners={GET:[[r??new RegExp(`^${c.join("/",this.#t,"/")}(\\w[^\\/]*/)*[^\\/]+\\.[^\\/]`),this.#f]]}}#e;#t;#r;#o=new Map;#n=new Map;#s=new Set;#i=new Map;#a(e){return this.#o.get(e.slice(Math.max(0,e.lastIndexOf(".")+1)))??se}#p(e,t){this.#o.set(e,{...t,name:e})}#u(e,t){this.#n.set(e,c.isAbsolute(t)?t:c.join(this.#e,t))}#c(e){this.#s.add(c.join(this.#e,e))}#l(e){e=this.#n.get(e)??c.join(this.#e,e);try{let{isText:t}=this.#a(e),r=S.readFileSync(e,t?"utf8":null);this.#i.set(e,t?{br:I(r),gzip:_(r)}:r)}catch(t){console.warn(`\u26A0\uFE0F inSite Static Server: Unable to preload ${e}`,`
2
+ `,t)}}#f=(e,t)=>{let r=decodeURI(e.url).replace(this.#r,"").replaceAll("../","");if(r=this.#n.get(r)??c.join(this.#e,r),this.#s.has(r))return!1;if(!S.existsSync(r))return t.notFound();let{mimeType:n,isText:s}=this.#a(r),p=s?/\bbr\b/.test(e.headers["accept-encoding"])?"br":"gzip":null;t.writeHead(200,{"Content-Type":n+(s?"; charset=utf-8":""),...p&&{"Content-Encoding":p}});let a=this.#i.get(r);return a?t.end(s&&p?a[p]:a):new Promise(i=>{let l=S.createReadStream(r).on("error",()=>i(!1));p&&(l=l.pipe(C(p))),l.on("end",i),l.pipe(t)})}};function y(){}function ie(o,e=0,t={}){let{leading:r=!1,trailing:n=!0}=t,{maxWait:s=1/0}=t,p,a,i,l,E,R,d,P,j=async()=>{let g=Date.now();g>=i?(p=void 0,i=void 0,clearTimeout(a),typeof d=="function"&&await d(),f.resolve(P),f.promise.isResolved=!0,R=r):(clearTimeout(p),p=setTimeout(j,i-g))},L=Number.isFinite(s)?()=>{d===h&&(d=!1),h(),a=setTimeout(L,s)}:null;async function h(){return P=await o.apply(l,E)}r&&typeof r=="boolean"&&(r=h),R=r,n&&typeof n=="boolean"&&(n=h),d=n;let f=Object.assign(function(...g){return E=g,l=this,i=Date.now()+e,d=n,f.promise.isResolved&&(f.promise=Object.assign(new Promise(re=>{f.resolve=re,typeof R=="function"&&(R(),R=!1,d===h&&(d=!1)),p||(p=setTimeout(j,e),L&&(a=setTimeout(L,s)))}),{isResolved:!1})),f.promise},{callback:o,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:y,run:h,clear:async g=>{clearTimeout(p),p=void 0,clearTimeout(a),f.promise.isResolved=!0,f.resolve(g?await h():P)}});return f}ie.noop=Object.assign(()=>{},{callback:y,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:y,run:y,clear:y});function q(o){for(let e in o)return!1;return!0}function D(o,e,t,r,n=!0){return Array.isArray(o)&&(o=o.length),typeof r!="string"&&(n=r??!0,r=t),(n?`${o}\xA0`:"")+D.raw(o,e,t,r)}D.raw=(o,e,t,r=t)=>{o=Math.abs(o);let n=o%10,s=o%100;return n===1&&s!==11?e:n>=2&&n<=4&&!(s>=12&&s<=15)?t:r};var{INSITE_TITLE:ae}=process.env,U={};for(let o in process.env)o.startsWith("INSITE_CLIENT_")&&(U[o.replace(/INSITE_CLIENT_/,"").toLowerCase()]=process.env[o]);var pe={"Content-Type":"text/html; charset=utf-8"},N=class extends m{constructor({path:e=/.*/,globals:t={},title:r=ae??"inSite",css:n=[],rootId:s="root"}={}){super(),this.listeners={GET:[[e,this.#n]]},this.#e=r,this.#t=Array.isArray(n)?n:[n],this.#r=s,Object.assign(t,U),this.#o=`<!DOCTYPE html><html lang="ru"><head><meta charset="utf-8" /><meta name="viewport" content="minimum-scale=1, initial-scale=1, width=device-width" /><title>${this.#e}</title>${this.#t.map(p=>`<link rel="stylesheet" href="${p}" />`).join("")}${q(t)?"":`<script>globalThis.__insite=${JSON.stringify(t)};</script>`}<script type="text/javascript" src="/index.js" defer></script></head><body><div id="${this.#r}"></div></body></html>`}#e;#t;#r;#o;#n=(e,t)=>B(e,t,pe,this.#o)};import{createServer as he,resolveSSL as xe,showServerListeningMessage as ee}from"insite-common/backend";import{IncomingMessage as le}from"node:http";import fe from"node:querystring";var T=Symbol("server"),O=Symbol("request"),x=Symbol("match");var ue=/\/(?:(\*)|:([^/?]+)(\?(.*))?)/g;function z(o,e=0){return o.replaceAll(ue,(t,r,n,s,p)=>{if(r)return`/(?<__${e++}>.*?)`;let a=`/(?<${n}>[^/]+)`;return s?`(?:${a}${p?z(p,e):""})?`:a})}function F(o){return new RegExp(`^${o.startsWith("/")?"":"/"}${z(o)}/?$`)}var ce=/^__/;function Q(o){if(o[x]){let e=o[x];delete o[x];let t=[void 0,...e.slice(1)];if(e.groups)for(let[r,n]of Object.entries(e.groups))t[r.replace(ce,"")]=n;return t}return[]}function W(o){return o.querystring?.split("&").reduce((e,t)=>{let[r,n]=t.split("=");return e[r]=decodeURIComponent(n||""),e},{})??{}}function J(o,e){let t=e.exec(o.path);return t?(o[x]=t,!0):!1}var H=class{constructor(e){this.#e=e}#e;stream(){return this.#e}#t;text(){return new Promise((e,t)=>{if(this.#t)e(this.#t);else{let r="";this.#e.on("data",n=>{r+=n}),this.#e.on("end",()=>{e(this.#t=r)}),this.#e.on("error",t)}})}async bytes(){return new TextEncoder().encode(await this.text())}async arrayBuffer(){return(await this.bytes()).buffer}async json(){return JSON.parse(await this.text())}async urlEncoded(){return fe.parse(await this.text())}},b=class extends le{path;querystring;_addHeaderLine(e,t,r){super._addHeaderLine(e,t,r),this.path||([this.path,this.querystring]=this.url.split("?",2))}[x];#e;get params(){return this.#e??=Q(this)}#t;get query(){return this.#t??=W(this)}#r;get body(){return this.#r??=new H(this)}};import{ServerResponse as de}from"node:http";var M=class extends de{[T];[O];text(e){return this.writeHead(200,{"Content-Type":"text/plain; charset=utf-8","Content-Length":Buffer.byteLength(e)}).end(e)}json(e){let t=JSON.stringify(e);return this.writeHead(200,{"Content-Type":"application/json; charset=utf-8","Content-Length":Buffer.byteLength(t)}).end(t)}urlEncoded(e){let t=new URLSearchParams(e).toString();return this.writeHead(200,{"Content-Type":"application/x-www-form-urlencoded; charset=utf-8","Content-Length":Buffer.byteLength(t)}).end(t)}stream(e,t){return this.writeHead(200,t),e.pipe(this)}error(e,t){return this[T]._throw(this,e,t)}badRequest(e){return this.error(400,e)}unauthorized(e){return this.error(401,e)}forbidden(e){return this.error(403,e)}notFound(e){return this.error(404,e)}requestTimeout(e){return this.error(408,e)}gone(e){return this.error(410,e)}internalServerError(e){return this.error(500,e)}serviceUnavailable(e){return this.error(503,e)}};var me=["DELETE","GET","PATCH","POST","PUT"];function K(o){return me.includes(o)||o==="ALL"}function V(o){return Array.isArray(o)}function X(o){return!Array.isArray(o)}function Y(o,e){return!!(o&&e[o])}function Z(o){return!!o&&"emit"in o}var v=class o{constructor({port:e,ssl:t,listeners:r,errors:n,server:s},p=[]){if(Z(s)?(this.server=s,new Promise(a=>void(s.listening?a():s.on("listening",a))).then(()=>ee(this))):(this.server=he(o.makeProps({ssl:t,server:s})),this.server.listen(typeof e=="string"?Number.parseInt(e):e??(this.isS?443:80),()=>ee(this))),r)for(let[a,i]of Object.entries(r))for(let[l,E]of i)this.addRequestListener(a,l,E);if(n)for(let a of Object.keys(n)){let i=Number.parseInt(a);i&&(this.#r[i]?Object.assign(this.#r[i],n[i]):this.#r[i]=n[i])}if(p)for(let a of p)a&&this.addMiddleware(a);this.server.on("request",this.#t)}icon="\u{1F578}\uFE0F ";name="HTTP";get protocol(){return`http${this.isS?"s":""}`}server;get isS(){return"setSecureContext"in this.server}#e={POST:[],GET:[],PUT:[],PATCH:[],DELETE:[]};#t=async(e,t)=>{if(t[T]=this,t[O]=e,!("status"in e)&&Y(e.method,this.#e)){for(let[r,n]of this.#e[e.method])if(J(e,r)&&await n(e,t)!==!1)return}t.notFound()};#r={400:{content:"Bad Request"},401:{content:"Unauthorized"},403:{content:"Forbidden"},404:{content:"Not Found"},408:{content:"Request Timeout"},410:{content:"Gone"},500:{content:"Internal Server Error"},503:{content:"Service Unavailable"},default:{headers:{"Content-Type":"text/plain; charset=utf-8"},content:"",handler(e,t,{statusCode:r,headers:n,content:s}){return t.writeHead(r,n).end(s)}}};_throw(e,t,r){typeof r=="string"&&(r={content:r});let{handler:n,...s}={...this.#r.default,...this.#r[t],...r};return n?n(e[O],e,{...s,statusCode:t}):e}addRequestListener(e,t,r){if(typeof t=="string"&&(t=F(t)),e&&e!=="ALL")this.#e[e]?.push([t,r]);else for(let n of Object.keys(this.#e))this.addRequestListener(n,t,r);return this}addMiddleware(e){if(e instanceof m){for(let[t,r]of Object.entries(e.listeners))for(let[n,s]of r)this.addRequestListener(t,n,s);e.bindTo?.(this)}else if(V(e)){X(e)&&(e=[e]);for(let t of e)this.addRequestListener(...t.length===2?["GET",...t]:t)}else this.#o(e);return this}#o(e,t="GET",r=""){for(let[n,s]of Object.entries(e))typeof s=="function"?this.addRequestListener(t,`${r}${n}`,s):K(n)?this.#o(s,n,r):this.#o(s,t,`${r}${n}`)}post(e,t){return this.addRequestListener("POST",e,t),this}get(e,t){return this.addRequestListener("GET",e,t),this}put(e,t){return this.addRequestListener("PUT",e,t),this}patch(e,t){return this.addRequestListener("PATCH",e,t),this}delete(e,t){return this.addRequestListener("DELETE",e,t),this}static makeProps({ssl:e,server:t}){return{...xe(e),IncomingMessage:b,ServerResponse:M,...t}}};var te=class extends v{constructor(e,t,r=[]){super(t,[new w(e),...r])}name="Static";icon="\u{1F6D2}"};export{m as ClassMiddleware,v as HTTPServer,ye as InitialsMiddleware,w as StaticMiddleware,te as StaticServer,N as TemplateMiddleware};
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/Middleware.ts", "../src/middlewares/Initials.ts", "../src/middlewares/Static/Static.ts", "../src/compression.ts", "../src/middlewares/Static/extensions.ts", "../src/middlewares/Static/preloaded.ts", "../../../../@nesvet/npm/n/src/noop.ts", "../../../../@nesvet/npm/n/src/debounce.ts", "../../../../@nesvet/npm/n/src/isEmpty.ts", "../../../../@nesvet/npm/n/src/howmuch.ts", "../src/middlewares/Template.ts", "../src/Server.ts", "../src/Request.ts", "../src/symbols.ts", "../src/utils.ts", "../src/Response.ts", "../src/types.ts", "../src/StaticServer.ts"],
4
- "sourcesContent": ["import { HTTPServer } from \"./Server\";\nimport { Handler, Method, RegExpOrString } from \"./types\";\n\n\nexport class ClassMiddleware {\n\tlisteners!: Partial<Record<Method, [ RegExpOrString, Handler ][]>>;\n\tbindTo?(server: HTTPServer): void;\n}\n", "//#if _SERVER && _SSR\n// import { initialsMap } from \"@insite/subscriptions\";\n// import { handleRequestCompressed } from \"../compression\";\n// import { Middleware } from \"../Middleware\";\n\n\n// const headers = { \"Content-Type\": \"text/javascript; charset=utf-8\" };\n\n\n// export class InitialsMiddleware extends Middleware {\n// \tconstructor(options = {}) {\n// \t\tsuper();\n// \t\tconst {\n// \t\t\trequestRegExp = /^\\/initials\\/?\\?/\n// \t\t} = options;\n\n// \t\tthis.listeners = { GET: [\n// \t\t\t[ requestRegExp, this.handler ]\n// \t\t] };\n\n// \t}\n\n// \thandler = (request, response) => {\n// \t\tconst initials = initialsMap.getWithTimeout(request.url.split(\"?\")[1]);\n\n// \t\tif (initials)\n// \t\t\thandleRequestCompressed(request, response, headers, `window.__initials = [${initials.join()}];\\ndocument.currentScript.remove();`);\n// \t\telse\n// \t\t\treturn false;\n// \t};\n\n// }\n\n\n//#else\nexport const InitialsMiddleware = undefined;\n\n\n//#endif\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport { brotliPreloadSync, getCompressionStreamByEncoding, gzipPreloadSync } from \"../../compression\";\nimport { ClassMiddleware } from \"../../Middleware\";\nimport type { Request } from \"../../Request\";\nimport type { Response } from \"../../Response\";\nimport { defaultExtensions } from \"./extensions\";\nimport { defaultPreloaded } from \"./preloaded\";\nimport type { Extension, Options } from \"./types\";\n\n\nconst nullExtension = {\n\tmimeType: \"application/octet-stream\"\n};\n\n\nexport class StaticMiddleware extends ClassMiddleware {\n\tconstructor({\n\t\tsrc = \"public\",\n\t\turlPrefix = \"\",\n\t\trequestRegExp,\n\t\textensions = defaultExtensions,\n\t\tresolved,\n\t\trestricted,\n\t\tpreloaded = \"default\"\n\t}: Options = {}) {\n\t\tsuper();\n\t\t\n\t\tif (!path.isAbsolute(src)) {\n\t\t\tconst [ , entryPoint ] = process.argv;\n\t\t\tsrc = path.resolve(fs.statSync(entryPoint).isDirectory() ? entryPoint : path.dirname(entryPoint), src);\n\t\t}\n\t\t\n\t\tthis.#src = src;\n\t\tthis.#urlPrefix = urlPrefix;\n\t\tthis.#urlPrefixRegExp = new RegExp(`^${path.join(\"/\", urlPrefix, \"/\")}`);\n\t\t\n\t\tif (extensions)\n\t\t\tfor (const extension of extensions)\n\t\t\t\tif (extension)\n\t\t\t\t\tthis.#addExtension(...extension);\n\t\t\n\t\tif (resolved)\n\t\t\tfor (const resolvee of resolved)\n\t\t\t\tif (resolvee)\n\t\t\t\t\tthis.#resolve(...resolvee);\n\t\t\n\t\tif (restricted)\n\t\t\tfor (const fileName of restricted)\n\t\t\t\tif (fileName)\n\t\t\t\t\tthis.#restrict(fileName);\n\t\t\n\t\tif (preloaded) {\n\t\t\tif (preloaded === \"default\")\n\t\t\t\tpreloaded = defaultPreloaded;\n\t\t\t\n\t\t\tfor (const fileName of preloaded)\n\t\t\t\tif (fileName)\n\t\t\t\t\tthis.#preload(fileName);\n\t\t}\n\t\t\n\t\tthis.listeners = { GET: [\n\t\t\t[ requestRegExp ?? new RegExp(`^${path.join(\"/\", this.#urlPrefix, \"/\")}(\\\\w[^\\\\/]*/)*[^\\\\/]+\\\\.[^\\\\/]`), this.#handler ]\n\t\t] };\n\t\t\n\t}\n\t\n\t#src;\n\t#urlPrefix;\n\t#urlPrefixRegExp;\n\t\n\t#extensions = new Map();\n\t\n\t#resolved = new Map();\n\t\n\t#restricted = new Set();\n\t\n\t#preloaded = new Map();\n\t\n\t#getExtensionBy(fileName: string) {\n\t\treturn this.#extensions.get(fileName.slice(Math.max(0, fileName.lastIndexOf(\".\") + 1))) ?? nullExtension;\n\t}\n\t\n\t#addExtension(name: string, extension: Extension[1]) {\n\t\tthis.#extensions.set(name, { ...extension, name });\n\t\t\n\t}\n\t\n\t#resolve(url: string, fileName: string) {\n\t\tthis.#resolved.set(url, path.isAbsolute(fileName) ? fileName : path.join(this.#src, fileName));\n\t\t\n\t}\n\t\n\t#restrict(fileName: string) {\n\t\tthis.#restricted.add(path.join(this.#src, fileName));\n\t\t\n\t}\n\t\n\t#preload(fileName: string) {\n\t\tfileName = this.#resolved.get(fileName) ?? path.join(this.#src, fileName);\n\t\t\n\t\ttry {\n\t\t\tconst { isText } = this.#getExtensionBy(fileName);\n\t\t\tconst fileData = fs.readFileSync(fileName, isText ? \"utf8\" : null);\n\t\t\tthis.#preloaded.set(fileName, isText ? {\n\t\t\t\tbr: brotliPreloadSync(fileData),\n\t\t\t\tgzip: gzipPreloadSync(fileData)\n\t\t\t} : fileData);\n\t\t} catch (error) {\n\t\t\tconsole.warn(`\u26A0\uFE0F inSite Static Server: Unable to preload ${fileName}`, \"\\n\", error);\n\t\t}\n\t\t\n\t}\n\t\n\t#handler = (request: Request, response: Response) => {\n\t\tlet fileName = decodeURI(request.url).replace(this.#urlPrefixRegExp, \"\").replaceAll(\"../\", \"\");\n\t\tfileName = this.#resolved.get(fileName) ?? path.join(this.#src, fileName);\n\t\t\n\t\tif (this.#restricted.has(fileName))\n\t\t\treturn false;\n\t\t\n\t\tif (!fs.existsSync(fileName))\n\t\t\treturn response.notFound();\n\t\t\n\t\tconst { mimeType, isText } = this.#getExtensionBy(fileName);\n\t\tconst contentEncoding = isText ? /\\bbr\\b/.test(request.headers[\"accept-encoding\"] as string) ? \"br\" : \"gzip\" : null;\n\t\t\n\t\tresponse.writeHead(200, {\n\t\t\t\"Content-Type\": mimeType + (isText ? \"; charset=utf-8\" : \"\"),\n\t\t\t...contentEncoding && { \"Content-Encoding\": contentEncoding }\n\t\t});\n\t\t\n\t\tconst preloaded = this.#preloaded.get(fileName);\n\t\t\n\t\tif (preloaded)\n\t\t\treturn response.end(isText && contentEncoding ? preloaded[contentEncoding] : preloaded);\n\t\t\n\t\treturn new Promise(resolve => {\n\t\t\tlet stream: Readable = fs.createReadStream(fileName).on(\"error\", () => resolve(false));\n\t\t\t\n\t\t\tif (contentEncoding)\n\t\t\t\tstream = stream.pipe(getCompressionStreamByEncoding(contentEncoding));\n\t\t\t\n\t\t\tstream.on(\"end\", resolve);\n\t\t\t\n\t\t\tstream.pipe(response);\n\t\t\t\n\t\t});\n\t};\n\t\n}\n", "import zlib, { type InputType } from \"node:zlib\";\nimport type { OutgoingHttpHeaders } from \"node:http\";\nimport type { Request } from \"./Request\";\nimport type { Response } from \"./Response\";\n\n\nconst brotliPreloadOptions = {\n\tparams: {\n\t\t[zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n\t\t[zlib.constants.BROTLI_PARAM_QUALITY]: 11\n\t}\n};\n\nconst brotliRuntimeOptions = {\n\tparams: {\n\t\t[zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n\t\t[zlib.constants.BROTLI_PARAM_QUALITY]: 4\n\t}\n};\n\nconst gzipPreloadOptions = {\n\tlevel: 9\n};\n\nconst gzipRuntimeOptions = {\n\tlevel: 3\n};\n\n\nexport function brotliPreloadSync(data: InputType) {\n\treturn zlib.brotliCompressSync(data, brotliPreloadOptions);\n}\n\nexport function gzipPreloadSync(data: InputType) {\n\treturn zlib.gzipSync(data, gzipPreloadOptions);\n}\n\nexport function getCompressionStreamByEncoding(contentEncoding: \"br\" | \"gzip\") {\n\treturn contentEncoding === \"br\" ? zlib.createBrotliCompress(brotliRuntimeOptions) : zlib.createGzip(gzipRuntimeOptions);\n}\n\nexport function handleRequestCompressed(request: Request, response: Response, headers: OutgoingHttpHeaders, data: InputType) {\n\tconst isBrotliAccepted = /\\bbr\\b/.test(request.headers[\"accept-encoding\"] as string);\n\theaders[\"Content-Encoding\"] = isBrotliAccepted ? \"br\" : \"gzip\";\n\tresponse.writeHead(200, headers).end(isBrotliAccepted ? zlib.brotliCompressSync(data, brotliRuntimeOptions) : zlib.gzipSync(data, gzipRuntimeOptions));\n\t\n}\n", "import { Extension } from \"./types\";\n\n\nexport const defaultExtensions = [\n\t\n\t[ \"js\", {\n\t\tisText: true,\n\t\tmimeType: \"text/javascript\"\n\t} ],\n\t\n\t[ \"css\", {\n\t\tisText: true,\n\t\tmimeType: \"text/css\"\n\t} ],\n\t\n\t[ \"ico\", {\n\t\tmimeType: \"image/x-icon\"\n\t} ],\n\t\n\tprocess.env.NODE_ENV === \"development\" ? [ \"css.map\", {\n\t\tisText: true,\n\t\tmimeType: \"application/json\"\n\t} ] : null,\n\t\n\tprocess.env.NODE_ENV === \"development\" ? [ \"js.map\", {\n\t\tisText: true,\n\t\tmimeType: \"application/json\"\n\t} ] : null,\n\t\n\t[ \"jpg\", {\n\t\tmimeType: \"image/jpeg\"\n\t} ],\n\t\n\t[ \"jpeg\", {\n\t\tmimeType: \"image/jpeg\"\n\t} ]\n\t\n].filter(Boolean) as Extension[];\n", "export const defaultPreloaded = [\n\t...process.env.NODE_ENV === \"production\" ? [\n\t\t//#if _SSR\n\t\t// \"/index.css\",\n\t\t//#endif\n\t\t\"/index.js\",\n\t\t\"/favicon.ico\"\n\t] : []\n];\n", "export function noop() { /**/ }\n", "import { noop } from \"./noop.js\";\n\n\ntype Callback<Result> = (...args: unknown[]) => Result;\ntype FunctionOrBoolean = (() => unknown) | boolean;\ntype Options = { leading?: FunctionOrBoolean; maxWait?: number; trailing?: FunctionOrBoolean };\ntype NumberOrUndefined = number | undefined;\n\ntype DebouncedFunction<Result> = {\n\t(this: unknown, ..._args: unknown[]): Promise<Result>;\n};\n\nexport type Debounced<Result> = {\n\tcallback: Callback<Result>;\n\tpromise: {\n\t\tisResolved: boolean;\n\t} & Promise<unknown>;\n\tresolve: (value: Result) => void;\n\trun(): Promise<Result>;\n\tclear(shouldRun?: boolean): Promise<void>;\n} & DebouncedFunction<Result>;\n\n\nexport function debounce<Result>(callback: Callback<Result>, limit = 0, options: Options = {}) {\n\tlet { leading = false, trailing = true } = options;\n\tconst { maxWait = Infinity } = options;\n\t\n\tlet timeout: NumberOrUndefined;\n\tlet maxWaitTimeout: NumberOrUndefined;\n\tlet end: NumberOrUndefined;\n\tlet context: unknown;\n\tlet args: unknown[];\n\tlet initial: FunctionOrBoolean;\n\tlet final: FunctionOrBoolean;\n\tlet result: Result;\n\t\n\tconst expired = async () => {\n\t\t\n\t\tconst n = Date.now();\n\t\t\n\t\tif (n >= end!) {\n\t\t\ttimeout = undefined;\n\t\t\tend = undefined;\n\t\t\tclearTimeout(maxWaitTimeout);\n\t\t\tif (typeof final == \"function\")\n\t\t\t\tawait final();\n\t\t\tdebounced.resolve(result);\n\t\t\tdebounced.promise.isResolved = true;\n\t\t\tinitial = leading;\n\t\t} else {\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = setTimeout(expired, end! - n);\n\t\t}\n\t\t\n\t};\n\t\n\tconst maxWaitExpired = Number.isFinite(maxWait) ? () => {\n\t\t\n\t\tif (final === run)\n\t\t\tfinal = false;\n\t\trun();\n\t\tmaxWaitTimeout = setTimeout(maxWaitExpired as TimerHandler, maxWait);\n\t\t\n\t} : null;\n\t\n\tasync function run() {\n\t\treturn (result = await callback.apply(context, args));\n\t}\n\t\n\tif (leading && typeof leading == \"boolean\")\n\t\tleading = run;\n\tinitial = leading;\n\t\n\tif (trailing && typeof trailing == \"boolean\")\n\t\ttrailing = run;\n\tfinal = trailing;\n\t\n\tconst debounced: Debounced<Result> = Object.assign(function (..._args) {\n\t\targs = _args;\n\t\tcontext = this;// eslint-disable-line no-invalid-this\n\t\t\n\t\tend = Date.now() + limit;\n\t\tfinal = trailing;\n\t\t\n\t\tif (debounced.promise.isResolved)\n\t\t\tdebounced.promise = Object.assign(new Promise(resolve => {\n\t\t\t\tdebounced.resolve = resolve;\n\t\t\t\t\n\t\t\t\tif (typeof initial == \"function\") {\n\t\t\t\t\tinitial();\n\t\t\t\t\tinitial = false;\n\t\t\t\t\tif (final === run)\n\t\t\t\t\t\tfinal = false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!timeout) {\n\t\t\t\t\ttimeout = setTimeout(expired, limit);\n\t\t\t\t\tif (maxWaitExpired)\n\t\t\t\t\t\tmaxWaitTimeout = setTimeout(maxWaitExpired, maxWait);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}), {\n\t\t\t\tisResolved: false\n\t\t\t});\n\t\t\n\t\treturn debounced.promise;\n\t} as DebouncedFunction<Result>, {\n\t\tcallback,\n\t\tpromise: Object.assign(Promise.resolve(), {\n\t\t\tisResolved: true\n\t\t}),\n\t\tresolve: noop,\n\t\trun,\n\t\tclear: async (shouldRun?: boolean) => {\n\t\t\t\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = undefined;\n\t\t\t\n\t\t\tclearTimeout(maxWaitTimeout);\n\t\t\t\n\t\t\tdebounced.promise.isResolved = true;\n\t\t\tdebounced.resolve(shouldRun ? await run() : result);\n\t\t\t\n\t\t}\n\t});\n\t\n\treturn debounced;\n}\n\n\ndebounce.noop = Object.assign(() => { /**/ }, {\n\tcallback: noop,\n\tpromise: Object.assign(Promise.resolve(), {\n\t\tisResolved: true\n\t}),\n\tresolve: noop,\n\trun: noop,\n\tclear: noop\n}) as unknown as Debounced<void>;\n\n\nexport function throttle<Result>(callback: Callback<Result>, limit?: number, options?: Options) {\n\treturn debounce(callback, limit, {\n\t\tmaxWait: limit,\n\t\tleading: true,\n\t\ttrailing: true,\n\t\t...options\n\t});\n}\n", "export function isEmpty(object: object) {\n\tfor (const _ in object)// eslint-disable-line guard-for-in, no-unreachable-loop\n\t\treturn false;\n\t\n\treturn true;\n}\n", "export function howmuch(number: [] | number, one: string, two: string, five: boolean | string, shouldPrintNumber = true) {\n\tif (Array.isArray(number))\n\t\tnumber = number.length;\n\t\n\tif (typeof five != \"string\") {\n\t\tshouldPrintNumber = five ?? true;\n\t\tfive = two;\n\t}\n\t\n\t\n\treturn (shouldPrintNumber ? `${number}\u00A0` : \"\") + howmuch.raw(number, one, two, five);\n}\n\nhowmuch.raw = (number: number, one: string, two: string, five = two) => {\n\tnumber = Math.abs(number);\n\tconst u = number % 10;\n\tconst d = number % 100;\n\t\n\treturn (\n\t\t(u === 1 && d !== 11) ?\n\t\t\tone :\n\t\t\t((u >= 2 && u <= 4) && !(d >= 12 && d <= 15)) ?\n\t\t\t\ttwo :\n\t\t\t\tfive\n\t);\n};\n", "import { isEmpty } from \"@nesvet/n\";\nimport { handleRequestCompressed } from \"../compression\";\nimport { ClassMiddleware } from \"../Middleware\";\nimport type { Request } from \"../Request\";\nimport type { Response } from \"../Response\";\n\n\nconst { INSITE_TITLE } = process.env;\n\nconst envGlobals: Record<string, unknown> = {};\nfor (const key in process.env)\n\tif (key.startsWith(\"INSITE_CLIENT_\"))\n\t\tenvGlobals[key.replace(/INSITE_CLIENT_/, \"\").toLowerCase()] = process.env[key];\n\nconst headers = { \"Content-Type\": \"text/html; charset=utf-8\" };\n\n\ntype Options = {\n\trequestRegExp?: RegExp;\n\tglobals?: Record<string, unknown>;\n\ttitle?: string;\n\tcss?: string[] | string;\n\trootId?: string;\n};\n\nexport type { Options as TemplateMiddlewareOptions };\n\n\nexport class TemplateMiddleware extends ClassMiddleware {\n\tconstructor({\n\t\trequestRegExp = /.*/,\n\t\tglobals = {},\n\t\ttitle = INSITE_TITLE ?? \"inSite\",\n\t\tcss = [],\n\t\trootId = \"root\"\n\t}: Options = {}) {\n\t\tsuper();\n\t\t\n\t\tthis.listeners = { GET: [\n\t\t\t[ requestRegExp, this.#handler ]\n\t\t] };\n\t\t\n\t\tthis.#title = title;\n\t\tthis.#css = Array.isArray(css) ? css : [ css ];\n\t\tthis.#rootId = rootId;\n\t\t\n\t\tObject.assign(globals, envGlobals);\n\t\t\n\t\tthis.#html =\n\t\t\t\"<!DOCTYPE html>\" +\n\t\t\t\"<html lang=\\\"ru\\\">\" +\n\t\t\t\"<head>\" +\n\t\t\t\"<meta charset=\\\"utf-8\\\" />\" +\n\t\t\t\"<meta name=\\\"viewport\\\" content=\\\"minimum-scale=1, initial-scale=1, width=device-width\\\" />\" +\n\t\t\t`<title>${this.#title}</title>` +\n\t\t\t`${this.#css.map(fileName => `<link rel=\"stylesheet\" href=\"${fileName}\" />`).join(\"\")}` +\n\t\t\t`${isEmpty(globals) ? \"\" : `<script>globalThis.__insite=${JSON.stringify(globals)};</script>`}` +\n\t\t\t\"<script type=\\\"text/javascript\\\" src=\\\"/index.js\\\" defer></script>\" +\n\t\t\t\"</head>\" +\n\t\t\t\"<body>\" +\n\t\t\t`<div id=\"${this.#rootId}\">` +\n\t\t\t\"</div>\" +\n\t\t\t\"</body>\" +\n\t\t\t\"</html>\";\n\t\t\n\t}\n\t\n\t#title;\n\t#css;\n\t#rootId;\n\t#html;\n\t\n\t#handler = (request: Request, response: Response) =>\n\t\thandleRequestCompressed(request, response, headers, this.#html);\n\t\n}\n", "import type http from \"node:http\";\nimport type https from \"node:https\";\nimport { createServer, resolveSSL, showServerListeningMessage } from \"insite-common/backend\";\nimport { ClassMiddleware } from \"./Middleware\";\nimport { matches, Request } from \"./Request\";\nimport { Response } from \"./Response\";\nimport { requestSymbol, serverSymbol } from \"./symbols\";\nimport {\n\tisMethod,\n\tisRequestMethodAccepted,\n\tisServerServer,\n\tisTupleMiddleware,\n\tisTupleMiddlewareOrArray,\n\tMiddleware,\n\ttype ErrorParams,\n\ttype GenericMiddleware,\n\ttype Handler,\n\ttype Listener,\n\ttype Method,\n\ttype Options,\n\ttype RegExpOrString\n} from \"./types\";\nimport { pathToRegExp } from \"./utils\";\n\n\nexport class HTTPServer {\n\tconstructor({\n\t\tport,\n\t\tssl,\n\t\tlisteners,\n\t\terrors,\n\t\tserver\n\t}: Options, middlewares: (GenericMiddleware | false | null | undefined)[] = []) {\n\t\t\n\t\tif (isServerServer(server)) {\n\t\t\tthis.server = server;\n\t\t\t\n\t\t\tnew Promise<void>(resolve => void (\n\t\t\t\tserver.listening ?\n\t\t\t\t\tresolve() :\n\t\t\t\t\tserver.on(\"listening\", resolve)\n\t\t\t)).then(() => showServerListeningMessage(this));\n\t\t\t\n\t\t} else {\n\t\t\tthis.server = createServer(HTTPServer.makeProps({ ssl, server }));\n\t\t\t\n\t\t\tthis.server.listen(\n\t\t\t\ttypeof port == \"string\" ?\n\t\t\t\t\tNumber.parseInt(port) :\n\t\t\t\t\tport ?? (this.isS ? 443 : 80),\n\t\t\t\t() => showServerListeningMessage(this)\n\t\t\t);\n\t\t}\n\t\t\n\t\tif (listeners)\n\t\t\tfor (const [ method, methodListeners ] of Object.entries(listeners) as [ Method | \"ALL\", Listener[] ][])\n\t\t\t\tfor (const [ regExp, handler ] of methodListeners)\n\t\t\t\t\tthis.addRequestListener(method, regExp, handler);\n\t\t\n\t\tif (errors)\n\t\t\tfor (const statusCodeString of Object.keys(errors)) {\n\t\t\t\tconst statusCode = Number.parseInt(statusCodeString);\n\t\t\t\tif (statusCode)\n\t\t\t\t\tif (this.#errors[statusCode])\n\t\t\t\t\t\tObject.assign(this.#errors[statusCode], errors[statusCode]);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.#errors[statusCode] = errors[statusCode];\n\t\t\t}\n\t\t\n\t\tif (middlewares)\n\t\t\tfor (const middleware of middlewares)\n\t\t\t\tif (middleware)\n\t\t\t\t\tthis.addMiddleware(middleware);\n\t\t\n\t\tthis.server.on(\"request\", this.#requestListener);\n\t\t\n\t}\n\t\n\t/** Server icon */\n\ticon = \"\uD83D\uDD78\uFE0F \";\n\t\n\t/** Server name */\n\tname = \"HTTP\";\n\tget protocol() {\n\t\treturn `http${this.isS ? \"s\" : \"\"}`;\n\t}\n\t\n\t/** Node.js http(s) server object */\n\tserver;\n\t\n\t/** Does the server use SSL */\n\tget isS() {\n\t\treturn \"setSecureContext\" in this.server;\n\t}\n\t\n\t#listeners: Record<Method, Listener[]> = {\n\t\tPOST: [],\n\t\tGET: [],\n\t\tPUT: [],\n\t\tPATCH: [],\n\t\tDELETE: []\n\t};\n\t\n\t#requestListener = async (request: Request, response: Response) => {\n\t\tresponse[serverSymbol] = this;\n\t\tresponse[requestSymbol] = request;\n\t\t\n\t\tif (!(\"status\" in request) && isRequestMethodAccepted(request.method, this.#listeners))\n\t\t\tfor (const [ regExp, handler ] of this.#listeners[request.method])\n\t\t\t\tif (matches(request, regExp) && await handler(request, response) !== false)\n\t\t\t\t\treturn;\n\t\t\n\t\tresponse.notFound();\n\t\t\n\t};\n\t\n\t#errors: Record<\"default\" | number, ErrorParams> = {\n\t\t400: {\n\t\t\tcontent: \"Bad Request\"\n\t\t},\n\t\t401: {\n\t\t\tcontent: \"Unauthorized\"\n\t\t},\n\t\t403: {\n\t\t\tcontent: \"Forbidden\"\n\t\t},\n\t\t404: {\n\t\t\tcontent: \"Not Found\"\n\t\t},\n\t\t408: {\n\t\t\tcontent: \"Request Timeout\"\n\t\t},\n\t\t410: {\n\t\t\tcontent: \"Gone\"\n\t\t},\n\t\t500: {\n\t\t\tcontent: \"Internal Server Error\"\n\t\t},\n\t\t503: {\n\t\t\tcontent: \"Service Unavailable\"\n\t\t},\n\t\tdefault: {\n\t\t\theaders: { \"Content-Type\": \"text/plain; charset=utf-8\" },\n\t\t\tcontent: \"\",\n\t\t\thandler(request, response, { statusCode, headers, content }) {\n\t\t\t\treturn response.writeHead(statusCode, headers).end(content);\n\t\t\t}\n\t\t}\n\t};\n\t\n\t_throw(response: Response, statusCode: number, params?: ErrorParams | string) {\n\t\tif (typeof params == \"string\")\n\t\t\tparams = { content: params };\n\t\t\n\t\tconst {\n\t\t\thandler,\n\t\t\t...restParams\n\t\t} = {\n\t\t\t...this.#errors.default,\n\t\t\t...this.#errors[statusCode],\n\t\t\t...params\n\t\t};\n\t\t\n\t\treturn handler ? handler(response[requestSymbol], response, {\n\t\t\t...restParams,\n\t\t\tstatusCode\n\t\t}) : response;\n\t}\n\t\n\t/** Add request listener */\n\taddRequestListener(method: Method | \"ALL\", regExp: RegExpOrString, handler: Handler) {\n\t\tif (typeof regExp == \"string\")\n\t\t\tregExp = pathToRegExp(regExp);\n\t\t\n\t\tif (method && method !== \"ALL\")\n\t\t\tthis.#listeners[method]?.push([ regExp, handler ]);\n\t\telse\n\t\t\tfor (const specificMethod of Object.keys(this.#listeners) as Method[])\n\t\t\t\tthis.addRequestListener(specificMethod, regExp, handler);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add middleware */\n\taddMiddleware(middleware: GenericMiddleware) {\n\t\tif (middleware instanceof ClassMiddleware) {\n\t\t\tfor (const [ method, regExpOrStringArrayMap ] of Object.entries(middleware.listeners))\n\t\t\t\tfor (const [ regExpOrString, handler ] of regExpOrStringArrayMap)\n\t\t\t\t\tthis.addRequestListener(method as Method, regExpOrString, handler);\n\t\t\tmiddleware.bindTo?.(this);\n\t\t} else if (isTupleMiddlewareOrArray(middleware)) {\n\t\t\tif (isTupleMiddleware(middleware))\n\t\t\t\tmiddleware = [ middleware ];\n\t\t\t\n\t\t\tfor (const params of middleware)\n\t\t\t\tthis.addRequestListener(...params.length === 2 ? [ \"GET\", ...params ] as const : params);\n\t\t} else\n\t\t\tthis.#parseMappedMiddleware(middleware);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t#parseMappedMiddleware(middleware: Middleware, method: Method | \"ALL\" = \"GET\", prefix: string = \"\") {\n\t\tfor (const [ key, value ] of Object.entries(middleware))\n\t\t\tif (typeof value == \"function\")\n\t\t\t\tthis.addRequestListener(method, `${prefix}${key}`, value);\n\t\t\telse if (isMethod(key))\n\t\t\t\tthis.#parseMappedMiddleware(value, key, prefix);\n\t\t\telse\n\t\t\t\tthis.#parseMappedMiddleware(value, method, `${prefix}${key}`);\n\t\t\n\t}\n\t\n\t/** Add POST request listener */\n\tpost(regExp: RegExpOrString, handler: Handler) {\n\t\tthis.addRequestListener(\"POST\", regExp, handler);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add GET request listener */\n\tget(regExp: RegExpOrString, handler: Handler) {\n\t\tthis.addRequestListener(\"GET\", regExp, handler);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add PUT request listener */\n\tput(regExp: RegExpOrString, handler: Handler) {\n\t\tthis.addRequestListener(\"PUT\", regExp, handler);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add PATCH request listener */\n\tpatch(regExp: RegExpOrString, handler: Handler) {\n\t\tthis.addRequestListener(\"PATCH\", regExp, handler);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add DELETE request listener */\n\tdelete(regExp: RegExpOrString, handler: Handler) {\n\t\tthis.addRequestListener(\"DELETE\", regExp, handler);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t\n\t/** Make props for Node.js http(s).createServer method */\n\tstatic makeProps({ ssl, server }: Options) {\n\t\treturn {\n\t\t\t...resolveSSL(ssl),\n\t\t\tIncomingMessage: Request,\n\t\t\tServerResponse: Response,\n\t\t\t...server\n\t\t} as http.ServerOptions | https.ServerOptions;\n\t}\n\t\n}\n", "import { IncomingMessage } from \"node:http\";\nimport querystring from \"node:querystring\";\nimport { matchSymbol } from \"./symbols\";\nimport { extractQueryParams, extractUrlParams } from \"./utils\";\nimport type { RequestParams, RequestQueryParams } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nexport function matches(request: Request, regExp: RegExp) {\n\tconst match = regExp.exec(request.path);\n\t\n\tif (match) {\n\t\trequest[matchSymbol] = match;\n\t\t\n\t\treturn true;\n\t}\n\t\n\treturn false;\n}\n\n\nexport class RequestBody {\n\tconstructor(request: Request<any>) {\n\t\tthis.#request = request;\n\t\t\n\t}\n\t\n\t#request;\n\t\n\t/** Request body as a ReadableStream */\n\tstream() {\n\t\treturn this.#request;\n\t}\n\t\n\t#text?: string;\n\t\n\t/** Request body as a string */\n\ttext() {\n\t\treturn new Promise<string>((resolve, reject) => {\n\t\t\t\n\t\t\tif (this.#text)\n\t\t\t\tresolve(this.#text);\n\t\t\telse {\n\t\t\t\tlet text = \"\";\n\t\t\t\t\n\t\t\t\tthis.#request.on(\"data\", chunk => { text += chunk; });\n\t\t\t\tthis.#request.on(\"end\", () => { resolve(this.#text = text); });\n\t\t\t\t\n\t\t\t\tthis.#request.on(\"error\", reject);\n\t\t\t}\n\t\t\t\n\t\t});\n\t}\n\t\n\t/** Request body as an Uint8Array */\n\tasync bytes() {\n\t\treturn new TextEncoder().encode(await this.text());\n\t}\n\t\n\t/** Request body as an ArrayBuffer */\n\tasync arrayBuffer() {\n\t\treturn (await this.bytes()).buffer;\n\t}\n\t\n\t/** Request body as a parsed JSON object */\n\tasync json() {\n\t\treturn JSON.parse(await this.text());\n\t}\n\t\n\t/** Request body as a parsed URL-encoded object */\n\tasync urlEncoded() {\n\t\treturn querystring.parse(await this.text());\n\t}\n\t\n\t// TODO:\n\t/** Request body as a parsed MessagePack object */\n\t// messagePack() {\n\t// }\n\t\n}\n\n\ndeclare module \"node:http\" {\n\tinterface IncomingMessage { // eslint-disable-line no-shadow\n\t\t_addHeaderLine(field: string, value: string, first: boolean): void;\n\t}\n}\n\nexport class Request<P = RequestParams> extends IncomingMessage {\n\t\n\tdeclare url: string;\n\t\n\t/** Pathname part of the URL string */\n\tpath!: string;\n\t\n\t/** Query string part of the URL string */\n\tquerystring!: string;\n\t\n\t_addHeaderLine(field: string, value: string, first: boolean): void {\n\t\tsuper._addHeaderLine(field, value, first);\n\t\t\n\t\tif (!this.path)\n\t\t\t([ this.path, this.querystring ] = this.url.split(\"?\", 2));\n\t\t\n\t}\n\t\n\t[matchSymbol]?: RegExpExecArray;\n\t\n\t#params?: P;\n\t\n\t/** Params parsed from the URL string */\n\tget params() {\n\t\treturn (this.#params ??= extractUrlParams(this) as P);\n\t}\n\t\n\t#query?: RequestQueryParams;\n\t\n\t/** Params parsed from the query string part of the URL string */\n\tget query() {\n\t\treturn (this.#query ??= extractQueryParams(this));\n\t}\n\t\n\t#body?: RequestBody;\n\t\n\t/** Object with async methods to get the request body */\n\tget body() {\n\t\treturn (this.#body ??= new RequestBody(this));\n\t}\n\t\n}\n", "export const serverSymbol = Symbol(\"server\");\nexport const requestSymbol = Symbol(\"request\");\nexport const matchSymbol = Symbol(\"match\");\n", "import { matchSymbol } from \"./symbols\";\nimport type { Request } from \"./Request\";\nimport type { RequestParams, RequestQueryParams } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nconst pathRegExp = /\\/(?:(\\*)|:([^/?]+)(\\?(.*))?)/g;\n\nfunction subPathToRegExpSource(path: string, index = 0): string {\n\treturn path.replaceAll(pathRegExp, (_, wildcard, param, optional, subPath) => {\n\t\tif (wildcard)\n\t\t\treturn `/(?<__${index++}>.*?)`;\n\t\t\n\t\tconst group = `/(?<${param}>[^/]+)`;\n\t\t\n\t\treturn optional ?\n\t\t\t`(?:${group}${subPath ? subPathToRegExpSource(subPath, index) : \"\"})?` :\n\t\t\tgroup;\n\t});\n}\n\nexport function pathToRegExp(path: string) {\n\treturn new RegExp(`^${subPathToRegExpSource(path)}/?$`);\n}\n\n\nconst wildcardKeyRegExp = /^__/;\n\nexport function extractUrlParams(request: Request<any>): RequestParams {\n\tif (request[matchSymbol]) {\n\t\tconst match = request[matchSymbol];\n\t\tdelete request[matchSymbol];\n\t\t\n\t\tconst params = [ undefined, ...match.slice(1) ] as RequestParams;\n\t\t\n\t\tif (match.groups)\n\t\t\tfor (const [ key, value ] of Object.entries(match.groups))\n\t\t\t\tparams[key.replace(wildcardKeyRegExp, \"\")] = value;\n\t\t\n\t\treturn params;\n\t}\n\t\n\treturn [] as unknown as RequestParams;\n}\n\n\nexport function extractQueryParams(request: Request<any>): RequestQueryParams {\n\treturn request.querystring?.split(\"&\").reduce((queryParams, pair) => {\n\t\tconst [ key, value ] = pair.split(\"=\");\n\t\t\n\t\tqueryParams[key] = decodeURIComponent(value || \"\");\n\t\t\n\t\treturn queryParams;\n\t}, {} as RequestQueryParams) ?? {};\n}\n", "import { OutgoingHttpHeader, OutgoingHttpHeaders, ServerResponse } from \"node:http\";\nimport { Readable } from \"node:stream\";\nimport { requestSymbol, serverSymbol } from \"./symbols\";\nimport type { Request } from \"./Request\";\nimport type { HTTPServer } from \"./Server\";\nimport type { ErrorParams } from \"./types\";\n\n\nexport class Response extends ServerResponse<Request> {\n\t\n\t[serverSymbol]!: HTTPServer;\n\t[requestSymbol]!: Request;\n\t\n\t/** End response with a plain text */\n\ttext(body: string) {\n\t\treturn this.writeHead(200, {\n\t\t\t\"Content-Type\": \"text/plain; charset=utf-8\",\n\t\t\t\"Content-Length\": Buffer.byteLength(body)\n\t\t}).end(body);\n\t}\n\t\n\t/** End response with a JSON string */\n\tjson(value: Parameters<JSON[\"stringify\"]>[0]) {\n\t\tconst body = JSON.stringify(value);\n\t\t\n\t\treturn this.writeHead(200, {\n\t\t\t\"Content-Type\": \"application/json; charset=utf-8\",\n\t\t\t\"Content-Length\": Buffer.byteLength(body)\n\t\t}).end(body);\n\t}\n\t\n\t/** End response with an URL-encoded string */\n\turlEncoded(params: ConstructorParameters<typeof URLSearchParams>[0]) {\n\t\tconst body = new URLSearchParams(params).toString();\n\t\t\n\t\treturn this.writeHead(200, {\n\t\t\t\"Content-Type\": \"application/x-www-form-urlencoded; charset=utf-8\",\n\t\t\t\"Content-Length\": Buffer.byteLength(body)\n\t\t}).end(body);\n\t}\n\t\n\t/** End response with a stream */\n\tstream(stream: Readable, headers?: OutgoingHttpHeader[] | OutgoingHttpHeaders) {\n\t\tthis.writeHead(200, headers);\n\t\t\n\t\treturn stream.pipe(this);\n\t}\n\t\n\t// TODO:\n\t// messagePack() {\n\t// }\n\t\n\t/** End response with an error */\n\terror(statusCode: number, params?: ErrorParams | string) {\n\t\treturn this[serverSymbol]._throw(this, statusCode, params);\n\t}\n\t\n\t/** End response with the 400 Bad Request */\n\tbadRequest(params?: ErrorParams | string) {\n\t\treturn this.error(400, params);\n\t}\n\t\n\t/** End response with the 401 Unauthorized */\n\tunauthorized(params?: ErrorParams | string) {\n\t\treturn this.error(401, params);\n\t}\n\t\n\t/** End response with the 403 Forbidden */\n\tforbidden(params?: ErrorParams | string) {\n\t\treturn this.error(403, params);\n\t}\n\t\n\t/** End response with the 404 Not Found */\n\tnotFound(params?: ErrorParams | string) {\n\t\treturn this.error(404, params);\n\t}\n\t\n\t/** End response with the 408 Request Timeout */\n\trequestTimeout(params?: ErrorParams | string) {\n\t\treturn this.error(408, params);\n\t}\n\t\n\t/** End response with the 410 Gone */\n\tgone(params?: ErrorParams | string) {\n\t\treturn this.error(410, params);\n\t}\n\t\n\t/** End response with the 500 Internal Server Error */\n\tinternalServerError(params?: ErrorParams | string) {\n\t\treturn this.error(500, params);\n\t}\n\t\n\t/** End response with the 503 Service Unavailable */\n\tserviceUnavailable(params?: ErrorParams | string) {\n\t\treturn this.error(503, params);\n\t}\n\t\n}\n", "import type http from \"node:http\";\nimport type https from \"node:https\";\nimport type { ClassMiddleware } from \"./Middleware\";\nimport type { Request } from \"./Request\";\nimport type { Response } from \"./Response\";\n\n\nconst METHODS = [ \"DELETE\", \"GET\", \"PATCH\", \"POST\", \"PUT\" ] as const;\n\n\nexport type ErrorParams = {\n\theaders?: http.OutgoingHttpHeader[] | http.OutgoingHttpHeaders;\n\tcontent: string;\n\thandler?(request: Request, response: Response, errorParams: Omit<ErrorParams, \"handler\"> & { statusCode: number }): Response;\n};\n\nexport type Method = typeof METHODS[number];\n\nexport function isMethod(string: string): string is Method | \"ALL\" {\n\treturn METHODS.includes(string as Method) || string === \"ALL\";\n}\n\nexport type Handler = (request: Request, response: Response) => unknown;\n\nexport type Listener = [ RegExp, Handler ];\n\nexport type Options = {\n\tssl?: {\n\t\tcert: Buffer | string;\n\t\tkey: Buffer | string;\n\t};\n\tport?: number | string;\n\thttps?: boolean;\n\tlisteners?: Partial<Record<Method | \"ALL\", Listener[]>>;\n\terrors?: Record<\"default\" | number, ErrorParams>;\n\tserver?: http.Server | http.ServerOptions | https.Server | https.ServerOptions;\n};\n\nexport type RegExpOrString = RegExp | string;\n\nexport type RequestParams = Record<string, string> & [ undefined, ...string[] ];\n\nexport type RequestQueryParams = Record<string, string>;\n\nexport type Middleware = {\n\t[K: string]: Handler | Middleware;\n} | {\n\t[K: {} & string]: Handler | Middleware;\n} | {\n\t[K in Method | \"ALL\"]?: Middleware;\n};\n\nexport type TupleMiddleware = readonly [ Method, RegExpOrString, Handler ] | readonly [ RegExpOrString, Handler ];\n\nexport type GenericMiddleware =\n\tClassMiddleware |\n\tMiddleware |\n\tTupleMiddleware |\n\tTupleMiddleware[];\n\nexport function isTupleMiddlewareOrArray(middleware: GenericMiddleware): middleware is TupleMiddleware | TupleMiddleware[] {\n\treturn Array.isArray(middleware);\n}\n\nexport function isTupleMiddleware(middleware: TupleMiddleware | TupleMiddleware[]): middleware is TupleMiddleware {\n\treturn !Array.isArray(middleware);\n}\n\nexport function isRequestMethodAccepted(requestMethod: string | undefined, listeners: Record<string, unknown>): requestMethod is Method {\n\treturn Boolean(requestMethod && listeners[requestMethod]);\n}\n\nexport function isServerServer(serverOrOptions: Options[\"server\"]): serverOrOptions is http.Server | https.Server {\n\treturn !!serverOrOptions && \"emit\" in serverOrOptions;\n}\n", "import { StaticMiddleware, StaticMiddlewareOptions } from \"./middlewares/Static\";\nimport { HTTPServer } from \"./Server\";\nimport { GenericMiddleware, Options } from \"./types\";\n\n\nexport class StaticServer extends HTTPServer {\n\tconstructor(options: StaticMiddlewareOptions, serverOptions: Options, middlewares: GenericMiddleware[] = []) {\n\t\tsuper(serverOptions, [\n\t\t\tnew StaticMiddleware(options),\n\t\t\t...middlewares\n\t\t]);\n\t\t\n\t}\n\t\n\tname = \"Static\";\n\ticon = \"\uD83D\uDED2\";\n\t\n}\n"],
5
- "mappings": "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",
6
- "names": ["ClassMiddleware", "InitialsMiddleware", "fs", "path", "zlib", "brotliPreloadOptions", "brotliRuntimeOptions", "gzipPreloadOptions", "gzipRuntimeOptions", "brotliPreloadSync", "data", "gzipPreloadSync", "getCompressionStreamByEncoding", "contentEncoding", "handleRequestCompressed", "request", "response", "headers", "isBrotliAccepted", "defaultExtensions", "defaultPreloaded", "nullExtension", "StaticMiddleware", "ClassMiddleware", "src", "urlPrefix", "requestRegExp", "extensions", "defaultExtensions", "resolved", "restricted", "preloaded", "path", "entryPoint", "fs", "#src", "#urlPrefix", "#urlPrefixRegExp", "extension", "#addExtension", "resolvee", "#resolve", "fileName", "#restrict", "defaultPreloaded", "#preload", "#handler", "#extensions", "#resolved", "#restricted", "#preloaded", "#getExtensionBy", "name", "url", "isText", "fileData", "brotliPreloadSync", "gzipPreloadSync", "error", "request", "response", "mimeType", "contentEncoding", "resolve", "stream", "getCompressionStreamByEncoding", "noop", "debounce", "callback", "limit", "options", "leading", "trailing", "maxWait", "timeout", "maxWaitTimeout", "end", "context", "args", "initial", "final", "result", "expired", "n", "debounced", "maxWaitExpired", "run", "_args", "resolve", "noop", "shouldRun", "isEmpty", "object", "_", "howmuch", "number", "one", "two", "five", "shouldPrintNumber", "u", "d", "INSITE_TITLE", "envGlobals", "key", "headers", "TemplateMiddleware", "ClassMiddleware", "requestRegExp", "globals", "title", "css", "rootId", "#handler", "#title", "#css", "#rootId", "#html", "fileName", "isEmpty", "request", "response", "handleRequestCompressed", "createServer", "resolveSSL", "showServerListeningMessage", "IncomingMessage", "querystring", "serverSymbol", "requestSymbol", "matchSymbol", "pathRegExp", "subPathToRegExpSource", "path", "index", "_", "wildcard", "param", "optional", "subPath", "group", "pathToRegExp", "wildcardKeyRegExp", "extractUrlParams", "request", "matchSymbol", "match", "params", "key", "value", "extractQueryParams", "queryParams", "pair", "matches", "request", "regExp", "match", "matchSymbol", "RequestBody", "#request", "#text", "resolve", "reject", "text", "chunk", "querystring", "Request", "IncomingMessage", "field", "value", "first", "#params", "extractUrlParams", "#query", "extractQueryParams", "#body", "ServerResponse", "Response", "ServerResponse", "serverSymbol", "requestSymbol", "body", "value", "params", "stream", "headers", "statusCode", "METHODS", "isMethod", "string", "isTupleMiddlewareOrArray", "middleware", "isTupleMiddleware", "isRequestMethodAccepted", "requestMethod", "listeners", "isServerServer", "serverOrOptions", "HTTPServer", "_HTTPServer", "port", "ssl", "listeners", "errors", "server", "middlewares", "isServerServer", "resolve", "showServerListeningMessage", "createServer", "method", "methodListeners", "regExp", "handler", "statusCodeString", "statusCode", "#errors", "middleware", "#requestListener", "#listeners", "request", "response", "serverSymbol", "requestSymbol", "isRequestMethodAccepted", "matches", "headers", "content", "params", "restParams", "pathToRegExp", "specificMethod", "ClassMiddleware", "regExpOrStringArrayMap", "regExpOrString", "isTupleMiddlewareOrArray", "isTupleMiddleware", "#parseMappedMiddleware", "prefix", "key", "value", "isMethod", "resolveSSL", "Request", "Response", "StaticServer", "HTTPServer", "options", "serverOptions", "middlewares", "StaticMiddleware"]
4
+ "sourcesContent": ["import { HTTPServer } from \"./Server\";\nimport { Handler, Method, RegExpOrString } from \"./types\";\n\n\nexport class ClassMiddleware {\n\tlisteners!: Partial<Record<Method, [ RegExpOrString, Handler ][]>>;\n\tbindTo?(server: HTTPServer): void;\n}\n", "//#if _SERVER && _SSR\n// import { initialsMap } from \"@insite/subscriptions\";\n// import { handleRequestCompressed } from \"../compression\";\n// import { Middleware } from \"../Middleware\";\n\n\n// const headers = { \"Content-Type\": \"text/javascript; charset=utf-8\" };\n\n\n// export class InitialsMiddleware extends Middleware {\n// \tconstructor(options = {}) {\n// \t\tsuper();\n// \t\tconst {\n// \t\t\tpath = \"/initials\"\n// \t\t} = options;\n\n// \t\tthis.listeners = {\n// \t\t\tGET: [ [ path, this.handler ] ]\n// \t\t};\n\n// \t}\n\n// \thandler = (request, response) => {\n// \t\tconst initials = initialsMap.getWithTimeout(request.url.split(\"?\")[1]);\n\n// \t\tif (initials)\n// \t\t\thandleRequestCompressed(request, response, headers, `window.__initials = [${initials.join()}];\\ndocument.currentScript.remove();`);\n// \t\telse\n// \t\t\treturn false;\n// \t};\n\n// }\n\n\n//#else\nexport const InitialsMiddleware = undefined;\n\n\n//#endif\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport { brotliPreloadSync, getCompressionStreamByEncoding, gzipPreloadSync } from \"../../compression\";\nimport { ClassMiddleware } from \"../../Middleware\";\nimport type { Handler } from \"../../types\";\nimport { defaultExtensions } from \"./extensions\";\nimport { defaultPreloaded } from \"./preloaded\";\nimport type { Extension, Options } from \"./types\";\n\n\nconst nullExtension = {\n\tmimeType: \"application/octet-stream\"\n};\n\n\nexport class StaticMiddleware extends ClassMiddleware {\n\tconstructor({\n\t\tsrc = \"public\",\n\t\turlPrefix = \"\",\n\t\tpath: _path,\n\t\textensions = defaultExtensions,\n\t\tresolved,\n\t\trestricted,\n\t\tpreloaded = \"default\"\n\t}: Options = {}) {\n\t\tsuper();\n\t\t\n\t\tif (!path.isAbsolute(src)) {\n\t\t\tconst [ , entryPoint ] = process.argv;\n\t\t\tsrc = path.resolve(fs.statSync(entryPoint).isDirectory() ? entryPoint : path.dirname(entryPoint), src);\n\t\t}\n\t\t\n\t\tthis.#src = src;\n\t\tthis.#urlPrefix = urlPrefix;\n\t\tthis.#urlPrefixRegExp = new RegExp(`^${path.join(\"/\", urlPrefix, \"/\")}`);\n\t\t\n\t\tif (extensions)\n\t\t\tfor (const extension of extensions)\n\t\t\t\tif (extension)\n\t\t\t\t\tthis.#addExtension(...extension);\n\t\t\n\t\tif (resolved)\n\t\t\tfor (const resolvee of resolved)\n\t\t\t\tif (resolvee)\n\t\t\t\t\tthis.#resolve(...resolvee);\n\t\t\n\t\tif (restricted)\n\t\t\tfor (const fileName of restricted)\n\t\t\t\tif (fileName)\n\t\t\t\t\tthis.#restrict(fileName);\n\t\t\n\t\tif (preloaded) {\n\t\t\tif (preloaded === \"default\")\n\t\t\t\tpreloaded = defaultPreloaded;\n\t\t\t\n\t\t\tfor (const fileName of preloaded)\n\t\t\t\tif (fileName)\n\t\t\t\t\tthis.#preload(fileName);\n\t\t}\n\t\t\n\t\tthis.listeners = {\n\t\t\tGET: [ [ _path ?? new RegExp(`^${path.join(\"/\", this.#urlPrefix, \"/\")}(\\\\w[^\\\\/]*/)*[^\\\\/]+\\\\.[^\\\\/]`), this.#handler ] ]\n\t\t};\n\t\t\n\t}\n\t\n\t#src;\n\t#urlPrefix;\n\t#urlPrefixRegExp;\n\t\n\t#extensions = new Map();\n\t\n\t#resolved = new Map();\n\t\n\t#restricted = new Set();\n\t\n\t#preloaded = new Map();\n\t\n\t#getExtensionBy(fileName: string) {\n\t\treturn this.#extensions.get(fileName.slice(Math.max(0, fileName.lastIndexOf(\".\") + 1))) ?? nullExtension;\n\t}\n\t\n\t#addExtension(name: string, extension: Extension[1]) {\n\t\tthis.#extensions.set(name, { ...extension, name });\n\t\t\n\t}\n\t\n\t#resolve(url: string, fileName: string) {\n\t\tthis.#resolved.set(url, path.isAbsolute(fileName) ? fileName : path.join(this.#src, fileName));\n\t\t\n\t}\n\t\n\t#restrict(fileName: string) {\n\t\tthis.#restricted.add(path.join(this.#src, fileName));\n\t\t\n\t}\n\t\n\t#preload(fileName: string) {\n\t\tfileName = this.#resolved.get(fileName) ?? path.join(this.#src, fileName);\n\t\t\n\t\ttry {\n\t\t\tconst { isText } = this.#getExtensionBy(fileName);\n\t\t\tconst fileData = fs.readFileSync(fileName, isText ? \"utf8\" : null);\n\t\t\tthis.#preloaded.set(fileName, isText ? {\n\t\t\t\tbr: brotliPreloadSync(fileData),\n\t\t\t\tgzip: gzipPreloadSync(fileData)\n\t\t\t} : fileData);\n\t\t} catch (error) {\n\t\t\tconsole.warn(`\u26A0\uFE0F inSite Static Server: Unable to preload ${fileName}`, \"\\n\", error);\n\t\t}\n\t\t\n\t}\n\t\n\t#handler: Handler = (request, response) => {\n\t\tlet fileName = decodeURI(request.url).replace(this.#urlPrefixRegExp, \"\").replaceAll(\"../\", \"\");\n\t\tfileName = this.#resolved.get(fileName) ?? path.join(this.#src, fileName);\n\t\t\n\t\tif (this.#restricted.has(fileName))\n\t\t\treturn false;\n\t\t\n\t\tif (!fs.existsSync(fileName))\n\t\t\treturn response.notFound();\n\t\t\n\t\tconst { mimeType, isText } = this.#getExtensionBy(fileName);\n\t\tconst contentEncoding = isText ? /\\bbr\\b/.test(request.headers[\"accept-encoding\"] as string) ? \"br\" : \"gzip\" : null;\n\t\t\n\t\tresponse.writeHead(200, {\n\t\t\t\"Content-Type\": mimeType + (isText ? \"; charset=utf-8\" : \"\"),\n\t\t\t...contentEncoding && { \"Content-Encoding\": contentEncoding }\n\t\t});\n\t\t\n\t\tconst preloaded = this.#preloaded.get(fileName);\n\t\t\n\t\tif (preloaded)\n\t\t\treturn response.end(isText && contentEncoding ? preloaded[contentEncoding] : preloaded);\n\t\t\n\t\treturn new Promise(resolve => {\n\t\t\tlet stream: Readable = fs.createReadStream(fileName).on(\"error\", () => resolve(false));\n\t\t\t\n\t\t\tif (contentEncoding)\n\t\t\t\tstream = stream.pipe(getCompressionStreamByEncoding(contentEncoding));\n\t\t\t\n\t\t\tstream.on(\"end\", resolve);\n\t\t\t\n\t\t\tstream.pipe(response);\n\t\t\t\n\t\t});\n\t};\n\t\n}\n", "import zlib, { type InputType } from \"node:zlib\";\nimport type { OutgoingHttpHeaders } from \"node:http\";\nimport type { Request } from \"./Request\";\nimport type { Response } from \"./Response\";\n\n\nconst brotliPreloadOptions = {\n\tparams: {\n\t\t[zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n\t\t[zlib.constants.BROTLI_PARAM_QUALITY]: 11\n\t}\n};\n\nconst brotliRuntimeOptions = {\n\tparams: {\n\t\t[zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n\t\t[zlib.constants.BROTLI_PARAM_QUALITY]: 4\n\t}\n};\n\nconst gzipPreloadOptions = {\n\tlevel: 9\n};\n\nconst gzipRuntimeOptions = {\n\tlevel: 3\n};\n\n\nexport function brotliPreloadSync(data: InputType) {\n\treturn zlib.brotliCompressSync(data, brotliPreloadOptions);\n}\n\nexport function gzipPreloadSync(data: InputType) {\n\treturn zlib.gzipSync(data, gzipPreloadOptions);\n}\n\nexport function getCompressionStreamByEncoding(contentEncoding: \"br\" | \"gzip\") {\n\treturn contentEncoding === \"br\" ? zlib.createBrotliCompress(brotliRuntimeOptions) : zlib.createGzip(gzipRuntimeOptions);\n}\n\nexport function handleRequestCompressed(request: Request, response: Response, headers: OutgoingHttpHeaders, data: InputType) {\n\tconst isBrotliAccepted = /\\bbr\\b/.test(request.headers[\"accept-encoding\"] as string);\n\theaders[\"Content-Encoding\"] = isBrotliAccepted ? \"br\" : \"gzip\";\n\tresponse.writeHead(200, headers).end(isBrotliAccepted ? zlib.brotliCompressSync(data, brotliRuntimeOptions) : zlib.gzipSync(data, gzipRuntimeOptions));\n\t\n}\n", "import { Extension } from \"./types\";\n\n\nexport const defaultExtensions = [\n\t\n\t[ \"js\", {\n\t\tisText: true,\n\t\tmimeType: \"text/javascript\"\n\t} ],\n\t\n\t[ \"css\", {\n\t\tisText: true,\n\t\tmimeType: \"text/css\"\n\t} ],\n\t\n\t[ \"ico\", {\n\t\tmimeType: \"image/x-icon\"\n\t} ],\n\t\n\tprocess.env.NODE_ENV === \"development\" ? [ \"css.map\", {\n\t\tisText: true,\n\t\tmimeType: \"application/json\"\n\t} ] : null,\n\t\n\tprocess.env.NODE_ENV === \"development\" ? [ \"js.map\", {\n\t\tisText: true,\n\t\tmimeType: \"application/json\"\n\t} ] : null,\n\t\n\t[ \"jpg\", {\n\t\tmimeType: \"image/jpeg\"\n\t} ],\n\t\n\t[ \"jpeg\", {\n\t\tmimeType: \"image/jpeg\"\n\t} ]\n\t\n].filter(Boolean) as Extension[];\n", "export const defaultPreloaded = [\n\t...process.env.NODE_ENV === \"production\" ? [\n\t\t//#if _SSR\n\t\t// \"/index.css\",\n\t\t//#endif\n\t\t\"/index.js\",\n\t\t\"/favicon.ico\"\n\t] : []\n];\n", "export function noop() { /**/ }\n", "import { noop } from \"./noop.js\";\n\n\ntype Callback<Result> = (...args: unknown[]) => Result;\ntype FunctionOrBoolean = (() => unknown) | boolean;\ntype Options = { leading?: FunctionOrBoolean; maxWait?: number; trailing?: FunctionOrBoolean };\ntype NumberOrUndefined = number | undefined;\n\ntype DebouncedFunction<Result> = {\n\t(this: unknown, ..._args: unknown[]): Promise<Result>;\n};\n\nexport type Debounced<Result> = {\n\tcallback: Callback<Result>;\n\tpromise: {\n\t\tisResolved: boolean;\n\t} & Promise<unknown>;\n\tresolve: (value: Result) => void;\n\trun(): Promise<Result>;\n\tclear(shouldRun?: boolean): Promise<void>;\n} & DebouncedFunction<Result>;\n\n\nexport function debounce<Result>(callback: Callback<Result>, limit = 0, options: Options = {}) {\n\tlet { leading = false, trailing = true } = options;\n\tconst { maxWait = Infinity } = options;\n\t\n\tlet timeout: NumberOrUndefined;\n\tlet maxWaitTimeout: NumberOrUndefined;\n\tlet end: NumberOrUndefined;\n\tlet context: unknown;\n\tlet args: unknown[];\n\tlet initial: FunctionOrBoolean;\n\tlet final: FunctionOrBoolean;\n\tlet result: Result;\n\t\n\tconst expired = async () => {\n\t\t\n\t\tconst n = Date.now();\n\t\t\n\t\tif (n >= end!) {\n\t\t\ttimeout = undefined;\n\t\t\tend = undefined;\n\t\t\tclearTimeout(maxWaitTimeout);\n\t\t\tif (typeof final == \"function\")\n\t\t\t\tawait final();\n\t\t\tdebounced.resolve(result);\n\t\t\tdebounced.promise.isResolved = true;\n\t\t\tinitial = leading;\n\t\t} else {\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = setTimeout(expired, end! - n);\n\t\t}\n\t\t\n\t};\n\t\n\tconst maxWaitExpired = Number.isFinite(maxWait) ? () => {\n\t\t\n\t\tif (final === run)\n\t\t\tfinal = false;\n\t\trun();\n\t\tmaxWaitTimeout = setTimeout(maxWaitExpired as TimerHandler, maxWait);\n\t\t\n\t} : null;\n\t\n\tasync function run() {\n\t\treturn (result = await callback.apply(context, args));\n\t}\n\t\n\tif (leading && typeof leading == \"boolean\")\n\t\tleading = run;\n\tinitial = leading;\n\t\n\tif (trailing && typeof trailing == \"boolean\")\n\t\ttrailing = run;\n\tfinal = trailing;\n\t\n\tconst debounced: Debounced<Result> = Object.assign(function (..._args) {\n\t\targs = _args;\n\t\tcontext = this;// eslint-disable-line no-invalid-this\n\t\t\n\t\tend = Date.now() + limit;\n\t\tfinal = trailing;\n\t\t\n\t\tif (debounced.promise.isResolved)\n\t\t\tdebounced.promise = Object.assign(new Promise(resolve => {\n\t\t\t\tdebounced.resolve = resolve;\n\t\t\t\t\n\t\t\t\tif (typeof initial == \"function\") {\n\t\t\t\t\tinitial();\n\t\t\t\t\tinitial = false;\n\t\t\t\t\tif (final === run)\n\t\t\t\t\t\tfinal = false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!timeout) {\n\t\t\t\t\ttimeout = setTimeout(expired, limit);\n\t\t\t\t\tif (maxWaitExpired)\n\t\t\t\t\t\tmaxWaitTimeout = setTimeout(maxWaitExpired, maxWait);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}), {\n\t\t\t\tisResolved: false\n\t\t\t});\n\t\t\n\t\treturn debounced.promise;\n\t} as DebouncedFunction<Result>, {\n\t\tcallback,\n\t\tpromise: Object.assign(Promise.resolve(), {\n\t\t\tisResolved: true\n\t\t}),\n\t\tresolve: noop,\n\t\trun,\n\t\tclear: async (shouldRun?: boolean) => {\n\t\t\t\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = undefined;\n\t\t\t\n\t\t\tclearTimeout(maxWaitTimeout);\n\t\t\t\n\t\t\tdebounced.promise.isResolved = true;\n\t\t\tdebounced.resolve(shouldRun ? await run() : result);\n\t\t\t\n\t\t}\n\t});\n\t\n\treturn debounced;\n}\n\n\ndebounce.noop = Object.assign(() => { /**/ }, {\n\tcallback: noop,\n\tpromise: Object.assign(Promise.resolve(), {\n\t\tisResolved: true\n\t}),\n\tresolve: noop,\n\trun: noop,\n\tclear: noop\n}) as unknown as Debounced<void>;\n\n\nexport function throttle<Result>(callback: Callback<Result>, limit?: number, options?: Options) {\n\treturn debounce(callback, limit, {\n\t\tmaxWait: limit,\n\t\tleading: true,\n\t\ttrailing: true,\n\t\t...options\n\t});\n}\n", "export function isEmpty(object: object) {\n\tfor (const _ in object)// eslint-disable-line guard-for-in, no-unreachable-loop\n\t\treturn false;\n\t\n\treturn true;\n}\n", "export function howmuch(number: [] | number, one: string, two: string, five: boolean | string, shouldPrintNumber = true) {\n\tif (Array.isArray(number))\n\t\tnumber = number.length;\n\t\n\tif (typeof five != \"string\") {\n\t\tshouldPrintNumber = five ?? true;\n\t\tfive = two;\n\t}\n\t\n\t\n\treturn (shouldPrintNumber ? `${number}\u00A0` : \"\") + howmuch.raw(number, one, two, five);\n}\n\nhowmuch.raw = (number: number, one: string, two: string, five = two) => {\n\tnumber = Math.abs(number);\n\tconst u = number % 10;\n\tconst d = number % 100;\n\t\n\treturn (\n\t\t(u === 1 && d !== 11) ?\n\t\t\tone :\n\t\t\t((u >= 2 && u <= 4) && !(d >= 12 && d <= 15)) ?\n\t\t\t\ttwo :\n\t\t\t\tfive\n\t);\n};\n", "import { isEmpty } from \"@nesvet/n\";\nimport { handleRequestCompressed } from \"../compression\";\nimport { ClassMiddleware } from \"../Middleware\";\nimport { Handler } from \"../types\";\n\n\nconst { INSITE_TITLE } = process.env;\n\nconst envGlobals: Record<string, unknown> = {};\nfor (const key in process.env)\n\tif (key.startsWith(\"INSITE_CLIENT_\"))\n\t\tenvGlobals[key.replace(/INSITE_CLIENT_/, \"\").toLowerCase()] = process.env[key];\n\nconst headers = { \"Content-Type\": \"text/html; charset=utf-8\" };\n\n\ntype Options = {\n\tpath?: RegExp;\n\tglobals?: Record<string, unknown>;\n\ttitle?: string;\n\tcss?: string[] | string;\n\trootId?: string;\n};\n\nexport type { Options as TemplateMiddlewareOptions };\n\n\nexport class TemplateMiddleware extends ClassMiddleware {\n\tconstructor({\n\t\tpath = /.*/,\n\t\tglobals = {},\n\t\ttitle = INSITE_TITLE ?? \"inSite\",\n\t\tcss = [],\n\t\trootId = \"root\"\n\t}: Options = {}) {\n\t\tsuper();\n\t\t\n\t\tthis.listeners = {\n\t\t\tGET: [ [ path, this.#handler ] ]\n\t\t};\n\t\t\n\t\tthis.#title = title;\n\t\tthis.#css = Array.isArray(css) ? css : [ css ];\n\t\tthis.#rootId = rootId;\n\t\t\n\t\tObject.assign(globals, envGlobals);\n\t\t\n\t\tthis.#html =\n\t\t\t\"<!DOCTYPE html>\" +\n\t\t\t\"<html lang=\\\"ru\\\">\" +\n\t\t\t\"<head>\" +\n\t\t\t\"<meta charset=\\\"utf-8\\\" />\" +\n\t\t\t\"<meta name=\\\"viewport\\\" content=\\\"minimum-scale=1, initial-scale=1, width=device-width\\\" />\" +\n\t\t\t`<title>${this.#title}</title>` +\n\t\t\t`${this.#css.map(fileName => `<link rel=\"stylesheet\" href=\"${fileName}\" />`).join(\"\")}` +\n\t\t\t`${isEmpty(globals) ? \"\" : `<script>globalThis.__insite=${JSON.stringify(globals)};</script>`}` +\n\t\t\t\"<script type=\\\"text/javascript\\\" src=\\\"/index.js\\\" defer></script>\" +\n\t\t\t\"</head>\" +\n\t\t\t\"<body>\" +\n\t\t\t`<div id=\"${this.#rootId}\">` +\n\t\t\t\"</div>\" +\n\t\t\t\"</body>\" +\n\t\t\t\"</html>\";\n\t\t\n\t}\n\t\n\t#title;\n\t#css;\n\t#rootId;\n\t#html;\n\t\n\t#handler: Handler = (request, response) =>\n\t\thandleRequestCompressed(request, response, headers, this.#html);\n\t\n}\n", "import type http from \"node:http\";\nimport type https from \"node:https\";\nimport { createServer, resolveSSL, showServerListeningMessage } from \"insite-common/backend\";\nimport { ClassMiddleware } from \"./Middleware\";\nimport { matches, Request } from \"./Request\";\nimport { Response } from \"./Response\";\nimport { requestSymbol, serverSymbol } from \"./symbols\";\nimport {\n\tisMethod,\n\tisRequestMethodAccepted,\n\tisServerServer,\n\tisTupleMiddleware,\n\tisTupleMiddlewareOrArray,\n\tMiddleware,\n\ttype ErrorParams,\n\ttype GenericMiddleware,\n\ttype Handler,\n\ttype Listener,\n\ttype Method,\n\ttype Options,\n\ttype RegExpOrString\n} from \"./types\";\nimport { pathToRegExp } from \"./utils\";\n\n\nexport class HTTPServer {\n\tconstructor({\n\t\tport,\n\t\tssl,\n\t\tlisteners,\n\t\terrors,\n\t\tserver\n\t}: Options, middlewares: (GenericMiddleware | false | null | undefined)[] = []) {\n\t\t\n\t\tif (isServerServer(server)) {\n\t\t\tthis.server = server;\n\t\t\t\n\t\t\tnew Promise<void>(resolve => void (\n\t\t\t\tserver.listening ?\n\t\t\t\t\tresolve() :\n\t\t\t\t\tserver.on(\"listening\", resolve)\n\t\t\t)).then(() => showServerListeningMessage(this));\n\t\t\t\n\t\t} else {\n\t\t\tthis.server = createServer(HTTPServer.makeProps({ ssl, server }));\n\t\t\t\n\t\t\tthis.server.listen(\n\t\t\t\ttypeof port == \"string\" ?\n\t\t\t\t\tNumber.parseInt(port) :\n\t\t\t\t\tport ?? (this.isS ? 443 : 80),\n\t\t\t\t() => showServerListeningMessage(this)\n\t\t\t);\n\t\t}\n\t\t\n\t\tif (listeners)\n\t\t\tfor (const [ method, methodListeners ] of Object.entries(listeners) as [ Method | \"ALL\", Listener[] ][])\n\t\t\t\tfor (const [ regExp, handler ] of methodListeners)\n\t\t\t\t\tthis.addRequestListener(method, regExp, handler);\n\t\t\n\t\tif (errors)\n\t\t\tfor (const statusCodeString of Object.keys(errors)) {\n\t\t\t\tconst statusCode = Number.parseInt(statusCodeString);\n\t\t\t\tif (statusCode)\n\t\t\t\t\tif (this.#errors[statusCode])\n\t\t\t\t\t\tObject.assign(this.#errors[statusCode], errors[statusCode]);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.#errors[statusCode] = errors[statusCode];\n\t\t\t}\n\t\t\n\t\tif (middlewares)\n\t\t\tfor (const middleware of middlewares)\n\t\t\t\tif (middleware)\n\t\t\t\t\tthis.addMiddleware(middleware);\n\t\t\n\t\tthis.server.on(\"request\", this.#requestListener);\n\t\t\n\t}\n\t\n\t/** Server icon */\n\ticon = \"\uD83D\uDD78\uFE0F \";\n\t\n\t/** Server name */\n\tname = \"HTTP\";\n\tget protocol() {\n\t\treturn `http${this.isS ? \"s\" : \"\"}`;\n\t}\n\t\n\t/** Node.js http(s) server object */\n\tserver;\n\t\n\t/** Does the server use SSL */\n\tget isS() {\n\t\treturn \"setSecureContext\" in this.server;\n\t}\n\t\n\t#listeners: Record<Method, Listener[]> = {\n\t\tPOST: [],\n\t\tGET: [],\n\t\tPUT: [],\n\t\tPATCH: [],\n\t\tDELETE: []\n\t};\n\t\n\t#requestListener: Handler = async (request, response) => {\n\t\tresponse[serverSymbol] = this;\n\t\tresponse[requestSymbol] = request;\n\t\t\n\t\tif (!(\"status\" in request) && isRequestMethodAccepted(request.method, this.#listeners))\n\t\t\tfor (const [ regExp, handler ] of this.#listeners[request.method])\n\t\t\t\tif (matches(request, regExp) && await handler(request, response) !== false)\n\t\t\t\t\treturn;\n\t\t\n\t\tresponse.notFound();\n\t\t\n\t};\n\t\n\t#errors: Record<\"default\" | number, ErrorParams> = {\n\t\t400: {\n\t\t\tcontent: \"Bad Request\"\n\t\t},\n\t\t401: {\n\t\t\tcontent: \"Unauthorized\"\n\t\t},\n\t\t403: {\n\t\t\tcontent: \"Forbidden\"\n\t\t},\n\t\t404: {\n\t\t\tcontent: \"Not Found\"\n\t\t},\n\t\t408: {\n\t\t\tcontent: \"Request Timeout\"\n\t\t},\n\t\t410: {\n\t\t\tcontent: \"Gone\"\n\t\t},\n\t\t500: {\n\t\t\tcontent: \"Internal Server Error\"\n\t\t},\n\t\t503: {\n\t\t\tcontent: \"Service Unavailable\"\n\t\t},\n\t\tdefault: {\n\t\t\theaders: { \"Content-Type\": \"text/plain; charset=utf-8\" },\n\t\t\tcontent: \"\",\n\t\t\thandler(request, response, { statusCode, headers, content }) {\n\t\t\t\treturn response.writeHead(statusCode, headers).end(content);\n\t\t\t}\n\t\t}\n\t};\n\t\n\t_throw(response: Response, statusCode: number, params?: ErrorParams | string) {\n\t\tif (typeof params == \"string\")\n\t\t\tparams = { content: params };\n\t\t\n\t\tconst {\n\t\t\thandler,\n\t\t\t...restParams\n\t\t} = {\n\t\t\t...this.#errors.default,\n\t\t\t...this.#errors[statusCode],\n\t\t\t...params\n\t\t};\n\t\t\n\t\treturn handler ? handler(response[requestSymbol], response, {\n\t\t\t...restParams,\n\t\t\tstatusCode\n\t\t}) : response;\n\t}\n\t\n\t/** Add request listener */\n\taddRequestListener(method: Method | \"ALL\", regExp: RegExpOrString, handler: Handler) {\n\t\tif (typeof regExp == \"string\")\n\t\t\tregExp = pathToRegExp(regExp);\n\t\t\n\t\tif (method && method !== \"ALL\")\n\t\t\tthis.#listeners[method]?.push([ regExp, handler ]);\n\t\telse\n\t\t\tfor (const specificMethod of Object.keys(this.#listeners) as Method[])\n\t\t\t\tthis.addRequestListener(specificMethod, regExp, handler);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add middleware */\n\taddMiddleware(middleware: GenericMiddleware) {\n\t\tif (middleware instanceof ClassMiddleware) {\n\t\t\tfor (const [ method, regExpOrStringArrayMap ] of Object.entries(middleware.listeners))\n\t\t\t\tfor (const [ regExpOrString, handler ] of regExpOrStringArrayMap)\n\t\t\t\t\tthis.addRequestListener(method as Method, regExpOrString, handler);\n\t\t\tmiddleware.bindTo?.(this);\n\t\t} else if (isTupleMiddlewareOrArray(middleware)) {\n\t\t\tif (isTupleMiddleware(middleware))\n\t\t\t\tmiddleware = [ middleware ];\n\t\t\t\n\t\t\tfor (const params of middleware)\n\t\t\t\tthis.addRequestListener(...params.length === 2 ? [ \"GET\", ...params ] as const : params);\n\t\t} else\n\t\t\tthis.#parseMappedMiddleware(middleware);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t#parseMappedMiddleware(middleware: Middleware, method: Method | \"ALL\" = \"GET\", prefix: string = \"\") {\n\t\tfor (const [ key, value ] of Object.entries(middleware))\n\t\t\tif (typeof value == \"function\")\n\t\t\t\tthis.addRequestListener(method, `${prefix}${key}`, value);\n\t\t\telse if (isMethod(key))\n\t\t\t\tthis.#parseMappedMiddleware(value, key, prefix);\n\t\t\telse\n\t\t\t\tthis.#parseMappedMiddleware(value, method, `${prefix}${key}`);\n\t\t\n\t}\n\t\n\t/** Add POST request listener */\n\tpost(regExp: RegExpOrString, handler: Handler) {\n\t\tthis.addRequestListener(\"POST\", regExp, handler);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add GET request listener */\n\tget(regExp: RegExpOrString, handler: Handler) {\n\t\tthis.addRequestListener(\"GET\", regExp, handler);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add PUT request listener */\n\tput(regExp: RegExpOrString, handler: Handler) {\n\t\tthis.addRequestListener(\"PUT\", regExp, handler);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add PATCH request listener */\n\tpatch(regExp: RegExpOrString, handler: Handler) {\n\t\tthis.addRequestListener(\"PATCH\", regExp, handler);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add DELETE request listener */\n\tdelete(regExp: RegExpOrString, handler: Handler) {\n\t\tthis.addRequestListener(\"DELETE\", regExp, handler);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t\n\t/** Make props for Node.js http(s).createServer method */\n\tstatic makeProps({ ssl, server }: Options) {\n\t\treturn {\n\t\t\t...resolveSSL(ssl),\n\t\t\tIncomingMessage: Request,\n\t\t\tServerResponse: Response,\n\t\t\t...server\n\t\t} as http.ServerOptions | https.ServerOptions;\n\t}\n\t\n}\n", "import { IncomingMessage } from \"node:http\";\nimport querystring from \"node:querystring\";\nimport { matchSymbol } from \"./symbols\";\nimport { extractQueryParams, extractUrlParams } from \"./utils\";\nimport type { RequestParams, RequestQueryParams } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nexport function matches(request: Request, regExp: RegExp) {\n\tconst match = regExp.exec(request.path);\n\t\n\tif (match) {\n\t\trequest[matchSymbol] = match;\n\t\t\n\t\treturn true;\n\t}\n\t\n\treturn false;\n}\n\n\nexport class RequestBody {\n\tconstructor(request: Request<any>) {\n\t\tthis.#request = request;\n\t\t\n\t}\n\t\n\t#request;\n\t\n\t/** Request body as a ReadableStream */\n\tstream() {\n\t\treturn this.#request;\n\t}\n\t\n\t#text?: string;\n\t\n\t/** Request body as a string */\n\ttext() {\n\t\treturn new Promise<string>((resolve, reject) => {\n\t\t\t\n\t\t\tif (this.#text)\n\t\t\t\tresolve(this.#text);\n\t\t\telse {\n\t\t\t\tlet text = \"\";\n\t\t\t\t\n\t\t\t\tthis.#request.on(\"data\", chunk => { text += chunk; });\n\t\t\t\tthis.#request.on(\"end\", () => { resolve(this.#text = text); });\n\t\t\t\t\n\t\t\t\tthis.#request.on(\"error\", reject);\n\t\t\t}\n\t\t\t\n\t\t});\n\t}\n\t\n\t/** Request body as an Uint8Array */\n\tasync bytes() {\n\t\treturn new TextEncoder().encode(await this.text());\n\t}\n\t\n\t/** Request body as an ArrayBuffer */\n\tasync arrayBuffer() {\n\t\treturn (await this.bytes()).buffer;\n\t}\n\t\n\t/** Request body as a parsed JSON object */\n\tasync json() {\n\t\treturn JSON.parse(await this.text());\n\t}\n\t\n\t/** Request body as a parsed URL-encoded object */\n\tasync urlEncoded() {\n\t\treturn querystring.parse(await this.text());\n\t}\n\t\n\t// TODO:\n\t/** Request body as a parsed MessagePack object */\n\t// messagePack() {\n\t// }\n\t\n}\n\n\ndeclare module \"node:http\" {\n\tinterface IncomingMessage { // eslint-disable-line no-shadow\n\t\t_addHeaderLine(field: string, value: string, first: boolean): void;\n\t}\n}\n\nexport class Request<P = RequestParams> extends IncomingMessage {\n\t\n\tdeclare url: string;\n\t\n\t/** Pathname part of the URL string */\n\tpath!: string;\n\t\n\t/** Query string part of the URL string */\n\tquerystring!: string;\n\t\n\t_addHeaderLine(field: string, value: string, first: boolean): void {\n\t\tsuper._addHeaderLine(field, value, first);\n\t\t\n\t\tif (!this.path)\n\t\t\t([ this.path, this.querystring ] = this.url.split(\"?\", 2));\n\t\t\n\t}\n\t\n\t[matchSymbol]?: RegExpExecArray;\n\t\n\t#params?: P;\n\t\n\t/** Params parsed from the URL string */\n\tget params() {\n\t\treturn (this.#params ??= extractUrlParams(this) as P);\n\t}\n\t\n\t#query?: RequestQueryParams;\n\t\n\t/** Params parsed from the query string part of the URL string */\n\tget query() {\n\t\treturn (this.#query ??= extractQueryParams(this));\n\t}\n\t\n\t#body?: RequestBody;\n\t\n\t/** Object with async methods to get the request body */\n\tget body() {\n\t\treturn (this.#body ??= new RequestBody(this));\n\t}\n\t\n}\n", "export const serverSymbol = Symbol(\"server\");\nexport const requestSymbol = Symbol(\"request\");\nexport const matchSymbol = Symbol(\"match\");\n", "import { matchSymbol } from \"./symbols\";\nimport type { Request } from \"./Request\";\nimport type { RequestParams, RequestQueryParams } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nconst pathRegExp = /\\/(?:(\\*)|:([^/?]+)(\\?(.*))?)/g;\n\nfunction subPathToRegExpSource(path: string, index = 0): string {\n\treturn path.replaceAll(pathRegExp, (_, wildcard, param, optional, subPath) => {\n\t\tif (wildcard)\n\t\t\treturn `/(?<__${index++}>.*?)`;\n\t\t\n\t\tconst group = `/(?<${param}>[^/]+)`;\n\t\t\n\t\treturn optional ?\n\t\t\t`(?:${group}${subPath ? subPathToRegExpSource(subPath, index) : \"\"})?` :\n\t\t\tgroup;\n\t});\n}\n\nexport function pathToRegExp(path: string) {\n\treturn new RegExp(`^${path.startsWith(\"/\") ? \"\" : \"/\"}${subPathToRegExpSource(path)}/?$`);\n}\n\n\nconst wildcardKeyRegExp = /^__/;\n\nexport function extractUrlParams(request: Request<any>): RequestParams {\n\tif (request[matchSymbol]) {\n\t\tconst match = request[matchSymbol];\n\t\tdelete request[matchSymbol];\n\t\t\n\t\tconst params = [ undefined, ...match.slice(1) ] as RequestParams;\n\t\t\n\t\tif (match.groups)\n\t\t\tfor (const [ key, value ] of Object.entries(match.groups))\n\t\t\t\tparams[key.replace(wildcardKeyRegExp, \"\")] = value;\n\t\t\n\t\treturn params;\n\t}\n\t\n\treturn [] as unknown as RequestParams;\n}\n\n\nexport function extractQueryParams(request: Request<any>): RequestQueryParams {\n\treturn request.querystring?.split(\"&\").reduce((queryParams, pair) => {\n\t\tconst [ key, value ] = pair.split(\"=\");\n\t\t\n\t\tqueryParams[key] = decodeURIComponent(value || \"\");\n\t\t\n\t\treturn queryParams;\n\t}, {} as RequestQueryParams) ?? {};\n}\n", "import { OutgoingHttpHeader, OutgoingHttpHeaders, ServerResponse } from \"node:http\";\nimport { Readable } from \"node:stream\";\nimport { requestSymbol, serverSymbol } from \"./symbols\";\nimport type { Request } from \"./Request\";\nimport type { HTTPServer } from \"./Server\";\nimport type { ErrorParams } from \"./types\";\n\n\nexport class Response extends ServerResponse<Request> {\n\t\n\t[serverSymbol]!: HTTPServer;\n\t[requestSymbol]!: Request;\n\t\n\t/** End response with a plain text */\n\ttext(body: string) {\n\t\treturn this.writeHead(200, {\n\t\t\t\"Content-Type\": \"text/plain; charset=utf-8\",\n\t\t\t\"Content-Length\": Buffer.byteLength(body)\n\t\t}).end(body);\n\t}\n\t\n\t/** End response with a JSON string */\n\tjson(value: Parameters<JSON[\"stringify\"]>[0]) {\n\t\tconst body = JSON.stringify(value);\n\t\t\n\t\treturn this.writeHead(200, {\n\t\t\t\"Content-Type\": \"application/json; charset=utf-8\",\n\t\t\t\"Content-Length\": Buffer.byteLength(body)\n\t\t}).end(body);\n\t}\n\t\n\t/** End response with an URL-encoded string */\n\turlEncoded(params: ConstructorParameters<typeof URLSearchParams>[0]) {\n\t\tconst body = new URLSearchParams(params).toString();\n\t\t\n\t\treturn this.writeHead(200, {\n\t\t\t\"Content-Type\": \"application/x-www-form-urlencoded; charset=utf-8\",\n\t\t\t\"Content-Length\": Buffer.byteLength(body)\n\t\t}).end(body);\n\t}\n\t\n\t/** End response with a stream */\n\tstream(stream: Readable, headers?: OutgoingHttpHeader[] | OutgoingHttpHeaders) {\n\t\tthis.writeHead(200, headers);\n\t\t\n\t\treturn stream.pipe(this);\n\t}\n\t\n\t// TODO:\n\t// messagePack() {\n\t// }\n\t\n\t/** End response with an error */\n\terror(statusCode: number, params?: ErrorParams | string) {\n\t\treturn this[serverSymbol]._throw(this, statusCode, params);\n\t}\n\t\n\t/** End response with the 400 Bad Request */\n\tbadRequest(params?: ErrorParams | string) {\n\t\treturn this.error(400, params);\n\t}\n\t\n\t/** End response with the 401 Unauthorized */\n\tunauthorized(params?: ErrorParams | string) {\n\t\treturn this.error(401, params);\n\t}\n\t\n\t/** End response with the 403 Forbidden */\n\tforbidden(params?: ErrorParams | string) {\n\t\treturn this.error(403, params);\n\t}\n\t\n\t/** End response with the 404 Not Found */\n\tnotFound(params?: ErrorParams | string) {\n\t\treturn this.error(404, params);\n\t}\n\t\n\t/** End response with the 408 Request Timeout */\n\trequestTimeout(params?: ErrorParams | string) {\n\t\treturn this.error(408, params);\n\t}\n\t\n\t/** End response with the 410 Gone */\n\tgone(params?: ErrorParams | string) {\n\t\treturn this.error(410, params);\n\t}\n\t\n\t/** End response with the 500 Internal Server Error */\n\tinternalServerError(params?: ErrorParams | string) {\n\t\treturn this.error(500, params);\n\t}\n\t\n\t/** End response with the 503 Service Unavailable */\n\tserviceUnavailable(params?: ErrorParams | string) {\n\t\treturn this.error(503, params);\n\t}\n\t\n}\n", "import type http from \"node:http\";\nimport type https from \"node:https\";\nimport type { ClassMiddleware } from \"./Middleware\";\nimport type { Request } from \"./Request\";\nimport type { Response } from \"./Response\";\n\n\nconst METHODS = [ \"DELETE\", \"GET\", \"PATCH\", \"POST\", \"PUT\" ] as const;\n\n\nexport type ErrorParams = {\n\theaders?: http.OutgoingHttpHeader[] | http.OutgoingHttpHeaders;\n\tcontent: string;\n\thandler?(request: Request, response: Response, errorParams: Omit<ErrorParams, \"handler\"> & { statusCode: number }): Response;\n};\n\nexport type Method = typeof METHODS[number];\n\nexport function isMethod(string: string): string is Method | \"ALL\" {\n\treturn METHODS.includes(string as Method) || string === \"ALL\";\n}\n\nexport type Handler = (request: Request, response: Response) => unknown;\n\nexport type Listener = [ RegExp, Handler ];\n\nexport type Options = {\n\tssl?: {\n\t\tcert: Buffer | string;\n\t\tkey: Buffer | string;\n\t};\n\tport?: number | string;\n\thttps?: boolean;\n\tlisteners?: Partial<Record<Method | \"ALL\", Listener[]>>;\n\terrors?: Record<\"default\" | number, ErrorParams>;\n\tserver?: http.Server | http.ServerOptions | https.Server | https.ServerOptions;\n};\n\nexport type RegExpOrString = RegExp | string;\n\nexport type RequestParams = Record<string, string> & [ undefined, ...string[] ];\n\nexport type RequestQueryParams = Record<string, string>;\n\nexport type Middleware = {\n\t[K: string]: Handler | Middleware;\n} | {\n\t[K: {} & string]: Handler | Middleware;\n} | {\n\t[K in Method | \"ALL\"]?: Middleware;\n};\n\nexport type TupleMiddleware = readonly [ Method, RegExpOrString, Handler ] | readonly [ RegExpOrString, Handler ];\n\nexport type GenericMiddleware =\n\tClassMiddleware |\n\tMiddleware |\n\tTupleMiddleware |\n\tTupleMiddleware[];\n\nexport function isTupleMiddlewareOrArray(middleware: GenericMiddleware): middleware is TupleMiddleware | TupleMiddleware[] {\n\treturn Array.isArray(middleware);\n}\n\nexport function isTupleMiddleware(middleware: TupleMiddleware | TupleMiddleware[]): middleware is TupleMiddleware {\n\treturn !Array.isArray(middleware);\n}\n\nexport function isRequestMethodAccepted(requestMethod: string | undefined, listeners: Record<string, unknown>): requestMethod is Method {\n\treturn Boolean(requestMethod && listeners[requestMethod]);\n}\n\nexport function isServerServer(serverOrOptions: Options[\"server\"]): serverOrOptions is http.Server | https.Server {\n\treturn !!serverOrOptions && \"emit\" in serverOrOptions;\n}\n", "import { StaticMiddleware, StaticMiddlewareOptions } from \"./middlewares/Static\";\nimport { HTTPServer } from \"./Server\";\nimport { GenericMiddleware, Options } from \"./types\";\n\n\nexport class StaticServer extends HTTPServer {\n\tconstructor(options: StaticMiddlewareOptions, serverOptions: Options, middlewares: GenericMiddleware[] = []) {\n\t\tsuper(serverOptions, [\n\t\t\tnew StaticMiddleware(options),\n\t\t\t...middlewares\n\t\t]);\n\t\t\n\t}\n\t\n\tname = \"Static\";\n\ticon = \"\uD83D\uDED2\";\n\t\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["ClassMiddleware", "InitialsMiddleware", "fs", "path", "zlib", "brotliPreloadOptions", "brotliRuntimeOptions", "gzipPreloadOptions", "gzipRuntimeOptions", "brotliPreloadSync", "data", "gzipPreloadSync", "getCompressionStreamByEncoding", "contentEncoding", "handleRequestCompressed", "request", "response", "headers", "isBrotliAccepted", "defaultExtensions", "defaultPreloaded", "nullExtension", "StaticMiddleware", "ClassMiddleware", "src", "urlPrefix", "_path", "extensions", "defaultExtensions", "resolved", "restricted", "preloaded", "path", "entryPoint", "fs", "#src", "#urlPrefix", "#urlPrefixRegExp", "extension", "#addExtension", "resolvee", "#resolve", "fileName", "#restrict", "defaultPreloaded", "#preload", "#handler", "#extensions", "#resolved", "#restricted", "#preloaded", "#getExtensionBy", "name", "url", "isText", "fileData", "brotliPreloadSync", "gzipPreloadSync", "error", "request", "response", "mimeType", "contentEncoding", "resolve", "stream", "getCompressionStreamByEncoding", "noop", "debounce", "callback", "limit", "options", "leading", "trailing", "maxWait", "timeout", "maxWaitTimeout", "end", "context", "args", "initial", "final", "result", "expired", "n", "debounced", "maxWaitExpired", "run", "_args", "resolve", "noop", "shouldRun", "isEmpty", "object", "_", "howmuch", "number", "one", "two", "five", "shouldPrintNumber", "u", "d", "INSITE_TITLE", "envGlobals", "key", "headers", "TemplateMiddleware", "ClassMiddleware", "path", "globals", "title", "css", "rootId", "#handler", "#title", "#css", "#rootId", "#html", "fileName", "isEmpty", "request", "response", "handleRequestCompressed", "createServer", "resolveSSL", "showServerListeningMessage", "IncomingMessage", "querystring", "serverSymbol", "requestSymbol", "matchSymbol", "pathRegExp", "subPathToRegExpSource", "path", "index", "_", "wildcard", "param", "optional", "subPath", "group", "pathToRegExp", "wildcardKeyRegExp", "extractUrlParams", "request", "matchSymbol", "match", "params", "key", "value", "extractQueryParams", "queryParams", "pair", "matches", "request", "regExp", "match", "matchSymbol", "RequestBody", "#request", "#text", "resolve", "reject", "text", "chunk", "querystring", "Request", "IncomingMessage", "field", "value", "first", "#params", "extractUrlParams", "#query", "extractQueryParams", "#body", "ServerResponse", "Response", "ServerResponse", "serverSymbol", "requestSymbol", "body", "value", "params", "stream", "headers", "statusCode", "METHODS", "isMethod", "string", "isTupleMiddlewareOrArray", "middleware", "isTupleMiddleware", "isRequestMethodAccepted", "requestMethod", "listeners", "isServerServer", "serverOrOptions", "HTTPServer", "_HTTPServer", "port", "ssl", "listeners", "errors", "server", "middlewares", "isServerServer", "resolve", "showServerListeningMessage", "createServer", "method", "methodListeners", "regExp", "handler", "statusCodeString", "statusCode", "#errors", "middleware", "#requestListener", "#listeners", "request", "response", "serverSymbol", "requestSymbol", "isRequestMethodAccepted", "matches", "headers", "content", "params", "restParams", "pathToRegExp", "specificMethod", "ClassMiddleware", "regExpOrStringArrayMap", "regExpOrString", "isTupleMiddlewareOrArray", "isTupleMiddleware", "#parseMappedMiddleware", "prefix", "key", "value", "isMethod", "resolveSSL", "Request", "Response", "StaticServer", "HTTPServer", "options", "serverOptions", "middlewares", "StaticMiddleware"]
7
7
  }
@@ -2,6 +2,6 @@ import { ClassMiddleware } from "../../Middleware";
2
2
  import type { Options } from "./types";
3
3
  export declare class StaticMiddleware extends ClassMiddleware {
4
4
  #private;
5
- constructor({ src, urlPrefix, requestRegExp, extensions, resolved, restricted, preloaded }?: Options);
5
+ constructor({ src, urlPrefix, path: _path, extensions, resolved, restricted, preloaded }?: Options);
6
6
  }
7
7
  //# sourceMappingURL=Static.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Static.d.ts","sourceRoot":"","sources":["../../../src/middlewares/Static/Static.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKnD,OAAO,KAAK,EAAa,OAAO,EAAE,MAAM,SAAS,CAAC;AAQlD,qBAAa,gBAAiB,SAAQ,eAAe;;gBACxC,EACX,GAAc,EACd,SAAc,EACd,aAAa,EACb,UAA8B,EAC9B,QAAQ,EACR,UAAU,EACV,SAAqB,EACrB,GAAE,OAAY;CA6Hf"}
1
+ {"version":3,"file":"Static.d.ts","sourceRoot":"","sources":["../../../src/middlewares/Static/Static.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAInD,OAAO,KAAK,EAAa,OAAO,EAAE,MAAM,SAAS,CAAC;AAQlD,qBAAa,gBAAiB,SAAQ,eAAe;;gBACxC,EACX,GAAc,EACd,SAAc,EACd,IAAI,EAAE,KAAK,EACX,UAA8B,EAC9B,QAAQ,EACR,UAAU,EACV,SAAqB,EACrB,GAAE,OAAY;CA6Hf"}
@@ -6,10 +6,10 @@ export type Resolvee = [string, string];
6
6
  export type Options = {
7
7
  src?: string;
8
8
  urlPrefix?: string;
9
- requestRegExp?: RegExp;
9
+ path?: RegExp;
10
10
  extensions?: Extension[];
11
11
  resolved?: Resolvee[];
12
12
  restricted?: string[];
13
- preloaded?: "default" | null | string[];
13
+ preloaded?: string[] | "default" | null;
14
14
  };
15
15
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/middlewares/Static/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,CAAE,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAE,CAAC;AAC3E,MAAM,MAAM,QAAQ,GAAG,CAAE,MAAM,EAAE,MAAM,CAAE,CAAC;AAC1C,MAAM,MAAM,OAAO,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC;CACxC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/middlewares/Static/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,CAAE,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAE,CAAC;AAC3E,MAAM,MAAM,QAAQ,GAAG,CAAE,MAAM,EAAE,MAAM,CAAE,CAAC;AAC1C,MAAM,MAAM,OAAO,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC;CACxC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { ClassMiddleware } from "../Middleware";
2
2
  type Options = {
3
- requestRegExp?: RegExp;
3
+ path?: RegExp;
4
4
  globals?: Record<string, unknown>;
5
5
  title?: string;
6
6
  css?: string[] | string;
@@ -9,6 +9,6 @@ type Options = {
9
9
  export type { Options as TemplateMiddlewareOptions };
10
10
  export declare class TemplateMiddleware extends ClassMiddleware {
11
11
  #private;
12
- constructor({ requestRegExp, globals, title, css, rootId }?: Options);
12
+ constructor({ path, globals, title, css, rootId }?: Options);
13
13
  }
14
14
  //# sourceMappingURL=Template.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Template.d.ts","sourceRoot":"","sources":["../../src/middlewares/Template.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAehD,KAAK,OAAO,GAAG;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,YAAY,EAAE,OAAO,IAAI,yBAAyB,EAAE,CAAC;AAGrD,qBAAa,kBAAmB,SAAQ,eAAe;;gBAC1C,EACX,aAAoB,EACpB,OAAY,EACZ,KAAgC,EAChC,GAAQ,EACR,MAAe,EACf,GAAE,OAAY;CAwCf"}
1
+ {"version":3,"file":"Template.d.ts","sourceRoot":"","sources":["../../src/middlewares/Template.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAchD,KAAK,OAAO,GAAG;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,YAAY,EAAE,OAAO,IAAI,yBAAyB,EAAE,CAAC;AAGrD,qBAAa,kBAAmB,SAAQ,eAAe;;gBAC1C,EACX,IAAW,EACX,OAAY,EACZ,KAAgC,EAChC,GAAQ,EACR,MAAe,EACf,GAAE,OAAY;CAwCf"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "insite-http",
3
- "version": "2.1.2",
3
+ "version": "2.1.3",
4
4
  "description": "inSite HTTPS server",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",