insite-http 2.3.1 β 2.3.5
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/Server.d.ts +1 -3
- package/dist/Server.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +4 -4
- package/dist/middlewares/Static/Static.d.ts.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/package.json +8 -8
- package/bun.lock +0 -1077
package/dist/Server.d.ts
CHANGED
|
@@ -4,10 +4,8 @@ import { Response } from "./Response";
|
|
|
4
4
|
import { type ErrorParams, type GenericMiddleware, type Handler, type Method, type Options, type Priority, type RegExpOrString, type ResponseBody } from "./types";
|
|
5
5
|
export declare class HTTPServer {
|
|
6
6
|
#private;
|
|
7
|
-
constructor({ port, ssl, listeners, errors, server }: Options, middlewares?: (GenericMiddleware | false | null | undefined)[]);
|
|
8
|
-
/** Server icon */
|
|
7
|
+
constructor({ icon, name, port, ssl, listeners, errors, server }: Options, middlewares?: (GenericMiddleware | false | null | undefined)[]);
|
|
9
8
|
icon: string;
|
|
10
|
-
/** Server name */
|
|
11
9
|
name: string;
|
|
12
10
|
get protocol(): string;
|
|
13
11
|
/** Node.js http(s) server object */
|
package/dist/Server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../src/Server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAIpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAMN,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EAEZ,KAAK,MAAM,EAEX,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,MAAM,SAAS,CAAC;AAIjB,qBAAa,UAAU;;gBACV,EACX,IAAI,EACJ,GAAG,EACH,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,OAAO,EAAE,WAAW,GAAE,CAAC,iBAAiB,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,EAAO;
|
|
1
|
+
{"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../src/Server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAIpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAMN,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EAEZ,KAAK,MAAM,EAEX,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,MAAM,SAAS,CAAC;AAIjB,qBAAa,UAAU;;gBACV,EACX,IAAa,EACb,IAAa,EACb,IAAI,EACJ,GAAG,EACH,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,OAAO,EAAE,WAAW,GAAE,CAAC,iBAAiB,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,EAAO;IAiD9E,IAAI,SAAC;IACL,IAAI,SAAC;IACL,IAAI,QAAQ,WAEX;IAED,oCAAoC;IACpC,MAAM,+IAAC;IAEP,8BAA8B;IAC9B,IAAI,GAAG,YAEN;IAgFD,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG;QAAE,IAAI,CAAC,EAAE,YAAY,CAAA;KAAE;IAkC7G,2BAA2B;IAC3B,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,SAAI;IA8BjG,qBAAqB;IACrB,aAAa,CAAC,UAAU,EAAE,iBAAiB,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAqChE,gCAAgC;IAChC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAMlE,+BAA+B;IAC/B,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAMjE,+BAA+B;IAC/B,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAMjE,iCAAiC;IACjC,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAMnE,kCAAkC;IAClC,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAOpE,yDAAyD;IACzD,MAAM,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,GAMnC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa;CAG9C"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var
|
|
2
|
-
`,t)}}#l=(e,t)=>{let r=decodeURI(e.url).replace(this.#s,"").replaceAll("../","");if(r=this.#r.get(r)??u.join(this.#e,r),this.#n.has(r))return!1;if(!f.existsSync(r))return t.notFound();let{mimeType:n,isText:o}=this.#i(r),a=o?/\bbr\b/.test(e.headers["accept-encoding"])?"br":"gzip":null;t.writeHead(200,{"Content-Type":n+(o?"; charset=utf-8":""),...a&&{"Content-Encoding":a}});let p=this.#o.get(r);return p?t.end(o&&a?p[a]:p):new Promise(i=>{let l=f.createReadStream(r).on("error",()=>i(!1));a&&(l=l.pipe(L(a))),l.on("end",i),l.pipe(t)})}};import{isEmpty as X}from"@nesvet/n";var{INSITE_STATIC_ROOT:E="",INSITE_TITLE:Z}=process.env,A={};for(let s in process.env)s.startsWith("INSITE_CLIENT_")&&(A[s.replace(/INSITE_CLIENT_/,"").toLowerCase()]=process.env[s]);var ee={"Content-Type":"text/html; charset=utf-8"},C=class extends c{constructor({path:e=/.*/,globals:t={},title:r=Z??"inSite",css:n=[],rootId:o="root"}={}){super(),this.listeners={GET:[[e,this.#n]]},this.#e=r,this.#s=Array.isArray(n)?n:[n],this.#t=o,Object.assign(t,A),this.#r=`<!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><link rel="icon" type="image/x-icon" href="${E}/favicon.ico">${this.#s.map(a=>`<link rel="stylesheet" href="${E}/${a}" />`).join("")}${X(t)?"":`<script>globalThis.__insite=${JSON.stringify(t)};</script>`}<script type="text/javascript" src="${E}/index.js" defer></script></head><body><div id="${this.#t}"></div></body></html>`}priority=-1e3;#e;#s;#t;#r;#n=(e,t)=>H(e,t,ee,this.#r)};import{createServer as ue,resolveSSL as le,showServerListeningMessage as Q}from"insite-common/backend";import{IncomingMessage as se}from"node:http";import ne from"node:querystring";import{getRemoteAddress as oe}from"insite-common/backend";var h=Symbol("server"),y=Symbol("request"),m=Symbol("match");var te=/\/(?:(\*)|:([^/?]+)(\?(.*))?)/g;function I(s,e=0){return s.replaceAll(te,(t,r,n,o,a)=>{if(r)return`/(?<__${e++}>.*?)`;let p=`/(?<${n}>[^/]+)`;return o?`(?:${p}${a?I(a,e):""})?`:p})}function j(s){return new RegExp(`^${s.startsWith("/")?"":"/"}${I(s)}/?$`)}var re=/^__/;function _(s){let e=s[m];if(e){delete s[m];let t=[void 0,...e.slice(1)];if(e.groups)for(let[r,n]of Object.entries(e.groups))t[r.replace(re,"")]=n;return t}return[]}function $({querystring:s}){return s?.split("&").reduce((e,t)=>{let[r,n]=t.split("=");return e[r]=decodeURIComponent(n||""),e},{})??{}}function k({headers:{authorization:s}}){return s?.indexOf("Bearer ")===0?s.slice(7):null}function N(s,e){let t=e.exec(s.path);return t?(s[m]=t,!0):!1}var O=class{constructor(e){this.#e=e}#e;stream(){return this.#e}#s;text(){return new Promise((e,t)=>{if(this.#s)e(this.#s);else{let r="";this.#e.on("data",n=>{r+=n}),this.#e.on("end",()=>{e(this.#s=r)}),this.#e.on("error",t)}})}#t;async bytes(){return this.#t??=new TextEncoder().encode(await this.text()),this.#t}async arrayBuffer(){return(await this.bytes()).buffer}#r;async json(){return this.#r??=JSON.parse(await this.text()||"null"),this.#r}#n;async urlEncoded(){return this.#n=ne.parse(await this.text()),this.#n}},R=class extends se{path;querystring;#e;get ip(){return this.#e??=oe(this)}[m];#s;get params(){return this.#s??=_(this)}#t;get query(){return this.#t??=$(this)}#r;get bearer(){return this.#r??=k(this)}#n;get body(){return this.#n??=new O(this)}};import{ServerResponse as ie}from"node:http";import{Readable as ae}from"node:stream";import{cleanup as pe}from"@nesvet/n";var x=class extends ie{[h];[y];status(e){return this.statusCode=e,this}set(e,t){if(typeof e=="string")return this.setHeader(e,t);for(let r in e)this.setHeader(r,e[r]);return this}header=this.set;text(e,t=200){return this.writeHead(t,{"Content-Type":"text/plain; charset=utf-8","Content-Length":Buffer.byteLength(e)}).end(e)}json(e,t=200){let r=JSON.stringify(e)??"{}";return this.writeHead(t,{"Content-Type":"application/json; charset=utf-8","Content-Length":Buffer.byteLength(r)}).end(r)}urlEncoded(e,t=200){let r=new URLSearchParams(e).toString();return this.writeHead(t,{"Content-Type":"application/x-www-form-urlencoded; charset=utf-8","Content-Length":Buffer.byteLength(r)}).end(r)}stream(e,t,r=200){return typeof t=="number"&&(r=t,t=void 0),this.writeHead(r,t),e.pipe(this)}give(e,t,r=200){return typeof t=="number"&&(r=t,t=void 0),typeof e=="string"?this.text(e,r):e instanceof ae?this.stream(e,t,r):this.json(e,r)}error(e,t,{headers:r,handler:n}={}){return this[h]._throw(this,pe({statusCode:e,headers:r,body:t,handler:n}))}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 de=["DELETE","GET","PATCH","POST","PUT"];function T(s){return de.includes(s)||s==="ALL"}function U(s){return Array.isArray(s)}function G(s){return!Array.isArray(s)}function D(s,e){return!!(s&&e[s])}function z(s){return!!s&&"emit"in s}var b=class s{constructor({port:e,ssl:t,listeners:r,errors:n,server:o},a=[]){if(z(o)?(this.server=o,new Promise(p=>void(o.listening?p():o.on("listening",p))).then(()=>Q(this))):(this.server=ue(s.makeProps({ssl:t,server:o})),this.server.listen(typeof e=="string"?Number.parseInt(e):e??(this.isS?443:80),()=>Q(this))),r)for(let[p,i]of Object.entries(r))for(let[l,S,F]of i)this.addRequestListener(p,l,S,F);if(n)for(let p of Object.keys(n)){let i=Number.parseInt(p);i&&(this.#t[i]?Object.assign(this.#t[i],n[i]):this.#t[i]=n[i])}if(a)for(let p of a)p&&this.addMiddleware(p);this.server.on("request",this.#s)}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:[]};#s=async(e,t)=>{if([e.path,e.querystring]=e.url.split("?",2),t[h]=this,t[y]=e,!("status"in e)&&D(e.method,this.#e)){let r=this.#e[e.method],n=0,o=async()=>{for(;n<r.length;){let a=r[n++];if(N(e,a[0]))return await a[1](e,t,o)}};return await o()}t.notFound()};#t={401:{statusCode:401,body:"Unauthorized"},403:{statusCode:403,body:"Forbidden"},404:{statusCode:404,body:"Not Found"},408:{statusCode:408,body:"Request Timeout"},410:{statusCode:410,body:"Gone"},500:{statusCode:500,body:"Internal Server Error"},503:{statusCode:503,body:"Service Unavailable"},default:{statusCode:400,body:"Bad Request",handler(e,t,{statusCode:r,headers:n,body:o}){return t.give(o,n,r)}}};_throw(e,{statusCode:t,...r}){let{handler:n,...o}={...this.#t.default,...this.#t[t],...r};return n(e[y],e,o)}#r(e,t){let r=e.source.replace(/\\\/\??\$?$/,""),n=0,o=0;for(let a=0,{length:p}=r;a<p;a++)switch(r[a]){case"/":n++;break;case"*":o++;break}return t*1e3+(n*10-o)}addRequestListener(e,t,r,n=0){if(typeof t=="string"&&(t=j(t)),e&&e!=="ALL"){let o=this.#e[e];if(o){let a=[t,r,n],p=this.#r(t,n);for(let i=0;i<o.length;i++){let[l,,S]=o[i];if(p>this.#r(l,S)){o.splice(i,0,a);break}}o.includes(a)||o.push(a)}}else for(let o of Object.keys(this.#e))this.addRequestListener(o,t,r,n);return this}addMiddleware(e,t){if(e instanceof c){for(let[r,n]of Object.entries(e.listeners))for(let[o,a,p]of n)this.addRequestListener(r,o,a,p??t??e.priority);e.bindTo?.(this)}else if(U(e)){G(e)&&(e=[e]);for(let r of e)this.addRequestListener(...T(r[0])?r:["GET",...r])}else this.#n(e);return this}#n(e,t="GET",r=""){for(let[n,o]of Object.entries(e))typeof o=="function"?T(n)?this.addRequestListener(n,r,o):this.addRequestListener(t,`${r}${n}`,o):T(n)?this.#n(o,n,r):this.#n(o,t,`${r}${n}`)}post(e,t,r){return this.addRequestListener("POST",e,t,r),this}get(e,t,r){return this.addRequestListener("GET",e,t,r),this}put(e,t,r){return this.addRequestListener("PUT",e,t,r),this}patch(e,t,r){return this.addRequestListener("PATCH",e,t,r),this}delete(e,t,r){return this.addRequestListener("DELETE",e,t,r),this}static makeProps({ssl:e,server:t}){return{...le(e),IncomingMessage:R,ServerResponse:x,...t}}};var J=class extends b{constructor(e,t,r=[]){super(t,[new g(e),...r])}name="Static";icon="\u{1F6D2}"};export{c as ClassMiddleware,b as HTTPServer,me as InitialsMiddleware,g as StaticMiddleware,J as StaticServer,C as TemplateMiddleware};
|
|
1
|
+
var x=class{priority=0;listeners};var Pe=void 0;import M from"node:fs";import d from"node:path";import l from"node:zlib";var ce={params:{[l.constants.BROTLI_PARAM_MODE]:l.constants.BROTLI_MODE_TEXT,[l.constants.BROTLI_PARAM_QUALITY]:11}},I={params:{[l.constants.BROTLI_PARAM_MODE]:l.constants.BROTLI_MODE_TEXT,[l.constants.BROTLI_PARAM_QUALITY]:4}},ue={level:9},C={level:3};function _(o){return l.brotliCompressSync(o,ce)}function N(o){return l.gzipSync(o,ue)}function D(o){return o==="br"?l.createBrotliCompress(I):l.createGzip(C)}function U(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?l.brotliCompressSync(r,I):l.gzipSync(r,C))}var G=[["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 z=[...process.env.NODE_ENV==="production"?["/index.js","/favicon.ico"]:[]];var{INSITE_STATIC_ROOT:le=""}=process.env,fe={mimeType:"application/octet-stream"},P=class extends x{constructor({src:e="public",root:t=le,path:r,extensions:n=G,resolved:s,restricted:i,preloaded:p="default"}={}){if(super(),!d.isAbsolute(e)){let[,a]=process.argv;e=d.resolve(M.statSync(a).isDirectory()?a:d.dirname(a),e)}if(this.#e=e,this.#o=new RegExp(`^${d.join("/",t,"/")}`),n)for(let a of n)a&&this.#a(...a);if(s)for(let a of s)a&&this.#p(...a);if(i)for(let a of i)a&&this.#c(a);if(p){p==="default"&&(p=z);for(let a of p)a&&this.#u(a)}this.listeners={GET:[[r??new RegExp(`^${d.join("/",t,"/")}(\\w[^\\/]*/)*[^\\/]+\\.[^\\/]`),this.#l]]}}priority=-900;#e;#o;#t=new Map;#r=new Map;#n=new Set;#s=new Map;#i(e){return this.#t.get(e.slice(Math.max(0,e.lastIndexOf(".")+1)))??fe}#a(e,t){this.#t.set(e,{...t,name:e})}#p(e,t){this.#r.set(e,d.isAbsolute(t)?t:d.join(this.#e,t))}#c(e){this.#n.add(d.join(this.#e,e))}#u(e){e=this.#r.get(e)??d.join(this.#e,e);try{let{isText:t}=this.#i(e),r=M.readFileSync(e,t?"utf8":null);this.#s.set(e,t?{br:_(r),gzip:N(r)}:r)}catch(t){console.warn(`\u26A0\uFE0F inSite Static Server: Unable to preload ${e}`,`
|
|
2
|
+
`,t)}}#l=(e,t)=>{let r;try{r=decodeURI(e.url)}catch{return t.notFound()}if(r=r.replace(this.#o,"").replaceAll("../",""),r=this.#r.get(r)??d.join(this.#e,r),this.#n.has(r))return!1;if(!M.existsSync(r))return t.notFound();let{mimeType:n,isText:s}=this.#i(r),i=s?/\bbr\b/.test(e.headers["accept-encoding"])?"br":"gzip":null;t.writeHead(200,{"Content-Type":n+(s?"; charset=utf-8":""),...i&&{"Content-Encoding":i}});let p=this.#s.get(r);return p?t.end(s&&i?p[i]:p):new Promise(a=>{let c=M.createReadStream(r).on("error",()=>a(!1));i&&(c=c.pipe(D(i))),c.on("end",a),c.pipe(t)})}};function F(o){for(let e in o)o[e]===void 0&&delete o[e];return o}function y(){}var T=new WeakMap,E=class o extends Promise{constructor(e,t){let r,n;if(super((s,i)=>{r=s,n=i}),T.set(this,{resolve:r,reject:n}),t?.signal)if(t.signal.aborted)this.reject(new DOMException("Aborted","AbortError"));else{let s=()=>this.reject(new DOMException("Aborted","AbortError"));t.signal.addEventListener("abort",s),this.finally(()=>t.signal?.removeEventListener("abort",s))}if(typeof t?.timeout=="number"&&Number.isFinite(t.timeout)){let s=setTimeout(()=>this.reject(new DOMException("Timeout exceeded","TimeoutError")),t.timeout);this.finally(()=>clearTimeout(s))}e?.(this.resolve,this.reject)}isPending=!0;isFulfilled=!1;isRejected=!1;state="pending";result;resolve=e=>{if(this.isPending){this.isPending=!1,this.isFulfilled=!0,this.state="fulfilled",this.result=e;let t=T.get(this);t&&(t.resolve.call(this,e),T.delete(this))}};reject=e=>{if(this.isPending){this.isPending=!1,this.isRejected=!0,this.state="rejected",this.result=e;let t=T.get(this);t&&(t.reject.call(this,e),T.delete(this))}};static resolved(e){return new o(t=>t(e))}static rejected(e){return new o((t,r)=>r(e))}};function de(o,e=0,t={}){let{leading:r=!1,trailing:n=!0}=t,{maxWait:s=1/0}=t,i,p,a,c,u,g,f,w,H=async()=>{let h=Date.now();h>=a?(i=void 0,a=void 0,clearTimeout(p),p=void 0,typeof f=="function"&&await f(),m.resolve(w),g=r):(clearTimeout(i),i=setTimeout(H,a-h))},L=Number.isFinite(s)?()=>{f===R&&(f=!1),R(),p=setTimeout(L,s)}:null;async function R(){try{return w=await o.apply(c,u),w}catch(h){throw m.reject(h),h}}r&&typeof r=="boolean"&&(r=R),g=r,n&&typeof n=="boolean"&&(n=R),f=n;let m=Object.assign(function(...h){return u=h,c=this,a=Date.now()+e,f=n,m.promise.isPending||(m.promise=new E((ae,pe)=>{m.resolve=ae,m.reject=pe,typeof g=="function"&&(g(),g=!1,f===R&&(f=!1)),i||(i=setTimeout(H,e),L&&(p=setTimeout(L,s)))})),m.promise},{callback:o,promise:E.resolved(void 0),resolve:y,reject:y,run:R,clear:async h=>{clearTimeout(i),i=void 0,clearTimeout(p),p=void 0,m.resolve(h?await R():w)}});return m}de.noop=Object.assign(()=>{},{callback:y,promise:E.resolved(void 0),resolve:y,reject:y,run:y,clear:y});function k(o){for(let e in o)return!1;return!0}function W(o,e,t,r,n=!0){return Array.isArray(o)&&(o=o.length),typeof r!="string"&&(n=r??!0,r=t),(n?`${o}\xA0`:"")+W.raw(o,e,t,r)}W.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_STATIC_ROOT:q="",INSITE_TITLE:me}=process.env,Q={};for(let o in process.env)o.startsWith("INSITE_CLIENT_")&&(Q[o.replace(/INSITE_CLIENT_/,"").toLowerCase()]=process.env[o]);var he={"Content-Type":"text/html; charset=utf-8"},J=class extends x{constructor({path:e=/.*/,globals:t={},title:r=me??"inSite",css:n=[],rootId:s="root"}={}){super(),this.listeners={GET:[[e,this.#n]]},this.#e=r,this.#o=Array.isArray(n)?n:[n],this.#t=s,Object.assign(t,Q),this.#r=`<!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><link rel="icon" type="image/x-icon" href="${q}/favicon.ico">${this.#o.map(i=>`<link rel="stylesheet" href="${q}/${i}" />`).join("")}${k(t)?"":`<script>globalThis.__insite=${JSON.stringify(t)};</script>`}<script type="text/javascript" src="${q}/index.js" defer></script></head><body><div id="${this.#t}"></div></body></html>`}priority=-1e3;#e;#o;#t;#r;#n=(e,t)=>U(e,t,he,this.#r)};import{createServer as Se,resolveSSL as Oe,showServerListeningMessage as se}from"insite-common/backend";import{IncomingMessage as ge}from"node:http";import Re from"node:querystring";import{getRemoteAddress as we}from"insite-common/backend";var S=Symbol("server"),O=Symbol("request"),b=Symbol("match");var xe=/\/(?:(\*)|:([^/?]+)(\?(.*))?)/g;function V(o,e=0){return o.replaceAll(xe,(t,r,n,s,i)=>{if(r)return`/(?<__${e++}>.*?)`;let p=`/(?<${n}>[^/]+)`;return s?`(?:${p}${i?V(i,e):""})?`:p})}function K(o){return new RegExp(`^${o.startsWith("/")?"":"/"}${V(o)}/?$`)}var ye=/^__/;function X(o){let e=o[b];if(e){delete o[b];let t=[void 0,...e.slice(1)];if(e.groups)for(let[r,n]of Object.entries(e.groups))t[r.replace(ye,"")]=n;return t}return[]}function Y({querystring:o}){return o?.split("&").reduce((e,t)=>{let[r,n]=t.split("=");try{e[r]=decodeURIComponent(n||"")}catch{e[r]=""}return e},{})??{}}function Z({headers:{authorization:o}}){return o?.indexOf("Bearer ")===0?o.slice(7):null}function ee(o,e){let t=e.exec(o.path);return t?(o[b]=t,!0):!1}var B=class{constructor(e){this.#e=e}#e;stream(){return this.#e}#o;text(){return new Promise((e,t)=>{if(this.#o)e(this.#o);else{let r="";this.#e.on("data",n=>{r+=n}),this.#e.on("end",()=>{e(this.#o=r)}),this.#e.on("error",t)}})}#t;async bytes(){return this.#t??=new TextEncoder().encode(await this.text()),this.#t}async arrayBuffer(){return(await this.bytes()).buffer}#r;async json(){return this.#r??=JSON.parse(await this.text()||"null"),this.#r}#n;async urlEncoded(){return this.#n=Re.parse(await this.text()),this.#n}},v=class extends ge{path;querystring;#e;get ip(){return this.#e??=we(this)}[b];#o;get params(){return this.#o??=X(this)}#t;get query(){return this.#t??=Y(this)}#r;get bearer(){return this.#r??=Z(this)}#n;get body(){return this.#n??=new B(this)}};import{ServerResponse as Ee}from"node:http";import{Readable as be}from"node:stream";var j=class extends Ee{[S];[O];status(e){return this.statusCode=e,this}set(e,t){if(typeof e=="string")return this.setHeader(e,t);for(let r in e)this.setHeader(r,e[r]);return this}header=this.set;text(e,t=200){return this.writeHead(t,{"Content-Type":"text/plain; charset=utf-8","Content-Length":Buffer.byteLength(e)}).end(e)}json(e,t=200){let r=JSON.stringify(e)??"{}";return this.writeHead(t,{"Content-Type":"application/json; charset=utf-8","Content-Length":Buffer.byteLength(r)}).end(r)}urlEncoded(e,t=200){let r=new URLSearchParams(e).toString();return this.writeHead(t,{"Content-Type":"application/x-www-form-urlencoded; charset=utf-8","Content-Length":Buffer.byteLength(r)}).end(r)}stream(e,t,r=200){return typeof t=="number"&&(r=t,t=void 0),this.writeHead(r,t),e.pipe(this)}give(e,t,r=200){return typeof t=="number"&&(r=t,t=void 0),typeof e=="string"?this.text(e,r):e instanceof be?this.stream(e,t,r):this.json(e,r)}error(e,t,{headers:r,handler:n}={}){return this[S]._throw(this,F({statusCode:e,headers:r,body:t,handler:n}))}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 Te=["DELETE","GET","PATCH","POST","PUT"];function $(o){return Te.includes(o)||o==="ALL"}function te(o){return Array.isArray(o)}function re(o){return!Array.isArray(o)}function oe(o,e){return!!(o&&e[o])}function ne(o){return!!o&&"emit"in o}var A=class o{constructor({icon:e="\u{1F578}\uFE0F ",name:t="HTTP",port:r,ssl:n,listeners:s,errors:i,server:p},a=[]){if(this.icon=e,this.name=t,ne(p)?(this.server=p,new Promise(c=>void(p.listening?c():p.on("listening",c))).then(()=>se(this))):(this.server=Se(o.makeProps({ssl:n,server:p})),this.server.listen(typeof r=="string"?Number.parseInt(r):r??(this.isS?443:80),()=>se(this))),s)for(let[c,u]of Object.entries(s))for(let[g,f,w]of u)this.addRequestListener(c,g,f,w);if(i)for(let c of Object.keys(i)){let u=Number.parseInt(c);u&&(this.#t[u]?Object.assign(this.#t[u],i[u]):this.#t[u]=i[u])}if(a)for(let c of a)c&&this.addMiddleware(c);this.server.on("request",this.#o)}icon;name;get protocol(){return`http${this.isS?"s":""}`}server;get isS(){return"setSecureContext"in this.server}#e={POST:[],GET:[],PUT:[],PATCH:[],DELETE:[]};#o=async(e,t)=>{if([e.path,e.querystring]=e.url.split("?",2),t[S]=this,t[O]=e,!("status"in e)&&oe(e.method,this.#e)){let r=this.#e[e.method],n=0,s=async()=>{for(;n<r.length;){let i=r[n++];if(ee(e,i[0]))return await i[1](e,t,s)}};return await s()}t.notFound()};#t={401:{statusCode:401,body:"Unauthorized"},403:{statusCode:403,body:"Forbidden"},404:{statusCode:404,body:"Not Found"},408:{statusCode:408,body:"Request Timeout"},410:{statusCode:410,body:"Gone"},500:{statusCode:500,body:"Internal Server Error"},503:{statusCode:503,body:"Service Unavailable"},default:{statusCode:400,body:"Bad Request",handler(e,t,{statusCode:r,headers:n,body:s}){return t.give(s,n,r)}}};_throw(e,{statusCode:t,...r}){let{handler:n,...s}={...this.#t.default,...this.#t[t],...r};return n(e[O],e,s)}#r(e,t){let r=e.source.replace(/\\\/\??\$?$/,""),n=0,s=0;for(let i=0,{length:p}=r;i<p;i++)switch(r[i]){case"/":n++;break;case"*":s++;break}return t*1e3+(n*10-s)}addRequestListener(e,t,r,n=0){if(typeof t=="string"&&(t=K(t)),e&&e!=="ALL"){let s=this.#e[e];if(s){let i=[t,r,n],p=this.#r(t,n);for(let a=0;a<s.length;a++){let[c,,u]=s[a];if(p>this.#r(c,u)){s.splice(a,0,i);break}}s.includes(i)||s.push(i)}}else for(let s of Object.keys(this.#e))this.addRequestListener(s,t,r,n);return this}addMiddleware(e,t){if(e instanceof x){for(let[r,n]of Object.entries(e.listeners))for(let[s,i,p]of n)this.addRequestListener(r,s,i,p??t??e.priority);e.bindTo?.(this)}else if(te(e)){re(e)&&(e=[e]);for(let r of e)this.addRequestListener(...$(r[0])?r:["GET",...r])}else this.#n(e);return this}#n(e,t="GET",r=""){for(let[n,s]of Object.entries(e))typeof s=="function"?$(n)?this.addRequestListener(n,r,s):this.addRequestListener(t,`${r}${n}`,s):$(n)?this.#n(s,n,r):this.#n(s,t,`${r}${n}`)}post(e,t,r){return this.addRequestListener("POST",e,t,r),this}get(e,t,r){return this.addRequestListener("GET",e,t,r),this}put(e,t,r){return this.addRequestListener("PUT",e,t,r),this}patch(e,t,r){return this.addRequestListener("PATCH",e,t,r),this}delete(e,t,r){return this.addRequestListener("DELETE",e,t,r),this}static makeProps({ssl:e,server:t}){return{...Oe(e),IncomingMessage:v,ServerResponse:j,...t}}};var ie=class extends A{constructor(e,t,r=[]){super(t,[new P(e),...r])}name="Static";icon="\u{1F6D2}"};export{x as ClassMiddleware,A as HTTPServer,Pe as InitialsMiddleware,P as StaticMiddleware,ie as StaticServer,J 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
|
-
"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", "../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 type {\n\tHandler,\n\tMethod,\n\tPriority,\n\tRegExpOrString\n} from \"./types\";\n\n\nexport class ClassMiddleware {\n\tpriority: Priority = 0;\n\tlisteners!: Partial<Record<Method, [ RegExpOrString, Handler, Priority? ][]>>;\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 { INSITE_STATIC_ROOT = \"\" } = process.env;\n\nconst nullExtension = {\n\tmimeType: \"application/octet-stream\"\n};\n\n\nexport class StaticMiddleware extends ClassMiddleware {\n\tconstructor({\n\t\tsrc = \"public\",\n\t\troot = INSITE_STATIC_ROOT,\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.#rootRegExp = new RegExp(`^${path.join(\"/\", root, \"/\")}`);\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(\"/\", root, \"/\")}(\\\\w[^\\\\/]*/)*[^\\\\/]+\\\\.[^\\\\/]`), this.#handler ] ]\n\t\t};\n\t\t\n\t}\n\t\n\tpriority = -900;\n\t\n\t#src;\n\t#rootRegExp;\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.#rootRegExp, \"\").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", "import { isEmpty } from \"@nesvet/n\";\nimport { handleRequestCompressed } from \"../compression\";\nimport { ClassMiddleware } from \"../Middleware\";\nimport { Handler } from \"../types\";\n\n\nconst {\n\tINSITE_STATIC_ROOT = \"\",\n\tINSITE_TITLE\n} = 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`<link rel=\"icon\" type=\"image/x-icon\" href=\"${INSITE_STATIC_ROOT}/favicon.ico\">` +\n\t\t\t`${this.#css.map(fileName => `<link rel=\"stylesheet\" href=\"${INSITE_STATIC_ROOT}/${fileName}\" />`).join(\"\")}` +\n\t\t\t`${isEmpty(globals) ? \"\" : `<script>globalThis.__insite=${JSON.stringify(globals)};</script>`}` +\n\t\t\t`<script type=\"text/javascript\" src=\"${INSITE_STATIC_ROOT}/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\tpriority = -1000;\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\ttype ErrorParams,\n\ttype GenericMiddleware,\n\ttype Handler,\n\ttype Listener,\n\ttype Method,\n\ttype Middleware,\n\ttype Options,\n\ttype Priority,\n\ttype RegExpOrString,\n\ttype ResponseBody\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\tvoid new 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, priority ] of methodListeners)\n\t\t\t\t\tthis.addRequestListener(method, regExp, handler, priority);\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\t\n\t\t([\n\t\t\trequest.path,\n\t\t\trequest.querystring\n\t\t] = request.url.split(\"?\", 2));\n\t\t\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\tconst stack = this.#listeners[request.method];\n\t\t\tlet i = 0;\n\t\t\t\n\t\t\tconst next = async () => {\n\t\t\t\t\n\t\t\t\twhile (i < stack.length) {\n\t\t\t\t\tconst listener = stack[i++];\n\t\t\t\t\t\n\t\t\t\t\tif (matches(request, listener[0]))\n\t\t\t\t\t\treturn await listener[1](request, response, next);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t};\n\t\t\t\n\t\t\treturn await next();\n\t\t}\n\t\t\n\t\tresponse.notFound();\n\t\t\n\t};\n\t\n\t#errors: Record<\"default\" | number, ErrorParams> = {\n\t\t401: {\n\t\t\tstatusCode: 401,\n\t\t\tbody: \"Unauthorized\"\n\t\t},\n\t\t403: {\n\t\t\tstatusCode: 403,\n\t\t\tbody: \"Forbidden\"\n\t\t},\n\t\t404: {\n\t\t\tstatusCode: 404,\n\t\t\tbody: \"Not Found\"\n\t\t},\n\t\t408: {\n\t\t\tstatusCode: 408,\n\t\t\tbody: \"Request Timeout\"\n\t\t},\n\t\t410: {\n\t\t\tstatusCode: 410,\n\t\t\tbody: \"Gone\"\n\t\t},\n\t\t500: {\n\t\t\tstatusCode: 500,\n\t\t\tbody: \"Internal Server Error\"\n\t\t},\n\t\t503: {\n\t\t\tstatusCode: 503,\n\t\t\tbody: \"Service Unavailable\"\n\t\t},\n\t\tdefault: {\n\t\t\tstatusCode: 400,\n\t\t\tbody: \"Bad Request\",\n\t\t\thandler(request, response, { statusCode, headers, body }) {\n\t\t\t\treturn response.give(body, headers, statusCode);\n\t\t\t}\n\t\t}\n\t};\n\t\n\t_throw(response: Response, { statusCode, ...restParams }: Omit<ErrorParams, \"body\"> & { body?: ResponseBody }) {\n\t\t\n\t\tconst {\n\t\t\thandler,\n\t\t\t...handlerParams\n\t\t} = {\n\t\t\t...this.#errors.default,\n\t\t\t...this.#errors[statusCode],\n\t\t\t...restParams\n\t\t};\n\t\t\n\t\treturn handler!(response[requestSymbol], response, handlerParams);\n\t}\n\t\n\t#getWeight(regExp: RegExp, priority: number) {\n\t\tconst source = regExp.source.replace(/\\\\\\/\\??\\$?$/, \"\");\n\t\t\n\t\tlet depth = 0;\n\t\tlet wildcards = 0;\n\t\t\n\t\tfor (let i = 0, { length } = source; i < length; i++)\n\t\t\tswitch (source[i]) {\n\t\t\t\tcase \"/\":\n\t\t\t\t\tdepth++;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"*\":\n\t\t\t\t\twildcards++;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\n\t\treturn (priority * 1000) + (depth * 10 - wildcards);\n\t}\n\t\n\t/** Add request listener */\n\taddRequestListener(method: Method | \"ALL\", regExp: RegExpOrString, handler: Handler, priority = 0) {\n\t\tif (typeof regExp == \"string\")\n\t\t\tregExp = pathToRegExp(regExp);\n\t\t\n\t\tif (method && method !== \"ALL\") {\n\t\t\tconst methodListeners = this.#listeners[method];\n\t\t\t\n\t\t\tif (methodListeners) {\n\t\t\t\tconst listener: Listener = [ regExp, handler, priority ];\n\t\t\t\tconst weight = this.#getWeight(regExp, priority);\n\t\t\t\t\n\t\t\t\tfor (let i = 0; i < methodListeners.length; i++) {\n\t\t\t\t\tconst [ anotherRegExp, , anotherPriority ] = methodListeners[i];\n\t\t\t\t\t\n\t\t\t\t\tif (weight > this.#getWeight(anotherRegExp, anotherPriority)) {\n\t\t\t\t\t\tmethodListeners.splice(i, 0, listener);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!methodListeners.includes(listener))\n\t\t\t\t\tmethodListeners.push(listener);\n\t\t\t}\n\t\t} else\n\t\t\tfor (const specificMethod of Object.keys(this.#listeners) as Method[])\n\t\t\t\tthis.addRequestListener(specificMethod, regExp, handler, priority);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add middleware */\n\taddMiddleware(middleware: GenericMiddleware, priority?: Priority) {\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, listenerPriority ] of regExpOrStringArrayMap)\n\t\t\t\t\tthis.addRequestListener(method as Method, regExpOrString, handler, listenerPriority ?? priority ?? middleware.priority);\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(\n\t\t\t\t\t...isMethod(params[0] as string) ?\n\t\t\t\t\t\tparams as readonly [ Method, RegExpOrString, Handler, Priority? ] :\n\t\t\t\t\t\t[ \"GET\", ...params as [ RegExpOrString, Handler, Priority? ] ] as const\n\t\t\t\t);\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\tif (isMethod(key))\n\t\t\t\t\tthis.addRequestListener(key, prefix, value);\n\t\t\t\telse\n\t\t\t\t\tthis.addRequestListener(method, `${prefix}${key}`, value);\n\t\t\telse\n\t\t\t\tif (isMethod(key))\n\t\t\t\t\tthis.#parseMappedMiddleware(value, key, prefix);\n\t\t\t\telse\n\t\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, priority?: Priority) {\n\t\tthis.addRequestListener(\"POST\", regExp, handler, priority);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add GET request listener */\n\tget(regExp: RegExpOrString, handler: Handler, priority?: Priority) {\n\t\tthis.addRequestListener(\"GET\", regExp, handler, priority);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add PUT request listener */\n\tput(regExp: RegExpOrString, handler: Handler, priority?: Priority) {\n\t\tthis.addRequestListener(\"PUT\", regExp, handler, priority);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add PATCH request listener */\n\tpatch(regExp: RegExpOrString, handler: Handler, priority?: Priority) {\n\t\tthis.addRequestListener(\"PATCH\", regExp, handler, priority);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add DELETE request listener */\n\tdelete(regExp: RegExpOrString, handler: Handler, priority?: Priority) {\n\t\tthis.addRequestListener(\"DELETE\", regExp, handler, priority);\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 { getRemoteAddress } from \"insite-common/backend\";\nimport { matchSymbol } from \"./symbols\";\nimport { extractBearerToken, 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#bytes?: Uint8Array<ArrayBufferLike>;\n\t\n\t/** Request body as an Uint8Array */\n\tasync bytes() {\n\t\t\n\t\tthis.#bytes ??= new TextEncoder().encode(await this.text());\n\t\t\n\t\treturn this.#bytes;\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#json?: any;\n\t\n\t/** Request body as a parsed JSON object */\n\tasync json() {\n\t\t\n\t\tthis.#json ??= JSON.parse(await this.text() || \"null\");\n\t\t\n\t\treturn this.#json;\n\t}\n\t\n\t#urlEncoded?: querystring.ParsedUrlQuery;\n\t\n\t/** Request body as a parsed URL-encoded object */\n\tasync urlEncoded() {\n\t\t\n\t\tthis.#urlEncoded = querystring.parse(await this.text());\n\t\t\n\t\treturn this.#urlEncoded;\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\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#ip?: string;\n\t\n\t/** IPv4 */\n\tget ip() {\n\t\treturn (this.#ip ??= getRemoteAddress(this));\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#bearer?: string | null;\n\t\n\t/** Authorization: Bearer token */\n\tget bearer() {\n\t\treturn (this.#bearer ??= extractBearerToken(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\tconst match = request[matchSymbol];\n\t\n\tif (match) {\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({ querystring }: Request<any>): RequestQueryParams {\n\treturn 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\nexport function extractBearerToken({ headers: { authorization } }: Request<any>) {\n\tif (authorization?.indexOf(\"Bearer \") === 0)\n\t\treturn authorization.slice(7);\n\t\n\treturn null;\n}\n", "import { ServerResponse } from \"node:http\";\nimport { Readable } from \"node:stream\";\nimport { cleanup } from \"@nesvet/n\";\nimport { requestSymbol, serverSymbol } from \"./symbols\";\nimport type { Request } from \"./Request\";\nimport type { HTTPServer } from \"./Server\";\nimport type {\n\tErrorHandler,\n\tJSONResponseBody,\n\tResponseBody,\n\tResponseHeaders,\n\tUrlEncodedResponseBody\n} from \"./types\";\n\n\nexport class Response extends ServerResponse<Request> {\n\t\n\t[serverSymbol]!: HTTPServer;\n\t[requestSymbol]!: Request;\n\t\n\t/** Set status code */\n\tstatus(code: number) {\n\t\tthis.statusCode = code;\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Set status code */\n\tset(headers: Record<string, string[] | string>): this;\n\tset(header: string, value: string[] | string): this;\n\tset(header: Record<string, string[] | string> | string, value?: string[] | string) {\n\t\tif (typeof header == \"string\")\n\t\t\treturn this.setHeader(header, value!);\n\t\t\n\t\t// eslint-disable-next-line guard-for-in\n\t\tfor (const key in header)\n\t\t\tthis.setHeader(key, header[key]);\n\t\t\n\t\treturn this;\n\t}\n\t\n\theader = this.set;\n\t\n\t/** End response with a plain text */\n\ttext(body: string, statusCode = 200) {\n\t\treturn this.writeHead(statusCode, {\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: JSONResponseBody, statusCode = 200) {\n\t\tconst body = JSON.stringify(value) ?? \"{}\";\n\t\t\n\t\treturn this.writeHead(statusCode, {\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: UrlEncodedResponseBody, statusCode = 200) {\n\t\tconst body = new URLSearchParams(params).toString();\n\t\t\n\t\treturn this.writeHead(statusCode, {\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, statusCode?: number): this;\n\tstream(stream: Readable, headers?: ResponseHeaders, statusCode?: number): this;\n\tstream(stream: Readable, headers?: ResponseHeaders | number, statusCode = 200) {\n\t\tif (typeof headers == \"number\") {\n\t\t\tstatusCode = headers;\n\t\t\theaders = undefined;\n\t\t}\n\t\t\n\t\tthis.writeHead(statusCode, headers);\n\t\t\n\t\treturn stream.pipe(this);\n\t}\n\t\n\t/** End response depend on the type of the passed body */\n\tgive(body: ResponseBody, statusCode?: number): this;\n\tgive(body: ResponseBody, headers?: ResponseHeaders, statusCode?: number): this;\n\tgive(body: ResponseBody, headers?: ResponseHeaders | number, statusCode = 200) {\n\t\tif (typeof headers == \"number\") {\n\t\t\tstatusCode = headers;\n\t\t\theaders = undefined;\n\t\t}\n\t\t\n\t\treturn (\n\t\t\ttypeof body == \"string\" ?\n\t\t\t\tthis.text(body, statusCode) :\n\t\t\t\tbody instanceof Readable ?\n\t\t\t\t\tthis.stream(body, headers, statusCode) :\n\t\t\t\t\tthis.json(body, statusCode)\n\t\t);\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, body?: ResponseBody, { headers, handler }: { headers?: ResponseHeaders; handler?: ErrorHandler } = {}) {\n\t\treturn this[serverSymbol]._throw(this, cleanup({ statusCode, headers, body, handler }));\n\t}\n\t\n\t/** End response with the 400 Bad Request */\n\tbadRequest(body?: ResponseBody) {\n\t\treturn this.error(400, body);\n\t}\n\t\n\t/** End response with the 401 Unauthorized */\n\tunauthorized(body?: ResponseBody) {\n\t\treturn this.error(401, body);\n\t}\n\t\n\t/** End response with the 403 Forbidden */\n\tforbidden(body?: ResponseBody) {\n\t\treturn this.error(403, body);\n\t}\n\t\n\t/** End response with the 404 Not Found */\n\tnotFound(body?: ResponseBody) {\n\t\treturn this.error(404, body);\n\t}\n\t\n\t/** End response with the 408 Request Timeout */\n\trequestTimeout(body?: ResponseBody) {\n\t\treturn this.error(408, body);\n\t}\n\t\n\t/** End response with the 410 Gone */\n\tgone(body?: ResponseBody) {\n\t\treturn this.error(410, body);\n\t}\n\t\n\t/** End response with the 500 Internal Server Error */\n\tinternalServerError(body?: ResponseBody) {\n\t\treturn this.error(500, body);\n\t}\n\t\n\t/** End response with the 503 Service Unavailable */\n\tserviceUnavailable(body?: ResponseBody) {\n\t\treturn this.error(503, body);\n\t}\n\t\n}\n", "import type http from \"node:http\";\nimport type https from \"node:https\";\nimport type { Readable } from \"node:stream\";\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\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 Next<R = unknown> = () => Promise<R>;\n\nexport type Priority = number;\n\nexport type Handler = (request: Request, response: Response, next: Next) => unknown;\n\nexport type Listener = [ RegExp, Handler, Priority ];\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, Priority? ] | readonly [ RegExpOrString, Handler, Priority? ];\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\nexport type ResponseHeaders = http.OutgoingHttpHeader[] | http.OutgoingHttpHeaders;\n\nexport type JSONResponseBody = Parameters<JSON[\"stringify\"]>[0];\n\nexport type UrlEncodedResponseBody = ConstructorParameters<typeof URLSearchParams>[0];\n\nexport type ResponseBody = JSONResponseBody | Readable | UrlEncodedResponseBody | string;// eslint-disable-line @typescript-eslint/no-redundant-type-constituents\n\nexport type ErrorParams = {\n\tstatusCode: number;\n\theaders?: ResponseHeaders;\n\tbody: ResponseBody;\n\thandler?: ErrorHandler;\n};\n\nexport type ErrorHandler = (request: Request, response: Response, errorParams: Omit<ErrorParams, \"handler\">) => Response;\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", "INSITE_STATIC_ROOT", "nullExtension", "StaticMiddleware", "ClassMiddleware", "src", "root", "_path", "extensions", "defaultExtensions", "resolved", "restricted", "preloaded", "path", "entryPoint", "fs", "#src", "#rootRegExp", "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", "isEmpty", "INSITE_STATIC_ROOT", "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", "getRemoteAddress", "serverSymbol", "requestSymbol", "matchSymbol", "pathRegExp", "subPathToRegExpSource", "path", "index", "_", "wildcard", "param", "optional", "subPath", "group", "pathToRegExp", "wildcardKeyRegExp", "extractUrlParams", "request", "match", "matchSymbol", "params", "key", "value", "extractQueryParams", "querystring", "queryParams", "pair", "extractBearerToken", "authorization", "matches", "request", "regExp", "match", "matchSymbol", "RequestBody", "#request", "#text", "resolve", "reject", "text", "chunk", "#bytes", "#json", "#urlEncoded", "querystring", "Request", "IncomingMessage", "#ip", "getRemoteAddress", "#params", "extractUrlParams", "#query", "extractQueryParams", "#bearer", "extractBearerToken", "#body", "ServerResponse", "Readable", "
|
|
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/cleanup.ts", "../../../../@nesvet/npm/n/src/noop.ts", "../../../../@nesvet/npm/n/src/StatefulPromise.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 type {\n\tHandler,\n\tMethod,\n\tPriority,\n\tRegExpOrString\n} from \"./types\";\n\n\nexport class ClassMiddleware {\n\tpriority: Priority = 0;\n\tlisteners!: Partial<Record<Method, [ RegExpOrString, Handler, Priority? ][]>>;\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 { INSITE_STATIC_ROOT = \"\" } = process.env;\n\nconst nullExtension = {\n\tmimeType: \"application/octet-stream\"\n};\n\n\nexport class StaticMiddleware extends ClassMiddleware {\n\tconstructor({\n\t\tsrc = \"public\",\n\t\troot = INSITE_STATIC_ROOT,\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.#rootRegExp = new RegExp(`^${path.join(\"/\", root, \"/\")}`);\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(\"/\", root, \"/\")}(\\\\w[^\\\\/]*/)*[^\\\\/]+\\\\.[^\\\\/]`), this.#handler ] ]\n\t\t};\n\t\t\n\t}\n\t\n\tpriority = -900;\n\t\n\t#src;\n\t#rootRegExp;\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\t\n\t\tlet fileName;\n\t\t\n\t\ttry {\n\t\t\tfileName = decodeURI(request.url);\n\t\t} catch {\n\t\t\treturn response.notFound();\n\t\t}\n\t\t\n\t\tfileName = fileName.replace(this.#rootRegExp, \"\").replaceAll(\"../\", \"\");\n\t\t\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", "// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function cleanup<T extends Record<string, any>>(object: T): T {\n\tfor (const key in object)\n\t\tif (object[key] === undefined)\n\t\t\tdelete object[key];\n\t\n\treturn object;\n}\n", "export function noop() { /**/ }\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Value<T> = PromiseLike<T> | T;\ntype Resolve<T> = (value: Value<T>) => void;\ntype Reject = (reason?: any) => void;\n\ntype Options = {\n\tsignal?: AbortSignal;\n\ttimeout?: number;\n};\n\nconst nativesMap = new WeakMap<StatefulPromise<any>, { resolve: Resolve<any>; reject: Reject }>();\n\n\nexport class StatefulPromise<T> extends Promise<T> {\n\tconstructor(\n\t\texecutor?: (resolve: Resolve<T>, reject: Reject) => void,\n\t\toptions?: Options\n\t) {\n\t\tlet nativeResolve: Resolve<T>;\n\t\tlet nativeReject: Reject;\n\t\t\n\t\tsuper((resolve, reject) => {\n\t\t\tnativeResolve = resolve;\n\t\t\tnativeReject = reject;\n\t\t\t\n\t\t});\n\t\t\n\t\tnativesMap.set(this, { resolve: nativeResolve!, reject: nativeReject! });\n\t\t\n\t\tif (options?.signal)\n\t\t\tif (options.signal.aborted)\n\t\t\t\tthis.reject(new DOMException(\"Aborted\", \"AbortError\"));\n\t\t\telse {\n\t\t\t\tconst abortListener = () => this.reject(new DOMException(\"Aborted\", \"AbortError\"));\n\t\t\t\t\n\t\t\t\toptions.signal.addEventListener(\"abort\", abortListener);\n\t\t\t\t\n\t\t\t\tthis.finally(() => options.signal?.removeEventListener(\"abort\", abortListener));\n\t\t\t}\n\t\t\n\t\tif (typeof options?.timeout === \"number\" && Number.isFinite(options.timeout)) {\n\t\t\tconst timeout = setTimeout(() => this.reject(new DOMException(\"Timeout exceeded\", \"TimeoutError\")), options.timeout);\n\t\t\t\n\t\t\tthis.finally(() => clearTimeout(timeout));\n\t\t}\n\t\t\n\t\texecutor?.(this.resolve, this.reject);\n\t\t\n\t}\n\t\n\tisPending = true;\n\tisFulfilled = false;\n\tisRejected = false;\n\t\n\tstate: \"fulfilled\" | \"pending\" | \"rejected\" = \"pending\";\n\t\n\tresult?: T | unknown;\n\t\n\treadonly resolve = (value: Value<T>) => {\n\t\t\n\t\tif (this.isPending) {\n\t\t\tthis.isPending = false;\n\t\t\tthis.isFulfilled = true;\n\t\t\tthis.state = \"fulfilled\";\n\t\t\tthis.result = value;\n\t\t\t\n\t\t\tconst native = nativesMap.get(this);\n\t\t\t\n\t\t\tif (native) {\n\t\t\t\tnative.resolve.call(this, value);\n\t\t\t\tnativesMap.delete(this);\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n\treadonly reject = (reason?: any) => {\n\t\t\n\t\tif (this.isPending) {\n\t\t\tthis.isPending = false;\n\t\t\tthis.isRejected = true;\n\t\t\tthis.state = \"rejected\";\n\t\t\tthis.result = reason;\n\t\t\t\n\t\t\tconst native = nativesMap.get(this);\n\t\t\t\n\t\t\tif (native) {\n\t\t\t\tnative.reject.call(this, reason);\n\t\t\t\tnativesMap.delete(this);\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n\t\n\tstatic resolved<U>(value: U): StatefulPromise<U> {\n\t\treturn new StatefulPromise<U>(resolve => resolve(value));\n\t}\n\t\n\tstatic rejected(reason: unknown): StatefulPromise<never> {\n\t\treturn new StatefulPromise((_, reject) => reject(reason));\n\t}\n\t\n}\n", "import { noop } from \"./noop.js\";\nimport { StatefulPromise } from \"./StatefulPromise.js\";\n\n\ntype Callback = (...args: any[]) => unknown;// eslint-disable-line @typescript-eslint/no-explicit-any\ntype FunctionOrBoolean = (() => unknown) | boolean;\ntype Options = { leading?: FunctionOrBoolean; maxWait?: number; trailing?: FunctionOrBoolean };\n\ntype DebouncedFunction<C extends Callback> = {\n\t(this: ThisParameterType<C>, ...args: Parameters<C>): Promise<Awaited<ReturnType<C>>>;\n};\n\nexport type Debounced<C extends Callback, R extends ReturnType<C>> = DebouncedFunction<C> & {\n\tcallback: C;\n\tpromise: StatefulPromise<R>;\n\tresolve: (value: R) => void;\n\treject: (reason?: unknown) => void;\n\trun(): Promise<R>;\n\tclear(shouldRun?: boolean): Promise<void>;\n};\n\n\nexport function debounce<C extends Callback, R extends ReturnType<C>>(callback: C, limit = 0, options: Options = {}) {\n\tlet { leading = false, trailing = true } = options;\n\tconst { maxWait = Infinity } = options;\n\t\n\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\tlet maxWaitTimeout: ReturnType<typeof setTimeout> | undefined;\n\tlet end: number | undefined;\n\tlet context: ThisParameterType<C>;\n\tlet args: unknown[];\n\tlet initial: FunctionOrBoolean;\n\tlet final: FunctionOrBoolean;\n\tlet result: R;\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\t\n\t\t\tclearTimeout(maxWaitTimeout);\n\t\t\tmaxWaitTimeout = undefined;\n\t\t\t\n\t\t\tif (typeof final == \"function\")\n\t\t\t\tawait final();\n\t\t\t\n\t\t\tdebounced.resolve(result);\n\t\t\t\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\t\n\t\trun();\n\t\t\n\t\tmaxWaitTimeout = setTimeout(maxWaitExpired as TimerHandler, maxWait);\n\t\t\n\t} : null;\n\t\n\tasync function run() {\n\t\ttry {\n\t\t\tresult = await callback.apply(context, args) as R;\n\t\t\t\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tdebounced.reject(error);\n\t\t\t\n\t\t\tthrow error;\n\t\t}\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<C, R> = 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.isPending)\n\t\t\tdebounced.promise = new StatefulPromise<R>((resolve, reject) => {\n\t\t\t\tdebounced.resolve = resolve;\n\t\t\t\tdebounced.reject = reject;\n\t\t\t\t\n\t\t\t\tif (typeof initial == \"function\") {\n\t\t\t\t\tinitial();\n\t\t\t\t\t\n\t\t\t\t\tinitial = false;\n\t\t\t\t\t\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\t\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\n\t\treturn debounced.promise;\n\t} as DebouncedFunction<C>, {\n\t\tcallback,\n\t\tpromise: StatefulPromise.resolved(undefined as unknown as R),\n\t\tresolve: noop,\n\t\treject: 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\tmaxWaitTimeout = undefined;\n\t\t\t\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: StatefulPromise.resolved(undefined), // eslint-disable-line unicorn/no-useless-undefined\n\tresolve: noop,\n\treject: noop,\n\trun: noop,\n\tclear: noop\n}) as Debounced<() => void, void>;\n\n\nexport function throttle(callback: Callback, 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 {\n\tINSITE_STATIC_ROOT = \"\",\n\tINSITE_TITLE\n} = 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`<link rel=\"icon\" type=\"image/x-icon\" href=\"${INSITE_STATIC_ROOT}/favicon.ico\">` +\n\t\t\t`${this.#css.map(fileName => `<link rel=\"stylesheet\" href=\"${INSITE_STATIC_ROOT}/${fileName}\" />`).join(\"\")}` +\n\t\t\t`${isEmpty(globals) ? \"\" : `<script>globalThis.__insite=${JSON.stringify(globals)};</script>`}` +\n\t\t\t`<script type=\"text/javascript\" src=\"${INSITE_STATIC_ROOT}/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\tpriority = -1000;\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\ttype ErrorParams,\n\ttype GenericMiddleware,\n\ttype Handler,\n\ttype Listener,\n\ttype Method,\n\ttype Middleware,\n\ttype Options,\n\ttype Priority,\n\ttype RegExpOrString,\n\ttype ResponseBody\n} from \"./types\";\nimport { pathToRegExp } from \"./utils\";\n\n\nexport class HTTPServer {\n\tconstructor({\n\t\ticon = \"\uD83D\uDD78\uFE0F \",\n\t\tname = \"HTTP\",\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\tthis.icon = icon;\n\t\tthis.name = name;\n\t\t\n\t\tif (isServerServer(server)) {\n\t\t\tthis.server = server;\n\t\t\t\n\t\t\tvoid new 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, priority ] of methodListeners)\n\t\t\t\t\tthis.addRequestListener(method, regExp, handler, priority);\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\ticon;\n\tname;\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\t\n\t\t([\n\t\t\trequest.path,\n\t\t\trequest.querystring\n\t\t] = request.url.split(\"?\", 2));\n\t\t\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\tconst stack = this.#listeners[request.method];\n\t\t\tlet i = 0;\n\t\t\t\n\t\t\tconst next = async () => {\n\t\t\t\t\n\t\t\t\twhile (i < stack.length) {\n\t\t\t\t\tconst listener = stack[i++];\n\t\t\t\t\t\n\t\t\t\t\tif (matches(request, listener[0]))\n\t\t\t\t\t\treturn await listener[1](request, response, next);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t};\n\t\t\t\n\t\t\treturn await next();\n\t\t}\n\t\t\n\t\tresponse.notFound();\n\t\t\n\t};\n\t\n\t#errors: Record<\"default\" | number, ErrorParams> = {\n\t\t401: {\n\t\t\tstatusCode: 401,\n\t\t\tbody: \"Unauthorized\"\n\t\t},\n\t\t403: {\n\t\t\tstatusCode: 403,\n\t\t\tbody: \"Forbidden\"\n\t\t},\n\t\t404: {\n\t\t\tstatusCode: 404,\n\t\t\tbody: \"Not Found\"\n\t\t},\n\t\t408: {\n\t\t\tstatusCode: 408,\n\t\t\tbody: \"Request Timeout\"\n\t\t},\n\t\t410: {\n\t\t\tstatusCode: 410,\n\t\t\tbody: \"Gone\"\n\t\t},\n\t\t500: {\n\t\t\tstatusCode: 500,\n\t\t\tbody: \"Internal Server Error\"\n\t\t},\n\t\t503: {\n\t\t\tstatusCode: 503,\n\t\t\tbody: \"Service Unavailable\"\n\t\t},\n\t\tdefault: {\n\t\t\tstatusCode: 400,\n\t\t\tbody: \"Bad Request\",\n\t\t\thandler(request, response, { statusCode, headers, body }) {\n\t\t\t\treturn response.give(body, headers, statusCode);\n\t\t\t}\n\t\t}\n\t};\n\t\n\t_throw(response: Response, { statusCode, ...restParams }: Omit<ErrorParams, \"body\"> & { body?: ResponseBody }) {\n\t\t\n\t\tconst {\n\t\t\thandler,\n\t\t\t...handlerParams\n\t\t} = {\n\t\t\t...this.#errors.default,\n\t\t\t...this.#errors[statusCode],\n\t\t\t...restParams\n\t\t};\n\t\t\n\t\treturn handler!(response[requestSymbol], response, handlerParams);\n\t}\n\t\n\t#getWeight(regExp: RegExp, priority: number) {\n\t\tconst source = regExp.source.replace(/\\\\\\/\\??\\$?$/, \"\");\n\t\t\n\t\tlet depth = 0;\n\t\tlet wildcards = 0;\n\t\t\n\t\tfor (let i = 0, { length } = source; i < length; i++)\n\t\t\tswitch (source[i]) {\n\t\t\t\tcase \"/\":\n\t\t\t\t\tdepth++;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"*\":\n\t\t\t\t\twildcards++;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\n\t\treturn (priority * 1000) + (depth * 10 - wildcards);\n\t}\n\t\n\t/** Add request listener */\n\taddRequestListener(method: Method | \"ALL\", regExp: RegExpOrString, handler: Handler, priority = 0) {\n\t\tif (typeof regExp == \"string\")\n\t\t\tregExp = pathToRegExp(regExp);\n\t\t\n\t\tif (method && method !== \"ALL\") {\n\t\t\tconst methodListeners = this.#listeners[method];\n\t\t\t\n\t\t\tif (methodListeners) {\n\t\t\t\tconst listener: Listener = [ regExp, handler, priority ];\n\t\t\t\tconst weight = this.#getWeight(regExp, priority);\n\t\t\t\t\n\t\t\t\tfor (let i = 0; i < methodListeners.length; i++) {\n\t\t\t\t\tconst [ anotherRegExp, , anotherPriority ] = methodListeners[i];\n\t\t\t\t\t\n\t\t\t\t\tif (weight > this.#getWeight(anotherRegExp, anotherPriority)) {\n\t\t\t\t\t\tmethodListeners.splice(i, 0, listener);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!methodListeners.includes(listener))\n\t\t\t\t\tmethodListeners.push(listener);\n\t\t\t}\n\t\t} else\n\t\t\tfor (const specificMethod of Object.keys(this.#listeners) as Method[])\n\t\t\t\tthis.addRequestListener(specificMethod, regExp, handler, priority);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add middleware */\n\taddMiddleware(middleware: GenericMiddleware, priority?: Priority) {\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, listenerPriority ] of regExpOrStringArrayMap)\n\t\t\t\t\tthis.addRequestListener(method as Method, regExpOrString, handler, listenerPriority ?? priority ?? middleware.priority);\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(\n\t\t\t\t\t...isMethod(params[0] as string) ?\n\t\t\t\t\t\tparams as readonly [ Method, RegExpOrString, Handler, Priority? ] :\n\t\t\t\t\t\t[ \"GET\", ...params as [ RegExpOrString, Handler, Priority? ] ] as const\n\t\t\t\t);\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\tif (isMethod(key))\n\t\t\t\t\tthis.addRequestListener(key, prefix, value);\n\t\t\t\telse\n\t\t\t\t\tthis.addRequestListener(method, `${prefix}${key}`, value);\n\t\t\telse\n\t\t\t\tif (isMethod(key))\n\t\t\t\t\tthis.#parseMappedMiddleware(value, key, prefix);\n\t\t\t\telse\n\t\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, priority?: Priority) {\n\t\tthis.addRequestListener(\"POST\", regExp, handler, priority);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add GET request listener */\n\tget(regExp: RegExpOrString, handler: Handler, priority?: Priority) {\n\t\tthis.addRequestListener(\"GET\", regExp, handler, priority);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add PUT request listener */\n\tput(regExp: RegExpOrString, handler: Handler, priority?: Priority) {\n\t\tthis.addRequestListener(\"PUT\", regExp, handler, priority);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add PATCH request listener */\n\tpatch(regExp: RegExpOrString, handler: Handler, priority?: Priority) {\n\t\tthis.addRequestListener(\"PATCH\", regExp, handler, priority);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Add DELETE request listener */\n\tdelete(regExp: RegExpOrString, handler: Handler, priority?: Priority) {\n\t\tthis.addRequestListener(\"DELETE\", regExp, handler, priority);\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 { getRemoteAddress } from \"insite-common/backend\";\nimport { matchSymbol } from \"./symbols\";\nimport { extractBearerToken, 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#bytes?: Uint8Array<ArrayBufferLike>;\n\t\n\t/** Request body as an Uint8Array */\n\tasync bytes() {\n\t\t\n\t\tthis.#bytes ??= new TextEncoder().encode(await this.text());\n\t\t\n\t\treturn this.#bytes;\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#json?: any;\n\t\n\t/** Request body as a parsed JSON object */\n\tasync json() {\n\t\t\n\t\tthis.#json ??= JSON.parse(await this.text() || \"null\");\n\t\t\n\t\treturn this.#json;\n\t}\n\t\n\t#urlEncoded?: querystring.ParsedUrlQuery;\n\t\n\t/** Request body as a parsed URL-encoded object */\n\tasync urlEncoded() {\n\t\t\n\t\tthis.#urlEncoded = querystring.parse(await this.text());\n\t\t\n\t\treturn this.#urlEncoded;\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\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#ip?: string;\n\t\n\t/** IPv4 */\n\tget ip() {\n\t\treturn (this.#ip ??= getRemoteAddress(this));\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#bearer?: string | null;\n\t\n\t/** Authorization: Bearer token */\n\tget bearer() {\n\t\treturn (this.#bearer ??= extractBearerToken(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\tconst match = request[matchSymbol];\n\t\n\tif (match) {\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({ querystring }: Request<any>): RequestQueryParams {\n\treturn querystring?.split(\"&\").reduce((queryParams, pair) => {\n\t\tconst [ key, value ] = pair.split(\"=\");\n\t\t\n\t\ttry {\n\t\t\tqueryParams[key] = decodeURIComponent(value || \"\");\n\t\t} catch {\n\t\t\tqueryParams[key] = \"\";\n\t\t}\n\t\t\n\t\treturn queryParams;\n\t}, {} as RequestQueryParams) ?? {};\n}\n\nexport function extractBearerToken({ headers: { authorization } }: Request<any>) {\n\tif (authorization?.indexOf(\"Bearer \") === 0)\n\t\treturn authorization.slice(7);\n\t\n\treturn null;\n}\n", "import { ServerResponse } from \"node:http\";\nimport { Readable } from \"node:stream\";\nimport { cleanup } from \"@nesvet/n\";\nimport { requestSymbol, serverSymbol } from \"./symbols\";\nimport type { Request } from \"./Request\";\nimport type { HTTPServer } from \"./Server\";\nimport type {\n\tErrorHandler,\n\tJSONResponseBody,\n\tResponseBody,\n\tResponseHeaders,\n\tUrlEncodedResponseBody\n} from \"./types\";\n\n\nexport class Response extends ServerResponse<Request> {\n\t\n\t[serverSymbol]!: HTTPServer;\n\t[requestSymbol]!: Request;\n\t\n\t/** Set status code */\n\tstatus(code: number) {\n\t\tthis.statusCode = code;\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/** Set status code */\n\tset(headers: Record<string, string[] | string>): this;\n\tset(header: string, value: string[] | string): this;\n\tset(header: Record<string, string[] | string> | string, value?: string[] | string) {\n\t\tif (typeof header == \"string\")\n\t\t\treturn this.setHeader(header, value!);\n\t\t\n\t\t// eslint-disable-next-line guard-for-in\n\t\tfor (const key in header)\n\t\t\tthis.setHeader(key, header[key]);\n\t\t\n\t\treturn this;\n\t}\n\t\n\theader = this.set;\n\t\n\t/** End response with a plain text */\n\ttext(body: string, statusCode = 200) {\n\t\treturn this.writeHead(statusCode, {\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: JSONResponseBody, statusCode = 200) {\n\t\tconst body = JSON.stringify(value) ?? \"{}\";\n\t\t\n\t\treturn this.writeHead(statusCode, {\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: UrlEncodedResponseBody, statusCode = 200) {\n\t\tconst body = new URLSearchParams(params).toString();\n\t\t\n\t\treturn this.writeHead(statusCode, {\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, statusCode?: number): this;\n\tstream(stream: Readable, headers?: ResponseHeaders, statusCode?: number): this;\n\tstream(stream: Readable, headers?: ResponseHeaders | number, statusCode = 200) {\n\t\tif (typeof headers == \"number\") {\n\t\t\tstatusCode = headers;\n\t\t\theaders = undefined;\n\t\t}\n\t\t\n\t\tthis.writeHead(statusCode, headers);\n\t\t\n\t\treturn stream.pipe(this);\n\t}\n\t\n\t/** End response depend on the type of the passed body */\n\tgive(body: ResponseBody, statusCode?: number): this;\n\tgive(body: ResponseBody, headers?: ResponseHeaders, statusCode?: number): this;\n\tgive(body: ResponseBody, headers?: ResponseHeaders | number, statusCode = 200) {\n\t\tif (typeof headers == \"number\") {\n\t\t\tstatusCode = headers;\n\t\t\theaders = undefined;\n\t\t}\n\t\t\n\t\treturn (\n\t\t\ttypeof body == \"string\" ?\n\t\t\t\tthis.text(body, statusCode) :\n\t\t\t\tbody instanceof Readable ?\n\t\t\t\t\tthis.stream(body, headers, statusCode) :\n\t\t\t\t\tthis.json(body, statusCode)\n\t\t);\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, body?: ResponseBody, { headers, handler }: { headers?: ResponseHeaders; handler?: ErrorHandler } = {}) {\n\t\treturn this[serverSymbol]._throw(this, cleanup({ statusCode, headers, body, handler }));\n\t}\n\t\n\t/** End response with the 400 Bad Request */\n\tbadRequest(body?: ResponseBody) {\n\t\treturn this.error(400, body);\n\t}\n\t\n\t/** End response with the 401 Unauthorized */\n\tunauthorized(body?: ResponseBody) {\n\t\treturn this.error(401, body);\n\t}\n\t\n\t/** End response with the 403 Forbidden */\n\tforbidden(body?: ResponseBody) {\n\t\treturn this.error(403, body);\n\t}\n\t\n\t/** End response with the 404 Not Found */\n\tnotFound(body?: ResponseBody) {\n\t\treturn this.error(404, body);\n\t}\n\t\n\t/** End response with the 408 Request Timeout */\n\trequestTimeout(body?: ResponseBody) {\n\t\treturn this.error(408, body);\n\t}\n\t\n\t/** End response with the 410 Gone */\n\tgone(body?: ResponseBody) {\n\t\treturn this.error(410, body);\n\t}\n\t\n\t/** End response with the 500 Internal Server Error */\n\tinternalServerError(body?: ResponseBody) {\n\t\treturn this.error(500, body);\n\t}\n\t\n\t/** End response with the 503 Service Unavailable */\n\tserviceUnavailable(body?: ResponseBody) {\n\t\treturn this.error(503, body);\n\t}\n\t\n}\n", "import type http from \"node:http\";\nimport type https from \"node:https\";\nimport type { Readable } from \"node:stream\";\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\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 Next<R = unknown> = () => Promise<R>;\n\nexport type Priority = number;\n\nexport type Handler = (request: Request, response: Response, next: Next) => unknown;\n\nexport type Listener = [ RegExp, Handler, Priority ];\n\nexport type Options = {\n\t\n\t/**\n\t * Icon for console logs\n\t * @default \"\uD83D\uDD78\uFE0F \"\n\t */\n\ticon?: string;\n\t\n\t/**\n\t * Name\n\t * @default \"HTTP\"\n\t */\n\tname?: string;\n\t\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, Priority? ] | readonly [ RegExpOrString, Handler, Priority? ];\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\nexport type ResponseHeaders = http.OutgoingHttpHeader[] | http.OutgoingHttpHeaders;\n\nexport type JSONResponseBody = Parameters<JSON[\"stringify\"]>[0];\n\nexport type UrlEncodedResponseBody = ConstructorParameters<typeof URLSearchParams>[0];\n\nexport type ResponseBody = JSONResponseBody | Readable | UrlEncodedResponseBody | string;// eslint-disable-line @typescript-eslint/no-redundant-type-constituents\n\nexport type ErrorParams = {\n\tstatusCode: number;\n\theaders?: ResponseHeaders;\n\tbody: ResponseBody;\n\thandler?: ErrorHandler;\n};\n\nexport type ErrorHandler = (request: Request, response: Response, errorParams: Omit<ErrorParams, \"handler\">) => Response;\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", "INSITE_STATIC_ROOT", "nullExtension", "StaticMiddleware", "ClassMiddleware", "src", "root", "_path", "extensions", "defaultExtensions", "resolved", "restricted", "preloaded", "path", "entryPoint", "fs", "#src", "#rootRegExp", "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", "cleanup", "object", "key", "noop", "nativesMap", "StatefulPromise", "_StatefulPromise", "executor", "options", "nativeResolve", "nativeReject", "resolve", "reject", "abortListener", "timeout", "value", "native", "reason", "_", "debounce", "callback", "limit", "options", "leading", "trailing", "maxWait", "timeout", "maxWaitTimeout", "end", "context", "args", "initial", "final", "result", "expired", "n", "debounced", "maxWaitExpired", "run", "error", "_args", "StatefulPromise", "resolve", "reject", "noop", "shouldRun", "isEmpty", "object", "_", "howmuch", "number", "one", "two", "five", "shouldPrintNumber", "u", "d", "INSITE_STATIC_ROOT", "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", "getRemoteAddress", "serverSymbol", "requestSymbol", "matchSymbol", "pathRegExp", "subPathToRegExpSource", "path", "index", "_", "wildcard", "param", "optional", "subPath", "group", "pathToRegExp", "wildcardKeyRegExp", "extractUrlParams", "request", "match", "matchSymbol", "params", "key", "value", "extractQueryParams", "querystring", "queryParams", "pair", "extractBearerToken", "authorization", "matches", "request", "regExp", "match", "matchSymbol", "RequestBody", "#request", "#text", "resolve", "reject", "text", "chunk", "#bytes", "#json", "#urlEncoded", "querystring", "Request", "IncomingMessage", "#ip", "getRemoteAddress", "#params", "extractUrlParams", "#query", "extractQueryParams", "#bearer", "extractBearerToken", "#body", "ServerResponse", "Readable", "Response", "ServerResponse", "serverSymbol", "requestSymbol", "code", "header", "value", "key", "body", "statusCode", "params", "stream", "headers", "Readable", "handler", "cleanup", "METHODS", "isMethod", "string", "isTupleMiddlewareOrArray", "middleware", "isTupleMiddleware", "isRequestMethodAccepted", "requestMethod", "listeners", "isServerServer", "serverOrOptions", "HTTPServer", "_HTTPServer", "icon", "name", "port", "ssl", "listeners", "errors", "server", "middlewares", "isServerServer", "resolve", "showServerListeningMessage", "createServer", "method", "methodListeners", "regExp", "handler", "priority", "statusCodeString", "statusCode", "#errors", "middleware", "#requestListener", "#listeners", "request", "response", "serverSymbol", "requestSymbol", "isRequestMethodAccepted", "stack", "i", "next", "listener", "matches", "headers", "body", "restParams", "handlerParams", "#getWeight", "source", "depth", "wildcards", "length", "pathToRegExp", "weight", "anotherRegExp", "anotherPriority", "specificMethod", "ClassMiddleware", "regExpOrStringArrayMap", "regExpOrString", "listenerPriority", "isTupleMiddlewareOrArray", "isTupleMiddleware", "params", "isMethod", "#parseMappedMiddleware", "prefix", "key", "value", "resolveSSL", "Request", "Response", "StaticServer", "HTTPServer", "options", "serverOptions", "middlewares", "StaticMiddleware"]
|
|
7
7
|
}
|
|
@@ -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;AAInD,OAAO,KAAK,EAAa,OAAO,EAAE,MAAM,SAAS,CAAC;AAUlD,qBAAa,gBAAiB,SAAQ,eAAe;;gBACxC,EACX,GAAc,EACd,IAAyB,EACzB,IAAI,EAAE,KAAK,EACX,UAA8B,EAC9B,QAAQ,EACR,UAAU,EACV,SAAqB,EACrB,GAAE,OAAY;IAyCf,QAAQ,SAAQ;
|
|
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;AAUlD,qBAAa,gBAAiB,SAAQ,eAAe;;gBACxC,EACX,GAAc,EACd,IAAyB,EACzB,IAAI,EAAE,KAAK,EACX,UAA8B,EAC9B,QAAQ,EACR,UAAU,EACV,SAAqB,EACrB,GAAE,OAAY;IAyCf,QAAQ,SAAQ;CA8FhB"}
|
package/dist/types.d.ts
CHANGED
|
@@ -12,6 +12,16 @@ export type Priority = number;
|
|
|
12
12
|
export type Handler = (request: Request, response: Response, next: Next) => unknown;
|
|
13
13
|
export type Listener = [RegExp, Handler, Priority];
|
|
14
14
|
export type Options = {
|
|
15
|
+
/**
|
|
16
|
+
* Icon for console logs
|
|
17
|
+
* @default "πΈοΈ "
|
|
18
|
+
*/
|
|
19
|
+
icon?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Name
|
|
22
|
+
* @default "HTTP"
|
|
23
|
+
*/
|
|
24
|
+
name?: string;
|
|
15
25
|
ssl?: {
|
|
16
26
|
cert: Buffer | string;
|
|
17
27
|
key: Buffer | string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,QAAA,MAAM,OAAO,oDAAuD,CAAC;AAErE,MAAM,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AAE5C,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,MAAM,GAAG,KAAK,CAEjE;AAED,MAAM,MAAM,IAAI,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;AAEjD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;AAEpF,MAAM,MAAM,QAAQ,GAAG,CAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAE,CAAC;AAErD,MAAM,MAAM,OAAO,GAAG;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,QAAA,MAAM,OAAO,oDAAuD,CAAC;AAErE,MAAM,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AAE5C,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,MAAM,GAAG,KAAK,CAEjE;AAED,MAAM,MAAM,IAAI,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;AAEjD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;AAEpF,MAAM,MAAM,QAAQ,GAAG,CAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAE,CAAC;AAErD,MAAM,MAAM,OAAO,GAAG;IAErB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,GAAG,CAAC,EAAE;QACL,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;QACtB,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACrB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC,SAAS,GAAG,MAAM,EAAE,WAAW,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;CAC/E,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC;AAE7C,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAAE,CAAC;AAEhF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAExD,MAAM,MAAM,UAAU,GAAG;IACxB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;CAClC,GAAG;IACH,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;CACvC,GAAG;KACF,CAAC,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,UAAU;CAClC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,SAAS,CAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAE,GAAG,SAAS,CAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAE,CAAC;AAExI,MAAM,MAAM,iBAAiB,GAC5B,eAAe,GACf,UAAU,GACV,eAAe,GACf,eAAe,EAAE,CAAC;AAEnB,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,iBAAiB,GAAG,UAAU,IAAI,eAAe,GAAG,eAAe,EAAE,CAEzH;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,eAAe,GAAG,eAAe,EAAE,GAAG,UAAU,IAAI,eAAe,CAEhH;AAED,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,IAAI,MAAM,CAEtI;AAED,wBAAgB,cAAc,CAAC,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,eAAe,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAEhH;AAED,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC;AAEnF,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhE,MAAM,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtF,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG,QAAQ,GAAG,sBAAsB,GAAG,MAAM,CAAC;AAEzF,MAAM,MAAM,WAAW,GAAG;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,KAAK,QAAQ,CAAC"}
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAqBjE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,UAExC;AAKD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,aAAa,CAgBrE;AAGD,wBAAgB,kBAAkB,CAAC,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,kBAAkB,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAqBjE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,UAExC;AAKD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,aAAa,CAgBrE;AAGD,wBAAgB,kBAAkB,CAAC,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAYpF;AAED,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,iBAK9E"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "insite-http",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.5",
|
|
4
4
|
"description": "inSite HTTPS server",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"module": "./dist/index.js",
|
|
8
|
-
"packageManager": "bun@1.2.
|
|
8
|
+
"packageManager": "bun@1.2.21",
|
|
9
9
|
"scripts": {
|
|
10
10
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
11
11
|
"build": "bun .conveyer.js",
|
|
@@ -24,13 +24,13 @@
|
|
|
24
24
|
"author": "Eugene Nesvetaev <dev@nesvet.dev> (https://nesvet.dev/)",
|
|
25
25
|
"license": "MIT",
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@nesvet/n": "^1.2.
|
|
28
|
-
"insite-common": "^2.3.
|
|
27
|
+
"@nesvet/n": "^1.2.1",
|
|
28
|
+
"insite-common": "^2.3.5"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@nesvet/
|
|
32
|
-
"@
|
|
33
|
-
"
|
|
34
|
-
"typescript": "^5.
|
|
31
|
+
"@nesvet/eslint-config": "^2.1.2",
|
|
32
|
+
"@types/node": "^24.3.1",
|
|
33
|
+
"cnvr": "^2.7.2",
|
|
34
|
+
"typescript": "^5.9.2"
|
|
35
35
|
}
|
|
36
36
|
}
|