nats-memory-server
Version:
Node.js package for an in-memory NATS server
113 lines • 4.82 kB
JavaScript
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
;