UNPKG

dockest

Version:

Dockest is an integration testing tool aimed at alleviating the process of evaluating unit tests whilst running multi-container Docker applications.

55 lines 2.19 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createDockerEventEmitter = exports.isKillEvent = exports.isDieEvent = void 0; const events_1 = require("events"); const execa_1 = __importDefault(require("execa")); /* eslint-disable-line import/default */ const parseJsonSafe = (data) => { try { return JSON.parse(data); } catch (err) { return null; } }; const isDieEvent = (event) => event.action === 'die'; exports.isDieEvent = isDieEvent; const isKillEvent = (event) => event.action === 'kill'; exports.isKillEvent = isKillEvent; const createDockerEventEmitter = (composeFilePath) => { const command = `docker-compose --file ${composeFilePath} events --json`; const childProcess = (0, execa_1.default)(command, { shell: true, reject: false }); if (!childProcess.stdout) { childProcess.kill(); throw new Error('Event Process has not output stream.'); } const emitter = new events_1.EventEmitter(); // without this line only the first data event is fired (in some undefinable cases) childProcess.then(() => { return undefined; }); childProcess.stdout.addListener('data', (chunk) => { const lines = chunk.toString().split(`\n`).filter(Boolean); for (const line of lines) { const data = parseJsonSafe(line); if (!data) return; // convert health status to friendlier format if (data.action.startsWith('health_status: ')) { const healthStatus = data.action .replace('health_status: ', '') .trim(); data.action = 'health_status'; data.attributes.healthStatus = healthStatus; } emitter.emit(data.service, data); } }); return Object.assign(emitter, { destroy: () => childProcess.cancel(), }); }; exports.createDockerEventEmitter = createDockerEventEmitter; //# sourceMappingURL=create-docker-event-emitter.js.map