UNPKG

nats-memory-server

Version:
113 lines 4.82 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.NatsServer = exports.DEFAULT_NATS_SERVER_OPTIONS = void 0; const child_process_1 = __importDefault(require("child_process")); const utils_1 = require("./utils"); exports.DEFAULT_NATS_SERVER_OPTIONS = { verbose: true, ip: `0.0.0.0`, args: [], logger: console, }; class NatsServer { constructor(options) { this.options = options; } start() { return __awaiter(this, void 0, void 0, function* () { const { verbose, logger } = this.options; if (this.process != null) { const message = `Nats server already started at ${this.getUrl()}`; if (verbose) { logger.warn(message); } return this; } const projectPath = (0, utils_1.getProjectPath)(); const projectConfig = (0, utils_1.getProjectConfig)(projectPath); const config = Object.assign(Object.assign({}, projectConfig), this.options); const { args, ip, port = yield (0, utils_1.getFreePort)(), binPath } = config; return yield new Promise((resolve, reject) => { this.process = child_process_1.default.spawn(binPath, [`--addr`, ip, `--port`, port.toString(), ...args], { stdio: `pipe` }); this.host = ip; this.port = port; this.process.once(`error`, (err) => { if (verbose) { logger.error(`NATS server error:`, err); } reject(err); }); this.process.stderr.on(`data`, (data) => { var _a; if (verbose && data != null) { // eslint-disable-next-line @typescript-eslint/no-base-to-string logger.log(data.toString()); } if ((data === null || data === void 0 ? void 0 : data.toString().includes(`Server is ready`)) === true) { if (verbose) { logger.log(`NATS server is ready!`); } resolve(this); (_a = this.process) === null || _a === void 0 ? void 0 : _a.unref(); } }); this.process.on(`close`, (code) => { if (verbose) { logger.log(`NATS server was stop!`); } if (code === 0 || code === 1) { resolve(this); } else { const message = `Process was killed ${code !== null ? `with exit code: ${code}` : ``} `; if (verbose) { logger.warn(message, code); } reject(new Error(message)); } }); }); }); } getUrl() { return `nats://${this.host}:${this.port}`; } getHost() { return this.host; } getPort() { return this.port; } stop() { return __awaiter(this, void 0, void 0, function* () { if (this.process == null) { return; } const { verbose, logger } = this.options; yield new Promise((resolve) => { var _a, _b; (_a = this.process) === null || _a === void 0 ? void 0 : _a.on(`close`, (_code, _signal) => { if (verbose) { logger.log(`NATS server was stop at:`, this.getUrl()); } resolve(); }); (_b = this.process) === null || _b === void 0 ? void 0 : _b.kill(); }); }); } } exports.NatsServer = NatsServer; //# sourceMappingURL=nats-server.js.map