@foxglove/schemas 0.1.2 → 0.4.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 (320) hide show
  1. package/.github/workflows/ci.yml +7 -1
  2. package/README.md +45 -4
  3. package/dist/cjs/schemas/typescript/CameraCalibration.js +1 -1
  4. package/dist/cjs/schemas/typescript/CameraCalibration.js.map +1 -1
  5. package/dist/cjs/schemas/typescript/CircleAnnotation.js +1 -1
  6. package/dist/cjs/schemas/typescript/CircleAnnotation.js.map +1 -1
  7. package/dist/cjs/schemas/typescript/Color.js +1 -1
  8. package/dist/cjs/schemas/typescript/Color.js.map +1 -1
  9. package/dist/cjs/schemas/typescript/CompressedImage.js +1 -1
  10. package/dist/cjs/schemas/typescript/CompressedImage.js.map +1 -1
  11. package/dist/cjs/schemas/typescript/FrameTransform.d.ts +6 -3
  12. package/dist/cjs/schemas/typescript/FrameTransform.d.ts.map +1 -1
  13. package/dist/cjs/schemas/typescript/FrameTransform.js +1 -1
  14. package/dist/cjs/schemas/typescript/FrameTransform.js.map +1 -1
  15. package/dist/cjs/schemas/typescript/GeoJSON.js +1 -1
  16. package/dist/cjs/schemas/typescript/GeoJSON.js.map +1 -1
  17. package/dist/cjs/schemas/typescript/Grid.js +1 -1
  18. package/dist/cjs/schemas/typescript/Grid.js.map +1 -1
  19. package/dist/cjs/schemas/typescript/ImageAnnotations.js +1 -1
  20. package/dist/cjs/schemas/typescript/ImageAnnotations.js.map +1 -1
  21. package/dist/cjs/schemas/typescript/LaserScan.js +1 -1
  22. package/dist/cjs/schemas/typescript/LaserScan.js.map +1 -1
  23. package/dist/cjs/schemas/typescript/LocationFix.js +1 -1
  24. package/dist/cjs/schemas/typescript/LocationFix.js.map +1 -1
  25. package/dist/cjs/schemas/typescript/Log.js +1 -1
  26. package/dist/cjs/schemas/typescript/Log.js.map +1 -1
  27. package/dist/cjs/schemas/typescript/LogLevel.js +1 -1
  28. package/dist/cjs/schemas/typescript/LogLevel.js.map +1 -1
  29. package/dist/cjs/schemas/typescript/NumericType.js +1 -1
  30. package/dist/cjs/schemas/typescript/NumericType.js.map +1 -1
  31. package/dist/cjs/schemas/typescript/PackedElementField.d.ts +1 -1
  32. package/dist/cjs/schemas/typescript/PackedElementField.d.ts.map +1 -1
  33. package/dist/cjs/schemas/typescript/PackedElementField.js +1 -1
  34. package/dist/cjs/schemas/typescript/PackedElementField.js.map +1 -1
  35. package/dist/cjs/schemas/typescript/Point2.js +1 -1
  36. package/dist/cjs/schemas/typescript/Point2.js.map +1 -1
  37. package/dist/cjs/schemas/typescript/Point3.js +1 -1
  38. package/dist/cjs/schemas/typescript/Point3.js.map +1 -1
  39. package/dist/cjs/schemas/typescript/PointCloud.js +1 -1
  40. package/dist/cjs/schemas/typescript/PointCloud.js.map +1 -1
  41. package/dist/cjs/schemas/typescript/PointsAnnotation.d.ts +5 -1
  42. package/dist/cjs/schemas/typescript/PointsAnnotation.d.ts.map +1 -1
  43. package/dist/cjs/schemas/typescript/PointsAnnotation.js +1 -1
  44. package/dist/cjs/schemas/typescript/PointsAnnotation.js.map +1 -1
  45. package/dist/cjs/schemas/typescript/PointsAnnotationType.js +1 -1
  46. package/dist/cjs/schemas/typescript/PointsAnnotationType.js.map +1 -1
  47. package/dist/cjs/schemas/typescript/Pose.js +1 -1
  48. package/dist/cjs/schemas/typescript/Pose.js.map +1 -1
  49. package/dist/cjs/schemas/typescript/PoseInFrame.js +1 -1
  50. package/dist/cjs/schemas/typescript/PoseInFrame.js.map +1 -1
  51. package/dist/cjs/schemas/typescript/PosesInFrame.js +1 -1
  52. package/dist/cjs/schemas/typescript/PositionCovarianceType.js +1 -1
  53. package/dist/cjs/schemas/typescript/PositionCovarianceType.js.map +1 -1
  54. package/dist/cjs/schemas/typescript/Quaternion.js +1 -1
  55. package/dist/cjs/schemas/typescript/Quaternion.js.map +1 -1
  56. package/dist/cjs/schemas/typescript/RawImage.js +1 -1
  57. package/dist/cjs/schemas/typescript/RawImage.js.map +1 -1
  58. package/dist/cjs/schemas/typescript/Vector2.js +1 -1
  59. package/dist/cjs/schemas/typescript/Vector2.js.map +1 -1
  60. package/dist/cjs/schemas/typescript/Vector3.js +1 -1
  61. package/dist/cjs/schemas/typescript/Vector3.js.map +1 -1
  62. package/dist/cjs/schemas/typescript/index.d.ts +0 -1
  63. package/dist/cjs/schemas/typescript/index.d.ts.map +1 -1
  64. package/dist/cjs/schemas/typescript/index.js +0 -1
  65. package/dist/cjs/schemas/typescript/index.js.map +1 -1
  66. package/dist/cjs/scripts/updateGeneratedFiles.js +17 -4
  67. package/dist/cjs/scripts/updateGeneratedFiles.js.map +1 -1
  68. package/dist/cjs/src/generateJsonSchema.d.ts.map +1 -1
  69. package/dist/cjs/src/generateJsonSchema.js +4 -3
  70. package/dist/cjs/src/generateJsonSchema.js.map +1 -1
  71. package/dist/cjs/src/generateJsonSchema.test.js +6 -8
  72. package/dist/cjs/src/generateJsonSchema.test.js.map +1 -1
  73. package/dist/cjs/src/generateMarkdown.d.ts +3 -0
  74. package/dist/cjs/src/generateMarkdown.d.ts.map +1 -0
  75. package/dist/cjs/src/generateMarkdown.js +80 -0
  76. package/dist/cjs/src/generateMarkdown.js.map +1 -0
  77. package/dist/cjs/src/generateProto.js +1 -1
  78. package/dist/cjs/src/generateProto.js.map +1 -1
  79. package/dist/cjs/src/generateProto.test.js +1 -1
  80. package/dist/cjs/src/generateRos.d.ts +4 -1
  81. package/dist/cjs/src/generateRos.d.ts.map +1 -1
  82. package/dist/cjs/src/generateRos.js +8 -4
  83. package/dist/cjs/src/generateRos.js.map +1 -1
  84. package/dist/cjs/src/generateRos.test.js +463 -7
  85. package/dist/cjs/src/generateRos.test.js.map +1 -1
  86. package/dist/cjs/src/generateTypeScript.js +1 -1
  87. package/dist/cjs/src/generateTypeScript.js.map +1 -1
  88. package/dist/cjs/src/generateTypeScript.test.js +2 -2
  89. package/dist/cjs/src/schemas.d.ts +0 -2
  90. package/dist/cjs/src/schemas.d.ts.map +1 -1
  91. package/dist/cjs/src/schemas.js +23 -31
  92. package/dist/cjs/src/schemas.js.map +1 -1
  93. package/dist/esm/schemas/typescript/CameraCalibration.js +1 -1
  94. package/dist/esm/schemas/typescript/CameraCalibration.js.map +1 -1
  95. package/dist/esm/schemas/typescript/CircleAnnotation.js +1 -1
  96. package/dist/esm/schemas/typescript/CircleAnnotation.js.map +1 -1
  97. package/dist/esm/schemas/typescript/Color.js +1 -1
  98. package/dist/esm/schemas/typescript/Color.js.map +1 -1
  99. package/dist/esm/schemas/typescript/CompressedImage.js +1 -1
  100. package/dist/esm/schemas/typescript/CompressedImage.js.map +1 -1
  101. package/dist/esm/schemas/typescript/FrameTransform.d.ts +6 -3
  102. package/dist/esm/schemas/typescript/FrameTransform.d.ts.map +1 -1
  103. package/dist/esm/schemas/typescript/FrameTransform.js +1 -1
  104. package/dist/esm/schemas/typescript/FrameTransform.js.map +1 -1
  105. package/dist/esm/schemas/typescript/GeoJSON.js +1 -1
  106. package/dist/esm/schemas/typescript/GeoJSON.js.map +1 -1
  107. package/dist/esm/schemas/typescript/Grid.js +1 -1
  108. package/dist/esm/schemas/typescript/Grid.js.map +1 -1
  109. package/dist/esm/schemas/typescript/ImageAnnotations.js +1 -1
  110. package/dist/esm/schemas/typescript/ImageAnnotations.js.map +1 -1
  111. package/dist/esm/schemas/typescript/LaserScan.js +1 -1
  112. package/dist/esm/schemas/typescript/LaserScan.js.map +1 -1
  113. package/dist/esm/schemas/typescript/LocationFix.js +1 -1
  114. package/dist/esm/schemas/typescript/LocationFix.js.map +1 -1
  115. package/dist/esm/schemas/typescript/Log.js +1 -1
  116. package/dist/esm/schemas/typescript/Log.js.map +1 -1
  117. package/dist/esm/schemas/typescript/LogLevel.js +1 -1
  118. package/dist/esm/schemas/typescript/LogLevel.js.map +1 -1
  119. package/dist/esm/schemas/typescript/NumericType.js +1 -1
  120. package/dist/esm/schemas/typescript/NumericType.js.map +1 -1
  121. package/dist/esm/schemas/typescript/PackedElementField.d.ts +1 -1
  122. package/dist/esm/schemas/typescript/PackedElementField.d.ts.map +1 -1
  123. package/dist/esm/schemas/typescript/PackedElementField.js +1 -1
  124. package/dist/esm/schemas/typescript/PackedElementField.js.map +1 -1
  125. package/dist/esm/schemas/typescript/Point2.js +1 -1
  126. package/dist/esm/schemas/typescript/Point2.js.map +1 -1
  127. package/dist/esm/schemas/typescript/Point3.js +1 -1
  128. package/dist/esm/schemas/typescript/Point3.js.map +1 -1
  129. package/dist/esm/schemas/typescript/PointCloud.js +1 -1
  130. package/dist/esm/schemas/typescript/PointCloud.js.map +1 -1
  131. package/dist/esm/schemas/typescript/PointsAnnotation.d.ts +5 -1
  132. package/dist/esm/schemas/typescript/PointsAnnotation.d.ts.map +1 -1
  133. package/dist/esm/schemas/typescript/PointsAnnotation.js +1 -1
  134. package/dist/esm/schemas/typescript/PointsAnnotation.js.map +1 -1
  135. package/dist/esm/schemas/typescript/PointsAnnotationType.js +1 -1
  136. package/dist/esm/schemas/typescript/PointsAnnotationType.js.map +1 -1
  137. package/dist/esm/schemas/typescript/Pose.js +1 -1
  138. package/dist/esm/schemas/typescript/Pose.js.map +1 -1
  139. package/dist/esm/schemas/typescript/PoseInFrame.js +1 -1
  140. package/dist/esm/schemas/typescript/PoseInFrame.js.map +1 -1
  141. package/dist/esm/schemas/typescript/PosesInFrame.js +1 -1
  142. package/dist/esm/schemas/typescript/PositionCovarianceType.js +1 -1
  143. package/dist/esm/schemas/typescript/PositionCovarianceType.js.map +1 -1
  144. package/dist/esm/schemas/typescript/Quaternion.js +1 -1
  145. package/dist/esm/schemas/typescript/Quaternion.js.map +1 -1
  146. package/dist/esm/schemas/typescript/RawImage.js +1 -1
  147. package/dist/esm/schemas/typescript/RawImage.js.map +1 -1
  148. package/dist/esm/schemas/typescript/Vector2.js +1 -1
  149. package/dist/esm/schemas/typescript/Vector2.js.map +1 -1
  150. package/dist/esm/schemas/typescript/Vector3.js +1 -1
  151. package/dist/esm/schemas/typescript/Vector3.js.map +1 -1
  152. package/dist/esm/schemas/typescript/index.d.ts +0 -1
  153. package/dist/esm/schemas/typescript/index.d.ts.map +1 -1
  154. package/dist/esm/schemas/typescript/index.js +0 -1
  155. package/dist/esm/schemas/typescript/index.js.map +1 -1
  156. package/dist/esm/scripts/updateGeneratedFiles.js +17 -4
  157. package/dist/esm/scripts/updateGeneratedFiles.js.map +1 -1
  158. package/dist/esm/src/generateJsonSchema.d.ts.map +1 -1
  159. package/dist/esm/src/generateJsonSchema.js +4 -3
  160. package/dist/esm/src/generateJsonSchema.js.map +1 -1
  161. package/dist/esm/src/generateJsonSchema.test.js +6 -8
  162. package/dist/esm/src/generateJsonSchema.test.js.map +1 -1
  163. package/dist/esm/src/generateMarkdown.d.ts +3 -0
  164. package/dist/esm/src/generateMarkdown.d.ts.map +1 -0
  165. package/dist/esm/src/generateMarkdown.js +76 -0
  166. package/dist/esm/src/generateMarkdown.js.map +1 -0
  167. package/dist/esm/src/generateProto.js +1 -1
  168. package/dist/esm/src/generateProto.js.map +1 -1
  169. package/dist/esm/src/generateProto.test.js +1 -1
  170. package/dist/esm/src/generateRos.d.ts +4 -1
  171. package/dist/esm/src/generateRos.d.ts.map +1 -1
  172. package/dist/esm/src/generateRos.js +8 -4
  173. package/dist/esm/src/generateRos.js.map +1 -1
  174. package/dist/esm/src/generateRos.test.js +463 -7
  175. package/dist/esm/src/generateRos.test.js.map +1 -1
  176. package/dist/esm/src/generateTypeScript.js +1 -1
  177. package/dist/esm/src/generateTypeScript.js.map +1 -1
  178. package/dist/esm/src/generateTypeScript.test.js +2 -2
  179. package/dist/esm/src/schemas.d.ts +0 -2
  180. package/dist/esm/src/schemas.d.ts.map +1 -1
  181. package/dist/esm/src/schemas.js +21 -29
  182. package/dist/esm/src/schemas.js.map +1 -1
  183. package/package.json +2 -2
  184. package/schemas/README.md +1711 -0
  185. package/schemas/jsonschema/CameraCalibration.json +2 -2
  186. package/schemas/jsonschema/CircleAnnotation.json +5 -8
  187. package/schemas/jsonschema/Color.json +2 -2
  188. package/schemas/jsonschema/CompressedImage.json +2 -2
  189. package/schemas/jsonschema/FrameTransform.json +37 -63
  190. package/schemas/jsonschema/GeoJSON.json +2 -2
  191. package/schemas/jsonschema/Grid.json +9 -14
  192. package/schemas/jsonschema/ImageAnnotations.json +39 -20
  193. package/schemas/jsonschema/LaserScan.json +5 -8
  194. package/schemas/jsonschema/LocationFix.json +3 -3
  195. package/schemas/jsonschema/Log.json +3 -3
  196. package/schemas/jsonschema/PackedElementField.json +4 -4
  197. package/schemas/jsonschema/Point2.json +2 -2
  198. package/schemas/jsonschema/Point3.json +2 -2
  199. package/schemas/jsonschema/PointCloud.json +8 -12
  200. package/schemas/jsonschema/PointsAnnotation.json +34 -10
  201. package/schemas/jsonschema/Pose.json +4 -6
  202. package/schemas/jsonschema/PoseInFrame.json +5 -8
  203. package/schemas/jsonschema/PosesInFrame.json +5 -8
  204. package/schemas/jsonschema/Quaternion.json +2 -2
  205. package/schemas/jsonschema/RawImage.json +2 -2
  206. package/schemas/jsonschema/Vector2.json +2 -2
  207. package/schemas/jsonschema/Vector3.json +2 -2
  208. package/schemas/proto/foxglove/CameraCalibration.proto +1 -1
  209. package/schemas/proto/foxglove/CircleAnnotation.proto +1 -1
  210. package/schemas/proto/foxglove/Color.proto +1 -1
  211. package/schemas/proto/foxglove/CompressedImage.proto +1 -1
  212. package/schemas/proto/foxglove/FrameTransform.proto +8 -4
  213. package/schemas/proto/foxglove/GeoJSON.proto +1 -1
  214. package/schemas/proto/foxglove/Grid.proto +1 -1
  215. package/schemas/proto/foxglove/ImageAnnotations.proto +1 -1
  216. package/schemas/proto/foxglove/LaserScan.proto +1 -1
  217. package/schemas/proto/foxglove/LocationFix.proto +1 -1
  218. package/schemas/proto/foxglove/Log.proto +1 -1
  219. package/schemas/proto/foxglove/PackedElementField.proto +2 -2
  220. package/schemas/proto/foxglove/Point2.proto +1 -1
  221. package/schemas/proto/foxglove/Point3.proto +1 -1
  222. package/schemas/proto/foxglove/PointCloud.proto +1 -1
  223. package/schemas/proto/foxglove/PointsAnnotation.proto +10 -4
  224. package/schemas/proto/foxglove/Pose.proto +1 -1
  225. package/schemas/proto/foxglove/PoseInFrame.proto +1 -1
  226. package/schemas/proto/foxglove/PosesInFrame.proto +1 -1
  227. package/schemas/proto/foxglove/Quaternion.proto +1 -1
  228. package/schemas/proto/foxglove/RawImage.proto +1 -1
  229. package/schemas/proto/foxglove/Vector2.proto +1 -1
  230. package/schemas/proto/foxglove/Vector3.proto +1 -1
  231. package/schemas/ros1/CameraCalibration.msg +4 -1
  232. package/schemas/ros1/CircleAnnotation.msg +4 -1
  233. package/schemas/ros1/Color.msg +4 -1
  234. package/schemas/ros1/CompressedImage.msg +4 -1
  235. package/schemas/ros1/FrameTransform.msg +9 -3
  236. package/schemas/ros1/GeoJSON.msg +4 -1
  237. package/schemas/ros1/Grid.msg +4 -1
  238. package/schemas/ros1/ImageAnnotations.msg +4 -1
  239. package/schemas/ros1/LaserScan.msg +4 -1
  240. package/schemas/ros1/LocationFix.msg +4 -1
  241. package/schemas/ros1/Log.msg +4 -1
  242. package/schemas/ros1/PackedElementField.msg +4 -1
  243. package/schemas/ros1/Point2.msg +4 -1
  244. package/schemas/ros1/PointCloud.msg +4 -1
  245. package/schemas/ros1/PointsAnnotation.msg +11 -2
  246. package/schemas/ros1/PoseInFrame.msg +4 -1
  247. package/schemas/ros1/PosesInFrame.msg +4 -1
  248. package/schemas/ros1/RawImage.msg +4 -1
  249. package/schemas/ros1/Vector2.msg +4 -1
  250. package/schemas/ros2/CameraCalibration.msg +4 -1
  251. package/schemas/ros2/CircleAnnotation.msg +4 -1
  252. package/schemas/ros2/Color.msg +4 -1
  253. package/schemas/ros2/CompressedImage.msg +4 -1
  254. package/schemas/ros2/FrameTransform.msg +9 -3
  255. package/schemas/ros2/GeoJSON.msg +4 -1
  256. package/schemas/ros2/Grid.msg +4 -1
  257. package/schemas/ros2/ImageAnnotations.msg +4 -1
  258. package/schemas/ros2/LaserScan.msg +4 -1
  259. package/schemas/ros2/LocationFix.msg +4 -1
  260. package/schemas/ros2/Log.msg +4 -1
  261. package/schemas/ros2/PackedElementField.msg +4 -1
  262. package/schemas/ros2/Point2.msg +4 -1
  263. package/schemas/ros2/PointCloud.msg +4 -1
  264. package/schemas/ros2/PointsAnnotation.msg +11 -2
  265. package/schemas/ros2/PoseInFrame.msg +4 -1
  266. package/schemas/ros2/PosesInFrame.msg +4 -1
  267. package/schemas/ros2/RawImage.msg +4 -1
  268. package/schemas/ros2/Vector2.msg +4 -1
  269. package/schemas/typescript/CameraCalibration.ts +1 -1
  270. package/schemas/typescript/CircleAnnotation.ts +1 -1
  271. package/schemas/typescript/Color.ts +1 -1
  272. package/schemas/typescript/CompressedImage.ts +1 -1
  273. package/schemas/typescript/FrameTransform.ts +8 -4
  274. package/schemas/typescript/GeoJSON.ts +1 -1
  275. package/schemas/typescript/Grid.ts +1 -1
  276. package/schemas/typescript/ImageAnnotations.ts +1 -1
  277. package/schemas/typescript/LaserScan.ts +1 -1
  278. package/schemas/typescript/LocationFix.ts +1 -1
  279. package/schemas/typescript/Log.ts +1 -1
  280. package/schemas/typescript/LogLevel.ts +1 -1
  281. package/schemas/typescript/NumericType.ts +1 -1
  282. package/schemas/typescript/PackedElementField.ts +2 -2
  283. package/schemas/typescript/Point2.ts +1 -1
  284. package/schemas/typescript/Point3.ts +1 -1
  285. package/schemas/typescript/PointCloud.ts +1 -1
  286. package/schemas/typescript/PointsAnnotation.ts +8 -2
  287. package/schemas/typescript/PointsAnnotationType.ts +1 -1
  288. package/schemas/typescript/Pose.ts +1 -1
  289. package/schemas/typescript/PoseInFrame.ts +1 -1
  290. package/schemas/typescript/PosesInFrame.ts +1 -1
  291. package/schemas/typescript/PositionCovarianceType.ts +1 -1
  292. package/schemas/typescript/Quaternion.ts +1 -1
  293. package/schemas/typescript/RawImage.ts +1 -1
  294. package/schemas/typescript/Vector2.ts +1 -1
  295. package/schemas/typescript/Vector3.ts +1 -1
  296. package/schemas/typescript/index.ts +0 -1
  297. package/scripts/updateGeneratedFiles.ts +21 -10
  298. package/src/generateJsonSchema.test.ts +6 -8
  299. package/src/generateJsonSchema.ts +4 -3
  300. package/src/generateMarkdown.ts +88 -0
  301. package/src/generateProto.test.ts +1 -1
  302. package/src/generateProto.ts +1 -1
  303. package/src/generateRos.test.ts +464 -7
  304. package/src/generateRos.ts +14 -5
  305. package/src/generateTypeScript.test.ts +2 -2
  306. package/src/generateTypeScript.ts +1 -1
  307. package/src/schemas.ts +22 -30
  308. package/dist/cjs/schemas/typescript/Transform.d.ts +0 -13
  309. package/dist/cjs/schemas/typescript/Transform.d.ts.map +0 -1
  310. package/dist/cjs/schemas/typescript/Transform.js +0 -4
  311. package/dist/cjs/schemas/typescript/Transform.js.map +0 -1
  312. package/dist/esm/schemas/typescript/Transform.d.ts +0 -13
  313. package/dist/esm/schemas/typescript/Transform.d.ts.map +0 -1
  314. package/dist/esm/schemas/typescript/Transform.js +0 -3
  315. package/dist/esm/schemas/typescript/Transform.js.map +0 -1
  316. package/schemas/jsonschema/Transform.json +0 -68
  317. package/schemas/proto/foxglove/Transform.proto +0 -21
  318. package/schemas/ros1/Transform.msg +0 -10
  319. package/schemas/ros2/Transform.msg +0 -10
  320. package/schemas/typescript/Transform.ts +0 -17
