msa-engine
v0.1.0-beta-8
Published
MSA Engine ===========
Readme
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 格式, 如果有 value , 则直接返回 value
参数:resourceName、field、value
resourceName{string}field{string}value{any} 默认值为undefinedreturns{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