"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const net_1 = require("net"); const tls_1 = require("tls"); const utils_1 = require("../utils"); const AbstractConnector_1 = require("./AbstractConnector"); class StandaloneConnector extends AbstractConnector_1.default { constructor(options) { super(options.disconnectTimeout); this.options = options; } connect(_) { const { options } = this; this.connecting = true; let connectionOptions; if ("path" in options && options.path) { connectionOptions = { path: options.path, }; } else { connectionOptions = {}; if ("port" in options && options.port != null) { connectionOptions.port = options.port; } if ("host" in options && options.host != null) { connectionOptions.host = options.host; } if ("family" in options && options.family != null) { connectionOptions.family = options.family; } } if (options.tls) { Object.assign(connectionOptions, options.tls); } // TODO: // We use native Promise here since other Promise // implementation may use different schedulers that // cause issue when the stream is resolved in the // next tick. // Should use the provided promise in the next major // version and do not connect before resolved. return new Promise((resolve, reject) => { process.nextTick(() => { if (!this.connecting) { reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG)); return; } try { if (options.tls) { this.stream = (0, tls_1.connect)(connectionOptions); } else { this.stream = (0, net_1.createConnection)(connectionOptions); } } catch (err) { reject(err); return; } this.stream.once("error", (err) => { this.firstError = err; }); resolve(this.stream); }); }); } } exports.default = StandaloneConnector;