vscode-jsonrpc
Advanced tools
Comparing version 0.10.0-pre.5 to 0.10.0-pre.6
@@ -1,5 +0,5 @@ | ||
import { RequestType, Response, ErrorCodes, ErrorInfo, NotificationType } from './messages'; | ||
export { Response, ErrorCodes, ErrorInfo, RequestType, NotificationType }; | ||
import { RequestType, ResponseError, ErrorCodes, NotificationType } from './messages'; | ||
export { ErrorCodes, ResponseError, RequestType, NotificationType }; | ||
export interface IRequestHandler<P, R, E> { | ||
(params?: P): Response<R, E> | Thenable<Response<R, E>>; | ||
(params?: P): R | ResponseError<E> | Thenable<R | ResponseError<E>>; | ||
} | ||
@@ -6,0 +6,0 @@ export interface INotificationHandler<P> { |
@@ -7,2 +7,3 @@ /*--------------------------------------------------------- | ||
var messages_1 = require('./messages'); | ||
exports.ResponseError = messages_1.ResponseError; | ||
exports.ErrorCodes = messages_1.ErrorCodes; | ||
@@ -55,3 +56,3 @@ var messageReader_1 = require('./messageReader'); | ||
function handleRequest(requestMessage) { | ||
function reply(response) { | ||
function reply(resultOrError) { | ||
var message = { | ||
@@ -61,16 +62,26 @@ jsonrpc: version, | ||
}; | ||
if (is.defined(response.error)) { | ||
message.error = response.error; | ||
if (resultOrError instanceof messages_1.ResponseError) { | ||
message.error = resultOrError.toJson(); | ||
} | ||
else if (is.defined(response.result)) { | ||
message.result = response.result; | ||
} | ||
else { | ||
message.error = { | ||
code: messages_1.ErrorCodes.InvalidRequest, | ||
message: "The request " + requestMessage.method + " did neither return a result nor a error." | ||
}; | ||
message.result = resultOrError; | ||
} | ||
protocolWriter.write(message); | ||
} | ||
function replyError(error) { | ||
var message = { | ||
jsonrpc: version, | ||
id: requestMessage.id, | ||
error: error.toJson() | ||
}; | ||
protocolWriter.write(message); | ||
} | ||
function replySuccess(result) { | ||
var message = { | ||
jsonrpc: version, | ||
id: requestMessage.id, | ||
result: result | ||
}; | ||
protocolWriter.write(message); | ||
} | ||
var requestHandler = requestHandlers[requestMessage.method]; | ||
@@ -82,16 +93,16 @@ if (requestHandler) { | ||
if (!promise) { | ||
reply({ result: {} }); | ||
replySuccess({}); | ||
} | ||
else if (promise.then) { | ||
promise.then(function (response) { | ||
reply(response); | ||
promise.then(function (resultOrError) { | ||
reply(resultOrError); | ||
}, function (error) { | ||
if (messages_1.isFailedResponse(error)) { | ||
reply(error); | ||
if (error instanceof messages_1.ResponseError) { | ||
replyError(error); | ||
} | ||
else if (error && is.string(error.message)) { | ||
reply({ error: { code: messages_1.ErrorCodes.InternalError, message: "Request " + requestMessage.method + " failed with message: " + error.message } }); | ||
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, "Request " + requestMessage.method + " failed with message: " + error.message)); | ||
} | ||
else { | ||
reply({ error: { code: messages_1.ErrorCodes.InternalError, message: "Request " + requestMessage.method + " failed unexpectedly without providing any details." } }); | ||
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, "Request " + requestMessage.method + " failed unexpectedly without providing any details.")); | ||
} | ||
@@ -105,7 +116,10 @@ }); | ||
catch (error) { | ||
if (error && is.string(error.message)) { | ||
reply({ error: { code: messages_1.ErrorCodes.InternalError, message: "Request " + requestMessage.method + " failed with message: " + error.message } }); | ||
if (error instanceof messages_1.ResponseError) { | ||
reply(error); | ||
} | ||
else if (error && is.string(error.message)) { | ||
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, "Request " + requestMessage.method + " failed with message: " + error.message)); | ||
} | ||
else { | ||
reply({ error: { code: messages_1.ErrorCodes.InternalError, message: "Request " + requestMessage.method + " failed unexpectedly without providing any details." } }); | ||
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, "Request " + requestMessage.method + " failed unexpectedly without providing any details.")); | ||
} | ||
@@ -115,3 +129,3 @@ } | ||
else { | ||
reply({ error: { code: messages_1.ErrorCodes.MethodNotFound, message: "Unhandled method " + requestMessage.method } }); | ||
replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, "Unhandled method " + requestMessage.method)); | ||
} | ||
@@ -118,0 +132,0 @@ } |
@@ -53,7 +53,3 @@ /** | ||
} | ||
/** | ||
* A error object return in a response in case a request | ||
* has failed. | ||
*/ | ||
export interface ErrorInfo<D> { | ||
export interface ResponseErrorLiteral<D> { | ||
/** | ||
@@ -73,12 +69,12 @@ * A number indicating the error type that occured | ||
} | ||
export interface Response<R, E> { | ||
/** | ||
* The result of a request. This can be omitted in | ||
* the case of an error | ||
*/ | ||
result?: R; | ||
/** | ||
* The error object in case a request fails. | ||
*/ | ||
error?: ErrorInfo<E>; | ||
/** | ||
* A error object return in a response in case a request | ||
* has failed. | ||
*/ | ||
export declare class ResponseError<D> extends Error { | ||
code: number; | ||
message: string; | ||
data: D; | ||
constructor(code: number, message: string, data?: D); | ||
toJson(): ResponseErrorLiteral<D>; | ||
} | ||
@@ -101,3 +97,3 @@ /** | ||
*/ | ||
error?: ErrorInfo<any>; | ||
error?: ResponseErrorLiteral<any>; | ||
} | ||
@@ -138,4 +134,1 @@ /** | ||
export declare function isReponseMessage(message: Message): message is ResponseMessage; | ||
export declare function isResponse(value: any): boolean; | ||
export declare function isFailedResponse(value: any): boolean; | ||
export declare function isSuccessfulResponse(value: any): boolean; |
@@ -5,2 +5,7 @@ /*--------------------------------------------------------- | ||
'use strict'; | ||
var __extends = (this && this.__extends) || function (d, b) { | ||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; | ||
function __() { this.constructor = d; } | ||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); | ||
}; | ||
var is = require('./is'); | ||
@@ -39,2 +44,30 @@ /** | ||
/** | ||
* A error object return in a response in case a request | ||
* has failed. | ||
*/ | ||
var ResponseError = (function (_super) { | ||
__extends(ResponseError, _super); | ||
function ResponseError(code, message, data) { | ||
_super.call(this, message); | ||
this.code = code; | ||
this.message = message; | ||
if (is.defined(data)) { | ||
this.data = data; | ||
} | ||
} | ||
ResponseError.prototype.toJson = function () { | ||
var result = { | ||
code: this.code, | ||
message: this.message | ||
}; | ||
if (is.defined(this.data)) { | ||
result.data = this.data; | ||
} | ||
; | ||
return result; | ||
}; | ||
return ResponseError; | ||
})(Error); | ||
exports.ResponseError = ResponseError; | ||
/** | ||
* Tests if the given message is a request message | ||
@@ -63,16 +96,1 @@ */ | ||
exports.isReponseMessage = isReponseMessage; | ||
function isResponse(value) { | ||
var candidate = value; | ||
return candidate && (is.defined(candidate.result) || is.defined(candidate.error)); | ||
} | ||
exports.isResponse = isResponse; | ||
function isFailedResponse(value) { | ||
var candidate = value; | ||
return candidate && is.defined(candidate.error) && is.undefined(candidate.result); | ||
} | ||
exports.isFailedResponse = isFailedResponse; | ||
function isSuccessfulResponse(value) { | ||
var candidate = value; | ||
return candidate && is.defined(candidate.result) && is.undefined(candidate.error); | ||
} | ||
exports.isSuccessfulResponse = isSuccessfulResponse; |
{ | ||
"name": "vscode-jsonrpc", | ||
"description": "A json rpc implementation over streams", | ||
"version": "0.10.0-pre.5", | ||
"version": "0.10.0-pre.6", | ||
"author": "Microsoft Corporation", | ||
@@ -6,0 +6,0 @@ "license": "MIT", |
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
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
24326
664