0.1.0-beta-3 • Published 3 months ago

msa-engine v0.1.0-beta-3

Weekly downloads
-
License
MIT
Repository
-
Last release
3 months ago

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

{{&not(eq(Parameters.Cpu, 1))}}
HttpTrigger:
  Type: ALIYUN::FC3::Trigger
{{/}}

{{eq}}

逻辑判断,如果 a 等于 b,则返回 true, 否则返回 false :如果参数为非原始类型,则会进行序列化后以字符串形式进行比较 参数ab

  • 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 :如果参数为非原始类型,则会进行序列化后以字符串形式进行比较 参数ab

  • a {unknown}
  • b {unknown}
  • returns {boolean}: 返回值,如果 a 大于 b,则返回 true,否则返回 false

{{gte}}

逻辑判断,如果 a 大于等于 b,则返回 true, 否则返回 false :如果参数为非原始类型,则会进行序列化后以字符串形式进行比较 参数ab

  • a {unknown}
  • b {unknown}
  • returns {boolean}: 返回值,如果 a 大于等于 b,则返回 true,否则返回 false

{{lt}}

逻辑判断,如果 a 小于 b,则返回 true, 否则返回 false :如果参数为非原始类型,则会进行序列化后以字符串形式进行比较 参数ab

  • a {unknown}
  • b {unknown}
  • returns {boolean}: 返回值,如果 a 小于 b,则返回 true,否则返回 false

{{lte}}

逻辑判断,如果 a 小于等于 b,则返回 true, 否则返回 false :如果参数为非原始类型,则会进行序列化后以字符串形式进行比较 参数ab

  • a {unknown}
  • b {unknown}
  • returns {boolean}: 返回值,如果 a 小于等于 b,则返回 true,否则返回 false

utils

{{Get}}

获取对象的属性, 参考 lodash.get 参数datakeydefaultValue

  • 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}}

合并两个字符串 参数ab

  • a {string}
  • b {string}
  • c {string} 默认值为 -
  • returns {string}: 返回值,返回合并后的字符串

Example

{{Join(Parameters.Name, "zxc")}}
{{Join(Parameters.Name, "zxc", "&")}}

{{SubfixRandom}}

在字符串后面添加随机后缀 参数ab, 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}}

获取默认值 参数ab

  • a {unknown}
  • b {unknown}
  • returns {unknown}: 返回值,如果 a 被隐式转换为 false,则返回 b,否则返回 a

{{OSSAddress}}

获取 OSS 地址 参数ossNameregiontype

  • 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 格式 参数servicesscene

  • 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
0.1.0-beta-3

3 months ago

0.1.0-beta-2

3 months ago

0.1.0-beta-1

3 months ago

0.0.2-beta-8

4 months ago

0.0.2-beta-7

4 months ago

0.0.2-beta-6

4 months ago

0.0.2-beta-5

4 months ago

0.0.2-beta-4

4 months ago

0.0.2-beta-3

4 months ago

0.0.2-beta-2

4 months ago

0.0.2-beta-1

4 months ago

0.0.1-beta-21

4 months ago

0.0.1-beta-20

5 months ago

0.0.1-beta-19

5 months ago

0.0.1-beta-18

5 months ago

0.0.1-beta-17

5 months ago

0.0.1-beta-16

5 months ago

0.0.1-beta-15

6 months ago

0.0.1-beta-14

6 months ago

0.0.1-beta-13

6 months ago

0.0.1-beta-12

6 months ago

0.0.1-beta-11

6 months ago

0.0.1-beta-10

6 months ago

0.0.1-beta-9

6 months ago

0.0.1-beta-8

6 months ago

0.0.1-beta-7

6 months ago

0.0.1-beta-6

6 months ago

0.0.1-beta-5

6 months ago

0.0.1-beta-4

6 months ago

0.0.1-beta-3

6 months ago

0.0.1-beta-2

6 months ago

0.0.1-beta-1

6 months ago