0.9.14 • Published 4 years ago

json-engine v0.9.14

Weekly downloads
2
License
MIT
Repository
-
Last release
4 years ago

JSON Engine

基于 JSON 的规则引擎。

由来

https://yuque.antfin-inc.com/docs/share/5ca023f4-86a2-408b-8c56-50271f9a9dd7#

规则示例

{
  define: { // 预定义,不需要进行展示处理的字段
    orderStatus: 'WAIT_SHIPPING',
    actualMaxRefundAmount: 100,
    operation: 'abortOrder',
    negotiationPropose: 'shipped_part_refund',
    userInput: 3,
    aaa: 2,
    c: {
      d: 1,
    },
    e: [{
      f: 2,
    }],
  },
  output: { // 数据池,规则可以自动从define里面抓取数据生成。如需设置默认字段,也可以写在此处
    issueId: 'xxxx',
  },
  rules: { // 规则
    rule0: { // 规则 block
      and: [{
        key: '%{aaa}',
        op: '==',
        value: '2',
      }],
    },
    rule1: { // 规则 block
      and: [{ //  and or not
        key: '%{aaa}',
        op: '==', // le ge lt gt is not eq exist
        value: 2,
      }, {
        or: [{
          key: '%{operation}',
          op: '===', // le ge lt gt is not
          value: 'abortOrder',
        }, {
          key: 'negotiationPropose',
          op: 'shipped_part_refund', // 错误的 operator 会被忽略并返回false
          value: 'x',
        }],
      }, {
        extend: 'rule0',
      }],
    },
    rule2: {
      extend: 'rule0',
    },
    rule3: {
      and: {
        extend: 'rule1',
      },
      not: {
        key: 1,
        op: '==',
        value: 2,
      },
    },
    rule4: {
      extend: 'rule3',
    },
    rule5: [{
      key: 1,
      op: '==',
      value: 1,
    }, {
      extend: 'rule1',
    }],
    rawTest: {
      raw: 'Date.now() > 1', // 此方法会被 eval 直接运行,尽量避免直接使用此语句
    },
    arrayTest: {
      key: '%{e.0.f}',
      op: '==',
      value: '2',
    },
    orTest: {
      or: [{
        key: '%{e.0.f}',
        op: '==',
        value: '1',
      }, {
        key: '2',
        op: '==',
        value: 2,
      }],
    },
  },
  init: {
    name: {
      value: 'aaa', required: false,
    },
  },
  observe: { // 进入观察的字段
    issueId: {
      rule5: { // 规则匹配后执行的动作,默认只支持 add 及 remove,如需要更多动作,请自己定义
        add: 'userInput',
        remove: 'aaa',
        aaaaAlias: 'text',
      },
    },
  }, // 指定被观察字段所使用的规则
  actions: { // 自定义动作存入区,此处对接开发代码
    aaaaAlias: 'myFunc',
  },
}

详细用法见 example

0.9.14

4 years ago

0.9.13

4 years ago

0.9.12

4 years ago

0.1.7

5 years ago