# chanjet-plugin-base

> 在Mutants框架中,为chanjet平台提供基础API

Latest version **1.0.0** (published 2016-09-13) · MIT license · 0 weekly downloads

## Install

```sh
npm install chanjet-plugin-base
pnpm add chanjet-plugin-base
yarn add chanjet-plugin-base
bun add chanjet-plugin-base
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2016-09-13 |
| First published | 2016-09-08 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | TonyJiang |
| Maintainers | chanjetsdp |

## Links

- npm: https://www.npmjs.com/package/chanjet-plugin-base
- npm.io page: https://npm.io/package/chanjet-plugin-base

## Dependencies (1)

- [chanjet-env-check](https://npm.io/package/chanjet-env-check.md) 1.0.0

## Recent versions

- 1.0.0 (latest) — 2016-09-13
- 0.0.22 — 2016-09-08

## README

# Chanjet-Plugin

带有 `chanjet-plugin-` 前缀的项目,都是在mutants框架中所提供的nativeAPI的封装类. 在设计时 , 由于考虑到将来可能会支持多平台(微信 , 钉钉等) . 所以设计如下图:



![设计图例](img/mutants/Plugin.png)



## 定义

### `Plugin` 插件基类

所有插件的基类, 用来描述插件的基本信息.



### `ChanjetDecorator` Chanjet平台装饰器

为插件适配到Chanjet平台上,一些平台相关的通用定义, 保存在这个装饰器中.



### `WeiXinDecorator` 微信装饰器

为插件适配到微信平台上, 微信的插件需要在config中声明所需api , 这些平台特殊处理, 定义在这个装饰器中.



### `MockDecorator` mock装饰器

用于在开发阶段,使用浏览器调试时使用, 返回模拟数据来保证开发和nativeAPI解耦.



### `PluginMocker` mock数据管理对象

为MockDecorator提供统一的mock数据管理. 接受JSONObject格式的mock数据, 其中键为每个插件的id , 值可以自己定义, 基于MockDecorator的实现类, 可以通过this.mockData来获取自己的mock数据.



#### 定义

以 `chanjet-plugin-sms` 为例. 首先定义自己插件的id

``` javascript
import {Plugin} from 'chanjet-plugin-base'

/**
 * 读取短信API基类
 * @author TonyJiang
 */
class SMSPlugin extends Plugin{

    constructor(){
        super();
        this.id = 'SMSPlugin';
    }

}
```



在实现mock类的时候,可以通过this.mockData来获取设置的mock数据

``` javascript
import SMSPlugin from '../interface'
import {MockDecorator} from 'chanjet-plugin-base'
  
/**
 * 短信插件mock实现类
 * @extends PluginMock,SMSPlugin
 */
@MockDecorator
class SMSPluginMock extends SMSPlugin{
    /**
     * 读取短信接口
     * @param options
     *      @property {TimeStamp} options.startDate 读取开始时间
     *      @property {TimeStamp} options.endDate   读取结束时间
     *      @property {String} options.address 手机号码
     *      @property {String} options.protocol 短信协议 "sms":SMS_PROTO , "mms":MMS_PROTO
     *      @property {String} options.read  是否已读  "unread":未读 , "read":已读
     *      @property {String} options.type  发送类型   "receive": 收到的短信 , "send" 发出的短信
     * @param callback
     */
    read(options , callback) {

        if(this.mockData){
            if (this.mockData.status == 'success') {

                let mock = this.mockData.data.success;
                callback({result: true, data: mock});

            } else {
                callback({result: false});
            }
        }else{
            callback({result : false});
        }


    }

}
```



具体参见 `chanjet-plugin-sms` 的源代码.







#### 示例

首先是mock数据的定义.

``` javascript
// mock.js 定义所有插件mock数据的文件

export default {
  	//id为SMSPlugin的mock数据
    SMSPlugin: {
      	//当前mock的插件状态
        status: "success",
		//每个状态对应的数据
        data: {
          	//成功状态的数据
            success: [
                {
                    "_id": 3333, //短消息序号
                    "thread_id": 0, //对话序号
                    "address": "15926306304", //发件人地址
                    "person": "henry", //发件人 返回一个数字就是联系人列表里的序号，陌生人为null
                    "date": new Date().getTime(), //日期 long
                    "protocol": 0, //协议 0 SMS_RPOTO, 1 MMS_PROTO
                    "read": 1, //是否阅读 0未读， 1已读
                    "status": 0, //状态 -1接收，0 complete, 64 pending, 128 failed
                    "type": 1, //类型 1是接收到的，2是已发出
                    "body": "", //消息内容
                    "service_center": "" //短信服务中心号码编号
                }
            ],
            //失败状态的数据
            error: {}
        }
    },

    //id为SharePlugin的mock数据
    SharePlugin: {
      	//当前mock的插件状态
      	status: "cancel"
    }
}
```



然后是设置mock数据

``` javascript
//引入PluginMocker对象
import {PluginMocker} from 'chanjet-plugin-base'
//引入刚才定义的mock.js
import mockData from 'mock'

//设置mock数据
PluginMocker.data = mockData;
```

---
_Source: https://npm.io/package/chanjet-plugin-base · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
