This is an automated email from the ASF dual-hosted git repository.
colegreer pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/master by this push:
new f52f8d2b93 CTR Minor fixes to JS imports, exports, and serializers
f52f8d2b93 is described below
commit f52f8d2b9319588fa017470f8731c16e32dc5ee2
Author: Cole Greer <[email protected]>
AuthorDate: Tue Jan 20 10:10:34 2026 -0800
CTR Minor fixes to JS imports, exports, and serializers
This is in preparation of the work to overhaul the GLV
for TP4. Note that there remain a few GB serializer tests
which fail against a 3.8.0 server as the updated classSerializer
in 3.8 has not been properly integrated into this branch, which
leads to a cascade of failures for serialization of Bytecode and
TraversalStrategy which depend on class serialization. This is
slated for removal in 4 already, so the effort is better spent
implementing GB4 and updating the tests to match the new spec.
---
.../gremlin-javascript/lib/structure/graph.ts | 14 ++--
.../lib/structure/io/binary/GraphBinary.js | 2 +-
.../structure/io/binary/internals/AnySerializer.js | 2 +-
.../binary/internals/OffsetDateTimeSerializer.js | 6 +-
.../lib/structure/io/graph-serializer.ts | 1 -
.../lib/structure/io/type-serializers.ts | 12 +--
.../test/unit/graphbinary/AnySerializer-test.js | 2 +-
.../test/unit/graphbinary/ClassSerializer-test.js | 87 ----------------------
.../test/unit/graphbinary/EnumSerializer-test.js | 21 +++---
.../test/unit/graphbinary/PathSerializer-test.js | 1 +
10 files changed, 27 insertions(+), 121 deletions(-)
diff --git
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/graph.ts
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/graph.ts
index b646c46101..e00a88b036 100644
---
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/graph.ts
+++
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/graph.ts
@@ -49,7 +49,7 @@ class Element<TLabel extends string = string, TId = any> {
readonly label: TLabel,
readonly properties: Property[] = []
) {
- this.properties = properties != null ? properties : [];
+ this.properties = properties ?? [];
}
/**
@@ -71,9 +71,9 @@ export class Vertex<
constructor(
id: TId,
label: TLabel,
- readonly properties: Property[] = [],
+ properties: Property[] | null = [],
) {
- super(id, label, properties);
+ super(id, label, properties ?? []);
}
toString() {
@@ -93,9 +93,9 @@ export class Edge<
readonly outV: TOutVertex,
readonly label: TLabel,
readonly inV: TInVertex,
- readonly properties: Property[] = [],
+ properties: Property[] | null = [],
) {
- super(id, label, properties);
+ super(id, label, properties ?? []);
}
toString() {
@@ -118,9 +118,9 @@ export class VertexProperty<
id: TId,
label: TLabel,
readonly value: TValue,
- readonly properties: Property[] = [],
+ properties: Property[] | null = [],
) {
- super(id, label, properties);
+ super(id, label, properties ?? []);
this.value = value;
this.key = this.label;
}
diff --git
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/GraphBinary.js
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/GraphBinary.js
index d0813e424b..4e78e90bbc 100644
---
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/GraphBinary.js
+++
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/GraphBinary.js
@@ -111,7 +111,7 @@ ioc.stringSerializer = new StringSerializer(ioc,
ioc.DataType.STRING);
ioc.dateSerializer = new DateSerializer(ioc, ioc.DataType.DATE);
ioc.offsetDateTimeSerializer = new OffsetDateTimeSerializer(ioc,
ioc.DataType.OFFSETDATETIME);
ioc.timestampSerializer = new DateSerializer(ioc, ioc.DataType.TIMESTAMP);
-ioc.classSerializer = new ClassSerializer(ioc, ioc.DataType.CLASS);
+ioc.classSerializer = new StringSerializer(ioc, ioc.DataType.CLASS);
ioc.doubleSerializer = new DoubleSerializer(ioc);
ioc.floatSerializer = new FloatSerializer(ioc);
ioc.listSerializer = new ArraySerializer(ioc, ioc.DataType.LIST);
diff --git
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/AnySerializer.js
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/AnySerializer.js
index 1e4c836f18..a378b3d5fe 100644
---
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/AnySerializer.js
+++
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/AnySerializer.js
@@ -48,8 +48,8 @@ export default class AnySerializer {
ioc.propertySerializer,
ioc.vertexSerializer,
ioc.vertexPropertySerializer,
- ioc.classSerializer,
ioc.stringSerializer,
+ ioc.classSerializer,
ioc.textPSerializer,
ioc.traversalStrategySerializer,
diff --git
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/OffsetDateTimeSerializer.js
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/OffsetDateTimeSerializer.js
index 3ca8c7c0a5..d8a1d62918 100644
---
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/OffsetDateTimeSerializer.js
+++
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/OffsetDateTimeSerializer.js
@@ -17,9 +17,9 @@
* under the License.
*/
-const { Buffer } = require('buffer');
+import { Buffer } from 'buffer';
-module.exports = class OffsetDateTimeSerializer {
+export default class OffsetDateTimeSerializer {
constructor(ioc, ID) {
this.ioc = ioc;
this.ID = ID;
@@ -146,4 +146,4 @@ module.exports = class OffsetDateTimeSerializer {
throw this.ioc.utils.des_error({ serializer: this, args: arguments,
cursor, err });
}
}
-};
+}
diff --git
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/graph-serializer.ts
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/graph-serializer.ts
index b780cb6550..c41a602774 100644
---
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/graph-serializer.ts
+++
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/graph-serializer.ts
@@ -318,7 +318,6 @@ const graphSON3Deserializers = Object.assign({},
graphSON2Deserializers, {
const graphSON2Serializers = [
NumberSerializer,
- DateSerializer,
OffsetDateTimeSerializer,
BytecodeSerializer,
TraverserSerializer,
diff --git
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.ts
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.ts
index 5a7523f14f..da2143421d 100644
---
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.ts
+++
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.ts
@@ -89,15 +89,9 @@ export class NumberSerializer extends TypeSerializer<number>
{
return typeof value === 'number';
}
}
-// consolidate into DateTime when implementing HTTP for js
+// TODO:: consolidate into DateTime when implementing HTTP for js
export class DateSerializer extends TypeSerializer<Date> {
- serialize(item: Date) {
- return {
- [typeKey]: 'g:Date',
- [valueKey]: item.getTime(),
- };
- }
-
+ // only deserialize g:Date objects
deserialize(obj: SerializedValue) {
return new Date(obj[valueKey]);
}
@@ -111,7 +105,7 @@ export class OffsetDateTimeSerializer extends
TypeSerializer<Date> {
serialize(item: Date) {
return {
[typeKey]: 'gx:OffsetDateTime',
- [valueKey]: item.getTime(),
+ [valueKey]: item.toISOString(),
};
}
diff --git
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/AnySerializer-test.js
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/AnySerializer-test.js
index bcd323ac96..575c10e03a 100644
---
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/AnySerializer-test.js
+++
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/AnySerializer-test.js
@@ -178,7 +178,7 @@ describe('GraphBinary.AnySerializer', () => {
{ v: new EnumValue('GType', 'BYTE'),
b: [ DataType.GTYPE,0x00, DataType.STRING,0x00, 0x00,0x00,0x00,0x04,
...from('byte') ]
},
- { v: new t.EnumValue('Operator', 'addAll'),
+ { v: new EnumValue('Operator', 'addAll'),
b: [ DataType.OPERATOR,0x00, DataType.STRING,0x00,
0x00,0x00,0x00,0x06, ...from('addAll') ]
},
{ v: new EnumValue('Order', 'desc'),
diff --git
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/ClassSerializer-test.js
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/ClassSerializer-test.js
deleted file mode 100644
index 991faea4c5..0000000000
---
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/ClassSerializer-test.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * 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.
- */
-
-const utils = require('./utils');
-const assert = require('assert');
-const { classSerializer } =
require('../../../lib/structure/io/binary/GraphBinary');
-const t = require('../../../lib/process/traversal');
-const ts = require('../../../lib/process/traversal-strategy');
-
-const { from, concat } = Buffer;
-
-describe('GraphBinary.ClassSerializer', () => {
-
- const type_code = from([0x06]);
- const value_flag = from([0x00]);
-
- const cases = [
- { v:undefined, fq:1, b:[0x06,0x01], },
- { v:undefined, fq:0, b:[0x00,0x00,0x00,0x00] },
- { v:null, fq:1, b:[0x06,0x01] },
- { v:null, fq:0, b:[0x00,0x00,0x00,0x00] },
-
- { v:ts.ElementIdStrategy,
- b:[
- 0x00,0x00,0x00,0x54,
...from('org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategy'),
- ]
- },
-
- { v:ts.OptionsStrategy,
- b:[
- 0x00,0x00,0x00,0x52,
...from('org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.OptionsStrategy'),
- ]
- },
- ];
-
- describe('#serialize', () =>
- cases
- .forEach(({ v, fq, b }, i) => it(utils.ser_title({i,v}), () => {
- b = from(b);
-
- // when fq is under control
- if (fq !== undefined) {
- assert.deepEqual( classSerializer.serialize(v, fq), b );
- return;
- }
-
- // generic case
- assert.deepEqual( classSerializer.serialize(v, true),
concat([type_code, value_flag, b]) );
- assert.deepEqual( classSerializer.serialize(v, false),
concat([ b]) );
- }))
- );
-
- describe('#canBeUsedFor', () =>
- // most of the cases are implicitly tested via
AnySerializer.serialize() tests
- [
- { v: null, e: false },
- { v: undefined, e: false },
- { v: {}, e: false },
- { v: new t.Traverser(), e: false },
- { v: new t.P(), e: false },
- { v: [], e: false },
- { v: [0], e: false },
- { v: [function(){}], e: false },
- { v: function(){}, e: false },
- { v: ts.TraversalStrategy, e: true },
- ].forEach(({ v, e }, i) => it(utils.cbuf_title({i,v}), () =>
- assert.strictEqual(classSerializer.canBeUsedFor(v), e )
- ))
- );
-
-});
diff --git
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/EnumSerializer-test.js
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/EnumSerializer-test.js
index 6f3105e31d..379bda0c8f 100644
---
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/EnumSerializer-test.js
+++
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/EnumSerializer-test.js
@@ -31,17 +31,16 @@ const { from, concat } = Buffer;
describe('GraphBinary.EnumSerializer', () => {
const types = [
- { name: 'Barrier', code: from([0x13]), enum: t.barrier },
- { name: 'Cardinality', code: from([0x16]), enum: t.cardinality },
- { name: 'Column', code: from([0x17]), enum: t.column },
- { name: 'Direction', code: from([0x18]), enum: t.direction },
- { name: 'GType', code: from([0x30]), enum: t.gType },
- { name: 'Operator', code: from([0x19]), enum: t.operator },
- { name: 'Order', code: from([0x1A]), enum: t.order },
- { name: 'Pick', code: from([0x1B]), enum: t.pick },
- { name: 'Pop', code: from([0x1C]), enum: t.pop },
- { name: 'Scope', code: from([0x1F]), enum: t.scope },
- { name: 'T', code: from([0x20]), enum: t.t },
+ { name: 'Barrier', code: from([0x13]), enum: barrier },
+ { name: 'Cardinality', code: from([0x16]), enum: cardinality },
+ { name: 'Column', code: from([0x17]), enum: column },
+ { name: 'Direction', code: from([0x18]), enum: direction },
+ { name: 'Operator', code: from([0x19]), enum: operator },
+ { name: 'Order', code: from([0x1A]), enum: order },
+ { name: 'Pick', code: from([0x1B]), enum: pick },
+ { name: 'Pop', code: from([0x1C]), enum: pop },
+ { name: 'Scope', code: from([0x1F]), enum: scope },
+ { name: 'T', code: from([0x20]), enum: t },
];
const value_flag = from([0x00]);
diff --git
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/PathSerializer-test.js
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/PathSerializer-test.js
index c341880934..ab668dee2a 100644
---
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/PathSerializer-test.js
+++
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/PathSerializer-test.js
@@ -26,6 +26,7 @@ import assert from 'assert';
import { pathSerializer } from
'../../../lib/structure/io/binary/GraphBinary.js';
import { Traverser, P } from '../../../lib/process/traversal.js';
import { Path } from '../../../lib/structure/graph.js';
+import * as g from "../../../lib/structure/graph.js";
const { from, concat } = Buffer;