grpc-server-js
Advanced tools
Comparing version 0.0.10 to 0.1.0
@@ -62,8 +62,9 @@ 'use strict'; | ||
try { | ||
this.outstandingWrites++; | ||
const response = await this[kCall].serializeMessage(chunk); | ||
this[kCall].write(response); | ||
this.outstandingWrites--; | ||
if (this[kCall].write(response) === false) { | ||
this[kCall].once('drain', callback); | ||
return; | ||
} | ||
} catch (err) { | ||
this.outstandingWrites = 0; | ||
err.code = Status.INTERNAL; | ||
@@ -73,2 +74,7 @@ this.emit('error', err); | ||
callback(); | ||
} | ||
_final (callback) { | ||
this[kCall].end(); | ||
callback(null); | ||
@@ -78,8 +84,2 @@ } | ||
end (metadata) { | ||
// If there are still writes pending, do not end the HTTP2 stream. | ||
if (this.outstandingWrites > 0) { | ||
setImmediate(this.end.bind(this), metadata); | ||
return; | ||
} | ||
if (metadata) { | ||
@@ -89,3 +89,2 @@ this[kCall].status.metadata = metadata; | ||
this[kCall].end(undefined); | ||
Writable.prototype.end.call(this); | ||
@@ -120,2 +119,3 @@ } | ||
ServerDuplexStream.prototype._write = ServerWritableStream.prototype._write; | ||
ServerDuplexStream.prototype._final = ServerWritableStream.prototype._final; | ||
ServerDuplexStream.prototype.end = ServerWritableStream.prototype.end; | ||
@@ -191,4 +191,2 @@ ServerDuplexStream.prototype.serialize = | ||
function setUpWritable (stream) { | ||
stream.outstandingWrites = 0; | ||
stream.on('error', (err) => { | ||
@@ -195,0 +193,0 @@ stream[kCall].sendError(err); |
'use strict'; | ||
const { ServerCredentials } = require('@grpc/grpc-js'); | ||
const { Server } = require('./server'); | ||
const { ServerCredentials } = require('./server-credentials'); | ||
module.exports = { Server, ServerCredentials }; |
@@ -37,3 +37,5 @@ 'use strict'; | ||
this.compression = new CompressionFilter(); | ||
this.metadataSent = false; | ||
this.status = { code: Status.OK, details: 'OK', metadata: null }; | ||
this.stream.on('drain', onStreamDrain.bind(this)); | ||
this.stream.once('error', onStreamError.bind(this)); | ||
@@ -44,6 +46,8 @@ this.stream.once('close', onStreamClose.bind(this)); | ||
sendMetadata (customMetadata) { | ||
if (this.stream.headersSent === true) { | ||
if (this.metadataSent === true) { | ||
return; | ||
} | ||
this.metadataSent = true; | ||
const headers = { | ||
@@ -172,3 +176,3 @@ [kGrpcEncodingHeader]: this.compression.send.name, | ||
this.end(undefined); | ||
this.end(); | ||
} | ||
@@ -203,2 +207,7 @@ | ||
function onStreamDrain () { | ||
// `this` is bound to the Call instance, not the stream itself. | ||
this.emit('drain'); | ||
} | ||
function onStreamError (err) { | ||
@@ -205,0 +214,0 @@ // `this` is bound to the Call instance, not the stream itself. |
'use strict'; | ||
const Http2 = require('http2'); | ||
const { URL } = require('url'); | ||
const { status } = require('@grpc/grpc-js'); | ||
const { status, ServerCredentials } = require('@grpc/grpc-js'); | ||
const { | ||
@@ -12,3 +12,2 @@ ServerDuplexStream, | ||
const { ServerCall } = require('./server-call'); | ||
const { ServerCredentials } = require('./server-credentials'); | ||
const kHandlers = Symbol('handlers'); | ||
@@ -65,4 +64,2 @@ const kServer = Symbol('server'); | ||
const { secure } = creds; | ||
if (typeof port === 'string') { | ||
@@ -73,4 +70,4 @@ const url = new URL(`http://${port}`); | ||
if (secure) { | ||
this[kServer] = Http2.createSecureServer(creds.settings); | ||
if (creds._isSecure()) { | ||
this[kServer] = Http2.createSecureServer(creds._getSettings()); | ||
} else { | ||
@@ -211,3 +208,3 @@ this[kServer] = Http2.createServer(); | ||
if (handler === undefined) { | ||
throw new Error('no matching handler'); | ||
return call.sendError(unimplementedStatusResponse); | ||
} | ||
@@ -214,0 +211,0 @@ |
{ | ||
"name": "grpc-server-js", | ||
"version": "0.0.10", | ||
"version": "0.1.0", | ||
"description": "Pure JavaScript gRPC Server", | ||
@@ -22,6 +22,6 @@ "author": "Colin J. Ihrig <cjihrig@gmail.com> (http://www.cjihrig.com/)", | ||
"engines": { | ||
"node": ">=10.0.0" | ||
"node": ">=10.10.0" | ||
}, | ||
"dependencies": { | ||
"@grpc/grpc-js": "0.3.6" | ||
"@grpc/grpc-js": "0.4.0" | ||
}, | ||
@@ -28,0 +28,0 @@ "devDependencies": { |
@@ -12,3 +12,3 @@ # grpc-server-js | ||
The goal is to be largely compatible with the existing [`Server`](https://grpc.io/grpc/node/grpc.Server.html) and [`ServerCredentials`](https://grpc.io/grpc/node/grpc.ServerCredentials.html) documentation. | ||
The goal is to be largely compatible with the existing [`Server`](https://grpc.io/grpc/node/grpc.Server.html) implementation. | ||
@@ -32,4 +32,2 @@ ## Features | ||
- `Server.prototype.forceShutdown()` is not implemented. | ||
- The `private_key` and `cert_chain` properties of `keyCertPair` instances have | ||
been renamed to `privateKey` and `certChain`. | ||
@@ -36,0 +34,0 @@ ## Acknowledgement |
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
30066
9
838
41
+ Added@grpc/grpc-js@0.4.0(transitive)
+ Addedsemver@6.3.1(transitive)
- Removed@grpc/grpc-js@0.3.6(transitive)
- Removedsemver@5.7.2(transitive)
Updated@grpc/grpc-js@0.4.0