@foxglove/schemas 0.5.0 → 0.6.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 (58) hide show
  1. package/dist/cjs/schemas/typescript/CameraCalibration.d.ts +2 -0
  2. package/dist/cjs/schemas/typescript/CameraCalibration.d.ts.map +1 -1
  3. package/dist/cjs/schemas/typescript/CompressedImage.d.ts +2 -0
  4. package/dist/cjs/schemas/typescript/CompressedImage.d.ts.map +1 -1
  5. package/dist/cjs/schemas/typescript/RawImage.d.ts +2 -0
  6. package/dist/cjs/schemas/typescript/RawImage.d.ts.map +1 -1
  7. package/dist/cjs/src/generateProto.d.ts.map +1 -1
  8. package/dist/cjs/src/generateProto.js +21 -3
  9. package/dist/cjs/src/generateProto.js.map +1 -1
  10. package/dist/cjs/src/generateProto.test.js +22 -22
  11. package/dist/cjs/src/schemas.d.ts.map +1 -1
  12. package/dist/cjs/src/schemas.js +18 -0
  13. package/dist/cjs/src/schemas.js.map +1 -1
  14. package/dist/cjs/src/testFixtures.d.ts.map +1 -1
  15. package/dist/cjs/src/testFixtures.js +1 -0
  16. package/dist/cjs/src/testFixtures.js.map +1 -1
  17. package/dist/cjs/src/types.d.ts +18 -16
  18. package/dist/cjs/src/types.d.ts.map +1 -1
  19. package/dist/esm/schemas/typescript/CameraCalibration.d.ts +2 -0
  20. package/dist/esm/schemas/typescript/CameraCalibration.d.ts.map +1 -1
  21. package/dist/esm/schemas/typescript/CompressedImage.d.ts +2 -0
  22. package/dist/esm/schemas/typescript/CompressedImage.d.ts.map +1 -1
  23. package/dist/esm/schemas/typescript/RawImage.d.ts +2 -0
  24. package/dist/esm/schemas/typescript/RawImage.d.ts.map +1 -1
  25. package/dist/esm/src/generateProto.d.ts.map +1 -1
  26. package/dist/esm/src/generateProto.js +21 -3
  27. package/dist/esm/src/generateProto.js.map +1 -1
  28. package/dist/esm/src/generateProto.test.js +22 -22
  29. package/dist/esm/src/schemas.d.ts.map +1 -1
  30. package/dist/esm/src/schemas.js +18 -0
  31. package/dist/esm/src/schemas.js.map +1 -1
  32. package/dist/esm/src/testFixtures.d.ts.map +1 -1
  33. package/dist/esm/src/testFixtures.js +1 -0
  34. package/dist/esm/src/testFixtures.js.map +1 -1
  35. package/dist/esm/src/types.d.ts +18 -16
  36. package/dist/esm/src/types.d.ts.map +1 -1
  37. package/package.json +1 -1
  38. package/schemas/README.md +39 -0
  39. package/schemas/jsonschema/CameraCalibration.json +4 -0
  40. package/schemas/jsonschema/CompressedImage.json +4 -0
  41. package/schemas/jsonschema/RawImage.json +4 -0
  42. package/schemas/proto/foxglove/CameraCalibration.proto +3 -0
  43. package/schemas/proto/foxglove/CompressedImage.proto +3 -0
  44. package/schemas/proto/foxglove/RawImage.proto +3 -0
  45. package/schemas/ros1/CameraCalibration.msg +3 -0
  46. package/schemas/ros1/CompressedImage.msg +3 -0
  47. package/schemas/ros1/RawImage.msg +3 -0
  48. package/schemas/ros2/CameraCalibration.msg +3 -0
  49. package/schemas/ros2/CompressedImage.msg +3 -0
  50. package/schemas/ros2/RawImage.msg +3 -0
  51. package/schemas/typescript/CameraCalibration.ts +3 -0
  52. package/schemas/typescript/CompressedImage.ts +3 -0
  53. package/schemas/typescript/RawImage.ts +3 -0
  54. package/src/generateProto.test.ts +22 -22
  55. package/src/generateProto.ts +33 -4
  56. package/src/schemas.ts +21 -0
  57. package/src/testFixtures.ts +1 -0
  58. package/src/types.ts +13 -10
