@intentius/chant-lexicon-aws 0.124.51 → 0.124.54
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/codegen/generate-lexicon.d.ts +2 -0
- package/dist/codegen/generate-lexicon.d.ts.map +1 -1
- package/dist/codegen/generate-lexicon.js +1 -0
- package/dist/components/__tests__/mock-cloud-executor.d.ts +4 -0
- package/dist/components/__tests__/mock-cloud-executor.d.ts.map +1 -1
- package/dist/components/__tests__/mock-cloud-executor.js +18 -1
- package/dist/components/apply.d.ts +76 -3
- package/dist/components/apply.d.ts.map +1 -1
- package/dist/components/apply.js +488 -32
- package/dist/components/cfn-adopt.d.ts +99 -0
- package/dist/components/cfn-adopt.d.ts.map +1 -0
- package/dist/components/cfn-adopt.js +278 -0
- package/dist/components/cfn-imports.d.ts +84 -0
- package/dist/components/cfn-imports.d.ts.map +1 -0
- package/dist/components/cfn-imports.js +239 -0
- package/dist/components/cloud-executor.d.ts +44 -2
- package/dist/components/cloud-executor.d.ts.map +1 -1
- package/dist/components/cloud-executor.js +73 -2
- package/dist/importable.d.ts +30 -0
- package/dist/importable.d.ts.map +1 -0
- package/dist/importable.js +72 -0
- package/dist/index-identity.d.ts +19 -0
- package/dist/index-identity.d.ts.map +1 -0
- package/dist/index-identity.js +79 -0
- package/dist/index-import.d.ts +17 -0
- package/dist/index-import.d.ts.map +1 -0
- package/dist/index-import.js +115 -0
- package/dist/integrity.json +3 -3
- package/dist/listed-types.d.ts +11 -0
- package/dist/listed-types.d.ts.map +1 -0
- package/dist/listed-types.js +52 -0
- package/dist/manifest.json +1 -1
- package/dist/meta.json +13206 -1237
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +9 -0
- package/dist/reference-catalog.d.ts.map +1 -1
- package/dist/reference-catalog.js +62 -20
- package/dist/spec/fetch.d.ts +5 -0
- package/dist/spec/fetch.d.ts.map +1 -1
- package/dist/spec/parse.d.ts +8 -0
- package/dist/spec/parse.d.ts.map +1 -1
- package/dist/spec/parse.js +3 -0
- package/package.json +2 -2
- package/src/codegen/generate-lexicon.ts +3 -0
- package/src/components/__tests__/mock-cloud-executor.ts +20 -1
- package/src/components/apply.ts +546 -33
- package/src/components/cfn-adopt.test.ts +284 -0
- package/src/components/cfn-adopt.ts +340 -0
- package/src/components/cfn-exports-in-use.test.ts +146 -0
- package/src/components/cfn-imports-preview.test.ts +178 -0
- package/src/components/cfn-imports-three-stacks.test.ts +107 -0
- package/src/components/cfn-imports.test.ts +213 -0
- package/src/components/cfn-imports.ts +246 -0
- package/src/components/cfn-plan-floci.e2e.test.ts +53 -0
- package/src/components/cfn-plan-shape-conformance.test.ts +83 -0
- package/src/components/cfn-plan.test.ts +328 -9
- package/src/components/cloud-executor.ts +119 -6
- package/src/components/demo-composed-stacks-floci.e2e.test.ts +235 -0
- package/src/derived-edges.test.ts +142 -0
- package/src/generated/lexicon-aws.json +13206 -1237
- package/src/importable.test.ts +86 -0
- package/src/importable.ts +83 -0
- package/src/index-identity.test.ts +134 -0
- package/src/index-identity.ts +98 -0
- package/src/index-import.test.ts +242 -0
- package/src/index-import.ts +140 -0
- package/src/index-search.test.ts +87 -0
- package/src/listed-types.test.ts +97 -0
- package/src/listed-types.ts +56 -0
- package/src/plugin.ts +10 -0
- package/src/reference-catalog.ts +63 -20
- package/src/spec/fetch.ts +5 -0
- package/src/spec/parse.test.ts +15 -0
- package/src/spec/parse.ts +12 -0
- package/src/testdata/indexed/identity.listing.json +65 -0
- package/src/testdata/indexed/import.listing.json +126 -0
- package/src/testdata/indexed/listing.json +69 -0
- package/src/testdata/indexed/topology.listing.json +350 -0
- package/src/testdata/three-cloud/dns.graph.json +336 -0
- package/src/three-cloud-parity.test.ts +49 -0
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAqQ,MAAM,0BAA0B,CAAC;AAyCjU;yEACyE;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAiBnD,eAAO,MAAM,SAAS,EAAE,aAslCvB,CAAC"}
|
package/dist/plugin.js
CHANGED
|
@@ -3,6 +3,9 @@ import { createRequire } from "module";
|
|
|
3
3
|
import { awsBehaviourKinds } from "./behaviour-kinds.js";
|
|
4
4
|
import { detectTemplate } from "./detect.js";
|
|
5
5
|
import { awsCapabilityPack } from "./capabilities/pack.js";
|
|
6
|
+
import { awsListedTypes } from "./listed-types.js";
|
|
7
|
+
import { awsIndexIdentity } from "./index-identity.js";
|
|
8
|
+
import { awsIndexImport } from "./index-import.js";
|
|
6
9
|
const require = createRequire(moduleSourceUrl(import.meta.url));
|
|
7
10
|
import { discoverLintRules } from "@intentius/chant/lint/discover";
|
|
8
11
|
import { postSynthChecks as postSynthCheckList } from "./lint/post-synth/index.js";
|
|
@@ -82,6 +85,12 @@ export const awsPlugin = {
|
|
|
82
85
|
// Live edge reconstruction for `chant graph --live` (#778).
|
|
83
86
|
referenceCatalog: awsReferenceCatalog,
|
|
84
87
|
capabilityPack: awsCapabilityPack,
|
|
88
|
+
// Cloud inventory type names to kinds, for an indexed resource (#4521).
|
|
89
|
+
listedTypes: awsListedTypes,
|
|
90
|
+
// Declared entities to indexed resources by primaryIdentifier (#4523).
|
|
91
|
+
indexIdentity: awsIndexIdentity,
|
|
92
|
+
// Indexed resources as CloudFormation import IR, for `chant import --index` (#4524).
|
|
93
|
+
indexImport: awsIndexImport,
|
|
85
94
|
lintRules() {
|
|
86
95
|
const rulesDir = join(dirname(fileURLToPath(import.meta.url)), "lint", "rules");
|
|
87
96
|
return discoverLintRules(rulesDir, import.meta.url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-catalog.d.ts","sourceRoot":"","sources":["../src/reference-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"reference-catalog.d.ts","sourceRoot":"","sources":["../src/reference-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB,EAAE,gBA2IjC,CAAC"}
|
|
@@ -26,6 +26,22 @@ export const awsReferenceCatalog = {
|
|
|
26
26
|
{ kind: "AWS::ECS::Service", ids: ["ServiceArn"] },
|
|
27
27
|
{ kind: "AWS::ECS::TaskDefinition", ids: ["TaskDefinitionArn"] },
|
|
28
28
|
{ kind: "AWS::RDS::DBInstance", ids: ["DBInstanceArn", "Endpoint.Address"] },
|
|
29
|
+
// Targets of the CloudFormation-shape rules an index needs (#4522, the
|
|
30
|
+
// missing rules counted on INTENTIUS/behold#1023). Over an index each
|
|
31
|
+
// node is also matched by its Cloud Control identifier and its cloud ids,
|
|
32
|
+
// so a role's ARN joins even though the deep hooks prune `Arn`.
|
|
33
|
+
{ kind: "AWS::RDS::DBSubnetGroup", ids: ["DBSubnetGroupName"] },
|
|
34
|
+
{ kind: "AWS::IAM::Role", ids: ["Arn", "RoleName"] },
|
|
35
|
+
{ kind: "AWS::EC2::EIP", ids: ["AllocationId", "PublicIp"] },
|
|
36
|
+
{ kind: "AWS::Logs::LogGroup", ids: ["LogGroupName", "Arn"] },
|
|
37
|
+
{ kind: "AWS::Route53::HostedZone", ids: ["Id"] },
|
|
38
|
+
{ kind: "AWS::EKS::Cluster", ids: ["Name", "Arn"] },
|
|
39
|
+
{ kind: "AWS::CloudFormation::Stack", ids: ["StackId"] },
|
|
40
|
+
// #4535: a record set is named by its record name, which is what a CNAME
|
|
41
|
+
// in the same zone points at; a bucket by its name, which is what a
|
|
42
|
+
// workload's env var carries (behold#166, ../../k8s/src/reference-catalog.ts).
|
|
43
|
+
{ kind: "AWS::Route53::RecordSet", ids: ["Name"] },
|
|
44
|
+
{ kind: "AWS::S3::Bucket", ids: ["BucketName"] },
|
|
29
45
|
],
|
|
30
46
|
refs: [
|
|
31
47
|
// ── containment (→ boundary boxes, #779) ──
|
|
@@ -82,25 +98,51 @@ export const awsReferenceCatalog = {
|
|
|
82
98
|
// intrinsics to bare logical ids (= node ids), so these match by node id; the
|
|
83
99
|
// property names are the CFN template shape (SecurityGroupIds, Cluster, …),
|
|
84
100
|
// which differs from the describe/SDK shape above. No targetKind needed —
|
|
85
|
-
// logical ids are unique.
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
{ from: "AWS::EC2::
|
|
89
|
-
{ from: "AWS::EC2::
|
|
90
|
-
{ from: "AWS::EC2::
|
|
91
|
-
{ from: "AWS::EC2::
|
|
92
|
-
{ from: "AWS::EC2::
|
|
93
|
-
{ from: "AWS::EC2::
|
|
94
|
-
{ from: "AWS::EC2::Route", path: "
|
|
95
|
-
{ from: "AWS::
|
|
96
|
-
{ from: "AWS::
|
|
97
|
-
{ from: "AWS::ElasticLoadBalancingV2::
|
|
98
|
-
{ from: "AWS::ElasticLoadBalancingV2::
|
|
99
|
-
{ from: "AWS::ElasticLoadBalancingV2::
|
|
100
|
-
{ from: "AWS::
|
|
101
|
-
{ from: "AWS::
|
|
102
|
-
{ from: "AWS::ECS::Service", path: "
|
|
103
|
-
{ from: "AWS::
|
|
104
|
-
{ from: "AWS::
|
|
101
|
+
// logical ids are unique. Over an index (#4522) the same paths hold physical
|
|
102
|
+
// values, some of them names, so each carries the `indexedTargetKind` it
|
|
103
|
+
// takes there (ruled on INTENTIUS/behold#1023 Q4).
|
|
104
|
+
{ from: "AWS::EC2::Subnet", path: "VpcId", indexedTargetKind: "AWS::EC2::VPC", relation: "containment", label: "in VPC" },
|
|
105
|
+
{ from: "AWS::EC2::SecurityGroup", path: "VpcId", indexedTargetKind: "AWS::EC2::VPC", relation: "containment", label: "in VPC" },
|
|
106
|
+
{ from: "AWS::EC2::RouteTable", path: "VpcId", indexedTargetKind: "AWS::EC2::VPC", relation: "containment", label: "in VPC" },
|
|
107
|
+
{ from: "AWS::EC2::Instance", path: "SubnetId", indexedTargetKind: "AWS::EC2::Subnet", relation: "containment", label: "in subnet" },
|
|
108
|
+
{ from: "AWS::EC2::Instance", path: "SecurityGroupIds[]", indexedTargetKind: "AWS::EC2::SecurityGroup", relation: "reference", label: "sg" },
|
|
109
|
+
{ from: "AWS::EC2::NatGateway", path: "SubnetId", indexedTargetKind: "AWS::EC2::Subnet", relation: "containment", label: "in subnet" },
|
|
110
|
+
{ from: "AWS::EC2::Route", path: "RouteTableId", indexedTargetKind: "AWS::EC2::RouteTable", relation: "reference", label: "in" },
|
|
111
|
+
{ from: "AWS::EC2::Route", path: "GatewayId", indexedTargetKind: "AWS::EC2::InternetGateway", relation: "reference", label: "via" },
|
|
112
|
+
{ from: "AWS::EC2::Route", path: "NatGatewayId", indexedTargetKind: "AWS::EC2::NatGateway", relation: "reference", label: "via" },
|
|
113
|
+
{ from: "AWS::ElasticLoadBalancingV2::LoadBalancer", path: "Subnets[]", indexedTargetKind: "AWS::EC2::Subnet", relation: "containment", label: "in subnet" },
|
|
114
|
+
{ from: "AWS::ElasticLoadBalancingV2::LoadBalancer", path: "SecurityGroups[]", indexedTargetKind: "AWS::EC2::SecurityGroup", relation: "reference", label: "sg" },
|
|
115
|
+
{ from: "AWS::ElasticLoadBalancingV2::TargetGroup", path: "VpcId", indexedTargetKind: "AWS::EC2::VPC", relation: "containment", label: "in VPC" },
|
|
116
|
+
{ from: "AWS::ElasticLoadBalancingV2::Listener", path: "LoadBalancerArn", indexedTargetKind: "AWS::ElasticLoadBalancingV2::LoadBalancer", relation: "reference", label: "on" },
|
|
117
|
+
{ from: "AWS::ElasticLoadBalancingV2::Listener", path: "DefaultActions[].TargetGroupArn", indexedTargetKind: "AWS::ElasticLoadBalancingV2::TargetGroup", relation: "reference", label: "forwards to" },
|
|
118
|
+
{ from: "AWS::ECS::Service", path: "Cluster", indexedTargetKind: "AWS::ECS::Cluster", relation: "reference", label: "in cluster" },
|
|
119
|
+
{ from: "AWS::ECS::Service", path: "TaskDefinition", indexedTargetKind: "AWS::ECS::TaskDefinition", relation: "reference", label: "runs" },
|
|
120
|
+
{ from: "AWS::ECS::Service", path: "LoadBalancers[].TargetGroupArn", indexedTargetKind: "AWS::ElasticLoadBalancingV2::TargetGroup", relation: "reference", label: "registered in" },
|
|
121
|
+
{ from: "AWS::RDS::DBInstance", path: "DBSubnetGroupName", indexedTargetKind: "AWS::RDS::DBSubnetGroup", relation: "reference", label: "subnets" },
|
|
122
|
+
{ from: "AWS::RDS::DBInstance", path: "VPCSecurityGroups[]", indexedTargetKind: "AWS::EC2::SecurityGroup", relation: "reference", label: "sg" },
|
|
123
|
+
// ── CloudFormation property shape, as Cloud Control returns it (#4522) ──
|
|
124
|
+
// The rules INTENTIUS/behold#1023's count found missing for an index of
|
|
125
|
+
// example-three-cloud. Targeted, so they hold over physical values and over
|
|
126
|
+
// logical ids alike.
|
|
127
|
+
{ from: "AWS::EC2::VPCGatewayAttachment", path: "VpcId", targetKind: "AWS::EC2::VPC", relation: "reference", label: "attaches to" },
|
|
128
|
+
{ from: "AWS::EC2::VPCGatewayAttachment", path: "InternetGatewayId", targetKind: "AWS::EC2::InternetGateway", relation: "reference", label: "attaches" },
|
|
129
|
+
{ from: "AWS::EC2::NatGateway", path: "AllocationId", targetKind: "AWS::EC2::EIP", relation: "reference", label: "address" },
|
|
130
|
+
{ from: "AWS::ECS::TaskDefinition", path: "ExecutionRoleArn", targetKind: "AWS::IAM::Role", relation: "reference", label: "execution role" },
|
|
131
|
+
{ from: "AWS::ECS::TaskDefinition", path: "TaskRoleArn", targetKind: "AWS::IAM::Role", relation: "reference", label: "task role" },
|
|
132
|
+
{ from: "AWS::ECS::TaskDefinition", path: "ContainerDefinitions[].LogConfiguration.Options.awslogs-group", targetKind: "AWS::Logs::LogGroup", relation: "reference", label: "logs to" },
|
|
133
|
+
{ from: "AWS::EC2::SecurityGroup", path: "SecurityGroupIngress[].SourceSecurityGroupId", targetKind: "AWS::EC2::SecurityGroup", relation: "reference", label: "allows" },
|
|
134
|
+
{ from: "AWS::Route53::RecordSet", path: "HostedZoneId", targetKind: "AWS::Route53::HostedZone", relation: "containment", label: "in zone" },
|
|
135
|
+
// A CNAME to another record of the estate (#4535: example-three-cloud's
|
|
136
|
+
// latency record for gcp points at gcp.three-cloud.example.). Optional,
|
|
137
|
+
// since most record values are addresses or hostnames outside it.
|
|
138
|
+
{ from: "AWS::Route53::RecordSet", path: "ResourceRecords[]", targetKind: "AWS::Route53::RecordSet", relation: "reference", label: "aliases", optional: true },
|
|
139
|
+
],
|
|
140
|
+
// Tags that name a cloud id in their key or value (behold#1023 Q5). Used
|
|
141
|
+
// over indexed nodes only. No rule matches equal tag values in general.
|
|
142
|
+
tagRefs: [
|
|
143
|
+
{ key: "aws:cloudformation:stack-id", read: "value", targetKind: "AWS::CloudFormation::Stack", label: "in stack" },
|
|
144
|
+
{ key: "aws:eks:cluster-name", read: "value", targetKind: "AWS::EKS::Cluster", label: "cluster" },
|
|
145
|
+
{ key: "eks:cluster-name", read: "value", targetKind: "AWS::EKS::Cluster", label: "cluster" },
|
|
146
|
+
{ key: "kubernetes.io/cluster/", read: "key-suffix", targetKind: "AWS::EKS::Cluster", label: "cluster" },
|
|
105
147
|
],
|
|
106
148
|
};
|
package/dist/spec/fetch.d.ts
CHANGED
|
@@ -22,6 +22,11 @@ export interface CFNSchema {
|
|
|
22
22
|
cloudFormationSystemTags?: boolean;
|
|
23
23
|
tagProperty?: string;
|
|
24
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* The resource provider's handlers (`create`, `read`, `update`, `delete`,
|
|
27
|
+
* `list`), each with its IAM permissions. A legacy type has none (#4536).
|
|
28
|
+
*/
|
|
29
|
+
handlers?: Record<string, unknown>;
|
|
25
30
|
additionalProperties?: boolean;
|
|
26
31
|
}
|
|
27
32
|
/**
|
package/dist/spec/fetch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/spec/fetch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/spec/fetch.ts"],"names":[],"mappings":"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"}
|
package/dist/spec/parse.d.ts
CHANGED
|
@@ -47,6 +47,14 @@ export interface ParsedResource {
|
|
|
47
47
|
conditionalCreateOnly: string[];
|
|
48
48
|
replacementStrategy?: "delete_then_create" | "create_then_delete";
|
|
49
49
|
tagging?: ResourceTagging;
|
|
50
|
+
/**
|
|
51
|
+
* The schema's `handlers` section as its operation names, sorted
|
|
52
|
+
* (`["create", "delete", "list", "read", "update"]`). The permissions each
|
|
53
|
+
* handler lists are left out. Absent when the schema has no handlers, as a
|
|
54
|
+
* legacy type does. CloudFormation can import a type with `create` and
|
|
55
|
+
* `read` (../importable.ts, #4536).
|
|
56
|
+
*/
|
|
57
|
+
handlers?: string[];
|
|
50
58
|
}
|
|
51
59
|
/** How a type's tags are written: a `[{Key, Value}]` list or a key-to-value map. */
|
|
52
60
|
export type TagShape = "list" | "map";
|
package/dist/spec/parse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/spec/parse.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAoC,MAAM,SAAS,CAAC;AAC3E,OAAO,EAGL,kBAAkB,IAAI,sBAAsB,EAE5C,KAAK,mBAAmB,EAIzB,MAAM,sCAAsC,CAAC;AAG9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAkBhF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,mBAAmB,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B;;;;;OAKG;IACH,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,mBAAmB,CAAC,EAAE,oBAAoB,GAAG,oBAAoB,CAAC;IAClE,OAAO,CAAC,EAAE,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/spec/parse.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAoC,MAAM,SAAS,CAAC;AAC3E,OAAO,EAGL,kBAAkB,IAAI,sBAAsB,EAE5C,KAAK,mBAAmB,EAIzB,MAAM,sCAAsC,CAAC;AAG9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAkBhF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,mBAAmB,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B;;;;;OAKG;IACH,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,mBAAmB,CAAC,EAAE,oBAAoB,GAAG,oBAAoB,CAAC;IAClE,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,oFAAoF;AACpF,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAEtC,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,iBAAiB,CAwJvE;AAID;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAE,CAe7F;AAuDD,eAAO,MAAM,kBAAkB,+BAAyB,CAAC;AAMzD;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD;AAuDD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAYzE"}
|
package/dist/spec/parse.js
CHANGED
|
@@ -125,6 +125,8 @@ export function parseCFNSchema(data) {
|
|
|
125
125
|
...tagPlacement(schema),
|
|
126
126
|
};
|
|
127
127
|
}
|
|
128
|
+
// --- Handlers (#4536): which operations the resource provider implements ---
|
|
129
|
+
const handlers = schema.handlers && typeof schema.handlers === "object" ? Object.keys(schema.handlers).sort() : [];
|
|
128
130
|
// --- Replacement strategy ---
|
|
129
131
|
let replacementStrategy;
|
|
130
132
|
if (schema.replacementStrategy === "delete_then_create" || schema.replacementStrategy === "create_then_delete") {
|
|
@@ -146,6 +148,7 @@ export function parseCFNSchema(data) {
|
|
|
146
148
|
conditionalCreateOnly: stripPointerPaths(schema.conditionalCreateOnlyProperties ?? [], schema),
|
|
147
149
|
...(replacementStrategy && { replacementStrategy }),
|
|
148
150
|
...(tagging && { tagging }),
|
|
151
|
+
...(handlers.length > 0 && { handlers }),
|
|
149
152
|
},
|
|
150
153
|
propertyTypes: boundedPropertyTypes,
|
|
151
154
|
enums,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentius/chant-lexicon-aws",
|
|
3
|
-
"version": "0.124.
|
|
3
|
+
"version": "0.124.54",
|
|
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",
|
|
@@ -83,6 +83,6 @@
|
|
|
83
83
|
"typescript": "^5.9.3"
|
|
84
84
|
},
|
|
85
85
|
"peerDependencies": {
|
|
86
|
-
"@intentius/chant": "^0.124.
|
|
86
|
+
"@intentius/chant": "^0.124.54"
|
|
87
87
|
}
|
|
88
88
|
}
|
|
@@ -34,6 +34,8 @@ export interface LexiconEntry {
|
|
|
34
34
|
conditionalCreateOnly?: string[];
|
|
35
35
|
replacementStrategy?: "delete_then_create" | "create_then_delete";
|
|
36
36
|
tagging?: ResourceTagging;
|
|
37
|
+
/** The registry schema's handler operations, sorted (#4536). Absent for a legacy type. */
|
|
38
|
+
handlers?: string[];
|
|
37
39
|
runtimeDeprecations?: Record<string, string>;
|
|
38
40
|
}
|
|
39
41
|
|
|
@@ -81,6 +83,7 @@ export function generateLexiconJSON(
|
|
|
81
83
|
...(r.resource.conditionalCreateOnly?.length && { conditionalCreateOnly: r.resource.conditionalCreateOnly }),
|
|
82
84
|
...(r.resource.replacementStrategy && { replacementStrategy: r.resource.replacementStrategy }),
|
|
83
85
|
...(r.resource.tagging && { tagging: r.resource.tagging }),
|
|
86
|
+
...(r.resource.handlers?.length && { handlers: r.resource.handlers }),
|
|
84
87
|
...(runtimeDepr && { runtimeDeprecations: runtimeDepr }),
|
|
85
88
|
};
|
|
86
89
|
},
|
|
@@ -82,6 +82,10 @@ export interface FakeStackConfig {
|
|
|
82
82
|
missing?: boolean;
|
|
83
83
|
/** Set by the mock: the empty `REVIEW_IN_PROGRESS` stack a CREATE change set made for a missing stack. */
|
|
84
84
|
shell?: boolean;
|
|
85
|
+
/** The stack's exports (#4466c), export name to the output it is; the value is the output's. */
|
|
86
|
+
exports?: Record<string, string>;
|
|
87
|
+
/** The stacks that import each of this stack's exports now, by export name (#4466c). */
|
|
88
|
+
importedBy?: Record<string, string[]>;
|
|
85
89
|
}
|
|
86
90
|
|
|
87
91
|
export interface FakeDeploymentConfig {
|
|
@@ -171,7 +175,10 @@ export function createMockCloudExecutor(options: MockCloudExecutorOptions = {}):
|
|
|
171
175
|
|
|
172
176
|
function stackStatus(name: string): CfnStackStatus {
|
|
173
177
|
const config = stacks.get(name);
|
|
174
|
-
|
|
178
|
+
const exports = config?.exports
|
|
179
|
+
? Object.fromEntries(Object.entries(config.exports).map(([exportName, output]) => [exportName, { output, value: config.outputs?.[output] ?? "" }]))
|
|
180
|
+
: undefined;
|
|
181
|
+
return { stackStatus: config?.terminalStatus ?? "UPDATE_COMPLETE", outputs: config?.outputs ?? {}, ...(exports ? { exports } : {}) };
|
|
175
182
|
}
|
|
176
183
|
|
|
177
184
|
const docker: CloudExecutor["docker"] = {
|
|
@@ -260,6 +267,18 @@ export function createMockCloudExecutor(options: MockCloudExecutorOptions = {}):
|
|
|
260
267
|
stacks.set(stackName, { ...config, shell: false, missing: true });
|
|
261
268
|
return true;
|
|
262
269
|
},
|
|
270
|
+
// Only a mock some stack's `importedBy` was given has ListImports, so the
|
|
271
|
+
// plans of every other test make the calls they always made (#4466c).
|
|
272
|
+
...(Object.values(options.stacks ?? {}).some((c) => c.importedBy !== undefined)
|
|
273
|
+
? {
|
|
274
|
+
async listImports(exportName: string) {
|
|
275
|
+
record("cloudformation", "listImports", exportName);
|
|
276
|
+
const out = new Set<string>();
|
|
277
|
+
for (const config of stacks.values()) for (const s of config.importedBy?.[exportName] ?? []) out.add(s);
|
|
278
|
+
return [...out].sort();
|
|
279
|
+
},
|
|
280
|
+
}
|
|
281
|
+
: {}),
|
|
263
282
|
async waitForStack(stackName: string) {
|
|
264
283
|
record("cloudformation", "waitForStack", stackName);
|
|
265
284
|
return stackStatus(stackName);
|