# 模板文件

模板文件中包含自定义元数据规则校验插件需要的三个文件：自定义规则校验函数模板文件checkField.ts，自定义规则校验配置模板文件CustomExtensionValidationConfig.json和ts编译为js的配置模板文件tsconfig.json。

请创建指定名称的文件，并把下方源码拷贝到文件中。

#### 自定义规则校验函数模板文件checkField.ts

```
//如果自定义校验规则文件checkField.ts存储在默认位置（ohpm-repo解压根目录的plugins/fieldCheckPlugin文件夹内），插件文件checkField.ts中默认工具类引用地址如下
import {
  FieldDataType,
  ValidationExtensionRule
} from '../../libs/service/validator/validationExtensionRule/ValidationExtensionRule';      
import {UserBasicInfo} from '../../libs/service/validator/validationExtensionRule/type';
import {CustomValidateError} from '../../libs/service/validator/CustomValidateError';
import {OhpmLazyLogger as log} from '../../libs/packages/log';
/**
 * 自定义规则校验
 * @param fieldData 字段的取值
 * @param userInfo 发布三方包用户的信息，包含userName和userRole两部分
 *    userInfo.userName：发布三方包账户的用户名称
 *    userInfo.userRole：发布三方包账户的用户角色，1表示为管理员账户，0表示为普通用户
 */
export const checkField: ValidationExtensionRule = (fieldData: FieldDataType, userInfo: UserBasicInfo): void => {
  const name: string = <string>fieldData;      // 待校验字段的值，以name为例
  const userName: string = userInfo.userName;  // 发布三方包账户的用户名称
  const userRole: number = userInfo.userRole;  // 发布三方包账户的用户角色，1表示为管理员账户，0表示为普通用户
  // 错误抛出分为两部分：CustomValidateError第一个参数内容将打印在ohpm-repo运行日志中（命令行和ohpm-repo管理界面发布三方包均会打印），第二个参数内容将打印在ohpm-repo管理界面弹窗（仅限ohpm-repo管理界面发布三方包）
  if (name === 'package') {
    throw new CustomValidateError('Cannot publish package named "package"',
      '不能发布包名为package的包');
  }
  // 成功日志打印，日志级别打印可以为：log.trace，log.debug，log.info，log.warn和log.error
  log.info('校验成功');  // log.debug('校验成功');
 };
```

#### 自定义规则校验配置模板文件CustomExtensionValidationConfig.json

```
[
  {
    "attrName": "<被校验字段的名称1>",
    "configs": [
      {
        "ruleType": "规则的类型，不配置默认为CustomFunction",
        "description": "<规则的功能描述>",
        "ruleContent": "<规则的内容>"
      },
      {
        "ruleType": "规则的类型，不配置默认为CustomFunction",
        "description": "<规则的功能描述>",
        "ruleContent": "<规则的内容>"
      }
    ]
  },
  {
    "attrName": "<被校验字段的名称2>",
    "configs": [
      {
        "ruleType": "规则的类型，不配置默认为CustomFunction",
        "description": "<规则的功能描述>",
        "ruleContent": "<规则的内容>"
      },
      {
        "ruleType": "规则的类型，不配置默认为CustomFunction",
        "description": "<规则的功能描述>",
        "ruleContent": "<规则的内容>"
      }
    ]
  }
]
```

#### ts编译为js的配置模板文件tsconfig.json

```
// tsconfig.json 文件指定了编译项目所需的根目录下的文件以及编译选项，编译自定义插件文件 .ts 为 .js文件。
{
  "include": [
    "plugins/fieldCheckPlugin/*" // 插件文件的位置
  ],
  "compilerOptions": {
    "target": "es2016",
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "module": "commonjs",
    "rootDirs": [
      "./src",
      "./test"
    ],
    "typeRoots": [
      "./node_modules/@types"
    ],
    "types": [
      "node",
    ],
    "resolveJsonModule": true,
    "outDir": "./plugins/outDir",   // 编译后文件输出的位置
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "alwaysStrict": true,
    "noImplicitReturns": true,
    "skipLibCheck": true
  }
}
```