Skip to content

Conversation

@zwmmm
Copy link
Contributor

@zwmmm zwmmm commented Sep 30, 2025

📋 概述

新增 customRenderTemplateData hook 功能,允许用户在模板渲染前对 genFileFromTemplate 方法的 list 参数进行自定义处理,为不同文件类型提供精细化控制能力。

✨ 功能特性

  • 精细化控制: 支持对 7 种不同文件类型的 list 参数进行独立定制
  • 类型安全: 为每种文件类型提供完整的 TypeScript 类型约束
  • 错误容错: Hook 执行异常时自动降级到原始参数,确保生成流程不中断
  • 上下文信息: 提供文件名和完整参数对象作为上下文
  • 向后兼容: 与现有 hook 系统完美集成,不影响现有功能

🔧 主要变更

核心实现文件

src/index.ts

  • 新增 customRenderTemplateData hook 类型定义
  • 导入必要的类型依赖 (ControllerType, ISchemaItem)

src/generator/serviceGenarator.ts

  • genFileFromTemplate 方法中实现 hook 调用逻辑
  • 添加基于文件类型的条件分支处理
  • 实现完善的错误处理和日志记录机制

测试文件

test/customRenderTemplateData.spec.ts

  • 包含 12 个测试用例,覆盖所有文件类型
  • 测试功能性、集成性、异常处理和向后兼容性
  • 验证上下文参数传递和错误降级机制

test/example-files/openapi-custom-gen-file-list-hook.json

  • 专门的测试数据文件,包含多种 API 和类型定义
  • 支持全面的功能测试场景

文档更新

README.md & README-en_US.md

  • 在自定义 Hook 部分添加新功能介绍
  • 提供详细的使用示例和注意事项
  • 支持中英文双语文档

🎯 支持的文件类型

文件类型 处理数据类型 用途说明
serviceController APIDataType[] API接口文件生成
interface ITypeItem[] TypeScript类型定义
displayEnumLabel ITypeItem[] 枚举标签文件
displayTypeLabel ITypeItem[] 类型标签文件
schema ISchemaItem[] JSON Schema文件
serviceIndex ControllerType[] 服务索引文件
reactQuery APIDataType[] React Query hooks

💡 使用示例

import { TypescriptFileType } from 'openapi-ts-request';

const config = {
  schemaPath: 'your-openapi-url',
  hook: {
    customRenderTemplateData: {
      // 过滤废弃的API接口
      [TypescriptFileType.serviceController]: (list, context) => {
        return list.filter((api) => !api.path.includes('deprecated'));
      },

      // 修改错误的类型
      [TypescriptFileType.interface]: (list, context) => {
        return list.map((item) => {
          if (item.typeName === 'JSONObject') {
            return {
              typeName: 'JSONObject',
              type: 'Record<string, any>',
              props: [],
              isEnum: false,
            };
          }
          return item;
        });
      },
    },
  },
};

🧪 测试覆盖

  • 功能测试: 验证每种文件类型的 hook 正常工作
  • 集成测试: 确保与现有 hook 系统兼容
  • 异常处理: 验证错误降级机制
  • 向后兼容: 确认不使用新 hook 时的默认行为
  • 上下文验证: 验证 context 参数正确传递

测试结果: 12 个测试用例全部通过,生成 12 个快照文件

🔄 向后兼容性

  • ✅ 不使用新 hook 时,项目行为完全不变
  • ✅ 可以与现有的其他 hooks 混合使用
  • ✅ 所有现有配置继续有效
  • ✅ 无破坏性变更

📚 相关文档

  • 更新了中英文 README 文档
  • 添加了详细的使用说明和示例
  • 提供了完整的注意事项说明

🎉 使用场景

这个功能特别适用于以下场景:

  1. API 过滤: 排除特定的废弃或内部 API
  2. 类型定制: 为生成的类型添加项目特定的前缀或后缀
  3. 条件生成: 根据业务需求选择性生成特定类型的文件
  4. 数据转换: 在生成前对数据进行预处理和格式化
  5. 排序重组: 按特定规则对生成的内容进行排序

Breaking Changes: 无
Migration Required: 无
Dependencies: 无新增依赖

@changeset-bot
Copy link

changeset-bot bot commented Sep 30, 2025

🦋 Changeset detected

Latest commit: 1d1fda8

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
openapi-ts-request Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link
Member

@rookie-luochao rookie-luochao left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good job, 但是下面的细节需要调整一下:

customGenFileFromTemplateList =》customRenderTemplateData 这些命名都需要调整一下

'openapi-ts-request': minor
---

Added customGenFileFromTemplateList hook functionality
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

feat: Added customRenderTemplateData hook functionality


// 根据不同的文件类型调用相应的 hook 函数
switch (type) {
case 'serviceController':
Copy link
Member

@rookie-luochao rookie-luochao Sep 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

case TypescriptFileType.serviceController

try {
const template = this.getTemplate(type);

// 应用 customGenFileFromTemplateList hook (如果存在)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hook命名调整一下:customRenderTemplateData

@zwmmm zwmmm changed the title 🎯 feat: Add customGenFileFromTemplateList hook for fine-grained file generation control 🎯 feat: Add customRenderTemplateData hook for fine-grained file generation control Sep 30, 2025
@rookie-luochao rookie-luochao merged commit 1fd308e into openapi-ui:main Sep 30, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants