@abapify/adt-plugin-abapgit

中文文档
0.4.34发布于 2026/11/03MITTypeScriptES Module构建来源已验证近 30 天下载 3113

abapGit 串行化插件,用于 adt- cli —— 回合式 ADT 对象到/ 从 abapGit 在磁盘上的格式

中文使用文档
文档目录15 节
  1. 纯物质化
  2. 结构概览
  3. 关键设计决定
  4. 1. XSD Schemas作为真理的单一来源
  5. 2. 安全型XML处理的ts-xsd
  6. 3. ADK作为客户不可知面板
  7. 4. 不触摸文件系统
  8. 支持对象类型
  9. 文件结构
  10. 发展
  11. 大楼
  12. 测试
  13. 重新生成Schemas 中
  14. 捐款
  15. 另见

@abapify/adt-plugin-abapgit (英语)

version

abapGit格式插件用于ADT——将ABAP对象序列化到Git兼容的XML/ABAP文件.

纯物质化

登记人数 abapgitFormatPlugin 可以生成一个想要的对象树,而不包含 文件系统、 ADT 或 Git 副作用。 明确源组件覆盖 可变的 ADK 源获取器, 而现有的 XSD 后置处理器则继续 生成元数据 :

const { files } = await abapgitFormatPlugin.materialize({
  object: adkClass,
  objectType: 'CLAS',
  packagePath: ['ZROOT', 'ZROOT_FEATURE'],
  sources: {
    main: selectedMainSource,
    definitions: selectedLocalDefinitions,
  },
  formatOptions: { folderLogic: 'prefix' },
});

路径根植于下面 src/并附有说明 他们的语义作用和源组件身份。 现有文件系统导入 而Git-to-SAP出口API则保持不变.

结构概览

┌─────────────────────────────────────────────────────────────────────┐
│                        adt-plugin-abapgit                           │
├─────────────────────────────────────────────────────────────────────┤
│  XSD Schemas (xsd/)          →  ts-xsd codegen  →  TypeScript types │
│  (XML structure definition)     (build time)       + parser/builder │
├─────────────────────────────────────────────────────────────────────┤
│  Object Handlers (handlers/)                                        │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐       │
│  │  CLAS   │ │  INTF   │ │  DEVC   │ │  DTEL   │ │  DOMA   │       │
│  │ handler │ │ handler │ │ handler │ │ handler │ │ handler │       │
│  └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘       │
│       └──────────┬┴──────────┬┴──────────┬┴──────────┘             │
│                  ▼           ▼           ▼                          │
│            createHandler (factory)                                  │
│            - Auto-registration                                      │
│            - Default serialize logic                                │
│            - File naming conventions                                │
├─────────────────────────────────────────────────────────────────────┤
│  ADK Facade (@abapify/adk)                                          │
│  - AdkClass, AdkInterface, AdkPackage...                            │
│  - Client-agnostic object model                                     │
│  - Source code retrieval via getSource()/getIncludeSource()         │
└─────────────────────────────────────────────────────────────────────┘

关键设计决定

1. XSD Schemas作为真理的单一来源

