gremlin-helper
Version:
A wrapper around the gremlin client to introduce model validation and other useful functionality to use within a web api.
97 lines • 4.18 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const QueryBuilder_1 = require("./QueryBuilder");
class Client {
constructor(createClient, config) {
this.client = createClient(config.port, config.endpoint, {
"session": false,
"ssl": true,
"user": `/dbs/${config.database}/colls/${config.collection}`,
"password": config.primaryKey
});
}
addEAsync(edge, from, to) {
return __awaiter(this, void 0, void 0, function* () {
const query = new QueryBuilder_1.QueryBuilder().addE(edge, from, to);
const results = yield this.executeAsync(edge, query);
if (results && results.length > 0)
return results[0];
throw new Error('No model returned');
});
}
addVAsync(vertex, obj) {
return __awaiter(this, void 0, void 0, function* () {
const { errors, hasErrors, model } = yield vertex.processAsync(obj);
if (hasErrors)
throw Object.assign({}, errors, { message: 'Error processing model' });
const query = new QueryBuilder_1.QueryBuilder().addV(vertex).properties(model);
const results = yield this.executeAsync(vertex, query);
if (results && results.length > 0)
return results[0];
throw new Error('No model returned');
});
}
updateVAsync(vertex, id, obj) {
return __awaiter(this, void 0, void 0, function* () {
const { errors, hasErrors, model } = yield vertex.processAsync(obj);
if (hasErrors)
throw Object.assign({}, errors, { message: 'Error processing model' });
const query = new QueryBuilder_1.QueryBuilder().updateV(vertex, id).properties(model);
const results = yield this.executeAsync(vertex, query);
if (results && results.length > 0)
return results[0];
throw new Error('No model returned');
});
}
deleteVAsync(vertex, id) {
return __awaiter(this, void 0, void 0, function* () {
const query = new QueryBuilder_1.QueryBuilder().deleteV(vertex, id);
yield this.executeAsync(vertex, query);
});
}
getVAsync(vertex, id) {
return __awaiter(this, void 0, void 0, function* () {
const query = new QueryBuilder_1.QueryBuilder().getV(vertex, id);
const results = yield this.executeAsync(vertex, query);
if (results && results.length > 0)
return results[0];
throw new Error('No model returned');
});
}
executeAsync(model, queryBuilder) {
return new Promise((resolve, reject) => {
this.client.execute(queryBuilder.query + queryBuilder.postfix, queryBuilder.props, (error, results) => {
if (error)
return reject(error);
return resolve(results.map((result) => transformResult(model.schema, result)));
});
});
}
}
exports.Client = Client;
function transformResult(schema, value) {
if (!value || schema.label !== value.label)
return null;
const result = {
id: value.id,
_type: value.type,
_label: value.label
};
if (schema.props) {
for (const prop in schema.props) {
if (prop in value.properties) {
result[prop] = value.properties[prop][0].value;
}
}
}
return result;
}
//# sourceMappingURL=Client.js.map