@@ -37,67 +37,67 @@ describe("generateProto", () => {
37
37
  bool field_boolean = 3;
38
38
 
39
39
  // bytes field
40
- bytes field_bytes = 4;
40
+ bytes field_bytes = 5;
41
41
 
42
42
  // float64 field
43
- double field_float64 = 5;
43
+ double field_float64 = 6;
44
44
 
45
45
  // uint32 field
46
- fixed32 field_uint32 = 6;
46
+ fixed32 field_uint32 = 7;
47
47
 
48
48
  // string field
49
- string field_string = 7;
49
+ string field_string = 8;
50
50
 
51
51
  // duration array field
52
- repeated google.protobuf.Duration field_duration_array = 8;
52
+ repeated google.protobuf.Duration field_duration_array = 9;
53
53
 
54
54
  // time array field
55
- repeated google.protobuf.Timestamp field_time_array = 9;
55
+ repeated google.protobuf.Timestamp field_time_array = 10;
56
56
 
57
57
  // boolean array field
58
- repeated bool field_boolean_array = 10;
58
+ repeated bool field_boolean_array = 11;
59
59
 
60
60
  // bytes array field
61
- repeated bytes field_bytes_array = 11;
61
+ repeated bytes field_bytes_array = 12;
62
62
 
63
63
  // float64 array field
64
- repeated double field_float64_array = 12;
64
+ repeated double field_float64_array = 13;
65
65
 
66
66
  // uint32 array field
67
- repeated fixed32 field_uint32_array = 13;
67
+ repeated fixed32 field_uint32_array = 14;
68
68
 
69
69
  // string array field
70
- repeated string field_string_array = 14;
70
+ repeated string field_string_array = 15;
71
71
 
72
72
  // duration fixed-length array field
73
- repeated google.protobuf.Duration field_duration_fixed_array = 15; // length 3
73
+ repeated google.protobuf.Duration field_duration_fixed_array = 16; // length 3
74
74
 
75
75
  // time fixed-length array field
76
- repeated google.protobuf.Timestamp field_time_fixed_array = 16; // length 3
76
+ repeated google.protobuf.Timestamp field_time_fixed_array = 17; // length 3
77
77
 
78
78
  // boolean fixed-length array field
79
- repeated bool field_boolean_fixed_array = 17; // length 3
79
+ repeated bool field_boolean_fixed_array = 18; // length 3
80
80
 
81
81
  // bytes fixed-length array field
82
- repeated bytes field_bytes_fixed_array = 18; // length 3
82
+ repeated bytes field_bytes_fixed_array = 19; // length 3
83
83
 
84
84
  // float64 fixed-length array field
85
- repeated double field_float64_fixed_array = 19; // length 3
85
+ repeated double field_float64_fixed_array = 20; // length 3
86
86
 
87
87
  // uint32 fixed-length array field
88
- repeated fixed32 field_uint32_fixed_array = 20; // length 3
88
+ repeated fixed32 field_uint32_fixed_array = 21; // length 3
89
89
 
90
90
  // string fixed-length array field
91
- repeated string field_string_fixed_array = 21; // length 3
91
+ repeated string field_string_fixed_array = 22; // length 3
92
92
 
93
93
  // An enum field
94
- ExampleProtoEnum field_enum = 22;
94
+ ExampleProtoEnum field_enum = 23;
95
95
 
96
96
  // An enum array field
97
- repeated ExampleProtoEnum field_enum_array = 23;
97
+ repeated ExampleProtoEnum field_enum_array = 24;
98
98
 
99
99
  // A nested field
100
- foxglove.NestedMessage field_nested = 24;
100
+ foxglove.NestedMessage field_nested = 25;
101
101
 
102
102
  // A nested array field
103
103
  // With
@@ -105,7 +105,7 @@ describe("generateProto", () => {
105
105
  // very
106
106
  // long
107
107
  // description
108
- repeated foxglove.NestedMessage field_nested_array = 25;
108
+ repeated foxglove.NestedMessage field_nested_array = 4;
109
109
  }
110
110
  "
111
111
  `);
@@ -1,4 +1,9 @@
1
- import { FoxgloveEnumSchema, FoxgloveMessageSchema, FoxglovePrimitive } from "./types";
1
+ import {
2
+ FoxgloveEnumSchema,
3
+ FoxgloveMessageField,
4
+ FoxgloveMessageSchema,
5
+ FoxglovePrimitive,
6
+ } from "./types";
2
7
 
3
8
  function primitiveToProto(type: Exclude<FoxglovePrimitive, "time" | "duration">) {
4
9
  switch (type) {
@@ -35,9 +40,33 @@ export function generateProto(
35
40
  );
36
41
  }
37
42
 
38
- let fieldNumber = 1;
43
+ const explicitFieldNumbers = new Set<number>();
44
+ for (const field of schema.fields) {
45
+ if (field.protobufFieldNumber != undefined) {
46
+ if (explicitFieldNumbers.has(field.protobufFieldNumber)) {
47
+ throw new Error(
48
+ `More than one field with protobufFieldNumber ${field.protobufFieldNumber}`,
49
+ );
50
+ }
51
+ explicitFieldNumbers.add(field.protobufFieldNumber);
52
+ }
53
+ }
54
+
55
+ let nextFieldNumber = 1;
56
+ const numberedFields = schema.fields.map(
57
+ (field): FoxgloveMessageField & { protobufFieldNumber: number } => {
58
+ if (field.protobufFieldNumber != undefined) {
59
+ return { ...field, protobufFieldNumber: field.protobufFieldNumber };
60
+ }
61
+ while (explicitFieldNumbers.has(nextFieldNumber)) {
62
+ ++nextFieldNumber;
63
+ }
64
+ return { ...field, protobufFieldNumber: nextFieldNumber++ };
65
+ },
66
+ );
67
+
39
68
  const imports = new Set<string>();
40
- const fields = schema.fields.map((field) => {
69
+ const fields = numberedFields.map((field) => {
41
70
  const lineComments: string[] = [];
42
71
  const qualifiers: string[] = [];
43
72
  if (field.array != undefined) {
@@ -70,7 +99,7 @@ export function generateProto(
70
99
  .trim()
71
100
  .split("\n")
72
101
  .map((line) => ` // ${line}\n`)
73
- .join("")} ${qualifiers.join(" ")} ${field.name} = ${fieldNumber++};${
102
+ .join("")} ${qualifiers.join(" ")} ${field.name} = ${field.protobufFieldNumber};${
74
103
  lineComments.length > 0 ? " // " + lineComments.join(", ") : ""
75
104
  }`;
76
105
  });
package/src/schemas.ts CHANGED
@@ -664,6 +664,13 @@ const CameraCalibration: FoxgloveMessageSchema = {
664
664
  type: { type: "primitive", name: "time" },
665
665
  description: "Timestamp of calibration data",
666
666
  },
667
+ {
668
+ name: "frame_id",
669
+ type: { type: "primitive", name: "string" },
670
+ description:
671
+ "Frame of reference for the camera. The origin of the frame is the optical center of the camera. +x points to the right in the image, +y points down, and +z points into the plane of the image.",
672
+ protobufFieldNumber: 9,
673
+ },
667
674
  {
668
675
  name: "width",
669
676
  type: { type: "primitive", name: "uint32" },
@@ -754,6 +761,13 @@ const CompressedImage: FoxgloveMessageSchema = {
754
761
  type: { type: "primitive", name: "time" },
755
762
  description: "Timestamp of image",
756
763
  },
764
+ {
765
+ name: "frame_id",
766
+ type: { type: "primitive", name: "string" },
767
+ description:
768
+ "Frame of reference for the image. The origin of the frame is the optical center of the camera. +x points to the right in the image, +y points down, and +z points into the plane of the image.",
769
+ protobufFieldNumber: 4,
770
+ },
757
771
  {
758
772
  name: "data",
759
773
  type: { type: "primitive", name: "bytes" },
@@ -777,6 +791,13 @@ const RawImage: FoxgloveMessageSchema = {
777
791
  type: { type: "primitive", name: "time" },
778
792
  description: "Timestamp of image",
779
793
  },
794
+ {
795
+ name: "frame_id",
796
+ type: { type: "primitive", name: "string" },
797
+ description:
798
+ "Frame of reference for the image. The origin of the frame is the optical center of the camera. +x points to the right in the image, +y points down, and +z points into the plane of the image.",
799
+ protobufFieldNumber: 7,
800
+ },
780
801
  {
781
802
  name: "width",
782
803
  type: { type: "primitive", name: "uint32" },
@@ -78,6 +78,7 @@ export const exampleMessage: FoxgloveMessageSchema = {
78
78
  description: "A nested array field\nWith\na\nvery\nlong\ndescription",
79
79
  type: { type: "nested", schema: exampleNestedMessage },
80
80
  array: true,
81
+ protobufFieldNumber: 4,
81
82
  },
82
83
  ],
83
84
  };
package/src/types.ts CHANGED
@@ -20,21 +20,24 @@ export type FoxgloveEnumSchema = {
20
20
  }>;
21
21
  };
22
22
 
23
+ export type FoxgloveMessageField = {
24
+ name: string;
25
+ type:
26
+ | { type: "primitive"; name: FoxglovePrimitive }
27
+ | { type: "nested"; schema: FoxgloveMessageSchema }
28
+ | { type: "enum"; enum: FoxgloveEnumSchema };
29
+ array?: true | number;
30
+ required?: true;
31
+ description: string;
32
+ protobufFieldNumber?: number;
33
+ };
34
+
23
35
  export type FoxgloveMessageSchema = {
24
36
  type: "message";
25
37
  name: string;
26
38
  description: string;
27
39
  rosEquivalent?: keyof typeof import("@foxglove/rosmsg-msgs-common").definitions;
28
- fields: ReadonlyArray<{
29
- name: string;
30
- type:
31
- | { type: "primitive"; name: FoxglovePrimitive }
32
- | { type: "nested"; schema: FoxgloveMessageSchema }
33
- | { type: "enum"; enum: FoxgloveEnumSchema };
34
- array?: true | number;
35
- required?: true;
36
- description: string;
37
- }>;
40
+ fields: ReadonlyArray<FoxgloveMessageField>;
38
41
  };
39
42
 
40
43
  export type FoxgloveSchema = FoxgloveMessageSchema | FoxgloveEnumSchema;