# converter_javascript
**Repository Path**: Midvale/converter_javascript
## Basic Information
- **Project Name**: converter_javascript
- **Description**: 通用JS转换器,把输入的JSON格式数据通过JS执行引擎转为标准格式数据
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2021-05-29
- **Last Updated**: 2021-05-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# converter_javascript
#### 介绍
通用JS转换器,把输入的JSON格式数据通过JS执行引擎转为标准格式数据
### 项目介绍
```本项目中javascript运行时环境由hub converter sdk提供, 该运行时环境只支持es5
调用HubSDKRunner中提供的apply方法可直接运行JavaScript脚本
注意:apply方法的param参数以及返回结果都必须是标准json对象的字符串
```
### 项目结构介绍以及主要类作用
1. HubSDKRunner 提供JavaScript运行时环境
2. JavaScriptWrapper(工具类) 包装对应转换器所需的脚本,新增加的converter脚本结构需按以下规范
3. resource文件夹结构描述
common----------通用js
dict------------数据字典文件夹
javascript------规则执行脚本文件夹
test------------测试脚本文件夹
```resource/dict 文件夹结构 (/[brand]/[dict].json),JavaScriptWrapper会加载对应目录下的所有.json格式的文件
例如:sample品牌(或挂件)pacs-common转化的数据字典 /sample/pacs-common-sample.json
/sample/pacs-common-sample2.json
resource/javascript 文件夹结构 (/[brand]/[converterCode].js),JavaScriptWrapper会加载与converterCode相等的js文件
例如:sample品牌(或挂件)s1010101类目从common到ross转换 /sample/common-ross-s1010101.js
注意:该脚本文件的最后一个方法为js引擎最终执行的入口方法(如:resources/javascript/sample/pacs-common.js中的pacsCommon方法),
该方法每个converter可以根据的不同情况自行定义(比如数据的预处理)。
调用_CONVERT执行转换
resource/test文件夹结构
expression_test.js 用于测试表达式的js执行脚本
```
### 测试
* 测试单个js方法 可以参考SampleRuleTest类中的测试用例
* 测试整个converter 可以参考SampleFunctionalTest类中的测试用例
* 注意:每个品牌或挂件的测试用例应在测试目录新建品牌或挂件的文件夹 如 test/com/baozun/canonical/convertor/sample,
* 测试目录中的resources文件夹结构同样需要按照品牌或挂件分文件夹存放 如 /test/resources/sample
### 规则描述
1. 规则包含
target:结果属性名
source:源数据
expression:表达式,此属性为一个function
type:规则类型
rule_desc:规则描述
dict_name:数据字典名
2. 规则类型目前只有以下几种类型,如需添加规则类型请一并更新此文件
COMPLEX: 复杂类型规则,需手写转换方法(expression 必填)
MAPPING_PROPERTIES: 从入参的properties中提取值映射(target source 必填)
MAPPING_DEFAULT: 从入参的根节点提取值映射(target source 必填)
DICT_TARGET: 从dict_name数据字典获取值映射到target(target source dict_name 必填)
FIX_VALUE: 固定值,将source的值赋到结果数据上(target source 必填)
PROPERTIES_CONSTRUCT: 从输入参数中提取值,设置到结果数据的properties属性中(target source 必填)
PS: 各种规则具体实现可查看common.js中_CONVERT方法