为什么是XSD?

  • XML Schema 定义 (XSD) 是 行业标准 xML 结构验证
  • 可用 在我们的工具之外 (例如, xmllint --schema intf.xsd file.xml(中文(简体) )
  • 提供 正式合同 用于 abapGit XML 格式
  • 启用 自动验证 cI/CD管道中
# Validate any abapGit XML file against our schema
xmllint --schema xsd/intf.xsd myinterface.intf.xml --noout

2. 安全型XML处理的ts-xsd

为什么?

不同于典型的只产生类型的XML代码工具, ts-xsd 规定:

  • 类型脚本 带有完整类型的推论
  • XML 解析器 返回输入对象
  • XML 构建器 接受已输入对象
  • Schema 对象 用于运行时间验证
// Generated from XSD - fully typed parse/build
import { intf } from './schemas/generated';

const data = intf.parse(xmlString); // → AbapGitIntf (typed)
const xml = intf.build(data); // → string (valid XML)

3. ADK作为客户不可知面板

为什么不在插件中执行 ADT 客户端特性 ?

插件 只消耗 aDK 外观 :

  • ADK 处理所有 SAP 通信细节
  • 插件纯焦点 序列化格式
  • 同一插件与任何 ADT 客户端执行配合
  • 明确区分所关切的问题
// Plugin receives ADK objects, doesn't care how they were fetched
getSources: (cls) =>
  cls.includes.map((inc) => ({
    suffix: ABAPGIT_SUFFIX[inc.includeType],
    content: cls.getIncludeSource(inc.includeType), // ADK handles this
  }));

4. 不触摸文件系统

为什么将文件操作委托给基地类?

对象处理器 只定义映射数字 :

  • toAbapGit() - ADK数据 — abapGit XML结构
  • getSource() 编号 : getSources() - 要创建的源文件

这个 createHandler 工厂把手 :

  • 正确命名的文件创建
  • XML 大楼,装有适当的信封
  • 同步源承诺解析
  • 空内容过滤

支持对象类型

类型状态处理器页:1
分类✅clas.ts多个包含( 主, 本地端, 本地端, 本地端, 测试类, 宏)
内存✅intf.ts单一源文件
DEVC 维基百科✅devc.ts固定文件名 package.devc.xml
电信✅dtel.ts仅元数据( 无来源)
多米尼克✅doma.ts自定义固定值的序列化

文件结构

src/
├── zcl_example.clas.abap              # Main class source
├── zcl_example.clas.locals_def.abap   # Local type definitions
├── zcl_example.clas.locals_imp.abap   # Local implementations
├── zcl_example.clas.testclasses.abap  # Test classes
├── zcl_example.clas.xml               # Class metadata
├── zif_example.intf.abap              # Interface source
├── zif_example.intf.xml               # Interface metadata
├── ztest_dtel.dtel.xml                # Data element (no source)
├── ztest_doma.doma.xml                # Domain (no source)
└── package.devc.xml                   # Package definition

发展

大楼

npx nx build adt-plugin-abapgit

测试

npx nx test adt-plugin-abapgit

重新生成Schemas 中

修改 XSD 文件后 :

npx nx codegen adt-plugin-abapgit

捐款

见 捐款额 详细指南:

  • 添加新对象类型支持
  • XSD 计划公约
  • 执行模式
  • 测试要求

另见

版本与发布记录

@abapify/adt-plugin-abapgit 共发布 30 个版本,首次发布于 2026/04/21;过去 12 个月发布了 30 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.4.34latest2026/11/034 天前
0.4.332026/11/025 天前
0.4.322026/11/025 天前
0.4.312026/11/016 天前
0.4.292026/10/308 天前
0.4.282026/10/308 天前

关于 @abapify/adt-plugin-abapgit 的常见问题

@abapify/adt-plugin-abapgit 是什么?

abapGit 串行化插件,用于 adt- cli —— 回合式 ADT 对象到/ 从 abapGit 在磁盘上的格式

如何安装 @abapify/adt-plugin-abapgit?

在项目目录运行 npm install @abapify/adt-plugin-abapgit,或使用 pnpm add / yarn add / bun add。

@abapify/adt-plugin-abapgit 支持 TypeScript 吗?

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

@abapify/adt-plugin-abapgit 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@abapify/adt-plugin-abapgit 可以商用吗?

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

@abapify/adt-plugin-abapgit 的下载量有多少?

根据 npm 官方下载统计,@abapify/adt-plugin-abapgit 在 2026/10/05 – 2026/11/03 这 30 天内被下载 3,113 次,日均约 104 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@abapify/adt-plugin-abapgit 还在维护吗?

最新版本 0.4.34 发布于 2026/11/03(4 天前);至今共发布 30 个版本,其中过去 12 个月发布了 30 个;首次发布于 2026/04/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。