fullstx 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/lib/features/utils.js +1 -1
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
|
@@ -66,7 +66,7 @@ ${h}
|
|
|
66
66
|
`:`Running ${r.duration}s ${x} @ ${r.url}${d}
|
|
67
67
|
${h}
|
|
68
68
|
`;f(w),r.workers?c():r.amount?s=D6(e,t,r):a=w6(e,t,r),p()}}),e.on("done",d=>{if(t.renderResultsTable===!1)return;let h=v6(d,t);t.outputStream.write(h)});function c(){u=g6()}function l(){u&&(clearInterval(u),u=null)}function p(){if(!o){if(o=!0,r.workers){e.prependOnceListener("done",l);return}t.outputStream.isTTY&&(r.amount?(e.on("response",()=>{s.tick()}),e.on("reqError",()=>{s.tick()}),e.on("done",()=>{s.tick(r.amount-1)}),process.once("SIGINT",()=>{s.tick(r.amount-1)})):(e.on("tick",()=>{a.tick()}),e.on("done",()=>{a.tick(r.duration-1)}),process.once("SIGINT",()=>{a.tick(r.duration-1)})))}}function f(d){b1&&t.outputStream.write(d+`
|
|
69
|
-
`)}}function w6(e,t,n){if(!t.outputStream.isTTY)return;let i=new y1(t.progressBarString,{width:20,incomplete:" ",total:n.duration,clear:!0,stream:t.outputStream});return i.tick(0),i}function D6(e,t,n){if(!t.outputStream.isTTY)return;let i=new y1(t.progressBarString,{width:20,incomplete:" ",total:n.amount,clear:!0,stream:t.outputStream});return i.tick(0),i}w1.exports=y6});var E1=m((EP,D1)=>{"use strict";var Es=A("events").EventEmitter,{isMainThread:E6}=ir(),C6=j0(),S6=Ju(),A6=ts(),k6=d1(),_6=ql();function F6(e,t){return!(typeof t=="function")&&!e.forever?e.warmup?I6(e):T6(e):Cs(e,null,t)}function T6(e){let t=new Es,n=new Promise((i,r)=>{Cs(e,t,(a,s)=>{if(a)return r(a);i(s)})});return t.then=n.then.bind(n),t.catch=n.catch.bind(n),t}function I6(e){let t={...e,...e.warmup,warmupRunning:!0,renderResultsTable:!1},n=new Es,i=new Es,r=new Promise((a,s)=>{Cs(t,i,(o,u)=>{if(o)return s(o);Cs(e,n,(c,l)=>{if(c)return s(c);l.warmup=u,a(l)})})});return n.then=r.then.bind(r),n.catch=r.catch.bind(r),n}function Cs(e,t,n){let i=typeof n=="function";n=n||A6,t=t||new Es,e=S6(e,i);function r(a,s){if(a)return i?n(a):setImmediate(()=>t.emit("error",a));t.emit("done",s),n(null,s),!a&&e.json&&console.log(JSON.stringify(s))}return e instanceof Error?(r(e),t):(t.opts=e,e.workers&&E6?C6(e,t,r):k6(e,t,r),e[Symbol.for("internal")]&&(!e.json||!process.stdout.isTTY)&&_6(t,e),t)}D1.exports=F6});var A1=m((CP,S1)=>{"use strict";var R6=ys(),C1={warmup:{c:"connections",d:"duration"}};function O6(e){let t=R6(e);function n(a){return t[a]}function i(a,s){return a[s]}function r(a,s){let o=t[s];for(let u in o)i(a,u)&&(o[a[u]]=o[u])}for(let a in C1){let s=C1[a];n(a)&&r(s,a)}return t}S1.exports=O6});var k1=m((SP,B6)=>{B6.exports={name:"autocannon",version:"8.0.0",description:"Fast HTTP benchmarking tool written in Node.js",main:"autocannon.js",bin:{autocannon:"autocannon.js"},scripts:{test:"standard && tap test/serial/*.test.js test/*.test.js","standard:fix":"standard --fix"},"pre-commit":["test"],repository:{type:"git",url:"git+https://github.com/mcollina/autocannon.git"},keywords:["http","soak","load","fast","wrk","ab","test"],author:"Matteo Collina <hello@matteocollina.com>",contributors:["Glen Keane <glenkeane.94@gmail.com>","Donald Robertson <donaldarobertson89@gmail.com","Salman Mitha <SalmanMitha@gmail.com>"],license:"MIT",bugs:{url:"https://github.com/mcollina/autocannon/issues"},homepage:"https://github.com/mcollina/autocannon#readme",devDependencies:{"ansi-regex":"^5.0.1",bl:"^6.0.0",busboy:"^0.3.1","pre-commit":"^1.1.2",proxyquire:"^2.1.3",sinon:"^15.0.0",split2:"^4.0.0",standard:"^17.0.0",tap:"^16.0.0","why-is-node-running":"^2.3.0"},dependencies:{"@minimistjs/subarg":"^1.0.0",chalk:"^4.1.0","char-spinner":"^1.0.1","cli-table3":"^0.6.0","color-support":"^1.1.1","cross-argv":"^2.0.0","form-data":"^4.0.0","has-async-hooks":"^1.0.0","hdr-histogram-js":"^3.0.0","hdr-histogram-percentiles-obj":"^3.0.0","http-parser-js":"^0.5.2",hyperid:"^3.0.0","lodash.chunk":"^4.2.0","lodash.clonedeep":"^4.5.0","lodash.flatten":"^4.4.0","manage-path":"^2.0.0","on-net-listen":"^1.1.1","pretty-bytes":"^5.4.1",progress:"^2.0.3",reinterval:"^1.1.0",retimer:"^3.0.0",semver:"^7.3.2",timestring:"^6.0.0"}}});var T1=m((AP,an)=>{"use strict";var q6=Xp(),_n=A("fs"),L6=A("os"),j6=A("net"),jl=A("path"),Ei=A("url").URL,P6=A("child_process").spawn,N6=td(),M6=id(),U6=ud(),H6=iu(),Ll=E1(),z6=ql(),V6=A1(),{checkURL:W6,ofURL:Ss}=Ta(),{parseHAR:G6}=_u(),Z6=Fa(),Y6=Ju();typeof Ei!="function"&&(console.error("autocannon requires the WHATWG URL API, but it is not available. Please upgrade to Node 6.13+."),process.exit(1));an.exports=Ll;an.exports.track=z6;an.exports.start=F1;an.exports.printResult=H6;an.exports.parseArguments=_1;an.exports.aggregateResult=function(t,n={}){if(!Array.isArray(t))throw new Error('"results" must be an array of results');if(n=Y6(n,!1),n instanceof Error)throw n;return Z6(t,n)};var X6={connections:"c",pipelining:"p",timeout:"t",duration:"d",sampleInt:"L",amount:"a",json:"j",renderLatencyTable:["l","latency"],onPort:"on-port",method:"m",headers:["H","header"],body:"b",form:"F",servername:"s",bailout:"B",input:"i",maxConnectionRequests:"M",maxOverallRequests:"O",connectionRate:"r",overallRate:"R",ignoreCoordinatedOmission:"C",reconnectRate:"D",renderProgressBar:"progress",renderStatusCodes:"statusCodes",title:"T",verbose:"V",version:"v",forever:"f",idReplacement:"I",socketPath:"S",excludeErrorStats:"x",expectBody:"E",workers:"w",warmup:"W",help:"h"},J6={connections:10,timeout:10,pipelining:1,duration:10,sampleInt:1e3,reconnectRate:0,renderLatencyTable:!1,renderProgressBar:!0,renderStatusCodes:!1,json:!1,forever:!1,method:"GET",idReplacement:!1,excludeErrorStats:!1,debug:!1,workers:0,verbose:!0};function _1(e){let t=U6(e,{boolean:["json","n","help","renderLatencyTable","renderProgressBar","renderStatusCodes","forever","idReplacement","excludeErrorStats","onPort","debug","ignoreCoordinatedOmission","verbose"],alias:X6,default:J6,"--":!0});if(t=V6(t),t.url=t._.length>1?t._:t._[0],t["--"][0]==="node"&&(t.onPort=!0),t.onPort&&(t.spawn=t["--"]),t.n&&(t.renderProgressBar=!1,t.renderResultsTable=!1,t.renderStatusCodes=!1),t.version){console.log("autocannon","v"+k1().version),console.log("node",process.version);return}if(!W6(t.url)||t.help){let n=_n.readFileSync(jl.join(__dirname,"help.txt"),"utf8");console.error(n);return}if(process.env.PORT&&(t.url=Ss(t.url).map(n=>new Ei(n,`http://localhost:${process.env.PORT}`).href)),t.url=Ss(t.url).map(n=>(n.indexOf("http")!==0&&n[0]!=="/"&&(n=`http://${n}`),n)),Ss(t.url).map(n=>{try{t.onPort?new Ei(n,"http://localhost"):new Ei(n)}catch(i){console.error(i.message),console.error(""),console.error("When targeting a path without a hostname, the PORT environment variable must be available."),console.error("Use a full URL or set the PORT variable."),process.exit(1)}return null}),t.input&&(t.body=_n.readFileSync(t.input,"utf8")),t.headers&&(Array.isArray(t.headers)||(t.headers=[t.headers]),t.headers=t.headers.reduce((n,i)=>{let r=i.indexOf(":"),a=i.indexOf("="),s=Math.min(r<0?1/0:r,a<0?1/0:a);if(Number.isFinite(s)&&s>0)return n[i.slice(0,s)]=i.slice(s+1),n;throw new Error(`An HTTP header was not correctly formatted: ${i}`)},{})),t.har)try{t.har=JSON.parse(_n.readFileSync(t.har));let n=G6(t.har),i=Ss(t.url,!0).map(r=>new Ei(r).origin);for(let[r]of n)i.includes(r)||console.error(`Warning: skipping requests to '${r}' as the target is ${i.join(", ")}`)}catch(n){throw new Error(`Failed to load HAR file content: ${n.message}`)}if(t.tlsOptions={},t.cert)try{t.tlsOptions.cert=_n.readFileSync(t.cert)}catch(n){throw new Error(`Failed to load cert file: ${n.message}`)}if(t.key)try{t.tlsOptions.key=_n.readFileSync(t.key)}catch(n){throw new Error(`Failed to load key file: ${n.message}`)}if(t.ca){typeof t.ca=="string"?t.ca=[t.ca]:Array.isArray(t.ca._)&&(t.ca=t.ca._);try{t.tlsOptions.ca=t.ca.map(n=>_n.readFileSync(n))}catch(n){throw new Error(`Failed to load ca file: ${n.message}`)}}return t[Symbol.for("internal")]=!0,t}function F1(e){if(e)if(e.onPort){M6()||(console.error("The --on-port flag requires the async_hooks builtin module, but it is not available. Please upgrade to Node 8.1+."),process.exit(1));let{socketPath:t,server:n}=K6(a=>{let s=new Ei(e.url,`http://localhost:${a}`).href,o=Object.assign({},e,{onPort:!1,url:s}),u=Ll(o,()=>{r.kill("SIGINT"),n.close()});process.once("SIGINT",()=>{u.stop()})}),i=N6({PATH:process.env.NODE_PATH});i.unshift(jl.join(__dirname,"lib/preload"));let r=P6(e.spawn[0],e.spawn.slice(1),{stdio:["ignore","inherit","inherit"],env:Object.assign({},process.env,{NODE_OPTIONS:["-r","autocannonDetectPort"].join(" ")+(process.env.NODE_OPTIONS?` ${process.env.NODE_OPTIONS}`:""),NODE_PATH:i.get(),AUTOCANNON_SOCKET:t})})}else try{let t=Ll(e);t.then&&t.catch(n=>{console.error(n.message)})}catch(t){console.error(t.message)}}function K6(e){let t=`${process.pid}.autocannon`,n=process.platform==="win32"?`\\\\?\\pipe\\${t}`:jl.join(L6.tmpdir(),t),i=j6.createServer(r=>{r.once("data",a=>{let s=a.toString();e(s)})});return i.listen(n),i.on("close",()=>{try{_n.unlinkSync(n)}catch{}}),{socketPath:n,server:i}}if(A.main===an){let e=q6(process.argv.slice(2));F1(_1(e))}});var R1=m((_P,I1)=>{Xs();I1.exports=function(t){let n=t.opts,i=t.router,r=zs(),a=t.sentry,s=t.faker,o=t.sanitizeHtml,u=t.wsRedisPub;["apiKey","basicAuth","authorize","requirePermission","rateLimit","session","csrf","i18n","redisCache","csp","htmx","routeLocalization"].forEach(c=>{Object.defineProperty(t,c,{get(){return $6("../middlewares/"+c)}})}),Object.assign(t,{dbPoolStats(){if(!t.db)return{error:"Database is not configured"};if(n.db&&n.db.type==="postgres")return{totalCount:t.db.totalCount,idleCount:t.db.idleCount,waitingCount:t.db.waitingCount};if(n.db&&(n.db.type==="mysql"||n.db.type==="mariadb")){let c=t.db.pool||t.db,l=c.pool||c;if(l&&l._allConnections)return{totalCount:l._allConnections.length,idleCount:l._freeConnections.length,waitingCount:l._connectionQueue?l._connectionQueue.length:0}}return{message:"Pool stats not supported for this database type"}},sanitize(c,l){if(!o)throw new Error("Please install sanitize-html to use sanitize()");return o(c,l)},metaTags(c={}){let l="";for(let[p,f]of Object.entries(c))f&&(p==="title"?l+=`<title>${f}</title>
|
|
69
|
+
`)}}function w6(e,t,n){if(!t.outputStream.isTTY)return;let i=new y1(t.progressBarString,{width:20,incomplete:" ",total:n.duration,clear:!0,stream:t.outputStream});return i.tick(0),i}function D6(e,t,n){if(!t.outputStream.isTTY)return;let i=new y1(t.progressBarString,{width:20,incomplete:" ",total:n.amount,clear:!0,stream:t.outputStream});return i.tick(0),i}w1.exports=y6});var E1=m((EP,D1)=>{"use strict";var Es=A("events").EventEmitter,{isMainThread:E6}=ir(),C6=j0(),S6=Ju(),A6=ts(),k6=d1(),_6=ql();function F6(e,t){return!(typeof t=="function")&&!e.forever?e.warmup?I6(e):T6(e):Cs(e,null,t)}function T6(e){let t=new Es,n=new Promise((i,r)=>{Cs(e,t,(a,s)=>{if(a)return r(a);i(s)})});return t.then=n.then.bind(n),t.catch=n.catch.bind(n),t}function I6(e){let t={...e,...e.warmup,warmupRunning:!0,renderResultsTable:!1},n=new Es,i=new Es,r=new Promise((a,s)=>{Cs(t,i,(o,u)=>{if(o)return s(o);Cs(e,n,(c,l)=>{if(c)return s(c);l.warmup=u,a(l)})})});return n.then=r.then.bind(r),n.catch=r.catch.bind(r),n}function Cs(e,t,n){let i=typeof n=="function";n=n||A6,t=t||new Es,e=S6(e,i);function r(a,s){if(a)return i?n(a):setImmediate(()=>t.emit("error",a));t.emit("done",s),n(null,s),!a&&e.json&&console.log(JSON.stringify(s))}return e instanceof Error?(r(e),t):(t.opts=e,e.workers&&E6?C6(e,t,r):k6(e,t,r),e[Symbol.for("internal")]&&(!e.json||!process.stdout.isTTY)&&_6(t,e),t)}D1.exports=F6});var A1=m((CP,S1)=>{"use strict";var R6=ys(),C1={warmup:{c:"connections",d:"duration"}};function O6(e){let t=R6(e);function n(a){return t[a]}function i(a,s){return a[s]}function r(a,s){let o=t[s];for(let u in o)i(a,u)&&(o[a[u]]=o[u])}for(let a in C1){let s=C1[a];n(a)&&r(s,a)}return t}S1.exports=O6});var k1=m((SP,B6)=>{B6.exports={name:"autocannon",version:"8.0.0",description:"Fast HTTP benchmarking tool written in Node.js",main:"autocannon.js",bin:{autocannon:"autocannon.js"},scripts:{test:"standard && tap test/serial/*.test.js test/*.test.js","standard:fix":"standard --fix"},"pre-commit":["test"],repository:{type:"git",url:"git+https://github.com/mcollina/autocannon.git"},keywords:["http","soak","load","fast","wrk","ab","test"],author:"Matteo Collina <hello@matteocollina.com>",contributors:["Glen Keane <glenkeane.94@gmail.com>","Donald Robertson <donaldarobertson89@gmail.com","Salman Mitha <SalmanMitha@gmail.com>"],license:"MIT",bugs:{url:"https://github.com/mcollina/autocannon/issues"},homepage:"https://github.com/mcollina/autocannon#readme",devDependencies:{"ansi-regex":"^5.0.1",bl:"^6.0.0",busboy:"^0.3.1","pre-commit":"^1.1.2",proxyquire:"^2.1.3",sinon:"^15.0.0",split2:"^4.0.0",standard:"^17.0.0",tap:"^16.0.0","why-is-node-running":"^2.3.0"},dependencies:{"@minimistjs/subarg":"^1.0.0",chalk:"^4.1.0","char-spinner":"^1.0.1","cli-table3":"^0.6.0","color-support":"^1.1.1","cross-argv":"^2.0.0","form-data":"^4.0.0","has-async-hooks":"^1.0.0","hdr-histogram-js":"^3.0.0","hdr-histogram-percentiles-obj":"^3.0.0","http-parser-js":"^0.5.2",hyperid:"^3.0.0","lodash.chunk":"^4.2.0","lodash.clonedeep":"^4.5.0","lodash.flatten":"^4.4.0","manage-path":"^2.0.0","on-net-listen":"^1.1.1","pretty-bytes":"^5.4.1",progress:"^2.0.3",reinterval:"^1.1.0",retimer:"^3.0.0",semver:"^7.3.2",timestring:"^6.0.0"}}});var T1=m((AP,an)=>{"use strict";var q6=Xp(),_n=A("fs"),L6=A("os"),j6=A("net"),jl=A("path"),Ei=A("url").URL,P6=A("child_process").spawn,N6=td(),M6=id(),U6=ud(),H6=iu(),Ll=E1(),z6=ql(),V6=A1(),{checkURL:W6,ofURL:Ss}=Ta(),{parseHAR:G6}=_u(),Z6=Fa(),Y6=Ju();typeof Ei!="function"&&(console.error("autocannon requires the WHATWG URL API, but it is not available. Please upgrade to Node 6.13+."),process.exit(1));an.exports=Ll;an.exports.track=z6;an.exports.start=F1;an.exports.printResult=H6;an.exports.parseArguments=_1;an.exports.aggregateResult=function(t,n={}){if(!Array.isArray(t))throw new Error('"results" must be an array of results');if(n=Y6(n,!1),n instanceof Error)throw n;return Z6(t,n)};var X6={connections:"c",pipelining:"p",timeout:"t",duration:"d",sampleInt:"L",amount:"a",json:"j",renderLatencyTable:["l","latency"],onPort:"on-port",method:"m",headers:["H","header"],body:"b",form:"F",servername:"s",bailout:"B",input:"i",maxConnectionRequests:"M",maxOverallRequests:"O",connectionRate:"r",overallRate:"R",ignoreCoordinatedOmission:"C",reconnectRate:"D",renderProgressBar:"progress",renderStatusCodes:"statusCodes",title:"T",verbose:"V",version:"v",forever:"f",idReplacement:"I",socketPath:"S",excludeErrorStats:"x",expectBody:"E",workers:"w",warmup:"W",help:"h"},J6={connections:10,timeout:10,pipelining:1,duration:10,sampleInt:1e3,reconnectRate:0,renderLatencyTable:!1,renderProgressBar:!0,renderStatusCodes:!1,json:!1,forever:!1,method:"GET",idReplacement:!1,excludeErrorStats:!1,debug:!1,workers:0,verbose:!0};function _1(e){let t=U6(e,{boolean:["json","n","help","renderLatencyTable","renderProgressBar","renderStatusCodes","forever","idReplacement","excludeErrorStats","onPort","debug","ignoreCoordinatedOmission","verbose"],alias:X6,default:J6,"--":!0});if(t=V6(t),t.url=t._.length>1?t._:t._[0],t["--"][0]==="node"&&(t.onPort=!0),t.onPort&&(t.spawn=t["--"]),t.n&&(t.renderProgressBar=!1,t.renderResultsTable=!1,t.renderStatusCodes=!1),t.version){console.log("autocannon","v"+k1().version),console.log("node",process.version);return}if(!W6(t.url)||t.help){let n=_n.readFileSync(jl.join(__dirname,"help.txt"),"utf8");console.error(n);return}if(process.env.PORT&&(t.url=Ss(t.url).map(n=>new Ei(n,`http://localhost:${process.env.PORT}`).href)),t.url=Ss(t.url).map(n=>(n.indexOf("http")!==0&&n[0]!=="/"&&(n=`http://${n}`),n)),Ss(t.url).map(n=>{try{t.onPort?new Ei(n,"http://localhost"):new Ei(n)}catch(i){console.error(i.message),console.error(""),console.error("When targeting a path without a hostname, the PORT environment variable must be available."),console.error("Use a full URL or set the PORT variable."),process.exit(1)}return null}),t.input&&(t.body=_n.readFileSync(t.input,"utf8")),t.headers&&(Array.isArray(t.headers)||(t.headers=[t.headers]),t.headers=t.headers.reduce((n,i)=>{let r=i.indexOf(":"),a=i.indexOf("="),s=Math.min(r<0?1/0:r,a<0?1/0:a);if(Number.isFinite(s)&&s>0)return n[i.slice(0,s)]=i.slice(s+1),n;throw new Error(`An HTTP header was not correctly formatted: ${i}`)},{})),t.har)try{t.har=JSON.parse(_n.readFileSync(t.har));let n=G6(t.har),i=Ss(t.url,!0).map(r=>new Ei(r).origin);for(let[r]of n)i.includes(r)||console.error(`Warning: skipping requests to '${r}' as the target is ${i.join(", ")}`)}catch(n){throw new Error(`Failed to load HAR file content: ${n.message}`)}if(t.tlsOptions={},t.cert)try{t.tlsOptions.cert=_n.readFileSync(t.cert)}catch(n){throw new Error(`Failed to load cert file: ${n.message}`)}if(t.key)try{t.tlsOptions.key=_n.readFileSync(t.key)}catch(n){throw new Error(`Failed to load key file: ${n.message}`)}if(t.ca){typeof t.ca=="string"?t.ca=[t.ca]:Array.isArray(t.ca._)&&(t.ca=t.ca._);try{t.tlsOptions.ca=t.ca.map(n=>_n.readFileSync(n))}catch(n){throw new Error(`Failed to load ca file: ${n.message}`)}}return t[Symbol.for("internal")]=!0,t}function F1(e){if(e)if(e.onPort){M6()||(console.error("The --on-port flag requires the async_hooks builtin module, but it is not available. Please upgrade to Node 8.1+."),process.exit(1));let{socketPath:t,server:n}=K6(a=>{let s=new Ei(e.url,`http://localhost:${a}`).href,o=Object.assign({},e,{onPort:!1,url:s}),u=Ll(o,()=>{r.kill("SIGINT"),n.close()});process.once("SIGINT",()=>{u.stop()})}),i=N6({PATH:process.env.NODE_PATH});i.unshift(jl.join(__dirname,"lib/preload"));let r=P6(e.spawn[0],e.spawn.slice(1),{stdio:["ignore","inherit","inherit"],env:Object.assign({},process.env,{NODE_OPTIONS:["-r","autocannonDetectPort"].join(" ")+(process.env.NODE_OPTIONS?` ${process.env.NODE_OPTIONS}`:""),NODE_PATH:i.get(),AUTOCANNON_SOCKET:t})})}else try{let t=Ll(e);t.then&&t.catch(n=>{console.error(n.message)})}catch(t){console.error(t.message)}}function K6(e){let t=`${process.pid}.autocannon`,n=process.platform==="win32"?`\\\\?\\pipe\\${t}`:jl.join(L6.tmpdir(),t),i=j6.createServer(r=>{r.once("data",a=>{let s=a.toString();e(s)})});return i.listen(n),i.on("close",()=>{try{_n.unlinkSync(n)}catch{}}),{socketPath:n,server:i}}if(A.main===an){let e=q6(process.argv.slice(2));F1(_1(e))}});var R1=m((_P,I1)=>{Xs();I1.exports=function(t){let n=t.opts,i=t.router,r=zs(),a=t.sentry,s=t.faker,o=t.sanitizeHtml,u=t.wsRedisPub;["apiKey","basicAuth","authorize","requirePermission","rateLimit","session","csrf","i18n","redisCache","csp","htmx","routeLocalization"].forEach(c=>{Object.defineProperty(t,c,{get(){return $6("../middlewares/"+c+".js")}})}),Object.assign(t,{dbPoolStats(){if(!t.db)return{error:"Database is not configured"};if(n.db&&n.db.type==="postgres")return{totalCount:t.db.totalCount,idleCount:t.db.idleCount,waitingCount:t.db.waitingCount};if(n.db&&(n.db.type==="mysql"||n.db.type==="mariadb")){let c=t.db.pool||t.db,l=c.pool||c;if(l&&l._allConnections)return{totalCount:l._allConnections.length,idleCount:l._freeConnections.length,waitingCount:l._connectionQueue?l._connectionQueue.length:0}}return{message:"Pool stats not supported for this database type"}},sanitize(c,l){if(!o)throw new Error("Please install sanitize-html to use sanitize()");return o(c,l)},metaTags(c={}){let l="";for(let[p,f]of Object.entries(c))f&&(p==="title"?l+=`<title>${f}</title>
|
|
70
70
|
`:p.startsWith("og:")||p.startsWith("twitter:")?l+=`<meta property="${p}" content="${f}">
|
|
71
71
|
`:l+=`<meta name="${p}" content="${f}">
|
|
72
72
|
`);return l},sentry:a,faker:s,wsBroadcast(c){let l=typeof c=="string"?c:JSON.stringify(c);if(u&&u.isOpen){let p=n.ws.pubSubChannel||"fullstx_ws_pubsub";u.publish(p,l).catch(console.error)}else this.wss&&this.wss.clients.forEach(p=>{p.readyState===1&&p.send(l)})},factory(c,l){if(!s)throw new Error("Please install @faker-js/faker to use factory()");let p=[];for(let f=0;f<c;f++)p.push(l(s,f));return p},zod:A("zod"),container:{services:new Map,register(c,l){this.services.set(c,l)},get(c){if(!this.services.has(c))throw new Error(`Service ${c} not found in IoC container`);return this.services.get(c)}},cache:new Map,upload(c={dest:"uploads/"}){return A("multer")(c)},knex(c){return A("knex")(c)},queue(c,l){let{Queue:p}=A("bullmq");return new p(c,{connection:l})},worker(c,l,p){let{Worker:f}=A("bullmq");return new f(c,l,{connection:p})},swagger(c="/api-docs",l={}){let p=A("swagger-ui-dist").getAbsoluteFSPath(),f=A("fs"),d=A("path");i.get(c+"/swagger.json",(h,x)=>{if(x.json)return x.json(l);x.writeHead(200,{"Content-Type":"application/json"}),x.end(JSON.stringify(l))}),i.use((h,x,w)=>{if(h.url.startsWith(c+"/assets/")){let C=h.url.replace(c+"/assets/",""),F=d.join(p,C);if(F.startsWith(p)&&f.existsSync(F)){let S=f.readFileSync(F),v=d.extname(F),g={".css":"text/css",".js":"application/javascript",".png":"image/png"};return x.writeHead(200,{"Content-Type":g[v]||"text/plain"}),x.end(S)}}w()}),i.get(c,(h,x)=>{let w=`
|