UNPKG

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