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} 随机串长度 默认值为4c{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} 默认值为internalreturns{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: value28 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
9 months ago
9 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago