Skip to content

Repository files navigation

Welcome to ducker 👋

数据转换器,解耦前后端开发,提升开发效率

Motivation

✅ why we need ducker-model ? see the article

Install

NPM

Base Usage

importModelfrom'ducker-model'// 1.定义propertyconstproperty={id: String,name: Number,avatar: Object,}// 2.实例化modelconstinstanceModel=newModel(property)// 3.定义数据源constdataSource={id: 123,name: 'cuiyuteng',avatar: {uri:'http://xxxx.png'}}// 4.调用objectWithKeyValues方法解析数据constmodelData=instanceModel.objectWithKeyValues(dataSource)// modelData--> {"id":"","name":0,"avatar":{uri:'http://xxxx.png'}}

Usage ReplacedKeyFromPropertyName

importModelfrom'ducker-model'// 1.定义propertyconstproperty={id: String,name: String,avatar: String,loginTime: String,price: String,info: {sex: Number,real: {real_name: String}}}// 2.定义replacedKeyFromPropertyNameconstreplacedKeyFromPropertyName={id: {property: "uuid",defaultValue: '100'},name: "buyer.shopinfo.nickname",loginTime: {property: "loginTime",format: "l"},price: {property: "price",unit: 'B'},avatar: {property: ["avatar","file.avatar"],computed: ([a0,a1])=>{returna0||a1||''}},info: {sex: {property: "file.sex"},real: {real_name: {property: "file.real.real_name"}}}}// 3.实例化modelconstinstanceModel=newModel(property,replacedKeyFromPropertyName)// 4.定义数据源constdataSource={uuid: 123,buyer: {shopinfo: {nickname: "张三"}},loginTime: "1566978591904",price: "12300",avatar: 'http://a.png',file: {avatar: 'http://b.png',sex: 1,real: {real_name: 'P'}}}// 5.调用objectWithKeyValues方法解析数据constmodelData=instanceModel.objectWithKeyValues(dataSource)// modelData--> {"id":"100","name":"张三","avatar":"http://a.png","loginTime":"2019-08-28","price":"123.00","info":{"sex":1,"real":{"real_name":"P"}}}

Usage ValueForPath

importModel,{valueForPath}from'ducker-model'// 1.定义propertyconstproperty={uid: valueForPath(Number,"user.id"),}// 2.实例化modelconstinstanceModel=newModel(property)// 3.定义数据源constdataSource={user: {id: 123456},}// 4.调用objectWithKeyValues方法解析数据constmodelData=instanceModel.objectWithKeyValues(dataSource)// modelData--> {"uid":123456}

Usage Array & ObjectArrayWithKeyValuesArray

importModelfrom'ducker-model'// 1.定义propertyconstproperty={id: String,name: String,avatar: String,}// 2.定义replacedKeyFromPropertyNameconstreplacedKeyFromPropertyName={id: {property: "uuid",},name: "buyer.shopinfo.nickname",avatar: {property: "file.url"},}// 3.实例化modelconstinstanceModel=newModel(property,replacedKeyFromPropertyName)// 4.定义数据源constdataSource={uuid: '123456',buyer:{shopinfo:{nickname: 'xxx'}},file: {url:'http://xxxx'},}// 5.调用objectArrayWithKeyValuesArray方法解析数据constmodelData=instanceModel.objectArrayWithKeyValuesArray([dataSource,dataSource,dataSource])// modelData--> [{"id":"123456","name":"xxx","avatar":"http://xxxx"},{"id":"123456","name":"xxx","avatar":"http://xxxx"},{"id":"123456","name":"xxx","avatar":"http://xxxx"}]

Usage Object & ValueWithArray

importModel,{valueWithArray}from'ducker-model'// 1.定义propertyconstproperty={data: valueWithArray({time: String,to: Number}),source: valueWithArray(String),object: valueWithArray(Object),}// 2.定义replacedKeyFromPropertyNameconstreplacedKeyFromPropertyName={data: {property: "data",children: {time: {property: "time",},to: {property: "to",},}},source: {property: "datasource",},object: {property: "objectDataSource",},}// 3.实例化modelconstinstanceModel=newModel(property,replacedKeyFromPropertyName)// 4.定义数据源constdataSource={data: [{time: '1231512313',to: 'troila'}],datasource: ['1','2','3'],objectDataSource: [{a: 1},{b: 2}],}// 5.调用objectWithKeyValues方法解析数据constmodelData=instanceModel.objectWithKeyValues(dataSource)// modelData--> {"data":[{"time":"1231512313","to":0}],"source":["1","2","3"],"object":[{ "a": 1 }, { "b": 2 }]}

Usage ValueForPathWithArray

importModel,{valueForPathWithArray}from'ducker-model'// 1.定义propertyconstproperty={test: valueForPathWithArray(Number,"testDataSource"),}// 3.实例化modelconstinstanceModel=newModel(property)// 4.定义数据源constdataSource={testDataSource: [4,5,6],}// 5.调用objectWithKeyValues方法解析数据constmodelData=instanceModel.objectWithKeyValues(dataSource)// modelData--> {"test":[4,5,6]}

Usage Object & ValueWithArray & ValueWithArray

importModel,{valueWithArray}from'ducker-model'// 1.定义propertyconstproperty={lastTest: valueWithArray({title: String,data: valueWithArray({price: Number,content: String})}),}// 2.定义replacedKeyFromPropertyNameconstreplacedKeyFromPropertyName={lastTest: {property: "order",children: {title: {property: "title"},data: {property: "dataSource",children: {price: {property: "Price",},content: {property: "mrk",},}}},}}// 3.实例化modelconstinstanceModel=newModel(property,replacedKeyFromPropertyName)// 4.定义数据源constdataSource={order: [{title: 'order-1',dataSource: [{Price: 100,mrk: '这是订单1'},{Price: 200,mrk: '这是订单2'}]}]}// 5.调用objectWithKeyValues方法解析数据constmodelData=instanceModel.objectWithKeyValues(dataSource)// modelData--> {"lastTest":[{"title":"order-1",data:[{"price":100,"content":"这是订单1"},{"price":200,"content":"这是订单2"}]}]}

Instance Model Method

  • objectWithKeyValues
    • params: Object
    • return: Object
    constmodelData=instanceModel.objectWithKeyValues(dataSource)
  • objectArrayWithKeyValuesArray
    • params: Array
    • return: Array
    constmodelData=instanceModel.objectArrayWithKeyValuesArray([dataSource,dataSource,dataSource])

TIPS

  1. typeDate的属性,增加format字段,支持多种内置数据格式,默认为"l",可以选择的格式如下:

    • "l": "YYYY-MM-DD",
    • "ll": "YYYY 年 MM 月 DD 日",
    • "k": "YYYY-MM-DD hh:mm",
    • "kk": "YYYY 年 MM 月 DD 日 hh 点 mm 分",
    • "kkk": "YYYY 年 MM 月 DD 日 hh 点 mm 分 q",
    • "f": "YYYY-MM-DD hh:mm:ss",
    • "ff": "YYYY 年 MM 月 DD 日 hh 点 mm 分 ss 秒",
    • "fff": "YYYY 年 MM 月 DD 日 hh 点 mm 分 ss 秒 星期 w",
    • "n": "MM-DD",
    • "nn": "MM 月 DD 日"
  2. 添加了unit字段的,代表该属性值表示一个价格,模型内置十、百、千、万单位,可以快捷的将价格字段进行转换,例如1000 -> 100

  3. 属性定义增加computed,值为函数,可以用来自定义数据格式化处理

  4. property,值可以为一个数组,传入多个路径,此时可以通过定义 computed 方法来组合计算值

Author

👤 skinner

Show your support

Give a ⭐️ if this project helped you!

Contributors ✨

Thanks goes to these wonderful people (emoji key):

李杰
李杰

📖

This project follows the all-contributors specification. Contributions of any kind welcome!

About

🚗 数据转换器,解耦前后端开发,提升开发效率 https://mp.weixin.qq.com/s/q6xybux0fhrUz5HE5TY0aA

Topics

Resources

Contributing

Stars

73 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages