@openhps/protobuf 1.0.2 → 1.1.0
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.
- package/LICENSE +1 -1
- package/README.md +58 -38
- package/dist/cjs/InternalProtobufDeserializer.js +30 -15
- package/dist/cjs/InternalProtobufDeserializer.js.map +1 -1
- package/dist/cjs/InternalProtobufSerializer.js +7 -7
- package/dist/cjs/InternalProtobufSerializer.js.map +1 -1
- package/dist/cjs/PrimitiveWrapper.js +13 -0
- package/dist/cjs/PrimitiveWrapper.js.map +1 -0
- package/dist/cjs/ProtobufSerializer.js +27 -1
- package/dist/cjs/ProtobufSerializer.js.map +1 -1
- package/dist/cjs/bin/generator.js +3 -3
- package/dist/cjs/bin/generator.js.map +1 -1
- package/dist/cjs/generator/ObjectGenerator.js +28 -11
- package/dist/cjs/generator/ObjectGenerator.js.map +1 -1
- package/dist/cjs/generator/ProjectGenerator.js +52 -32
- package/dist/cjs/generator/ProjectGenerator.js.map +1 -1
- package/dist/cjs/generator/constants.js +11 -4
- package/dist/cjs/generator/constants.js.map +1 -1
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/tsconfig.bundle.cjs.tsbuildinfo +1 -0
- package/dist/esm/InternalProtobufDeserializer.js +30 -14
- package/dist/esm/InternalProtobufDeserializer.js.map +1 -1
- package/dist/esm/InternalProtobufSerializer.js +7 -6
- package/dist/esm/InternalProtobufSerializer.js.map +1 -1
- package/dist/esm/PrimitiveWrapper.js +9 -0
- package/dist/esm/PrimitiveWrapper.js.map +1 -0
- package/dist/esm/ProtobufSerializer.js +30 -4
- package/dist/esm/ProtobufSerializer.js.map +1 -1
- package/dist/esm/bin/generator.js +5 -5
- package/dist/esm/bin/generator.js.map +1 -1
- package/dist/esm/decorators/index.js +1 -1
- package/dist/esm/generator/ObjectGenerator.js +30 -13
- package/dist/esm/generator/ObjectGenerator.js.map +1 -1
- package/dist/esm/generator/ProjectGenerator.js +55 -34
- package/dist/esm/generator/ProjectGenerator.js.map +1 -1
- package/dist/esm/generator/ServiceGenerator.js +1 -1
- package/dist/esm/generator/constants.js +11 -4
- package/dist/esm/generator/constants.js.map +1 -1
- package/dist/esm/generator/index.js +3 -3
- package/dist/esm/index.js +2 -2
- package/dist/esm/package.json +3 -0
- package/dist/esm/tsconfig.bundle.esm.tsbuildinfo +1 -0
- package/dist/esm/tsconfig.bundle.types.tsbuildinfo +1 -0
- package/dist/types/InternalProtobufDeserializer.d.ts +0 -2
- package/dist/types/InternalProtobufDeserializer.d.ts.map +1 -1
- package/dist/types/InternalProtobufSerializer.d.ts +0 -2
- package/dist/types/InternalProtobufSerializer.d.ts.map +1 -1
- package/dist/types/PrimitiveWrapper.d.ts +8 -0
- package/dist/types/PrimitiveWrapper.d.ts.map +1 -0
- package/dist/types/ProtobufSerializer.d.ts +6 -0
- package/dist/types/ProtobufSerializer.d.ts.map +1 -1
- package/dist/types/generator/ObjectGenerator.d.ts +2 -8
- package/dist/types/generator/ObjectGenerator.d.ts.map +1 -1
- package/dist/types/generator/ProjectGenerator.d.ts +0 -1
- package/dist/types/generator/ProjectGenerator.d.ts.map +1 -1
- package/dist/types/generator/constants.d.ts +1 -1
- package/dist/types/generator/constants.d.ts.map +1 -1
- package/dist/web/openhps-protobuf.es.js +16272 -12072
- package/dist/web/openhps-protobuf.es.js.map +1 -1
- package/dist/web/openhps-protobuf.es.min.js +2 -1
- package/dist/web/openhps-protobuf.es.min.js.LICENSE.txt +19 -0
- package/dist/web/openhps-protobuf.es.min.js.map +1 -1
- package/dist/web/openhps-protobuf.js +17390 -14592
- package/dist/web/openhps-protobuf.js.map +1 -1
- package/dist/web/openhps-protobuf.min.js +2 -1
- package/dist/web/openhps-protobuf.min.js.LICENSE.txt +19 -0
- package/dist/web/openhps-protobuf.min.js.map +1 -1
- package/package.json +125 -94
- package/src/InternalProtobufDeserializer.ts +52 -34
- package/src/InternalProtobufSerializer.ts +9 -10
- package/src/PrimitiveWrapper.ts +9 -0
- package/src/ProtobufSerializer.ts +33 -1
- package/src/bin/generator.ts +4 -4
- package/src/generator/ObjectGenerator.ts +32 -20
- package/src/generator/ProjectGenerator.ts +61 -36
- package/src/generator/constants.ts +11 -4
- package/dist/esm5/InternalProtobufDeserializer.js +0 -147
- package/dist/esm5/InternalProtobufDeserializer.js.map +0 -1
- package/dist/esm5/InternalProtobufSerializer.js +0 -132
- package/dist/esm5/InternalProtobufSerializer.js.map +0 -1
- package/dist/esm5/ProtobufSerializer.js +0 -130
- package/dist/esm5/ProtobufSerializer.js.map +0 -1
- package/dist/esm5/bin/generator.js +0 -104
- package/dist/esm5/bin/generator.js.map +0 -1
- package/dist/esm5/decorators/index.js +0 -2
- package/dist/esm5/decorators/index.js.map +0 -1
- package/dist/esm5/decorators/options.js +0 -2
- package/dist/esm5/decorators/options.js.map +0 -1
- package/dist/esm5/generator/ObjectGenerator.js +0 -312
- package/dist/esm5/generator/ObjectGenerator.js.map +0 -1
- package/dist/esm5/generator/ProjectGenerator.js +0 -146
- package/dist/esm5/generator/ProjectGenerator.js.map +0 -1
- package/dist/esm5/generator/ProtobufGenerator.js +0 -27
- package/dist/esm5/generator/ProtobufGenerator.js.map +0 -1
- package/dist/esm5/generator/ServiceGenerator.js +0 -10
- package/dist/esm5/generator/ServiceGenerator.js.map +0 -1
- package/dist/esm5/generator/constants.js +0 -18
- package/dist/esm5/generator/constants.js.map +0 -1
- package/dist/esm5/generator/index.js +0 -4
- package/dist/esm5/generator/index.js.map +0 -1
- package/dist/esm5/generator/types.js +0 -2
- package/dist/esm5/generator/types.js.map +0 -1
- package/dist/esm5/index.js +0 -3
- package/dist/esm5/index.js.map +0 -1
|
@@ -15,7 +15,9 @@ export class ProjectGenerator extends DataSerializer {
|
|
|
15
15
|
|
|
16
16
|
static findAllModules(dir: string): NodeModule[] {
|
|
17
17
|
const packageFile = path.resolve(path.join(dir, 'package.json'));
|
|
18
|
-
|
|
18
|
+
// require.main is undefined when mocha runs the specs through its ESM loader.
|
|
19
|
+
const mainPath = require.main?.path;
|
|
20
|
+
if (mainPath !== undefined && packageFile === path.resolve(mainPath)) {
|
|
19
21
|
return [];
|
|
20
22
|
}
|
|
21
23
|
|
|
@@ -44,21 +46,28 @@ export class ProjectGenerator extends DataSerializer {
|
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
static findModule(dir: string): string {
|
|
47
|
-
const
|
|
49
|
+
const resolvedDir = path.resolve(dir);
|
|
50
|
+
const packageFile = path.join(resolvedDir, 'package.json');
|
|
48
51
|
if (fs.existsSync(packageFile)) {
|
|
49
52
|
const packageJson = JSON.parse(fs.readFileSync(packageFile, { encoding: 'utf-8' }));
|
|
50
53
|
return packageJson.name;
|
|
51
54
|
} else {
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
+
const parentDir = path.dirname(resolvedDir);
|
|
56
|
+
if (parentDir === resolvedDir) {
|
|
57
|
+
// Reached the filesystem root without finding a manifest
|
|
58
|
+
throw new Error(`Unable to find a package.json above '${dir}'`);
|
|
59
|
+
}
|
|
60
|
+
return this.findModule(parentDir);
|
|
55
61
|
}
|
|
56
62
|
}
|
|
57
63
|
|
|
58
64
|
static loadModules(objects: Array<Serializable<any>>, module: NodeModule = require.main) {
|
|
59
65
|
if (module === undefined) {
|
|
60
|
-
// Use cache instead
|
|
61
|
-
|
|
66
|
+
// Use cache instead. require.main is undefined under mocha's ESM loader, and
|
|
67
|
+
// the cache is typed as possibly holding undefined entries.
|
|
68
|
+
Object.values(require.cache)
|
|
69
|
+
.filter((cached): cached is NodeModule => cached !== undefined && Array.isArray(cached.children))
|
|
70
|
+
.forEach((cached) => this.loadModules(objects, cached));
|
|
62
71
|
return;
|
|
63
72
|
}
|
|
64
73
|
this._modules.add(module.id);
|
|
@@ -71,9 +80,12 @@ export class ProjectGenerator extends DataSerializer {
|
|
|
71
80
|
}
|
|
72
81
|
});
|
|
73
82
|
}
|
|
74
|
-
module.children
|
|
75
|
-
|
|
76
|
-
|
|
83
|
+
if (!Array.isArray(module.children)) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
module.children.forEach((child) => {
|
|
87
|
+
if (child !== undefined && !this._modules.has(child.id)) {
|
|
88
|
+
this.loadModules(objects, child);
|
|
77
89
|
}
|
|
78
90
|
});
|
|
79
91
|
}
|
|
@@ -87,6 +99,9 @@ export class ProjectGenerator extends DataSerializer {
|
|
|
87
99
|
|
|
88
100
|
static loadClasses(): Array<ObjectMetadata> {
|
|
89
101
|
const declarations: Array<ObjectMetadata> = [];
|
|
102
|
+
// Reset so a second build in the same process does not reuse stale module/package state
|
|
103
|
+
this._modules = new Set();
|
|
104
|
+
this._packages = new Set();
|
|
90
105
|
this.findAllModules('./');
|
|
91
106
|
this.knownTypes.forEach((value) => {
|
|
92
107
|
const metadata = DataSerializerUtils.getOwnMetadata(value);
|
|
@@ -127,37 +142,47 @@ export class ProjectGenerator extends DataSerializer {
|
|
|
127
142
|
|
|
128
143
|
static buildProject(directory: string, options: ProjectBuildOptions = {}): Promise<number> {
|
|
129
144
|
return new Promise((resolve, reject) => {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
145
|
+
(async () => {
|
|
146
|
+
const resolvedDirectory = path.resolve(directory);
|
|
147
|
+
// The CLI passes -d <dir> verbatim: refuse to delete the current working
|
|
148
|
+
// directory, one of its parents, or the filesystem root
|
|
149
|
+
if (
|
|
150
|
+
resolvedDirectory === path.parse(resolvedDirectory).root ||
|
|
151
|
+
resolvedDirectory === process.cwd() ||
|
|
152
|
+
process.cwd().startsWith(resolvedDirectory + path.sep)
|
|
153
|
+
) {
|
|
154
|
+
throw new Error(
|
|
155
|
+
`Refusing to use '${resolvedDirectory}': it is the current working directory, a parent of it, or the filesystem root.`,
|
|
156
|
+
);
|
|
157
|
+
}
|
|
135
158
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
ProjectGenerator.generateProtoMessages(options)
|
|
142
|
-
.then((classes) => {
|
|
143
|
-
if (options.logLevel > 0) console.log('Saving generating protocol buffer messages ...');
|
|
144
|
-
classes.forEach((value, key) => {
|
|
145
|
-
const packageDir = path.join(directory, ...value[0].split('.'));
|
|
146
|
-
if (!fs.existsSync(packageDir)) {
|
|
147
|
-
fs.mkdirsSync(packageDir);
|
|
148
|
-
}
|
|
149
|
-
fs.writeFileSync(path.join(packageDir, key + '.proto'), value[1], {
|
|
150
|
-
encoding: 'utf-8',
|
|
151
|
-
});
|
|
152
|
-
});
|
|
159
|
+
// Prepare directories
|
|
160
|
+
if (await fs.pathExists(resolvedDirectory)) {
|
|
161
|
+
await fs.promises.rm(resolvedDirectory, { recursive: true });
|
|
162
|
+
}
|
|
163
|
+
await fs.promises.mkdir(resolvedDirectory, { recursive: true });
|
|
153
164
|
|
|
154
|
-
|
|
165
|
+
// Get all class sources
|
|
166
|
+
if (options.logLevel > 0) {
|
|
167
|
+
console.log('Generating protocol buffer messages ...');
|
|
168
|
+
console.log('Use of any types = ', options.useAnyType);
|
|
169
|
+
}
|
|
170
|
+
const classes = await ProjectGenerator.generateProtoMessages(options);
|
|
171
|
+
if (options.logLevel > 0) console.log('Saving generating protocol buffer messages ...');
|
|
172
|
+
for (const [key, value] of classes) {
|
|
173
|
+
const packageDir = path.join(resolvedDirectory, ...value[0].split('.'));
|
|
174
|
+
await fs.ensureDir(packageDir);
|
|
175
|
+
await fs.promises.writeFile(path.join(packageDir, key + '.proto'), value[1], {
|
|
155
176
|
encoding: 'utf-8',
|
|
156
177
|
});
|
|
178
|
+
}
|
|
157
179
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
180
|
+
await fs.promises.writeFile(path.join(resolvedDirectory, 'common.proto'), COMMON, {
|
|
181
|
+
encoding: 'utf-8',
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
resolve(classes.size);
|
|
185
|
+
})().catch(reject);
|
|
161
186
|
});
|
|
162
187
|
}
|
|
163
188
|
}
|
|
@@ -2,16 +2,23 @@ export const HEADER = `/**
|
|
|
2
2
|
* OpenHPS Protocol Buffer
|
|
3
3
|
* This file was automatically generated with @openhps/protobuf
|
|
4
4
|
*
|
|
5
|
-
* (c) 2019-
|
|
5
|
+
* (c) 2019-2026 Maxim Van de Wynckel & Vrije Universiteit Brussel
|
|
6
6
|
**/\n
|
|
7
7
|
`;
|
|
8
8
|
|
|
9
9
|
export const COMMON =
|
|
10
10
|
HEADER +
|
|
11
11
|
`syntax = "proto3";` +
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
// EnumValueOptions is declared in descriptor.proto. Extending it without importing
|
|
13
|
+
// that file leaves protobufjs unable to resolve the extension, and loading the
|
|
14
|
+
// generated schema fails with "unresolvable extensions".
|
|
15
|
+
`\nimport "google/protobuf/descriptor.proto";\n` +
|
|
16
|
+
`\nextend google.protobuf.EnumValueOptions {\n` +
|
|
17
|
+
// Field numbers 1 and 2 belong to EnumValueOptions' own fields; reusing them made
|
|
18
|
+
// protobufjs reject the schema with "duplicate id 1". Custom options must sit in
|
|
19
|
+
// the 50000-99999 range protobuf reserves for third-party extensions.
|
|
20
|
+
`\toptional string className = 50001;\n` +
|
|
21
|
+
`\toptional string packageName = 50002;\n` +
|
|
15
22
|
`}\n`;
|
|
16
23
|
// `\nextend google.protobuf.MessageOptions {\n` +
|
|
17
24
|
// `\toptional string className = 1001;\n` +
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import { ConcreteTypeDescriptor, Deserializer, TypedJSON, UUID, } from '@openhps/core';
|
|
2
|
-
import * as protobuf from 'protobufjs';
|
|
3
|
-
import { AnyT, JsonObjectMetadata } from 'typedjson';
|
|
4
|
-
export class InternalProtobufDeserializer extends Deserializer {
|
|
5
|
-
constructor() {
|
|
6
|
-
super();
|
|
7
|
-
InternalProtobufDeserializer.primitiveWrapper = new protobuf.Type('PrimitiveWrapperMessage');
|
|
8
|
-
InternalProtobufDeserializer.primitiveWrapper.add(new protobuf.Field('value', 1, 'string'));
|
|
9
|
-
this.setDeserializationStrategy(Number, (object) => {
|
|
10
|
-
if (typeof object === 'number') {
|
|
11
|
-
return object;
|
|
12
|
-
}
|
|
13
|
-
else if (typeof object === 'string') {
|
|
14
|
-
return Number(object);
|
|
15
|
-
}
|
|
16
|
-
else if (object.toNumber) {
|
|
17
|
-
return object.toNumber();
|
|
18
|
-
}
|
|
19
|
-
return object;
|
|
20
|
-
});
|
|
21
|
-
this.setDeserializationStrategy(Map, (object, typeDescriptor, knownTypes, memberName, deserializer, memberOptions, serializerOptions) => {
|
|
22
|
-
const result = new Map();
|
|
23
|
-
Object.keys(object).forEach((key) => {
|
|
24
|
-
result.set(key, deserializer.convertSingleValue(object[key], typeDescriptor.valueType, knownTypes, memberName, memberOptions, serializerOptions));
|
|
25
|
-
});
|
|
26
|
-
return result;
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
convertSingleValue(sourceObject, typeDescriptor, knownTypes, memberName, memberOptions, serializerOptions) {
|
|
30
|
-
if (this.retrievePreserveNull(memberOptions) && sourceObject === null) {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
else if (!TypedJSON.utils.isValueDefined(sourceObject)) {
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
const deserializer = this.deserializationStrategy.get(typeDescriptor.ctor);
|
|
37
|
-
if (deserializer !== undefined) {
|
|
38
|
-
return deserializer(sourceObject, typeDescriptor, knownTypes, memberName, this, memberOptions, serializerOptions);
|
|
39
|
-
}
|
|
40
|
-
if (typeof sourceObject === 'object') {
|
|
41
|
-
return this.convertAsObject(sourceObject, typeDescriptor, knownTypes, memberName, this, memberOptions, serializerOptions);
|
|
42
|
-
}
|
|
43
|
-
let error = `Could not deserialize '${memberName}'; don't know how to deserialize type`;
|
|
44
|
-
if (typeDescriptor.hasFriendlyName()) {
|
|
45
|
-
error += ` '${typeDescriptor.ctor.name}'`;
|
|
46
|
-
}
|
|
47
|
-
this.errorHandler(new TypeError(`${error}.`));
|
|
48
|
-
}
|
|
49
|
-
convertAsObject(sourceObject, typeDescriptor, knownTypes, memberName, deserializer, memberOptions, serializerOptions) {
|
|
50
|
-
let expectedSelfType = typeDescriptor.ctor;
|
|
51
|
-
let sourceObjectMetadata = JsonObjectMetadata.getFromConstructor(expectedSelfType);
|
|
52
|
-
if (sourceObject.hasOwnProperty('_type') && sourceObject._type !== 0) {
|
|
53
|
-
const enumTypeClassname = sourceObjectMetadata.protobuf.enumMapping.get(sourceObject._type);
|
|
54
|
-
if (enumTypeClassname) {
|
|
55
|
-
const enumType = knownTypes.get(enumTypeClassname);
|
|
56
|
-
if (enumType !== expectedSelfType) {
|
|
57
|
-
expectedSelfType = enumType;
|
|
58
|
-
sourceObjectMetadata = JsonObjectMetadata.getFromConstructor(expectedSelfType);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
else if (sourceObject.type_url && sourceObject.value) {
|
|
63
|
-
const MessageType = serializerOptions.types.get(sourceObject.type_url);
|
|
64
|
-
const message = MessageType.decode(sourceObject.value);
|
|
65
|
-
const data = this.convertAsObject(message, new ConcreteTypeDescriptor(knownTypes.get(sourceObject.type_url)), knownTypes, memberName, deserializer, memberOptions, serializerOptions);
|
|
66
|
-
return data;
|
|
67
|
-
}
|
|
68
|
-
const sourceMetadata = sourceObjectMetadata;
|
|
69
|
-
// Strong-typed deserialization available, get to it.
|
|
70
|
-
// First deserialize properties into a temporary object.
|
|
71
|
-
const sourceObjectWithDeserializedProperties = {};
|
|
72
|
-
// Deserialize by expected properties.
|
|
73
|
-
sourceMetadata.dataMembers.forEach((objMemberMetadata, propKey) => {
|
|
74
|
-
var _a;
|
|
75
|
-
const objMemberDebugName = `${TypedJSON.utils.nameof(sourceMetadata.classType)}.${propKey}`;
|
|
76
|
-
const objMemberOptions = TypedJSON.options.mergeOptions(sourceMetadata.options, objMemberMetadata.options);
|
|
77
|
-
const memberName = (_a = (objMemberOptions && objMemberOptions.protobuf
|
|
78
|
-
? objMemberOptions.protobuf.name
|
|
79
|
-
: objMemberMetadata.name)) !== null && _a !== void 0 ? _a : objMemberMetadata.name;
|
|
80
|
-
const objMemberValue = sourceObject[memberName];
|
|
81
|
-
let revivedValue;
|
|
82
|
-
if (objMemberMetadata.name === 'uid') {
|
|
83
|
-
if (sourceObject.hasOwnProperty('uid_bytes') && sourceObject['uid_bytes'].byteLength > 0) {
|
|
84
|
-
revivedValue = UUID.fromBuffer(sourceObject['uid_bytes']).toString();
|
|
85
|
-
}
|
|
86
|
-
else if (sourceObject.hasOwnProperty('uid_string')) {
|
|
87
|
-
revivedValue = sourceObject['uid_string'];
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
else if (!sourceObject.hasOwnProperty(memberName) || !objMemberValue) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
else if (objMemberMetadata.type() === AnyT && objMemberValue.type_url) {
|
|
97
|
-
const MessageType = serializerOptions.types.get(sourceObject[memberName].type_url);
|
|
98
|
-
if (MessageType) {
|
|
99
|
-
const message = MessageType.decode(objMemberValue.value);
|
|
100
|
-
revivedValue = deserializer.convertSingleValue(message, new ConcreteTypeDescriptor(knownTypes.get(objMemberValue.type_url)), knownTypes, objMemberDebugName, objMemberOptions, serializerOptions);
|
|
101
|
-
}
|
|
102
|
-
else if (objMemberValue.value) {
|
|
103
|
-
const message = InternalProtobufDeserializer.primitiveWrapper.decode(objMemberValue.value);
|
|
104
|
-
switch (objMemberValue.type_url) {
|
|
105
|
-
case 'Boolean':
|
|
106
|
-
revivedValue = Boolean(message.value);
|
|
107
|
-
break;
|
|
108
|
-
case 'Number':
|
|
109
|
-
revivedValue = Number(message.value);
|
|
110
|
-
break;
|
|
111
|
-
case 'String':
|
|
112
|
-
default:
|
|
113
|
-
revivedValue = message.value;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
revivedValue = deserializer.convertSingleValue(objMemberValue, objMemberMetadata.type(), knownTypes, objMemberDebugName, objMemberOptions, serializerOptions);
|
|
119
|
-
}
|
|
120
|
-
if (TypedJSON.utils.isValueDefined(revivedValue)) {
|
|
121
|
-
sourceObjectWithDeserializedProperties[objMemberMetadata.key] = revivedValue;
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
// Next, instantiate target object.
|
|
125
|
-
const targetObject = deserializer.instantiateType(expectedSelfType);
|
|
126
|
-
// Finally, assign deserialized properties to target object.
|
|
127
|
-
Object.assign(targetObject, sourceObjectWithDeserializedProperties);
|
|
128
|
-
// Call onDeserialized method (if any).
|
|
129
|
-
const methodName = sourceObjectMetadata.onDeserializedMethodName;
|
|
130
|
-
if (methodName != null) {
|
|
131
|
-
if (typeof targetObject[methodName] === 'function') {
|
|
132
|
-
// check for member first
|
|
133
|
-
targetObject[methodName]();
|
|
134
|
-
}
|
|
135
|
-
else if (typeof targetObject.constructor[methodName] === 'function') {
|
|
136
|
-
// check for static
|
|
137
|
-
targetObject.constructor[methodName]();
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
deserializer.getErrorHandler()(new TypeError(`onDeserialized callback` +
|
|
141
|
-
`'${TypedJSON.utils.nameof(sourceObjectMetadata.classType)}.${methodName}' is not a method.`));
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return targetObject;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
//# sourceMappingURL=InternalProtobufDeserializer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InternalProtobufDeserializer.js","sourceRoot":"","sources":["../../src/InternalProtobufDeserializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { Serializer, TypedJSON, UUID, } from '@openhps/core';
|
|
2
|
-
import { AnyT, JsonObjectMetadata } from 'typedjson';
|
|
3
|
-
import * as protobuf from 'protobufjs';
|
|
4
|
-
export class InternalProtobufSerializer extends Serializer {
|
|
5
|
-
constructor() {
|
|
6
|
-
super();
|
|
7
|
-
this.setSerializationStrategy(Map, this.convertAsMap.bind(this));
|
|
8
|
-
InternalProtobufSerializer.primitiveWrapper = new protobuf.Type('PrimitiveWrapperMessage');
|
|
9
|
-
InternalProtobufSerializer.primitiveWrapper.add(new protobuf.Field('value', 1, 'string'));
|
|
10
|
-
}
|
|
11
|
-
convertSingleValue(sourceObject, typeDescriptor, memberName, memberOptions, serializerOptions) {
|
|
12
|
-
if (!TypedJSON.utils.isValueDefined(sourceObject)) {
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
if (!TypedJSON.utils.isInstanceOf(sourceObject, typeDescriptor.ctor)) {
|
|
16
|
-
const expectedName = TypedJSON.utils.nameof(typeDescriptor.ctor);
|
|
17
|
-
const actualName = TypedJSON.utils.nameof(sourceObject.constructor);
|
|
18
|
-
this.errorHandler(new TypeError(`Could not serialize '${memberName}': expected '${expectedName}',` + ` got '${actualName}'.`));
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
const serializer = this.serializationStrategy.get(typeDescriptor.ctor);
|
|
22
|
-
if (serializer !== undefined) {
|
|
23
|
-
return serializer(sourceObject, typeDescriptor, memberName, this, memberOptions, serializerOptions);
|
|
24
|
-
}
|
|
25
|
-
// if not present in the strategy do property by property serialization
|
|
26
|
-
if (typeof sourceObject === 'object') {
|
|
27
|
-
return this.convertAsObject(sourceObject, typeDescriptor, memberName, this, memberOptions, serializerOptions);
|
|
28
|
-
}
|
|
29
|
-
let error = `Could not serialize '${memberName}'; don't know how to serialize type`;
|
|
30
|
-
if (typeDescriptor.hasFriendlyName()) {
|
|
31
|
-
error += ` '${typeDescriptor.ctor.name}'`;
|
|
32
|
-
}
|
|
33
|
-
this.errorHandler(new TypeError(`${error}.`));
|
|
34
|
-
}
|
|
35
|
-
convertAsObject(sourceObject, typeDescriptor, memberName, serializer, memberOptions, serializerOptions) {
|
|
36
|
-
const typeMetadata = JsonObjectMetadata.getFromConstructor(typeDescriptor.ctor);
|
|
37
|
-
let sourceTypeMetadata = JsonObjectMetadata.getFromConstructor(sourceObject.constructor);
|
|
38
|
-
if (!sourceTypeMetadata) {
|
|
39
|
-
sourceTypeMetadata = typeMetadata;
|
|
40
|
-
}
|
|
41
|
-
let targetObject;
|
|
42
|
-
const sourceMeta = sourceTypeMetadata;
|
|
43
|
-
targetObject = {};
|
|
44
|
-
const classOptions = TypedJSON.options.mergeOptions(serializer.options, sourceMeta.options);
|
|
45
|
-
sourceMeta.dataMembers.forEach((objMemberMetadata) => {
|
|
46
|
-
var _a;
|
|
47
|
-
const objMemberOptions = TypedJSON.options.mergeOptions(classOptions, objMemberMetadata.options);
|
|
48
|
-
let serialized;
|
|
49
|
-
let memberName = (_a = (objMemberOptions && objMemberOptions.protobuf
|
|
50
|
-
? objMemberOptions.protobuf.name
|
|
51
|
-
: objMemberMetadata.name)) !== null && _a !== void 0 ? _a : objMemberMetadata.name;
|
|
52
|
-
if (sourceObject[objMemberMetadata.key] === undefined) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
if (objMemberMetadata.type == null) {
|
|
56
|
-
throw new TypeError(`Could not serialize ${objMemberMetadata.name}, there is` +
|
|
57
|
-
` no constructor nor serialization function to use.`);
|
|
58
|
-
}
|
|
59
|
-
else if (objMemberMetadata.name === 'uid') {
|
|
60
|
-
const uuid = UUID.fromString(sourceObject[objMemberMetadata.key]);
|
|
61
|
-
if (uuid) {
|
|
62
|
-
serialized = uuid.toBuffer();
|
|
63
|
-
memberName += '_bytes';
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
serialized = sourceObject[objMemberMetadata.key];
|
|
67
|
-
memberName += '_string';
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
const MessageType = sourceTypeMetadata.protobuf.messageType;
|
|
72
|
-
const field = MessageType.get(objMemberMetadata.name);
|
|
73
|
-
serialized = this.convertSingleValue(sourceObject[objMemberMetadata.key], objMemberMetadata.type(), `${TypedJSON.utils.nameof(sourceMeta.classType)}.${objMemberMetadata.key}`, objMemberOptions, Object.assign(Object.assign({}, serializerOptions), { field }));
|
|
74
|
-
}
|
|
75
|
-
if (TypedJSON.utils.isValueDefined(serialized)) {
|
|
76
|
-
if (objMemberMetadata.type() === AnyT) {
|
|
77
|
-
const MessageType = serializerOptions.types.get(sourceObject[objMemberMetadata.key].constructor.name);
|
|
78
|
-
if (MessageType) {
|
|
79
|
-
const message = MessageType.create(serialized);
|
|
80
|
-
serialized = {
|
|
81
|
-
type_url: sourceObject[objMemberMetadata.key].constructor.name,
|
|
82
|
-
value: MessageType.encode(message).finish(),
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
const message = InternalProtobufSerializer.primitiveWrapper.create({
|
|
87
|
-
value: String(sourceObject[objMemberMetadata.key]),
|
|
88
|
-
});
|
|
89
|
-
serialized = {
|
|
90
|
-
type_url: sourceObject[objMemberMetadata.key].constructor.name,
|
|
91
|
-
value: InternalProtobufSerializer.primitiveWrapper.encode(message).finish(),
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
targetObject[memberName] = serialized;
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
const isAnyField = serializerOptions.field && serializerOptions.field.type === 'google.protobuf.Any';
|
|
99
|
-
if (!isAnyField && typeMetadata.knownTypes.size > 1) {
|
|
100
|
-
const MessageType = sourceTypeMetadata.protobuf.messageType;
|
|
101
|
-
const message = MessageType.create(Object.assign(Object.assign({}, targetObject), { _type: sourceTypeMetadata.protobuf.messageTypeEnum }));
|
|
102
|
-
targetObject = message;
|
|
103
|
-
}
|
|
104
|
-
else if (isAnyField) {
|
|
105
|
-
const MessageType = sourceTypeMetadata.protobuf.messageType;
|
|
106
|
-
const message = MessageType.create(targetObject);
|
|
107
|
-
targetObject = {
|
|
108
|
-
type_url: sourceObject.constructor.name,
|
|
109
|
-
value: MessageType.encode(message).finish(),
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
return targetObject;
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Performs the conversion of a map of typed objects (or primitive values) into an array
|
|
116
|
-
* of simple javascript objects with `key` and `value` properties.
|
|
117
|
-
* @param sourceObject
|
|
118
|
-
* @param typeDescriptor
|
|
119
|
-
* @param memberName
|
|
120
|
-
* @param serializer
|
|
121
|
-
* @param memberOptions
|
|
122
|
-
* @param serializerOptions
|
|
123
|
-
*/
|
|
124
|
-
convertAsMap(sourceObject, typeDescriptor, memberName, serializer, memberOptions, serializerOptions) {
|
|
125
|
-
const result = {};
|
|
126
|
-
sourceObject.forEach((value, key) => {
|
|
127
|
-
result[key] = serializer.convertSingleValue(value, typeDescriptor.valueType, memberName, memberOptions, serializerOptions);
|
|
128
|
-
});
|
|
129
|
-
return result;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
//# sourceMappingURL=InternalProtobufSerializer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InternalProtobufSerializer.js","sourceRoot":"","sources":["../../src/InternalProtobufSerializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import { DataSerializer, DataSerializerUtils } from '@openhps/core';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import * as protobuf from 'protobufjs';
|
|
4
|
-
import * as fs from 'fs';
|
|
5
|
-
import { ProjectGenerator } from './generator';
|
|
6
|
-
import { InternalProtobufDeserializer } from './InternalProtobufDeserializer';
|
|
7
|
-
import { InternalProtobufSerializer } from './InternalProtobufSerializer';
|
|
8
|
-
export class ProtobufSerializer extends DataSerializer {
|
|
9
|
-
static getFiles(directory, files = []) {
|
|
10
|
-
if (!fs.statSync(directory).isDirectory()) {
|
|
11
|
-
return [];
|
|
12
|
-
}
|
|
13
|
-
const fileList = fs.readdirSync(path.normalize(directory));
|
|
14
|
-
for (const file of fileList) {
|
|
15
|
-
const name = `${directory}/${file}`;
|
|
16
|
-
if (fs.statSync(name).isDirectory()) {
|
|
17
|
-
this.getFiles(name, files);
|
|
18
|
-
}
|
|
19
|
-
else if (name.endsWith('.proto')) {
|
|
20
|
-
files.push(path.normalize(name));
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return files;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Initialize the protocol buffer serializer
|
|
27
|
-
* @param {string} [directory] Directory of generated protocol messages. Default will generate on the fly
|
|
28
|
-
* @returns {Promise<void>} Promise once initialized
|
|
29
|
-
*/
|
|
30
|
-
static initialize(directory) {
|
|
31
|
-
return new Promise((resolve, reject) => {
|
|
32
|
-
ProtobufSerializer.root = new protobuf.Root();
|
|
33
|
-
Promise.resolve(!directory ? ProjectGenerator.buildProject(path.resolve('tmp')) : Promise.resolve())
|
|
34
|
-
.then(() => {
|
|
35
|
-
const files = this.getFiles(path.resolve(directory !== null && directory !== void 0 ? directory : 'tmp'));
|
|
36
|
-
const loadPromise = new Promise((resolve) => {
|
|
37
|
-
ProtobufSerializer.root
|
|
38
|
-
.load(files, {
|
|
39
|
-
keepCase: true,
|
|
40
|
-
})
|
|
41
|
-
.then(() => {
|
|
42
|
-
files.forEach((file) => {
|
|
43
|
-
const className = path.parse(file).name;
|
|
44
|
-
const knownType = this.knownTypes.get(className);
|
|
45
|
-
if (knownType) {
|
|
46
|
-
const objectMeta = DataSerializerUtils.getOwnMetadata(this.knownTypes.get(className));
|
|
47
|
-
const rootMeta = DataSerializerUtils.getRootMetadata(this.knownTypes.get(className));
|
|
48
|
-
const MessageType = ProtobufSerializer.root.lookupType(className);
|
|
49
|
-
let enumNumber = undefined;
|
|
50
|
-
const enumMapping = new Map();
|
|
51
|
-
try {
|
|
52
|
-
const typeEnum = ProtobufSerializer.root.lookupEnum(`${rootMeta.classType.name}Type`);
|
|
53
|
-
Object.keys(typeEnum.values).forEach((key, id) => {
|
|
54
|
-
if (id === 0) {
|
|
55
|
-
return; // Unspecified
|
|
56
|
-
}
|
|
57
|
-
const otherClassName = typeEnum.valuesOptions[key]['(className)'];
|
|
58
|
-
if (otherClassName === className) {
|
|
59
|
-
enumNumber = typeEnum.values[key];
|
|
60
|
-
}
|
|
61
|
-
enumMapping.set(typeEnum.values[key], typeEnum.valuesOptions[key]['(className)']);
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
catch (ex) {
|
|
65
|
-
// Ignore :')
|
|
66
|
-
}
|
|
67
|
-
objectMeta.protobuf = {
|
|
68
|
-
messageType: MessageType,
|
|
69
|
-
messageTypeEnum: enumNumber,
|
|
70
|
-
enumMapping,
|
|
71
|
-
};
|
|
72
|
-
this.options.types.set(className, MessageType);
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
resolve();
|
|
76
|
-
})
|
|
77
|
-
.catch((error) => {
|
|
78
|
-
return reject(error);
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
this.wrapperMessage = new protobuf.Type('WrapperMessage');
|
|
82
|
-
this.wrapperMessage.add(new protobuf.Field('data', 1, 'google.protobuf.Any'));
|
|
83
|
-
this.wrapperMessage.addJSON(protobuf.common['google/protobuf/any.proto'].nested);
|
|
84
|
-
return loadPromise;
|
|
85
|
-
})
|
|
86
|
-
.then(() => {
|
|
87
|
-
resolve();
|
|
88
|
-
})
|
|
89
|
-
.catch(reject);
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Serialize data
|
|
94
|
-
* @param {any} data Data to serialize
|
|
95
|
-
* @param {DataSerializerConfig} [config] Data serializer configuration
|
|
96
|
-
* @returns {Uint8Array} Serialized buffer
|
|
97
|
-
*/
|
|
98
|
-
static serialize(data, config) {
|
|
99
|
-
const serializedData = super.serialize(data, Object.assign(Object.assign({}, this.options), config));
|
|
100
|
-
const MessageType = this.options.types.get(data.constructor.name);
|
|
101
|
-
const message = MessageType.fromObject(serializedData);
|
|
102
|
-
const wrapper = this.wrapperMessage.create({
|
|
103
|
-
data: {
|
|
104
|
-
type_url: data.constructor.name,
|
|
105
|
-
value: MessageType.encode(message).finish(),
|
|
106
|
-
},
|
|
107
|
-
});
|
|
108
|
-
return this.wrapperMessage.encode(wrapper).finish();
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Deserialize data
|
|
112
|
-
* @param serializedData Data to deserialze
|
|
113
|
-
* @param dataType Optional data type to specify deserialization type
|
|
114
|
-
* @param config Data serializer configuration
|
|
115
|
-
*/
|
|
116
|
-
static deserialize(serializedData, dataType, config) {
|
|
117
|
-
const decodedData = this.wrapperMessage.decode(serializedData);
|
|
118
|
-
const typeURL = decodedData.data.type_url;
|
|
119
|
-
const MessageType = this.options.types.get(typeURL);
|
|
120
|
-
const decodedMessage = MessageType.decode(decodedData.data.value);
|
|
121
|
-
const finalType = dataType !== null && dataType !== void 0 ? dataType : this.knownTypes.get(typeURL);
|
|
122
|
-
return this.options.deserializer.convertSingleValue(decodedMessage, DataSerializerUtils.ensureTypeDescriptor(finalType), DataSerializer.knownTypes, undefined, undefined, Object.assign(Object.assign({}, config), this.options));
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
ProtobufSerializer.options = {
|
|
126
|
-
serializer: new InternalProtobufSerializer(),
|
|
127
|
-
deserializer: new InternalProtobufDeserializer(),
|
|
128
|
-
types: new Map(),
|
|
129
|
-
};
|
|
130
|
-
//# sourceMappingURL=ProtobufSerializer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ProtobufSerializer.js","sourceRoot":"","sources":["../../src/ProtobufSerializer.ts"],"names":[],"mappings":"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"}
|