@openhps/protobuf 1.0.1 → 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.
Files changed (104) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +58 -38
  3. package/dist/cjs/InternalProtobufDeserializer.js +30 -15
  4. package/dist/cjs/InternalProtobufDeserializer.js.map +1 -1
  5. package/dist/cjs/InternalProtobufSerializer.js +7 -7
  6. package/dist/cjs/InternalProtobufSerializer.js.map +1 -1
  7. package/dist/cjs/PrimitiveWrapper.js +13 -0
  8. package/dist/cjs/PrimitiveWrapper.js.map +1 -0
  9. package/dist/cjs/ProtobufSerializer.js +27 -2
  10. package/dist/cjs/ProtobufSerializer.js.map +1 -1
  11. package/dist/cjs/bin/generator.js +3 -3
  12. package/dist/cjs/bin/generator.js.map +1 -1
  13. package/dist/cjs/generator/ObjectGenerator.js +30 -12
  14. package/dist/cjs/generator/ObjectGenerator.js.map +1 -1
  15. package/dist/cjs/generator/ProjectGenerator.js +89 -38
  16. package/dist/cjs/generator/ProjectGenerator.js.map +1 -1
  17. package/dist/cjs/generator/constants.js +11 -4
  18. package/dist/cjs/generator/constants.js.map +1 -1
  19. package/dist/cjs/package.json +3 -0
  20. package/dist/cjs/tsconfig.bundle.cjs.tsbuildinfo +1 -0
  21. package/dist/esm/InternalProtobufDeserializer.js +30 -14
  22. package/dist/esm/InternalProtobufDeserializer.js.map +1 -1
  23. package/dist/esm/InternalProtobufSerializer.js +7 -6
  24. package/dist/esm/InternalProtobufSerializer.js.map +1 -1
  25. package/dist/esm/PrimitiveWrapper.js +9 -0
  26. package/dist/esm/PrimitiveWrapper.js.map +1 -0
  27. package/dist/esm/ProtobufSerializer.js +30 -5
  28. package/dist/esm/ProtobufSerializer.js.map +1 -1
  29. package/dist/esm/bin/generator.js +5 -5
  30. package/dist/esm/bin/generator.js.map +1 -1
  31. package/dist/esm/decorators/index.js +1 -1
  32. package/dist/esm/generator/ObjectGenerator.js +32 -14
  33. package/dist/esm/generator/ObjectGenerator.js.map +1 -1
  34. package/dist/esm/generator/ProjectGenerator.js +92 -40
  35. package/dist/esm/generator/ProjectGenerator.js.map +1 -1
  36. package/dist/esm/generator/ServiceGenerator.js +1 -1
  37. package/dist/esm/generator/constants.js +11 -4
  38. package/dist/esm/generator/constants.js.map +1 -1
  39. package/dist/esm/generator/index.js +3 -3
  40. package/dist/esm/index.js +2 -2
  41. package/dist/esm/package.json +3 -0
  42. package/dist/esm/tsconfig.bundle.esm.tsbuildinfo +1 -0
  43. package/dist/esm/tsconfig.bundle.types.tsbuildinfo +1 -0
  44. package/dist/types/InternalProtobufDeserializer.d.ts +0 -2
  45. package/dist/types/InternalProtobufDeserializer.d.ts.map +1 -1
  46. package/dist/types/InternalProtobufSerializer.d.ts +0 -2
  47. package/dist/types/InternalProtobufSerializer.d.ts.map +1 -1
  48. package/dist/types/PrimitiveWrapper.d.ts +8 -0
  49. package/dist/types/PrimitiveWrapper.d.ts.map +1 -0
  50. package/dist/types/ProtobufSerializer.d.ts +6 -0
  51. package/dist/types/ProtobufSerializer.d.ts.map +1 -1
  52. package/dist/types/generator/ObjectGenerator.d.ts +2 -8
  53. package/dist/types/generator/ObjectGenerator.d.ts.map +1 -1
  54. package/dist/types/generator/ProjectGenerator.d.ts +1 -1
  55. package/dist/types/generator/ProjectGenerator.d.ts.map +1 -1
  56. package/dist/types/generator/constants.d.ts +1 -1
  57. package/dist/types/generator/constants.d.ts.map +1 -1
  58. package/dist/web/openhps-protobuf.es.js +17112 -12881
  59. package/dist/web/openhps-protobuf.es.js.map +1 -1
  60. package/dist/web/openhps-protobuf.es.min.js +2 -1
  61. package/dist/web/openhps-protobuf.es.min.js.LICENSE.txt +19 -0
  62. package/dist/web/openhps-protobuf.es.min.js.map +1 -1
  63. package/dist/web/openhps-protobuf.js +17434 -14605
  64. package/dist/web/openhps-protobuf.js.map +1 -1
  65. package/dist/web/openhps-protobuf.min.js +2 -1
  66. package/dist/web/openhps-protobuf.min.js.LICENSE.txt +19 -0
  67. package/dist/web/openhps-protobuf.min.js.map +1 -1
  68. package/package.json +125 -94
  69. package/src/InternalProtobufDeserializer.ts +52 -34
  70. package/src/InternalProtobufSerializer.ts +9 -10
  71. package/src/PrimitiveWrapper.ts +9 -0
  72. package/src/ProtobufSerializer.ts +33 -2
  73. package/src/bin/generator.ts +4 -4
  74. package/src/generator/ObjectGenerator.ts +34 -21
  75. package/src/generator/ProjectGenerator.ts +100 -42
  76. package/src/generator/constants.ts +11 -4
  77. package/dist/esm5/InternalProtobufDeserializer.js +0 -147
  78. package/dist/esm5/InternalProtobufDeserializer.js.map +0 -1
  79. package/dist/esm5/InternalProtobufSerializer.js +0 -132
  80. package/dist/esm5/InternalProtobufSerializer.js.map +0 -1
  81. package/dist/esm5/ProtobufSerializer.js +0 -131
  82. package/dist/esm5/ProtobufSerializer.js.map +0 -1
  83. package/dist/esm5/bin/generator.js +0 -104
  84. package/dist/esm5/bin/generator.js.map +0 -1
  85. package/dist/esm5/decorators/index.js +0 -2
  86. package/dist/esm5/decorators/index.js.map +0 -1
  87. package/dist/esm5/decorators/options.js +0 -2
  88. package/dist/esm5/decorators/options.js.map +0 -1
  89. package/dist/esm5/generator/ObjectGenerator.js +0 -311
  90. package/dist/esm5/generator/ObjectGenerator.js.map +0 -1
  91. package/dist/esm5/generator/ProjectGenerator.js +0 -115
  92. package/dist/esm5/generator/ProjectGenerator.js.map +0 -1
  93. package/dist/esm5/generator/ProtobufGenerator.js +0 -27
  94. package/dist/esm5/generator/ProtobufGenerator.js.map +0 -1
  95. package/dist/esm5/generator/ServiceGenerator.js +0 -10
  96. package/dist/esm5/generator/ServiceGenerator.js.map +0 -1
  97. package/dist/esm5/generator/constants.js +0 -18
  98. package/dist/esm5/generator/constants.js.map +0 -1
  99. package/dist/esm5/generator/index.js +0 -4
  100. package/dist/esm5/generator/index.js.map +0 -1
  101. package/dist/esm5/generator/types.js +0 -2
  102. package/dist/esm5/generator/types.js.map +0 -1
  103. package/dist/esm5/index.js +0 -3
  104. package/dist/esm5/index.js.map +0 -1
