UNPKG

compd

Version:

Run a command under a docker-compose setup

43 lines (42 loc) 1.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeDetector = void 0; const net = require("net"); const already_1 = require("already"); const types_1 = require("./types"); const utils_1 = require("./utils"); function makeDetector(opts) { return { name: "tcp", matches(service) { return { ports: service.ports.filter(port => port.proto === 'tcp'), final: false, }; }, async waitFor(service) { const ports = service.ports.map(port => port.host); const available = async (port) => { return new Promise(resolve => { const stream = net.createConnection(port, service.dockerHost); stream.on('connect', () => { resolve(true); stream.destroy(); }); const events = ['error', 'close', 'timeout']; events.forEach(event => stream.on(event, () => { stream.destroy(); resolve(false); })); }); }; const retryPort = async (port) => { const isUp = await (0, utils_1.retry)(() => available(port), opts.retryDelay, opts.retryTime); if (!isUp) throw new types_1.RetryLimitError(`Port ${port} is not open`); }; await (0, already_1.map)(ports, { concurrency: Infinity }, port => retryPort(port)); }, }; } exports.makeDetector = makeDetector;