@aiot-toolkit/card-expression
Advanced tools
Comparing version 1.0.8 to 1.0.9
/** | ||
* ICardResult | ||
*/ | ||
type ICardNode = boolean | string | number | Array<string | number | boolean | ICardNode>; | ||
type ICardNode = boolean | string | number | Array<string | number | boolean | Object | ICardNode>; | ||
export default ICardNode; |
@@ -13,2 +13,4 @@ import { Expression } from '@babel/types'; | ||
private translateTemplateLiteral; | ||
private generatorString; | ||
private translateObject; | ||
private translateUnaryExpression; | ||
@@ -15,0 +17,0 @@ private translateBinaryExpression; |
/** | ||
* ICardResult | ||
*/ | ||
type ICardNode = boolean | string | number | Array<string | number | boolean | ICardNode>; | ||
type ICardNode = boolean | string | number | Array<string | number | boolean | Object | ICardNode>; | ||
export default ICardNode; |
@@ -13,2 +13,4 @@ import { Expression } from '@babel/types'; | ||
private translateTemplateLiteral; | ||
private generatorString; | ||
private translateObject; | ||
private translateUnaryExpression; | ||
@@ -15,0 +17,0 @@ private translateBinaryExpression; |
@@ -44,2 +44,4 @@ 'use strict'; | ||
return this.translateTemplateLiteral(source); | ||
case 'ObjectExpression': | ||
return this.translateObject(source); | ||
default: | ||
@@ -65,3 +67,3 @@ throw new Error(`Unsupported expression type: ${type}`); | ||
else { | ||
return `(${generator.default(item).code})`; | ||
return `(${this.generatorString(item)})`; | ||
} | ||
@@ -73,2 +75,19 @@ }) | ||
} | ||
generatorString(express) { | ||
return generator.default(express).code; | ||
} | ||
translateObject(source) { | ||
const { properties } = source; | ||
const data = {}; | ||
properties.forEach((item) => { | ||
const { key, value } = item; | ||
if (key.type === 'Identifier') { | ||
data[key.name] = this.translate(value); | ||
} | ||
else { | ||
throw new Error(`Unsupported expression type: ${item.type}, sourceCode: ${this.generatorString(key)}`); | ||
} | ||
}); | ||
return ['{}', data]; | ||
} | ||
translateUnaryExpression(source) { | ||
@@ -75,0 +94,0 @@ const { operator, argument } = source; |
{ | ||
"name": "@aiot-toolkit/card-expression", | ||
"description": "快应用卡片表达式解析库", | ||
"version": "1.0.8", | ||
"version": "1.0.9", | ||
"main": "lib/index.js", | ||
@@ -11,7 +11,9 @@ "module": "es/index.js", | ||
"import": "./es/index.mjs", | ||
"require": "./lib/index.js" | ||
"require": "./lib/index.js", | ||
"types": "./es/index.d.ts" | ||
}, | ||
"./*": { | ||
"import": "./*.mjs", | ||
"require": "./*.js" | ||
"require": "./*.js", | ||
"types": "./*.d.ts" | ||
} | ||
@@ -18,0 +20,0 @@ }, |
@@ -80,16 +80,16 @@ # 快应用卡片表达式解析 | ||
| 表达式 | 源码 | 产物 | 示例 | | ||
| --------------------------------------------------- | -------------------------------------------- | ---------------------------------------- | --------------------------------------------------------- | | ||
| 字面量 <br/> literal | `value` | `value` | `123` --> `123` | | ||
| 标识符<br/> Identifier | `value` | `["$", "value"]` | `a`-->`["$", "a"]` | | ||
| 数组表达式<br/> ArrayExpression | `[value1, value2, value3]` | `["~", "value1", "value2", "value3"]` | `[a, 1, 2]`-->`["~", ["$", "a"], 1, 2]` | | ||
| 一元表达式<br/> UnaryExpression | `operator value` | `["operator", value]` | `!a`-->`["!", ["$", "a"]]` | | ||
| 二元表达式<br/> BinaryExpression | `value1 operator value1` | `["operator", value1, value2]` | `a+1` --> `["+", ["$", "a"], 1]` | | ||
| 属性表达式<br/> MemberExpression | 1. `value1[value2]` <br/> 2. `value1.value2` | `[".", value1, value2]` | `a[1]` --> `[".", ["$", "a"], 1]` | | ||
| 逻辑表达<br/> LogicalExpression | `value1 operator value1` | `["operator", value1, value2]` | `a \|\| 1` --> `["\|\|", ["$", "a"], 1]` | | ||
| 条件表达式<br/> ConditionalExpression | `condition? value1 : value2` | `[":?", "$condition" value1, value2]` | `a?x:1` --> `[":?", ["$", "a"], ["$", "x"], 1]` | | ||
| 调用表达式<br/> CallExpression | `fun(arg1, args2, ...)` | `["()", ["$", "fun"], arg1, arg2, ...]` | `fun(a, 123)` --> `["()", ["$", "fun"], ["$", "a"], 123]` | | ||
| 无前缀调用表达式 <br/>(可自定义,默认["$t", "$tc"]) | `noPrefixFun(arg1)` | `["()", "noPrefixFun", arg1, arg2, ...]` | `$t("abc")` --> `["()", "$t", "abc"]` | | ||
| 模板字符串 | `str-${js}` | 相当于**加法**二元表 | | ||
| 达式 `"str" + js` | | | ||
| 表达式 | 源码 | 产物 | 示例 | | ||
| --------------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------------------------------------- | | ||
| 字面量 <br/> literal | `value` | `value` | `123` --> `123` | | ||
| 标识符<br/> Identifier | `value` | `["$", "value"]` | `a`-->`["$", "a"]` | | ||
| 数组表达式<br/> ArrayExpression | `[value1, value2, value3]` | `["~", "value1", "value2", "value3"]` | `[a, 1, 2]`-->`["~", ["$", "a"], 1, 2]` | | ||
| 一元表达式<br/> UnaryExpression | `operator value` | `["operator", value]` | `!a`-->`["!", ["$", "a"]]` | | ||
| 二元表达式<br/> BinaryExpression | `value1 operator value1` | `["operator", value1, value2]` | `a+1` --> `["+", ["$", "a"], 1]` | | ||
| 属性表达式<br/> MemberExpression | 1. `value1[value2]` <br/> 2. `value1.value2` | `[".", value1, value2]` | `a[1]` --> `[".", ["$", "a"], 1]` | | ||
| 逻辑表达式<br/> LogicalExpression | `value1 operator value1` | `["operator", value1, value2]` | `a \|\| 1` --> `["\|\|", ["$", "a"], 1]` | | ||
| 条件表达式<br/> ConditionalExpression | `condition? value1 : value2` | `[":?", "$condition" value1, value2]` | `a?x:1` --> `[":?", ["$", "a"], ["$", "x"], 1]` | | ||
| 调用表达式<br/> CallExpression | `fun(arg1, args2, ...)` | `["()", ["$", "fun"], arg1, arg2, ...]` | `fun(a, 123)` --> `["()", ["$", "fun"], ["$", "a"], 123]` | | ||
| 无前缀调用表达式 <br/>(可自定义,默认["$t", "$tc"]) | `noPrefixFun(arg1)` | `["()", "noPrefixFun", arg1, arg2, ...]` | `$t("abc")` --> `["()", "$t", "abc"]` | | ||
| 模板字符串 | `str-${js}` | 相当于**加法**二元表达式 `"str" + js` | | ||
| 对象表达式<br/> ObjectExpression | `{key1: value1, key2: value2}` | `["{}", ["key1", value1], ["key2", value2]]` | `{x:1, y:"2", z:a+b}`-->`{x: 1, y: '2', z: ['+', ['$', 'a'], ['$', 'b']]}` | | ||
@@ -96,0 +96,0 @@ ## 转换参数 |
Sorry, the diff of this file is not supported yet
47907
1111