This is an automated email from the ASF dual-hosted git repository.
wangweipeng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-fury.git
The following commit(s) were added to refs/heads/main by this push:
new 417f064b feat(JavaScript): implement xlang protocol (#1487)
417f064b is described below
commit 417f064b705a55fd9fe0270b464863d54199c327
Author: weipeng <[email protected]>
AuthorDate: Thu Apr 11 22:32:03 2024 +0800
feat(JavaScript): implement xlang protocol (#1487)
<!--
**Thanks for contributing to Fury.**
**If this is your first time opening a PR on fury, you can refer to
[CONTRIBUTING.md](https://github.com/apache/incubator-fury/blob/main/CONTRIBUTING.md).**
Contribution Checklist
- The **Apache Fury (incubating)** community has restrictions on the
naming of pr titles. You can also find instructions in
[CONTRIBUTING.md](https://github.com/apache/incubator-fury/blob/main/CONTRIBUTING.md).
- Fury has a strong focus on performance. If the PR you submit will have
an impact on performance, please benchmark it first and provide the
benchmark result here.
-->
## What does this PR do?
1. Remove unsigned types which are removed in xlang protocol.
2. Rename `long int double` to `int64 int32 float64` to ensure
consistency with other languages
3. Implements the float16 writer and float16 reader.
## Related issues
## Does this PR introduce any user-facing change?
The JavaScript implementation has not been released yet, so there are no
user-facing changes.
## Benchmark
There are no fluctuations in the benchmark.
| (index) | serialize | deserialize |
|----------|-----------|-------------|
| fury | 116 | 118 |
| protobuf | 25 | 33 |
| json | 20 | 23 |
---------
Co-authored-by: wangweipeng <weipeng>
---
javascript/packages/fury/lib/classResolver.ts | 120 +++++++++++++++----
javascript/packages/fury/lib/description.ts | 132 ++++++++++-----------
javascript/packages/fury/lib/gen/any.ts | 3 +-
javascript/packages/fury/lib/gen/builder.ts | 28 +++--
javascript/packages/fury/lib/gen/collection.ts | 4 +-
javascript/packages/fury/lib/gen/datetime.ts | 4 +-
javascript/packages/fury/lib/gen/index.ts | 7 +-
javascript/packages/fury/lib/gen/number.ts | 57 +++++----
javascript/packages/fury/lib/gen/object.ts | 9 +-
javascript/packages/fury/lib/gen/oneof.ts | 115 ------------------
javascript/packages/fury/lib/gen/serializer.ts | 5 +-
javascript/packages/fury/lib/gen/set.ts | 2 +-
javascript/packages/fury/lib/gen/typedArray.ts | 17 +--
javascript/packages/fury/lib/meta.ts | 64 +++++-----
javascript/packages/fury/lib/reader/index.ts | 41 ++++++-
javascript/packages/fury/lib/referenceResolver.ts | 3 +-
javascript/packages/fury/lib/type.ts | 66 ++++++-----
.../fury/lib/{writer.ts => writer/index.ts} | 24 ++--
javascript/packages/fury/lib/writer/number.ts | 47 ++++++++
javascript/test/array.test.ts | 73 ++----------
javascript/test/binary.test.ts | 2 +-
javascript/test/datetime.test.ts | 2 +-
javascript/test/fixtures/tuple.ts | 2 +-
javascript/test/fury.test.ts | 2 +-
javascript/test/io.test.ts | 18 +--
javascript/test/number.test.ts | 86 ++------------
javascript/test/object.test.ts | 24 ++--
javascript/test/oneof.test.ts | 90 --------------
javascript/test/protocol/struct.test.ts | 4 +-
javascript/test/referenceResolve.test.ts | 5 +-
30 files changed, 447 insertions(+), 609 deletions(-)
diff --git a/javascript/packages/fury/lib/classResolver.ts
b/javascript/packages/fury/lib/classResolver.ts
index 62cc1b0b..2156640b 100644
--- a/javascript/packages/fury/lib/classResolver.ts
+++ b/javascript/packages/fury/lib/classResolver.ts
@@ -84,7 +84,7 @@ export default class SerializerResolver {
private writeStringIndex: number[] = [];
private registerSerializer(fury: Fury, description: TypeDescription) {
- return fury.classResolver.registerSerializerById(description.type,
generateSerializer(fury, description));
+ return
fury.classResolver.registerSerializerById(SerializerResolver.getTypeIdByInternalSerializerType(description.type),
generateSerializer(fury, description));
}
private initInternalSerializer(fury: Fury) {
@@ -92,27 +92,27 @@ export default class SerializerResolver {
this.registerSerializer(fury, Type.array(Type.any()));
this.registerSerializer(fury, Type.map(Type.any(), Type.any()));
this.registerSerializer(fury, Type.bool());
- this.registerSerializer(fury, Type.uint8());
this.registerSerializer(fury, Type.int8());
- this.registerSerializer(fury, Type.uint16());
this.registerSerializer(fury, Type.int16());
- this.registerSerializer(fury, Type.uint32());
this.registerSerializer(fury, Type.int32());
- this.registerSerializer(fury, Type.uint64());
+ this.registerSerializer(fury, Type.varInt32());
this.registerSerializer(fury, Type.int64());
- this.registerSerializer(fury, Type.float());
- this.registerSerializer(fury, Type.double());
+ this.registerSerializer(fury, Type.sliInt64());
+ this.registerSerializer(fury, Type.float16());
+ this.registerSerializer(fury, Type.float32());
+ this.registerSerializer(fury, Type.float64());
this.registerSerializer(fury, Type.timestamp());
- this.registerSerializer(fury, Type.date());
+ this.registerSerializer(fury, Type.duration());
this.registerSerializer(fury, Type.set(Type.any()));
this.registerSerializer(fury, Type.binary());
- this.registerSerializer(fury, Type.stringTypedArray());
- this.registerSerializer(fury, Type.boolTypedArray());
- this.registerSerializer(fury, Type.shortTypedArray());
- this.registerSerializer(fury, Type.intTypedArray());
- this.registerSerializer(fury, Type.longTypedArray());
- this.registerSerializer(fury, Type.floatTypedArray());
- this.registerSerializer(fury, Type.doubleTypedArray());
+ this.registerSerializer(fury, Type.boolArray());
+ this.registerSerializer(fury, Type.int8Array());
+ this.registerSerializer(fury, Type.int16Array());
+ this.registerSerializer(fury, Type.int32Array());
+ this.registerSerializer(fury, Type.int64Array());
+ this.registerSerializer(fury, Type.float16Array());
+ this.registerSerializer(fury, Type.float32Array());
+ this.registerSerializer(fury, Type.float64Array());
}
init(fury: Fury) {
@@ -124,7 +124,11 @@ export default class SerializerResolver {
this.writeStringIndex.fill(-1);
}
- getSerializerById(id: InternalSerializerType) {
+ getSerializerByType(type: InternalSerializerType) {
+ return
this.internalSerializer[SerializerResolver.getTypeIdByInternalSerializerType(type)];
+ }
+
+ getSerializerById(id: number) {
return this.internalSerializer[id];
}
@@ -213,37 +217,105 @@ export default class SerializerResolver {
}
if (typeof v === "number") {
- return this.getSerializerById(InternalSerializerType.DOUBLE);
+ return this.getSerializerByType(InternalSerializerType.FLOAT64);
}
if (typeof v === "bigint") {
- return this.getSerializerById(InternalSerializerType.INT64);
+ return this.getSerializerByType(InternalSerializerType.INT64);
}
if (typeof v === "boolean") {
- return this.getSerializerById(InternalSerializerType.BOOL);
+ return this.getSerializerByType(InternalSerializerType.BOOL);
}
if (v instanceof Date) {
- return this.getSerializerById(InternalSerializerType.TIMESTAMP);
+ return this.getSerializerByType(InternalSerializerType.TIMESTAMP);
}
if (typeof v === "string") {
- return this.getSerializerById(InternalSerializerType.STRING);
+ return this.getSerializerByType(InternalSerializerType.STRING);
}
if (v instanceof Map) {
- return this.getSerializerById(InternalSerializerType.MAP);
+ return this.getSerializerByType(InternalSerializerType.MAP);
}
if (v instanceof Set) {
- return this.getSerializerById(InternalSerializerType.FURY_SET);
+ return this.getSerializerByType(InternalSerializerType.SET);
}
if (Array.isArray(v)) {
- return this.getSerializerById(InternalSerializerType.ARRAY);
+ return this.getSerializerByType(InternalSerializerType.ARRAY);
}
throw new Error(`Failed to detect the Fury type from JavaScript type:
${typeof v}`);
}
+
+ static getTypeIdByInternalSerializerType(type: InternalSerializerType) {
+ switch (type) {
+ case InternalSerializerType.BOOL:
+ return 1;
+ case InternalSerializerType.INT8:
+ return 2;
+ case InternalSerializerType.INT16:
+ return 3;
+ case InternalSerializerType.INT32:
+ return 4;
+ case InternalSerializerType.VAR_INT32:
+ return 5;
+ case InternalSerializerType.INT64:
+ return 6;
+ case InternalSerializerType.VAR_INT64:
+ return 7;
+ case InternalSerializerType.SLI_INT64:
+ return 8;
+ case InternalSerializerType.FLOAT16:
+ return 9;
+ case InternalSerializerType.FLOAT32:
+ return 10;
+ case InternalSerializerType.FLOAT64:
+ return 11;
+ case InternalSerializerType.STRING:
+ return 12;
+ case InternalSerializerType.ENUM:
+ return 13;
+ case InternalSerializerType.LIST:
+ return 14;
+ case InternalSerializerType.SET:
+ return 15;
+ case InternalSerializerType.MAP:
+ return 16;
+ case InternalSerializerType.DURATION:
+ return 17;
+ case InternalSerializerType.TIMESTAMP:
+ return 18;
+ case InternalSerializerType.DECIMAL:
+ return 19;
+ case InternalSerializerType.BINARY:
+ return 20;
+ case InternalSerializerType.TUPLE:
+ case InternalSerializerType.ARRAY:
+ return 21;
+ case InternalSerializerType.BOOL_ARRAY:
+ return 22;
+ case InternalSerializerType.INT8_ARRAY:
+ return 23;
+ case InternalSerializerType.INT16_ARRAY:
+ return 24;
+ case InternalSerializerType.INT32_ARRAY:
+ return 25;
+ case InternalSerializerType.INT64_ARRAY:
+ return 26;
+ case InternalSerializerType.FLOAT16_ARRAY:
+ return 27;
+ case InternalSerializerType.FLOAT32_ARRAY:
+ return 28;
+ case InternalSerializerType.FLOAT64_ARRAY:
+ return 29;
+ case InternalSerializerType.OBJECT: // todo
+ return 256;
+ default:
+ throw new Error(`typeId is not assigned to type
${InternalSerializerType[type]}`);
+ }
+ }
}
diff --git a/javascript/packages/fury/lib/description.ts
b/javascript/packages/fury/lib/description.ts
index d332e740..de837bad 100644
--- a/javascript/packages/fury/lib/description.ts
+++ b/javascript/packages/fury/lib/description.ts
@@ -141,7 +141,7 @@ type SetProps<T> = T extends {
: unknown;
export type InputType<T> = T extends {
- type: InternalSerializerType.FURY_TYPE_TAG;
+ type: InternalSerializerType.OBJECT;
}
? Props<T>
: T extends {
@@ -154,19 +154,19 @@ export type InputType<T> = T extends {
? TupleProps<T>
: T extends {
type:
- | InternalSerializerType.UINT8
- | InternalSerializerType.UINT16
- | InternalSerializerType.UINT32
| InternalSerializerType.INT8
| InternalSerializerType.INT16
| InternalSerializerType.INT32
- | InternalSerializerType.FLOAT
- | InternalSerializerType.DOUBLE;
+ | InternalSerializerType.VAR_INT32
+ | InternalSerializerType.FLOAT16
+ | InternalSerializerType.FLOAT32
+ | InternalSerializerType.FLOAT64;
}
? number
: T extends {
- type: InternalSerializerType.UINT64
+ type: InternalSerializerType.VAR_INT64
+ | InternalSerializerType.SLI_INT64
| InternalSerializerType.INT64;
}
? bigint
@@ -175,7 +175,7 @@ export type InputType<T> = T extends {
}
? MapProps<T>
: T extends {
- type: InternalSerializerType.FURY_SET;
+ type: InternalSerializerType.SET;
}
? SetProps<T>
: T extends {
@@ -187,7 +187,7 @@ export type InputType<T> = T extends {
}
? boolean
: T extends {
- type: InternalSerializerType.DATE;
+ type: InternalSerializerType.DURATION;
}
? Date
: T extends {
@@ -195,13 +195,12 @@ export type InputType<T> = T extends {
}
? number
: T extends {
- type: InternalSerializerType.BINARY;
+ type: InternalSerializerType.ANY;
}
- ? Uint8Array
- : T extends {
- type: InternalSerializerType.ANY;
+ ? any
+ : T extends { type: InternalSerializerType.BINARY;
}
- ? any
+ ? Uint8Array
: T extends {
type: InternalSerializerType.ENUM;
}
@@ -210,7 +209,7 @@ export type InputType<T> = T extends {
} ? OneofProps<T> : unknown;
export type ResultType<T> = T extends {
- type: InternalSerializerType.FURY_TYPE_TAG;
+ type: InternalSerializerType.OBJECT;
}
? Props<T>
: T extends {
@@ -223,19 +222,18 @@ export type ResultType<T> = T extends {
? TupleProps<T>
: T extends {
type:
- | InternalSerializerType.UINT8
- | InternalSerializerType.UINT16
- | InternalSerializerType.UINT32
| InternalSerializerType.INT8
| InternalSerializerType.INT16
| InternalSerializerType.INT32
- | InternalSerializerType.FLOAT
- | InternalSerializerType.DOUBLE;
+ | InternalSerializerType.VAR_INT32
+ | InternalSerializerType.FLOAT16
+ | InternalSerializerType.FLOAT32
+ | InternalSerializerType.FLOAT64;
}
? number
: T extends {
- type: InternalSerializerType.UINT64
+ type: InternalSerializerType.SLI_INT64
| InternalSerializerType.INT64;
}
? bigint
@@ -244,7 +242,7 @@ export type ResultType<T> = T extends {
}
? MapProps<T>
: T extends {
- type: InternalSerializerType.FURY_SET;
+ type: InternalSerializerType.SET;
}
? SetProps<T>
: T extends {
@@ -256,18 +254,16 @@ export type ResultType<T> = T extends {
}
? boolean
: T extends {
- type: InternalSerializerType.DATE;
+ type: InternalSerializerType.DURATION;
}
? Date
: T extends {
type: InternalSerializerType.TIMESTAMP;
}
? number
- : T extends {
- type: InternalSerializerType.BINARY;
+ : T extends { type: InternalSerializerType.BINARY;
}
- ? Uint8Array
- : T extends {
+ ? Uint8Array : T extends {
type: InternalSerializerType.ANY;
}
? any
@@ -335,7 +331,7 @@ export const Type = {
},
set<T extends TypeDescription>(key: T) {
return {
- type: InternalSerializerType.FURY_SET as const,
+ type: InternalSerializerType.SET as const,
options: {
key,
},
@@ -348,61 +344,56 @@ export const Type = {
},
object<T extends { [key: string]: TypeDescription }>(tag: string, props?: T)
{
return {
- type: InternalSerializerType.FURY_TYPE_TAG as const,
+ type: InternalSerializerType.OBJECT as const,
options: {
tag,
props,
},
};
},
- uint8() {
+ int8() {
return {
- type: InternalSerializerType.UINT8 as const,
+ type: InternalSerializerType.INT8 as const,
};
},
- uint16() {
+ int16() {
return {
- type: InternalSerializerType.UINT16 as const,
+ type: InternalSerializerType.INT16 as const,
};
},
- uint32() {
+ int32() {
return {
- type: InternalSerializerType.UINT32 as const,
+ type: InternalSerializerType.INT32 as const,
};
},
- uint64() {
+ varInt32() {
return {
- type: InternalSerializerType.UINT64 as const,
+ type: InternalSerializerType.VAR_INT32 as const,
};
},
- int8() {
- return {
- type: InternalSerializerType.INT8 as const,
- };
- },
- int16() {
+ int64() {
return {
- type: InternalSerializerType.INT16 as const,
+ type: InternalSerializerType.INT64 as const,
};
},
- int32() {
+ sliInt64() {
return {
- type: InternalSerializerType.INT32 as const,
+ type: InternalSerializerType.SLI_INT64 as const,
};
},
- int64() {
+ float16() {
return {
- type: InternalSerializerType.INT64 as const,
+ type: InternalSerializerType.FLOAT16 as const,
};
},
- float() {
+ float32() {
return {
- type: InternalSerializerType.FLOAT as const,
+ type: InternalSerializerType.FLOAT32 as const,
};
},
- double() {
+ float64() {
return {
- type: InternalSerializerType.DOUBLE as const,
+ type: InternalSerializerType.FLOAT64 as const,
};
},
binary() {
@@ -410,9 +401,9 @@ export const Type = {
type: InternalSerializerType.BINARY as const,
};
},
- date() {
+ duration() {
return {
- type: InternalSerializerType.DATE as const,
+ type: InternalSerializerType.DURATION as const,
};
},
timestamp() {
@@ -420,39 +411,44 @@ export const Type = {
type: InternalSerializerType.TIMESTAMP as const,
};
},
- stringTypedArray() {
+ boolArray() {
+ return {
+ type: InternalSerializerType.BOOL_ARRAY as const,
+ };
+ },
+ int8Array() {
return {
- type: InternalSerializerType.FURY_STRING_ARRAY as const,
+ type: InternalSerializerType.INT8_ARRAY as const,
};
},
- boolTypedArray() {
+ int16Array() {
return {
- type: InternalSerializerType.FURY_PRIMITIVE_BOOL_ARRAY as const,
+ type: InternalSerializerType.INT16_ARRAY as const,
};
},
- shortTypedArray() {
+ int32Array() {
return {
- type: InternalSerializerType.FURY_PRIMITIVE_SHORT_ARRAY as const,
+ type: InternalSerializerType.INT32_ARRAY as const,
};
},
- intTypedArray() {
+ int64Array() {
return {
- type: InternalSerializerType.FURY_PRIMITIVE_INT_ARRAY as const,
+ type: InternalSerializerType.INT64_ARRAY as const,
};
},
- longTypedArray() {
+ float16Array() {
return {
- type: InternalSerializerType.FURY_PRIMITIVE_LONG_ARRAY as const,
+ type: InternalSerializerType.FLOAT16_ARRAY as const,
};
},
- floatTypedArray() {
+ float32Array() {
return {
- type: InternalSerializerType.FURY_PRIMITIVE_FLOAT_ARRAY as const,
+ type: InternalSerializerType.FLOAT32_ARRAY as const,
};
},
- doubleTypedArray() {
+ float64Array() {
return {
- type: InternalSerializerType.FURY_PRIMITIVE_DOUBLE_ARRAY as const,
+ type: InternalSerializerType.FLOAT64_ARRAY as const,
};
},
};
diff --git a/javascript/packages/fury/lib/gen/any.ts
b/javascript/packages/fury/lib/gen/any.ts
index bb6c8d54..cc3900fb 100644
--- a/javascript/packages/fury/lib/gen/any.ts
+++ b/javascript/packages/fury/lib/gen/any.ts
@@ -25,6 +25,7 @@ import { InternalSerializerType, RefFlags, Serializer } from
"../type";
import { Scope } from "./scope";
import Fury from "../fury";
import { Meta, getMeta } from "../meta";
+import SerializerResolver from "../classResolver";
export class AnySerializer {
meta: Meta;
@@ -44,7 +45,7 @@ export class AnySerializer {
detectSerializer() {
const typeId = this.fury.binaryReader.int16();
let serializer: Serializer;
- if (typeId === InternalSerializerType.FURY_TYPE_TAG) {
+ if (typeId ===
SerializerResolver.getTypeIdByInternalSerializerType(InternalSerializerType.OBJECT))
{
const tag = this.fury.classResolver.readTag(this.fury.binaryReader)();
serializer = this.fury.classResolver.getSerializerByTag(tag);
} else {
diff --git a/javascript/packages/fury/lib/gen/builder.ts
b/javascript/packages/fury/lib/gen/builder.ts
index 1811852e..9859dd88 100644
--- a/javascript/packages/fury/lib/gen/builder.ts
+++ b/javascript/packages/fury/lib/gen/builder.ts
@@ -87,12 +87,16 @@ class BinaryReaderBuilder {
return `${this.holder}.stringOfVarUInt32()`;
}
- double() {
- return `${this.holder}.double()`;
+ float64() {
+ return `${this.holder}.float64()`;
}
- float() {
- return `${this.holder}.float()`;
+ float32() {
+ return `${this.holder}.float32()`;
+ }
+
+ float16() {
+ return `${this.holder}.float16()`;
}
uint16() {
@@ -115,8 +119,8 @@ class BinaryReaderBuilder {
return `${this.holder}.int64()`;
}
- sliLong() {
- return `${this.holder}.sliLong()`;
+ sliInt64() {
+ return `${this.holder}.sliInt64()`;
}
uint32() {
@@ -205,20 +209,20 @@ class BinaryWriterBuilder {
return `${this.holder}.buffer(${v})`;
}
- double(v: number | string) {
- return `${this.holder}.double(${v})`;
+ float64(v: number | string) {
+ return `${this.holder}.float64(${v})`;
}
- float(v: number | string) {
- return `${this.holder}.float(${v})`;
+ float32(v: number | string) {
+ return `${this.holder}.float32(${v})`;
}
int64(v: number | string) {
return `${this.holder}.int64(${v})`;
}
- sliLong(v: number | string) {
- return `${this.holder}.sliLong(${v})`;
+ sliInt64(v: number | string) {
+ return `${this.holder}.sliInt64(${v})`;
}
uint32(v: number | string) {
diff --git a/javascript/packages/fury/lib/gen/collection.ts
b/javascript/packages/fury/lib/gen/collection.ts
index 7dfe2297..0b53edb0 100644
--- a/javascript/packages/fury/lib/gen/collection.ts
+++ b/javascript/packages/fury/lib/gen/collection.ts
@@ -118,7 +118,7 @@ class CollectionAnySerializer {
let serializer: Serializer;
if (isSame) {
- serializer =
this.fury.classResolver.getSerializerById(this.fury.binaryReader.int16());
+ serializer =
this.fury.classResolver.getSerializerByType(this.fury.binaryReader.int16());
}
const len = this.fury.binaryReader.varUInt32();
const result = createCollection(len);
@@ -134,7 +134,7 @@ class CollectionAnySerializer {
}
}
if (!isSame) {
- serializer =
this.fury.classResolver.getSerializerById(this.fury.binaryReader.int16());
+ serializer =
this.fury.classResolver.getSerializerByType(this.fury.binaryReader.int16());
}
accessor(result, index, serializer!.read());
}
diff --git a/javascript/packages/fury/lib/gen/datetime.ts
b/javascript/packages/fury/lib/gen/datetime.ts
index bce8239c..cea0dd26 100644
--- a/javascript/packages/fury/lib/gen/datetime.ts
+++ b/javascript/packages/fury/lib/gen/datetime.ts
@@ -44,7 +44,7 @@ class TimestampSerializerGenerator extends
BaseSerializerGenerator {
}
}
-class DateSerializerGenerator extends BaseSerializerGenerator {
+class DurationSerializerGenerator extends BaseSerializerGenerator {
description: TypeDescription;
constructor(description: TypeDescription, builder: CodecBuilder, scope:
Scope) {
@@ -72,5 +72,5 @@ class DateSerializerGenerator extends BaseSerializerGenerator
{
}
}
-CodegenRegistry.register(InternalSerializerType.DATE, DateSerializerGenerator);
+CodegenRegistry.register(InternalSerializerType.DURATION,
DurationSerializerGenerator);
CodegenRegistry.register(InternalSerializerType.TIMESTAMP,
TimestampSerializerGenerator);
diff --git a/javascript/packages/fury/lib/gen/index.ts
b/javascript/packages/fury/lib/gen/index.ts
index c482c179..ee449b75 100644
--- a/javascript/packages/fury/lib/gen/index.ts
+++ b/javascript/packages/fury/lib/gen/index.ts
@@ -35,7 +35,6 @@ import "./tuple";
import "./typedArray";
import Fury from "../fury";
import "./enum";
-import "./oneof";
export { AnySerializer } from "./any";
@@ -61,7 +60,7 @@ export const generate = (fury: Fury, description:
TypeDescription) => {
};
function regDependencies(fury: Fury, description: TypeDescription) {
- if (description.type === InternalSerializerType.FURY_TYPE_TAG) {
+ if (description.type === InternalSerializerType.OBJECT) {
const options = (<ObjectTypeDescription>description).options;
if (options.props) {
fury.classResolver.registerSerializerByTag(options.tag);
@@ -75,7 +74,7 @@ function regDependencies(fury: Fury, description:
TypeDescription) {
if (description.type === InternalSerializerType.ARRAY) {
regDependencies(fury, (<ArrayTypeDescription>description).options.inner);
}
- if (description.type === InternalSerializerType.FURY_SET) {
+ if (description.type === InternalSerializerType.SET) {
regDependencies(fury, (<SetTypeDescription>description).options.key);
}
if (description.type === InternalSerializerType.MAP) {
@@ -99,7 +98,7 @@ function regDependencies(fury: Fury, description:
TypeDescription) {
export const generateSerializer = (fury: Fury, description: TypeDescription)
=> {
regDependencies(fury, description);
- if (description.type === InternalSerializerType.FURY_TYPE_TAG) {
+ if (description.type === InternalSerializerType.OBJECT) {
return
fury.classResolver.getSerializerByTag((<ObjectTypeDescription>description).options.tag);
}
const func = generate(fury, description);
diff --git a/javascript/packages/fury/lib/gen/number.ts
b/javascript/packages/fury/lib/gen/number.ts
index 1ca410a5..135e6311 100644
--- a/javascript/packages/fury/lib/gen/number.ts
+++ b/javascript/packages/fury/lib/gen/number.ts
@@ -43,63 +43,62 @@ function buildNumberSerializer(writeFun: (builder:
CodecBuilder, accessor: strin
};
}
-CodegenRegistry.register(InternalSerializerType.UINT8,
- buildNumberSerializer(
- (builder, accessor) => builder.writer.uint8(accessor),
- builder => builder.reader.uint8()
- )
-);
CodegenRegistry.register(InternalSerializerType.INT8,
buildNumberSerializer(
(builder, accessor) => builder.writer.int8(accessor),
builder => builder.reader.int8()
)
);
-CodegenRegistry.register(InternalSerializerType.UINT16,
- buildNumberSerializer(
- (builder, accessor) => builder.writer.uint16(accessor),
- builder => builder.reader.uint16()
- )
-);
+
CodegenRegistry.register(InternalSerializerType.INT16,
buildNumberSerializer(
(builder, accessor) => builder.writer.int16(accessor),
builder => builder.reader.int16()
)
);
-CodegenRegistry.register(InternalSerializerType.UINT32,
- buildNumberSerializer(
- (builder, accessor) => builder.writer.uint32(accessor),
- builder => builder.reader.uint32()
- )
-);
+
CodegenRegistry.register(InternalSerializerType.INT32,
buildNumberSerializer(
(builder, accessor) => builder.writer.int32(accessor),
builder => builder.reader.int32()
)
);
-CodegenRegistry.register(InternalSerializerType.UINT64,
+
+CodegenRegistry.register(InternalSerializerType.VAR_INT32,
buildNumberSerializer(
- (builder, accessor) => builder.writer.varUInt64(accessor),
- builder => builder.reader.varUInt64()
+ (builder, accessor) => builder.writer.varInt32(accessor),
+ builder => builder.reader.varInt32()
)
);
+
CodegenRegistry.register(InternalSerializerType.INT64,
buildNumberSerializer(
- (builder, accessor) => builder.writer.sliLong(accessor),
- builder => builder.reader.sliLong()
+ (builder, accessor) => builder.writer.sliInt64(accessor),
+ builder => builder.reader.sliInt64()
+ )
+);
+
+CodegenRegistry.register(InternalSerializerType.SLI_INT64,
+ buildNumberSerializer(
+ (builder, accessor) => builder.writer.sliInt64(accessor),
+ builder => builder.reader.sliInt64()
+ )
+);
+CodegenRegistry.register(InternalSerializerType.FLOAT16,
+ buildNumberSerializer(
+ (builder, accessor) => builder.writer.float32(accessor),
+ builder => builder.reader.float16()
)
);
-CodegenRegistry.register(InternalSerializerType.FLOAT,
+CodegenRegistry.register(InternalSerializerType.FLOAT32,
buildNumberSerializer(
- (builder, accessor) => builder.writer.float(accessor),
- builder => builder.reader.float()
+ (builder, accessor) => builder.writer.float32(accessor),
+ builder => builder.reader.float32()
)
);
-CodegenRegistry.register(InternalSerializerType.DOUBLE,
+CodegenRegistry.register(InternalSerializerType.FLOAT64,
buildNumberSerializer(
- (builder, accessor) => builder.writer.double(accessor),
- builder => builder.reader.double()
+ (builder, accessor) => builder.writer.float64(accessor),
+ builder => builder.reader.float64()
)
);
diff --git a/javascript/packages/fury/lib/gen/object.ts
b/javascript/packages/fury/lib/gen/object.ts
index 2258dee7..3ea2eb9b 100644
--- a/javascript/packages/fury/lib/gen/object.ts
+++ b/javascript/packages/fury/lib/gen/object.ts
@@ -24,6 +24,7 @@ import { ObjectTypeDescription, TypeDescription } from
"../description";
import { fromString } from "../platformBuffer";
import { CodegenRegistry } from "./router";
import { BaseSerializerGenerator, RefState } from "./serializer";
+import SerializerResolver from "../classResolver";
function computeFieldHash(hash: number, id: number): number {
let newHash = (hash) * 31 + (id);
@@ -48,10 +49,8 @@ const computeStringHash = (str: string) => {
const computeStructHash = (description: TypeDescription) => {
let hash = 17;
for (const [, value] of
Object.entries((<ObjectTypeDescription>description).options.props).sort()) {
- let id = value.type;
- if (value.type === InternalSerializerType.ARRAY || value.type ===
InternalSerializerType.TUPLE || value.type === InternalSerializerType.MAP) {
- id = Math.floor(value.type); // TODO add map key&value type into schema
hash
- } else if (value.type === InternalSerializerType.FURY_TYPE_TAG) {
+ let id = SerializerResolver.getTypeIdByInternalSerializerType(value.type);
+ if (value.type === InternalSerializerType.OBJECT) {
id = computeStringHash((<ObjectTypeDescription>value).options.tag);
}
hash = computeFieldHash(hash, id);
@@ -139,4 +138,4 @@ class ObjectSerializerGenerator extends
BaseSerializerGenerator {
}
}
-CodegenRegistry.register(InternalSerializerType.FURY_TYPE_TAG,
ObjectSerializerGenerator);
+CodegenRegistry.register(InternalSerializerType.OBJECT,
ObjectSerializerGenerator);
diff --git a/javascript/packages/fury/lib/gen/oneof.ts
b/javascript/packages/fury/lib/gen/oneof.ts
deleted file mode 100644
index 4cb8b93b..00000000
--- a/javascript/packages/fury/lib/gen/oneof.ts
+++ /dev/null
@@ -1,115 +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.
- */
-
-import { OneofTypeDescription, Type, TypeDescription } from "../description";
-import { CodecBuilder } from "./builder";
-import { BaseSerializerGenerator } from "./serializer";
-import { CodegenRegistry } from "./router";
-import { InternalSerializerType, RefFlags } from "../type";
-import { Scope } from "./scope";
-
-class OneofSerializerGenerator extends BaseSerializerGenerator {
- description: OneofTypeDescription;
-
- constructor(description: TypeDescription, builder: CodecBuilder, scope:
Scope) {
- super(description, builder, scope);
- this.description = <OneofTypeDescription>description;
- }
-
- writeStmt(): string {
- throw new Error("Type oneof writeStmt can't inline");
- }
-
- readStmt(): string {
- throw new Error("Type oneof readStmt can't inline");
- }
-
- toWriteEmbed(accessor: string, excludeHead = false) {
- if (excludeHead) {
- throw new Error("Oneof can't excludeHead");
- }
- if (Object.values(this.description.options.inner).length < 1) {
- throw new Error("Type oneof must contain at least one field");
- }
- const stmts = [
- `if (${accessor} === null || ${accessor} === undefined) {
- ${this.builder.writer.int8(RefFlags.NullFlag)};
- }`,
- ];
- Object.entries(this.description.options.inner).forEach(([key, value]) => {
- const InnerGeneratorClass = CodegenRegistry.get(value.type);
- if (!InnerGeneratorClass) {
- throw new Error(`${value.type} generator not exists`);
- }
- const innerGenerator = new InnerGeneratorClass(value, this.builder,
this.scope);
- stmts.push(` if (${CodecBuilder.safeString(key)} in ${accessor}) {
-
${innerGenerator.toWriteEmbed(`${accessor}${CodecBuilder.safePropAccessor(key)}`)}
- }`);
- });
- stmts.push(`
- {
- ${this.builder.writer.int8(RefFlags.NullFlag)};
- }
- `);
- return stmts.join("else");
- }
-
- toReadEmbed(accessor: (expr: string) => string, excludeHead = false): string
{
- const AnyGeneratorClass = CodegenRegistry.get(InternalSerializerType.ANY)!;
- const anyGenerator = new AnyGeneratorClass(Type.any(), this.builder,
this.scope);
- return anyGenerator.toReadEmbed(accessor, excludeHead);
- }
-
- toSerializer() {
- this.scope.assertNameNotDuplicate("read");
- this.scope.assertNameNotDuplicate("readInner");
- this.scope.assertNameNotDuplicate("write");
- this.scope.assertNameNotDuplicate("writeInner");
-
- const declare = `
- const readInner = (fromRef) => {
- throw new Error("Type oneof readInner can't call directly");
- };
- const read = () => {
- ${this.toReadEmbed(expr => `return ${expr}`)}
- };
- const writeInner = (v) => {
- throw new Error("Type oneof writeInner can't call directly");
- };
- const write = (v) => {
- ${this.toWriteEmbed("v")}
- };
- `;
- return `
- return function (fury, external) {
- ${this.scope.generate()}
- ${declare}
- return {
- read,
- readInner,
- write,
- writeInner,
- meta: ${JSON.stringify(this.builder.meta(this.description))}
- };
- }
- `;
- }
-}
-
-CodegenRegistry.register(InternalSerializerType.ONEOF,
OneofSerializerGenerator);
diff --git a/javascript/packages/fury/lib/gen/serializer.ts
b/javascript/packages/fury/lib/gen/serializer.ts
index 16d7020e..6439aaad 100644
--- a/javascript/packages/fury/lib/gen/serializer.ts
+++ b/javascript/packages/fury/lib/gen/serializer.ts
@@ -20,6 +20,7 @@
import { InternalSerializerType } from "../type";
import { CodecBuilder } from "./builder";
import { makeHead } from "../referenceResolver";
+import SerializerResolver from "../classResolver";
import { RefFlags } from "../type";
import { Scope } from "./scope";
import { TypeDescription, ObjectTypeDescription } from "../description";
@@ -126,7 +127,7 @@ export abstract class BaseSerializerGenerator implements
SerializerGenerator {
const meta = this.builder.meta(this.description);
const maybeTag = () => {
- if (this.description.type !== InternalSerializerType.FURY_TYPE_TAG) {
+ if (this.description.type !== InternalSerializerType.OBJECT) {
return "";
}
const safeTag =
CodecBuilder.replaceBackslashAndQuote((<ObjectTypeDescription>
this.description).options.tag);
@@ -174,7 +175,7 @@ export abstract class BaseSerializerGenerator implements
SerializerGenerator {
switch (${refFlag}) {
case ${RefFlags.NotNullValueFlag}:
case ${RefFlags.RefValueFlag}:
- if (${this.builder.reader.int16()} ===
${InternalSerializerType.FURY_TYPE_TAG}) {
+ if (${this.builder.reader.int16()} ===
${SerializerResolver.getTypeIdByInternalSerializerType(InternalSerializerType.OBJECT)})
{
${this.builder.classResolver.readTag(this.builder.reader.ownName())};
}
${stmt(accessor, RefState.fromCondition(`${refFlag} ===
${RefFlags.RefValueFlag}`))}
diff --git a/javascript/packages/fury/lib/gen/set.ts
b/javascript/packages/fury/lib/gen/set.ts
index 6d806a55..42228d65 100644
--- a/javascript/packages/fury/lib/gen/set.ts
+++ b/javascript/packages/fury/lib/gen/set.ts
@@ -49,4 +49,4 @@ class SetSerializerGenerator extends
CollectionSerializerGenerator {
}
}
-CodegenRegistry.register(InternalSerializerType.FURY_SET,
SetSerializerGenerator);
+CodegenRegistry.register(InternalSerializerType.SET, SetSerializerGenerator);
diff --git a/javascript/packages/fury/lib/gen/typedArray.ts
b/javascript/packages/fury/lib/gen/typedArray.ts
index 57d8c0fa..05631fc3 100644
--- a/javascript/packages/fury/lib/gen/typedArray.ts
+++ b/javascript/packages/fury/lib/gen/typedArray.ts
@@ -40,7 +40,7 @@ function build(inner: TypeDescription) {
private innerGenerator() {
const InnerGeneratorClass = CodegenRegistry.get(inner.type);
if (!InnerGeneratorClass) {
- throw new Error(`${inner.type} generator not exists`);
+ throw new Error(`${InternalSerializerType[inner.type]} generator not
exists`);
}
return new InnerGeneratorClass(inner, this.builder, this.scope);
}
@@ -77,10 +77,11 @@ function build(inner: TypeDescription) {
};
}
-CodegenRegistry.register(InternalSerializerType.FURY_STRING_ARRAY,
build(Type.string()));
-CodegenRegistry.register(InternalSerializerType.FURY_PRIMITIVE_BOOL_ARRAY,
build(Type.bool()));
-CodegenRegistry.register(InternalSerializerType.FURY_PRIMITIVE_LONG_ARRAY,
build(Type.int64()));
-CodegenRegistry.register(InternalSerializerType.FURY_PRIMITIVE_INT_ARRAY,
build(Type.int32()));
-CodegenRegistry.register(InternalSerializerType.FURY_PRIMITIVE_FLOAT_ARRAY,
build(Type.float()));
-CodegenRegistry.register(InternalSerializerType.FURY_PRIMITIVE_DOUBLE_ARRAY,
build(Type.double()));
-CodegenRegistry.register(InternalSerializerType.FURY_PRIMITIVE_SHORT_ARRAY,
build(Type.int16()));
+CodegenRegistry.register(InternalSerializerType.BOOL_ARRAY,
build(Type.bool()));
+CodegenRegistry.register(InternalSerializerType.INT8_ARRAY,
build(Type.int8()));
+CodegenRegistry.register(InternalSerializerType.INT16_ARRAY,
build(Type.int16()));
+CodegenRegistry.register(InternalSerializerType.INT32_ARRAY,
build(Type.int32()));
+CodegenRegistry.register(InternalSerializerType.INT64_ARRAY,
build(Type.int64()));
+CodegenRegistry.register(InternalSerializerType.FLOAT16_ARRAY,
build(Type.float16()));
+CodegenRegistry.register(InternalSerializerType.FLOAT32_ARRAY,
build(Type.float32()));
+CodegenRegistry.register(InternalSerializerType.FLOAT64_ARRAY,
build(Type.float64()));
diff --git a/javascript/packages/fury/lib/meta.ts
b/javascript/packages/fury/lib/meta.ts
index 4c8234ae..2e8978f9 100644
--- a/javascript/packages/fury/lib/meta.ts
+++ b/javascript/packages/fury/lib/meta.ts
@@ -34,77 +34,76 @@ export const getMeta = (description: TypeDescription, fury:
Fury): Meta => {
case InternalSerializerType.STRING:
return {
fixedSize: 8,
- needToWriteRef: Boolean(fury.config.refTracking) && false,
+ needToWriteRef: false,
type,
};
case InternalSerializerType.ARRAY:
return {
fixedSize: 7,
- needToWriteRef: Boolean(fury.config.refTracking) && true,
+ needToWriteRef: Boolean(fury.config.refTracking),
type,
};
case InternalSerializerType.TUPLE:
return {
fixedSize: 7,
- needToWriteRef: Boolean(fury.config.refTracking) && true,
+ needToWriteRef: Boolean(fury.config.refTracking),
type,
};
case InternalSerializerType.MAP:
return {
fixedSize: 7,
- needToWriteRef: Boolean(fury.config.refTracking) && true,
+ needToWriteRef: Boolean(fury.config.refTracking),
type,
};
case InternalSerializerType.BOOL:
- case InternalSerializerType.UINT8:
case InternalSerializerType.INT8:
return {
fixedSize: 4,
- needToWriteRef: Boolean(fury.config.refTracking) && false,
+ needToWriteRef: false,
type,
};
- case InternalSerializerType.UINT16:
case InternalSerializerType.INT16:
+ case InternalSerializerType.FLOAT16:
return {
fixedSize: 5,
- needToWriteRef: Boolean(fury.config.refTracking) && false,
+ needToWriteRef: false,
type,
};
- case InternalSerializerType.UINT32:
+ case InternalSerializerType.VAR_INT32:
case InternalSerializerType.INT32:
- case InternalSerializerType.FLOAT:
+ case InternalSerializerType.FLOAT32:
return {
fixedSize: 7,
- needToWriteRef: Boolean(fury.config.refTracking) && false,
+ needToWriteRef: false,
type,
};
- case InternalSerializerType.UINT64:
+ case InternalSerializerType.SLI_INT64:
case InternalSerializerType.INT64:
- case InternalSerializerType.DOUBLE:
+ case InternalSerializerType.FLOAT64:
return {
fixedSize: 11,
- needToWriteRef: Boolean(fury.config.refTracking) && false,
+ needToWriteRef: false,
type,
};
case InternalSerializerType.BINARY:
return {
fixedSize: 8,
- needToWriteRef: Boolean(fury.config.refTracking) && true,
+ needToWriteRef: Boolean(fury.config.refTracking),
type,
};
- case InternalSerializerType.DATE:
+ case InternalSerializerType.DURATION:
return {
fixedSize: 7,
- needToWriteRef: Boolean(fury.config.refTracking) && false,
+ needToWriteRef: false,
type,
};
case InternalSerializerType.TIMESTAMP:
return {
fixedSize: 11,
- needToWriteRef: Boolean(fury.config.refTracking) && false,
+ needToWriteRef: false,
type,
};
- case InternalSerializerType.FURY_TYPE_TAG:
+ case InternalSerializerType.OBJECT:
{
const options = (<ObjectTypeDescription>description).options;
let fixedSize = ClassResolver.tagBuffer(options.tag).byteLength + 8;
@@ -115,40 +114,41 @@ export const getMeta = (description: TypeDescription,
fury: Fury): Meta => {
}
return {
fixedSize,
- needToWriteRef: Boolean(fury.config.refTracking) && true,
+ needToWriteRef: Boolean(fury.config.refTracking),
type,
};
}
- case InternalSerializerType.FURY_SET:
+ case InternalSerializerType.SET:
return {
fixedSize: 7,
- needToWriteRef: Boolean(fury.config.refTracking) && true,
+ needToWriteRef: Boolean(fury.config.refTracking),
type,
};
- case InternalSerializerType.FURY_PRIMITIVE_BOOL_ARRAY:
- case InternalSerializerType.FURY_PRIMITIVE_SHORT_ARRAY:
- case InternalSerializerType.FURY_PRIMITIVE_INT_ARRAY:
- case InternalSerializerType.FURY_PRIMITIVE_LONG_ARRAY:
- case InternalSerializerType.FURY_PRIMITIVE_FLOAT_ARRAY:
- case InternalSerializerType.FURY_PRIMITIVE_DOUBLE_ARRAY:
- case InternalSerializerType.FURY_STRING_ARRAY:
+ case InternalSerializerType.BOOL_ARRAY:
+ case InternalSerializerType.INT8_ARRAY:
+ case InternalSerializerType.INT16_ARRAY:
+ case InternalSerializerType.INT32_ARRAY:
+ case InternalSerializerType.INT64_ARRAY:
+ case InternalSerializerType.FLOAT16_ARRAY:
+ case InternalSerializerType.FLOAT32_ARRAY:
+ case InternalSerializerType.FLOAT64_ARRAY:
return {
fixedSize: 7,
- needToWriteRef: Boolean(fury.config.refTracking) && true,
+ needToWriteRef: Boolean(fury.config.refTracking),
type,
};
case InternalSerializerType.ONEOF:
case InternalSerializerType.ANY:
return {
fixedSize: 11,
- needToWriteRef: Boolean(fury.config.refTracking) && true,
+ needToWriteRef: Boolean(fury.config.refTracking),
type,
};
case InternalSerializerType.ENUM:
return {
fixedSize: 7,
- needToWriteRef: Boolean(fury.config.refTracking) && false,
+ needToWriteRef: false,
type,
};
default:
diff --git a/javascript/packages/fury/lib/reader/index.ts
b/javascript/packages/fury/lib/reader/index.ts
index e0df6000..614eecbf 100644
--- a/javascript/packages/fury/lib/reader/index.ts
+++ b/javascript/packages/fury/lib/reader/index.ts
@@ -90,7 +90,7 @@ export const BinaryReader = (config: Config) => {
return result;
}
- function sliLong() {
+ function sliInt64() {
const i = dataView.getUint32(cursor, true);
if ((i & 0b1) != 0b1) {
cursor += 4;
@@ -100,13 +100,13 @@ export const BinaryReader = (config: Config) => {
return varInt64();
}
- function float() {
+ function float32() {
const result = dataView.getFloat32(cursor, true);
cursor += 4;
return result;
}
- function double() {
+ function float64() {
const result = dataView.getFloat64(cursor, true);
cursor += 8;
return result;
@@ -298,6 +298,34 @@ export const BinaryReader = (config: Config) => {
return (v >> 1n) ^ -(v & 1n); // zigZag decode
}
+ function float16() {
+ const asUint16 = uint16();
+ const sign = asUint16 >> 15;
+ const exponent = (asUint16 >> 10) & 0x1F;
+ const mantissa = asUint16 & 0x3FF;
+
+ // IEEE 754-2008
+ if (exponent === 0) {
+ if (mantissa === 0) {
+ // +-0
+ return sign === 0 ? 0 : -0;
+ } else {
+ // Denormalized number
+ return (sign === 0 ? 1 : -1) * mantissa * 2 ** (1 - 15 - 10);
+ }
+ } else if (exponent === 31) {
+ if (mantissa === 0) {
+ // Infinity
+ return sign === 0 ? Infinity : -Infinity;
+ } else {
+ // NaN
+ return NaN;
+ }
+ } else {
+ // Normalized number
+ return (sign === 0 ? 1 : -1) * (1 + mantissa * 2 ** -10) * 2 **
(exponent - 15);
+ }
+ }
return {
getCursor: () => cursor,
setCursor: (v: number) => (cursor = v),
@@ -314,15 +342,16 @@ export const BinaryReader = (config: Config) => {
stringUtf8,
stringLatin1,
stringOfVarUInt32,
- double,
- float,
+ float64,
+ float32,
uint16,
int16,
uint64,
skip,
int64,
- sliLong,
+ sliInt64,
uint32,
int32,
+ float16,
};
};
diff --git a/javascript/packages/fury/lib/referenceResolver.ts
b/javascript/packages/fury/lib/referenceResolver.ts
index d826d724..cc27706f 100644
--- a/javascript/packages/fury/lib/referenceResolver.ts
+++ b/javascript/packages/fury/lib/referenceResolver.ts
@@ -23,9 +23,10 @@ import {
BinaryWriter,
InternalSerializerType,
} from "./type";
+import SerializerResolver from "./classResolver";
export const makeHead = (flag: RefFlags, type: InternalSerializerType) => {
- return (((Math.floor(type) << 16) >>> 16) << 8) | ((flag << 24) >>> 24);
+ return (((SerializerResolver.getTypeIdByInternalSerializerType(type) << 16)
>>> 16) << 8) | ((flag << 24) >>> 24);
};
export const ReferenceResolver = (
diff --git a/javascript/packages/fury/lib/type.ts
b/javascript/packages/fury/lib/type.ts
index fd893af0..88881e6e 100644
--- a/javascript/packages/fury/lib/type.ts
+++ b/javascript/packages/fury/lib/type.ts
@@ -25,36 +25,42 @@ export type BinaryWriter = ReturnType<typeof BinaryWriter>;
export type BinaryReader = ReturnType<typeof BinaryReader>;
export enum InternalSerializerType {
- STRING = 13,
- ARRAY = 25,
- TUPLE = 25.1,
- MAP = 30,
- BOOL = 1,
- UINT8 = 2,
- INT8 = 3,
- UINT16 = 4,
- INT16 = 5,
- UINT32 = 6,
- INT32 = 7,
- UINT64 = 8,
- INT64 = 9,
- FLOAT = 11,
- DOUBLE = 12,
- BINARY = 14,
- DATE = 16,
- TIMESTAMP = 18,
- ENUM = 19, // The cross-language enum has not yet been determined, this is
not the final value, it will change later
- FURY_TYPE_TAG = 256,
- FURY_SET = 257,
- FURY_PRIMITIVE_BOOL_ARRAY = 258,
- FURY_PRIMITIVE_SHORT_ARRAY = 259,
- FURY_PRIMITIVE_INT_ARRAY = 260,
- FURY_PRIMITIVE_LONG_ARRAY = 261,
- FURY_PRIMITIVE_FLOAT_ARRAY = 262,
- FURY_PRIMITIVE_DOUBLE_ARRAY = 263,
- FURY_STRING_ARRAY = 264,
- ANY = -1,
- ONEOF = -2,
+ // primitive type
+ BOOL,
+ INT8,
+ INT16,
+ INT32,
+ VAR_INT32,
+ INT64,
+ VAR_INT64,
+ SLI_INT64,
+ FLOAT16,
+ FLOAT32,
+ FLOAT64,
+ STRING,
+ ENUM,
+ LIST,
+ SET,
+ MAP,
+ DURATION,
+ TIMESTAMP,
+ DECIMAL,
+ BINARY,
+ ARRAY,
+ BOOL_ARRAY,
+ INT8_ARRAY,
+ INT16_ARRAY,
+ INT32_ARRAY,
+ INT64_ARRAY,
+ FLOAT16_ARRAY,
+ FLOAT32_ARRAY,
+ FLOAT64_ARRAY,
+ OBJECT,
+
+ // alias type, only use by javascript
+ ANY,
+ ONEOF,
+ TUPLE,
}
export enum ConfigFlags {
diff --git a/javascript/packages/fury/lib/writer.ts
b/javascript/packages/fury/lib/writer/index.ts
similarity index 95%
rename from javascript/packages/fury/lib/writer.ts
rename to javascript/packages/fury/lib/writer/index.ts
index e329f69e..651e2d8c 100644
--- a/javascript/packages/fury/lib/writer.ts
+++ b/javascript/packages/fury/lib/writer/index.ts
@@ -17,9 +17,10 @@
* under the License.
*/
-import { Config, HalfMaxInt32, HalfMinInt32, LATIN1, UTF8 } from "./type";
-import { PlatformBuffer, alloc, strByteLength } from "./platformBuffer";
-import { OwnershipError } from "./error";
+import { Config, HalfMaxInt32, HalfMinInt32, LATIN1, UTF8 } from "../type";
+import { PlatformBuffer, alloc, strByteLength } from "../platformBuffer";
+import { OwnershipError } from "../error";
+import { toFloat16 } from "./number";
const MAX_POOL_SIZE = 1024 * 1024 * 3; // 3MB
@@ -102,7 +103,7 @@ export const BinaryWriter = (config: Config) => {
cursor += 8;
}
- function sliLong(v: bigint | number) {
+ function sliInt64(v: bigint | number) {
if (v <= HalfMaxInt32 && v >= HalfMinInt32) {
// write:
// 00xxx -> 0xxx
@@ -120,12 +121,12 @@ export const BinaryWriter = (config: Config) => {
}
}
- function float(v: number) {
+ function float32(v: number) {
dataView.setFloat32(cursor, v, true);
cursor += 4;
}
- function double(v: number) {
+ function float64(v: number) {
dataView.setFloat64(cursor, v, true);
cursor += 8;
}
@@ -301,6 +302,10 @@ export const BinaryWriter = (config: Config) => {
};
}
+ function float16(value: number) {
+ uint16(toFloat16(value));
+ }
+
function getCursor() {
return cursor;
}
@@ -339,10 +344,11 @@ export const BinaryWriter = (config: Config) => {
bufferWithoutMemCheck,
uint64,
buffer,
- double,
- float,
+ float16,
+ float64,
+ float32,
int64,
- sliLong,
+ sliInt64,
uint32,
int32,
getCursor,
diff --git a/javascript/packages/fury/lib/writer/number.ts
b/javascript/packages/fury/lib/writer/number.ts
new file mode 100644
index 00000000..a9acab3c
--- /dev/null
+++ b/javascript/packages/fury/lib/writer/number.ts
@@ -0,0 +1,47 @@
+/*
+ * 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 float32View = new Float32Array(1);
+const int32View = new Int32Array(float32View.buffer);
+
+export function toFloat16(value: number) {
+ float32View[0] = value;
+ const floatValue = int32View[0];
+ const sign = (floatValue >>> 16) & 0x8000; // sign only
+ const exponent = ((floatValue >>> 23) & 0xff) - 127; // extract exponent
from floatValue
+ const significand = floatValue & 0x7fffff; // extract significand from
floatValue
+
+ if (exponent === 128) { // floatValue is NaN or Infinity
+ return sign | ((exponent === 128) ? 0x7c00 : 0x7fff);
+ }
+
+ if (exponent > 15) {
+ return sign | 0x7c00; // return Infinity
+ }
+
+ if (exponent < -14) {
+ return sign | 0x3ff; // returns ±max subnormal
+ }
+
+ if (exponent <= 0) {
+ return sign | ((significand | 0x800000) >> (1 - exponent + 10));
+ }
+
+ return sign | ((exponent + 15) << 10) | (significand >> 13);
+}
diff --git a/javascript/test/array.test.ts b/javascript/test/array.test.ts
index 6646e431..bee5b189 100644
--- a/javascript/test/array.test.ts
+++ b/javascript/test/array.test.ts
@@ -41,26 +41,23 @@ describe('array', () => {
});
test('should typedarray work', () => {
const description = {
- type: InternalSerializerType.FURY_TYPE_TAG,
+ type: InternalSerializerType.OBJECT,
options: {
props: {
a: {
- type: InternalSerializerType.FURY_PRIMITIVE_BOOL_ARRAY,
+ type: InternalSerializerType.BOOL_ARRAY,
},
a2: {
- type: InternalSerializerType.FURY_PRIMITIVE_SHORT_ARRAY,
+ type: InternalSerializerType.INT16_ARRAY,
},
a3: {
- type: InternalSerializerType.FURY_PRIMITIVE_INT_ARRAY,
+ type: InternalSerializerType.INT32_ARRAY,
},
a4: {
- type: InternalSerializerType.FURY_PRIMITIVE_LONG_ARRAY,
+ type: InternalSerializerType.INT64_ARRAY,
},
a6: {
- type: InternalSerializerType.FURY_PRIMITIVE_DOUBLE_ARRAY,
- },
- a7: {
- type: InternalSerializerType.FURY_STRING_ARRAY
+ type: InternalSerializerType.FLOAT64_ARRAY,
},
},
tag: "example.foo"
@@ -74,7 +71,6 @@ describe('array', () => {
a3: [3, 5, 76],
a4: [634, 564, 76],
a6: [234243.555, 55654.6786],
- a7: ["hello", "world", "!"]
}, serializer);
const result = fury.deserialize(
input
@@ -86,66 +82,17 @@ describe('array', () => {
a3: [3, 5, 76],
a4: [634, 564, 76],
a6: [234243.555, 55654.6786],
- a7: ["hello", "world", "!"]
- })
- });
- test('should string array work', () => {
- const description = {
- type: InternalSerializerType.FURY_TYPE_TAG,
- options: {
- props: {
- a7: {
- type: InternalSerializerType.FURY_STRING_ARRAY
- },
- },
- tag: "example.foo"
- }
- };
-
- const fury = new Fury({ refTracking: true });
- const serializer = fury.registerSerializer(description).serializer;
- const input = fury.serialize({
- a7: ["hello", "world", "!"]
- }, serializer);
- const result = fury.deserialize(
- input
- );
- expect(result).toEqual({
- a7: ["hello", "world", "!"]
- })
- });
- test('should string array work when latin1 enable', () => {
- const description = {
- type: InternalSerializerType.FURY_TYPE_TAG,
- options: {
- props: {
- a7: {
- type: InternalSerializerType.FURY_STRING_ARRAY
- },
- },
- tag: "example.foo"
- }
- };
-
- const fury = new Fury({ refTracking: true });
- const serializer = fury.registerSerializer(description).serializer;
- const input = fury.serialize({
- a7: ["hello", "world", "!"]
- }, serializer);
- const result = fury.deserialize(
- input
- );
- expect(result).toEqual({
- a7: ["hello", "world", "!"]
})
});
+
+
test('should floatarray work', () => {
const description: ObjectTypeDescription = {
- type: InternalSerializerType.FURY_TYPE_TAG,
+ type: InternalSerializerType.OBJECT,
options: {
props: {
a5: {
- type: InternalSerializerType.FURY_PRIMITIVE_FLOAT_ARRAY,
+ type: InternalSerializerType.FLOAT32_ARRAY,
},
},
tag: "example.foo"
diff --git a/javascript/test/binary.test.ts b/javascript/test/binary.test.ts
index 7dd5962e..35ecab42 100644
--- a/javascript/test/binary.test.ts
+++ b/javascript/test/binary.test.ts
@@ -24,7 +24,7 @@ import { describe, expect, test } from '@jest/globals';
describe('binary', () => {
test('should binary work', () => {
const description = {
- type: InternalSerializerType.FURY_TYPE_TAG,
+ type: InternalSerializerType.OBJECT,
options: {
props: {
a: {
diff --git a/javascript/test/datetime.test.ts b/javascript/test/datetime.test.ts
index 46d40641..09e32743 100644
--- a/javascript/test/datetime.test.ts
+++ b/javascript/test/datetime.test.ts
@@ -34,7 +34,7 @@ describe('datetime', () => {
test('should datetime work', () => {
const description = Type.object("example.foo", {
a: Type.timestamp(),
- b: Type.date(),
+ b: Type.duration(),
})
const fury = new Fury({ refTracking: true });
const serializer = fury.registerSerializer(description).serializer;
diff --git a/javascript/test/fixtures/tuple.ts
b/javascript/test/fixtures/tuple.ts
index ae34c9f1..ba7bd0df 100644
--- a/javascript/test/fixtures/tuple.ts
+++ b/javascript/test/fixtures/tuple.ts
@@ -53,7 +53,7 @@ export const tupleType2 = Type.tuple( [
export const tupleType3 = Type.tuple([
Type.string(),
Type.bool(),
- Type.uint32(),
+ Type.int32(),
Type.tuple([
Type.binary()
])
diff --git a/javascript/test/fury.test.ts b/javascript/test/fury.test.ts
index c3723aa9..cb4a265c 100644
--- a/javascript/test/fury.test.ts
+++ b/javascript/test/fury.test.ts
@@ -82,7 +82,7 @@ describe('fury', () => {
// const description5 = Type.float()
// testDescription(description5, 123.456)
- const description6 = Type.double()
+ const description6 = Type.float64()
testDescription(description6, 123.456789)
const description7 = Type.binary()
diff --git a/javascript/test/io.test.ts b/javascript/test/io.test.ts
index 8d5edf9f..3e6e29e3 100644
--- a/javascript/test/io.test.ts
+++ b/javascript/test/io.test.ts
@@ -293,22 +293,22 @@ function num2Bin(num: number) {
test('should float work', () => {
const writer = BinaryWriter(config);
- writer.float(10.01);
+ writer.float32(10.01);
const ab = writer.dump();
expect(ab.byteLength).toBe(4);
const reader = BinaryReader(config);
reader.reset(ab);
- expect(reader.float().toFixed(2)).toBe((10.01).toFixed(2));
+ expect(reader.float32().toFixed(2)).toBe((10.01).toFixed(2));
});
- test('should double work', () => {
+ test('should float64 work', () => {
const writer = BinaryWriter(config);
- writer.double(10.01);
+ writer.float64(10.01);
const ab = writer.dump();
expect(ab.byteLength).toBe(8);
const reader = BinaryReader(config);
reader.reset(ab);
- expect(reader.double().toFixed(2)).toBe((10.01).toFixed(2));
+ expect(reader.float64().toFixed(2)).toBe((10.01).toFixed(2));
});
test('should reserve work', () => {
@@ -391,20 +391,20 @@ function num2Bin(num: number) {
test('should silong work', () => {
const writer = BinaryWriter(config);
- writer.sliLong(2n ** 2n);
+ writer.sliInt64(2n ** 2n);
const ab = writer.dump();
const reader = BinaryReader({});
reader.reset(ab)
- expect(reader.sliLong()).toBe(2n ** 2n);
+ expect(reader.sliInt64()).toBe(2n ** 2n);
});
test('should silong work', () => {
const writer = BinaryWriter(config);
- writer.sliLong(2n ** 62n);
+ writer.sliInt64(2n ** 62n);
const ab = writer.dump();
const reader = BinaryReader({});
reader.reset(ab)
- expect(reader.sliLong()).toBe(2n ** 62n);
+ expect(reader.sliInt64()).toBe(2n ** 62n);
});
});
})
diff --git a/javascript/test/number.test.ts b/javascript/test/number.test.ts
index 65db7df4..8cfed950 100644
--- a/javascript/test/number.test.ts
+++ b/javascript/test/number.test.ts
@@ -25,7 +25,7 @@ describe('number', () => {
const fury = new Fury({ refTracking: true });
const serialize = fury.registerSerializer({
- type: InternalSerializerType.FURY_TYPE_TAG,
+ type: InternalSerializerType.OBJECT,
options: {
tag: "example.foo",
props: {
@@ -45,7 +45,7 @@ describe('number', () => {
const fury = new Fury({ refTracking: true });
const serialize = fury.registerSerializer({
- type: InternalSerializerType.FURY_TYPE_TAG,
+ type: InternalSerializerType.OBJECT,
options: {
tag: "example.foo",
props: {
@@ -65,7 +65,7 @@ describe('number', () => {
const fury = new Fury({ refTracking: true });
const serializer = fury.registerSerializer({
- type: InternalSerializerType.FURY_TYPE_TAG,
+ type: InternalSerializerType.OBJECT,
options: {
tag: "example.foo",
props: {
@@ -85,7 +85,7 @@ describe('number', () => {
const fury = new Fury({ refTracking: true });
const serializer = fury.registerSerializer({
- type: InternalSerializerType.FURY_TYPE_TAG,
+ type: InternalSerializerType.OBJECT,
options: {
tag: "example.foo",
props: {
@@ -102,83 +102,17 @@ describe('number', () => {
result.a = Number(result.a)
expect(result).toEqual({ a: 1 })
});
- test('should u8 work', () => {
-
- const fury = new Fury({ refTracking: true });
- const description = Type.object("example.foo", {
- a: Type.uint8()
- })
- const serializer = fury.registerSerializer(description).serializer;
- const input = fury.serialize({ a: 1 }, serializer);
- const result = fury.deserialize(
- input
- );
- expect(result).toEqual({ a: 1 })
- });
- test('should u16 work', () => {
-
- const fury = new Fury({ refTracking: true });
- const description = Type.object("example.foo", {
- a: Type.uint16(),
- })
- const serializer = fury.registerSerializer(description).serializer;
- const input = fury.serialize({ a: 1 }, serializer);
- const result = fury.deserialize(
- input
- );
- expect(result).toEqual({ a: 1 })
- });
- test('should u32 work', () => {
-
- const fury = new Fury({ refTracking: true });
- const serializer = fury.registerSerializer({
- type: InternalSerializerType.FURY_TYPE_TAG,
- options: {
- tag: "example.foo",
- props: {
- a: {
- type: InternalSerializerType.UINT32
- }
- }
- }
- }).serializer;
- const input = fury.serialize({ a: 1 }, serializer);
- const result = fury.deserialize(
- input
- );
- expect(result).toEqual({ a: 1 })
- });
- test('should u64 work', () => {
-
- const fury = new Fury({ refTracking: true });
- const serializer = fury.registerSerializer({
- type: InternalSerializerType.FURY_TYPE_TAG,
- options: {
- tag: "example.foo",
- props: {
- a: {
- type: InternalSerializerType.UINT64
- }
- }
- }
- }).serializer;
- const input = fury.serialize({ a: 1 }, serializer);
- const result = fury.deserialize(
- input
- );
- result.a = Number(result.a)
- expect(result).toEqual({ a: 1 })
- });
+
test('should float work', () => {
const fury = new Fury({ refTracking: true });
const serializer = fury.registerSerializer({
- type: InternalSerializerType.FURY_TYPE_TAG,
+ type: InternalSerializerType.OBJECT,
options: {
tag: "example.foo",
props: {
a: {
- type: InternalSerializerType.FLOAT
+ type: InternalSerializerType.FLOAT32
}
}
}
@@ -189,16 +123,16 @@ describe('number', () => {
);
expect(result.a).toBeCloseTo(1.2)
});
- test('should double work', () => {
+ test('should float64 work', () => {
const fury = new Fury({ refTracking: true });
const serializer = fury.registerSerializer({
- type: InternalSerializerType.FURY_TYPE_TAG,
+ type: InternalSerializerType.OBJECT,
options: {
tag: "example.foo",
props: {
a: {
- type: InternalSerializerType.DOUBLE
+ type: InternalSerializerType.FLOAT64
}
}
}
diff --git a/javascript/test/object.test.ts b/javascript/test/object.test.ts
index 4f9eb720..ec2f7e42 100644
--- a/javascript/test/object.test.ts
+++ b/javascript/test/object.test.ts
@@ -23,11 +23,11 @@ import { describe, expect, test } from '@jest/globals';
describe('object', () => {
test('should object work', () => {
const description = {
- type: InternalSerializerType.FURY_TYPE_TAG as const,
+ type: InternalSerializerType.OBJECT as const,
options: {
props: {
a: {
- type: InternalSerializerType.FURY_TYPE_TAG as const,
+ type: InternalSerializerType.OBJECT as const,
options: {
tag: "example.bar",
props: {
@@ -54,11 +54,11 @@ describe('object', () => {
test('should null value work', () => {
const description = {
- type: InternalSerializerType.FURY_TYPE_TAG as const,
+ type: InternalSerializerType.OBJECT as const,
options: {
props: {
a: {
- type: InternalSerializerType.FURY_TYPE_TAG as const,
+ type: InternalSerializerType.OBJECT as const,
options: {
tag: "example.bar",
props: {
@@ -87,8 +87,8 @@ describe('object', () => {
a: Type.array(Type.object('example.bar', {
b: Type.string(),
c: Type.bool(),
- d: Type.uint32(),
- e: Type.uint64(),
+ d: Type.int32(),
+ e: Type.int64(),
f: Type.binary(),
}))
})
@@ -105,11 +105,11 @@ describe('object', () => {
test('should write tag and read tag work', () => {
const description = {
- type: InternalSerializerType.FURY_TYPE_TAG,
+ type: InternalSerializerType.OBJECT,
options: {
props: {
a: {
- type: InternalSerializerType.FURY_TYPE_TAG as const,
+ type: InternalSerializerType.OBJECT as const,
options: {
tag: "example.bar",
props: {
@@ -120,7 +120,7 @@ describe('object', () => {
}
},
a2: {
- type: InternalSerializerType.FURY_TYPE_TAG as const,
+ type: InternalSerializerType.OBJECT as const,
options: {
tag: "example.bar",
}
@@ -141,11 +141,11 @@ describe('object', () => {
test('should ciycle ref work', () => {
const description = {
- type: InternalSerializerType.FURY_TYPE_TAG,
+ type: InternalSerializerType.OBJECT,
options: {
props: {
a: {
- type: InternalSerializerType.FURY_TYPE_TAG as const,
+ type: InternalSerializerType.OBJECT as const,
options: {
tag: "example.bar",
props: {
@@ -156,7 +156,7 @@ describe('object', () => {
}
},
a2: {
- type: InternalSerializerType.FURY_TYPE_TAG as const,
+ type: InternalSerializerType.OBJECT as const,
options: {
tag: "example.foo",
}
diff --git a/javascript/test/oneof.test.ts b/javascript/test/oneof.test.ts
deleted file mode 100644
index 0cabf190..00000000
--- a/javascript/test/oneof.test.ts
+++ /dev/null
@@ -1,90 +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.
- */
-
-import Fury, { TypeDescription, InternalSerializerType, Type } from
'../packages/fury/index';
-import { describe, expect, test } from '@jest/globals';
-
-const oneOfThree = Type.oneof({
- option1: Type.string(),
- option2: Type.object("foo", {
- a: Type.int32()
- }),
- option3: Type.int32(),
-});
-
-describe('oneof', () => {
- test('option1: should oneof work1', () => {
- const fury = new Fury({ refTracking: true });
- const { serialize, deserialize } = fury.registerSerializer(oneOfThree);
- const obj = {
- option1: "hello"
- }
- const input = serialize(obj);
- const result = deserialize(
- input
- );
- expect(result).toEqual(obj.option1)
- });
- test('option2: should oneof work', () => {
- const fury = new Fury({ refTracking: true });
- const { serialize, deserialize } = fury.registerSerializer(oneOfThree);
- const obj = {
- option2: {
- a: 123
- }
- }
- const input = serialize(obj);
- const result = deserialize(
- input
- );
- expect(result).toEqual(obj.option2)
- });
- test('option3: should oneof work', () => {
- const fury = new Fury({ refTracking: true });
- const { serialize, deserialize } = fury.registerSerializer(oneOfThree);
- const obj = {
- option3: 123
- }
- const input = serialize(obj);
- const result = deserialize(
- input
- );
- expect(result).toEqual(obj.option3)
- });
- test('should nested oneof work1', () => {
- const fury = new Fury({ refTracking: true });
- const { serialize, deserialize } =
fury.registerSerializer(Type.object("foo2", {
- f: oneOfThree
- }));
- const obj = {
- option1: "hello"
- }
- const input = serialize({
- f: obj
- });
- const result = deserialize(
- input
- );
- expect(result).toEqual({
- f: obj.option1
- })
- });
-});
-
-
diff --git a/javascript/test/protocol/struct.test.ts
b/javascript/test/protocol/struct.test.ts
index 0dd31419..3c0f6fe4 100644
--- a/javascript/test/protocol/struct.test.ts
+++ b/javascript/test/protocol/struct.test.ts
@@ -26,8 +26,8 @@ describe('protocol', () => {
const fury = new Fury({ refTracking: true });
const { serialize, deserialize } =
fury.registerSerializer(Type.object("example.foo", {
- foo: Type.any(),
- bar: Type.any(),
+ foo: Type.string(),
+ bar: Type.int32(),
map: Type.map(Type.any(), Type.any()),
set: Type.set(Type.any()),
list: Type.array(Type.any()),
diff --git a/javascript/test/referenceResolve.test.ts
b/javascript/test/referenceResolve.test.ts
index 1a3af1e4..c4c23035 100644
--- a/javascript/test/referenceResolve.test.ts
+++ b/javascript/test/referenceResolve.test.ts
@@ -24,6 +24,7 @@ import { makeHead } from
'../packages/fury/lib/referenceResolver';
import { RefFlags } from '../packages/fury/lib/type';
import { BinaryWriter } from '../packages/fury/lib/writer';
import { BinaryReader } from '../packages/fury/lib/reader';
+import SerializerResolver from '../packages/fury/lib/classResolver';
describe('referenceResolve', () => {
test('should write head work', () => {
@@ -40,7 +41,7 @@ describe('referenceResolve', () => {
const reader = BinaryReader({});
reader.reset(ab);
expect(reader.int8()).toBe(RefFlags.NotNullValueFlag);
- expect(reader.int16()).toBe(InternalSerializerType.STRING);
+
expect(reader.int16()).toBe(SerializerResolver.getTypeIdByInternalSerializerType(InternalSerializerType.STRING));
});
test('should make head work when flag is zero', () => {
@@ -51,7 +52,7 @@ describe('referenceResolve', () => {
const reader = BinaryReader({});
reader.reset(ab);
expect(reader.int8()).toBe(RefFlags.RefValueFlag);
- expect(reader.int16()).toBe(InternalSerializerType.STRING);
+
expect(reader.int16()).toBe(SerializerResolver.getTypeIdByInternalSerializerType(InternalSerializerType.STRING));
});
});
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]