@intentius/chant 0.56.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/cli/commands/import.d.ts.map +1 -1
- package/dist/import/ir-utils.d.ts +1 -1
- package/dist/import/ir-utils.d.ts.map +1 -1
- package/dist/import/parser.d.ts +33 -0
- package/dist/import/parser.d.ts.map +1 -1
- package/dist/stack-output.d.ts +5 -0
- package/dist/stack-output.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/cli/commands/import.ts +6 -0
- package/src/import/ir-utils.ts +11 -1
- package/src/import/parser.ts +35 -0
- package/src/stack-output.ts +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/import.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,sBAAsB;IACtB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAmID;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA4EjF;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,CA2B5F;
|
|
1
|
+
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/import.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,sBAAsB;IACtB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAmID;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA4EjF;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,CA2B5F;AA6ED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB;;uBAEmB;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,+EAA+E;IAC/E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAkBD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAatF;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,GAAG,QAAQ,CAAC,EACpD,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,GAC3C,OAAO,CAAC,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC,CAezD;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,aAAa,EAAE,EACxB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,YAAY,CAAC,CAoFvB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAsB5D"}
|
|
@@ -11,7 +11,7 @@ import type { TemplateIR } from "./parser.js";
|
|
|
11
11
|
*/
|
|
12
12
|
export declare function hasIntrinsicInValue(value: unknown, name: string): boolean;
|
|
13
13
|
/**
|
|
14
|
-
* Check if any resource in the IR uses a given intrinsic.
|
|
14
|
+
* Check if any resource, condition, or output in the IR uses a given intrinsic.
|
|
15
15
|
*/
|
|
16
16
|
export declare function irUsesIntrinsic(ir: TemplateIR, name: string): boolean;
|
|
17
17
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ir-utils.d.ts","sourceRoot":"","sources":["../../src/import/ir-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAkBzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"ir-utils.d.ts","sourceRoot":"","sources":["../../src/import/ir-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAkBzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAiBrE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,GAAG,IAAI,GAC5D,GAAG,CAAC,MAAM,CAAC,CAIb"}
|
package/dist/import/parser.d.ts
CHANGED
|
@@ -16,6 +16,32 @@ export interface ResourceIR {
|
|
|
16
16
|
readonly type: string;
|
|
17
17
|
readonly properties: Record<string, unknown>;
|
|
18
18
|
readonly metadata?: Record<string, unknown>;
|
|
19
|
+
/** Name of the condition gating this resource (CloudFormation `Condition`
|
|
20
|
+
* key, or equivalent), when the source template declares one (#2069). */
|
|
21
|
+
readonly condition?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Intermediate representation of a declared template condition — a named
|
|
25
|
+
* boolean expression (CloudFormation `Conditions` entry, or equivalent).
|
|
26
|
+
* The expression is a parsed value tree: intrinsic envelopes and literals,
|
|
27
|
+
* exactly what {@link ResourceIR.properties} values hold (#2069).
|
|
28
|
+
*/
|
|
29
|
+
export interface ConditionIR {
|
|
30
|
+
readonly name: string;
|
|
31
|
+
readonly expression: unknown;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Intermediate representation of a template output (#2069).
|
|
35
|
+
*/
|
|
36
|
+
export interface OutputIR {
|
|
37
|
+
readonly name: string;
|
|
38
|
+
/** Parsed value tree, like {@link ResourceIR.properties} values. */
|
|
39
|
+
readonly value: unknown;
|
|
40
|
+
readonly description?: string;
|
|
41
|
+
/** Cross-stack export name, when the output declares one. */
|
|
42
|
+
readonly exportName?: unknown;
|
|
43
|
+
/** Name of the condition gating this output, when declared. */
|
|
44
|
+
readonly condition?: string;
|
|
19
45
|
}
|
|
20
46
|
/**
|
|
21
47
|
* Intermediate representation of a parsed template
|
|
@@ -23,7 +49,14 @@ export interface ResourceIR {
|
|
|
23
49
|
export interface TemplateIR {
|
|
24
50
|
readonly resources: ResourceIR[];
|
|
25
51
|
readonly parameters: ParameterIR[];
|
|
52
|
+
/** Declared conditions, in template order (#2069). */
|
|
53
|
+
readonly conditions?: ConditionIR[];
|
|
54
|
+
/** Template outputs, in template order (#2069). */
|
|
55
|
+
readonly outputs?: OutputIR[];
|
|
26
56
|
readonly metadata?: Record<string, unknown>;
|
|
57
|
+
/** Sections or keys the parser read but import cannot carry, named so the
|
|
58
|
+
* import surfaces them instead of dropping them silently (#2069). */
|
|
59
|
+
readonly warnings?: string[];
|
|
27
60
|
}
|
|
28
61
|
/**
|
|
29
62
|
* Interface for template parsers that convert external formats to IR
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/import/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/import/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C;6EACyE;IACzE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC;IACnC,sDAAsD;IACtD,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;IACpC,mDAAmD;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C;yEACqE;IACrE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC;CACpC"}
|
package/dist/stack-output.d.ts
CHANGED
|
@@ -29,6 +29,10 @@ export interface StackOutput extends Declarable {
|
|
|
29
29
|
/** When set, the serializer emits a cross-stack export under this name
|
|
30
30
|
* (CloudFormation `Output.Export.Name`) in addition to the plain output. */
|
|
31
31
|
readonly exportName?: string;
|
|
32
|
+
/** When set, the output is gated on a declared condition (CloudFormation
|
|
33
|
+
* `Output.Condition`) — a condition name, or the condition Declarable
|
|
34
|
+
* itself, resolved to its logical name at serialization (#2068/#2069). */
|
|
35
|
+
readonly condition?: string | Declarable;
|
|
32
36
|
}
|
|
33
37
|
/**
|
|
34
38
|
* Type guard for StackOutput.
|
|
@@ -56,5 +60,6 @@ export declare function stackOutput(ref: AttrRef | Intrinsic | string, options?:
|
|
|
56
60
|
description?: string;
|
|
57
61
|
exportName?: string;
|
|
58
62
|
lexicon?: string;
|
|
63
|
+
condition?: string | Declarable;
|
|
59
64
|
}): StackOutput;
|
|
60
65
|
//# sourceMappingURL=stack-output.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack-output.d.ts","sourceRoot":"","sources":["../src/stack-output.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAgB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAG1D;;GAEG;AACH,eAAO,MAAM,mBAAmB,eAAkC,CAAC;AAEnE;;;GAGG;AACH,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE,IAAI,CAAC;IACrC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB;wEACoE;IACpE,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACjD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;gFAC4E;IAC5E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"stack-output.d.ts","sourceRoot":"","sources":["../src/stack-output.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAgB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAG1D;;GAEG;AACH,eAAO,MAAM,mBAAmB,eAAkC,CAAC;AAEnE;;;GAGG;AACH,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE,IAAI,CAAC;IACrC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB;wEACoE;IACpE,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACjD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;gFAC4E;IAC5E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;8EAE0E;IAC1E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;CAC1C;AA2CD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAOlE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,EACjC,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;CAAE,GACzG,WAAW,CA0Cb"}
|
package/package.json
CHANGED
|
@@ -313,6 +313,12 @@ function parseAndWrite(
|
|
|
313
313
|
};
|
|
314
314
|
}
|
|
315
315
|
|
|
316
|
+
// Sections the parser read but import cannot carry, named by the parser
|
|
317
|
+
// rather than dropped silently (#2069).
|
|
318
|
+
if (ir.warnings) {
|
|
319
|
+
warnings.push(...ir.warnings);
|
|
320
|
+
}
|
|
321
|
+
|
|
316
322
|
const generator = plugin.templateGenerator!();
|
|
317
323
|
|
|
318
324
|
// Check output directory
|
package/src/import/ir-utils.ts
CHANGED
|
@@ -32,7 +32,7 @@ export function hasIntrinsicInValue(value: unknown, name: string): boolean {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
|
-
* Check if any resource in the IR uses a given intrinsic.
|
|
35
|
+
* Check if any resource, condition, or output in the IR uses a given intrinsic.
|
|
36
36
|
*/
|
|
37
37
|
export function irUsesIntrinsic(ir: TemplateIR, name: string): boolean {
|
|
38
38
|
for (const resource of ir.resources) {
|
|
@@ -40,6 +40,16 @@ export function irUsesIntrinsic(ir: TemplateIR, name: string): boolean {
|
|
|
40
40
|
return true;
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
+
for (const condition of ir.conditions ?? []) {
|
|
44
|
+
if (hasIntrinsicInValue(condition.expression, name)) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
for (const output of ir.outputs ?? []) {
|
|
49
|
+
if (hasIntrinsicInValue(output.value, name) || hasIntrinsicInValue(output.exportName, name)) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
43
53
|
return false;
|
|
44
54
|
}
|
|
45
55
|
|
package/src/import/parser.ts
CHANGED
|
@@ -17,6 +17,34 @@ export interface ResourceIR {
|
|
|
17
17
|
readonly type: string;
|
|
18
18
|
readonly properties: Record<string, unknown>;
|
|
19
19
|
readonly metadata?: Record<string, unknown>;
|
|
20
|
+
/** Name of the condition gating this resource (CloudFormation `Condition`
|
|
21
|
+
* key, or equivalent), when the source template declares one (#2069). */
|
|
22
|
+
readonly condition?: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Intermediate representation of a declared template condition — a named
|
|
27
|
+
* boolean expression (CloudFormation `Conditions` entry, or equivalent).
|
|
28
|
+
* The expression is a parsed value tree: intrinsic envelopes and literals,
|
|
29
|
+
* exactly what {@link ResourceIR.properties} values hold (#2069).
|
|
30
|
+
*/
|
|
31
|
+
export interface ConditionIR {
|
|
32
|
+
readonly name: string;
|
|
33
|
+
readonly expression: unknown;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Intermediate representation of a template output (#2069).
|
|
38
|
+
*/
|
|
39
|
+
export interface OutputIR {
|
|
40
|
+
readonly name: string;
|
|
41
|
+
/** Parsed value tree, like {@link ResourceIR.properties} values. */
|
|
42
|
+
readonly value: unknown;
|
|
43
|
+
readonly description?: string;
|
|
44
|
+
/** Cross-stack export name, when the output declares one. */
|
|
45
|
+
readonly exportName?: unknown;
|
|
46
|
+
/** Name of the condition gating this output, when declared. */
|
|
47
|
+
readonly condition?: string;
|
|
20
48
|
}
|
|
21
49
|
|
|
22
50
|
/**
|
|
@@ -25,7 +53,14 @@ export interface ResourceIR {
|
|
|
25
53
|
export interface TemplateIR {
|
|
26
54
|
readonly resources: ResourceIR[];
|
|
27
55
|
readonly parameters: ParameterIR[];
|
|
56
|
+
/** Declared conditions, in template order (#2069). */
|
|
57
|
+
readonly conditions?: ConditionIR[];
|
|
58
|
+
/** Template outputs, in template order (#2069). */
|
|
59
|
+
readonly outputs?: OutputIR[];
|
|
28
60
|
readonly metadata?: Record<string, unknown>;
|
|
61
|
+
/** Sections or keys the parser read but import cannot carry, named so the
|
|
62
|
+
* import surfaces them instead of dropping them silently (#2069). */
|
|
63
|
+
readonly warnings?: string[];
|
|
29
64
|
}
|
|
30
65
|
|
|
31
66
|
/**
|
package/src/stack-output.ts
CHANGED
|
@@ -33,6 +33,10 @@ export interface StackOutput extends Declarable {
|
|
|
33
33
|
/** When set, the serializer emits a cross-stack export under this name
|
|
34
34
|
* (CloudFormation `Output.Export.Name`) in addition to the plain output. */
|
|
35
35
|
readonly exportName?: string;
|
|
36
|
+
/** When set, the output is gated on a declared condition (CloudFormation
|
|
37
|
+
* `Output.Condition`) — a condition name, or the condition Declarable
|
|
38
|
+
* itself, resolved to its logical name at serialization (#2068/#2069). */
|
|
39
|
+
readonly condition?: string | Declarable;
|
|
36
40
|
}
|
|
37
41
|
|
|
38
42
|
/** What a wrapping intrinsic's lexicon gets derived from: either a nested
|
|
@@ -108,7 +112,7 @@ export function isStackOutput(value: unknown): value is StackOutput {
|
|
|
108
112
|
*/
|
|
109
113
|
export function stackOutput(
|
|
110
114
|
ref: AttrRef | Intrinsic | string,
|
|
111
|
-
options?: { description?: string; exportName?: string; lexicon?: string },
|
|
115
|
+
options?: { description?: string; exportName?: string; lexicon?: string; condition?: string | Declarable },
|
|
112
116
|
): StackOutput {
|
|
113
117
|
// Duck-type, not `instanceof` (chant #1137): AttrRef also implements
|
|
114
118
|
// Intrinsic (a global-symbol marker), so `isIntrinsic(ref)` alone already
|
|
@@ -147,6 +151,7 @@ export function stackOutput(
|
|
|
147
151
|
sourceRef: ref,
|
|
148
152
|
description: options?.description,
|
|
149
153
|
exportName: options?.exportName,
|
|
154
|
+
condition: options?.condition,
|
|
150
155
|
};
|
|
151
156
|
|
|
152
157
|
return output;
|