expose event to overwrite in SessionOptions

* need to retain eventPort and canUseEvents arguments and functionality for backwards
compatibility.
This commit is contained in:
Arthur Ozga 2017-11-14 16:42:18 -08:00
parent c453e08135
commit bf8f9be677
2 changed files with 21 additions and 4 deletions

View file

@ -510,6 +510,13 @@ namespace ts.server {
class IOSession extends Session {
constructor(options: IoSessionOptions) {
const { host, eventPort, globalTypingsCacheLocation, typingSafeListLocation, typesMapLocation, npmLocation, canUseEvents } = options;
let event: Event;
if (canUseEvents && eventPort) {
const eventSender = new SocketEventSender(host, logger, eventPort);
event = eventSender.event;
}
const typingsInstaller = disableAutomaticTypingAcquisition
? undefined
: new NodeTypingsInstaller(telemetryEnabled, logger, host, globalTypingsCacheLocation, typingSafeListLocation, typesMapLocation, npmLocation);
@ -525,6 +532,7 @@ namespace ts.server {
logger,
canUseEvents,
eventPort,
event,
globalPlugins: options.globalPlugins,
pluginProbeLocations: options.pluginProbeLocations,
allowLocalPluginLoads: options.allowLocalPluginLoads });

View file

@ -255,7 +255,8 @@ namespace ts.server {
event: Event;
}
class SocketEventSender implements EventSender {
/** @internal */
export class SocketEventSender implements EventSender {
private host: ServerHost;
private logger: Logger;
private eventPort: number;
@ -316,6 +317,11 @@ namespace ts.server {
* Otherwise, events are sent through the host.
*/
eventPort?: number;
/**
* An optional callback overriding the default behavior for sending events.
* if set, `canUseEvents` and `eventPort` are ignored.
*/
event?: Event;
eventHandler?: ProjectServiceEventHandler;
throttleWaitMilliseconds?: number;
@ -353,11 +359,14 @@ namespace ts.server {
this.hrtime = opts.hrtime;
this.logger = opts.logger;
this.eventPort = opts.eventPort;
this.canUseEvents = opts.canUseEvents;
this.canUseEvents = opts.canUseEvents || !!opts.event;
const { throttleWaitMilliseconds } = opts;
if (this.eventPort && this.canUseEvents) {
if (opts.event) {
this.event = opts.event;
}
else if (this.eventPort && this.canUseEvents) {
const eventSender = new SocketEventSender(this.host, this.logger, this.eventPort);
this.event = eventSender.event;
}