harperdb
Version:
HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.
4 lines (3 loc) • 7.33 kB
JavaScript
;var ee=Object.defineProperty;var a=(e,t)=>ee(e,"name",{value:t,configurable:!0});var I=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var C=I((be,U)=>{var{join:te,dirname:F}=require("node:path"),{existsSync:ne,readFileSync:re}=require("node:fs");function oe(){let t=__dirname,n,r=0;for(;!ne(n=te(t,"package.json"));)if(t===(t=F(t))||r++>10)throw new Error("Could not find package root");return n}a(oe,"findPackageJson");var b=oe(),se=JSON.parse(re(b,"utf8")),ie=F(b);U.exports={packageJson:se,PACKAGE_ROOT:ie}});var q=I((Ve,V)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:n,join:r,basename:v}=require("node:path"),{existsSync:u,statSync:f,readFileSync:x,writeFileSync:P,unlinkSync:m}=require("node:fs"),{isMainThread:w}=require("node:worker_threads"),{spawnSync:Z,spawn:K}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:i}=C(),L=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],_="ts-build";if(w){let l=!1,g=!1;if(g=u(r(i,_))){let d=new Set;e.sync(L.map(o=>`${o}/**/*.ts`),{cwd:i}).forEach(o=>{let S=0,c=0;try{d.add(o),S=f(r(i,o)).mtimeMs-5e3,c=f(r(i,_,o.replace(/.ts$/,".js"))).mtimeMs}catch{}S>c&&(l=!0)}),e.sync(L.map(o=>`${o}/**/*.js`),{cwd:r(i,_)}).forEach(o=>{if(!d.has(o.replace(/.js$/,".ts")))try{m(r(i,_,o))}catch{}})}else l=!0;if(l){console.log("Compiling TypeScript...");let d=Z("npx",["tsc"],{cwd:i});if(d.stdout?.length&&console.log(d.stdout.toString()),d.stderr?.length&&console.log(d.stderr.toString()),g){let o=r(t(),"harperdb-tsc.pid"),S=!1;if(u(o))try{process.kill(+x(o,"utf8"),0),S=!0}catch{}if(!S){console.log("Starting background TypeScript compilation...");let c=K("npx",["tsc","--watch"],{detached:!0,cwd:i,stdio:"ignore"});c.on("error",N=>{console.error("Error trying to compile TypeScript",N)}),c.pid&&P(o,String(c.pid),"utf-8"),c.unref()}}}}let M=V.constructor,Q=M._findPath;M._findPath=function(l,g,d){if(l.startsWith(".")&&!d&&g.length===1&&g[0].startsWith(i)&&!g[0].includes("node_modules")){let o=n(i,g[0]),S;o.startsWith(_)?S=r(i,n(_,o)):S=r(i,_,o),(l.endsWith(".js")||l.endsWith(".ts"))&&(l=l.slice(0,-3));let c=r(S,l),N=c+".js";if(u(N))return N;if(v(c).includes(".")&&u(c))return c}return Q(l,g,d)}}});var k=I((je,G)=>{"use strict";var{platform:qe}=require("os"),ce="nats-server.zip",D="nats-server",ae=process.platform==="win32"?`${D}.exe`:D,le=/^[^\s.,*>]+$/,j="__request__",de=a(e=>`${e}.${j}`,"REQUEST_SUBJECT"),Se={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},ue={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Ee={HUB:"hub.pid",LEAF:"leaf.pid"},ge={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},pe={SUCCESS:"success",ERROR:"error"},_e={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Re={TXN:"txn",MSGID:"msgid"},A={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Te={[A.ERR]:1,[A.WRN]:2,[A.INF]:3,[A.DBG]:4,[A.TRC]:5},fe={debug:"-D",trace:"-DVV"};G.exports={NATS_SERVER_ZIP:ce,NATS_SERVER_NAME:D,NATS_BINARY_NAME:ae,PID_FILES:Ee,NATS_CONFIG_FILES:ue,SERVER_SUFFIX:ge,NATS_TERM_CONSTRAINTS_RX:le,REQUEST_SUFFIX:j,UPDATE_REMOTE_RESPONSE_STATUSES:pe,CLUSTER_STATUS_STATUSES:_e,REQUEST_SUBJECT:de,SUBJECT_PREFIXES:Re,MSG_HEADERS:Se,LOG_LEVELS:A,LOG_LEVEL_FLAGS:fe,LOG_LEVEL_HIERARCHY:Te}});var Y=I((ke,X)=>{"use strict";var R=require("fs-extra"),p=require("path"),s=require("chalk"),Ae=require("needle"),B=require("node-stream-zip"),H=require("semver"),T=k(),me=require("util"),we=require("child_process"),{platform:Ne}=require("os"),he=me.promisify(we.exec),{packageJson:z,PACKAGE_ROOT:ye}=C(),E=p.join(ye,"dependencies"),ve=p.join(E,T.NATS_SERVER_ZIP),O=z.engines["go-lang"],y=z.engines[T.NATS_SERVER_NAME],Pe=`${process.platform}-${process.arch}`,$=p.join(E,Pe,`${T.NATS_BINARY_NAME}`),Ie=`https://github.com/nats-io/nats-server/releases/download/v${y}/nats-server-v${y}-`,W={"linux-x64":"linux-amd64.zip","linux-arm64":"linux-arm64.zip","darwin-x64":"darwin-amd64.zip","darwin-arm64":"darwin-arm64.zip","win32-x64":"windows-amd64.zip"},Oe=Object.keys(W).map(e=>e.split("-"));async function h(e,t=void 0){let{stdout:n,stderr:r}=await he(e,{cwd:t});if(r)throw new Error(r.replace(`
`,""));return n.replace(`
`,"")}a(h,"runCommand");async function $e(){try{await R.access($)}catch{return!1}let e=await h(`${$} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return H.eq(t,y)}a($e,"checkNATSServerInstalled");async function xe(){console.log(s.green(`Verifying go v${O} is on system.`));let e;try{e=(await h("go version",void 0)).match(/[\d.]+/)[0]}catch{throw Error("go does not appear to be installed or is not in the PATH, cannot install clustering dependencies.")}if(!H.gte(e,O))throw Error(`go version ${O} or higher must be installed.`);console.log(s.green(`go v${O} is on the system.`))}a(xe,"checkGoVersion");async function Ce(){console.log(s.green("Extracting NATS Server source code."));let e=new B.async({file:ve}),t=p.join(E,`${T.NATS_SERVER_NAME}-src`),n=await e.extract(null,E);return console.log(s.green(`Extracted ${n} entries.`)),await e.close(),t}a(Ce,"extractNATSServer");async function De(e){let t=p.join(e,T.NATS_BINARY_NAME),n=p.join(E,"pkg");await R.move(t,$,{overwrite:!0}),await R.remove(e),await R.remove(n)}a(De,"cleanUp");async function J(e,t){let n=e&&t?`${e}-${t}`:`${process.platform}-${process.arch}`,r=W[n];if(r===void 0)throw Error(`unknown platform - architecture: ${n}`);let v=`${Ie}${r}`,u=p.join(E,n,r);await R.ensureFile(u),console.log(s.green(`****Downloading install of NATS Server: ${v}****`)),await Ae("get",v,{output:u,follow_max:5}),console.log(s.green("Successfully downloaded and saved nats-server zip.")),console.log(s.green("Extracting nats-server zip."));let f=new B.async({file:u}),x=await f.entries(),P=e==="win32"||process.platform==="win32"?`${T.NATS_SERVER_NAME}.exe`:T.NATS_SERVER_NAME,m=p.join(E,n,P);for(let w of Object.values(x))!w.isDirectory&&w.name.endsWith(P)&&(await f.extract(w.name,m),console.log(s.green(`Successfully extracted nats-server zip to ${m}.`)));await f.close(),await R.remove(u),await R.chmod(m,511)}a(J,"downloadNATSServer");async function Le(){if(console.log(s.green("****Starting install of NATS Server.****")),await $e()){console.log(s.green(`****NATS Server v${y} installed.****`));return}try{await J();try{let n=await h(`${$} --version`,void 0);console.log(s.green(`****Successfully extracted ${n}.****`))}catch(n){if(n.toString().includes("file busy"))console.warn("Error checking NATS versions",n);else throw n}return}catch(n){console.error(s.red(`Error: ${n.message}. Failed to download NATS server. Building from source`))}try{await xe()}catch(n){console.error(s.red(n.message)),process.exit(1)}let t=await Ce();console.log(s.green("Building NATS Server binary.")),Ne()=="win32"?await h(`set GOPATH=${E}&& go build`,t):await h(`export GOPATH=${E} && go build`,t),console.log(s.green("Building NATS Server binary complete.")),await De(t),console.log(s.green(`****NATS Server v${y} is installed.****`))}a(Le,"installer");X.exports={installer:Le,downloadNATSServer:J,ALL_SUPPORTED_PLATFORM_ARCHITECTURES:Oe}});q();var He=require("fs"),ze=require("path"),Me=Y();(async()=>{try{await Me.installer()}catch(e){console.error(e)}})();