vscode-jsonrpc
Advanced tools
Comparing version 1.2.0 to 2.0.0-pre.1
import { RequestType, ResponseError, ErrorCodes, NotificationType } from './messages'; | ||
import { IMessageReader, DataCallback, StreamMessageReader, IPCMessageReader } from './messageReader'; | ||
import { IMessageWriter, StreamMessageWriter, IPCMessageWriter } from './messageWriter'; | ||
export { ErrorCodes, ResponseError, RequestType, NotificationType, IMessageReader, DataCallback, StreamMessageReader, IPCMessageReader, IMessageWriter, StreamMessageWriter, IPCMessageWriter }; | ||
export interface IRequestHandler<P, R, E> { | ||
(params?: P): R | ResponseError<E> | Thenable<R | ResponseError<E>>; | ||
import { MessageReader, DataCallback, StreamMessageReader, IPCMessageReader } from './messageReader'; | ||
import { MessageWriter, StreamMessageWriter, IPCMessageWriter } from './messageWriter'; | ||
import { Disposable, Event, Emitter } from './events'; | ||
import { CancellationTokenSource, CancellationToken } from './cancellation'; | ||
export { ErrorCodes, ResponseError, RequestType, NotificationType, MessageReader, DataCallback, StreamMessageReader, IPCMessageReader, MessageWriter, StreamMessageWriter, IPCMessageWriter, CancellationTokenSource, CancellationToken, Disposable, Event, Emitter }; | ||
export interface RequestHandler<P, R, E> { | ||
(params: P, token: CancellationToken): R | ResponseError<E> | Thenable<R | ResponseError<E>>; | ||
} | ||
export interface INotificationHandler<P> { | ||
(params?: P): void; | ||
export interface NotificationHandler<P> { | ||
(params: P): void; | ||
} | ||
@@ -18,6 +20,6 @@ export interface ILogger { | ||
export interface MessageConnection { | ||
sendRequest<P, R, E>(type: RequestType<P, R, E>, params?: P): Thenable<R>; | ||
onRequest<P, R, E>(type: RequestType<P, R, E>, handler: IRequestHandler<P, R, E>): void; | ||
sendRequest<P, R, E>(type: RequestType<P, R, E>, params: P, token?: CancellationToken): Thenable<R>; | ||
onRequest<P, R, E>(type: RequestType<P, R, E>, handler: RequestHandler<P, R, E>): void; | ||
sendNotification<P>(type: NotificationType<P>, params?: P): void; | ||
onNotification<P>(type: NotificationType<P>, handler: INotificationHandler<P>): void; | ||
onNotification<P>(type: NotificationType<P>, handler: NotificationHandler<P>): void; | ||
listen(): any; | ||
@@ -30,5 +32,5 @@ dispose(): void; | ||
} | ||
export declare function createServerMessageConnection(reader: IMessageReader, writer: IMessageWriter, logger: ILogger): ServerMessageConnection; | ||
export declare function createServerMessageConnection(reader: MessageReader, writer: MessageWriter, logger: ILogger): ServerMessageConnection; | ||
export declare function createServerMessageConnection(inputStream: NodeJS.ReadableStream, outputStream: NodeJS.WritableStream, logger: ILogger): ServerMessageConnection; | ||
export declare function createClientMessageConnection(reader: IMessageReader, writer: IMessageWriter, logger: ILogger): ClientMessageConnection; | ||
export declare function createClientMessageConnection(reader: MessageReader, writer: MessageWriter, logger: ILogger): ClientMessageConnection; | ||
export declare function createClientMessageConnection(inputStream: NodeJS.ReadableStream, outputStream: NodeJS.WritableStream, logger: ILogger): ClientMessageConnection; |
@@ -16,2 +16,12 @@ /* -------------------------------------------------------------------------------------------- | ||
exports.IPCMessageWriter = messageWriter_1.IPCMessageWriter; | ||
var events_1 = require('./events'); | ||
exports.Event = events_1.Event; | ||
exports.Emitter = events_1.Emitter; | ||
var cancellation_1 = require('./cancellation'); | ||
exports.CancellationTokenSource = cancellation_1.CancellationTokenSource; | ||
exports.CancellationToken = cancellation_1.CancellationToken; | ||
var CancelNotification; | ||
(function (CancelNotification) { | ||
CancelNotification.type = { get method() { return '$/cancelRequest'; } }; | ||
})(CancelNotification || (CancelNotification = {})); | ||
function createMessageConnection(messageReader, messageWriter, logger, client) { | ||
@@ -22,4 +32,5 @@ if (client === void 0) { client = false; } | ||
var requestHandlers = Object.create(null); | ||
var responseHandlers = Object.create(null); | ||
var eventHandlers = Object.create(null); | ||
var responsePromises = Object.create(null); | ||
var requestTokens = Object.create(null); | ||
function handleRequest(requestMessage) { | ||
@@ -62,6 +73,10 @@ function reply(resultOrError) { | ||
if (requestHandler) { | ||
var cancellationSource = new cancellation_1.CancellationTokenSource(); | ||
var tokenKey_1 = String(requestMessage.id); | ||
requestTokens[tokenKey_1] = cancellationSource; | ||
try { | ||
var handlerResult = requestHandler(requestMessage.params); | ||
var handlerResult = requestHandler(requestMessage.params, cancellationSource.token); | ||
var promise = handlerResult; | ||
if (!handlerResult) { | ||
delete requestTokens[tokenKey_1]; | ||
replySuccess(handlerResult); | ||
@@ -71,4 +86,6 @@ } | ||
promise.then(function (resultOrError) { | ||
delete requestTokens[tokenKey_1]; | ||
reply(resultOrError); | ||
}, function (error) { | ||
delete requestTokens[tokenKey_1]; | ||
if (error instanceof messages_1.ResponseError) { | ||
@@ -86,2 +103,3 @@ replyError(error); | ||
else { | ||
delete requestTokens[tokenKey_1]; | ||
reply(handlerResult); | ||
@@ -91,2 +109,3 @@ } | ||
catch (error) { | ||
delete requestTokens[tokenKey_1]; | ||
if (error instanceof messages_1.ResponseError) { | ||
@@ -109,3 +128,3 @@ reply(error); | ||
var key = String(responseMessage.id); | ||
var responseHandler = responseHandlers[key]; | ||
var responseHandler = responsePromises[key]; | ||
if (responseHandler) { | ||
@@ -122,3 +141,3 @@ try { | ||
} | ||
delete responseHandlers[key]; | ||
delete responsePromises[key]; | ||
} | ||
@@ -136,3 +155,15 @@ catch (error) { | ||
function handleNotification(message) { | ||
var eventHandler = eventHandlers[message.method]; | ||
var eventHandler; | ||
if (message.method === CancelNotification.type.method) { | ||
eventHandler = function (params) { | ||
var id = params.id; | ||
var source = requestTokens[String(id)]; | ||
if (source) { | ||
source.cancel(); | ||
} | ||
}; | ||
} | ||
else { | ||
eventHandler = eventHandlers[message.method]; | ||
} | ||
if (eventHandler) { | ||
@@ -162,3 +193,3 @@ try { | ||
var key = String(responseMessage.id); | ||
var responseHandler = responseHandlers[key]; | ||
var responseHandler = responsePromises[key]; | ||
if (responseHandler) { | ||
@@ -195,5 +226,5 @@ responseHandler.reject(new Error('The received response has neither a result nor an error property.')); | ||
}, | ||
sendRequest: function (type, params) { | ||
return new Promise(function (resolve, reject) { | ||
var id = sequenceNumber++; | ||
sendRequest: function (type, params, token) { | ||
var id = sequenceNumber++; | ||
var result = new Promise(function (resolve, reject) { | ||
var requestMessage = { | ||
@@ -205,5 +236,11 @@ jsonrpc: version, | ||
}; | ||
responseHandlers[String(id)] = { method: type.method, resolve: resolve, reject: reject }; | ||
responsePromises[String(id)] = { method: type.method, resolve: resolve, reject: reject }; | ||
messageWriter.write(requestMessage); | ||
}); | ||
if (token) { | ||
token.onCancellationRequested(function (event) { | ||
connection.sendNotification(CancelNotification.type, { id: id }); | ||
}); | ||
} | ||
return result; | ||
}, | ||
@@ -210,0 +247,0 @@ onRequest: function (type, handler) { |
@@ -6,6 +6,6 @@ import { ChildProcess } from 'child_process'; | ||
} | ||
export interface IMessageReader { | ||
export interface MessageReader { | ||
listen(callback: DataCallback): void; | ||
} | ||
export declare class StreamMessageReader implements IMessageReader { | ||
export declare class StreamMessageReader implements MessageReader { | ||
private readable; | ||
@@ -19,3 +19,3 @@ private callback; | ||
} | ||
export declare class IPCMessageReader implements IMessageReader { | ||
export declare class IPCMessageReader implements MessageReader { | ||
private process; | ||
@@ -22,0 +22,0 @@ constructor(process: NodeJS.Process | ChildProcess); |
@@ -83,3 +83,3 @@ /* -------------------------------------------------------------------------------------------- | ||
return MessageBuffer; | ||
})(); | ||
}()); | ||
var StreamMessageReader = (function () { | ||
@@ -127,3 +127,3 @@ function StreamMessageReader(readable, encoding) { | ||
return StreamMessageReader; | ||
})(); | ||
}()); | ||
exports.StreamMessageReader = StreamMessageReader; | ||
@@ -138,3 +138,3 @@ var IPCMessageReader = (function () { | ||
return IPCMessageReader; | ||
})(); | ||
}()); | ||
exports.IPCMessageReader = IPCMessageReader; |
@@ -51,3 +51,3 @@ /* -------------------------------------------------------------------------------------------- | ||
return ResponseError; | ||
})(Error); | ||
}(Error)); | ||
exports.ResponseError = ResponseError; | ||
@@ -54,0 +54,0 @@ /** |
import { ChildProcess } from 'child_process'; | ||
import { Message } from './messages'; | ||
export interface IMessageWriter { | ||
export interface MessageWriter { | ||
write(msg: Message): void; | ||
} | ||
export declare class StreamMessageWriter implements IMessageWriter { | ||
export declare class StreamMessageWriter implements MessageWriter { | ||
private writable; | ||
@@ -12,3 +12,3 @@ private encoding; | ||
} | ||
export declare class IPCMessageWriter implements IMessageWriter { | ||
export declare class IPCMessageWriter implements MessageWriter { | ||
private process; | ||
@@ -15,0 +15,0 @@ constructor(process: NodeJS.Process | ChildProcess); |
@@ -27,3 +27,3 @@ /* -------------------------------------------------------------------------------------------- | ||
return StreamMessageWriter; | ||
})(); | ||
}()); | ||
exports.StreamMessageWriter = StreamMessageWriter; | ||
@@ -38,3 +38,3 @@ var IPCMessageWriter = (function () { | ||
return IPCMessageWriter; | ||
})(); | ||
}()); | ||
exports.IPCMessageWriter = IPCMessageWriter; |
{ | ||
"name": "vscode-jsonrpc", | ||
"description": "A json rpc implementation over streams", | ||
"version": "1.2.0", | ||
"version": "2.0.0-pre.1", | ||
"author": "Microsoft Corporation", | ||
@@ -17,4 +17,4 @@ "license": "MIT", | ||
"devDependencies": { | ||
"mocha": "^2.3.2", | ||
"typescript": "^1.7.5" | ||
"mocha": "^2.4.5", | ||
"typescript": "^1.8.9" | ||
}, | ||
@@ -21,0 +21,0 @@ "scripts": { |
THIRD-PARTY SOFTWARE NOTICES AND INFORMATION | ||
For Microsoft vscode-isonrpc | ||
For Microsoft vscode-jsonrpc | ||
This project incorporates material from the project(s) listed below (collectively, “Third Party Code”). | ||
Microsoft is not the original author of the Third Party Code. The original copyright notice and license | ||
under which Microsoft received such Third Party Code are set out below. This Third Party Code is licensed | ||
to you under their original license terms set forth below. Microsoft reserves all other rights not expressly | ||
Microsoft is not the original author of the Third Party Code. The original copyright notice and license | ||
under which Microsoft received such Third Party Code are set out below. This Third Party Code is licensed | ||
to you under their original license terms set forth below. Microsoft reserves all other rights not expressly | ||
granted, whether by implication, estoppel or otherwise. | ||
1. DefinitelyTyped version 0.0.1 (https://github.com/borisyankov/DefinitelyTyped) | ||
This project is licensed under the MIT license. | ||
Copyrights are respective of each contributor listed at the beginning of each definition file. | ||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
@@ -21,6 +21,6 @@ of this software and associated documentation files (the "Software"), to deal | ||
furnished to do so, subject to the following conditions: | ||
The above copyright notice and this permission notice shall be included in | ||
all copies or substantial portions of the Software. | ||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
@@ -27,0 +27,0 @@ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
45575
19
1087
2