blob: b0e91f2eb2dcbc10f82fce2bad35e916ed47ade8 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/**
* @author Jorge Bay Gondra
*/
'use strict';
const { Traversal } = require('./traversal');
const remote = require('../driver/remote-connection');
const utils = require('../utils');
const Bytecode = require('./bytecode');
const { TraversalStrategies, VertexProgramStrategy } = require('./traversal-strategy');
/**
* Represents the primary DSL of the Gremlin traversal machine.
*/
class GraphTraversalSource {
/**
* Creates a new instance of {@link GraphTraversalSource}.
* @param {Graph} graph
* @param {TraversalStrategies} traversalStrategies
* @param {Bytecode} [bytecode]
* @param {Function} [graphTraversalSourceClass] Optional {@link GraphTraversalSource} constructor.
* @param {Function} [graphTraversalClass] Optional {@link GraphTraversal} constructor.
*/
constructor(graph, traversalStrategies, bytecode, graphTraversalSourceClass, graphTraversalClass) {
this.graph = graph;
this.traversalStrategies = traversalStrategies;
this.bytecode = bytecode || new Bytecode();
this.graphTraversalSourceClass = graphTraversalSourceClass || GraphTraversalSource;
this.graphTraversalClass = graphTraversalClass || GraphTraversal;
}
/**
* @param remoteConnection
* @returns {GraphTraversalSource}
*/
withRemote(remoteConnection) {
const traversalStrategy = new TraversalStrategies(this.traversalStrategies);
traversalStrategy.addStrategy(new remote.RemoteStrategy(remoteConnection));
return new this.graphTraversalSourceClass(this.graph, traversalStrategy, new Bytecode(this.bytecode), this.graphTraversalSourceClass, this.graphTraversalClass);
}
/**
* @param graphComputer
* @param workers
* @param result
* @param persist
* @param vertices
* @param edges
* @param configuration
* @returns {GraphTraversalSource}
*/
withComputer(graphComputer, workers, result, persist, vertices, edges, configuration) {
return this.withStrategies(new VertexProgramStrategy({graphComputer: graphComputer,
workers: workers, result: result, persist: persist, vertices: vertices, edges: edges,
configuration: configuration}));
}
/**
* Returns the string representation of the GraphTraversalSource.
* @returns {string}
*/
toString() {
return 'graphtraversalsource[' + this.graph.toString() + ']';
}
/**
* Graph Traversal Source with method.
* @param {...Object} args
* @returns {GraphTraversalSource}
*/
with_(...args) {
const b = new Bytecode(this.bytecode).addSource('with', args);
return new this.graphTraversalSourceClass(this.graph, new TraversalStrategies(this.traversalStrategies), b, this.graphTraversalSourceClass, this.graphTraversalClass);
}
/**
* Graph Traversal Source withBulk method.
* @param {...Object} args
* @returns {GraphTraversalSource}
*/
withBulk(...args) {
const b = new Bytecode(this.bytecode).addSource('withBulk', args);
return new this.graphTraversalSourceClass(this.graph, new TraversalStrategies(this.traversalStrategies), b, this.graphTraversalSourceClass, this.graphTraversalClass);
}
/**
* Graph Traversal Source withPath method.
* @param {...Object} args
* @returns {GraphTraversalSource}
*/
withPath(...args) {
const b = new Bytecode(this.bytecode).addSource('withPath', args);
return new this.graphTraversalSourceClass(this.graph, new TraversalStrategies(this.traversalStrategies), b, this.graphTraversalSourceClass, this.graphTraversalClass);
}
/**
* Graph Traversal Source withSack method.
* @param {...Object} args
* @returns {GraphTraversalSource}
*/
withSack(...args) {
const b = new Bytecode(this.bytecode).addSource('withSack', args);
return new this.graphTraversalSourceClass(this.graph, new TraversalStrategies(this.traversalStrategies), b, this.graphTraversalSourceClass, this.graphTraversalClass);
}
/**
* Graph Traversal Source withSideEffect method.
* @param {...Object} args
* @returns {GraphTraversalSource}
*/
withSideEffect(...args) {
const b = new Bytecode(this.bytecode).addSource('withSideEffect', args);
return new this.graphTraversalSourceClass(this.graph, new TraversalStrategies(this.traversalStrategies), b, this.graphTraversalSourceClass, this.graphTraversalClass);
}
/**
* Graph Traversal Source withStrategies method.
* @param {...Object} args
* @returns {GraphTraversalSource}
*/
withStrategies(...args) {
const b = new Bytecode(this.bytecode).addSource('withStrategies', args);
return new this.graphTraversalSourceClass(this.graph, new TraversalStrategies(this.traversalStrategies), b, this.graphTraversalSourceClass, this.graphTraversalClass);
}
/**
* Graph Traversal Source withoutStrategies method.
* @param {...Object} args
* @returns {GraphTraversalSource}
*/
withoutStrategies(...args) {
const b = new Bytecode(this.bytecode).addSource('withoutStrategies', args);
return new this.graphTraversalSourceClass(this.graph, new TraversalStrategies(this.traversalStrategies), b, this.graphTraversalSourceClass, this.graphTraversalClass);
}
/**
* E GraphTraversalSource step method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
E(...args) {
const b = new Bytecode(this.bytecode).addStep('E', args);
return new this.graphTraversalClass(this.graph, new TraversalStrategies(this.traversalStrategies), b);
}
/**
* V GraphTraversalSource step method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
V(...args) {
const b = new Bytecode(this.bytecode).addStep('V', args);
return new this.graphTraversalClass(this.graph, new TraversalStrategies(this.traversalStrategies), b);
}
/**
* addE GraphTraversalSource step method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
addE(...args) {
const b = new Bytecode(this.bytecode).addStep('addE', args);
return new this.graphTraversalClass(this.graph, new TraversalStrategies(this.traversalStrategies), b);
}
/**
* addV GraphTraversalSource step method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
addV(...args) {
const b = new Bytecode(this.bytecode).addStep('addV', args);
return new this.graphTraversalClass(this.graph, new TraversalStrategies(this.traversalStrategies), b);
}
/**
* inject GraphTraversalSource step method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
inject(...args) {
const b = new Bytecode(this.bytecode).addStep('inject', args);
return new this.graphTraversalClass(this.graph, new TraversalStrategies(this.traversalStrategies), b);
}
/**
* io GraphTraversalSource step method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
io(...args) {
const b = new Bytecode(this.bytecode).addStep('io', args);
return new this.graphTraversalClass(this.graph, new TraversalStrategies(this.traversalStrategies), b);
}
}
/**
* Represents a graph traversal.
*/
class GraphTraversal extends Traversal {
constructor(graph, traversalStrategies, bytecode) {
super(graph, traversalStrategies, bytecode);
}
/**
* Copy a traversal so as to reset and re-use it.
*/
clone() {
return new GraphTraversal(this.graph, this.traversalStrategies, this.getBytecode());
}
/**
* Graph traversal V method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
V(...args) {
this.bytecode.addStep('V', args);
return this;
}
/**
* Graph traversal addE method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
addE(...args) {
this.bytecode.addStep('addE', args);
return this;
}
/**
* Graph traversal addV method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
addV(...args) {
this.bytecode.addStep('addV', args);
return this;
}
/**
* Graph traversal aggregate method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
aggregate(...args) {
this.bytecode.addStep('aggregate', args);
return this;
}
/**
* Graph traversal and method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
and(...args) {
this.bytecode.addStep('and', args);
return this;
}
/**
* Graph traversal as method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
as(...args) {
this.bytecode.addStep('as', args);
return this;
}
/**
* Graph traversal barrier method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
barrier(...args) {
this.bytecode.addStep('barrier', args);
return this;
}
/**
* Graph traversal both method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
both(...args) {
this.bytecode.addStep('both', args);
return this;
}
/**
* Graph traversal bothE method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
bothE(...args) {
this.bytecode.addStep('bothE', args);
return this;
}
/**
* Graph traversal bothV method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
bothV(...args) {
this.bytecode.addStep('bothV', args);
return this;
}
/**
* Graph traversal branch method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
branch(...args) {
this.bytecode.addStep('branch', args);
return this;
}
/**
* Graph traversal by method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
by(...args) {
this.bytecode.addStep('by', args);
return this;
}
/**
* Graph traversal cap method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
cap(...args) {
this.bytecode.addStep('cap', args);
return this;
}
/**
* Graph traversal choose method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
choose(...args) {
this.bytecode.addStep('choose', args);
return this;
}
/**
* Graph traversal coalesce method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
coalesce(...args) {
this.bytecode.addStep('coalesce', args);
return this;
}
/**
* Graph traversal coin method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
coin(...args) {
this.bytecode.addStep('coin', args);
return this;
}
/**
* Graph traversal connectedComponent method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
connectedComponent(...args) {
this.bytecode.addStep('connectedComponent', args);
return this;
}
/**
* Graph traversal constant method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
constant(...args) {
this.bytecode.addStep('constant', args);
return this;
}
/**
* Graph traversal count method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
count(...args) {
this.bytecode.addStep('count', args);
return this;
}
/**
* Graph traversal cyclicPath method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
cyclicPath(...args) {
this.bytecode.addStep('cyclicPath', args);
return this;
}
/**
* Graph traversal dedup method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
dedup(...args) {
this.bytecode.addStep('dedup', args);
return this;
}
/**
* Graph traversal drop method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
drop(...args) {
this.bytecode.addStep('drop', args);
return this;
}
/**
* Graph traversal elementMap method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
elementMap(...args) {
this.bytecode.addStep('elementMap', args);
return this;
}
/**
* Graph traversal emit method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
emit(...args) {
this.bytecode.addStep('emit', args);
return this;
}
/**
* Graph traversal filter method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
filter(...args) {
this.bytecode.addStep('filter', args);
return this;
}
/**
* Graph traversal flatMap method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
flatMap(...args) {
this.bytecode.addStep('flatMap', args);
return this;
}
/**
* Graph traversal fold method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
fold(...args) {
this.bytecode.addStep('fold', args);
return this;
}
/**
* Graph traversal from method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
from_(...args) {
this.bytecode.addStep('from', args);
return this;
}
/**
* Graph traversal group method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
group(...args) {
this.bytecode.addStep('group', args);
return this;
}
/**
* Graph traversal groupCount method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
groupCount(...args) {
this.bytecode.addStep('groupCount', args);
return this;
}
/**
* Graph traversal has method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
has(...args) {
this.bytecode.addStep('has', args);
return this;
}
/**
* Graph traversal hasId method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
hasId(...args) {
this.bytecode.addStep('hasId', args);
return this;
}
/**
* Graph traversal hasKey method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
hasKey(...args) {
this.bytecode.addStep('hasKey', args);
return this;
}
/**
* Graph traversal hasLabel method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
hasLabel(...args) {
this.bytecode.addStep('hasLabel', args);
return this;
}
/**
* Graph traversal hasNot method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
hasNot(...args) {
this.bytecode.addStep('hasNot', args);
return this;
}
/**
* Graph traversal hasValue method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
hasValue(...args) {
this.bytecode.addStep('hasValue', args);
return this;
}
/**
* Graph traversal id method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
id(...args) {
this.bytecode.addStep('id', args);
return this;
}
/**
* Graph traversal identity method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
identity(...args) {
this.bytecode.addStep('identity', args);
return this;
}
/**
* Graph traversal in method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
in_(...args) {
this.bytecode.addStep('in', args);
return this;
}
/**
* Graph traversal inE method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
inE(...args) {
this.bytecode.addStep('inE', args);
return this;
}
/**
* Graph traversal inV method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
inV(...args) {
this.bytecode.addStep('inV', args);
return this;
}
/**
* Graph traversal index method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
index(...args) {
this.bytecode.addStep('index', args);
return this;
}
/**
* Graph traversal inject method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
inject(...args) {
this.bytecode.addStep('inject', args);
return this;
}
/**
* Graph traversal is method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
is(...args) {
this.bytecode.addStep('is', args);
return this;
}
/**
* Graph traversal key method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
key(...args) {
this.bytecode.addStep('key', args);
return this;
}
/**
* Graph traversal label method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
label(...args) {
this.bytecode.addStep('label', args);
return this;
}
/**
* Graph traversal limit method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
limit(...args) {
this.bytecode.addStep('limit', args);
return this;
}
/**
* Graph traversal local method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
local(...args) {
this.bytecode.addStep('local', args);
return this;
}
/**
* Graph traversal loops method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
loops(...args) {
this.bytecode.addStep('loops', args);
return this;
}
/**
* Graph traversal map method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
map(...args) {
this.bytecode.addStep('map', args);
return this;
}
/**
* Graph traversal match method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
match(...args) {
this.bytecode.addStep('match', args);
return this;
}
/**
* Graph traversal math method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
math(...args) {
this.bytecode.addStep('math', args);
return this;
}
/**
* Graph traversal max method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
max(...args) {
this.bytecode.addStep('max', args);
return this;
}
/**
* Graph traversal mean method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
mean(...args) {
this.bytecode.addStep('mean', args);
return this;
}
/**
* Graph traversal min method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
min(...args) {
this.bytecode.addStep('min', args);
return this;
}
/**
* Graph traversal not method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
not(...args) {
this.bytecode.addStep('not', args);
return this;
}
/**
* Graph traversal option method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
option(...args) {
this.bytecode.addStep('option', args);
return this;
}
/**
* Graph traversal optional method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
optional(...args) {
this.bytecode.addStep('optional', args);
return this;
}
/**
* Graph traversal or method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
or(...args) {
this.bytecode.addStep('or', args);
return this;
}
/**
* Graph traversal order method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
order(...args) {
this.bytecode.addStep('order', args);
return this;
}
/**
* Graph traversal otherV method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
otherV(...args) {
this.bytecode.addStep('otherV', args);
return this;
}
/**
* Graph traversal out method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
out(...args) {
this.bytecode.addStep('out', args);
return this;
}
/**
* Graph traversal outE method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
outE(...args) {
this.bytecode.addStep('outE', args);
return this;
}
/**
* Graph traversal outV method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
outV(...args) {
this.bytecode.addStep('outV', args);
return this;
}
/**
* Graph traversal pageRank method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
pageRank(...args) {
this.bytecode.addStep('pageRank', args);
return this;
}
/**
* Graph traversal path method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
path(...args) {
this.bytecode.addStep('path', args);
return this;
}
/**
* Graph traversal peerPressure method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
peerPressure(...args) {
this.bytecode.addStep('peerPressure', args);
return this;
}
/**
* Graph traversal profile method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
profile(...args) {
this.bytecode.addStep('profile', args);
return this;
}
/**
* Graph traversal program method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
program(...args) {
this.bytecode.addStep('program', args);
return this;
}
/**
* Graph traversal project method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
project(...args) {
this.bytecode.addStep('project', args);
return this;
}
/**
* Graph traversal properties method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
properties(...args) {
this.bytecode.addStep('properties', args);
return this;
}
/**
* Graph traversal property method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
property(...args) {
this.bytecode.addStep('property', args);
return this;
}
/**
* Graph traversal propertyMap method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
propertyMap(...args) {
this.bytecode.addStep('propertyMap', args);
return this;
}
/**
* Graph traversal range method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
range(...args) {
this.bytecode.addStep('range', args);
return this;
}
/**
* Graph traversal read method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
read(...args) {
this.bytecode.addStep('read', args);
return this;
}
/**
* Graph traversal repeat method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
repeat(...args) {
this.bytecode.addStep('repeat', args);
return this;
}
/**
* Graph traversal sack method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
sack(...args) {
this.bytecode.addStep('sack', args);
return this;
}
/**
* Graph traversal sample method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
sample(...args) {
this.bytecode.addStep('sample', args);
return this;
}
/**
* Graph traversal select method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
select(...args) {
this.bytecode.addStep('select', args);
return this;
}
/**
* Graph traversal shortestPath method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
shortestPath(...args) {
this.bytecode.addStep('shortestPath', args);
return this;
}
/**
* Graph traversal sideEffect method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
sideEffect(...args) {
this.bytecode.addStep('sideEffect', args);
return this;
}
/**
* Graph traversal simplePath method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
simplePath(...args) {
this.bytecode.addStep('simplePath', args);
return this;
}
/**
* Graph traversal skip method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
skip(...args) {
this.bytecode.addStep('skip', args);
return this;
}
/**
* Graph traversal store method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
store(...args) {
this.bytecode.addStep('store', args);
return this;
}
/**
* Graph traversal subgraph method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
subgraph(...args) {
this.bytecode.addStep('subgraph', args);
return this;
}
/**
* Graph traversal sum method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
sum(...args) {
this.bytecode.addStep('sum', args);
return this;
}
/**
* Graph traversal tail method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
tail(...args) {
this.bytecode.addStep('tail', args);
return this;
}
/**
* Graph traversal timeLimit method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
timeLimit(...args) {
this.bytecode.addStep('timeLimit', args);
return this;
}
/**
* Graph traversal times method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
times(...args) {
this.bytecode.addStep('times', args);
return this;
}
/**
* Graph traversal to method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
to(...args) {
this.bytecode.addStep('to', args);
return this;
}
/**
* Graph traversal toE method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
toE(...args) {
this.bytecode.addStep('toE', args);
return this;
}
/**
* Graph traversal toV method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
toV(...args) {
this.bytecode.addStep('toV', args);
return this;
}
/**
* Graph traversal tree method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
tree(...args) {
this.bytecode.addStep('tree', args);
return this;
}
/**
* Graph traversal unfold method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
unfold(...args) {
this.bytecode.addStep('unfold', args);
return this;
}
/**
* Graph traversal union method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
union(...args) {
this.bytecode.addStep('union', args);
return this;
}
/**
* Graph traversal until method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
until(...args) {
this.bytecode.addStep('until', args);
return this;
}
/**
* Graph traversal value method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
value(...args) {
this.bytecode.addStep('value', args);
return this;
}
/**
* Graph traversal valueMap method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
valueMap(...args) {
this.bytecode.addStep('valueMap', args);
return this;
}
/**
* Graph traversal values method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
values(...args) {
this.bytecode.addStep('values', args);
return this;
}
/**
* Graph traversal where method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
where(...args) {
this.bytecode.addStep('where', args);
return this;
}
/**
* Graph traversal with method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
with_(...args) {
this.bytecode.addStep('with', args);
return this;
}
/**
* Graph traversal write method.
* @param {...Object} args
* @returns {GraphTraversal}
*/
write(...args) {
this.bytecode.addStep('write', args);
return this;
}
}
function callOnEmptyTraversal(fnName, args) {
const g = new GraphTraversal(null, null, new Bytecode());
return g[fnName].apply(g, args);
}
/**
* Contains the static method definitions
* @type {Object}
*/
const statics = {
V: (...args) => callOnEmptyTraversal('V', args),
addE: (...args) => callOnEmptyTraversal('addE', args),
addV: (...args) => callOnEmptyTraversal('addV', args),
aggregate: (...args) => callOnEmptyTraversal('aggregate', args),
and: (...args) => callOnEmptyTraversal('and', args),
as: (...args) => callOnEmptyTraversal('as', args),
barrier: (...args) => callOnEmptyTraversal('barrier', args),
both: (...args) => callOnEmptyTraversal('both', args),
bothE: (...args) => callOnEmptyTraversal('bothE', args),
bothV: (...args) => callOnEmptyTraversal('bothV', args),
branch: (...args) => callOnEmptyTraversal('branch', args),
cap: (...args) => callOnEmptyTraversal('cap', args),
choose: (...args) => callOnEmptyTraversal('choose', args),
coalesce: (...args) => callOnEmptyTraversal('coalesce', args),
coin: (...args) => callOnEmptyTraversal('coin', args),
constant: (...args) => callOnEmptyTraversal('constant', args),
count: (...args) => callOnEmptyTraversal('count', args),
cyclicPath: (...args) => callOnEmptyTraversal('cyclicPath', args),
dedup: (...args) => callOnEmptyTraversal('dedup', args),
drop: (...args) => callOnEmptyTraversal('drop', args),
elementMap: (...args) => callOnEmptyTraversal('elementMap', args),
emit: (...args) => callOnEmptyTraversal('emit', args),
filter: (...args) => callOnEmptyTraversal('filter', args),
flatMap: (...args) => callOnEmptyTraversal('flatMap', args),
fold: (...args) => callOnEmptyTraversal('fold', args),
group: (...args) => callOnEmptyTraversal('group', args),
groupCount: (...args) => callOnEmptyTraversal('groupCount', args),
has: (...args) => callOnEmptyTraversal('has', args),
hasId: (...args) => callOnEmptyTraversal('hasId', args),
hasKey: (...args) => callOnEmptyTraversal('hasKey', args),
hasLabel: (...args) => callOnEmptyTraversal('hasLabel', args),
hasNot: (...args) => callOnEmptyTraversal('hasNot', args),
hasValue: (...args) => callOnEmptyTraversal('hasValue', args),
id: (...args) => callOnEmptyTraversal('id', args),
identity: (...args) => callOnEmptyTraversal('identity', args),
in_: (...args) => callOnEmptyTraversal('in_', args),
inE: (...args) => callOnEmptyTraversal('inE', args),
inV: (...args) => callOnEmptyTraversal('inV', args),
index: (...args) => callOnEmptyTraversal('index', args),
inject: (...args) => callOnEmptyTraversal('inject', args),
is: (...args) => callOnEmptyTraversal('is', args),
key: (...args) => callOnEmptyTraversal('key', args),
label: (...args) => callOnEmptyTraversal('label', args),
limit: (...args) => callOnEmptyTraversal('limit', args),
local: (...args) => callOnEmptyTraversal('local', args),
loops: (...args) => callOnEmptyTraversal('loops', args),
map: (...args) => callOnEmptyTraversal('map', args),
match: (...args) => callOnEmptyTraversal('match', args),
math: (...args) => callOnEmptyTraversal('math', args),
max: (...args) => callOnEmptyTraversal('max', args),
mean: (...args) => callOnEmptyTraversal('mean', args),
min: (...args) => callOnEmptyTraversal('min', args),
not: (...args) => callOnEmptyTraversal('not', args),
optional: (...args) => callOnEmptyTraversal('optional', args),
or: (...args) => callOnEmptyTraversal('or', args),
order: (...args) => callOnEmptyTraversal('order', args),
otherV: (...args) => callOnEmptyTraversal('otherV', args),
out: (...args) => callOnEmptyTraversal('out', args),
outE: (...args) => callOnEmptyTraversal('outE', args),
outV: (...args) => callOnEmptyTraversal('outV', args),
path: (...args) => callOnEmptyTraversal('path', args),
project: (...args) => callOnEmptyTraversal('project', args),
properties: (...args) => callOnEmptyTraversal('properties', args),
property: (...args) => callOnEmptyTraversal('property', args),
propertyMap: (...args) => callOnEmptyTraversal('propertyMap', args),
range: (...args) => callOnEmptyTraversal('range', args),
repeat: (...args) => callOnEmptyTraversal('repeat', args),
sack: (...args) => callOnEmptyTraversal('sack', args),
sample: (...args) => callOnEmptyTraversal('sample', args),
select: (...args) => callOnEmptyTraversal('select', args),
sideEffect: (...args) => callOnEmptyTraversal('sideEffect', args),
simplePath: (...args) => callOnEmptyTraversal('simplePath', args),
skip: (...args) => callOnEmptyTraversal('skip', args),
store: (...args) => callOnEmptyTraversal('store', args),
subgraph: (...args) => callOnEmptyTraversal('subgraph', args),
sum: (...args) => callOnEmptyTraversal('sum', args),
tail: (...args) => callOnEmptyTraversal('tail', args),
timeLimit: (...args) => callOnEmptyTraversal('timeLimit', args),
times: (...args) => callOnEmptyTraversal('times', args),
to: (...args) => callOnEmptyTraversal('to', args),
toE: (...args) => callOnEmptyTraversal('toE', args),
toV: (...args) => callOnEmptyTraversal('toV', args),
tree: (...args) => callOnEmptyTraversal('tree', args),
unfold: (...args) => callOnEmptyTraversal('unfold', args),
union: (...args) => callOnEmptyTraversal('union', args),
until: (...args) => callOnEmptyTraversal('until', args),
value: (...args) => callOnEmptyTraversal('value', args),
valueMap: (...args) => callOnEmptyTraversal('valueMap', args),
values: (...args) => callOnEmptyTraversal('values', args),
where: (...args) => callOnEmptyTraversal('where', args)
};
module.exports = {
GraphTraversal,
GraphTraversalSource,
statics
};