@@ -45,10 +45,11 @@ export function generateJsonSchema(schema: FoxgloveMessageSchema): Record<string
45
45
  break;
46
46
  case "nested":
47
47
  fieldType = generateJsonSchema(field.type.schema);
48
+ delete fieldType.$comment;
48
49
  break;
49
50
  case "enum":
50
51
  fieldType = {
51
- title: `${field.type.enum.name}: ${field.type.enum.description}`,
52
+ title: `foxglove.${field.type.enum.name}`,
52
53
  description: field.description,
53
54
  oneOf: field.type.enum.values.map(({ name, value, description }) => ({
54
55
  title: name,
@@ -73,9 +74,9 @@ export function generateJsonSchema(schema: FoxgloveMessageSchema): Record<string
73
74
  }
74
75
 
75
76
  return {
76
- $comment: `Generated from ${schema.name} by @foxglove/schemas`,
77
- title: schema.name,
77
+ title: `foxglove.${schema.name}`,
78
78
  description: schema.description,
79
+ $comment: "Generated by https://github.com/foxglove/schemas",
79
80
  type: "object",
80
81
  properties,
81
82
  };
@@ -0,0 +1,88 @@
1
+ import { FoxgloveEnumSchema, FoxgloveMessageSchema } from "./types";
2
+
3
+ export function generateMarkdown(
4
+ schemas: Iterable<FoxgloveMessageSchema>,
5
+ enums: Iterable<FoxgloveEnumSchema>,
6
+ ): string {
7
+ const sortedSchemas = [...schemas].sort((a, b) => a.name.localeCompare(b.name));
8
+ const sortedEnums = [...enums].sort((a, b) => a.name.localeCompare(b.name));
9
+
10
+ return [
11
+ `\
12
+ # Foxglove schemas
13
+
14
+ See [Foxglove Schemas documentation](https://foxglove.dev/docs/studio/messages).
15
+
16
+ All schemas are generated from [schemas.ts](/src/schemas.ts).`,
17
+
18
+ "## Contents",
19
+
20
+ [
21
+ ...sortedEnums.map(({ name }) => `- [enum ${name}](#enum-${name.toLowerCase()})`),
22
+ ...sortedSchemas.map(({ name }) => `- [${name}](#${name.toLowerCase()})`),
23
+ ].join("\n"),
24
+ "----",
25
+ sortedEnums.map(
26
+ (enumSchema) => `\
27
+ ## enum ${enumSchema.name}
28
+
29
+ ${enumSchema.description}
30
+
31
+ name | value | description
32
+ ---- | ----- | -----------
33
+ ${enumSchema.values
34
+ .map((value) => `\`${value.name}\` | ${value.value} | ${value.description ?? ""}`)
35
+ .join("\n")}
36
+
37
+ `,
38
+ ),
39
+ ...sortedSchemas.map(
40
+ (schema) => `\
41
+ ## ${schema.name}
42
+
43
+ ${schema.description}
44
+
45
+ <table>
46
+ <tr>
47
+ <th>field</th>
48
+ <th>type</th>
49
+ <th>description</th>
50
+ </tr>
51
+ ${schema.fields
52
+ .map((field) => {
53
+ const arraySuffix =
54
+ typeof field.array === "number" ? `[${field.array}]` : field.array === true ? "[]" : "";
55
+ let type: string;
56
+ switch (field.type.type) {
57
+ case "enum":
58
+ type = `[enum ${field.type.enum.name}](#enum-${field.type.enum.name.toLowerCase()})`;
59
+ break;
60
+ case "nested":
61
+ type = `[${field.type.schema.name}](#${field.type.schema.name.toLowerCase()})`;
62
+ break;
63
+ case "primitive":
64
+ type = field.type.name;
65
+ break;
66
+ }
67
+ return `\
68
+ <tr>
69
+ <td><code>${field.name}</code></td>
70
+ <td>
71
+
72
+ ${type}${arraySuffix}
73
+
74
+ </td>
75
+ <td>
76
+
77
+ ${field.description}
78
+
79
+ </td>
80
+ </tr>`;
81
+ })
82
+ .join("\n")}
83
+ </table>`,
84
+ ),
85
+ ]
86
+ .flat()
87
+ .join("\n\n");
88
+ }
@@ -7,7 +7,7 @@ import { exampleEnum, exampleMessage } from "./testFixtures";
7
7
  describe("generateProto", () => {
8
8
  it("generates .proto files", () => {
9
9
  expect(generateProto(exampleMessage, [exampleEnum])).toMatchInlineSnapshot(`
10
- "// Generated from ExampleMessage by @foxglove/schemas
10
+ "// Generated by https://github.com/foxglove/schemas
11
11
 
12
12
  syntax = \\"proto3\\";
13
13
 
@@ -80,7 +80,7 @@ export function generateProto(
80
80
  )}${fields.join("\n\n")}\n}`;
81
81
 
82
82
  const outputSections = [
83
- `// Generated from ${schema.name} by @foxglove/schemas`,
83
+ `// Generated by https://github.com/foxglove/schemas`,
84
84
  'syntax = "proto3";',
85
85
 
86
86
  Array.from(imports)
@@ -8,7 +8,446 @@ import {
8
8
  import { foxgloveMessageSchemas } from "./schemas";
9
9
  import { exampleMessageWithoutArrayOfBytes } from "./testFixtures";
10
10
 
11
- describe("generateRosMsgFiles", () => {
11
+ describe("generateRosMsgDefinition", () => {
12
+ it("generates msg definition description for ROS 1", () => {
13
+ expect(generateRosMsgDefinition(exampleMessageWithoutArrayOfBytes, { rosVersion: 1 }))
14
+ .toMatchInlineSnapshot(`
15
+ Object {
16
+ "description": "An example type",
17
+ "fields": Array [
18
+ Object {
19
+ "arrayLength": undefined,
20
+ "description": "duration field",
21
+ "isArray": false,
22
+ "isComplex": false,
23
+ "name": "field_duration",
24
+ "type": "duration",
25
+ },
26
+ Object {
27
+ "arrayLength": undefined,
28
+ "description": "time field",
29
+ "isArray": false,
30
+ "isComplex": false,
31
+ "name": "field_time",
32
+ "type": "time",
33
+ },
34
+ Object {
35
+ "arrayLength": undefined,
36
+ "description": "boolean field",
37
+ "isArray": false,
38
+ "isComplex": false,
39
+ "name": "field_boolean",
40
+ "type": "bool",
41
+ },
42
+ Object {
43
+ "arrayLength": undefined,
44
+ "description": "bytes field",
45
+ "isArray": true,
46
+ "isComplex": false,
47
+ "name": "field_bytes",
48
+ "type": "uint8",
49
+ },
50
+ Object {
51
+ "arrayLength": undefined,
52
+ "description": "float64 field",
53
+ "isArray": false,
54
+ "isComplex": false,
55
+ "name": "field_float64",
56
+ "type": "float64",
57
+ },
58
+ Object {
59
+ "arrayLength": undefined,
60
+ "description": "uint32 field",
61
+ "isArray": false,
62
+ "isComplex": false,
63
+ "name": "field_uint32",
64
+ "type": "uint32",
65
+ },
66
+ Object {
67
+ "arrayLength": undefined,
68
+ "description": "string field",
69
+ "isArray": false,
70
+ "isComplex": false,
71
+ "name": "field_string",
72
+ "type": "string",
73
+ },
74
+ Object {
75
+ "arrayLength": undefined,
76
+ "description": "duration array field",
77
+ "isArray": true,
78
+ "isComplex": false,
79
+ "name": "field_duration_array",
80
+ "type": "duration",
81
+ },
82
+ Object {
83
+ "arrayLength": undefined,
84
+ "description": "time array field",
85
+ "isArray": true,
86
+ "isComplex": false,
87
+ "name": "field_time_array",
88
+ "type": "time",
89
+ },
90
+ Object {
91
+ "arrayLength": undefined,
92
+ "description": "boolean array field",
93
+ "isArray": true,
94
+ "isComplex": false,
95
+ "name": "field_boolean_array",
96
+ "type": "bool",
97
+ },
98
+ Object {
99
+ "arrayLength": undefined,
100
+ "description": "float64 array field",
101
+ "isArray": true,
102
+ "isComplex": false,
103
+ "name": "field_float64_array",
104
+ "type": "float64",
105
+ },
106
+ Object {
107
+ "arrayLength": undefined,
108
+ "description": "uint32 array field",
109
+ "isArray": true,
110
+ "isComplex": false,
111
+ "name": "field_uint32_array",
112
+ "type": "uint32",
113
+ },
114
+ Object {
115
+ "arrayLength": undefined,
116
+ "description": "string array field",
117
+ "isArray": true,
118
+ "isComplex": false,
119
+ "name": "field_string_array",
120
+ "type": "string",
121
+ },
122
+ Object {
123
+ "arrayLength": 3,
124
+ "description": "duration fixed-length array field",
125
+ "isArray": true,
126
+ "isComplex": false,
127
+ "name": "field_duration_fixed_array",
128
+ "type": "duration",
129
+ },
130
+ Object {
131
+ "arrayLength": 3,
132
+ "description": "time fixed-length array field",
133
+ "isArray": true,
134
+ "isComplex": false,
135
+ "name": "field_time_fixed_array",
136
+ "type": "time",
137
+ },
138
+ Object {
139
+ "arrayLength": 3,
140
+ "description": "boolean fixed-length array field",
141
+ "isArray": true,
142
+ "isComplex": false,
143
+ "name": "field_boolean_fixed_array",
144
+ "type": "bool",
145
+ },
146
+ Object {
147
+ "arrayLength": 3,
148
+ "description": "float64 fixed-length array field",
149
+ "isArray": true,
150
+ "isComplex": false,
151
+ "name": "field_float64_fixed_array",
152
+ "type": "float64",
153
+ },
154
+ Object {
155
+ "arrayLength": 3,
156
+ "description": "uint32 fixed-length array field",
157
+ "isArray": true,
158
+ "isComplex": false,
159
+ "name": "field_uint32_fixed_array",
160
+ "type": "uint32",
161
+ },
162
+ Object {
163
+ "arrayLength": 3,
164
+ "description": "string fixed-length array field",
165
+ "isArray": true,
166
+ "isComplex": false,
167
+ "name": "field_string_fixed_array",
168
+ "type": "string",
169
+ },
170
+ Object {
171
+ "description": "Value A",
172
+ "isConstant": true,
173
+ "name": "A",
174
+ "type": "uint8",
175
+ "value": 1,
176
+ "valueText": "1",
177
+ },
178
+ Object {
179
+ "description": "Value B",
180
+ "isConstant": true,
181
+ "name": "B",
182
+ "type": "uint8",
183
+ "value": 2,
184
+ "valueText": "2",
185
+ },
186
+ Object {
187
+ "arrayLength": undefined,
188
+ "description": "An enum field",
189
+ "isArray": false,
190
+ "isComplex": false,
191
+ "name": "field_enum",
192
+ "type": "uint8",
193
+ },
194
+ Object {
195
+ "arrayLength": undefined,
196
+ "description": "An enum array field",
197
+ "isArray": true,
198
+ "isComplex": false,
199
+ "name": "field_enum_array",
200
+ "type": "uint8",
201
+ },
202
+ Object {
203
+ "arrayLength": undefined,
204
+ "description": "A nested field",
205
+ "isArray": false,
206
+ "isComplex": true,
207
+ "name": "field_nested",
208
+ "type": "foxglove_msgs/NestedMessage",
209
+ },
210
+ Object {
211
+ "arrayLength": undefined,
212
+ "description": "A nested array field
213
+ With
214
+ a
215
+ very
216
+ long
217
+ description",
218
+ "isArray": true,
219
+ "isComplex": true,
220
+ "name": "field_nested_array",
221
+ "type": "foxglove_msgs/NestedMessage",
222
+ },
223
+ ],
224
+ "originalName": "ExampleMessage",
225
+ "rosFullInterfaceName": "foxglove_msgs/ExampleMessage",
226
+ "rosMsgInterfaceName": "foxglove_msgs/ExampleMessage",
227
+ }
228
+ `);
229
+ });
230
+ it("generates msg definition description for ROS 2", () => {
231
+ expect(generateRosMsgDefinition(exampleMessageWithoutArrayOfBytes, { rosVersion: 2 }))
232
+ .toMatchInlineSnapshot(`
233
+ Object {
234
+ "description": "An example type",
235
+ "fields": Array [
236
+ Object {
237
+ "arrayLength": undefined,
238
+ "description": "duration field",
239
+ "isArray": false,
240
+ "isComplex": false,
241
+ "name": "field_duration",
242
+ "type": "builtin_interfaces/Duration",
243
+ },
244
+ Object {
245
+ "arrayLength": undefined,
246
+ "description": "time field",
247
+ "isArray": false,
248
+ "isComplex": false,
249
+ "name": "field_time",
250
+ "type": "builtin_interfaces/Time",
251
+ },
252
+ Object {
253
+ "arrayLength": undefined,
254
+ "description": "boolean field",
255
+ "isArray": false,
256
+ "isComplex": false,
257
+ "name": "field_boolean",
258
+ "type": "bool",
259
+ },
260
+ Object {
261
+ "arrayLength": undefined,
262
+ "description": "bytes field",
263
+ "isArray": true,
264
+ "isComplex": false,
265
+ "name": "field_bytes",
266
+ "type": "uint8",
267
+ },
268
+ Object {
269
+ "arrayLength": undefined,
270
+ "description": "float64 field",
271
+ "isArray": false,
272
+ "isComplex": false,
273
+ "name": "field_float64",
274
+ "type": "float64",
275
+ },
276
+ Object {
277
+ "arrayLength": undefined,
278
+ "description": "uint32 field",
279
+ "isArray": false,
280
+ "isComplex": false,
281
+ "name": "field_uint32",
282
+ "type": "uint32",
283
+ },
284
+ Object {
285
+ "arrayLength": undefined,
286
+ "description": "string field",
287
+ "isArray": false,
288
+ "isComplex": false,
289
+ "name": "field_string",
290
+ "type": "string",
291
+ },
292
+ Object {
293
+ "arrayLength": undefined,
294
+ "description": "duration array field",
295
+ "isArray": true,
296
+ "isComplex": false,
297
+ "name": "field_duration_array",
298
+ "type": "builtin_interfaces/Duration",
299
+ },
300
+ Object {
301
+ "arrayLength": undefined,
302
+ "description": "time array field",
303
+ "isArray": true,
304
+ "isComplex": false,
305
+ "name": "field_time_array",
306
+ "type": "builtin_interfaces/Time",
307
+ },
308
+ Object {
309
+ "arrayLength": undefined,
310
+ "description": "boolean array field",
311
+ "isArray": true,
312
+ "isComplex": false,
313
+ "name": "field_boolean_array",
314
+ "type": "bool",
315
+ },
316
+ Object {
317
+ "arrayLength": undefined,
318
+ "description": "float64 array field",
319
+ "isArray": true,
320
+ "isComplex": false,
321
+ "name": "field_float64_array",
322
+ "type": "float64",
323
+ },
324
+ Object {
325
+ "arrayLength": undefined,
326
+ "description": "uint32 array field",
327
+ "isArray": true,
328
+ "isComplex": false,
329
+ "name": "field_uint32_array",
330
+ "type": "uint32",
331
+ },
332
+ Object {
333
+ "arrayLength": undefined,
334
+ "description": "string array field",
335
+ "isArray": true,
336
+ "isComplex": false,
337
+ "name": "field_string_array",
338
+ "type": "string",
339
+ },
340
+ Object {
341
+ "arrayLength": 3,
342
+ "description": "duration fixed-length array field",
343
+ "isArray": true,
344
+ "isComplex": false,
345
+ "name": "field_duration_fixed_array",
346
+ "type": "builtin_interfaces/Duration",
347
+ },
348
+ Object {
349
+ "arrayLength": 3,
350
+ "description": "time fixed-length array field",
351
+ "isArray": true,
352
+ "isComplex": false,
353
+ "name": "field_time_fixed_array",
354
+ "type": "builtin_interfaces/Time",
355
+ },
356
+ Object {
357
+ "arrayLength": 3,
358
+ "description": "boolean fixed-length array field",
359
+ "isArray": true,
360
+ "isComplex": false,
361
+ "name": "field_boolean_fixed_array",
362
+ "type": "bool",
363
+ },
364
+ Object {
365
+ "arrayLength": 3,
366
+ "description": "float64 fixed-length array field",
367
+ "isArray": true,
368
+ "isComplex": false,
369
+ "name": "field_float64_fixed_array",
370
+ "type": "float64",
371
+ },
372
+ Object {
373
+ "arrayLength": 3,
374
+ "description": "uint32 fixed-length array field",
375
+ "isArray": true,
376
+ "isComplex": false,
377
+ "name": "field_uint32_fixed_array",
378
+ "type": "uint32",
379
+ },
380
+ Object {
381
+ "arrayLength": 3,
382
+ "description": "string fixed-length array field",
383
+ "isArray": true,
384
+ "isComplex": false,
385
+ "name": "field_string_fixed_array",
386
+ "type": "string",
387
+ },
388
+ Object {
389
+ "description": "Value A",
390
+ "isConstant": true,
391
+ "name": "A",
392
+ "type": "uint8",
393
+ "value": 1,
394
+ "valueText": "1",
395
+ },
396
+ Object {
397
+ "description": "Value B",
398
+ "isConstant": true,
399
+ "name": "B",
400
+ "type": "uint8",
401
+ "value": 2,
402
+ "valueText": "2",
403
+ },
404
+ Object {
405
+ "arrayLength": undefined,
406
+ "description": "An enum field",
407
+ "isArray": false,
408
+ "isComplex": false,
409
+ "name": "field_enum",
410
+ "type": "uint8",
411
+ },
412
+ Object {
413
+ "arrayLength": undefined,
414
+ "description": "An enum array field",
415
+ "isArray": true,
416
+ "isComplex": false,
417
+ "name": "field_enum_array",
418
+ "type": "uint8",
419
+ },
420
+ Object {
421
+ "arrayLength": undefined,
422
+ "description": "A nested field",
423
+ "isArray": false,
424
+ "isComplex": true,
425
+ "name": "field_nested",
426
+ "type": "foxglove_msgs/NestedMessage",
427
+ },
428
+ Object {
429
+ "arrayLength": undefined,
430
+ "description": "A nested array field
431
+ With
432
+ a
433
+ very
434
+ long
435
+ description",
436
+ "isArray": true,
437
+ "isComplex": true,
438
+ "name": "field_nested_array",
439
+ "type": "foxglove_msgs/NestedMessage",
440
+ },
441
+ ],
442
+ "originalName": "ExampleMessage",
443
+ "rosFullInterfaceName": "foxglove_msgs/msg/ExampleMessage",
444
+ "rosMsgInterfaceName": "foxglove_msgs/ExampleMessage",
445
+ }
446
+ `);
447
+ });
448
+ });
449
+
450
+ describe("generateRosMsg", () => {
12
451
  it("generates msg file for ROS 1", () => {
13
452
  expect(
14
453
  generateRosMsg(
@@ -17,7 +456,10 @@ describe("generateRosMsgFiles", () => {
17
456
  }),
18
457
  ),
19
458
  ).toMatchInlineSnapshot(`
20
- "# Generated from ExampleMessage by @foxglove/schemas
459
+ "# foxglove_msgs/ExampleMessage
460
+ # An example type
461
+
462
+ # Generated by https://github.com/foxglove/schemas
21
463
 
22
464
  # duration field
23
465
  duration field_duration
@@ -110,7 +552,10 @@ describe("generateRosMsgFiles", () => {
110
552
  }),
111
553
  ),
112
554
  ).toMatchInlineSnapshot(`
113
- "# Generated from ExampleMessage by @foxglove/schemas
555
+ "# foxglove_msgs/msg/ExampleMessage
556
+ # An example type
557
+
558
+ # Generated by https://github.com/foxglove/schemas
114
559
 
115
560
  # duration field
116
561
  builtin_interfaces/Duration field_duration
@@ -202,7 +647,10 @@ describe("generateRosMsgMergedSchema", () => {
202
647
  rosVersion: 1,
203
648
  });
204
649
  expect(mergedSchema).toMatchInlineSnapshot(`
205
- "# Generated from ExampleMessage by @foxglove/schemas
650
+ "# foxglove_msgs/ExampleMessage
651
+ # An example type
652
+
653
+ # Generated by https://github.com/foxglove/schemas
206
654
 
207
655
  # duration field
208
656
  duration field_duration
@@ -285,7 +733,10 @@ describe("generateRosMsgMergedSchema", () => {
285
733
  foxglove_msgs/NestedMessage[] field_nested_array
286
734
  ================================================================================
287
735
  MSG: foxglove_msgs/NestedMessage
288
- # Generated from NestedMessage by @foxglove/schemas
736
+ # foxglove_msgs/NestedMessage
737
+ # An example nested message
738
+
739
+ # Generated by https://github.com/foxglove/schemas
289
740
 
290
741
  # An enum field
291
742
  uint32 field_enum
@@ -476,7 +927,10 @@ describe("generateRosMsgMergedSchema", () => {
476
927
  rosVersion: 2,
477
928
  });
478
929
  expect(mergedSchema).toMatchInlineSnapshot(`
479
- "# Generated from ExampleMessage by @foxglove/schemas
930
+ "# foxglove_msgs/msg/ExampleMessage
931
+ # An example type
932
+
933
+ # Generated by https://github.com/foxglove/schemas
480
934
 
481
935
  # duration field
482
936
  builtin_interfaces/Duration field_duration
@@ -559,7 +1013,10 @@ describe("generateRosMsgMergedSchema", () => {
559
1013
  foxglove_msgs/NestedMessage[] field_nested_array
560
1014
  ================================================================================
561
1015
  MSG: foxglove_msgs/NestedMessage
562
- # Generated from NestedMessage by @foxglove/schemas
1016
+ # foxglove_msgs/msg/NestedMessage
1017
+ # An example nested message
1018
+
1019
+ # Generated by https://github.com/foxglove/schemas
563
1020
 
564
1021
  # An enum field
565
1022
  uint32 field_enum