msa-engine v0.1.0-beta-3
MSA Engine
Usage
import Engine from "msa-engine";
import { components } from "msa-spec";
const engine = new Engine();
const Global = {};
const Parameters = {};
engine.parse(yamlText, {
Global,
Parameters,
}, { components }).then((parsedEngine) => {
console.log(parsedEngine.create());
console.log(parsedEngine.getOperation());
});
Parser
渲染基础数据
{{name}}
渲染 True/False
{{&true}}
True
{{/}}
{{^true}}
False
{{/}}
{{!true}}
False
{{/}}
渲染列表
{{#list}}
Index: {{$index}}
Item: {{$item}}
{{/}}
渲染嵌套列表
{{#list}}
Index: {{$index}}
Item: {{$item}}
{{#$item.children}}
ChildIndex: {{$index}}
Item: {{$item}}
ParentIndex: {{$parent.$index}}
ParentItem: {{$parent.$item}}
{{/}}
{{/}}
Testing
npm run dev
内置 Helper
comparison
{{and}}
逻辑与
参数:...args
...args
{unknown[]}returns
{boolean}: 返回值,如果所有参数都为 true,则返回true
,否则返回false
Example
{{&and(eq(Parameters.Cpu, 1), eq(Parameters.Memory, 1024))}}
HttpTrigger:
Type: ALIYUN::FC3::Trigger
{{/}}
{{or}}
逻辑或
参数:...args
...args
{unknown[]}returns
{boolean}: 返回值,如果任意一个参数为 true,则返回true
,否则返回false
Example
{{&or(eq(Parameters.Cpu, 1), eq(Parameters.Memory, 1024))}}
HttpTrigger:
Type: ALIYUN::FC3::Trigger
{{/}}
{{not}}
逻辑非
参数:a
a
{unknown}returns
{boolean}: 返回值,如果a
为 false,则返回true
,否则返回false
Example
{{¬(eq(Parameters.Cpu, 1))}}
HttpTrigger:
Type: ALIYUN::FC3::Trigger
{{/}}
{{eq}}
逻辑判断,如果 a
等于 b
,则返回 true, 否则返回 false
注:如果参数为非原始类型,则会进行序列化后以字符串形式进行比较
参数:a
、b
a
{unknown}b
{unknown}returns
{boolean}: 返回值,如果a
等于b
,则返回true
,否则返回false
Example
{{&eq(Parameters.Cpu, 1)}}
HttpTrigger:
Type: ALIYUN::FC3::Trigger
{{/}}
{{gt}}
逻辑判断,如果 a
大于 b
,则返回 true, 否则返回 false
注:如果参数为非原始类型,则会进行序列化后以字符串形式进行比较
参数:a
、b
a
{unknown}b
{unknown}returns
{boolean}: 返回值,如果a
大于b
,则返回true
,否则返回false
{{gte}}
逻辑判断,如果 a
大于等于 b
,则返回 true, 否则返回 false
注:如果参数为非原始类型,则会进行序列化后以字符串形式进行比较
参数:a
、b
a
{unknown}b
{unknown}returns
{boolean}: 返回值,如果a
大于等于b
,则返回true
,否则返回false
{{lt}}
逻辑判断,如果 a
小于 b
,则返回 true, 否则返回 false
注:如果参数为非原始类型,则会进行序列化后以字符串形式进行比较
参数:a
、b
a
{unknown}b
{unknown}returns
{boolean}: 返回值,如果a
小于b
,则返回true
,否则返回false
{{lte}}
逻辑判断,如果 a
小于等于 b
,则返回 true, 否则返回 false
注:如果参数为非原始类型,则会进行序列化后以字符串形式进行比较
参数:a
、b
a
{unknown}b
{unknown}returns
{boolean}: 返回值,如果a
小于等于b
,则返回true
,否则返回false
utils
{{Get}}
获取对象的属性, 参考 lodash.get
参数:data
、key
、defaultValue
data
{unknown}key
{string}defaultValue
{unknown}
{{IsTls}}
判断是否为 Https, 参数有可能为 Object
注:如果参数为 Object,则需要将 Object 转换为 JSON 字符串后判断是否包含 :443
或 :80
参数:url
url
{unknown}returns
{boolean}: 返回值,如果url
为 Https,则返回true
,否则返回false
Example
{{&IsTls(Parameters.Url)}}
HttpTrigger:
Type: ALIYUN::FC3::Trigger
{{/}}
{{Join}}
合并两个字符串
参数:a
、b
a
{string}b
{string}c
{string} 默认值为-
returns
{string}: 返回值,返回合并后的字符串
Example
{{Join(Parameters.Name, "zxc")}}
{{Join(Parameters.Name, "zxc", "&")}}
{{SubfixRandom}}
在字符串后面添加随机后缀
参数:a
、b
, c
a
{string}b
{string} 随机串长度 默认值为4
c
{string} 链接符 默认值为-
returns
{string}: 返回值,返回添加后缀后的字符串
Example
{{SubfixRandom(Parameters.Name)}}
{{SubfixRandom(Parameters.Name, 8, "_")}}
{{Subfix}}
在字符串后面添加随机后缀,并且只生成一次
参数:...params
...params
{unknown[]}returns
{string}: 返回值,返回添加后缀后的字符串
Example
{{Subfix(Parameters.Name)}}
{{Default}}
获取默认值
参数:a
、b
a
{unknown}b
{unknown}returns
{unknown}: 返回值,如果a
被隐式转换为 false,则返回b
,否则返回a
{{OSSAddress}}
获取 OSS 地址
参数:ossName
、region
、type
ossName
{string}region
{string}type
{string} 默认值为internal
returns
{string}: 返回值,返回 OSS 地址
{{IsOSSWebsite}}
判断是否为 OSS 网站
参数:address
address
{string}returns
{boolean}: 返回值,返回是否为 OSS 网站
ros
{{RosOutput}}
将参数转为 Ros 的 Fn::GetAtt 格式
参数:...params
...params
{unknown[]}returns
{string}: 返回值,返回 JSON 字符串
Example
{{RosOutput(ChatgptWeb.HttpTrigger, "UrlIntranet")}}
输出
Fn::GetAtt:
- ChatgptWebHttpTrigger
- UrlIntranet
{{RosRouterServices}}
将路由场景和路由服务转换为 Ros 的 Fn::Sub 格式
参数:services
、scene
services
{unknown[]}scene
{string}returns
{string}: 返回值,返回 JSON 字符串
Example
{{RosRouterServices(Operation.Services, Operation.Scene)}}
输出
Fn::Sub:
- '{"Services":[{"ServiceId":"${ServiceId1}","Protocol":"HTTP","Weight":"50%"},{"ServiceId":"${ServiceId2}","Protocol":"HTTP","Weight":"50%"}],"Scene":"SingleService"}'
- ServiceId1:
ServiceId:
Fn::GetAtt:
- ChatgptWebRouteRouteApi
- ServiceId
- ServiceId2:
ServiceId:
Fn::GetAtt:
- ChatgptWebRouteRouteApi
- ServiceId
{{RosArray}}
将数组转换为 Ros 的 Fn::Sub 格式
参数:arr
arr
{unknown[]}returns
{string}: 返回值,返回 JSON 字符串
Example
{{RosArray(["test1", "test2"])}}
输出
Fn::Sub:
- '["${item1}","${item2}"]'
- item1: test1
item2: test2
{{RosEnvs}}
将环境变量对象转换成 SAE 的 Evns 对象数组的形式
参数:obj
obj
{Record<string, string>}returns
{Array<{name: string, value: string}>}: 返回值,返回 对象数组
Example
{{RosEnvs({env1: value1, env2: value2})}}
输出
Fn::Sub:
- "${res}",
- res:
- name: env1
value: value1
- name: env2
value: value2
3 months ago
3 months ago
3 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago