compd
Version:
Run a command under a docker-compose setup
43 lines (42 loc) • 1.63 kB
JavaScript
;
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;