gremlin 3.5.1 → 3.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/.eslintrc.js +155 -0
  2. package/.prettierrc.js +29 -0
  3. package/Gruntfile.js +15 -16
  4. package/doc/AnonymousTraversalSource.html +5 -5
  5. package/doc/Authenticator.html +2 -2
  6. package/doc/Bytecode.html +7 -7
  7. package/doc/Client.html +138 -64
  8. package/doc/Connection.html +93 -9
  9. package/doc/DriverRemoteConnection.html +11 -11
  10. package/doc/EdgeLabelVerificationStrategy.html +3 -3
  11. package/doc/Graph.html +2 -2
  12. package/doc/GraphSON2Reader.html +4 -4
  13. package/doc/GraphSON2Writer.html +3 -3
  14. package/doc/GraphSON3Reader.html +3 -3
  15. package/doc/GraphSON3Writer.html +3 -3
  16. package/doc/GraphTraversal.html +107 -107
  17. package/doc/GraphTraversalSource.html +19 -19
  18. package/doc/HaltedTraverserStrategy.html +3 -3
  19. package/doc/MatchAlgorithmStrategy.html +3 -3
  20. package/doc/P.html +13 -13
  21. package/doc/PartitionStrategy.html +3 -3
  22. package/doc/Path.html +2 -2
  23. package/doc/PlainTextSaslAuthenticator.html +2 -2
  24. package/doc/ProductiveByStrategy.html +288 -0
  25. package/doc/RemoteConnection.html +10 -10
  26. package/doc/RemoteStrategy.html +4 -4
  27. package/doc/RemoteTraversal.html +3 -3
  28. package/doc/ReservedKeysVerificationStrategy.html +3 -3
  29. package/doc/ResponseError.html +2 -2
  30. package/doc/ResultSet.html +7 -7
  31. package/doc/SaslAuthenticator.html +2 -2
  32. package/doc/SaslMechanismBase.html +2 -2
  33. package/doc/SaslMechanismPlain.html +6 -6
  34. package/doc/SeedStrategy.html +288 -0
  35. package/doc/SubgraphStrategy.html +3 -3
  36. package/doc/TextP.html +10 -10
  37. package/doc/Transaction.html +6 -6
  38. package/doc/Translator.html +198 -4
  39. package/doc/TraversalStrategies.html +5 -5
  40. package/doc/TraversalStrategy.html +3 -3
  41. package/doc/TypeSerializer.html +2 -2
  42. package/doc/driver_auth_authenticator.js.html +4 -4
  43. package/doc/driver_auth_mechanisms_sasl-mechanism-base.js.html +3 -3
  44. package/doc/driver_auth_mechanisms_sasl-mechanism-plain.js.html +26 -17
  45. package/doc/driver_auth_plain-text-sasl-authenticator.js.html +7 -7
  46. package/doc/driver_auth_sasl-authenticator.js.html +3 -3
  47. package/doc/driver_client.js.html +73 -23
  48. package/doc/driver_connection.js.html +134 -92
  49. package/doc/driver_driver-remote-connection.js.html +12 -11
  50. package/doc/driver_remote-connection.js.html +4 -5
  51. package/doc/driver_response-error.js.html +5 -4
  52. package/doc/driver_result-set.js.html +4 -4
  53. package/doc/global.html +264 -3
  54. package/doc/index.html +2 -2
  55. package/doc/module.exports.html +301 -0
  56. package/doc/process_anonymous-traversal.js.html +4 -4
  57. package/doc/process_bytecode.js.html +11 -9
  58. package/doc/process_graph-traversal.js.html +194 -143
  59. package/doc/process_transaction.js.html +16 -9
  60. package/doc/process_translator.js.html +53 -37
  61. package/doc/process_traversal-strategy.js.html +70 -53
  62. package/doc/process_traversal.js.html +101 -108
  63. package/doc/structure_graph.js.html +7 -7
  64. package/doc/structure_io_binary_internals_DataType.js.html +148 -0
  65. package/doc/structure_io_binary_internals_GraphBinaryReader.js.html +131 -0
  66. package/doc/structure_io_binary_internals_GraphBinaryWriter.js.html +134 -0
  67. package/doc/structure_io_graph-serializer.js.html +65 -18
  68. package/doc/structure_io_type-serializers.js.html +86 -89
  69. package/index.js +5 -5
  70. package/lib/driver/auth/authenticator.js +2 -2
  71. package/lib/driver/auth/mechanisms/sasl-mechanism-base.js +1 -1
  72. package/lib/driver/auth/mechanisms/sasl-mechanism-plain.js +24 -15
  73. package/lib/driver/auth/plain-text-sasl-authenticator.js +5 -5
  74. package/lib/driver/auth/sasl-authenticator.js +1 -1
  75. package/lib/driver/client.js +71 -21
  76. package/lib/driver/connection.js +132 -90
  77. package/lib/driver/driver-remote-connection.js +10 -9
  78. package/lib/driver/remote-connection.js +2 -3
  79. package/lib/driver/response-error.js +2 -2
  80. package/lib/driver/result-set.js +1 -2
  81. package/lib/process/anonymous-traversal.js +1 -2
  82. package/lib/process/bytecode.js +9 -7
  83. package/lib/process/graph-traversal.js +191 -141
  84. package/lib/process/transaction.js +13 -7
  85. package/lib/process/translator.js +50 -35
  86. package/lib/process/traversal-strategy.js +67 -51
  87. package/lib/process/traversal.js +99 -106
  88. package/lib/structure/graph.js +5 -5
  89. package/lib/structure/io/binary/GraphBinary.js +109 -0
  90. package/lib/structure/io/binary/internals/AnySerializer.js +95 -0
  91. package/lib/structure/io/binary/internals/ArraySerializer.js +135 -0
  92. package/lib/structure/io/binary/internals/BigIntegerSerializer.js +151 -0
  93. package/lib/structure/io/binary/internals/BooleanSerializer.js +103 -0
  94. package/lib/structure/io/binary/internals/BulkSetSerializer.js +124 -0
  95. package/lib/structure/io/binary/internals/ByteBufferSerializer.js +124 -0
  96. package/lib/structure/io/binary/internals/ByteSerializer.js +95 -0
  97. package/lib/structure/io/binary/internals/BytecodeSerializer.js +249 -0
  98. package/lib/structure/io/binary/internals/DataType.js +97 -0
  99. package/lib/structure/io/binary/internals/DateSerializer.js +103 -0
  100. package/lib/structure/io/binary/internals/DoubleSerializer.js +99 -0
  101. package/lib/structure/io/binary/internals/EdgeSerializer.js +215 -0
  102. package/lib/structure/io/binary/internals/EnumSerializer.js +148 -0
  103. package/lib/structure/io/binary/internals/FloatSerializer.js +99 -0
  104. package/lib/structure/io/binary/internals/GraphBinaryReader.js +80 -0
  105. package/lib/structure/io/binary/internals/GraphBinaryWriter.js +83 -0
  106. package/lib/structure/io/binary/internals/IntSerializer.js +112 -0
  107. package/lib/structure/io/binary/internals/LambdaSerializer.js +70 -0
  108. package/lib/structure/io/binary/internals/LongSerializer.js +107 -0
  109. package/lib/structure/io/binary/internals/LongSerializerNg.js +102 -0
  110. package/lib/structure/io/binary/internals/MapSerializer.js +153 -0
  111. package/lib/structure/io/binary/internals/NumberSerializationStrategy.js +68 -0
  112. package/lib/structure/io/binary/internals/PSerializer.js +151 -0
  113. package/lib/structure/io/binary/internals/PathSerializer.js +123 -0
  114. package/lib/structure/io/binary/internals/PropertySerializer.js +141 -0
  115. package/lib/structure/io/binary/internals/ShortSerializer.js +99 -0
  116. package/lib/structure/io/binary/internals/StringSerializer.js +114 -0
  117. package/lib/structure/io/binary/internals/TextPSerializer.js +145 -0
  118. package/lib/structure/io/binary/internals/TraversalStrategySerializer.js +72 -0
  119. package/lib/structure/io/binary/internals/TraverserSerializer.js +123 -0
  120. package/lib/structure/io/binary/internals/UnspecifiedNullSerializer.js +75 -0
  121. package/lib/structure/io/binary/internals/UuidSerializer.js +119 -0
  122. package/lib/structure/io/binary/internals/VertexPropertySerializer.js +172 -0
  123. package/lib/structure/io/binary/internals/VertexSerializer.js +135 -0
  124. package/lib/structure/io/binary/internals/utils.js +59 -0
  125. package/lib/structure/io/graph-serializer.js +62 -16
  126. package/lib/structure/io/type-serializers.js +84 -87
  127. package/lib/utils.js +15 -10
  128. package/package.json +21 -8
