@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.
- package/dist/cjs/schemas/typescript/CameraCalibration.d.ts +2 -0
- package/dist/cjs/schemas/typescript/CameraCalibration.d.ts.map +1 -1
- package/dist/cjs/schemas/typescript/CompressedImage.d.ts +2 -0
- package/dist/cjs/schemas/typescript/CompressedImage.d.ts.map +1 -1
- package/dist/cjs/schemas/typescript/RawImage.d.ts +2 -0
- package/dist/cjs/schemas/typescript/RawImage.d.ts.map +1 -1
- package/dist/cjs/src/generateProto.d.ts.map +1 -1
- package/dist/cjs/src/generateProto.js +21 -3
- package/dist/cjs/src/generateProto.js.map +1 -1
- package/dist/cjs/src/generateProto.test.js +22 -22
- package/dist/cjs/src/schemas.d.ts.map +1 -1
- package/dist/cjs/src/schemas.js +18 -0
- package/dist/cjs/src/schemas.js.map +1 -1
- package/dist/cjs/src/testFixtures.d.ts.map +1 -1
- package/dist/cjs/src/testFixtures.js +1 -0
- package/dist/cjs/src/testFixtures.js.map +1 -1
- package/dist/cjs/src/types.d.ts +18 -16
- package/dist/cjs/src/types.d.ts.map +1 -1
- package/dist/esm/schemas/typescript/CameraCalibration.d.ts +2 -0
- package/dist/esm/schemas/typescript/CameraCalibration.d.ts.map +1 -1
- package/dist/esm/schemas/typescript/CompressedImage.d.ts +2 -0
- package/dist/esm/schemas/typescript/CompressedImage.d.ts.map +1 -1
- package/dist/esm/schemas/typescript/RawImage.d.ts +2 -0
- package/dist/esm/schemas/typescript/RawImage.d.ts.map +1 -1
- package/dist/esm/src/generateProto.d.ts.map +1 -1
- package/dist/esm/src/generateProto.js +21 -3
- package/dist/esm/src/generateProto.js.map +1 -1
- package/dist/esm/src/generateProto.test.js +22 -22
- package/dist/esm/src/schemas.d.ts.map +1 -1
- package/dist/esm/src/schemas.js +18 -0
- package/dist/esm/src/schemas.js.map +1 -1
- package/dist/esm/src/testFixtures.d.ts.map +1 -1
- package/dist/esm/src/testFixtures.js +1 -0
- package/dist/esm/src/testFixtures.js.map +1 -1
- package/dist/esm/src/types.d.ts +18 -16
- package/dist/esm/src/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/schemas/README.md +39 -0
- package/schemas/jsonschema/CameraCalibration.json +4 -0
- package/schemas/jsonschema/CompressedImage.json +4 -0
- package/schemas/jsonschema/RawImage.json +4 -0
- package/schemas/proto/foxglove/CameraCalibration.proto +3 -0
- package/schemas/proto/foxglove/CompressedImage.proto +3 -0
- package/schemas/proto/foxglove/RawImage.proto +3 -0
- package/schemas/ros1/CameraCalibration.msg +3 -0
- package/schemas/ros1/CompressedImage.msg +3 -0
- package/schemas/ros1/RawImage.msg +3 -0
- package/schemas/ros2/CameraCalibration.msg +3 -0
- package/schemas/ros2/CompressedImage.msg +3 -0
- package/schemas/ros2/RawImage.msg +3 -0
- package/schemas/typescript/CameraCalibration.ts +3 -0
- package/schemas/typescript/CompressedImage.ts +3 -0
- package/schemas/typescript/RawImage.ts +3 -0
- package/src/generateProto.test.ts +22 -22
- package/src/generateProto.ts +33 -4
- package/src/schemas.ts +21 -0
- package/src/testFixtures.ts +1 -0
- 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 =
|
|
40
|
+
bytes field_bytes = 5;
|
|
41
41
|
|
|
42
42
|
// float64 field
|
|
43
|
-
double field_float64 =
|
|
43
|
+
double field_float64 = 6;
|
|
44
44
|
|
|
45
45
|
// uint32 field
|
|
46
|
-
fixed32 field_uint32 =
|
|
46
|
+
fixed32 field_uint32 = 7;
|
|
47
47
|
|
|
48
48
|
// string field
|
|
49
|
-
string field_string =
|
|
49
|
+
string field_string = 8;
|
|
50
50
|
|
|
51
51
|
// duration array field
|
|
52
|
-
repeated google.protobuf.Duration field_duration_array =
|
|
52
|
+
repeated google.protobuf.Duration field_duration_array = 9;
|
|
53
53
|
|
|
54
54
|
// time array field
|
|
55
|
-
repeated google.protobuf.Timestamp field_time_array =
|
|
55
|
+
repeated google.protobuf.Timestamp field_time_array = 10;
|
|
56
56
|
|
|
57
57
|
// boolean array field
|
|
58
|
-
repeated bool field_boolean_array =
|
|
58
|
+
repeated bool field_boolean_array = 11;
|
|
59
59
|
|
|
60
60
|
// bytes array field
|
|
61
|
-
repeated bytes field_bytes_array =
|
|
61
|
+
repeated bytes field_bytes_array = 12;
|
|
62
62
|
|
|
63
63
|
// float64 array field
|
|
64
|
-
repeated double field_float64_array =
|
|
64
|
+
repeated double field_float64_array = 13;
|
|
65
65
|
|
|
66
66
|
// uint32 array field
|
|
67
|
-
repeated fixed32 field_uint32_array =
|
|
67
|
+
repeated fixed32 field_uint32_array = 14;
|
|
68
68
|
|
|
69
69
|
// string array field
|
|
70
|
-
repeated string field_string_array =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
91
|
+
repeated string field_string_fixed_array = 22; // length 3
|
|
92
92
|
|
|
93
93
|
// An enum field
|
|
94
|
-
ExampleProtoEnum field_enum =
|
|
94
|
+
ExampleProtoEnum field_enum = 23;
|
|
95
95
|
|
|
96
96
|
// An enum array field
|
|
97
|
-
repeated ExampleProtoEnum field_enum_array =
|
|
97
|
+
repeated ExampleProtoEnum field_enum_array = 24;
|
|
98
98
|
|
|
99
99
|
// A nested field
|
|
100
|
-
foxglove.NestedMessage field_nested =
|
|
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 =
|
|
108
|
+
repeated foxglove.NestedMessage field_nested_array = 4;
|
|
109
109
|
}
|
|
110
110
|
"
|
|
111
111
|
`);
|
package/src/generateProto.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
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 =
|
|
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} = ${
|
|
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" },
|
package/src/testFixtures.ts
CHANGED
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;
|