somod-schema
Version:
Schema to validate yaml files in somod modules
383 lines (382 loc) • 12.5 kB
JavaScript
export var samString = { type: "string" };
export var samNumber = { type: "number" };
export var samBoolean = { type: "boolean" };
export var stringLike = {
oneOf: [
{ $ref: "#/definitions/samString" },
{ $ref: "#/definitions/samBase64" },
{ $ref: "#/definitions/samIf" },
{ $ref: "#/definitions/samFindInMap" },
{ $ref: "#/definitions/samJoin" },
{ $ref: "#/definitions/samSelect" },
{ $ref: "#/definitions/samSub" },
{ $ref: "#/definitions/samRef" },
{ $ref: "#/definitions/somodRef" },
{ $ref: "#/definitions/somodParameter" },
{ $ref: "#/definitions/somodModuleName" },
{ $ref: "#/definitions/somodAjvCompile" },
{ $ref: "#/definitions/somodIf" },
{ $ref: "#/definitions/somodJsonStringify" },
{ $ref: "#/definitions/somodKey" }
]
};
export var booleanLike = {
oneOf: [
{ $ref: "#/definitions/samBoolean" },
{ $ref: "#/definitions/samAnd" },
{ $ref: "#/definitions/samOr" },
{ $ref: "#/definitions/samEquals" },
{ $ref: "#/definitions/samNot" },
{ $ref: "#/definitions/samIf" },
{ $ref: "#/definitions/samFindInMap" },
{ $ref: "#/definitions/samRef" },
{ $ref: "#/definitions/somodRef" },
{ $ref: "#/definitions/somodParameter" },
{ $ref: "#/definitions/somodAnd" },
{ $ref: "#/definitions/somodOr" },
{ $ref: "#/definitions/somodEquals" },
{ $ref: "#/definitions/somodIf" },
{ $ref: "#/definitions/somodKey" }
]
};
export var numberLike = {
oneOf: [
{ $ref: "#/definitions/samNumber" },
{ $ref: "#/definitions/samSelect" },
{ $ref: "#/definitions/samIf" },
{ $ref: "#/definitions/samFindInMap" },
{ $ref: "#/definitions/samRef" },
{ $ref: "#/definitions/somodRef" },
{ $ref: "#/definitions/somodParameter" },
{ $ref: "#/definitions/somodIf" },
{ $ref: "#/definitions/somodKey" }
]
};
export var arrayLike = {
oneOf: [
{ $ref: "#/definitions/samCidr" },
{ $ref: "#/definitions/samGetAZs" },
{ $ref: "#/definitions/samSplit" },
{ $ref: "#/definitions/samIf" },
{ $ref: "#/definitions/samFindInMap" },
{ $ref: "#/definitions/samRef" },
{ $ref: "#/definitions/somodRef" },
{ $ref: "#/definitions/somodParameter" },
{ $ref: "#/definitions/somodIf" },
{ $ref: "#/definitions/somodJsonParse" },
{ $ref: "#/definitions/somodKey" }
]
};
export var samBase64 = {
type: "object",
additionalProperties: false,
properties: {
"Fn::Base64": { $ref: "#/definitions/stringLike" }
}
};
export var samCidr = {
type: "object",
additionalProperties: false,
properties: {
"Fn::Cidr": {
type: "array",
items: [
{ $ref: "#/definitions/stringLike", description: "ipBlock" },
{ $ref: "#/definitions/numberLike", description: "count" },
{ $ref: "#/definitions/numberLike", description: "cidrBits" }
],
minItems: 3,
maxItems: 3,
additionalItems: false
}
}
};
export var samAnd = {
type: "object",
additionalProperties: false,
properties: {
"Fn::And": {
type: "array",
items: { $ref: "#/definitions/booleanLike" },
minItems: 1,
maxItems: 10
}
}
};
export var samOr = {
type: "object",
additionalProperties: false,
properties: {
"Fn::Or": {
type: "array",
items: { $ref: "#/definitions/booleanLike" },
minItems: 1,
maxItems: 10
}
}
};
export var samEquals = {
type: "object",
additionalProperties: false,
properties: {
"Fn::Equals": {
type: "array",
items: [
{
anyOf: [
{ $ref: "#/definitions/stringLike" },
{ $ref: "#/definitions/numberLike" },
{ $ref: "#/definitions/booleanLike" },
{ $ref: "#/definitions/arrayLike" }
]
},
{
anyOf: [
{ $ref: "#/definitions/stringLike" },
{ $ref: "#/definitions/numberLike" },
{ $ref: "#/definitions/booleanLike" },
{ $ref: "#/definitions/arrayLike" }
]
}
],
maxItems: 2,
minItems: 2,
additionalItems: false
}
}
};
export var samIf = {
type: "object",
additionalProperties: false,
properties: {
"Fn::If": {
type: "array",
items: [
{ $ref: "#/definitions/samString" },
{
anyOf: [
{ $ref: "#/definitions/stringLike" },
{ $ref: "#/definitions/numberLike" },
{ $ref: "#/definitions/booleanLike" },
{ $ref: "#/definitions/arrayLike" }
]
},
{
anyOf: [
{ $ref: "#/definitions/stringLike" },
{ $ref: "#/definitions/numberLike" },
{ $ref: "#/definitions/booleanLike" },
{ $ref: "#/definitions/arrayLike" }
]
}
],
maxItems: 3,
minItems: 3,
additionalItems: false
}
}
};
export var samNot = {
type: "object",
additionalProperties: false,
properties: {
"Fn::Not": {
type: "array",
items: [{ $ref: "#/definitions/booleanLike" }],
maxItems: 1,
minItems: 1,
additionalItems: false
}
}
};
export var samFindInMap = {
type: "object",
additionalProperties: false,
properties: {
"Fn::FindInMap": {
type: "array",
items: [
{ $ref: "#/definitions/samString" },
{ $ref: "#/definitions/stringLike" },
{ $ref: "#/definitions/stringLike" }
],
minItems: 3,
maxItems: 3,
additionalItems: false
}
}
};
export var samGetAZs = {
type: "object",
additionalProperties: false,
properties: {
"Fn::GetAZs": {
anyOf: [
{ $ref: "#/definitions/samString" },
{ $ref: "#/definitions/somodRef" },
{
$ref: "#/definitions/somodFunctions"
}
]
}
}
};
export var samJoin = {
type: "object",
additionalProperties: false,
properties: {
"Fn::Join": {
type: "array",
items: [
{ $ref: "#/definitions/samString" },
{
anyOf: [
{
type: "array",
items: {
anyOf: [
{ $ref: "#/definitions/stringLike" },
{ $ref: "#/definitions/numberLike" }
]
},
minItems: 1
},
{ $ref: "#/definitions/samGetAZs" },
{ $ref: "#/definitions/samIf" },
{ $ref: "#/definitions/samSplit" },
{ $ref: "#/definitions/samSelect" },
{ $ref: "#/definitions/samRef" },
{ $ref: "#/definitions/somodRef" },
{
$ref: "#/definitions/somodFunctions"
}
]
}
],
minItems: 2,
maxItems: 2,
additionalItems: false
}
}
};
export var samSelect = {
type: "object",
additionalProperties: false,
properties: {
"Fn::Select": {
type: "array",
items: [
{
anyOf: [
{ $ref: "#/definitions/samNumber" },
{ $ref: "#/definitions/somodFunctions" },
{ $ref: "#/definitions/samFindInMap" }
]
},
{
anyOf: [
{ $ref: "#/definitions/samFindInMap" },
{ $ref: "#/definitions/samGetAZs" },
{ $ref: "#/definitions/samIf" },
{ $ref: "#/definitions/samSplit" },
{ $ref: "#/definitions/samRef" },
{ $ref: "#/definitions/somodRef" },
{ $ref: "#/definitions/somodFunctions" }
]
}
],
minItems: 2,
maxItems: 2,
additionalItems: false
}
}
};
export var samSplit = {
type: "object",
additionalProperties: false,
properties: {
"Fn::Split": {
type: "array",
items: [
{ $ref: "#/definitions/samString" },
{
anyOf: [
{ $ref: "#/definitions/samString" },
{ $ref: "#/definitions/samBase64" },
{ $ref: "#/definitions/samFindInMap" },
{ $ref: "#/definitions/samGetAZs" },
{ $ref: "#/definitions/samIf" },
{ $ref: "#/definitions/samJoin" },
{ $ref: "#/definitions/samSelect" },
{ $ref: "#/definitions/samSub" },
{ $ref: "#/definitions/samRef" },
{ $ref: "#/definitions/somodRef" },
{ $ref: "#/definitions/somodFunctions" },
{ $ref: "#/definitions/somodModuleName" }
]
}
],
minItems: 2,
maxItems: 2,
additionalItems: false
}
}
};
export var samSub = {
type: "object",
additionalProperties: false,
properties: {
"Fn::Sub": {
oneOf: [
{ type: "string", maxLength: 1024 },
{
type: "array",
items: [
{ $ref: "#/definitions/samString" },
{
type: "object",
additionalProperties: false,
patternProperties: {
"^[a-zA-Z0-9]+$": {
anyOf: [
{ $ref: "#/definitions/samString" },
{ $ref: "#/definitions/samBase64" },
{ $ref: "#/definitions/samFindInMap" },
{ $ref: "#/definitions/samGetAZs" },
{ $ref: "#/definitions/samIf" },
{ $ref: "#/definitions/samJoin" },
{ $ref: "#/definitions/samSelect" },
{ $ref: "#/definitions/samRef" },
{ $ref: "#/definitions/somodRef" },
{ $ref: "#/definitions/somodFunctions" }
]
}
}
}
],
minItems: 2,
maxItems: 2,
additionalItems: false
}
]
}
}
};
export var samRef = {
type: "object",
additionalProperties: false,
properties: {
Ref: {
enum: [
"AWS::AccountId",
"AWS::NotificationARNs",
"AWS::NoValue",
"AWS::Partition",
"AWS::Region",
"AWS::StackId",
"AWS::StackName",
"AWS::URLSuffix"
]
}
}
};