@@ -68,14 +68,19 @@ class Transaction {
68
68
  */
69
69
  begin() {
70
70
  if (this._sessionBasedConnection) {
71
- throw new Error("Transaction already started on this object");
71
+ throw new Error('Transaction already started on this object');
72
72
  }
73
73
 
74
74
  this._sessionBasedConnection = this._g.remoteConnection.createSession();
75
75
  const traversalStrategy = new TraversalStrategies();
76
76
  traversalStrategy.addStrategy(new remote.RemoteStrategy(this._sessionBasedConnection));
77
- return new this._g.graphTraversalSourceClass(this._g.graph, traversalStrategy, new Bytecode(this._g.bytecode),
78
- this._g.graphTraversalSourceClass, this._g.graphTraversalClass);
77
+ return new this._g.graphTraversalSourceClass(
78
+ this._g.graph,
79
+ traversalStrategy,
80
+ new Bytecode(this._g.bytecode),
81
+ this._g.graphTraversalSourceClass,
82
+ this._g.graphTraversalClass,
83
+ );
79
84
  }
80
85
 
81
86
  /**
@@ -97,21 +102,23 @@ class Transaction {
97
102
  * @returns {Boolean}
98
103
  */
99
104
  get isOpen() {
100
- this._sessionBasedConnection.isOpen;
105
+ return this._sessionBasedConnection.isOpen;
101
106
  }
102
107
 
103
108
  /**
104
109
  * @returns {Promise}
105
110
  */
106
111
  close() {
107
- if (this._sessionBasedConnection)
112
+ if (this._sessionBasedConnection) {
108
113
  this._sessionBasedConnection.close();
114
+ }
109
115
  }
110
116
  }
111
117
 
112
118
  module.exports = {
113
- Transaction
114
- };</code></pre>
119
+ Transaction,
120
+ };
121
+ </code></pre>
115
122
  </article>
116
123
  </section>
117
124
 
