UNPKG

@actuatorjs/actuatorjs

Version:

Core interfaces and classes for actuatorjs ecosystem

2 lines (1 loc) 2.37 kB
import p from"node:fs/promises";import c from"node:os";import m from"node:path";var i="Unknown",n;((a)=>{a.Node="Node.js";a.Deno="Deno";a.Bun="Bun";a[a.Unknown=i]="Unknown"})(n||={});var s;((t)=>{t.V8="V8";t.JavaScriptCore="JavaScriptCore";t[t.Unknown=i]="Unknown"})(s||={});async function l(){try{let e=m.resolve(process.cwd(),"package.json"),r=await p.readFile(e,"utf-8");return JSON.parse(r).outDir||"dist"}catch{return"dist"}}function h(){let e=n.Unknown,r=i,o=s.Unknown,t=i;if(typeof Bun!=="undefined")e="Bun",r=Bun.version,o="JavaScriptCore",t=i;else if(typeof Deno!=="undefined"&&typeof Deno.version!=="undefined")e="Deno",r=Deno.version.deno,o="V8",t=Deno.version.v8;else if(typeof process!=="undefined"&&process.versions?.node)e="Node.js",r=process.version,o="V8",t=process.versions.v8;return{runtime:{name:e,version:r},engine:{name:o,version:t}}}function f(){let e={name:c.type(),version:c.release(),arch:c.arch()},r=process.memoryUsage(),o={pid:process.pid,memory:{heapTotal:r.heapTotal,heapUsed:r.heapUsed,rss:r.rss},cpus:c.cpus().length},t=h();return{os:e,process:o,javascript:t}}async function u(){let e=await l(),r=f();if(e){let o=m.resolve(process.cwd(),e,"actuator.info.json");try{let t=await p.readFile(o,"utf-8");return{...JSON.parse(t),...r}}catch{console.warn(`[InfoCheck] No built actuator.info.json found at ${o}. Returning runtime info.`)}}else console.warn("[InfoCheck] No outDir configured in package.json, returning runtime info.");return r}class g{healthCheck;constructor(e){this.healthCheck=e}async getHealth(){return await this.healthCheck.getHealth()}async getInfo(){return await u()}}class d{name;constructor(e){this.name=e}getName(){return this.name}}class I{healthIndicators;constructor(e){this.healthIndicators=e}async getHealth(){let e={},r="UP";return await Promise.all(this.healthIndicators.map(async(o)=>{try{let t=await o.check();if(e[o.getName()]=t,t.status==="DOWN")r="DOWN"}catch(t){e[o.getName()]={status:"DOWN",details:{error:t instanceof Error?t.message:String(t)}},r="DOWN"}})),{status:r,components:e}}}class H{name;checkFn;constructor(e,r){this.name=e,this.checkFn=r}getName(){return this.name}async check(){return await this.checkFn()}}export{f as getRuntimeInfo,l as getOutDirFromPackageJson,h as getJavascriptInfo,u as getInfo,H as SimpleHealthIndicator,I as HealthCheck,g as Actuator,d as AbstractHealthIndicator};