@foxglove/omgidl-parser

中文文档
1.2.2发布于 2025/10/14MITTypeScriptCommonJS构建来源已验证近 30 天下载 19.1万

分析 OMG IDL 以简化序列化定义

中文使用文档
文档目录3 节
  1. 示例
  2. API 密码
  3. OMG IDL 子集支持

OMG IDL 计划分析器

OMG IDL 解析( 去) 串行化信件定义

npm version

此软件包提供了分析原始文件的功能 .idl 切入解析,平整的信息定义.

输出定义可以和指定的根 schema 名称字符串一起传递给序列器 @foxglove/omgidl-serialization 以读取和写入 CDR、 XCDR1 和 XCDR2 信件.

示例


const schemaString = `
// Generated by https://github.com/foxglove/schemas

module foxglove {
// A vector in 3D space that represents a direction only
struct Vector3 {
  double x;
  double y;
  double z;
};
};

module foxglove {
struct Quaternion {
  double x;
  double y;
  double z;
  @default(1.0)
  double w;
};
};

module foxglove {
// A position and orientation for an object or reference frame in 3D space
struct Pose {
  // Point denoting position in 3D space
  Vector3 position;
  // Quaternion denoting orientation in 3D space
  Quaternion orientation;
};
};
`;

const definitions = parseIDL(schemaString);

definitions 结果是:

[
  {
    name: "foxglove::Vector3",
    aggregatedKind: "struct",
    definitions: [
      {
        name: "x",
        isComplex: false,
        type: "float64",
      },
      {
        name: "y",
        isComplex: false,
        type: "float64",
      },
      {
        name: "z",
        isComplex: false,
        type: "float64",
      },
    ],
  },
  {
    name: "foxglove::Quaternion",
    aggregatedKind: "struct",
    definitions: [
      {
        name: "x",
        isComplex: false,
        type: "float64",
      },
      {
        name: "y",
        isComplex: false,
        type: "float64",
      },
      {
        name: "z",
        isComplex: false,
        type: "float64",
      },
      {
        name: "w",
        annotations: {
          default: {
            name: "default",
            type: "const-param",
            value: 1,
          },
        },
        defaultValue: 1,
        isComplex: false,
        type: "float64",
      },
    ],
  },
  {
    name: "foxglove::Pose",
    aggregatedKind: "struct",
    definitions: [
      {
        isComplex: true,
        name: "position",
        type: "foxglove::Vector3",
      },
      {
        isComplex: true,
        name: "orientation",
        type: "foxglove::Quaternion",
      },
    ],
  },
]

API 密码

parseIDL(schema: string) - 粗浅的 .idl 用于解析,平分定义的策略字符串.

输出定义的TypeScript类型也可用.

OMG IDL 子集支持

注:数字类似 7.4.1 参照本节 OMG IDL 规格。 。 。 .

  • 一般支持的特性

    • 7.4.1 构建块核心数据类型(下文除外)
    • 扩展数字类型的支持 uint8, (中文(简体) ), int8 . uint64, (中文(简体) ), int64
      • 说明 7.4.13 未完全支持构建块扩展数据类型
    • 字数(带有一些十六进制、字符和 wide- 类型例外)
    • 空白、 水平和垂直标签、 新行、 窗体种子、 注释( 集合、 “ 空白” ) 被忽略, 除非用于分隔符号
    • 解析通用说明( 仅默认值读入 AST)
    • 工会和案件
    • 使用 @value 注释
    • 所有 XCDR 扩展类型 : @final, (中文(简体) ), @appendable,以及 @mutable
    • const Color color = RED; 财务报告和审定财务报表 const Color color = Color::RED; 被支持.
  • 不支持的特性

    • native 声明
    • 转发声明
    • 常数表达式
    • 无操作符(正数/负数之外)
    • 默认值注释类型检查
    • 标识符前缀 :: 范围
    • 总计类型继承
    • 注释定义
    • 从注解( 如 @autoid是因为 HASH 财务报告和审定财务报表 SEQUENTIAL 缩略语)
    • 地图类型
    • @autoid(HASH) 可变合计类型
    • 7.2.6.1 - 八面体整数不支持(014(中文(简体) )
    • 7.2.6.2.1 宽字符和宽字符串的支持有限
      • 可以读到计划,但只考虑 uint8
      • 宽字符和字符串字元不支持(L'X'(中文(简体) )
    • 7.2.6.3 - 不支持宽字符串文字
    • 7.2.3.1 - 我们没有明确检查相撞情况,我们使用对案件敏感的识别器,而IDL则要求识别器对案件不敏感。 警告: 这会导致消息读取不正确.
    • 7.4.2- 说吧7.4.16 不支持扩展的 IDL 构件
    • 与其他阵列类型防御或struct成员节点组成可变大小的阵列类型防御.
  • 不支持的引用和类型解析特性

    • 数字类型检查是否持续使用 。 这意味着,如果使用一个打错的常数,它可能造成消息读取错误,或者不匹配的类型会在去序列化消息中出现.
    • 我们不执行基于类型值范围 的常数在计划

版本与发布记录

@foxglove/omgidl-parser 共发布 13 个版本,首次发布于 2023/07/14;过去 12 个月发布了 0 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.2.2latest2025/10/141.1 年前
1.2.12025/08/151.3 年前
1.2.02025/05/221.5 年前
1.1.02024/11/082 年前
1.0.52024/05/152 年前
1.0.42024/04/112 年前

关于 @foxglove/omgidl-parser 的常见问题

@foxglove/omgidl-parser 是什么?

分析 OMG IDL 以简化序列化定义

如何安装 @foxglove/omgidl-parser?

在项目目录运行 npm install @foxglove/omgidl-parser,或使用 pnpm add / yarn add / bun add。

@foxglove/omgidl-parser 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@foxglove/omgidl-parser 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@foxglove/omgidl-parser 可以商用吗?

@foxglove/omgidl-parser 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@foxglove/omgidl-parser 的下载量有多少?

根据 npm 官方下载统计,@foxglove/omgidl-parser 在 2026/10/16 – 2026/11/14 这 30 天内被下载 190,619 次,日均约 6,354 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@foxglove/omgidl-parser 还在维护吗?

最新版本 1.2.2 发布于 2025/10/14(1.1 年前);至今共发布 13 个版本,其中过去 12 个月发布了 0 个;首次发布于 2023/07/14。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。