@@ -121,13 +128,13 @@ module.exports = {
121
128
  </div>
122
129
 
123
130
  <nav>
124
- <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="AnonymousTraversalSource.html">AnonymousTraversalSource</a></li><li><a href="Authenticator.html">Authenticator</a></li><li><a href="Bytecode.html">Bytecode</a></li><li><a href="Client.html">Client</a></li><li><a href="Connection.html">Connection</a></li><li><a href="DriverRemoteConnection.html">DriverRemoteConnection</a></li><li><a href="EdgeLabelVerificationStrategy.html">EdgeLabelVerificationStrategy</a></li><li><a href="Graph.html">Graph</a></li><li><a href="GraphSON2Reader.html">GraphSON2Reader</a></li><li><a href="GraphSON2Writer.html">GraphSON2Writer</a></li><li><a href="GraphSON3Reader.html">GraphSON3Reader</a></li><li><a href="GraphSON3Writer.html">GraphSON3Writer</a></li><li><a href="GraphTraversal.html">GraphTraversal</a></li><li><a href="GraphTraversalSource.html">GraphTraversalSource</a></li><li><a href="HaltedTraverserStrategy.html">HaltedTraverserStrategy</a></li><li><a href="MatchAlgorithmStrategy.html">MatchAlgorithmStrategy</a></li><li><a href="P.html">P</a></li><li><a href="PartitionStrategy.html">PartitionStrategy</a></li><li><a href="Path.html">Path</a></li><li><a href="PlainTextSaslAuthenticator.html">PlainTextSaslAuthenticator</a></li><li><a href="RemoteConnection.html">RemoteConnection</a></li><li><a href="RemoteStrategy.html">RemoteStrategy</a></li><li><a href="RemoteTraversal.html">RemoteTraversal</a></li><li><a href="ReservedKeysVerificationStrategy.html">ReservedKeysVerificationStrategy</a></li><li><a href="ResponseError.html">ResponseError</a></li><li><a href="ResultSet.html">ResultSet</a></li><li><a href="SaslAuthenticator.html">SaslAuthenticator</a></li><li><a href="SaslMechanismBase.html">SaslMechanismBase</a></li><li><a href="SaslMechanismPlain.html">SaslMechanismPlain</a></li><li><a href="SubgraphStrategy.html">SubgraphStrategy</a></li><li><a href="TextP.html">TextP</a></li><li><a href="Transaction.html">Transaction</a></li><li><a href="Translator.html">Translator</a></li><li><a href="TraversalStrategies.html">TraversalStrategies</a></li><li><a href="TraversalStrategy.html">TraversalStrategy</a></li><li><a href="TypeSerializer.html">TypeSerializer</a></li></ul><h3>Global</h3><ul><li><a href="global.html#statics">statics</a></li></ul>
131
+ <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="AnonymousTraversalSource.html">AnonymousTraversalSource</a></li><li><a href="Authenticator.html">Authenticator</a></li><li><a href="Bytecode.html">Bytecode</a></li><li><a href="Client.html">Client</a></li><li><a href="Connection.html">Connection</a></li><li><a href="DriverRemoteConnection.html">DriverRemoteConnection</a></li><li><a href="EdgeLabelVerificationStrategy.html">EdgeLabelVerificationStrategy</a></li><li><a href="Graph.html">Graph</a></li><li><a href="GraphSON2Reader.html">GraphSON2Reader</a></li><li><a href="GraphSON2Writer.html">GraphSON2Writer</a></li><li><a href="GraphSON3Reader.html">GraphSON3Reader</a></li><li><a href="GraphSON3Writer.html">GraphSON3Writer</a></li><li><a href="GraphTraversal.html">GraphTraversal</a></li><li><a href="GraphTraversalSource.html">GraphTraversalSource</a></li><li><a href="HaltedTraverserStrategy.html">HaltedTraverserStrategy</a></li><li><a href="MatchAlgorithmStrategy.html">MatchAlgorithmStrategy</a></li><li><a href="module.exports.html">exports</a></li><li><a href="P.html">P</a></li><li><a href="PartitionStrategy.html">PartitionStrategy</a></li><li><a href="Path.html">Path</a></li><li><a href="PlainTextSaslAuthenticator.html">PlainTextSaslAuthenticator</a></li><li><a href="ProductiveByStrategy.html">ProductiveByStrategy</a></li><li><a href="RemoteConnection.html">RemoteConnection</a></li><li><a href="RemoteStrategy.html">RemoteStrategy</a></li><li><a href="RemoteTraversal.html">RemoteTraversal</a></li><li><a href="ReservedKeysVerificationStrategy.html">ReservedKeysVerificationStrategy</a></li><li><a href="ResponseError.html">ResponseError</a></li><li><a href="ResultSet.html">ResultSet</a></li><li><a href="SaslAuthenticator.html">SaslAuthenticator</a></li><li><a href="SaslMechanismBase.html">SaslMechanismBase</a></li><li><a href="SaslMechanismPlain.html">SaslMechanismPlain</a></li><li><a href="SubgraphStrategy.html">SubgraphStrategy</a></li><li><a href="TextP.html">TextP</a></li><li><a href="Transaction.html">Transaction</a></li><li><a href="Translator.html">Translator</a></li><li><a href="TraversalStrategies.html">TraversalStrategies</a></li><li><a href="TraversalStrategy.html">TraversalStrategy</a></li><li><a href="TypeSerializer.html">TypeSerializer</a></li></ul><h3>Global</h3><ul><li><a href="global.html#DataType">DataType</a></li><li><a href="global.html#statics">statics</a></li></ul>
125
132
  </nav>
126
133
 
127
134
  <br class="clear">
128
135
 
129
136
  <footer>
130
- Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a> on Mon Jul 26 2021 10:29:09 GMT+0200 (Central European Summer Time)
137
+ Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a> on Tue Jul 26 2022 15:51:52 GMT-0400 (Eastern Daylight Time)
131
138
  </footer>
132
139
 
133
140
  <script> prettyPrint(); </script>
@@ -62,7 +62,7 @@ class Translator {
62
62
  }
63
63
 
64
64
  getTargetLanguage() {
65
- return "gremlin-groovy";
65
+ return 'gremlin-groovy';
66
66
  }
67
67
 
68
68
  of(traversalSource) {
@@ -72,13 +72,14 @@ class Translator {
72
72
  /**
73
73
  * Returns a script representation of the given bytecode instructions.
74
74
  * @param {Object} bytecodeOrTraversal The traversal or bytecode of a traversal containing step instructions.
75
+ * @param {boolean} child Determines if a traversal object should be treated as an anonymous child or if it is a spawn from "g"
75
76
  * @returns {string} Gremlin-Groovy script
76
77
  */
77
78
  translate(bytecodeOrTraversal, child = false) {
78
- let script = child ? "__" : this._traversalSource;
79
+ let script = child ? '__' : this._traversalSource;
79
80
  const bc = bytecodeOrTraversal instanceof Bytecode ? bytecodeOrTraversal : bytecodeOrTraversal.getBytecode();
80
81
 
81
- let instructions = bc.stepInstructions;
82
+ const instructions = bc.stepInstructions;
82
83
 
83
84
  // build the script from the glv instructions.
84
85
  for (let i = 0; i &lt; instructions.length; i++) {
@@ -91,47 +92,62 @@ class Translator {
91
92
  script += ', ';
92
93
  }
93
94
 
94
- if (Object(params[k]) === params[k]) {
95
- if (params[k] instanceof Traversal) {
96
- script += this.translate(params[k].getBytecode(), true);
97
- } else if (params[k].toString() === '[object Object]') {
98
- Object.keys(params[k]).forEach(function (key, index) {
99
- if (index > 0) script += ', ';
100
- script += '(\'' + key + '\', ';
101
- if (params[k][key] instanceof String || typeof params[k][key] === 'string') {
102
- script += '\'' + params[k][key] + '\'';
103
- } else {
104
- script += params[k][key];
105
- }
106
- script += ')';
107
- });
108
- } else if (Array.isArray(params[k])) {
109
- const parts = [];
110
- for (const param of params[k]) {
111
- parts.push(translate(param.getBytecode(), true));
112
- }
113
- script += parts.join(",");
114
- } else {
115
- script += params[k].toString();
116
- }
117
- } else if (params[k] === undefined) {
118
- script += '';
119
- } else if (typeof params[k] === 'number' || typeof params[k] === 'boolean') {
120
- script += params[k];
121
- } else {
122
- script += '\'' + params[k] + '\'';
123
- }
95
+ script += this.convert(params[k]);
124
96
  }
125
97
  }
126
98
 
127
99
  script += ')';
128
100
  }
129
-
101
+
102
+ return script;
103
+ }
104
+
105
+ /**
106
+ * Converts an object to a Gremlin script representation.
107
+ * @param {Object} anyObject The object to convert to a script representation
108
+ * @returns {string} The Gremlin script representation
109
+ */
110
+ convert(anyObject) {
111
+ let script = '';
112
+ if (Object(anyObject) === anyObject) {
113
+ if (anyObject instanceof Traversal) {
114
+ script += this.translate(anyObject.getBytecode(), true);
115
+ } else if (anyObject.toString() === '[object Object]') {
116
+ Object.keys(anyObject).forEach(function (key, index) {
117
+ if (index > 0) {
118
+ script += ', ';
119
+ }
120
+ script += `('${key}', `;
121
+ if (anyObject[key] instanceof String || typeof anyObject[key] === 'string') {
122
+ script += `'${anyObject[key]}'`;
123
+ } else {
124
+ script += anyObject[key];
125
+ }
126
+ script += ')';
127
+ });
128
+ } else if (Array.isArray(anyObject)) {
129
+ const parts = [];
130
+ for (const item of anyObject) {
131
+ parts.push(this.convert(item));
132
+ }
133
+ script += '[' + parts.join(', ') + ']';
134
+ } else {
135
+ script += anyObject.toString();
136
+ }
137
+ } else if (anyObject === undefined) {
138
+ script += '';
139
+ } else if (typeof anyObject === 'number' || typeof anyObject === 'boolean') {
140
+ script += anyObject;
141
+ } else {
142
+ script += `'${anyObject}'`;
143
+ }
144
+
130
145
  return script;
131
146
  }
132
147
  }
