@intentius/chant-lexicon-aws 0.55.0 → 0.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/condition.d.ts +27 -0
- package/dist/condition.d.ts.map +1 -0
- package/dist/generated/index.d.ts +1 -1
- package/dist/generated/index.d.ts.map +1 -1
- package/dist/import/generator.d.ts +19 -0
- package/dist/import/generator.d.ts.map +1 -1
- package/dist/import/parser.d.ts +19 -0
- package/dist/import/parser.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/integrity.json +4 -3
- package/dist/intrinsics.d.ts +77 -3
- package/dist/intrinsics.d.ts.map +1 -1
- package/dist/lint/audit-catalog.d.ts.map +1 -1
- package/dist/lint/post-synth/index.d.ts.map +1 -1
- package/dist/lint/post-synth/waw069.d.ts +15 -0
- package/dist/lint/post-synth/waw069.d.ts.map +1 -0
- package/dist/manifest.json +29 -1
- package/dist/okf/index.md +1 -0
- package/dist/okf/rules/WAW069.md +11 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/rules/waw069.ts +0 -0
- package/dist/serializer.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -3
- package/package.json +2 -2
- package/src/codegen/generate-typescript.ts +3 -3
- package/src/codegen/generate.ts +1 -1
- package/src/condition.test.ts +129 -0
- package/src/condition.ts +40 -0
- package/src/generated/index.d.ts +3 -3
- package/src/generated/index.ts +1 -1
- package/src/import/generator.ts +131 -50
- package/src/import/parser.test.ts +96 -0
- package/src/import/parser.ts +86 -1
- package/src/import/roundtrip-fixtures.test.ts +50 -0
- package/src/index.ts +12 -0
- package/src/intrinsics.ts +130 -5
- package/src/lint/audit-catalog.ts +1 -0
- package/src/lint/post-synth/index.ts +2 -0
- package/src/lint/post-synth/waw069.test.ts +94 -0
- package/src/lint/post-synth/waw069.ts +0 -0
- package/src/plugin.test.ts +5 -1
- package/src/plugin.ts +4 -0
- package/src/serializer.ts +24 -3
- package/src/testdata/roundtrip/with-conditions.json +16 -0
|
@@ -40,6 +40,25 @@ export declare class CFGenerator implements TypeScriptGenerator {
|
|
|
40
40
|
* Sort resources by dependencies
|
|
41
41
|
*/
|
|
42
42
|
private sortByDependencies;
|
|
43
|
+
/**
|
|
44
|
+
* Sort conditions so `{ Condition: ... }` references point at earlier
|
|
45
|
+
* declarations (#2069).
|
|
46
|
+
*/
|
|
47
|
+
private sortConditions;
|
|
48
|
+
/**
|
|
49
|
+
* Render a condition reference as the condition's variable when the
|
|
50
|
+
* template declares it, or as a literal name string when it doesn't (an
|
|
51
|
+
* undeclared reference stays visible rather than breaking generation).
|
|
52
|
+
*/
|
|
53
|
+
private conditionVarRef;
|
|
54
|
+
/**
|
|
55
|
+
* Generate a condition declaration (#2069)
|
|
56
|
+
*/
|
|
57
|
+
private generateCondition;
|
|
58
|
+
/**
|
|
59
|
+
* Generate an output declaration as stackOutput(...) (#2069)
|
|
60
|
+
*/
|
|
61
|
+
private generateOutput;
|
|
43
62
|
/**
|
|
44
63
|
* Generate a parameter declaration
|
|
45
64
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/import/generator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/import/generator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAkD,MAAM,gCAAgC,CAAC;AAEjH,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAK5F;;GAEG;AACH,qBAAa,WAAY,YAAW,mBAAmB;IACrD,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,aAAa,CAAc;;IAiBnC;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,UAAU,GAAG,aAAa,EAAE;IAsDzC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,OAAO,CAAC,YAAY;IAyBpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoC1B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAYtB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgCtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAwHrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuD5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,UAAU;CAGnB"}
|
package/dist/import/parser.d.ts
CHANGED
|
@@ -10,6 +10,25 @@ export declare class CFParser extends BaseValueParser implements TemplateParser
|
|
|
10
10
|
* Parse CF JSON content into intermediate representation
|
|
11
11
|
*/
|
|
12
12
|
parse(content: string): TemplateIR;
|
|
13
|
+
/**
|
|
14
|
+
* Template sections import carries. Anything else is named in a warning
|
|
15
|
+
* rather than dropped silently (#2069).
|
|
16
|
+
*/
|
|
17
|
+
private static readonly CARRIED_SECTIONS;
|
|
18
|
+
private collectDroppedSectionWarnings;
|
|
19
|
+
/**
|
|
20
|
+
* Parse the Conditions section (#2069). Inside a condition expression the
|
|
21
|
+
* single-key `{ "Condition": "<name>" }` form references another declared
|
|
22
|
+
* condition; `inConditionExpression` scopes that dispatch to this section
|
|
23
|
+
* so a resource property that happens to hold a single-key `Condition`
|
|
24
|
+
* object is left alone.
|
|
25
|
+
*/
|
|
26
|
+
private inConditionExpression;
|
|
27
|
+
private parseConditions;
|
|
28
|
+
/**
|
|
29
|
+
* Parse the Outputs section (#2069).
|
|
30
|
+
*/
|
|
31
|
+
private parseOutputs;
|
|
13
32
|
/**
|
|
14
33
|
* Parse parameters section
|
|
15
34
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/import/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/import/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EAKX,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAiJtE;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,eAAgB,YAAW,cAAc;IACrE;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;IA4BlC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAOrC;IAEH,OAAO,CAAC,6BAA6B;IAUrC;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB,CAAS;IAEtC,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI;CA8IxG"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { Parameter } from "./parameter.js";
|
|
2
|
+
export { Condition, isCondition, CONDITION_ENTITY_TYPE } from "./condition.js";
|
|
2
3
|
export { defaultTags, isDefaultTags, DEFAULT_TAGS_MARKER } from "./default-tags.js";
|
|
3
4
|
export type { DefaultTags, TagEntry } from "./default-tags.js";
|
|
4
5
|
export { templateTransform, isTemplateTransform, TEMPLATE_TRANSFORM_MARKER } from "./template-transform.js";
|
|
@@ -21,7 +22,8 @@ export { awsPlugin } from "./plugin.js";
|
|
|
21
22
|
export { observeResourcesDeepAws, awsDeepNormalizationHooks, hasOwnershipMarker, DEEP_READABLE_TYPES, AWS_READ_ONLY_NAMES, AWS_SERVICE_DEFAULTS, } from "./deep-observe.js";
|
|
22
23
|
export { describeStackResources, describeStackOutputs, describeStackDetail, getResource, listResources, parseResourceDescription, resolveEndpointOverride, serviceEndpointEnvVar, AwsReadError, type AwsReadHttp, type AwsReadClientOptions, type CloudControlDescription, type StackResource, type StackDetail, type AwsCredentials, type AwsCredentialResolver, type AwsCredentialSource, } from "./api/read-client.js";
|
|
23
24
|
export { signRequest, resolveCredentials, EMPTY_PAYLOAD_SHA256, type SigV4Request, } from "./api/sigv4.js";
|
|
24
|
-
export { Sub, Ref, GetAtt, If, Join, Select, Split, Base64, GetAZs, SubIntrinsic, RefIntrinsic, GetAttIntrinsic, IfIntrinsic, JoinIntrinsic, SelectIntrinsic, SplitIntrinsic, Base64Intrinsic, GetAZsIntrinsic, } from "./intrinsics.js";
|
|
25
|
+
export { Sub, Ref, GetAtt, If, Join, Select, Split, Base64, GetAZs, Equals, And, Or, Not, SubIntrinsic, RefIntrinsic, GetAttIntrinsic, IfIntrinsic, JoinIntrinsic, SelectIntrinsic, SplitIntrinsic, Base64Intrinsic, GetAZsIntrinsic, EqualsIntrinsic, AndIntrinsic, OrIntrinsic, NotIntrinsic, } from "./intrinsics.js";
|
|
26
|
+
export type { ConditionOperand } from "./intrinsics.js";
|
|
25
27
|
export { AWS, StackName, Region, AccountId, StackId, URLSuffix, NoValue, NotificationARNs, Partition, } from "./pseudo.js";
|
|
26
28
|
export * from "./generated/index.js";
|
|
27
29
|
export { fetchSchemaZip } from "./spec/fetch.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACjF,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACzG,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAK9D,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,8BAA8B,EAC9B,4BAA4B,EAC5B,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxG,YAAY,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAQrF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGxE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACvI,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG9E,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtF,YAAY,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAChG,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAC1E,YAAY,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAGrE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAIrC,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAOxB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACrB,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,GAAG,EACH,GAAG,EACH,MAAM,EACN,EAAE,EACF,IAAI,EACJ,MAAM,EACN,KAAK,EACL,MAAM,EACN,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,WAAW,EACX,aAAa,EACb,eAAe,EACf,cAAc,EACd,eAAe,EACf,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/integrity.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"algorithm": "sha256",
|
|
3
3
|
"artifacts": {
|
|
4
|
-
"manifest.json": "
|
|
4
|
+
"manifest.json": "e40f9769b0d2610a47d5d69fe973e32b99375e0566ccd688e7dc2f57f25f3a44",
|
|
5
5
|
"meta.json": "49cbb2ca9b454391a7644e14ee9cfd91bcf906c6af683bf46a182aa85047ecc4",
|
|
6
|
-
"types/index.d.ts": "
|
|
6
|
+
"types/index.d.ts": "624cf99a0be147e922baf957e31a9007e830b50397d098c8f4adb9dabf417ff8",
|
|
7
7
|
"rules/hardcoded-region.ts": "5a0eaf7ab391231fe6cd51426ece29539cb4b36f31c8dd060956638fed55722a",
|
|
8
8
|
"rules/iam-wildcard.ts": "135d7217d278fef50939e605c5da32603ba35674b8c4b5c4d66a06c77903e945",
|
|
9
9
|
"rules/s3-encryption.ts": "c4f9f8aa8dc382ed98c7b04e820a600590cc75335a8db2e087cbfbfe4003d09e",
|
|
@@ -68,9 +68,10 @@
|
|
|
68
68
|
"rules/waw066.ts": "f30e4996fdeb1703f24e1152ffe0698b6a55d140a341dcd9528199206abb18c0",
|
|
69
69
|
"rules/waw067.ts": "8e66f3512569c106c4c6868786bb870af1b3b05d3542118ca6bb5c61c57314e7",
|
|
70
70
|
"rules/waw068.ts": "adbfe84e9b3cdafc072346d87a5df81a97ab07bc5171f3d4abb824c29e9a66a0",
|
|
71
|
+
"rules/waw069.ts": "4792bb3943d5e08039f45cbf554f45263703288acf4ca01d88ad778083023d27",
|
|
71
72
|
"skills/chant-aws.md": "4d65eb160e001f2af42eb7c622a5b498c2fd1f5afbd6c8155615c010fb265c63",
|
|
72
73
|
"skills/chant-aws-eks.md": "8789255709ff004ad0a875fd5999edcdc66fc6e33d710db058d9f42703bcfdfe",
|
|
73
74
|
"skills/chant-aws-carve-terraform.md": "0ae4376590db47979be144d3ac6cdcfd56c9640d0536421aacf7330459d38e52"
|
|
74
75
|
},
|
|
75
|
-
"composite": "
|
|
76
|
+
"composite": "61566fe27fca8d8061f3dcbd3cecb2b98281de9b7f5fbed0a8de922c9740ef4a"
|
|
76
77
|
}
|
package/dist/intrinsics.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { INTRINSIC_MARKER, type Intrinsic } from "@intentius/chant/intrinsic";
|
|
2
2
|
import { type Declarable } from "@intentius/chant/declarable";
|
|
3
|
+
import { type Condition } from "./condition.js";
|
|
4
|
+
/**
|
|
5
|
+
* An operand allowed where CloudFormation expects a condition (#2068): a
|
|
6
|
+
* nested condition intrinsic (`Equals`/`And`/`Or`/`Not`), the `Condition`
|
|
7
|
+
* declarable itself, or a condition name string. The latter two both emit
|
|
8
|
+
* the `{ "Condition": "<name>" }` reference form.
|
|
9
|
+
*/
|
|
10
|
+
export type ConditionOperand = Intrinsic | Condition | string;
|
|
3
11
|
/**
|
|
4
12
|
* Fn::Sub intrinsic function implementation
|
|
5
13
|
* Supports template string interpolation with AttrRefs, Declarables, and pseudo-parameters
|
|
@@ -63,15 +71,81 @@ export declare class IfIntrinsic implements Intrinsic {
|
|
|
63
71
|
private conditionName;
|
|
64
72
|
private valueIfTrue;
|
|
65
73
|
private valueIfFalse;
|
|
66
|
-
constructor(conditionName: string, valueIfTrue: unknown, valueIfFalse: unknown);
|
|
74
|
+
constructor(conditionName: string | Condition, valueIfTrue: unknown, valueIfFalse: unknown);
|
|
67
75
|
toJSON(): {
|
|
68
76
|
"Fn::If": [string, unknown, unknown];
|
|
69
77
|
};
|
|
70
78
|
}
|
|
71
79
|
/**
|
|
72
|
-
* Create an If intrinsic
|
|
80
|
+
* Create an If intrinsic. The condition is a name string, or the `Condition`
|
|
81
|
+
* declarable itself (resolved to its logical name at serialization, #2068).
|
|
82
|
+
*/
|
|
83
|
+
export declare function If(conditionName: string | Condition, valueIfTrue: unknown, valueIfFalse: unknown): IfIntrinsic;
|
|
84
|
+
/**
|
|
85
|
+
* Fn::Equals condition intrinsic (#2068).
|
|
86
|
+
* Compares two values; each may be a literal or a value intrinsic (Ref etc.).
|
|
87
|
+
*/
|
|
88
|
+
export declare class EqualsIntrinsic implements Intrinsic {
|
|
89
|
+
readonly [INTRINSIC_MARKER]: true;
|
|
90
|
+
private left;
|
|
91
|
+
private right;
|
|
92
|
+
constructor(left: unknown, right: unknown);
|
|
93
|
+
toJSON(): {
|
|
94
|
+
"Fn::Equals": [unknown, unknown];
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Create an Equals condition intrinsic: `Equals(Ref(cutover), "true")`.
|
|
99
|
+
*/
|
|
100
|
+
export declare function Equals(left: unknown, right: unknown): EqualsIntrinsic;
|
|
101
|
+
/**
|
|
102
|
+
* Fn::And condition intrinsic (#2068).
|
|
103
|
+
*/
|
|
104
|
+
export declare class AndIntrinsic implements Intrinsic {
|
|
105
|
+
readonly [INTRINSIC_MARKER]: true;
|
|
106
|
+
private conditions;
|
|
107
|
+
constructor(conditions: ConditionOperand[]);
|
|
108
|
+
toJSON(): {
|
|
109
|
+
"Fn::And": unknown[];
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Create an And condition intrinsic over 2–10 operands, each a nested
|
|
114
|
+
* condition intrinsic, a `Condition` declarable, or a condition name.
|
|
115
|
+
*/
|
|
116
|
+
export declare function And(...conditions: ConditionOperand[]): AndIntrinsic;
|
|
117
|
+
/**
|
|
118
|
+
* Fn::Or condition intrinsic (#2068).
|
|
119
|
+
*/
|
|
120
|
+
export declare class OrIntrinsic implements Intrinsic {
|
|
121
|
+
readonly [INTRINSIC_MARKER]: true;
|
|
122
|
+
private conditions;
|
|
123
|
+
constructor(conditions: ConditionOperand[]);
|
|
124
|
+
toJSON(): {
|
|
125
|
+
"Fn::Or": unknown[];
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Create an Or condition intrinsic over 2–10 operands, each a nested
|
|
130
|
+
* condition intrinsic, a `Condition` declarable, or a condition name.
|
|
131
|
+
*/
|
|
132
|
+
export declare function Or(...conditions: ConditionOperand[]): OrIntrinsic;
|
|
133
|
+
/**
|
|
134
|
+
* Fn::Not condition intrinsic (#2068).
|
|
135
|
+
*/
|
|
136
|
+
export declare class NotIntrinsic implements Intrinsic {
|
|
137
|
+
readonly [INTRINSIC_MARKER]: true;
|
|
138
|
+
private condition;
|
|
139
|
+
constructor(condition: ConditionOperand);
|
|
140
|
+
toJSON(): {
|
|
141
|
+
"Fn::Not": [unknown];
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Create a Not condition intrinsic over a nested condition intrinsic, a
|
|
146
|
+
* `Condition` declarable, or a condition name.
|
|
73
147
|
*/
|
|
74
|
-
export declare function
|
|
148
|
+
export declare function Not(condition: ConditionOperand): NotIntrinsic;
|
|
75
149
|
/**
|
|
76
150
|
* Fn::Join intrinsic function
|
|
77
151
|
* Joins values with a delimiter
|
package/dist/intrinsics.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intrinsics.d.ts","sourceRoot":"","sources":["../src/intrinsics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAsC,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAElH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"intrinsics.d.ts","sourceRoot":"","sources":["../src/intrinsics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAsC,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAElH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAY9D;;;GAGG;AACH,qBAAa,YAAa,YAAW,SAAS;IAC5C,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAG,IAAI,CAAU;IAC5C,OAAO,CAAC,aAAa,CAAW;IAChC,OAAO,CAAC,MAAM,CAAY;gBAEd,aAAa,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;IAKtD,MAAM,IAAI;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;CAOhC;AAED;;;GAGG;AACH,wBAAgB,GAAG,CACjB,aAAa,EAAE,oBAAoB,EACnC,GAAG,MAAM,EAAE,OAAO,EAAE,GACnB,YAAY,CAEd;AAED;;;;;GAKG;AACH,qBAAa,YAAa,YAAW,SAAS;IAC5C,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAG,IAAI,CAAU;IAC5C,OAAO,CAAC,MAAM,CAAsB;gBAExB,MAAM,EAAE,MAAM,GAAG,UAAU;IAIvC,MAAM,IAAI;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;CAM1B;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,CAE7D;AAED;;;GAGG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAC/C,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAG,IAAI,CAAU;IAC5C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;gBAEd,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAKlD,MAAM,IAAI;QAAE,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE;CAG7C;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,CAE9E;AAED;;;GAGG;AACH,qBAAa,WAAY,YAAW,SAAS;IAC3C,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAG,IAAI,CAAU;IAC5C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,YAAY,CAAU;gBAElB,aAAa,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO;IAM1F,MAAM,IAAI;QAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;KAAE;CAInD;AAGD;;;GAGG;AACH,wBAAgB,EAAE,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,GAAG,WAAW,CAE9G;AAED;;;GAGG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAC/C,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAG,IAAI,CAAU;IAC5C,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,KAAK,CAAU;gBAEX,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;IAKzC,MAAM,IAAI;QAAE,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;KAAE;CAG/C;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,eAAe,CAErE;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,SAAS;IAC5C,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAG,IAAI,CAAU;IAC5C,OAAO,CAAC,UAAU,CAAqB;gBAE3B,UAAU,EAAE,gBAAgB,EAAE;IAI1C,MAAM,IAAI;QAAE,SAAS,EAAE,OAAO,EAAE,CAAA;KAAE;CAGnC;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,GAAG,UAAU,EAAE,gBAAgB,EAAE,GAAG,YAAY,CAKnE;AAED;;GAEG;AACH,qBAAa,WAAY,YAAW,SAAS;IAC3C,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAG,IAAI,CAAU;IAC5C,OAAO,CAAC,UAAU,CAAqB;gBAE3B,UAAU,EAAE,gBAAgB,EAAE;IAI1C,MAAM,IAAI;QAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;KAAE;CAGlC;AAED;;;GAGG;AACH,wBAAgB,EAAE,CAAC,GAAG,UAAU,EAAE,gBAAgB,EAAE,GAAG,WAAW,CAKjE;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,SAAS;IAC5C,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAG,IAAI,CAAU;IAC5C,OAAO,CAAC,SAAS,CAAmB;gBAExB,SAAS,EAAE,gBAAgB;IAIvC,MAAM,IAAI;QAAE,SAAS,EAAE,CAAC,OAAO,CAAC,CAAA;KAAE;CAGnC;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,SAAS,EAAE,gBAAgB,GAAG,YAAY,CAE7D;AAED;;;GAGG;AACH,qBAAa,aAAc,YAAW,SAAS;IAC7C,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAG,IAAI,CAAU;IAC5C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAwB;gBAE1B,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS;IAK5D,MAAM,IAAI;QAAE,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;CAU5C;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,GAAG,aAAa,CAOpF;AAED;;;GAGG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAC/C,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAG,IAAI,CAAU;IAC5C,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAwB;gBAE1B,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS;IAKxD,MAAM,IAAI;QAAE,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;CAM9C;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,GAAG,eAAe,CAEpF;AAED;;;GAGG;AACH,qBAAa,cAAe,YAAW,SAAS;IAC9C,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAG,IAAI,CAAU;IAC5C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAqB;gBAEvB,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS;IAKzD,MAAM,IAAI;QAAE,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;CAM7C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,CAEnF;AAED;;;GAGG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAC/C,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAG,IAAI,CAAU;IAC5C,OAAO,CAAC,KAAK,CAAqB;gBAEtB,KAAK,EAAE,MAAM,GAAG,SAAS;IAIrC,MAAM,IAAI;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE;CAMpC;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,eAAe,CAEjE;AAED;;;GAGG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAC/C,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAG,IAAI,CAAU;IAC5C,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,GAAE,MAAM,GAAG,SAAc;IAI3C,MAAM,IAAI;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE;CAMpC;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,eAAe,CAEnE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-catalog.d.ts","sourceRoot":"","sources":["../../src/lint/audit-catalog.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAa,KAAK,QAAQ,EAAkB,MAAM,gCAAgC,CAAC;AAQ1F,6CAA6C;AAC7C,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"audit-catalog.d.ts","sourceRoot":"","sources":["../../src/lint/audit-catalog.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAa,KAAK,QAAQ,EAAkB,MAAM,gCAAgC,CAAC;AAQ1F,6CAA6C;AAC7C,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CA2EpD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AA+DvE,eAAO,MAAM,eAAe,EAAE,cAAc,EA8D3C,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WAW069: Template references an undeclared condition
|
|
3
|
+
*
|
|
4
|
+
* A resource's `Condition` key, an output's `Condition` key, `Fn::If`, and
|
|
5
|
+
* the `{ "Condition": "<name>" }` reference form inside the `Conditions`
|
|
6
|
+
* section all name a condition that must be declared in the template's
|
|
7
|
+
* `Conditions` section — CloudFormation rejects the template otherwise
|
|
8
|
+
* (cfn-lint E8002/E1028). chant can build such a template when a source
|
|
9
|
+
* names a condition that was never declared (#2068); this check turns that
|
|
10
|
+
* deploy-time rejection into a build error.
|
|
11
|
+
*/
|
|
12
|
+
import type { PostSynthCheck, PostSynthContext, PostSynthDiagnostic } from "@intentius/chant/lint/post-synth";
|
|
13
|
+
export declare function checkUndeclaredConditions(ctx: PostSynthContext): PostSynthDiagnostic[];
|
|
14
|
+
export declare const waw069: PostSynthCheck;
|
|
15
|
+
//# sourceMappingURL=waw069.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waw069.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/waw069.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAuC9G,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,gBAAgB,GAAG,mBAAmB,EAAE,CAiDtF;AAED,eAAO,MAAM,MAAM,EAAE,cAOpB,CAAC"}
|
package/dist/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aws",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.57.0",
|
|
4
4
|
"chantVersion": ">=0.1.0",
|
|
5
5
|
"namespace": "AWS",
|
|
6
6
|
"intrinsics": [
|
|
@@ -65,6 +65,34 @@
|
|
|
65
65
|
"outputKey": "Fn::GetAZs",
|
|
66
66
|
"isTag": false,
|
|
67
67
|
"foldsAsCall": true
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"name": "Equals",
|
|
71
|
+
"description": "Fn::Equals — condition comparing two values",
|
|
72
|
+
"outputKey": "Fn::Equals",
|
|
73
|
+
"isTag": false,
|
|
74
|
+
"foldsAsCall": true
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "And",
|
|
78
|
+
"description": "Fn::And — condition conjunction",
|
|
79
|
+
"outputKey": "Fn::And",
|
|
80
|
+
"isTag": false,
|
|
81
|
+
"foldsAsCall": true
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"name": "Or",
|
|
85
|
+
"description": "Fn::Or — condition disjunction",
|
|
86
|
+
"outputKey": "Fn::Or",
|
|
87
|
+
"isTag": false,
|
|
88
|
+
"foldsAsCall": true
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"name": "Not",
|
|
92
|
+
"description": "Fn::Not — condition negation",
|
|
93
|
+
"outputKey": "Fn::Not",
|
|
94
|
+
"isTag": false,
|
|
95
|
+
"foldsAsCall": true
|
|
68
96
|
}
|
|
69
97
|
],
|
|
70
98
|
"pseudoParameters": {
|
package/dist/okf/index.md
CHANGED
|
@@ -1732,3 +1732,4 @@ okf_version: '0.2'
|
|
|
1732
1732
|
* [WAW066](/rules/WAW066.md) - Private subnet's route table has no default route, or its default route targets a gateway that does not exist in the template
|
|
1733
1733
|
* [WAW067](/rules/WAW067.md) - A single-AZ NAT gateway serves private subnets across multiple Availability Zones — single point of failure for cross-AZ egress
|
|
1734
1734
|
* [WAW068](/rules/WAW068.md) - VPN Gateway or Transit Gateway has only one attached VPN Connection — no redundant path for hybrid connectivity
|
|
1735
|
+
* [WAW069](/rules/WAW069.md) - Template references a condition it never declares — resource/output Condition keys, Fn::If, and Condition references must name an entry in the Conditions sec...
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: post-synth-check
|
|
3
|
+
title: WAW069
|
|
4
|
+
description: Template references a condition it never declares — resource/output Condition keys, Fn::If, and Condition references must name an entry in the Conditions section
|
|
5
|
+
id: WAW069
|
|
6
|
+
severity: error
|
|
7
|
+
category: post-synth
|
|
8
|
+
lexicon: aws
|
|
9
|
+
docs: https://intentius.io/chant/lexicons/aws/rules/
|
|
10
|
+
---
|
|
11
|
+
Template references a condition it never declares — resource/output Condition keys, Fn::If, and Condition references must name an entry in the Conditions section
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAqQ,MAAM,0BAA0B,CAAC;AAuCjU;yEACyE;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAiBnD,eAAO,MAAM,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAqQ,MAAM,0BAA0B,CAAC;AAuCjU;yEACyE;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAiBnD,eAAO,MAAM,SAAS,EAAE,aAkgCvB,CAAC"}
|
|
Binary file
|
package/dist/serializer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAsC,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAsC,MAAM,6BAA6B,CAAC;AAsgBlG;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,UA4E3B,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -135131,14 +135131,14 @@ export type ZonalAutoshiftConfiguration_ZonalAutoshiftStatus = "ENABLED";
|
|
|
135131
135131
|
// --- Intrinsic functions ---
|
|
135132
135132
|
|
|
135133
135133
|
export declare function And(conditions: unknown[]): any;
|
|
135134
|
+
export declare function And(...conditions: unknown[]): any;
|
|
135134
135135
|
export declare function Base64(value: unknown): any;
|
|
135135
135136
|
export declare function Cidr(ipBlock: unknown, count: unknown, cidrBits?: unknown): any;
|
|
135136
|
-
export declare function Condition(condition: string): any;
|
|
135137
135137
|
export declare function Equals(a: unknown, b: unknown): any;
|
|
135138
135138
|
export declare function FindInMap(mapName: string, firstKey: unknown, secondKey: unknown): any;
|
|
135139
135139
|
export declare function GetAtt(logicalName: string, attribute: string): any;
|
|
135140
135140
|
export declare function GetAZs(region?: string): any;
|
|
135141
|
-
export declare function If(condition: string, valueIfTrue: unknown, valueIfFalse: unknown): any;
|
|
135141
|
+
export declare function If(condition: string | Declarable, valueIfTrue: unknown, valueIfFalse: unknown): any;
|
|
135142
135142
|
export declare function ImportValue(sharedValue: unknown): any;
|
|
135143
135143
|
export declare function Join(delimiter: string, values: unknown[]): any;
|
|
135144
135144
|
export declare function Not(condition: unknown): any;
|
|
@@ -135170,7 +135170,7 @@ export interface Declarable {
|
|
|
135170
135170
|
|
|
135171
135171
|
export interface CFResourceAttributes {
|
|
135172
135172
|
DependsOn?: Declarable | Declarable[] | string | string[];
|
|
135173
|
-
Condition?: string;
|
|
135173
|
+
Condition?: string | Declarable;
|
|
135174
135174
|
DeletionPolicy?: "Delete" | "Retain" | "RetainExceptOnCreate" | "Snapshot";
|
|
135175
135175
|
UpdateReplacePolicy?: "Delete" | "Retain" | "Snapshot";
|
|
135176
135176
|
UpdatePolicy?: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentius/chant-lexicon-aws",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.57.0",
|
|
4
4
|
"description": "AWS CloudFormation lexicon for chant — declarative IaC in TypeScript",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://intentius.io/chant",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"typescript": "^5.9.3"
|
|
81
81
|
},
|
|
82
82
|
"peerDependencies": {
|
|
83
|
-
"@intentius/chant": "^0.
|
|
83
|
+
"@intentius/chant": "^0.57.0",
|
|
84
84
|
"typescript": "^5.9.3"
|
|
85
85
|
}
|
|
86
86
|
}
|
|
@@ -179,12 +179,12 @@ function staticTypeScript(): string {
|
|
|
179
179
|
["And", "(conditions: unknown[]): any"],
|
|
180
180
|
["Base64", "(value: unknown): any"],
|
|
181
181
|
["Cidr", "(ipBlock: unknown, count: unknown, cidrBits?: unknown): any"],
|
|
182
|
-
["
|
|
182
|
+
["And", "(...conditions: unknown[]): any"],
|
|
183
183
|
["Equals", "(a: unknown, b: unknown): any"],
|
|
184
184
|
["FindInMap", "(mapName: string, firstKey: unknown, secondKey: unknown): any"],
|
|
185
185
|
["GetAtt", "(logicalName: string, attribute: string): any"],
|
|
186
186
|
["GetAZs", "(region?: string): any"],
|
|
187
|
-
["If", "(condition: string, valueIfTrue: unknown, valueIfFalse: unknown): any"],
|
|
187
|
+
["If", "(condition: string | Declarable, valueIfTrue: unknown, valueIfFalse: unknown): any"],
|
|
188
188
|
["ImportValue", "(sharedValue: unknown): any"],
|
|
189
189
|
["Join", "(delimiter: string, values: unknown[]): any"],
|
|
190
190
|
["Not", "(condition: unknown): any"],
|
|
@@ -230,7 +230,7 @@ function staticTypeScript(): string {
|
|
|
230
230
|
lines.push("");
|
|
231
231
|
lines.push("export interface CFResourceAttributes {");
|
|
232
232
|
lines.push(" DependsOn?: Declarable | Declarable[] | string | string[];");
|
|
233
|
-
lines.push(" Condition?: string;");
|
|
233
|
+
lines.push(" Condition?: string | Declarable;");
|
|
234
234
|
lines.push(' DeletionPolicy?: "Delete" | "Retain" | "RetainExceptOnCreate" | "Snapshot";');
|
|
235
235
|
lines.push(' UpdateReplacePolicy?: "Delete" | "Retain" | "Snapshot";');
|
|
236
236
|
lines.push(" UpdatePolicy?: {");
|
package/src/codegen/generate.ts
CHANGED
|
@@ -218,7 +218,7 @@ function generateRuntimeIndex(
|
|
|
218
218
|
return coreGenerateRuntimeIndex(resourceEntries, propertyEntries, {
|
|
219
219
|
lexiconName: "aws",
|
|
220
220
|
intrinsicReExports: {
|
|
221
|
-
names: ["Sub", "Ref", "GetAtt", "If", "Join", "Select", "Split", "Base64"],
|
|
221
|
+
names: ["Sub", "Ref", "GetAtt", "If", "Join", "Select", "Split", "Base64", "Equals", "And", "Or", "Not"],
|
|
222
222
|
from: "../intrinsics",
|
|
223
223
|
},
|
|
224
224
|
pseudoReExports: {
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { describe, test, expect } from "vitest";
|
|
2
|
+
import { Condition, isCondition, CONDITION_ENTITY_TYPE } from "./condition";
|
|
3
|
+
import { Equals, And, Or, Not, If, Ref } from "./intrinsics";
|
|
4
|
+
import { Parameter } from "./parameter";
|
|
5
|
+
import { awsSerializer } from "./serializer";
|
|
6
|
+
import { stackOutput } from "@intentius/chant/stack-output";
|
|
7
|
+
import { createResource } from "@intentius/chant/runtime";
|
|
8
|
+
import { resolveAttrRefs } from "@intentius/chant/discovery/resolve";
|
|
9
|
+
import type { Declarable } from "@intentius/chant/declarable";
|
|
10
|
+
|
|
11
|
+
const LogGroup = createResource("AWS::Logs::LogGroup", "aws", {});
|
|
12
|
+
|
|
13
|
+
function serialize(entities: Map<string, Declarable>): Record<string, any> {
|
|
14
|
+
resolveAttrRefs(entities);
|
|
15
|
+
return JSON.parse(awsSerializer.serialize(entities) as string);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
describe("Condition declarable", () => {
|
|
19
|
+
test("carries the aws lexicon and the condition entity type", () => {
|
|
20
|
+
const cond = new Condition(Equals("a", "b"));
|
|
21
|
+
expect(cond.lexicon).toBe("aws");
|
|
22
|
+
expect(cond.entityType).toBe(CONDITION_ENTITY_TYPE);
|
|
23
|
+
expect(isCondition(cond)).toBe(true);
|
|
24
|
+
expect(isCondition(new Parameter("String"))).toBe(false);
|
|
25
|
+
expect(isCondition("DoCutover")).toBe(false);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test("rejects a non-intrinsic expression", () => {
|
|
29
|
+
expect(() => new Condition("true" as never)).toThrow(/condition intrinsic/);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
describe("condition intrinsics", () => {
|
|
34
|
+
test("Equals resolves value intrinsics", () => {
|
|
35
|
+
const param = new Parameter("String");
|
|
36
|
+
const entities = new Map<string, Declarable>([["Cutover", param]]);
|
|
37
|
+
resolveAttrRefs(entities);
|
|
38
|
+
expect(JSON.parse(JSON.stringify(Equals(Ref(param), "true")))).toEqual({
|
|
39
|
+
"Fn::Equals": [{ Ref: "Cutover" }, "true"],
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test("Not over a Condition declarable emits the Condition reference form", () => {
|
|
44
|
+
const cond = new Condition(Equals("a", "b"));
|
|
45
|
+
const entities = new Map<string, Declarable>([["DoCutover", cond]]);
|
|
46
|
+
resolveAttrRefs(entities);
|
|
47
|
+
expect(JSON.parse(JSON.stringify(Not(cond)))).toEqual({
|
|
48
|
+
"Fn::Not": [{ Condition: "DoCutover" }],
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test("And/Or accept names, declarables, and nested intrinsics", () => {
|
|
53
|
+
expect(JSON.parse(JSON.stringify(And("A", Equals("x", "y"))))).toEqual({
|
|
54
|
+
"Fn::And": [{ Condition: "A" }, { "Fn::Equals": ["x", "y"] }],
|
|
55
|
+
});
|
|
56
|
+
expect(JSON.parse(JSON.stringify(Or("A", Not("B"))))).toEqual({
|
|
57
|
+
"Fn::Or": [{ Condition: "A" }, { "Fn::Not": [{ Condition: "B" }] }],
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
test("And/Or enforce CloudFormation's 2–10 operand bounds", () => {
|
|
62
|
+
expect(() => And("A")).toThrow(/between 2 and 10/);
|
|
63
|
+
expect(() => Or("A")).toThrow(/between 2 and 10/);
|
|
64
|
+
const eleven = Array.from({ length: 11 }, (_, i) => `C${i}`);
|
|
65
|
+
expect(() => And(...eleven)).toThrow(/between 2 and 10/);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test("If accepts the Condition declarable as the condition", () => {
|
|
69
|
+
const cond = new Condition(Equals("a", "b"));
|
|
70
|
+
const entities = new Map<string, Declarable>([["DoCutover", cond]]);
|
|
71
|
+
resolveAttrRefs(entities);
|
|
72
|
+
expect(JSON.parse(JSON.stringify(If(cond, "on", "off")))).toEqual({
|
|
73
|
+
"Fn::If": ["DoCutover", "on", "off"],
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
describe("serializer Conditions section (#2068)", () => {
|
|
79
|
+
test("Condition declarables are lifted into Conditions", () => {
|
|
80
|
+
const param = new Parameter("String", { defaultValue: "false" });
|
|
81
|
+
const doCutover = new Condition(Equals(Ref(param), "true"));
|
|
82
|
+
const noCutover = new Condition(Not(doCutover));
|
|
83
|
+
const template = serialize(
|
|
84
|
+
new Map<string, Declarable>([
|
|
85
|
+
["Cutover", param],
|
|
86
|
+
["DoCutover", doCutover],
|
|
87
|
+
["NoCutover", noCutover],
|
|
88
|
+
]),
|
|
89
|
+
);
|
|
90
|
+
expect(template.Conditions).toEqual({
|
|
91
|
+
DoCutover: { "Fn::Equals": [{ Ref: "Cutover" }, "true"] },
|
|
92
|
+
NoCutover: { "Fn::Not": [{ Condition: "DoCutover" }] },
|
|
93
|
+
});
|
|
94
|
+
// Never emitted as a Resource
|
|
95
|
+
expect(template.Resources).toEqual({});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
test("resource-level Condition accepts the declarable as well as a string", () => {
|
|
99
|
+
const doCutover = new Condition(Equals("a", "b"));
|
|
100
|
+
const byRef = new LogGroup({ RetentionInDays: 7 }, { Condition: doCutover });
|
|
101
|
+
const byName = new LogGroup({ RetentionInDays: 7 }, { Condition: "DoCutover" });
|
|
102
|
+
const template = serialize(
|
|
103
|
+
new Map<string, Declarable>([
|
|
104
|
+
["DoCutover", doCutover],
|
|
105
|
+
["ByRef", byRef],
|
|
106
|
+
["ByName", byName],
|
|
107
|
+
]),
|
|
108
|
+
);
|
|
109
|
+
expect(template.Resources.ByRef.Condition).toBe("DoCutover");
|
|
110
|
+
expect(template.Resources.ByName.Condition).toBe("DoCutover");
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
test("stackOutput condition emits the output-level Condition key", () => {
|
|
114
|
+
const doCutover = new Condition(Equals("a", "b"));
|
|
115
|
+
const group = new LogGroup({ RetentionInDays: 7 }, { Condition: doCutover });
|
|
116
|
+
const out = stackOutput(Ref(group), { condition: doCutover });
|
|
117
|
+
const outByName = stackOutput(Ref(group), { condition: "DoCutover" });
|
|
118
|
+
const template = serialize(
|
|
119
|
+
new Map<string, Declarable>([
|
|
120
|
+
["DoCutover", doCutover],
|
|
121
|
+
["Rule", group],
|
|
122
|
+
["RuleName", out],
|
|
123
|
+
["RuleNameByName", outByName],
|
|
124
|
+
]),
|
|
125
|
+
);
|
|
126
|
+
expect(template.Outputs.RuleName).toEqual({ Value: { Ref: "Rule" }, Condition: "DoCutover" });
|
|
127
|
+
expect(template.Outputs.RuleNameByName.Condition).toBe("DoCutover");
|
|
128
|
+
});
|
|
129
|
+
});
|
package/src/condition.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CloudFormation template condition (#2068).
|
|
3
|
+
*
|
|
4
|
+
* A `Condition` declarable is lifted into the template's `Conditions`
|
|
5
|
+
* section by the serializer, the way `Parameter` is lifted into
|
|
6
|
+
* `Parameters`. Reference it from a resource's `Condition` attribute, an
|
|
7
|
+
* output's `condition` option, `If(...)`, or inside another condition via
|
|
8
|
+
* `And`/`Or`/`Not`.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { DECLARABLE_MARKER, isDeclarable, type Declarable } from "@intentius/chant/declarable";
|
|
12
|
+
import { isIntrinsic, type Intrinsic } from "@intentius/chant/intrinsic";
|
|
13
|
+
|
|
14
|
+
export const CONDITION_ENTITY_TYPE = "AWS::CloudFormation::Condition";
|
|
15
|
+
|
|
16
|
+
export class Condition implements Declarable {
|
|
17
|
+
readonly [DECLARABLE_MARKER] = true as const;
|
|
18
|
+
readonly lexicon = "aws";
|
|
19
|
+
readonly entityType = CONDITION_ENTITY_TYPE;
|
|
20
|
+
/** The boolean expression: an `Equals`/`And`/`Or`/`Not` intrinsic. */
|
|
21
|
+
readonly expression: Intrinsic;
|
|
22
|
+
|
|
23
|
+
constructor(expression: Intrinsic) {
|
|
24
|
+
if (!isIntrinsic(expression)) {
|
|
25
|
+
throw new Error(
|
|
26
|
+
"new Condition(expression): expression must be a condition intrinsic (Equals, And, Or, Not)",
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
this.expression = expression;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Type guard for the `Condition` declarable. Duck-typed on `entityType`
|
|
35
|
+
* rather than `instanceof` so a lexicon built against a separate copy of
|
|
36
|
+
* `@intentius/chant` still matches (the #1137 convention).
|
|
37
|
+
*/
|
|
38
|
+
export function isCondition(value: unknown): value is Condition {
|
|
39
|
+
return isDeclarable(value) && value.entityType === CONDITION_ENTITY_TYPE;
|
|
40
|
+
}
|
package/src/generated/index.d.ts
CHANGED
|
@@ -135131,14 +135131,14 @@ export type ZonalAutoshiftConfiguration_ZonalAutoshiftStatus = "ENABLED";
|
|
|
135131
135131
|
// --- Intrinsic functions ---
|
|
135132
135132
|
|
|
135133
135133
|
export declare function And(conditions: unknown[]): any;
|
|
135134
|
+
export declare function And(...conditions: unknown[]): any;
|
|
135134
135135
|
export declare function Base64(value: unknown): any;
|
|
135135
135136
|
export declare function Cidr(ipBlock: unknown, count: unknown, cidrBits?: unknown): any;
|
|
135136
|
-
export declare function Condition(condition: string): any;
|
|
135137
135137
|
export declare function Equals(a: unknown, b: unknown): any;
|
|
135138
135138
|
export declare function FindInMap(mapName: string, firstKey: unknown, secondKey: unknown): any;
|
|
135139
135139
|
export declare function GetAtt(logicalName: string, attribute: string): any;
|
|
135140
135140
|
export declare function GetAZs(region?: string): any;
|
|
135141
|
-
export declare function If(condition: string, valueIfTrue: unknown, valueIfFalse: unknown): any;
|
|
135141
|
+
export declare function If(condition: string | Declarable, valueIfTrue: unknown, valueIfFalse: unknown): any;
|
|
135142
135142
|
export declare function ImportValue(sharedValue: unknown): any;
|
|
135143
135143
|
export declare function Join(delimiter: string, values: unknown[]): any;
|
|
135144
135144
|
export declare function Not(condition: unknown): any;
|
|
@@ -135170,7 +135170,7 @@ export interface Declarable {
|
|
|
135170
135170
|
|
|
135171
135171
|
export interface CFResourceAttributes {
|
|
135172
135172
|
DependsOn?: Declarable | Declarable[] | string | string[];
|
|
135173
|
-
Condition?: string;
|
|
135173
|
+
Condition?: string | Declarable;
|
|
135174
135174
|
DeletionPolicy?: "Delete" | "Retain" | "RetainExceptOnCreate" | "Snapshot";
|
|
135175
135175
|
UpdateReplacePolicy?: "Delete" | "Retain" | "Snapshot";
|
|
135176
135176
|
UpdatePolicy?: {
|