zer
Version:
Generate Gremlin queries by chaining JavaScript function calls
91 lines (71 loc) • 1.69 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Chain = exports.Arguments = exports.ChainMember = undefined;
exports.createChain = createChain;
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class ChainMember {}
exports.ChainMember = ChainMember;
class ChainStart extends ChainMember {
constructor(name) {
super();
this.name = name;
this.type = 'CHAIN_START';
}
}
class PropertyAccessor extends ChainMember {
constructor() {
super();
this.type = 'PROPERTY_ACCESSOR';
}
}
class Step extends ChainMember {
constructor(name) {
super();
this.name = name;
this.type = 'STEP';
}
}
class Arguments extends ChainMember {
constructor(params = []) {
super();
this.params = params;
this.type = 'ARGUMENTS';
}
}
exports.Arguments = Arguments;
class Chain {
constructor() {
this.members = [];
}
startWith(identifierName) {
this.members.push(new ChainStart(identifierName));
return this;
}
addStep(name) {
this.members.push(new Step(name));
return this;
}
addArguments(...args) {
this.members.push(new Arguments(args));
return this;
}
append(chain) {
this.members = [...this.members, ...chain.members];
return this;
}
composeWith(chain) {
this.members = [...this.members, new PropertyAccessor(), ...chain.members];
return this;
}
__repr__() {
return this.members;
}
}
exports.Chain = Chain; // TODO: missing name argument here?
function createChain() {
return new Chain();
}