Comparing version 2.4.0 to 2.5.0
@@ -0,1 +1,4 @@ | ||
## 2.5.0 | ||
- Support secure WebSockets | ||
## 2.4.0 | ||
@@ -2,0 +5,0 @@ - Partial support for Gremlin-JavaScript language variant |
@@ -18,6 +18,6 @@ 'use strict'; | ||
function defaultExecuteHandler(messageStream, callback) { | ||
var errored = false; | ||
var objectMode = false; | ||
let errored = false; | ||
let objectMode = false; | ||
(0, _highland2.default)(messageStream).stopOnError(function (err) { | ||
(0, _highland2.default)(messageStream).stopOnError(err => { | ||
// TODO: this does not seem to halt the stream properly, and make | ||
@@ -28,9 +28,7 @@ // the callback being fired twice. We need to get rid of the ugly | ||
callback(err); | ||
}).map(function (_ref) { | ||
var data = _ref.result.data; | ||
}).map(({ result: { data } }) => { | ||
objectMode = !_lodash2.default.isArray(data); | ||
return data; | ||
}).sequence().toArray(function (results) { | ||
}).sequence().toArray(results => { | ||
if (!errored) { | ||
@@ -42,3 +40,2 @@ callback(null, objectMode ? results[0] : results); | ||
exports.default = defaultExecuteHandler; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9leGVjdXRlSGFuZGxlci5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0RXhlY3V0ZUhhbmRsZXIiLCJtZXNzYWdlU3RyZWFtIiwiY2FsbGJhY2siLCJlcnJvcmVkIiwib2JqZWN0TW9kZSIsInN0b3BPbkVycm9yIiwiZXJyIiwibWFwIiwiZGF0YSIsInJlc3VsdCIsImlzQXJyYXkiLCJzZXF1ZW5jZSIsInRvQXJyYXkiLCJyZXN1bHRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7OztBQUNBOzs7Ozs7QUFHQSxTQUFTQSxxQkFBVCxDQUErQkMsYUFBL0IsRUFBOENDLFFBQTlDLEVBQXdEO0FBQ3RELE1BQUlDLFVBQVUsS0FBZDtBQUNBLE1BQUlDLGFBQWEsS0FBakI7O0FBRUEsMEJBQVNILGFBQVQsRUFDR0ksV0FESCxDQUNlLFVBQUNDLEdBQUQsRUFBUztBQUNwQjtBQUNBO0FBQ0E7QUFDQUgsY0FBVSxJQUFWO0FBQ0FELGFBQVNJLEdBQVQ7QUFDRCxHQVBILEVBUUdDLEdBUkgsQ0FRTyxnQkFBMEI7QUFBQSxRQUFiQyxJQUFhLFFBQXZCQyxNQUF1QixDQUFiRCxJQUFhOztBQUM3QkosaUJBQWEsQ0FBQyxpQkFBRU0sT0FBRixDQUFVRixJQUFWLENBQWQ7O0FBRUEsV0FBT0EsSUFBUDtBQUNELEdBWkgsRUFhR0csUUFiSCxHQWNHQyxPQWRILENBY1csVUFBQ0MsT0FBRCxFQUFhO0FBQ3BCLFFBQUksQ0FBQ1YsT0FBTCxFQUFjO0FBQ1pELGVBQVMsSUFBVCxFQUFlRSxhQUFhUyxRQUFRLENBQVIsQ0FBYixHQUEwQkEsT0FBekM7QUFDRDtBQUNGLEdBbEJIO0FBbUJEOztrQkFFY2IscUIiLCJmaWxlIjoiZXhlY3V0ZUhhbmRsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaGlnaGxhbmQgZnJvbSAnaGlnaGxhbmQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuXG5mdW5jdGlvbiBkZWZhdWx0RXhlY3V0ZUhhbmRsZXIobWVzc2FnZVN0cmVhbSwgY2FsbGJhY2spIHtcbiAgbGV0IGVycm9yZWQgPSBmYWxzZTtcbiAgbGV0IG9iamVjdE1vZGUgPSBmYWxzZTtcblxuICBoaWdobGFuZChtZXNzYWdlU3RyZWFtKVxuICAgIC5zdG9wT25FcnJvcigoZXJyKSA9PiB7XG4gICAgICAvLyBUT0RPOiB0aGlzIGRvZXMgbm90IHNlZW0gdG8gaGFsdCB0aGUgc3RyZWFtIHByb3Blcmx5LCBhbmQgbWFrZVxuICAgICAgLy8gdGhlIGNhbGxiYWNrIGJlaW5nIGZpcmVkIHR3aWNlLiBXZSBuZWVkIHRvIGdldCByaWQgb2YgdGhlIHVnbHlcbiAgICAgIC8vIGVycm9yZWQgdmFyaWFibGUgY2hlY2suXG4gICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfSlcbiAgICAubWFwKCh7IHJlc3VsdDoge8KgZGF0YSB9IH0pID0+IHtcbiAgICAgIG9iamVjdE1vZGUgPSAhXy5pc0FycmF5KGRhdGEpO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KVxuICAgIC5zZXF1ZW5jZSgpXG4gICAgLnRvQXJyYXkoKHJlc3VsdHMpID0+IHtcbiAgICAgIGlmICghZXJyb3JlZCkge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBvYmplY3RNb2RlID8gcmVzdWx0c1swXSA6IHJlc3VsdHMpO1xuICAgICAgfVxuICAgIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0RXhlY3V0ZUhhbmRsZXI7XG4iXX0= | ||
exports.default = defaultExecuteHandler; |
@@ -7,5 +7,5 @@ 'use strict'; | ||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; | ||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /*jslint -W079 */ | ||
/*jslint node: true */ | ||
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); | ||
@@ -48,32 +48,14 @@ var _events = require('events'); | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
class GremlinClient extends _events.EventEmitter { | ||
constructor(port = 8182, host = 'localhost', options = {}) { | ||
super(); | ||
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } | ||
this.port = port; | ||
this.host = host; | ||
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*jslint -W079 */ | ||
/*jslint node: true */ | ||
var GremlinClient = function (_EventEmitter) { | ||
_inherits(GremlinClient, _EventEmitter); | ||
function GremlinClient() { | ||
var port = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 8182; | ||
var host = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'localhost'; | ||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; | ||
_classCallCheck(this, GremlinClient); | ||
var _this = _possibleConstructorReturn(this, (GremlinClient.__proto__ || Object.getPrototypeOf(GremlinClient)).call(this)); | ||
_this.port = port; | ||
_this.host = host; | ||
// Breaking change in v3.2.2, connect to /gremlin rather than / | ||
// See: https://groups.google.com/d/topic/gremlin-users/x4hiHsmTsHM/discussion | ||
var _options$path = options.path, | ||
path = _options$path === undefined ? '/gremlin' : _options$path; | ||
const { path = '/gremlin' } = options; | ||
_this.options = _extends({ | ||
this.options = _extends({ | ||
language: 'gremlin-groovy', | ||
@@ -84,446 +66,361 @@ session: false, | ||
accept: 'application/json', | ||
executeHandler: _executeHandler2.default | ||
executeHandler: _executeHandler2.default, | ||
ssl: false, | ||
rejectUnauthorized: true | ||
}, options, { | ||
path: path.length && !path.startsWith('/') ? '/' + path : path | ||
path: path.length && !path.startsWith('/') ? `/${path}` : path | ||
}); | ||
_this.useSession = _this.options.session; | ||
this.useSession = this.options.session; | ||
if (_this.useSession) { | ||
_this.sessionId = _nodeUuid2.default.v1(); | ||
if (this.useSession) { | ||
this.sessionId = _nodeUuid2.default.v1(); | ||
} | ||
_this.connected = false; | ||
_this.queue = []; | ||
this.connected = false; | ||
this.queue = []; | ||
_this.commands = {}; | ||
this.commands = {}; | ||
_this.connection = _this.createConnection({ | ||
port: port, | ||
host: host, | ||
path: _this.options.path | ||
const { ssl, rejectUnauthorized } = this.options; | ||
this.connection = this.createConnection({ | ||
port, | ||
host, | ||
path: this.options.path, | ||
ssl, | ||
rejectUnauthorized | ||
}); | ||
return _this; | ||
} | ||
_createClass(GremlinClient, [{ | ||
key: 'createConnection', | ||
value: function createConnection(_ref) { | ||
var _this2 = this; | ||
createConnection({ port, host, path, ssl, rejectUnauthorized }) { | ||
const connection = new _WebSocketGremlinConnection2.default({ port, host, path, ssl, rejectUnauthorized }); | ||
var port = _ref.port, | ||
host = _ref.host, | ||
path = _ref.path; | ||
connection.on('open', () => this.onConnectionOpen()); | ||
connection.on('error', error => this.handleError(error)); | ||
connection.on('message', message => this.handleProtocolMessage(message)); | ||
connection.on('close', event => this.handleDisconnection(event)); | ||
var connection = new _WebSocketGremlinConnection2.default({ port: port, host: host, path: path }); | ||
return connection; | ||
} | ||
connection.on('open', function () { | ||
return _this2.onConnectionOpen(); | ||
}); | ||
connection.on('error', function (error) { | ||
return _this2.handleError(error); | ||
}); | ||
connection.on('message', function (message) { | ||
return _this2.handleProtocolMessage(message); | ||
}); | ||
connection.on('close', function (event) { | ||
return _this2.handleDisconnection(event); | ||
}); | ||
closeConnection() { | ||
this.connection.close(); | ||
} | ||
return connection; | ||
} | ||
}, { | ||
key: 'closeConnection', | ||
value: function closeConnection() { | ||
this.connection.close(); | ||
} | ||
}, { | ||
key: 'handleError', | ||
value: function handleError(err) { | ||
this.connected = false; | ||
this.emit('error', err); | ||
} | ||
}, { | ||
key: 'warn', | ||
value: function warn(code, message) { | ||
this.emit('warning', { | ||
code: code, | ||
message: message | ||
}); | ||
} | ||
handleError(err) { | ||
this.connected = false; | ||
this.emit('error', err); | ||
} | ||
/** | ||
* Process all incoming raw message events sent by Gremlin Server, and dispatch | ||
* to the appropriate command. | ||
* | ||
* @param {MessageEvent} event | ||
*/ | ||
warn(code, message) { | ||
this.emit('warning', { | ||
code, | ||
message | ||
}); | ||
} | ||
}, { | ||
key: 'handleProtocolMessage', | ||
value: function handleProtocolMessage(message) { | ||
var rawMessage = void 0, | ||
requestId = void 0, | ||
statusCode = void 0, | ||
statusMessage = void 0; | ||
try { | ||
var data = message.data; | ||
var buffer = new Buffer(data, 'binary'); | ||
rawMessage = JSON.parse(buffer.toString('utf-8')); | ||
requestId = rawMessage.requestId; | ||
statusCode = rawMessage.status.code; | ||
statusMessage = rawMessage.status.message; | ||
} catch (e) { | ||
this.warn('MalformedResponse', 'Received malformed response message'); | ||
return; | ||
} | ||
// If we didn't find a stream for this response, emit a warning on the | ||
// client | ||
if (!this.commands[requestId]) { | ||
this.warn('OrphanedResponse', 'Received response for missing or closed request: ' + requestId); | ||
return; | ||
} | ||
var _commands$requestId$m = this.commands[requestId].messageStream, | ||
messageStream = _commands$requestId$m === undefined ? null : _commands$requestId$m; | ||
switch (statusCode) { | ||
case 200: | ||
// SUCCESS | ||
delete this.commands[requestId]; // TODO: optimize performance | ||
messageStream.push(rawMessage); | ||
messageStream.push(null); | ||
break; | ||
case 204: | ||
// NO_CONTENT | ||
delete this.commands[requestId]; | ||
messageStream.push(null); | ||
break; | ||
case 206: | ||
// PARTIAL_CONTENT | ||
messageStream.push(rawMessage); | ||
break; | ||
default: | ||
delete this.commands[requestId]; | ||
messageStream.emit('error', new Error(statusMessage + ' (Error ' + statusCode + ')')); | ||
break; | ||
} | ||
/** | ||
* Process all incoming raw message events sent by Gremlin Server, and dispatch | ||
* to the appropriate command. | ||
* | ||
* @param {MessageEvent} event | ||
*/ | ||
handleProtocolMessage(message) { | ||
let rawMessage, requestId, statusCode, statusMessage; | ||
try { | ||
const { data } = message; | ||
const buffer = new Buffer(data, 'binary'); | ||
rawMessage = JSON.parse(buffer.toString('utf-8')); | ||
requestId = rawMessage.requestId; | ||
statusCode = rawMessage.status.code; | ||
statusMessage = rawMessage.status.message; | ||
} catch (e) { | ||
this.warn('MalformedResponse', 'Received malformed response message'); | ||
return; | ||
} | ||
/** | ||
* Handle the WebSocket onOpen event, flag the client as connected and | ||
* process command queue. | ||
*/ | ||
}, { | ||
key: 'onConnectionOpen', | ||
value: function onConnectionOpen() { | ||
this.connected = true; | ||
this.emit('connect'); | ||
this.executeQueue(); | ||
// If we didn't find a stream for this response, emit a warning on the | ||
// client | ||
if (!this.commands[requestId]) { | ||
this.warn('OrphanedResponse', `Received response for missing or closed request: ${requestId}`); | ||
return; | ||
} | ||
}, { | ||
key: 'handleDisconnection', | ||
const { messageStream = null } = this.commands[requestId]; | ||
/** | ||
* @param {CloseEvent} event | ||
*/ | ||
value: function handleDisconnection(event) { | ||
this.cancelPendingCommands({ | ||
message: 'WebSocket closed', | ||
details: event | ||
}); | ||
switch (statusCode) { | ||
case 200: | ||
// SUCCESS | ||
delete this.commands[requestId]; // TODO: optimize performance | ||
messageStream.push(rawMessage); | ||
messageStream.push(null); | ||
break; | ||
case 204: | ||
// NO_CONTENT | ||
delete this.commands[requestId]; | ||
messageStream.push(null); | ||
break; | ||
case 206: | ||
// PARTIAL_CONTENT | ||
messageStream.push(rawMessage); | ||
break; | ||
default: | ||
delete this.commands[requestId]; | ||
messageStream.emit('error', new Error(statusMessage + ' (Error ' + statusCode + ')')); | ||
break; | ||
} | ||
}, { | ||
key: 'executeQueue', | ||
} | ||
/** | ||
* Handle the WebSocket onOpen event, flag the client as connected and | ||
* process command queue. | ||
*/ | ||
onConnectionOpen() { | ||
this.connected = true; | ||
this.emit('connect'); | ||
/** | ||
* Process the current command queue, sending commands to Gremlin Server | ||
* (First In, First Out). | ||
*/ | ||
value: function executeQueue() { | ||
while (this.queue.length > 0) { | ||
var _queue$shift = this.queue.shift(), | ||
message = _queue$shift.message; | ||
this.executeQueue(); | ||
} | ||
this.sendMessage(message); | ||
} | ||
} | ||
}, { | ||
key: 'cancelPendingCommands', | ||
/** | ||
* @param {CloseEvent} event | ||
*/ | ||
handleDisconnection(event) { | ||
this.cancelPendingCommands({ | ||
message: 'WebSocket closed', | ||
details: event | ||
}); | ||
} | ||
/** | ||
* @param {Object} reason | ||
*/ | ||
value: function cancelPendingCommands(_ref2) { | ||
var message = _ref2.message, | ||
details = _ref2.details; | ||
var commands = this.commands; | ||
var command = void 0; | ||
var error = new Error(message); | ||
error.details = details; | ||
// Empty queue | ||
this.queue.length = 0; | ||
this.commands = {}; | ||
Object.keys(commands).forEach(function (key) { | ||
command = commands[key]; | ||
command.messageStream.emit('error', error); | ||
}); | ||
/** | ||
* Process the current command queue, sending commands to Gremlin Server | ||
* (First In, First Out). | ||
*/ | ||
executeQueue() { | ||
while (this.queue.length > 0) { | ||
let { message } = this.queue.shift(); | ||
this.sendMessage(message); | ||
} | ||
}, { | ||
key: 'buildMessage', | ||
} | ||
/** | ||
* @param {Object} reason | ||
*/ | ||
cancelPendingCommands({ message, details }) { | ||
const commands = this.commands; | ||
let command; | ||
const error = new Error(message); | ||
error.details = details; | ||
/** | ||
* For a given script string and optional bound parameters, build a protocol | ||
* message object to be sent to Gremlin Server. | ||
* | ||
* @param {String|Function} script | ||
* @param {Object} bindings | ||
* @param {Object} message | ||
*/ | ||
value: function buildMessage(rawScript) { | ||
var rawBindings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
var baseMessage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; | ||
// Empty queue | ||
this.queue.length = 0; | ||
this.commands = {}; | ||
var _Utils$buildQueryFrom = Utils.buildQueryFromSignature(rawScript, rawBindings), | ||
gremlin = _Utils$buildQueryFrom.gremlin, | ||
bindings = _Utils$buildQueryFrom.bindings; | ||
Object.keys(commands).forEach(key => { | ||
command = commands[key]; | ||
command.messageStream.emit('error', error); | ||
}); | ||
} | ||
var _options = this.options, | ||
processor = _options.processor, | ||
op = _options.op, | ||
accept = _options.accept, | ||
language = _options.language, | ||
aliases = _options.aliases; | ||
/** | ||
* For a given script string and optional bound parameters, build a protocol | ||
* message object to be sent to Gremlin Server. | ||
* | ||
* @param {String|Function} script | ||
* @param {Object} bindings | ||
* @param {Object} message | ||
*/ | ||
buildMessage(rawScript, rawBindings = {}, baseMessage = {}) { | ||
let { gremlin, bindings } = Utils.buildQueryFromSignature(rawScript, rawBindings); | ||
const { processor, op, accept, language, aliases } = this.options; | ||
const baseArgs = { gremlin, bindings, accept, language, aliases }; | ||
const args = _lodash2.default.defaults(baseMessage.args || {}, baseArgs); | ||
var baseArgs = { gremlin: gremlin, bindings: bindings, accept: accept, language: language, aliases: aliases }; | ||
var args = _lodash2.default.defaults(baseMessage.args || {}, baseArgs); | ||
const message = _extends({ | ||
requestId: _nodeUuid2.default.v1(), | ||
processor, | ||
op, | ||
args | ||
}, baseMessage); | ||
var message = _extends({ | ||
requestId: _nodeUuid2.default.v1(), | ||
processor: processor, | ||
op: op, | ||
args: args | ||
}, baseMessage); | ||
if (this.useSession) { | ||
// Assume that people want to use the 'session' processor unless specified | ||
message.processor = message.processor || processor || 'session'; | ||
message.args.session = this.sessionId; | ||
} | ||
if (this.useSession) { | ||
// Assume that people want to use the 'session' processor unless specified | ||
message.processor = message.processor || processor || 'session'; | ||
message.args.session = this.sessionId; | ||
} | ||
return message; | ||
} | ||
return message; | ||
} | ||
}, { | ||
key: 'sendMessage', | ||
value: function sendMessage(message) { | ||
var serializedMessage = this.options.accept + JSON.stringify(message); | ||
serializedMessage = unescape(encodeURIComponent(serializedMessage)); | ||
sendMessage(message) { | ||
let serializedMessage = this.options.accept + JSON.stringify(message); | ||
serializedMessage = unescape(encodeURIComponent(serializedMessage)); | ||
// Let's start packing the message into binary | ||
// mimeLength(1) + mimeType Length + serializedMessage Length | ||
var binaryMessage = new Uint8Array(1 + serializedMessage.length); | ||
binaryMessage[0] = this.options.accept.length; | ||
// Let's start packing the message into binary | ||
// mimeLength(1) + mimeType Length + serializedMessage Length | ||
let binaryMessage = new Uint8Array(1 + serializedMessage.length); | ||
binaryMessage[0] = this.options.accept.length; | ||
for (var i = 0; i < serializedMessage.length; i++) { | ||
binaryMessage[i + 1] = serializedMessage.charCodeAt(i); | ||
} | ||
this.connection.sendMessage(binaryMessage); | ||
for (let i = 0; i < serializedMessage.length; i++) { | ||
binaryMessage[i + 1] = serializedMessage.charCodeAt(i); | ||
} | ||
}, { | ||
key: 'execute', | ||
this.connection.sendMessage(binaryMessage); | ||
} | ||
/** | ||
* Asynchronously send a script to Gremlin Server for execution and fire | ||
* the provided callback when all results have been fetched. | ||
* | ||
* This method internally uses a stream to handle the potential concatenation | ||
* of results. | ||
* | ||
* Callback signature: (Error, Array<result>) | ||
* | ||
* @public | ||
* @param {String|Function} script | ||
* @param {Object} bindings | ||
* @param {Object} message | ||
* @param {Function} callback | ||
*/ | ||
value: function execute(script) { | ||
var bindings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
var message = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; | ||
/** | ||
* Asynchronously send a script to Gremlin Server for execution and fire | ||
* the provided callback when all results have been fetched. | ||
* | ||
* This method internally uses a stream to handle the potential concatenation | ||
* of results. | ||
* | ||
* Callback signature: (Error, Array<result>) | ||
* | ||
* @public | ||
* @param {String|Function} script | ||
* @param {Object} bindings | ||
* @param {Object} message | ||
* @param {Function} callback | ||
*/ | ||
execute(script, bindings = {}, message = {}) { | ||
let callback = arguments[arguments.length - 1]; | ||
var callback = arguments[arguments.length - 1]; | ||
if (typeof message === 'function') { | ||
callback = message; | ||
message = {}; | ||
} | ||
var messageStream = this.messageStream(script, bindings, message); | ||
// TO CHECK: errors handling could be improved | ||
// See https://groups.google.com/d/msg/nodejs/lJYT9hZxFu0/L59CFbqWGyYJ | ||
// for an example using domains | ||
var executeHandler = this.options.executeHandler; | ||
executeHandler(messageStream, callback); | ||
if (typeof message === 'function') { | ||
callback = message; | ||
message = {}; | ||
} | ||
/** | ||
* Execute the script and return a stream of distinct/single results. | ||
* This method reemits a distinct data event for each returned result, which | ||
* makes the stream behave as if `resultIterationBatchSize` was set to 1. | ||
* | ||
* If you do not wish this behavior, please use client.messageStream() instead. | ||
* | ||
* Even though this method uses Highland.js internally, it does not return | ||
* a high level Highland readable stream so we do not risk having to deal | ||
* with unexpected API breaking changes as Highland.js evolves. | ||
* | ||
* @return {ReadableStream} A Node.js Stream2 | ||
*/ | ||
const messageStream = this.messageStream(script, bindings, message); | ||
}, { | ||
key: 'stream', | ||
value: function stream(script, bindings, message) { | ||
var messageStream = this.messageStream(script, bindings, message); | ||
var _ = _highland2.default; // override lo-dash locally | ||
// TO CHECK: errors handling could be improved | ||
// See https://groups.google.com/d/msg/nodejs/lJYT9hZxFu0/L59CFbqWGyYJ | ||
// for an example using domains | ||
const { executeHandler } = this.options; | ||
// Create a local highland 'through' pipeline so we don't expose | ||
// a Highland stream to the end user, but a standard Node.js Stream2 | ||
var through = _.pipeline(_.map(function (_ref3) { | ||
var data = _ref3.result.data; | ||
return data; | ||
}), _.sequence()); | ||
executeHandler(messageStream, callback); | ||
} | ||
var rawStream = messageStream.pipe(through); | ||
/** | ||
* Execute the script and return a stream of distinct/single results. | ||
* This method reemits a distinct data event for each returned result, which | ||
* makes the stream behave as if `resultIterationBatchSize` was set to 1. | ||
* | ||
* If you do not wish this behavior, please use client.messageStream() instead. | ||
* | ||
* Even though this method uses Highland.js internally, it does not return | ||
* a high level Highland readable stream so we do not risk having to deal | ||
* with unexpected API breaking changes as Highland.js evolves. | ||
* | ||
* @return {ReadableStream} A Node.js Stream2 | ||
*/ | ||
stream(script, bindings, message) { | ||
const messageStream = this.messageStream(script, bindings, message); | ||
const _ = _highland2.default; // override lo-dash locally | ||
messageStream.on('error', function (e) { | ||
rawStream.emit('error', new Error(e)); | ||
}); | ||
// Create a local highland 'through' pipeline so we don't expose | ||
// a Highland stream to the end user, but a standard Node.js Stream2 | ||
const through = _.pipeline(_.map(({ result: { data } }) => data), _.sequence()); | ||
return rawStream; | ||
} | ||
}, { | ||
key: 'messageStream', | ||
let rawStream = messageStream.pipe(through); | ||
messageStream.on('error', e => { | ||
rawStream.emit('error', new Error(e)); | ||
}); | ||
/** | ||
* Execute the script and return a stream of raw messages returned by Gremlin | ||
* Server. | ||
* This method does not reemit one distinct data event per result. It directly | ||
* emits the raw messages returned by Gremlin Server as they are received. | ||
* | ||
* Although public, this is a low level method intended to be used for | ||
* advanced usages. | ||
* | ||
* @public | ||
* @param {String|Function} script | ||
* @param {Object} bindings | ||
* @param {Object} message | ||
* @return {MessageStream} | ||
*/ | ||
value: function messageStream(script, bindings, rawMessage) { | ||
var stream = new _MessageStream2.default({ objectMode: true }); | ||
return rawStream; | ||
} | ||
var command = { | ||
message: this.buildMessage(script, bindings, rawMessage), | ||
messageStream: stream | ||
}; | ||
/** | ||
* Execute the script and return a stream of raw messages returned by Gremlin | ||
* Server. | ||
* This method does not reemit one distinct data event per result. It directly | ||
* emits the raw messages returned by Gremlin Server as they are received. | ||
* | ||
* Although public, this is a low level method intended to be used for | ||
* advanced usages. | ||
* | ||
* @public | ||
* @param {String|Function} script | ||
* @param {Object} bindings | ||
* @param {Object} message | ||
* @return {MessageStream} | ||
*/ | ||
messageStream(script, bindings, rawMessage) { | ||
let stream = new _MessageStream2.default({ objectMode: true }); | ||
this.sendCommand(command); //todo improve for streams | ||
const command = { | ||
message: this.buildMessage(script, bindings, rawMessage), | ||
messageStream: stream | ||
}; | ||
return stream; | ||
} | ||
}, { | ||
key: 'sendCommand', | ||
this.sendCommand(command); //todo improve for streams | ||
return stream; | ||
} | ||
/** | ||
* Send a command to Gremlin Server, or add it to queue if the connection | ||
* is not established. | ||
* | ||
* @param {Object} command | ||
*/ | ||
value: function sendCommand(command) { | ||
var message = command.message, | ||
requestId = command.message.requestId; | ||
/** | ||
* Send a command to Gremlin Server, or add it to queue if the connection | ||
* is not established. | ||
* | ||
* @param {Object} command | ||
*/ | ||
sendCommand(command) { | ||
const { | ||
message, | ||
message: { | ||
requestId | ||
} | ||
} = command; | ||
this.commands[requestId] = command; | ||
this.commands[requestId] = command; | ||
if (this.connected) { | ||
this.sendMessage(message); | ||
} else { | ||
this.queue.push(command); | ||
} | ||
if (this.connected) { | ||
this.sendMessage(message); | ||
} else { | ||
this.queue.push(command); | ||
} | ||
}, { | ||
key: 'traversalSource', | ||
value: function traversalSource() { | ||
var _this3 = this; | ||
} | ||
var g = _zer.gremlin.g; | ||
traversalSource() { | ||
const { g } = _zer.gremlin; | ||
let chain = g; | ||
var chain = g; | ||
const awaitable = new Proxy(g, { | ||
get: (traversal, name, receiver) => { | ||
if (name === 'toPromise') { | ||
return () => new Promise((resolve, reject) => { | ||
const { query, params } = (0, _zer.renderChain)(chain); | ||
this.execute(query, params, (err, result) => { | ||
if (err) { | ||
return reject(err); | ||
} | ||
resolve(result); | ||
}); | ||
}); | ||
} | ||
var awaitable = new Proxy(g, { | ||
get: function get(traversal, name, receiver) { | ||
if (name === 'toPromise') { | ||
return function () { | ||
return new Promise(function (resolve, reject) { | ||
var _renderChain = (0, _zer.renderChain)(chain), | ||
query = _renderChain.query, | ||
params = _renderChain.params; | ||
chain = chain[name]; | ||
_this3.execute(query, params, function (err, result) { | ||
if (err) { | ||
return reject(err); | ||
} | ||
resolve(result); | ||
}); | ||
}); | ||
}; | ||
return new Proxy(traversal, { | ||
get(target2, name2, receiver2) { | ||
target2 = target2[name]; | ||
return awaitable; | ||
} | ||
})[name]; | ||
}, | ||
apply(traversal, thisArg, args) { | ||
Reflect.apply(chain, null, args); | ||
chain = chain[name]; | ||
return awaitable; | ||
} | ||
}); | ||
return new Proxy(traversal, { | ||
get: function get(target2, name2, receiver2) { | ||
target2 = target2[name]; | ||
return awaitable; | ||
} | ||
})[name]; | ||
}, | ||
apply: function apply(traversal, thisArg, args) { | ||
Reflect.apply(chain, null, args); | ||
return awaitable; | ||
} | ||
} | ||
return awaitable; | ||
} | ||
}); | ||
return awaitable; | ||
} | ||
}]); | ||
return GremlinClient; | ||
}(_events.EventEmitter); | ||
exports.default = GremlinClient; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9HcmVtbGluQ2xpZW50LmpzIl0sIm5hbWVzIjpbIlV0aWxzIiwiR3JlbWxpbkNsaWVudCIsInBvcnQiLCJob3N0Iiwib3B0aW9ucyIsInBhdGgiLCJsYW5ndWFnZSIsInNlc3Npb24iLCJvcCIsInByb2Nlc3NvciIsImFjY2VwdCIsImV4ZWN1dGVIYW5kbGVyIiwibGVuZ3RoIiwic3RhcnRzV2l0aCIsInVzZVNlc3Npb24iLCJzZXNzaW9uSWQiLCJ2MSIsImNvbm5lY3RlZCIsInF1ZXVlIiwiY29tbWFuZHMiLCJjb25uZWN0aW9uIiwiY3JlYXRlQ29ubmVjdGlvbiIsIm9uIiwib25Db25uZWN0aW9uT3BlbiIsImVycm9yIiwiaGFuZGxlRXJyb3IiLCJtZXNzYWdlIiwiaGFuZGxlUHJvdG9jb2xNZXNzYWdlIiwiZXZlbnQiLCJoYW5kbGVEaXNjb25uZWN0aW9uIiwiY2xvc2UiLCJlcnIiLCJlbWl0IiwiY29kZSIsInJhd01lc3NhZ2UiLCJyZXF1ZXN0SWQiLCJzdGF0dXNDb2RlIiwic3RhdHVzTWVzc2FnZSIsImRhdGEiLCJidWZmZXIiLCJCdWZmZXIiLCJKU09OIiwicGFyc2UiLCJ0b1N0cmluZyIsInN0YXR1cyIsImUiLCJ3YXJuIiwibWVzc2FnZVN0cmVhbSIsInB1c2giLCJFcnJvciIsImV4ZWN1dGVRdWV1ZSIsImNhbmNlbFBlbmRpbmdDb21tYW5kcyIsImRldGFpbHMiLCJzaGlmdCIsInNlbmRNZXNzYWdlIiwiY29tbWFuZCIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwicmF3U2NyaXB0IiwicmF3QmluZGluZ3MiLCJiYXNlTWVzc2FnZSIsImJ1aWxkUXVlcnlGcm9tU2lnbmF0dXJlIiwiZ3JlbWxpbiIsImJpbmRpbmdzIiwiYWxpYXNlcyIsImJhc2VBcmdzIiwiYXJncyIsImRlZmF1bHRzIiwic2VyaWFsaXplZE1lc3NhZ2UiLCJzdHJpbmdpZnkiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImJpbmFyeU1lc3NhZ2UiLCJVaW50OEFycmF5IiwiaSIsImNoYXJDb2RlQXQiLCJzY3JpcHQiLCJjYWxsYmFjayIsImFyZ3VtZW50cyIsIl8iLCJ0aHJvdWdoIiwicGlwZWxpbmUiLCJtYXAiLCJyZXN1bHQiLCJzZXF1ZW5jZSIsInJhd1N0cmVhbSIsInBpcGUiLCJzdHJlYW0iLCJvYmplY3RNb2RlIiwiYnVpbGRNZXNzYWdlIiwic2VuZENvbW1hbmQiLCJnIiwiY2hhaW4iLCJhd2FpdGFibGUiLCJQcm94eSIsImdldCIsInRyYXZlcnNhbCIsIm5hbWUiLCJyZWNlaXZlciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicXVlcnkiLCJwYXJhbXMiLCJleGVjdXRlIiwidGFyZ2V0MiIsIm5hbWUyIiwicmVjZWl2ZXIyIiwiYXBwbHkiLCJ0aGlzQXJnIiwiUmVmbGVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUVBOztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztJQUFZQSxLOzs7Ozs7Ozs7OytlQVpaO0FBQ0E7OztJQWNNQyxhOzs7QUFDSiwyQkFBMkQ7QUFBQSxRQUEvQ0MsSUFBK0MsdUVBQXhDLElBQXdDO0FBQUEsUUFBbENDLElBQWtDLHVFQUEzQixXQUEyQjtBQUFBLFFBQWRDLE9BQWMsdUVBQUosRUFBSTs7QUFBQTs7QUFBQTs7QUFHekQsVUFBS0YsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsVUFBS0MsSUFBTCxHQUFZQSxJQUFaOztBQUVBO0FBQ0E7QUFQeUQsd0JBUTNCQyxPQVIyQixDQVFqREMsSUFSaUQ7QUFBQSxRQVFqREEsSUFSaUQsaUNBUTFDLFVBUjBDOzs7QUFVekQsVUFBS0QsT0FBTDtBQUNFRSxnQkFBVSxnQkFEWjtBQUVFQyxlQUFTLEtBRlg7QUFHRUMsVUFBSSxNQUhOO0FBSUVDLGlCQUFXLEVBSmI7QUFLRUMsY0FBUSxrQkFMVjtBQU1FQztBQU5GLE9BT0tQLE9BUEw7QUFRRUMsWUFBTUEsS0FBS08sTUFBTCxJQUFlLENB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QUFBQSxvQkFDN0JDLE1BRDZCLGdCQUM3QkEsTUFENkI7O0FBRTVDLHVCQUFLQyxPQUFMLENBQWFGLEtBQWIsRUFBb0JDLE1BQXBCLEVBQTRCLFVBQUMxRSxHQUFELEVBQU1zRCxNQUFOLEVBQWlCO0FBQzNDLHNCQUFJdEQsR0FBSixFQUFTO0FBQ1AsMkJBQU93RSxPQUFPeEUsR0FBUCxDQUFQO0FBQ0Q7QUFDRHVFLDBCQUFRakIsTUFBUjtBQUNELGlCQUxEO0FBTUQsZUFSWSxDQUFOO0FBQUEsYUFBUDtBQVNEOztBQUVEUyxrQkFBUUEsTUFBTUssSUFBTixDQUFSOztBQUVBLGlCQUFPLElBQUlILEtBQUosQ0FBVUUsU0FBVixFQUFxQjtBQUMxQkQsZUFEMEIsZUFDdEJVLE9BRHNCLEVBQ2JDLEtBRGEsRUFDTkMsU0FETSxFQUNLO0FBQzdCRix3QkFBVUEsUUFBUVIsSUFBUixDQUFWO0FBQ0EscUJBQU9KLFNBQVA7QUFDRDtBQUp5QixXQUFyQixFQUtKSSxJQUxJLENBQVA7QUFNRCxTQXRCNEI7QUF1QjdCVyxhQXZCNkIsaUJBdUJ2QlosU0F2QnVCLEVBdUJaYSxPQXZCWSxFQXVCSDNDLElBdkJHLEVBdUJHO0FBQzlCNEMsa0JBQVFGLEtBQVIsQ0FBY2hCLEtBQWQsRUFBcUIsSUFBckIsRUFBMkIxQixJQUEzQjs7QUFFQSxpQkFBTzJCLFNBQVA7QUFDRDtBQTNCNEIsT0FBYixDQUFsQjs7QUE4QkEsYUFBT0EsU0FBUDtBQUNEOzs7Ozs7a0JBR1k5RixhIiwiZmlsZSI6IkdyZW1saW5DbGllbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKmpzbGludCAtVzA3OSAqL1xuLypqc2xpbnQgbm9kZTogdHJ1ZSAqL1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuaW1wb3J0IHV1aWQgZnJvbSAnbm9kZS11dWlkJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgaGlnaGxhbmQgZnJvbSAnaGlnaGxhbmQnO1xuaW1wb3J0IHsgZ3JlbWxpbiwgcmVuZGVyQ2hhaW4gfSBmcm9tICd6ZXInO1xuXG5pbXBvcnQgV2ViU29ja2V0R3JlbWxpbkNvbm5lY3Rpb24gZnJvbSAnLi9XZWJTb2NrZXRHcmVtbGluQ29ubmVjdGlvbic7XG5pbXBvcnQgTWVzc2FnZVN0cmVhbSBmcm9tICcuL01lc3NhZ2VTdHJlYW0nO1xuaW1wb3J0IGV4ZWN1dGVIYW5kbGVyIGZyb20gJy4vZXhlY3V0ZUhhbmRsZXInO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5cblxuY2xhc3MgR3JlbWxpbkNsaWVudCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKHBvcnQgPSA4MTgyLCBob3N0ID0gJ2xvY2FsaG9zdCcsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnBvcnQgPSBwb3J0O1xuICAgIHRoaXMuaG9zdCA9IGhvc3Q7XG5cbiAgICAvLyBCcmVha2luZyBjaGFuZ2UgaW4gdjMuMi4yLCBjb25uZWN0IHRvIC9ncmVtbGluIHJhdGhlciB0aGFuIC9cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZC90b3BpYy9ncmVtbGluLXVzZXJzL3g0aGlIc21Uc0hNL2Rpc2N1c3Npb25cbiAgICBjb25zdCB7IHBhdGggPSAnL2dyZW1saW4nIH0gPSBvcHRpb25zO1xuXG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgbGFuZ3VhZ2U6ICdncmVtbGluLWdyb292eScsXG4gICAgICBzZXNzaW9uOiBmYWxzZSxcbiAgICAgIG9wOiAnZXZhbCcsXG4gICAgICBwcm9jZXNzb3I6ICcnLFxuICAgICAgYWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBleGVjdXRlSGFuZGxlcixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBwYXRoOiBwYXRoLmxlbmd0aCAmJiAhcGF0aC5zdGFydHNXaXRoKCcvJykgPyBgLyR7cGF0aH1gIDogcGF0aFxuICAgIH1cblxuICAgIHRoaXMudXNlU2Vzc2lvbiA9IHRoaXMub3B0aW9ucy5zZXNzaW9uO1xuXG4gICAgaWYgKHRoaXMudXNlU2Vzc2lvbikge1xuICAgICAgdGhpcy5zZXNzaW9uSWQgPSB1dWlkLnYxKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnF1ZXVlID0gW107XG5cbiAgICB0aGlzLmNvbW1hbmRzID0ge307XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24gPSB0aGlzLmNyZWF0ZUNvbm5lY3Rpb24oe1xuICAgICAgcG9ydCxcbiAgICAgIGhvc3QsXG4gICAgICBwYXRoOiB0aGlzLm9wdGlvbnMucGF0aFxuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlQ29ubmVjdGlvbih7IHBvcnQsIGhvc3QsIHBhdGggfSkge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuZXcgV2ViU29ja2V0R3JlbWxpbkNvbm5lY3Rpb24oeyBwb3J0LCBob3N0LCBwYXRoIH0pO1xuXG4gICAgY29ubmVjdGlvbi5vbignb3BlbicsICgpID0+IHRoaXMub25Db25uZWN0aW9uT3BlbigpKTtcbiAgICBjb25uZWN0aW9uLm9uKCdlcnJvcicsIChlcnJvcikgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnJvcikpO1xuICAgIGNvbm5lY3Rpb24ub24oJ21lc3NhZ2UnLCAobWVzc2FnZSkgPT4gdGhpcy5oYW5kbGVQcm90b2NvbE1lc3NhZ2UobWVzc2FnZSkpO1xuICAgIGNvbm5lY3Rpb24ub24oJ2Nsb3NlJywgKGV2ZW50KSA9PiB0aGlzLmhhbmRsZURpc2Nvbm5lY3Rpb24oZXZlbnQpKVxuXG4gICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gIH1cblxuICBjbG9zZUNvbm5lY3Rpb24oKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBoYW5kbGVFcnJvcihlcnIpIHtcbiAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG5cbiAgd2Fybihjb2RlLCBtZXNzYWdlKSB7XG4gICAgdGhpcy5lbWl0KCd3YXJuaW5nJywge1xuICAgICAgY29kZSxcbiAgICAgIG1lc3NhZ2VcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGFsbCBpbmNvbWluZyByYXcgbWVzc2FnZSBldmVudHMgc2VudCBieSBHcmVtbGluIFNlcnZlciwgYW5kIGRpc3BhdGNoXG4gICAqIHRvIHRoZSBhcHByb3ByaWF0ZSBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0ge01lc3NhZ2VFdmVudH0gZXZlbnRcbiAgICovXG4gIGhhbmRsZVByb3RvY29sTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgbGV0IHJhd01lc3NhZ2UsIHJlcXVlc3RJZCwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBtZXNzYWdlO1xuICAgICAgY29uc3QgYnVmZmVyID0gbmV3IEJ1ZmZlcihkYXRhLCAnYmluYXJ5Jyk7XG4gICAgICByYXdNZXNzYWdlID0gSlNPTi5wYXJzZShidWZmZXIudG9TdHJpbmcoJ3V0Zi04JykpO1xuICAgICAgcmVxdWVzdElkID0gcmF3TWVzc2FnZS5yZXF1ZXN0SWQ7XG4gICAgICBzdGF0dXNDb2RlID0gcmF3TWVzc2FnZS5zdGF0dXMuY29kZTtcbiAgICAgIHN0YXR1c01lc3NhZ2UgPSByYXdNZXNzYWdlLnN0YXR1cy5tZXNzYWdlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMud2FybignTWFsZm9ybWVkUmVzcG9uc2UnLCAnUmVjZWl2ZWQgbWFsZm9ybWVkIHJlc3BvbnNlIG1lc3NhZ2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhIHN0cmVhbSBmb3IgdGhpcyByZXNwb25zZSwgZW1pdCBhIHdhcm5pbmcgb24gdGhlXG4gICAgLy8gY2xpZW50XG4gICAgaWYgKCF0aGlzLmNvbW1hbmRzW3JlcXVlc3RJZF0pIHtcbiAgICAgIHRoaXMud2FybignT3JwaGFuZWRSZXNwb25zZScsIGBSZWNlaXZlZCByZXNwb25zZSBmb3IgbWlzc2luZyBvciBjbG9zZWQgcmVxdWVzdDogJHtyZXF1ZXN0SWR9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBtZXNzYWdlU3RyZWFtID0gbnVsbCB9ID0gdGhpcy5jb21tYW5kc1tyZXF1ZXN0SWRdO1xuXG4gICAgc3dpdGNoIChzdGF0dXNDb2RlKSB7XG4gICAgICBjYXNlIDIwMDogLy8gU1VDQ0VTU1xuICAgICAgICBkZWxldGUgdGhpcy5jb21tYW5kc1tyZXF1ZXN0SWRdOyAvLyBUT0RPOiBvcHRpbWl6ZSBwZXJmb3JtYW5jZVxuICAgICAgICBtZXNzYWdlU3RyZWFtLnB1c2gocmF3TWVzc2FnZSk7XG4gICAgICAgIG1lc3NhZ2VTdHJlYW0ucHVzaChudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDIwNDogLy8gTk9fQ09OVEVOVFxuICAgICAgICBkZWxldGUgdGhpcy5jb21tYW5kc1tyZXF1ZXN0SWRdO1xuICAgICAgICBtZXNzYWdlU3RyZWFtLnB1c2gobnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyMDY6IC8vIFBBUlRJQUxfQ09OVEVOVFxuICAgICAgICBtZXNzYWdlU3RyZWFtLnB1c2gocmF3TWVzc2FnZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZGVsZXRlIHRoaXMuY29tbWFuZHNbcmVxdWVzdElkXTtcbiAgICAgICAgbWVzc2FnZVN0cmVhbS5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihzdGF0dXNNZXNzYWdlICsgJyAoRXJyb3IgJysgc3RhdHVzQ29kZSArJyknKSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgdGhlIFdlYlNvY2tldCBvbk9wZW4gZXZlbnQsIGZsYWcgdGhlIGNsaWVudCBhcyBjb25uZWN0ZWQgYW5kXG4gICAqIHByb2Nlc3MgY29tbWFuZCBxdWV1ZS5cbiAgICovXG4gIG9uQ29ubmVjdGlvbk9wZW4oKSB7XG4gICAgdGhpcy5jb25uZWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZW1pdCgnY29ubmVjdCcpO1xuXG4gICAgdGhpcy5leGVjdXRlUXVldWUoKTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtDbG9zZUV2ZW50fSBldmVudFxuICAgKi9cbiAgaGFuZGxlRGlzY29ubmVjdGlvbihldmVudCkge1xuICAgIHRoaXMuY2FuY2VsUGVuZGluZ0NvbW1hbmRzKHtcbiAgICAgIG1lc3NhZ2U6ICdXZWJTb2NrZXQgY2xvc2VkJyxcbiAgICAgIGRldGFpbHM6IGV2ZW50XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgdGhlIGN1cnJlbnQgY29tbWFuZCBxdWV1ZSwgc2VuZGluZyBjb21tYW5kcyB0byBHcmVtbGluIFNlcnZlclxuICAgKiAoRmlyc3QgSW4sIEZpcnN0IE91dCkuXG4gICAqL1xuICBleGVjdXRlUXVldWUoKSB7XG4gICAgd2hpbGUgKHRoaXMucXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IHsgbWVzc2FnZSB9ID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgdGhpcy5zZW5kTWVzc2FnZShtZXNzYWdlKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByZWFzb25cbiAgICovXG4gIGNhbmNlbFBlbmRpbmdDb21tYW5kcyh7IG1lc3NhZ2UsIGRldGFpbHMgfSkge1xuICAgIGNvbnN0IGNvbW1hbmRzID0gdGhpcy5jb21tYW5kcztcbiAgICBsZXQgY29tbWFuZDtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICBlcnJvci5kZXRhaWxzID0gZGV0YWlscztcblxuICAgIC8vIEVtcHR5IHF1ZXVlXG4gICAgdGhpcy5xdWV1ZS5sZW5ndGggPSAwO1xuICAgIHRoaXMuY29tbWFuZHMgPSB7fTtcblxuICAgIE9iamVjdC5rZXlzKGNvbW1hbmRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGNvbW1hbmQgPSBjb21tYW5kc1trZXldO1xuICAgICAgY29tbWFuZC5tZXNzYWdlU3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBGb3IgYSBnaXZlbiBzY3JpcHQgc3RyaW5nIGFuZCBvcHRpb25hbCBib3VuZCBwYXJhbWV0ZXJzLCBidWlsZCBhIHByb3RvY29sXG4gICAqIG1lc3NhZ2Ugb2JqZWN0IHRvIGJlIHNlbnQgdG8gR3JlbWxpbiBTZXJ2ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzY3JpcHRcbiAgICogQHBhcmFtIHtPYmplY3R9IGJpbmRpbmdzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtZXNzYWdlXG4gICAqL1xuICBidWlsZE1lc3NhZ2UocmF3U2NyaXB0LCByYXdCaW5kaW5ncyA9IHt9LCBiYXNlTWVzc2FnZSA9IHt9KSB7XG4gICAgbGV0IHsgZ3JlbWxpbiwgYmluZGluZ3MgfSA9IFV0aWxzLmJ1aWxkUXVlcnlGcm9tU2lnbmF0dXJlKHJhd1NjcmlwdCwgcmF3QmluZGluZ3MpO1xuICAgIGNvbnN0IHsgcHJvY2Vzc29yLCBvcCwgYWNjZXB0LCBsYW5ndWFnZSwgYWxpYXNlcyB9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgY29uc3QgYmFzZUFyZ3MgPSB7IGdyZW1saW4sIGJpbmRpbmdzLCBhY2NlcHQsIGxhbmd1YWdlLCBhbGlhc2VzIH07XG4gICAgY29uc3QgYXJncyA9IF8uZGVmYXVsdHMoYmFzZU1lc3NhZ2UuYXJncyB8fCB7fSwgYmFzZUFyZ3MpO1xuXG4gICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgIHJlcXVlc3RJZDogdXVpZC52MSgpLFxuICAgICAgcHJvY2Vzc29yLFxuICAgICAgb3AsXG4gICAgICBhcmdzLFxuICAgICAgLi4uYmFzZU1lc3NhZ2VcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMudXNlU2Vzc2lvbikge1xuICAgICAgLy8gQXNzdW1lIHRoYXQgcGVvcGxlIHdhbnQgdG8gdXNlIHRoZSAnc2Vzc2lvbicgcHJvY2Vzc29yIHVubGVzcyBzcGVjaWZpZWRcbiAgICAgIG1lc3NhZ2UucHJvY2Vzc29yID0gbWVzc2FnZS5wcm9jZXNzb3IgfHwgcHJvY2Vzc29yIHx8ICdzZXNzaW9uJztcbiAgICAgIG1lc3NhZ2UuYXJncy5zZXNzaW9uID0gdGhpcy5zZXNzaW9uSWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH07XG5cbiAgc2VuZE1lc3NhZ2UobWVzc2FnZSkge1xuICAgIGxldCBzZXJpYWxpemVkTWVzc2FnZSA9IHRoaXMub3B0aW9ucy5hY2NlcHQgKyBKU09OLnN0cmluZ2lmeShtZXNzYWdlKTtcbiAgICBzZXJpYWxpemVkTWVzc2FnZSA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzZXJpYWxpemVkTWVzc2FnZSkpO1xuXG4gICAgLy8gTGV0J3Mgc3RhcnQgcGFja2luZyB0aGUgbWVzc2FnZSBpbnRvIGJpbmFyeVxuICAgIC8vIG1pbWVMZW5ndGgoMSkgKyBtaW1lVHlwZSBMZW5ndGggKyBzZXJpYWxpemVkTWVzc2FnZSBMZW5ndGhcbiAgICBsZXQgYmluYXJ5TWVzc2FnZSA9IG5ldyBVaW50OEFycmF5KDEgKyBzZXJpYWxpemVkTWVzc2FnZS5sZW5ndGgpO1xuICAgIGJpbmFyeU1lc3NhZ2VbMF0gPSB0aGlzLm9wdGlvbnMuYWNjZXB0Lmxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VyaWFsaXplZE1lc3NhZ2UubGVuZ3RoOyBpKyspIHtcbiAgICAgIGJpbmFyeU1lc3NhZ2VbaSArIDFdID0gc2VyaWFsaXplZE1lc3NhZ2UuY2hhckNvZGVBdChpKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24uc2VuZE1lc3NhZ2UoYmluYXJ5TWVzc2FnZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFzeW5jaHJvbm91c2x5IHNlbmQgYSBzY3JpcHQgdG8gR3JlbWxpbiBTZXJ2ZXIgZm9yIGV4ZWN1dGlvbiBhbmQgZmlyZVxuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgd2hlbiBhbGwgcmVzdWx0cyBoYXZlIGJlZW4gZmV0Y2hlZC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaW50ZXJuYWxseSB1c2VzIGEgc3RyZWFtIHRvIGhhbmRsZSB0aGUgcG90ZW50aWFsIGNvbmNhdGVuYXRpb25cbiAgICogb2YgcmVzdWx0cy5cbiAgICpcbiAgICogQ2FsbGJhY2sgc2lnbmF0dXJlOiAoRXJyb3IsIEFycmF5PHJlc3VsdD4pXG4gICAqXG4gICAqIEBwdWJsaWNcbiAgICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNjcmlwdFxuICAgKiBAcGFyYW0ge09iamVjdH0gYmluZGluZ3NcbiAgICogQHBhcmFtIHtPYmplY3R9IG1lc3NhZ2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIGV4ZWN1dGUoc2NyaXB0LCBiaW5kaW5ncyA9IHt9LCBtZXNzYWdlID0ge30pIHtcbiAgICBsZXQgY2FsbGJhY2sgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IG1lc3NhZ2U7XG4gICAgICBtZXNzYWdlID0ge307XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZVN0cmVhbSA9IHRoaXMubWVzc2FnZVN0cmVhbShzY3JpcHQsIGJpbmRpbmdzLCBtZXNzYWdlKTtcblxuICAgIC8vIFRPIENIRUNLOiBlcnJvcnMgaGFuZGxpbmcgY291bGQgYmUgaW1wcm92ZWRcbiAgICAvLyBTZWUgaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9kL21zZy9ub2RlanMvbEpZVDloWnhGdTAvTDU5Q0ZicVdHeVlKXG4gICAgLy8gZm9yIGFuIGV4YW1wbGUgdXNpbmcgZG9tYWluc1xuICAgIGNvbnN0IHsgZXhlY3V0ZUhhbmRsZXIgfSA9IHRoaXMub3B0aW9ucztcblxuICAgIGV4ZWN1dGVIYW5kbGVyKG1lc3NhZ2VTdHJlYW0sIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBzY3JpcHQgYW5kIHJldHVybiBhIHN0cmVhbSBvZiBkaXN0aW5jdC9zaW5nbGUgcmVzdWx0cy5cbiAgICogVGhpcyBtZXRob2QgcmVlbWl0cyBhIGRpc3RpbmN0IGRhdGEgZXZlbnQgZm9yIGVhY2ggcmV0dXJuZWQgcmVzdWx0LCB3aGljaFxuICAgKiBtYWtlcyB0aGUgc3RyZWFtIGJlaGF2ZSBhcyBpZiBgcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplYCB3YXMgc2V0IHRvIDEuXG4gICAqXG4gICAqIElmIHlvdSBkbyBub3Qgd2lzaCB0aGlzIGJlaGF2aW9yLCBwbGVhc2UgdXNlIGNsaWVudC5tZXNzYWdlU3RyZWFtKCkgaW5zdGVhZC5cbiAgICpcbiAgICogRXZlbiB0aG91Z2ggdGhpcyBtZXRob2QgdXNlcyBIaWdobGFuZC5qcyBpbnRlcm5hbGx5LCBpdCBkb2VzIG5vdCByZXR1cm5cbiAgICogYSBoaWdoIGxldmVsIEhpZ2hsYW5kIHJlYWRhYmxlIHN0cmVhbSBzbyB3ZSBkbyBub3QgcmlzayBoYXZpbmcgdG8gZGVhbFxuICAgKiB3aXRoIHVuZXhwZWN0ZWQgQVBJIGJyZWFraW5nIGNoYW5nZXMgYXMgSGlnaGxhbmQuanMgZXZvbHZlcy5cbiAgICpcbiAgICogQHJldHVybiB7UmVhZGFibGVTdHJlYW19IEEgTm9kZS5qcyBTdHJlYW0yXG4gICAqL1xuICBzdHJlYW0oc2NyaXB0LCBiaW5kaW5ncywgbWVzc2FnZSkge1xuICAgIGNvbnN0IG1lc3NhZ2VTdHJlYW0gPSB0aGlzLm1lc3NhZ2VTdHJlYW0oc2NyaXB0LCBiaW5kaW5ncywgbWVzc2FnZSk7XG4gICAgY29uc3QgXyA9IGhpZ2hsYW5kOyAvLyBvdmVycmlkZSBsby1kYXNoIGxvY2FsbHlcblxuICAgIC8vIENyZWF0ZSBhIGxvY2FsIGhpZ2hsYW5kICd0aHJvdWdoJyBwaXBlbGluZSBzbyB3ZSBkb24ndCBleHBvc2VcbiAgICAvLyBhIEhpZ2hsYW5kIHN0cmVhbSB0byB0aGUgZW5kIHVzZXIsIGJ1dCBhIHN0YW5kYXJkIE5vZGUuanMgU3RyZWFtMlxuICAgIGNvbnN0IHRocm91Z2ggPSBfLnBpcGVsaW5lKFxuICAgICAgXy5tYXAoKHsgcmVzdWx0OiB7IGRhdGEgfX0pID0+IGRhdGEpLFxuICAgICAgXy5zZXF1ZW5jZSgpXG4gICAgKTtcblxuICAgIGxldCByYXdTdHJlYW0gPSBtZXNzYWdlU3RyZWFtLnBpcGUodGhyb3VnaCk7XG5cbiAgICBtZXNzYWdlU3RyZWFtLm9uKCdlcnJvcicsIChlKSA9PiB7XG4gICAgICByYXdTdHJlYW0uZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoZSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJhd1N0cmVhbTtcbiAgfTtcblxuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgc2NyaXB0IGFuZCByZXR1cm4gYSBzdHJlYW0gb2YgcmF3IG1lc3NhZ2VzIHJldHVybmVkIGJ5IEdyZW1saW5cbiAgICogU2VydmVyLlxuICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCByZWVtaXQgb25lIGRpc3RpbmN0IGRhdGEgZXZlbnQgcGVyIHJlc3VsdC4gSXQgZGlyZWN0bHlcbiAgICogZW1pdHMgdGhlIHJhdyBtZXNzYWdlcyByZXR1cm5lZCBieSBHcmVtbGluIFNlcnZlciBhcyB0aGV5IGFyZSByZWNlaXZlZC5cbiAgICpcbiAgICogQWx0aG91Z2ggcHVibGljLCB0aGlzIGlzIGEgbG93IGxldmVsIG1ldGhvZCBpbnRlbmRlZCB0byBiZSB1c2VkIGZvclxuICAgKiBhZHZhbmNlZCB1c2FnZXMuXG4gICAqXG4gICAqIEBwdWJsaWNcbiAgICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNjcmlwdFxuICAgKiBAcGFyYW0ge09iamVjdH0gYmluZGluZ3NcbiAgICogQHBhcmFtIHtPYmplY3R9IG1lc3NhZ2VcbiAgICogQHJldHVybiB7TWVzc2FnZVN0cmVhbX1cbiAgICovXG4gIG1lc3NhZ2VTdHJlYW0oc2NyaXB0LCBiaW5kaW5ncywgcmF3TWVzc2FnZSkge1xuICAgIGxldCBzdHJlYW0gPSBuZXcgTWVzc2FnZVN0cmVhbSh7IG9iamVjdE1vZGU6IHRydWUgfSk7XG5cbiAgICBjb25zdCBjb21tYW5kID0ge1xuICAgICAgbWVzc2FnZTogdGhpcy5idWlsZE1lc3NhZ2Uoc2NyaXB0LCBiaW5kaW5ncywgcmF3TWVzc2FnZSksXG4gICAgICBtZXNzYWdlU3RyZWFtOiBzdHJlYW1cbiAgICB9O1xuXG4gICAgdGhpcy5zZW5kQ29tbWFuZChjb21tYW5kKTsgLy90b2RvIGltcHJvdmUgZm9yIHN0cmVhbXNcblxuICAgIHJldHVybiBzdHJlYW07XG4gIH07XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBjb21tYW5kIHRvIEdyZW1saW4gU2VydmVyLCBvciBhZGQgaXQgdG8gcXVldWUgaWYgdGhlIGNvbm5lY3Rpb25cbiAgICogaXMgbm90IGVzdGFibGlzaGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29tbWFuZFxuICAgKi9cbiAgc2VuZENvbW1hbmQoY29tbWFuZCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBtZXNzYWdlOiB7XG4gICAgICAgIHJlcXVlc3RJZFxuICAgICAgfVxuICAgIH0gPSBjb21tYW5kO1xuXG4gICAgdGhpcy5jb21tYW5kc1tyZXF1ZXN0SWRdID0gY29tbWFuZDtcblxuICAgIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgICAgdGhpcy5zZW5kTWVzc2FnZShtZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWV1ZS5wdXNoKGNvbW1hbmQpO1xuICAgIH1cbiAgfTtcblxuICB0cmF2ZXJzYWxTb3VyY2UoKSB7XG4gICAgY29uc3QgeyBnIH0gPSBncmVtbGluO1xuXG4gICAgbGV0IGNoYWluID0gZztcblxuICAgIGNvbnN0IGF3YWl0YWJsZSA9IG5ldyBQcm94eShnLCB7XG4gICAgICBnZXQ6ICh0cmF2ZXJzYWwsIG5hbWUsIHJlY2VpdmVyKSA9PiB7XG4gICAgICAgIGlmIChuYW1lID09PSAndG9Qcm9taXNlJykge1xuICAgICAgICAgIHJldHVybiAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PsKge1xuICAgICAgICAgICAgY29uc3QgeyBxdWVyeSwgcGFyYW1zIH0gPSByZW5kZXJDaGFpbihjaGFpbik7XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGUocXVlcnksIHBhcmFtcywgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGFpbiA9IGNoYWluW25hbWVdO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJveHkodHJhdmVyc2FsLCB7XG4gICAgICAgICAgZ2V0KHRhcmdldDIsIG5hbWUyLCByZWNlaXZlcjIpIHtcbiAgICAgICAgICAgIHRhcmdldDIgPSB0YXJnZXQyW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0YWJsZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pW25hbWVdO1xuICAgICAgfSxcbiAgICAgIGFwcGx5KHRyYXZlcnNhbCwgdGhpc0FyZywgYXJncykge1xuICAgICAgICBSZWZsZWN0LmFwcGx5KGNoYWluLCBudWxsLCBhcmdzKTtcblxuICAgICAgICByZXR1cm4gYXdhaXRhYmxlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF3YWl0YWJsZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHcmVtbGluQ2xpZW50O1xuIl19 | ||
exports.default = GremlinClient; |
@@ -8,4 +8,2 @@ 'use strict'; | ||
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; | ||
var _zer = require('zer'); | ||
@@ -15,3 +13,3 @@ | ||
enumerable: true, | ||
get: function get() { | ||
get: function () { | ||
return _zer.gremlin; | ||
@@ -37,3 +35,3 @@ } | ||
function createClient(port, host, options) { | ||
if ((typeof port === 'undefined' ? 'undefined' : _typeof(port)) === 'object') { | ||
if (typeof port === 'object') { | ||
options = port; | ||
@@ -43,3 +41,3 @@ port = undefined; | ||
if ((typeof host === 'undefined' ? 'undefined' : _typeof(host)) === 'object') { | ||
if (typeof host === 'object') { | ||
options = host; | ||
@@ -59,8 +57,4 @@ host = undefined; | ||
*/ | ||
var makePromise = function makePromise(client, query) { | ||
var promise = new Promise(function (resolve, reject) { | ||
return client.execute(query, function (err, results) { | ||
return err ? reject(err) : resolve(results); | ||
}); | ||
}); | ||
const makePromise = (client, query) => { | ||
const promise = new Promise((resolve, reject) => client.execute(query, (err, results) => err ? reject(err) : resolve(results))); | ||
// Let's attach the query for easier debugging | ||
@@ -72,7 +66,3 @@ promise.query = query; | ||
var makeTemplateTag = exports.makeTemplateTag = function makeTemplateTag(client) { | ||
return function () { | ||
return makePromise(client, _gremlinTemplateString2.default.apply(undefined, arguments)); | ||
}; | ||
}; | ||
const makeTemplateTag = exports.makeTemplateTag = client => (...gremlinChunks) => makePromise(client, (0, _gremlinTemplateString2.default)(...gremlinChunks)); | ||
@@ -88,15 +78,8 @@ /** | ||
*/ | ||
var bindForClient = exports.bindForClient = function bindForClient(client, functions) { | ||
return (0, _lodash2.default)(functions).mapValues(function (fn) { | ||
return function () { | ||
return makePromise(client, fn.apply(undefined, arguments)); | ||
}; | ||
}).value(); | ||
}; | ||
const bindForClient = exports.bindForClient = (client, functions) => (0, _lodash2.default)(functions).mapValues(fn => (...args) => makePromise(client, fn(...args))).value(); | ||
exports.default = { | ||
createClient: createClient, | ||
makeTemplateTag: makeTemplateTag, | ||
bindForClient: bindForClient | ||
}; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJncmVtbGluIiwiY3JlYXRlQ2xpZW50IiwicG9ydCIsImhvc3QiLCJvcHRpb25zIiwidW5kZWZpbmVkIiwibWFrZVByb21pc2UiLCJjbGllbnQiLCJxdWVyeSIsInByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImV4ZWN1dGUiLCJlcnIiLCJyZXN1bHRzIiwibWFrZVRlbXBsYXRlVGFnIiwiYmluZEZvckNsaWVudCIsImZ1bmN0aW9ucyIsIm1hcFZhbHVlcyIsImZuIiwidmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O2dCQUVTQSxPOzs7UUFLT0MsWSxHQUFBQSxZOztBQVBoQjs7OztBQUNBOzs7O0FBR0E7Ozs7OztBQUdPLFNBQVNBLFlBQVQsQ0FBc0JDLElBQXRCLEVBQTRCQyxJQUE1QixFQUFrQ0MsT0FBbEMsRUFBMkM7QUFDaEQsTUFBSSxRQUFPRixJQUFQLHlDQUFPQSxJQUFQLE9BQWdCLFFBQXBCLEVBQThCO0FBQzVCRSxjQUFVRixJQUFWO0FBQ0FBLFdBQU9HLFNBQVA7QUFDRDs7QUFFRCxNQUFJLFFBQU9GLElBQVAseUNBQU9BLElBQVAsT0FBZ0IsUUFBcEIsRUFBOEI7QUFDNUJDLGNBQVVELElBQVY7QUFDQUEsV0FBT0UsU0FBUDtBQUNEOztBQUVELFNBQU8sNEJBQWtCSCxJQUFsQixFQUF3QkMsSUFBeEIsRUFBOEJDLE9BQTlCLENBQVA7QUFDRDs7QUFHRDs7Ozs7OztBQU9BLElBQU1FLGNBQWMsU0FBZEEsV0FBYyxDQUFDQyxNQUFELEVBQVNDLEtBQVQsRUFBbUI7QUFDckMsTUFBTUMsVUFBVSxJQUFJQyxPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVQyxNQUFWO0FBQUEsV0FDMUJMLE9BQU9NLE9BQVAsQ0FBZUwsS0FBZixFQUFzQixVQUFDTSxHQUFELEVBQU1DLE9BQU47QUFBQSxhQUNwQkQsTUFBTUYsT0FBT0UsR0FBUCxDQUFOLEdBQW9CSCxRQUFRSSxPQUFSLENBREE7QUFBQSxLQUF0QixDQUQwQjtBQUFBLEdBQVosQ0FBaEI7QUFLQTtBQUNBTixVQUFRRCxLQUFSLEdBQWdCQSxLQUFoQjs7QUFFQSxTQUFPQyxPQUFQO0FBQ0QsQ0FWRDs7QUFZTyxJQUFNTyw0Q0FBa0IsU0FBbEJBLGVBQWtCLENBQUNULE1BQUQ7QUFBQSxTQUM3QjtBQUFBLFdBQXNCRCxZQUFZQyxNQUFaLEVBQW9CLDJEQUFwQixDQUF0QjtBQUFBLEdBRDZCO0FBQUEsQ0FBeEI7O0FBR1A7Ozs7Ozs7OztBQVNPLElBQU1VLHdDQUFnQixTQUFoQkEsYUFBZ0IsQ0FBQ1YsTUFBRCxFQUFTVyxTQUFUO0FBQUEsU0FBdUIsc0JBQUVBLFNBQUYsRUFDakRDLFNBRGlELENBQ3ZDLFVBQUNDLEVBQUQ7QUFBQSxXQUFRO0FBQUEsYUFBYWQsWUFBWUMsTUFBWixFQUFvQmEsOEJBQXBCLENBQWI7QUFBQSxLQUFSO0FBQUEsR0FEdUMsRUFFakRDLEtBRmlELEVBQXZCO0FBQUEsQ0FBdEI7O2tCQUtRO0FBQ2JwQiw0QkFEYTtBQUViZSxrQ0FGYTtBQUdiQztBQUhhLEMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHRlbXBsYXRlIGZyb20gJ2dyZW1saW4tdGVtcGxhdGUtc3RyaW5nJztcbmV4cG9ydCB7IGdyZW1saW4gYXMgc3RhdGljcyB9IGZyb20gJ3plcic7XG5cbmltcG9ydCBHcmVtbGluQ2xpZW50IGZyb20gJy4vR3JlbWxpbkNsaWVudCc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNsaWVudChwb3J0LCBob3N0LCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgcG9ydCA9PT0gJ29iamVjdCcpIHtcbiAgICBvcHRpb25zID0gcG9ydDtcbiAgICBwb3J0ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBob3N0ID09PSAnb2JqZWN0Jykge1xuICAgIG9wdGlvbnMgPSBob3N0O1xuICAgIGhvc3QgPSB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gbmV3IEdyZW1saW5DbGllbnQocG9ydCwgaG9zdCwgb3B0aW9ucyk7XG59O1xuXG5cbi8qKlxuICogR2l2ZW4gYSBxdWVyeSBvYmplY3QsIHJldHVybnMgYSBQcm9taXNlIG9mIGV4ZWN1dGluZyB0aGF0IHF1ZXJ5IHdpdGggYVxuICogZ2l2ZW4gY2xpZW50LlxuICogQHBhcmFtICB7R3JlbWxpbkNsaWVudH0gY2xpZW50IEdyZW1saW4gY2xpZW50IHRvIGV4ZWN1dGUgcXVlcmllcyB3aXRoXG4gKiBAcGFyYW0gIHtPYmplY3R9IHF1ZXJ5ICBBIHF1ZXJ5IE9iamVjdCB7IGdyZW1saW46IFN0cmluZywgYmluZGluZ3M6IE9iamVjdCB9XG4gKiBAcmV0dXJuIHtQcm9taXNlfSBQcm9taXNlIG9mIGV4ZWN1dGlvbiBvZiB0aGUgcXVlcnlcbiAqL1xuY29uc3QgbWFrZVByb21pc2UgPSAoY2xpZW50LCBxdWVyeSkgPT7CoHtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAgY2xpZW50LmV4ZWN1dGUocXVlcnksIChlcnIsIHJlc3VsdHMpID0+XG4gICAgICBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUocmVzdWx0cylcbiAgICApXG4gICk7XG4gIC8vIExldCdzIGF0dGFjaCB0aGUgcXVlcnkgZm9yIGVhc2llciBkZWJ1Z2dpbmdcbiAgcHJvbWlzZS5xdWVyeSA9IHF1ZXJ5O1xuXG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5leHBvcnQgY29uc3QgbWFrZVRlbXBsYXRlVGFnID0gKGNsaWVudCkgPT5cbiAgKC4uLmdyZW1saW5DaHVua3MpID0+IG1ha2VQcm9taXNlKGNsaWVudCwgdGVtcGxhdGUoLi4uZ3JlbWxpbkNodW5rcykpO1xuXG4vKipcbiAqIEdpdmVuIGEgbWFwIG9mIGZ1bmN0aW9ucyByZXR1cm5pbmcgcXVlcnkgb2JqZWN0cywgcmV0dXJucyBhIG1hcFxuICogb2YgZnVuY3Rpb24gcHJvbWlzaW5nIGV4ZWN1dGlvbiBvZiB0aGVzZSBxdWVyaWVzIHdpdGggdGhlIGdpdmVuIEdyZW1saW5cbiAqIGNsaWVudC5cbiAqXG4gKiBAcGFyYW0gIHtHcmVtbGluQ2xpZW50fSBjbGllbnQgR3JlbWxpbiBjbGllbnQgdG8gZXhlY3V0ZSBxdWVyaWVzIHdpdGhcbiAqIEBwYXJhbSAge09iamVjdDxTdHJpbmcsIEZ1bmN0aW9uPE9iamVjdD4+fSBmdW5jdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdDxTdHJpbmcsIEZ1bmN0aW9uPFByb21pc2U8UmVzdWx0cz4+Pn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJpbmRGb3JDbGllbnQgPSAoY2xpZW50LCBmdW5jdGlvbnMpID0+IF8oZnVuY3Rpb25zKVxuICAubWFwVmFsdWVzKChmbikgPT4gKC4uLmFyZ3MpID0+IG1ha2VQcm9taXNlKGNsaWVudCwgZm4oLi4uYXJncykpKVxuICAudmFsdWUoKTtcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNyZWF0ZUNsaWVudCxcbiAgbWFrZVRlbXBsYXRlVGFnLFxuICBiaW5kRm9yQ2xpZW50XG59XG4iXX0= | ||
createClient, | ||
makeTemplateTag, | ||
bindForClient | ||
}; |
@@ -7,4 +7,2 @@ 'use strict'; | ||
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); | ||
var _readableStream = require('readable-stream'); | ||
@@ -16,34 +14,12 @@ | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
class MessageStream extends _readableStream2.default { | ||
constructor(...args) { | ||
super(...args); | ||
} | ||
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } | ||
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } | ||
var MessageStream = function (_ReadableStream) { | ||
_inherits(MessageStream, _ReadableStream); | ||
function MessageStream() { | ||
var _ref; | ||
_classCallCheck(this, MessageStream); | ||
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { | ||
args[_key] = arguments[_key]; | ||
} | ||
return _possibleConstructorReturn(this, (_ref = MessageStream.__proto__ || Object.getPrototypeOf(MessageStream)).call.apply(_ref, [this].concat(args))); | ||
_read() { | ||
this._paused = false; | ||
} | ||
} | ||
_createClass(MessageStream, [{ | ||
key: '_read', | ||
value: function _read() { | ||
this._paused = false; | ||
} | ||
}]); | ||
return MessageStream; | ||
}(_readableStream2.default); | ||
exports.default = MessageStream; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9NZXNzYWdlU3RyZWFtLmpzIl0sIm5hbWVzIjpbIk1lc3NhZ2VTdHJlYW0iLCJhcmdzIiwiX3BhdXNlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7O0lBR01BLGE7OztBQUNKLDJCQUFxQjtBQUFBOztBQUFBOztBQUFBLHNDQUFOQyxJQUFNO0FBQU5BLFVBQU07QUFBQTs7QUFBQSxvSkFDVkEsSUFEVTtBQUVwQjs7Ozs0QkFFTztBQUNOLFdBQUtDLE9BQUwsR0FBZSxLQUFmO0FBQ0Q7Ozs7OztrQkFHWUYsYSIsImZpbGUiOiJNZXNzYWdlU3RyZWFtLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWRhYmxlU3RyZWFtIGZyb20gJ3JlYWRhYmxlLXN0cmVhbSc7XG5cblxuY2xhc3MgTWVzc2FnZVN0cmVhbSBleHRlbmRzIFJlYWRhYmxlU3RyZWFtIHtcbiAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgIHN1cGVyKC4uLmFyZ3MpXG4gIH1cblxuICBfcmVhZCgpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXNzYWdlU3RyZWFtO1xuIl19 | ||
exports.default = MessageStream; |
@@ -27,21 +27,15 @@ 'use strict'; | ||
*/ | ||
function buildQueryFromSignature() { | ||
var rawScript = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; | ||
var rawBindings = arguments[1]; | ||
var _rawScript$gremlin = rawScript.gremlin, | ||
gremlin = _rawScript$gremlin === undefined ? rawScript : _rawScript$gremlin, | ||
_rawScript$bindings = rawScript.bindings, | ||
bindings = _rawScript$bindings === undefined ? rawBindings : _rawScript$bindings; | ||
function buildQueryFromSignature(rawScript = '', rawBindings) { | ||
const { | ||
gremlin = rawScript, | ||
bindings = rawBindings | ||
} = rawScript; | ||
return { | ||
gremlin: gremlin, | ||
gremlin, | ||
// Remap 'undefined' bindings as 'null' values that would otherwise | ||
// result in missing/unbound variables in the Gremlin script execution | ||
// context. | ||
bindings: _lodash2.default.mapValues(_extends({}, bindings, rawBindings), function (value) { | ||
return _lodash2.default.isUndefined(value) ? null : value; | ||
}) | ||
bindings: _lodash2.default.mapValues(_extends({}, bindings, rawBindings), value => _lodash2.default.isUndefined(value) ? null : value) | ||
}; | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy5qcyJdLCJuYW1lcyI6WyJidWlsZFF1ZXJ5RnJvbVNpZ25hdHVyZSIsInJhd1NjcmlwdCIsInJhd0JpbmRpbmdzIiwiZ3JlbWxpbiIsImJpbmRpbmdzIiwibWFwVmFsdWVzIiwidmFsdWUiLCJpc1VuZGVmaW5lZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7UUFZZ0JBLHVCLEdBQUFBLHVCOztBQVpoQjs7Ozs7O0FBRUE7Ozs7Ozs7Ozs7QUFVTyxTQUFTQSx1QkFBVCxHQUE4RDtBQUFBLE1BQTdCQyxTQUE2Qix1RUFBakIsRUFBaUI7QUFBQSxNQUFiQyxXQUFhO0FBQUEsMkJBSS9ERCxTQUorRCxDQUVqRUUsT0FGaUU7QUFBQSxNQUVqRUEsT0FGaUUsc0NBRXZERixTQUZ1RDtBQUFBLDRCQUkvREEsU0FKK0QsQ0FHakVHLFFBSGlFO0FBQUEsTUFHakVBLFFBSGlFLHVDQUd0REYsV0FIc0Q7OztBQU1uRSxTQUFPO0FBQ0xDLG9CQURLO0FBRUw7QUFDQTtBQUNBO0FBQ0FDLGNBQVUsaUJBQUVDLFNBQUYsY0FBaUJELFFBQWpCLEVBQThCRixXQUE5QixHQUE2QyxVQUFDSSxLQUFEO0FBQUEsYUFBVyxpQkFBRUMsV0FBRixDQUFjRCxLQUFkLElBQXVCLElBQXZCLEdBQThCQSxLQUF6QztBQUFBLEtBQTdDO0FBTEwsR0FBUDtBQU9EIiwiZmlsZSI6InV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBHaXZlbiBvcHRpb25hbCBhbmQgcG9seW1vcnBoaWMgYXJndW1lbnRzLCByZXR1cm4gYW4gb2JqZWN0IHdpdGggYSByYXdcbiAqICdncmVtbGluJyBzdHJpbmcgYW5kIG9wdGlvbmFsICdiaW5kaW5ncycgb2JqZWN0LlxuICogV2hlbiBzdXBwbHlpbmcgYSBxdWVyeSBvYmplY3QgYXMgZmlyc3QgcGFyYW1ldGVyLCBhbnkgYmluZGluZ3Mgc3VwcGxpZWRcbiAqIGFzIHRoZSBsYXN0IHBhcmFtZXRlciB3aWxsIGJlIHNoYWxsb3ctbWVyZ2VkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdHxGdW5jdGlvbn0gcmF3U2NyaXB0XG4gKiBAcGFyYW0ge09iamVjdH0gcmF3QmluZGluZ3NcbiAqIEByZXR1cm4ge09iamVjdH06IHsgZ3JlbWxpbjxTdHJpbmc+LCBiaW5kaW5nczxPYmplY3Q+IH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUXVlcnlGcm9tU2lnbmF0dXJlKHJhd1NjcmlwdCA9ICcnLCByYXdCaW5kaW5ncykge1xuICBjb25zdCB7XG4gICAgZ3JlbWxpbiA9IHJhd1NjcmlwdCxcbiAgICBiaW5kaW5ncyA9IHJhd0JpbmRpbmdzXG4gIH0gPSByYXdTY3JpcHQ7XG5cbiAgcmV0dXJuIHtcbiAgICBncmVtbGluLFxuICAgIC8vIFJlbWFwICd1bmRlZmluZWQnIGJpbmRpbmdzIGFzICdudWxsJyB2YWx1ZXMgdGhhdCB3b3VsZCBvdGhlcndpc2VcbiAgICAvLyByZXN1bHQgaW4gbWlzc2luZy91bmJvdW5kIHZhcmlhYmxlcyBpbiB0aGUgR3JlbWxpbiBzY3JpcHQgZXhlY3V0aW9uXG4gICAgLy8gY29udGV4dC5cbiAgICBiaW5kaW5nczogXy5tYXBWYWx1ZXMoeyAuLi5iaW5kaW5ncywgLi4ucmF3QmluZGluZ3MgfSwgKHZhbHVlKSA9PiBfLmlzVW5kZWZpbmVkKHZhbHVlKSA/IG51bGwgOiB2YWx1ZSlcbiAgfTtcbn1cbiJdfQ== | ||
} |
@@ -7,4 +7,2 @@ 'use strict'; | ||
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); | ||
var _events = require('events'); | ||
@@ -18,79 +16,48 @@ | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
class WebSocketGremlinConnection extends _events.EventEmitter { | ||
constructor({ port, host, path, ssl, rejectUnauthorized }) { | ||
super(); | ||
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } | ||
this.open = false; | ||
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } | ||
const address = `ws${ssl ? 's' : ''}://${host}:${port}${path}`; | ||
const options = { | ||
rejectUnauthorized | ||
}; | ||
var WebSocketGremlinConnection = function (_EventEmitter) { | ||
_inherits(WebSocketGremlinConnection, _EventEmitter); | ||
this.ws = new _ws2.default(address, null, options); | ||
function WebSocketGremlinConnection(_ref) { | ||
var port = _ref.port, | ||
host = _ref.host, | ||
path = _ref.path; | ||
this.ws.onopen = () => this.onOpen(); | ||
this.ws.onerror = err => this.handleError(err); | ||
this.ws.onmessage = message => this.handleMessage(message); | ||
this.ws.onclose = event => this.onClose(event); | ||
this.ws.binaryType = "arraybuffer"; | ||
} | ||
_classCallCheck(this, WebSocketGremlinConnection); | ||
onOpen() { | ||
this.open = true; | ||
this.emit('open'); | ||
} | ||
var _this = _possibleConstructorReturn(this, (WebSocketGremlinConnection.__proto__ || Object.getPrototypeOf(WebSocketGremlinConnection)).call(this)); | ||
handleError(err) { | ||
this.emit('error', err); | ||
} | ||
_this.open = false; | ||
handleMessage(message) { | ||
this.emit('message', message); | ||
} | ||
_this.ws = new _ws2.default('ws://' + host + ':' + port + path); | ||
onClose(event) { | ||
this.open = false; | ||
this.emit('close', event); | ||
} | ||
_this.ws.onopen = function () { | ||
return _this.onOpen(); | ||
}; | ||
_this.ws.onerror = function (err) { | ||
return _this.handleError(err); | ||
}; | ||
_this.ws.onmessage = function (message) { | ||
return _this.handleMessage(message); | ||
}; | ||
_this.ws.onclose = function (event) { | ||
return _this.onClose(event); | ||
}; | ||
_this.ws.binaryType = "arraybuffer"; | ||
return _this; | ||
sendMessage(message) { | ||
this.ws.send(message, { mask: true, binary: true }, err => { | ||
if (err) { | ||
this.handleError(err); | ||
} | ||
}); | ||
} | ||
_createClass(WebSocketGremlinConnection, [{ | ||
key: 'onOpen', | ||
value: function onOpen() { | ||
this.open = true; | ||
this.emit('open'); | ||
} | ||
}, { | ||
key: 'handleError', | ||
value: function handleError(err) { | ||
this.emit('error', err); | ||
} | ||
}, { | ||
key: 'handleMessage', | ||
value: function handleMessage(message) { | ||
this.emit('message', message); | ||
} | ||
}, { | ||
key: 'onClose', | ||
value: function onClose(event) { | ||
this.open = false; | ||
this.emit('close', event); | ||
} | ||
}, { | ||
key: 'sendMessage', | ||
value: function sendMessage(message) { | ||
var _this2 = this; | ||
this.ws.send(message, { mask: true, binary: true }, function (err) { | ||
if (err) { | ||
_this2.handleError(err); | ||
} | ||
}); | ||
} | ||
}]); | ||
return WebSocketGremlinConnection; | ||
}(_events.EventEmitter); | ||
exports.default = WebSocketGremlinConnection; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9XZWJTb2NrZXRHcmVtbGluQ29ubmVjdGlvbi5qcyJdLCJuYW1lcyI6WyJXZWJTb2NrZXRHcmVtbGluQ29ubmVjdGlvbiIsInBvcnQiLCJob3N0IiwicGF0aCIsIm9wZW4iLCJ3cyIsIm9ub3BlbiIsIm9uT3BlbiIsIm9uZXJyb3IiLCJlcnIiLCJoYW5kbGVFcnJvciIsIm9ubWVzc2FnZSIsIm1lc3NhZ2UiLCJoYW5kbGVNZXNzYWdlIiwib25jbG9zZSIsImV2ZW50Iiwib25DbG9zZSIsImJpbmFyeVR5cGUiLCJlbWl0Iiwic2VuZCIsIm1hc2siLCJiaW5hcnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBRUE7Ozs7Ozs7Ozs7OztJQUdxQkEsMEI7OztBQUNuQiw0Q0FBa0M7QUFBQSxRQUFwQkMsSUFBb0IsUUFBcEJBLElBQW9CO0FBQUEsUUFBZEMsSUFBYyxRQUFkQSxJQUFjO0FBQUEsUUFBUkMsSUFBUSxRQUFSQSxJQUFROztBQUFBOztBQUFBOztBQUdoQyxVQUFLQyxJQUFMLEdBQVksS0FBWjs7QUFFQSxVQUFLQyxFQUFMLEdBQVUsMkJBQXNCSCxJQUF0QixTQUE4QkQsSUFBOUIsR0FBcUNFLElBQXJDLENBQVY7O0FBRUEsVUFBS0UsRUFBTCxDQUFRQyxNQUFSLEdBQWlCO0FBQUEsYUFBTSxNQUFLQyxNQUFMLEVBQU47QUFBQSxLQUFqQjtBQUNBLFVBQUtGLEVBQUwsQ0FBUUcsT0FBUixHQUFrQixVQUFDQyxHQUFEO0FBQUEsYUFBUyxNQUFLQyxXQUFMLENBQWlCRCxHQUFqQixDQUFUO0FBQUEsS0FBbEI7QUFDQSxVQUFLSixFQUFMLENBQVFNLFNBQVIsR0FBb0IsVUFBQ0MsT0FBRDtBQUFBLGFBQWEsTUFBS0MsYUFBTCxDQUFtQkQsT0FBbkIsQ0FBYjtBQUFBLEtBQXBCO0FBQ0EsVUFBS1AsRUFBTCxDQUFRUyxPQUFSLEdBQWtCLFVBQUNDLEtBQUQ7QUFBQSxhQUFXLE1BQUtDLE9BQUwsQ0FBYUQsS0FBYixDQUFYO0FBQUEsS0FBbEI7QUFDQSxVQUFLVixFQUFMLENBQVFZLFVBQVIsR0FBcUIsYUFBckI7QUFYZ0M7QUFZakM7Ozs7NkJBRVE7QUFDUCxXQUFLYixJQUFMLEdBQVksSUFBWjtBQUNBLFdBQUtjLElBQUwsQ0FBVSxNQUFWO0FBQ0Q7OztnQ0FFV1QsRyxFQUFLO0FBQ2YsV0FBS1MsSUFBTCxDQUFVLE9BQVYsRUFBbUJULEdBQW5CO0FBQ0Q7OztrQ0FFYUcsTyxFQUFTO0FBQ3JCLFdBQUtNLElBQUwsQ0FBVSxTQUFWLEVBQXFCTixPQUFyQjtBQUNEOzs7NEJBRU9HLEssRUFBTztBQUNiLFdBQUtYLElBQUwsR0FBWSxLQUFaO0FBQ0EsV0FBS2MsSUFBTCxDQUFVLE9BQVYsRUFBbUJILEtBQW5CO0FBQ0Q7OztnQ0FFV0gsTyxFQUFTO0FBQUE7O0FBQ25CLFdBQUtQLEVBQUwsQ0FBUWMsSUFBUixDQUFhUCxPQUFiLEVBQXNCLEVBQUVRLE1BQU0sSUFBUixFQUFjQyxRQUFRLElBQXRCLEVBQXRCLEVBQW9ELFVBQUNaLEdBQUQsRUFBUztBQUMzRCxZQUFJQSxHQUFKLEVBQVM7QUFDUCxpQkFBS0MsV0FBTCxDQUFpQkQsR0FBakI7QUFDRDtBQUNGLE9BSkQ7QUFLRDs7Ozs7O2tCQXZDa0JULDBCIiwiZmlsZSI6IldlYlNvY2tldEdyZW1saW5Db25uZWN0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuaW1wb3J0IFdlYlNvY2tldCBmcm9tICd3cyc7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViU29ja2V0R3JlbWxpbkNvbm5lY3Rpb24gZXh0ZW5kcyBFdmVudEVtaXR0ZXLCoHtcbiAgY29uc3RydWN0b3IoeyBwb3J0LCBob3N0LCBwYXRoIH0pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG5cbiAgICB0aGlzLndzID0gbmV3IFdlYlNvY2tldChgd3M6Ly8ke2hvc3R9OiR7cG9ydH0ke3BhdGh9YCk7XG5cbiAgICB0aGlzLndzLm9ub3BlbiA9ICgpID0+IHRoaXMub25PcGVuKCk7XG4gICAgdGhpcy53cy5vbmVycm9yID0gKGVycikgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuICAgIHRoaXMud3Mub25tZXNzYWdlID0gKG1lc3NhZ2UpID0+IHRoaXMuaGFuZGxlTWVzc2FnZShtZXNzYWdlKTtcbiAgICB0aGlzLndzLm9uY2xvc2UgPSAoZXZlbnQpID0+IHRoaXMub25DbG9zZShldmVudCk7XG4gICAgdGhpcy53cy5iaW5hcnlUeXBlID0gXCJhcnJheWJ1ZmZlclwiO1xuICB9XG5cbiAgb25PcGVuKCkge1xuICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgdGhpcy5lbWl0KCdvcGVuJyk7XG4gIH1cblxuICBoYW5kbGVFcnJvcihlcnIpIHtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxuXG4gIGhhbmRsZU1lc3NhZ2UobWVzc2FnZSkge1xuICAgIHRoaXMuZW1pdCgnbWVzc2FnZScsIG1lc3NhZ2UpO1xuICB9XG5cbiAgb25DbG9zZShldmVudCkge1xuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdCgnY2xvc2UnLCBldmVudCk7XG4gIH1cblxuICBzZW5kTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgdGhpcy53cy5zZW5kKG1lc3NhZ2UsIHsgbWFzazogdHJ1ZSwgYmluYXJ5OiB0cnVlIH0sIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0= | ||
} | ||
exports.default = WebSocketGremlinConnection; |
{ | ||
"name": "gremlin", | ||
"version": "2.4.0", | ||
"version": "2.5.0", | ||
"description": "JavaScript client for TinkerPop3 Gremlin Server", | ||
@@ -15,3 +15,3 @@ "main": "lib/index.js", | ||
"examples:node": "babel-node examples/node-example", | ||
"test:node": "mocha ./test --compilers js:babel-register --recursive --reporter spec", | ||
"test:node": "NODE_TLS_REJECT_UNAUTHORIZED=0 mocha ./test --compilers js:babel-register --recursive --reporter spec", | ||
"test:node:watch": "npm run test:node -- --watch" | ||
@@ -50,2 +50,3 @@ }, | ||
"babel-plugin-transform-async-to-module-method": "^6.5.2", | ||
"babel-plugin-transform-object-rest-spread": "^6.23.0", | ||
"babel-plugin-transform-runtime": "^6.5.2", | ||
@@ -52,0 +53,0 @@ "babel-preset-env": "^1.4.0", |
@@ -51,3 +51,3 @@ [![Build Status](https://travis-ci.org/jbmusso/gremlin-javascript.svg?branch=master)](https://travis-ci.org/jbmusso/gremlin-javascript) [![Coverage Status](https://coveralls.io/repos/github/jbmusso/gremlin-javascript/badge.svg?branch=master)](https://coveralls.io/github/jbmusso/gremlin-javascript?branch=master) [![npm](https://img.shields.io/npm/dt/gremlin.svg)](https://www.npmjs.com/package/gremlin) | ||
The following works with a recent version of Node.js (tested with v7.6.0): | ||
``` | ||
```javascript | ||
import { createClient, statics } from 'gremlin'; | ||
@@ -54,0 +54,0 @@ |
@@ -34,2 +34,4 @@ /*jslint -W079 */ | ||
executeHandler, | ||
ssl: false, | ||
rejectUnauthorized: true, | ||
...options, | ||
@@ -50,11 +52,15 @@ path: path.length && !path.startsWith('/') ? `/${path}` : path | ||
const { ssl, rejectUnauthorized } = this.options; | ||
this.connection = this.createConnection({ | ||
port, | ||
host, | ||
path: this.options.path | ||
path: this.options.path, | ||
ssl, | ||
rejectUnauthorized, | ||
}); | ||
} | ||
createConnection({ port, host, path }) { | ||
const connection = new WebSocketGremlinConnection({ port, host, path }); | ||
createConnection({ port, host, path, ssl, rejectUnauthorized }) { | ||
const connection = new WebSocketGremlinConnection({ port, host, path, ssl, rejectUnauthorized }); | ||
@@ -61,0 +67,0 @@ connection.on('open', () => this.onConnectionOpen()); |
@@ -7,3 +7,3 @@ import { EventEmitter } from 'events'; | ||
export default class WebSocketGremlinConnection extends EventEmitter { | ||
constructor({ port, host, path }) { | ||
constructor({ port, host, path, ssl, rejectUnauthorized }) { | ||
super(); | ||
@@ -13,4 +13,9 @@ | ||
this.ws = new WebSocket(`ws://${host}:${port}${path}`); | ||
const address = `ws${ssl ? 's' : ''}://${host}:${port}${path}`; | ||
const options = { | ||
rejectUnauthorized | ||
}; | ||
this.ws = new WebSocket(address, null, options); | ||
this.ws.onopen = () => this.onOpen(); | ||
@@ -17,0 +22,0 @@ this.ws.onerror = (err) => this.handleError(err); |
Sorry, the diff of this file is not supported yet
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
246502
34
1155