133
148
 
134
- module.exports = Translator;</code></pre>
149
+ module.exports = Translator;
150
+ </code></pre>
135
151
  </article>
136
152
  </section>
137
153
 
@@ -141,13 +157,13 @@ module.exports = Translator;</code></pre>
141
157
  </div>
142
158
 
143
159
  <nav>
144
- <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="AnonymousTraversalSource.html">AnonymousTraversalSource</a></li><li><a href="Authenticator.html">Authenticator</a></li><li><a href="Bytecode.html">Bytecode</a></li><li><a href="Client.html">Client</a></li><li><a href="Connection.html">Connection</a></li><li><a href="DriverRemoteConnection.html">DriverRemoteConnection</a></li><li><a href="EdgeLabelVerificationStrategy.html">EdgeLabelVerificationStrategy</a></li><li><a href="Graph.html">Graph</a></li><li><a href="GraphSON2Reader.html">GraphSON2Reader</a></li><li><a href="GraphSON2Writer.html">GraphSON2Writer</a></li><li><a href="GraphSON3Reader.html">GraphSON3Reader</a></li><li><a href="GraphSON3Writer.html">GraphSON3Writer</a></li><li><a href="GraphTraversal.html">GraphTraversal</a></li><li><a href="GraphTraversalSource.html">GraphTraversalSource</a></li><li><a href="HaltedTraverserStrategy.html">HaltedTraverserStrategy</a></li><li><a href="MatchAlgorithmStrategy.html">MatchAlgorithmStrategy</a></li><li><a href="P.html">P</a></li><li><a href="PartitionStrategy.html">PartitionStrategy</a></li><li><a href="Path.html">Path</a></li><li><a href="PlainTextSaslAuthenticator.html">PlainTextSaslAuthenticator</a></li><li><a href="RemoteConnection.html">RemoteConnection</a></li><li><a href="RemoteStrategy.html">RemoteStrategy</a></li><li><a href="RemoteTraversal.html">RemoteTraversal</a></li><li><a href="ReservedKeysVerificationStrategy.html">ReservedKeysVerificationStrategy</a></li><li><a href="ResponseError.html">ResponseError</a></li><li><a href="ResultSet.html">ResultSet</a></li><li><a href="SaslAuthenticator.html">SaslAuthenticator</a></li><li><a href="SaslMechanismBase.html">SaslMechanismBase</a></li><li><a href="SaslMechanismPlain.html">SaslMechanismPlain</a></li><li><a href="SubgraphStrategy.html">SubgraphStrategy</a></li><li><a href="TextP.html">TextP</a></li><li><a href="Transaction.html">Transaction</a></li><li><a href="Translator.html">Translator</a></li><li><a href="TraversalStrategies.html">TraversalStrategies</a></li><li><a href="TraversalStrategy.html">TraversalStrategy</a></li><li><a href="TypeSerializer.html">TypeSerializer</a></li></ul><h3>Global</h3><ul><li><a href="global.html#statics">statics</a></li></ul>
160
+ <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="AnonymousTraversalSource.html">AnonymousTraversalSource</a></li><li><a href="Authenticator.html">Authenticator</a></li><li><a href="Bytecode.html">Bytecode</a></li><li><a href="Client.html">Client</a></li><li><a href="Connection.html">Connection</a></li><li><a href="DriverRemoteConnection.html">DriverRemoteConnection</a></li><li><a href="EdgeLabelVerificationStrategy.html">EdgeLabelVerificationStrategy</a></li><li><a href="Graph.html">Graph</a></li><li><a href="GraphSON2Reader.html">GraphSON2Reader</a></li><li><a href="GraphSON2Writer.html">GraphSON2Writer</a></li><li><a href="GraphSON3Reader.html">GraphSON3Reader</a></li><li><a href="GraphSON3Writer.html">GraphSON3Writer</a></li><li><a href="GraphTraversal.html">GraphTraversal</a></li><li><a href="GraphTraversalSource.html">GraphTraversalSource</a></li><li><a href="HaltedTraverserStrategy.html">HaltedTraverserStrategy</a></li><li><a href="MatchAlgorithmStrategy.html">MatchAlgorithmStrategy</a></li><li><a href="module.exports.html">exports</a></li><li><a href="P.html">P</a></li><li><a href="PartitionStrategy.html">PartitionStrategy</a></li><li><a href="Path.html">Path</a></li><li><a href="PlainTextSaslAuthenticator.html">PlainTextSaslAuthenticator</a></li><li><a href="ProductiveByStrategy.html">ProductiveByStrategy</a></li><li><a href="RemoteConnection.html">RemoteConnection</a></li><li><a href="RemoteStrategy.html">RemoteStrategy</a></li><li><a href="RemoteTraversal.html">RemoteTraversal</a></li><li><a href="ReservedKeysVerificationStrategy.html">ReservedKeysVerificationStrategy</a></li><li><a href="ResponseError.html">ResponseError</a></li><li><a href="ResultSet.html">ResultSet</a></li><li><a href="SaslAuthenticator.html">SaslAuthenticator</a></li><li><a href="SaslMechanismBase.html">SaslMechanismBase</a></li><li><a href="SaslMechanismPlain.html">SaslMechanismPlain</a></li><li><a href="SubgraphStrategy.html">SubgraphStrategy</a></li><li><a href="TextP.html">TextP</a></li><li><a href="Transaction.html">Transaction</a></li><li><a href="Translator.html">Translator</a></li><li><a href="TraversalStrategies.html">TraversalStrategies</a></li><li><a href="TraversalStrategy.html">TraversalStrategy</a></li><li><a href="TypeSerializer.html">TypeSerializer</a></li></ul><h3>Global</h3><ul><li><a href="global.html#DataType">DataType</a></li><li><a href="global.html#statics">statics</a></li></ul>
145
161
  </nav>