@@ -12,20 +12,26 @@ import {
12
12
  import chalk from 'chalk';
13
13
  import { AnyT, Constructor } from 'typedjson';
14
14
  import { HEADER } from './constants';
15
- import { ProtobufGenerator, ProtobufMessage } from './ProtobufGenerator';
15
+ import { ProtobufGenerator, ProtobufMessage, TypeMapping } from './ProtobufGenerator';
16
16
  import { ProjectBuildOptions } from './types';
17
17
 
18
+ // Re-exported so the generator's public surface does not change
19
+ export type { ProtobufPrimitive, TypeMapping } from './ProtobufGenerator';
20
+
18
21
  /**
19
22
  * Protobuf object generator
20
23
  */
21
- export class ObjectGenerator extends ProtobufGenerator<Object> { // eslint-disable-line
22
- processObject(object: Constructor<Object>, metaData: ObjectMemberMetadata): Promise<void> { // eslint-disable-line
24
+ // `Object` here is the global constructor interface used by Constructor<T>, not the wrapper type.
25
+ /* eslint-disable @typescript-eslint/no-wrapper-object-types */
26
+ export class ObjectGenerator extends ProtobufGenerator<Object> {
27
+ processObject(object: Constructor<Object>, metaData: ObjectMemberMetadata): Promise<void> {
23
28
  throw new Error('Method not implemented.');
24
29
  }
25
30
 
26
- generate(object: Constructor<Object>, metaData: ObjectMemberMetadata): Promise<ProtobufMessage> { // eslint-disable-line
31
+ generate(object: Constructor<Object>, metaData: ObjectMemberMetadata): Promise<ProtobufMessage> {
27
32
  throw new Error('Method not implemented.');
28
33
  }
34
+ /* eslint-enable @typescript-eslint/no-wrapper-object-types */
29
35
 
30
36
  protected static typeMapping(
31
37
  object: ObjectMetadata,
@@ -35,6 +41,7 @@ export class ObjectGenerator extends ProtobufGenerator<Object> { // eslint-disab
35
41
  ): TypeMapping {
36
42
  switch (type.ctor) {
37
43
  case String:
44
+ case Date:
38
45
  return {
39
46
  syntax: 'string',
40
47
  };
@@ -63,6 +70,14 @@ export class ObjectGenerator extends ProtobufGenerator<Object> { // eslint-disab
63
70
  memberOptions,
64
71
  buildOptions,
65
72
  );
73
+ // An array of a type protobuf cannot express — Set, Object, Function or
74
+ // a member with a custom serializer — maps to undefined, exactly as the
75
+ // Map case below already handles. Reading .syntax off it threw
76
+ // "Cannot read properties of undefined". The caller treats undefined as
77
+ // "omit this field".
78
+ if (mappings === undefined) {
79
+ return undefined;
80
+ }
66
81
  return {
67
82
  syntax: `repeated ${mappings.syntax}`,
68
83
  types: [mappings],
@@ -132,12 +147,17 @@ export class ObjectGenerator extends ProtobufGenerator<Object> { // eslint-disab
132
147
  }
133
148
 
134
149
  static processObject(object: ObjectMetadata, buildOptions: ProjectBuildOptions): void {
135
- object.protobuf = object.protobuf ?? {
136
- generator: {
137
- subModules: new Set(),
138
- subTypes: [],
139
- allowOverride: true,
140
- },
150
+ // object.protobuf is a slot shared with the runtime serializer, which fills it in
151
+ // as {messageType, messageTypeEnum, enumMapping} with no `generator` key. Guarding
152
+ // the whole object with `??` kept that value and then dereferenced a `generator`
153
+ // that was not there, so ProtobufSerializer.initialize() threw if anything had
154
+ // already initialised the serializer in the same process. Guard the two levels
155
+ // separately.
156
+ object.protobuf = object.protobuf ?? ({} as any);
157
+ object.protobuf.generator = object.protobuf.generator ?? {
158
+ subModules: new Set(),
159
+ subTypes: [],
160
+ allowOverride: true,
141
161
  };
142
162
 
143
163
  const dataMembers = object.dataMembers;
@@ -189,7 +209,8 @@ export class ObjectGenerator extends ProtobufGenerator<Object> { // eslint-disab
189
209
  object.protobuf.generator.type = object.protobuf.generator.type ?? object.classType;
190
210
  subTypes.forEach((type) => {
191
211
  const subTypeMeta = DataSerializerUtils.getOwnMetadata(type);
192
- subTypeMeta.protobuf = subTypeMeta.protobuf ?? { generator: {} };
212
+ subTypeMeta.protobuf = subTypeMeta.protobuf ?? ({} as any);
213
+ subTypeMeta.protobuf.generator = subTypeMeta.protobuf.generator ?? {};
193
214
  subTypeMeta.protobuf.generator.type = object.classType;
194
215
  });
195
216
  }
@@ -249,7 +270,7 @@ export class ObjectGenerator extends ProtobufGenerator<Object> { // eslint-disab
249
270
  .map((member) => {
250
271
  const options: any =
251
272
  member.options && (member.options as any).protobuf ? (member.options as any).protobuf : {};
252
- let type: TypeMapping = undefined;
273
+ let type: TypeMapping;
253
274
  const memberName = options.name ?? member.name;
254
275
 
255
276
  if (memberName === 'uid') {
@@ -348,7 +369,7 @@ export class ObjectGenerator extends ProtobufGenerator<Object> { // eslint-disab
348
369
  return [
349
370
  packageStr,
350
371
  HEADER +
351
- `package ${packageStr.replace('@', '').replace('/', '.')};\n` +
372
+ `package ${packageStr.replace(/[@/-]/g, '')};\n` +
352
373
  `syntax = "proto3";\n` +
353
374
  imports
354
375
  .filter((value, idx) => {
@@ -367,11 +388,3 @@ export class ObjectGenerator extends ProtobufGenerator<Object> { // eslint-disab
367
388
  ];
368
389
  }
369
390
  }
370
-
371
- export type ProtobufPrimitive = 'string' | 'int32' | 'bool' | 'bytes';
372
- export interface TypeMapping {
373
- syntax: ProtobufPrimitive | string;
374
- types?: TypeMapping[];
375
- package?: string;
376
- name?: string;
377
- }
@@ -13,35 +13,79 @@ export class ProjectGenerator extends DataSerializer {
13
13
  private static _modules: Set<string> = new Set();
14
14
  private static _packages: Set<string> = new Set();
15
15
 
16
+ static findAllModules(dir: string): NodeModule[] {
17
+ const packageFile = path.resolve(path.join(dir, 'package.json'));
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)) {
21
+ return [];
22
+ }
23
+
24
+ if (fs.existsSync(packageFile)) {
25
+ const packageJson = JSON.parse(fs.readFileSync(packageFile, { encoding: 'utf-8' }));
26
+ const dependencies = packageJson.dependencies;
27
+ const devDependencies = packageJson.devDependencies;
28
+
29
+ // Combine dependencies and devDependencies
30
+ const allDependencies = { ...dependencies, ...devDependencies };
31
+
32
+ // Get the names of all modules
33
+ const allModuleNames = Object.keys(allDependencies);
34
+ const allModules = allModuleNames
35
+ .map((name) => {
36
+ try {
37
+ require(name);
38
+ return require.cache[require.resolve(name)];
39
+ } catch (error) {
40
+ return null;
41
+ }
42
+ })
43
+ .filter(Boolean) as NodeModule[];
44
+ return allModules;
45
+ }
46
+ }
47
+
16
48
  static findModule(dir: string): string {
17
- const packageFile = path.join(dir, 'package.json');
49
+ const resolvedDir = path.resolve(dir);
50
+ const packageFile = path.join(resolvedDir, 'package.json');
18
51
  if (fs.existsSync(packageFile)) {
19
52
  const packageJson = JSON.parse(fs.readFileSync(packageFile, { encoding: 'utf-8' }));
20
53
  return packageJson.name;
21
54
  } else {
22
- const completeDir = dir.split(path.sep);
23
- completeDir.pop();
24
- return this.findModule(completeDir.join(path.sep));
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);
25
61
  }
26
62
  }
27
63
 
28
64
  static loadModules(objects: Array<Serializable<any>>, module: NodeModule = require.main) {
29
65
  if (module === undefined) {
30
- // Use cache instead
31
- Object.values(require.cache).map((m) => this.loadModules(objects, m));
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));
32
71
  return;
33
72
  }
34
73
  this._modules.add(module.id);
35
- Object.keys(module.exports).forEach((key) => {
36
- const childModule = module.exports[key];
37
- if (objects.includes(childModule)) {
38
- childModule.prototype._module = this.findModule(path.dirname(require.resolve(module.id)));
39
- this._packages.add(childModule.prototype._module);
40
- }
41
- });
42
- module.children.forEach((module) => {
43
- if (!this._modules.has(module.id)) {
44
- this.loadModules(objects, module);
74
+ if (module.exports) {
75
+ Object.keys(module.exports).forEach((key) => {
76
+ const childModule = module.exports[key];
77
+ if (objects.includes(childModule)) {
78
+ childModule.prototype._module = this.findModule(path.dirname(require.resolve(module.id)));
79
+ this._packages.add(childModule.prototype._module);
80
+ }
81
+ });
82
+ }
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);
45
89
  }
46
90
  });
47
91
  }
@@ -55,6 +99,10 @@ export class ProjectGenerator extends DataSerializer {
55
99
 
56
100
  static loadClasses(): Array<ObjectMetadata> {
57
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();
105
+ this.findAllModules('./');
58
106
  this.knownTypes.forEach((value) => {
59
107
  const metadata = DataSerializerUtils.getOwnMetadata(value);
60
108
  if (metadata) {
@@ -94,37 +142,47 @@ export class ProjectGenerator extends DataSerializer {
94
142
 
95
143
  static buildProject(directory: string, options: ProjectBuildOptions = {}): Promise<number> {
96
144
  return new Promise((resolve, reject) => {
97
- // Prepare directories
98
- if (fs.existsSync(directory)) {
99
- fs.rmSync(directory, { recursive: true });
100
- }
101
- fs.mkdirSync(directory, { recursive: true });
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
+ }
102
158
 
103
- // Get all class sources
104
- if (options.logLevel > 0) {
105
- console.log('Generating protocol buffer messages ...');
106
- console.log('Use of any types = ', options.useAnyType);
107
- }
108
- ProjectGenerator.generateProtoMessages(options)
109
- .then((classes) => {
110
- if (options.logLevel > 0) console.log('Saving generating protocol buffer messages ...');
111
- classes.forEach((value, key) => {
112
- const packageDir = path.join(directory, ...value[0].split('.'));
113
- if (!fs.existsSync(packageDir)) {
114
- fs.mkdirsSync(packageDir);
115
- }
116
- fs.writeFileSync(path.join(packageDir, key + '.proto'), value[1], {
117
- encoding: 'utf-8',
118
- });
119
- });
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 });
120
164
 
121
- fs.writeFileSync(path.join(directory, 'common.proto'), COMMON, {
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], {
122
176
  encoding: 'utf-8',
123
177
  });
178
+ }
124
179
 
125
- resolve(classes.size);
126
- })
127
- .catch(reject);
180
+ await fs.promises.writeFile(path.join(resolvedDirectory, 'common.proto'), COMMON, {
181
+ encoding: 'utf-8',
182
+ });
183
+
184
+ resolve(classes.size);
185
+ })().catch(reject);
128
186
  });
129
187
  }
130
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-2023 Maxim Van de Wynckel & Vrije Universiteit Brussel
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
- `\n\nextend google.protobuf.EnumValueOptions {\n` +
13
- `\toptional string className = 1;\n` +
14
- `\toptional string packageName = 2;\n` +
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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"}