146
162
 
147
163
  <br class="clear">
148
164
 
149
165
  <footer>
150
- Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a> on Mon Jul 26 2021 10:29:09 GMT+0200 (Central European Summer Time)
166
+ Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a> on Tue Jul 26 2022 15:51:52 GMT-0400 (Eastern Daylight Time)
151
167
  </footer>
152
168
 
153
169
  <script> prettyPrint(); </script>
@@ -62,8 +62,7 @@ class TraversalStrategies {
62
62
  if (parent) {
63
63
  // Clone the strategies
64
64
  this.strategies = [...parent.strategies];
65
- }
66
- else {
65
+ } else {
67
66
  this.strategies = [];
68
67
  }
69
68
  }
@@ -75,7 +74,7 @@ class TraversalStrategies {
75
74
 
76
75
  /** @param {TraversalStrategy} strategy */
77
76
  removeStrategy(strategy) {
78
- const idx = this.strategies.findIndex(s => s.fqcn === strategy.fqcn);
77
+ const idx = this.strategies.findIndex((s) => s.fqcn === strategy.fqcn);
79
78
  if (idx !== -1) {
80
79
  return this.strategies.splice(idx, 1)[0];
81
80
  }
@@ -89,15 +88,15 @@ class TraversalStrategies {
89
88
  */
90
89
  applyStrategies(traversal) {
91
90
  // Apply all strategies serially
92
- return this.strategies.reduce((promise, strategy) => {
93
- return promise.then(() => strategy.apply(traversal));
94
- }, Promise.resolve());
91
+ return this.strategies.reduce(
92
+ (promise, strategy) => promise.then(() => strategy.apply(traversal)),
93
+ Promise.resolve(),
94
+ );
95
95
  }
96
96
  }
97
97
 
98
98
  /** @abstract */
99
99
  class TraversalStrategy {
100
-
101
100
  /**
102
101
  * @param {String} fqcn fully qualified class name in Java of the strategy
103
102
  * @param {Object} configuration for the strategy
@@ -112,38 +111,36 @@ class TraversalStrategy {
112
111
  * @param {Traversal} traversal
113
112
  * @returns {Promise}
114
113
  */
115
- apply(traversal) {
116
-
117
- }
114
+ apply(traversal) {}
118
115
  }
119
116
 
120
117
  class ConnectiveStrategy extends TraversalStrategy {
121
118
  constructor() {
122
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConnectiveStrategy");
119
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConnectiveStrategy');
123
120
  }
124
121
  }
125
122
 
126
123
  class ElementIdStrategy extends TraversalStrategy {
127
124
  constructor() {
128
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategy");
125
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategy');
129
126
  }
130
127
  }
131
128
 
132
129
  class HaltedTraverserStrategy extends TraversalStrategy {
133
-
134
130
  /**
135
131
  * @param {String} haltedTraverserFactory full qualified class name in Java of a {@code HaltedTraverserFactory} implementation
136
132
  */
137
133
  constructor(haltedTraverserFactory) {
138
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.HaltedTraverserStrategy");
139
- if (haltedTraverserFactory !== undefined)
140
- this.configuration["haltedTraverserFactory"] = haltedTraverserFactory;
134
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.HaltedTraverserStrategy');
135
+ if (haltedTraverserFactory !== undefined) {
136
+ this.configuration['haltedTraverserFactory'] = haltedTraverserFactory;
137
+ }
141
138
  }
142
139
  }
143
140
 
144
141
  class OptionsStrategy extends TraversalStrategy {
145
142
  constructor(options) {
146
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.OptionsStrategy", options);
143
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.OptionsStrategy', options);
147
144
  }
148
145
  }
149
146
 
@@ -156,7 +153,7 @@ class PartitionStrategy extends TraversalStrategy {
156
153
  * @param {boolean} [options.includeMetaProperties] determines if meta-properties should be included in partitioning defaulting to false
157
154
  */
158
155
  constructor(options) {
159
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategy", options);
156
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategy', options);
160
157
  }
161
158
  }
162
159
 
@@ -169,20 +166,32 @@ class SubgraphStrategy extends TraversalStrategy {
169
166
  * @param {boolean} [options.checkAdjacentVertices] enables the strategy to apply the {@code vertices} filter to the adjacent vertices of an edge.
170
167
  */
171
168
  constructor(options) {
172
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy", options);
173
- if (this.configuration.vertices instanceof Traversal)
169
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy', options);
170
+ if (this.configuration.vertices instanceof Traversal) {
174
171
  this.configuration.vertices = this.configuration.vertices.bytecode;
175
- if (this.configuration.edges instanceof Traversal)
172
+ }
173
+ if (this.configuration.edges instanceof Traversal) {
176
174
  this.configuration.edges = this.configuration.edges.bytecode;
177
- if (this.configuration.vertexProperties instanceof Traversal)
175
+ }
176
+ if (this.configuration.vertexProperties instanceof Traversal) {
178
177
  this.configuration.vertexProperties = this.configuration.vertexProperties.bytecode;
178
+ }
179
179
  }
180
180
  }
181
181
 
182
- class VertexProgramStrategy extends TraversalStrategy {
182
+ class ProductiveByStrategy extends TraversalStrategy {
183
+ /**
184
+ * @param {Object} [options]
185
+ * @param {Array&lt;String>} [options.productiveKeys] set of keys that will always be productive
186
+ */
187
+ constructor(options) {
188
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ProductiveByStrategy', options);
189
+ }
190
+ }
183
191
 
192
+ class VertexProgramStrategy extends TraversalStrategy {
184
193
  constructor(options) {
185
- super("org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy", options);
194
+ super('org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy', options);
186
195
  }
187
196
  }
188
197
 
@@ -191,105 +200,106 @@ class MatchAlgorithmStrategy extends TraversalStrategy {
191
200
  * @param matchAlgorithm
192
201
  */
193
202
  constructor(matchAlgorithm) {
194
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.MatchAlgorithmStrategy");
195
- if (matchAlgorithm !== undefined)
196
- this.configuration["matchAlgorithm"] = matchAlgorithm;
203
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.MatchAlgorithmStrategy');
204
+ if (matchAlgorithm !== undefined) {
205
+ this.configuration['matchAlgorithm'] = matchAlgorithm;
206
+ }
197
207
  }
198
208
  }
199
209
 
200
210
  class AdjacentToIncidentStrategy extends TraversalStrategy {
201
211
  constructor() {
202
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.AdjacentToIncidentStrategy");
212
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.AdjacentToIncidentStrategy');
203
213
  }
204
214
  }
205
215
 
206
216
  class FilterRankingStrategy extends TraversalStrategy {
207
217
  constructor() {
208
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.FilterRankingStrategy");
218
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.FilterRankingStrategy');
209
219
  }
210
220
  }
211
221
 
212
222
  class IdentityRemovalStrategy extends TraversalStrategy {
213
223
  constructor() {
214
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IdentityRemovalStrategy");
224
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IdentityRemovalStrategy');
215
225
  }
216
226
  }
217
227
 
218
228
  class IncidentToAdjacentStrategy extends TraversalStrategy {
219
229
  constructor() {
220
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IncidentToAdjacentStrategy");
230
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IncidentToAdjacentStrategy');
221
231
  }
222
232
  }
223
233
 
224
234
  class InlineFilterStrategy extends TraversalStrategy {
225
235
  constructor() {
226
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.InlineFilterStrategy");
236
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.InlineFilterStrategy');
227
237
  }
228
238
  }
229
239
 
230
240
  class LazyBarrierStrategy extends TraversalStrategy {
231
241
  constructor() {
232
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.LazyBarrierStrategy");
242
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.LazyBarrierStrategy');
233
243
  }
234
244
  }
235
245
 
236
246
  class MatchPredicateStrategy extends TraversalStrategy {
237
247
  constructor() {
238
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.MatchPredicateStrategy");
248
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.MatchPredicateStrategy');
239
249
  }
240
250
  }
241
251
 
242
252
  class OrderLimitStrategy extends TraversalStrategy {
243
253
  constructor() {
244
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.OrderLimitStrategy");
254
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.OrderLimitStrategy');
245
255
  }
246
256
  }
247
257
 
248
258
  class PathProcessorStrategy extends TraversalStrategy {
249
259
  constructor() {
250
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathProcessorStrategy");
260
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathProcessorStrategy');
251
261
  }
252
262
  }
253
263
 
254
264
  class PathRetractionStrategy extends TraversalStrategy {
255
265
  constructor() {
256
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathRetractionStrategy");
266
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathRetractionStrategy');
257
267
  }
258
268
  }
259
269
 
260
270
  class CountStrategy extends TraversalStrategy {
261
271
  constructor() {
262
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.CountStrategy");
272
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.CountStrategy');
263
273
  }
264
274
  }
265
275
 
266
276
  class RepeatUnrollStrategy extends TraversalStrategy {
267
277
  constructor() {
268
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy");
278
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy');
269
279
  }
270
280
  }
271
281
 
272
282
  class GraphFilterStrategy extends TraversalStrategy {
273
283
  constructor() {
274
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.GraphFilterStrategy");
284
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.GraphFilterStrategy');
275
285
  }
276
286
  }
277
287
 
278
288
  class EarlyLimitStrategy extends TraversalStrategy {
279
289
  constructor() {
280
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.EarlyLimitStrategy");
290
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.EarlyLimitStrategy');
281
291
  }
282
292
  }
283
293
 
284
294
  class LambdaRestrictionStrategy extends TraversalStrategy {
285
295
  constructor() {
286
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.LambdaRestrictionStrategy");
296
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.LambdaRestrictionStrategy');
287
297
  }
288
298
  }
289
299
 
290
300
  class ReadOnlyStrategy extends TraversalStrategy {
291
301
  constructor() {
292
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy");
302
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy');
293
303
  }
294
304
  }
295
305
 
@@ -298,9 +308,11 @@ class EdgeLabelVerificationStrategy extends TraversalStrategy {
298
308
  * @param {boolean} logWarnings determines if warnings should be written to the logger when verification fails
299
309
  * @param {boolean} throwException determines if exceptions should be thrown when verifications fails
300
310
  */
301
- constructor(logWarnings = false, throwException=false) {
302
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.EdgeLabelVerificationStrategy",
303
- {logWarnings: logWarnings, throwException: throwException});
311
+ constructor(logWarnings = false, throwException = false) {
312
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.EdgeLabelVerificationStrategy', {
313
+ logWarnings: logWarnings,
314
+ throwException: throwException,
315
+ });
304
316
  }
305
317
  }
306
318
 
@@ -310,9 +322,12 @@ class ReservedKeysVerificationStrategy extends TraversalStrategy {
310
322
  * @param {boolean} throwException determines if exceptions should be thrown when verifications fails
311
323
  * @param {Array&lt;String>} keys the list of reserved keys to verify
312
324
  */
313
- constructor(logWarnings = false, throwException=false, keys=["id", "label"]) {
314
- super("org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.EdgeLabelVerificationStrategy",
315
- {logWarnings: logWarnings, throwException: throwException, keys: keys});
325
+ constructor(logWarnings = false, throwException = false, keys = ['id', 'label']) {
326
+ super('org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReservedKeysVerificationStrategy', {
327
+ logWarnings: logWarnings,
328
+ throwException: throwException,
329
+ keys: keys,
330
+ });
316
331
  }
317
332
  }
318
333
 
@@ -340,6 +355,7 @@ module.exports = {
340
355
  OrderLimitStrategy: OrderLimitStrategy,
341
356
  PathProcessorStrategy: PathProcessorStrategy,
342
357
  PathRetractionStrategy: PathRetractionStrategy,
358
+ ProductiveByStrategy: ProductiveByStrategy,
343
359
  CountStrategy: CountStrategy,
344
360
  RepeatUnrollStrategy: RepeatUnrollStrategy,
345
361
  GraphFilterStrategy: GraphFilterStrategy,
@@ -348,8 +364,9 @@ module.exports = {
348
364
  EdgeLabelVerificationStrategy: EdgeLabelVerificationStrategy,
349
365
  LambdaRestrictionStrategy: LambdaRestrictionStrategy,
350
366
  ReadOnlyStrategy: ReadOnlyStrategy,
351
- ReservedKeysVerificationStrategy: ReservedKeysVerificationStrategy
352
- };</code></pre>
367
+ ReservedKeysVerificationStrategy: ReservedKeysVerificationStrategy,
368
+ };
369
+ </code></pre>
353
370
  </article>
354
371
  </section>
355
372
 
@@ -359,13 +376,13 @@ module.exports = {
359
376
  </div>
360
377
 
361
378
  <nav>
362
- <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="AnonymousTraversalSource.html">AnonymousTraversalSource</a></li><li><a href="Authenticator.html">Authenticator</a></li><li><a href="Bytecode.html">Bytecode</a></li><li><a href="Client.html">Client</a></li><li><a href="Connection.html">Connection</a></li><li><a href="DriverRemoteConnection.html">DriverRemoteConnection</a></li><li><a href="EdgeLabelVerificationStrategy.html">EdgeLabelVerificationStrategy</a></li><li><a href="Graph.html">Graph</a></li><li><a href="GraphSON2Reader.html">GraphSON2Reader</a></li><li><a href="GraphSON2Writer.html">GraphSON2Writer</a></li><li><a href="GraphSON3Reader.html">GraphSON3Reader</a></li><li><a href="GraphSON3Writer.html">GraphSON3Writer</a></li><li><a href="GraphTraversal.html">GraphTraversal</a></li><li><a href="GraphTraversalSource.html">GraphTraversalSource</a></li><li><a href="HaltedTraverserStrategy.html">HaltedTraverserStrategy</a></li><li><a href="MatchAlgorithmStrategy.html">MatchAlgorithmStrategy</a></li><li><a href="P.html">P</a></li><li><a href="PartitionStrategy.html">PartitionStrategy</a></li><li><a href="Path.html">Path</a></li><li><a href="PlainTextSaslAuthenticator.html">PlainTextSaslAuthenticator</a></li><li><a href="RemoteConnection.html">RemoteConnection</a></li><li><a href="RemoteStrategy.html">RemoteStrategy</a></li><li><a href="RemoteTraversal.html">RemoteTraversal</a></li><li><a href="ReservedKeysVerificationStrategy.html">ReservedKeysVerificationStrategy</a></li><li><a href="ResponseError.html">ResponseError</a></li><li><a href="ResultSet.html">ResultSet</a></li><li><a href="SaslAuthenticator.html">SaslAuthenticator</a></li><li><a href="SaslMechanismBase.html">SaslMechanismBase</a></li><li><a href="SaslMechanismPlain.html">SaslMechanismPlain</a></li><li><a href="SubgraphStrategy.html">SubgraphStrategy</a></li><li><a href="TextP.html">TextP</a></li><li><a href="Transaction.html">Transaction</a></li><li><a href="Translator.html">Translator</a></li><li><a href="TraversalStrategies.html">TraversalStrategies</a></li><li><a href="TraversalStrategy.html">TraversalStrategy</a></li><li><a href="TypeSerializer.html">TypeSerializer</a></li></ul><h3>Global</h3><ul><li><a href="global.html#statics">statics</a></li></ul>
379
+ <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="AnonymousTraversalSource.html">AnonymousTraversalSource</a></li><li><a href="Authenticator.html">Authenticator</a></li><li><a href="Bytecode.html">Bytecode</a></li><li><a href="Client.html">Client</a></li><li><a href="Connection.html">Connection</a></li><li><a href="DriverRemoteConnection.html">DriverRemoteConnection</a></li><li><a href="EdgeLabelVerificationStrategy.html">EdgeLabelVerificationStrategy</a></li><li><a href="Graph.html">Graph</a></li><li><a href="GraphSON2Reader.html">GraphSON2Reader</a></li><li><a href="GraphSON2Writer.html">GraphSON2Writer</a></li><li><a href="GraphSON3Reader.html">GraphSON3Reader</a></li><li><a href="GraphSON3Writer.html">GraphSON3Writer</a></li><li><a href="GraphTraversal.html">GraphTraversal</a></li><li><a href="GraphTraversalSource.html">GraphTraversalSource</a></li><li><a href="HaltedTraverserStrategy.html">HaltedTraverserStrategy</a></li><li><a href="MatchAlgorithmStrategy.html">MatchAlgorithmStrategy</a></li><li><a href="module.exports.html">exports</a></li><li><a href="P.html">P</a></li><li><a href="PartitionStrategy.html">PartitionStrategy</a></li><li><a href="Path.html">Path</a></li><li><a href="PlainTextSaslAuthenticator.html">PlainTextSaslAuthenticator</a></li><li><a href="ProductiveByStrategy.html">ProductiveByStrategy</a></li><li><a href="RemoteConnection.html">RemoteConnection</a></li><li><a href="RemoteStrategy.html">RemoteStrategy</a></li><li><a href="RemoteTraversal.html">RemoteTraversal</a></li><li><a href="ReservedKeysVerificationStrategy.html">ReservedKeysVerificationStrategy</a></li><li><a href="ResponseError.html">ResponseError</a></li><li><a href="ResultSet.html">ResultSet</a></li><li><a href="SaslAuthenticator.html">SaslAuthenticator</a></li><li><a href="SaslMechanismBase.html">SaslMechanismBase</a></li><li><a href="SaslMechanismPlain.html">SaslMechanismPlain</a></li><li><a href="SubgraphStrategy.html">SubgraphStrategy</a></li><li><a href="TextP.html">TextP</a></li><li><a href="Transaction.html">Transaction</a></li><li><a href="Translator.html">Translator</a></li><li><a href="TraversalStrategies.html">TraversalStrategies</a></li><li><a href="TraversalStrategy.html">TraversalStrategy</a></li><li><a href="TypeSerializer.html">TypeSerializer</a></li></ul><h3>Global</h3><ul><li><a href="global.html#DataType">DataType</a></li><li><a href="global.html#statics">statics</a></li></ul>
363
380
  </nav>
364
381
 
365
382
  <br class="clear">
366
383
 
367
384
  <footer>
368
- Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a> on Mon Jul 26 2021 10:29:09 GMT+0200 (Central European Summer Time)
385
+ Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a> on Tue Jul 26 2022 15:51:52 GMT-0400 (Eastern Daylight Time)
369
386
  </footer>
370
387
 
371
388
  <script> prettyPrint(); </script>