cdk-preflight 0.0.175 → 0.0.177
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/.jsii +375 -172
- package/AGENTS.md +22 -12
- package/API.md +5 -0
- package/README.md +2 -2
- package/docs/rules.md +79 -79
- package/lib/index.d.ts +5 -0
- package/lib/index.js +23 -5
- package/lib/private/enforce.d.ts +16 -0
- package/lib/private/enforce.js +58 -1
- package/lib/rules.generated.d.ts +6 -0
- package/lib/rules.generated.js +638 -81
- package/package.json +2 -2
package/.jsii
CHANGED
|
@@ -151,6 +151,19 @@
|
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
},
|
|
154
|
+
"aws-cdk-lib.aws_accountaccess": {
|
|
155
|
+
"targets": {
|
|
156
|
+
"dotnet": {
|
|
157
|
+
"namespace": "Amazon.CDK.AWS.AccountAccess"
|
|
158
|
+
},
|
|
159
|
+
"java": {
|
|
160
|
+
"package": "software.amazon.awscdk.services.accountaccess"
|
|
161
|
+
},
|
|
162
|
+
"python": {
|
|
163
|
+
"module": "aws_cdk.aws_accountaccess"
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
},
|
|
154
167
|
"aws-cdk-lib.aws_acmpca": {
|
|
155
168
|
"targets": {
|
|
156
169
|
"dotnet": {
|
|
@@ -164,6 +177,19 @@
|
|
|
164
177
|
}
|
|
165
178
|
}
|
|
166
179
|
},
|
|
180
|
+
"aws-cdk-lib.aws_agentregistry": {
|
|
181
|
+
"targets": {
|
|
182
|
+
"dotnet": {
|
|
183
|
+
"namespace": "Amazon.CDK.AWS.AgentRegistry"
|
|
184
|
+
},
|
|
185
|
+
"java": {
|
|
186
|
+
"package": "software.amazon.awscdk.services.agentregistry"
|
|
187
|
+
},
|
|
188
|
+
"python": {
|
|
189
|
+
"module": "aws_cdk.aws_agentregistry"
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
},
|
|
167
193
|
"aws-cdk-lib.aws_aiops": {
|
|
168
194
|
"targets": {
|
|
169
195
|
"dotnet": {
|
|
@@ -450,19 +476,6 @@
|
|
|
450
476
|
}
|
|
451
477
|
}
|
|
452
478
|
},
|
|
453
|
-
"aws-cdk-lib.aws_artifact": {
|
|
454
|
-
"targets": {
|
|
455
|
-
"dotnet": {
|
|
456
|
-
"namespace": "Amazon.CDK.AWS.Artifact"
|
|
457
|
-
},
|
|
458
|
-
"java": {
|
|
459
|
-
"package": "software.amazon.awscdk.services.artifact"
|
|
460
|
-
},
|
|
461
|
-
"python": {
|
|
462
|
-
"module": "aws_cdk.aws_artifact"
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
},
|
|
466
479
|
"aws-cdk-lib.aws_athena": {
|
|
467
480
|
"targets": {
|
|
468
481
|
"dotnet": {
|
|
@@ -593,19 +606,6 @@
|
|
|
593
606
|
}
|
|
594
607
|
}
|
|
595
608
|
},
|
|
596
|
-
"aws-cdk-lib.aws_backupsearch": {
|
|
597
|
-
"targets": {
|
|
598
|
-
"dotnet": {
|
|
599
|
-
"namespace": "Amazon.CDK.AWS.BackupSearch"
|
|
600
|
-
},
|
|
601
|
-
"java": {
|
|
602
|
-
"package": "software.amazon.awscdk.services.backupsearch"
|
|
603
|
-
},
|
|
604
|
-
"python": {
|
|
605
|
-
"module": "aws_cdk.aws_backupsearch"
|
|
606
|
-
}
|
|
607
|
-
}
|
|
608
|
-
},
|
|
609
609
|
"aws-cdk-lib.aws_batch": {
|
|
610
610
|
"targets": {
|
|
611
611
|
"dotnet": {
|
|
@@ -880,6 +880,19 @@
|
|
|
880
880
|
}
|
|
881
881
|
}
|
|
882
882
|
},
|
|
883
|
+
"aws-cdk-lib.aws_cloudhsm": {
|
|
884
|
+
"targets": {
|
|
885
|
+
"dotnet": {
|
|
886
|
+
"namespace": "Amazon.CDK.AWS.CloudHSM"
|
|
887
|
+
},
|
|
888
|
+
"java": {
|
|
889
|
+
"package": "software.amazon.awscdk.services.cloudhsm"
|
|
890
|
+
},
|
|
891
|
+
"python": {
|
|
892
|
+
"module": "aws_cdk.aws_cloudhsm"
|
|
893
|
+
}
|
|
894
|
+
}
|
|
895
|
+
},
|
|
883
896
|
"aws-cdk-lib.aws_cloudtrail": {
|
|
884
897
|
"targets": {
|
|
885
898
|
"dotnet": {
|
|
@@ -1101,19 +1114,6 @@
|
|
|
1101
1114
|
}
|
|
1102
1115
|
}
|
|
1103
1116
|
},
|
|
1104
|
-
"aws-cdk-lib.aws_cognitosync": {
|
|
1105
|
-
"targets": {
|
|
1106
|
-
"dotnet": {
|
|
1107
|
-
"namespace": "Amazon.CDK.AWS.CognitoSync"
|
|
1108
|
-
},
|
|
1109
|
-
"java": {
|
|
1110
|
-
"package": "software.amazon.awscdk.services.cognitosync"
|
|
1111
|
-
},
|
|
1112
|
-
"python": {
|
|
1113
|
-
"module": "aws_cdk.aws_cognitosync"
|
|
1114
|
-
}
|
|
1115
|
-
}
|
|
1116
|
-
},
|
|
1117
1117
|
"aws-cdk-lib.aws_comprehend": {
|
|
1118
1118
|
"targets": {
|
|
1119
1119
|
"dotnet": {
|
|
@@ -1192,19 +1192,6 @@
|
|
|
1192
1192
|
}
|
|
1193
1193
|
}
|
|
1194
1194
|
},
|
|
1195
|
-
"aws-cdk-lib.aws_controlcatalog": {
|
|
1196
|
-
"targets": {
|
|
1197
|
-
"dotnet": {
|
|
1198
|
-
"namespace": "Amazon.CDK.AWS.ControlCatalog"
|
|
1199
|
-
},
|
|
1200
|
-
"java": {
|
|
1201
|
-
"package": "software.amazon.awscdk.services.controlcatalog"
|
|
1202
|
-
},
|
|
1203
|
-
"python": {
|
|
1204
|
-
"module": "aws_cdk.aws_controlcatalog"
|
|
1205
|
-
}
|
|
1206
|
-
}
|
|
1207
|
-
},
|
|
1208
1195
|
"aws-cdk-lib.aws_controltower": {
|
|
1209
1196
|
"targets": {
|
|
1210
1197
|
"dotnet": {
|
|
@@ -1257,6 +1244,19 @@
|
|
|
1257
1244
|
}
|
|
1258
1245
|
}
|
|
1259
1246
|
},
|
|
1247
|
+
"aws-cdk-lib.aws_dataexchange": {
|
|
1248
|
+
"targets": {
|
|
1249
|
+
"dotnet": {
|
|
1250
|
+
"namespace": "Amazon.CDK.AWS.DataExchange"
|
|
1251
|
+
},
|
|
1252
|
+
"java": {
|
|
1253
|
+
"package": "software.amazon.awscdk.services.dataexchange"
|
|
1254
|
+
},
|
|
1255
|
+
"python": {
|
|
1256
|
+
"module": "aws_cdk.aws_dataexchange"
|
|
1257
|
+
}
|
|
1258
|
+
}
|
|
1259
|
+
},
|
|
1260
1260
|
"aws-cdk-lib.aws_datapipeline": {
|
|
1261
1261
|
"targets": {
|
|
1262
1262
|
"dotnet": {
|
|
@@ -1452,6 +1452,19 @@
|
|
|
1452
1452
|
}
|
|
1453
1453
|
}
|
|
1454
1454
|
},
|
|
1455
|
+
"aws-cdk-lib.aws_drs": {
|
|
1456
|
+
"targets": {
|
|
1457
|
+
"dotnet": {
|
|
1458
|
+
"namespace": "Amazon.CDK.AWS.DRS"
|
|
1459
|
+
},
|
|
1460
|
+
"java": {
|
|
1461
|
+
"package": "software.amazon.awscdk.services.drs"
|
|
1462
|
+
},
|
|
1463
|
+
"python": {
|
|
1464
|
+
"module": "aws_cdk.aws_drs"
|
|
1465
|
+
}
|
|
1466
|
+
}
|
|
1467
|
+
},
|
|
1455
1468
|
"aws-cdk-lib.aws_dsql": {
|
|
1456
1469
|
"targets": {
|
|
1457
1470
|
"dotnet": {
|
|
@@ -2251,6 +2264,19 @@
|
|
|
2251
2264
|
}
|
|
2252
2265
|
}
|
|
2253
2266
|
},
|
|
2267
|
+
"aws-cdk-lib.aws_iotsecuretunneling": {
|
|
2268
|
+
"targets": {
|
|
2269
|
+
"dotnet": {
|
|
2270
|
+
"namespace": "Amazon.CDK.AWS.IoTSecureTunneling"
|
|
2271
|
+
},
|
|
2272
|
+
"java": {
|
|
2273
|
+
"package": "software.amazon.awscdk.services.iotsecuretunneling"
|
|
2274
|
+
},
|
|
2275
|
+
"python": {
|
|
2276
|
+
"module": "aws_cdk.aws_iotsecuretunneling"
|
|
2277
|
+
}
|
|
2278
|
+
}
|
|
2279
|
+
},
|
|
2254
2280
|
"aws-cdk-lib.aws_iotsitewise": {
|
|
2255
2281
|
"targets": {
|
|
2256
2282
|
"dotnet": {
|
|
@@ -2784,6 +2810,19 @@
|
|
|
2784
2810
|
}
|
|
2785
2811
|
}
|
|
2786
2812
|
},
|
|
2813
|
+
"aws-cdk-lib.aws_mgn": {
|
|
2814
|
+
"targets": {
|
|
2815
|
+
"dotnet": {
|
|
2816
|
+
"namespace": "Amazon.CDK.AWS.MGN"
|
|
2817
|
+
},
|
|
2818
|
+
"java": {
|
|
2819
|
+
"package": "software.amazon.awscdk.services.mgn"
|
|
2820
|
+
},
|
|
2821
|
+
"python": {
|
|
2822
|
+
"module": "aws_cdk.aws_mgn"
|
|
2823
|
+
}
|
|
2824
|
+
}
|
|
2825
|
+
},
|
|
2787
2826
|
"aws-cdk-lib.aws_mpa": {
|
|
2788
2827
|
"targets": {
|
|
2789
2828
|
"dotnet": {
|
|
@@ -3005,6 +3044,19 @@
|
|
|
3005
3044
|
}
|
|
3006
3045
|
}
|
|
3007
3046
|
},
|
|
3047
|
+
"aws-cdk-lib.aws_opensearch": {
|
|
3048
|
+
"targets": {
|
|
3049
|
+
"dotnet": {
|
|
3050
|
+
"namespace": "Amazon.CDK.AWS.OpenSearch"
|
|
3051
|
+
},
|
|
3052
|
+
"java": {
|
|
3053
|
+
"package": "software.amazon.awscdk.services.opensearch"
|
|
3054
|
+
},
|
|
3055
|
+
"python": {
|
|
3056
|
+
"module": "aws_cdk.aws_opensearch"
|
|
3057
|
+
}
|
|
3058
|
+
}
|
|
3059
|
+
},
|
|
3008
3060
|
"aws-cdk-lib.aws_opensearchserverless": {
|
|
3009
3061
|
"targets": {
|
|
3010
3062
|
"dotnet": {
|
|
@@ -3213,6 +3265,19 @@
|
|
|
3213
3265
|
}
|
|
3214
3266
|
}
|
|
3215
3267
|
},
|
|
3268
|
+
"aws-cdk-lib.aws_pricingplanmanager": {
|
|
3269
|
+
"targets": {
|
|
3270
|
+
"dotnet": {
|
|
3271
|
+
"namespace": "Amazon.CDK.AWS.PricingPlanManager"
|
|
3272
|
+
},
|
|
3273
|
+
"java": {
|
|
3274
|
+
"package": "software.amazon.awscdk.services.pricingplanmanager"
|
|
3275
|
+
},
|
|
3276
|
+
"python": {
|
|
3277
|
+
"module": "aws_cdk.aws_pricingplanmanager"
|
|
3278
|
+
}
|
|
3279
|
+
}
|
|
3280
|
+
},
|
|
3216
3281
|
"aws-cdk-lib.aws_proton": {
|
|
3217
3282
|
"targets": {
|
|
3218
3283
|
"dotnet": {
|
|
@@ -3840,6 +3905,19 @@
|
|
|
3840
3905
|
}
|
|
3841
3906
|
}
|
|
3842
3907
|
},
|
|
3908
|
+
"aws-cdk-lib.aws_serverlessrepo": {
|
|
3909
|
+
"targets": {
|
|
3910
|
+
"dotnet": {
|
|
3911
|
+
"namespace": "Amazon.CDK.AWS.ServerlessRepo"
|
|
3912
|
+
},
|
|
3913
|
+
"java": {
|
|
3914
|
+
"package": "software.amazon.awscdk.services.serverlessrepo"
|
|
3915
|
+
},
|
|
3916
|
+
"python": {
|
|
3917
|
+
"module": "aws_cdk.aws_serverlessrepo"
|
|
3918
|
+
}
|
|
3919
|
+
}
|
|
3920
|
+
},
|
|
3843
3921
|
"aws-cdk-lib.aws_servicecatalog": {
|
|
3844
3922
|
"targets": {
|
|
3845
3923
|
"dotnet": {
|
|
@@ -4074,19 +4152,6 @@
|
|
|
4074
4152
|
}
|
|
4075
4153
|
}
|
|
4076
4154
|
},
|
|
4077
|
-
"aws-cdk-lib.aws_states": {
|
|
4078
|
-
"targets": {
|
|
4079
|
-
"dotnet": {
|
|
4080
|
-
"namespace": "Amazon.CDK.AWS.States"
|
|
4081
|
-
},
|
|
4082
|
-
"java": {
|
|
4083
|
-
"package": "software.amazon.awscdk.services.states"
|
|
4084
|
-
},
|
|
4085
|
-
"python": {
|
|
4086
|
-
"module": "aws_cdk.aws_states"
|
|
4087
|
-
}
|
|
4088
|
-
}
|
|
4089
|
-
},
|
|
4090
4155
|
"aws-cdk-lib.aws_stepfunctions": {
|
|
4091
4156
|
"targets": {
|
|
4092
4157
|
"dotnet": {
|
|
@@ -4139,6 +4204,19 @@
|
|
|
4139
4204
|
}
|
|
4140
4205
|
}
|
|
4141
4206
|
},
|
|
4207
|
+
"aws-cdk-lib.aws_supportauthz": {
|
|
4208
|
+
"targets": {
|
|
4209
|
+
"dotnet": {
|
|
4210
|
+
"namespace": "Amazon.CDK.AWS.SupportAuthZ"
|
|
4211
|
+
},
|
|
4212
|
+
"java": {
|
|
4213
|
+
"package": "software.amazon.awscdk.services.supportauthz"
|
|
4214
|
+
},
|
|
4215
|
+
"python": {
|
|
4216
|
+
"module": "aws_cdk.aws_supportauthz"
|
|
4217
|
+
}
|
|
4218
|
+
}
|
|
4219
|
+
},
|
|
4142
4220
|
"aws-cdk-lib.aws_synthetics": {
|
|
4143
4221
|
"targets": {
|
|
4144
4222
|
"dotnet": {
|
|
@@ -4165,16 +4243,16 @@
|
|
|
4165
4243
|
}
|
|
4166
4244
|
}
|
|
4167
4245
|
},
|
|
4168
|
-
"aws-cdk-lib.
|
|
4246
|
+
"aws-cdk-lib.aws_textract": {
|
|
4169
4247
|
"targets": {
|
|
4170
4248
|
"dotnet": {
|
|
4171
|
-
"namespace": "Amazon.CDK.AWS.
|
|
4249
|
+
"namespace": "Amazon.CDK.AWS.Textract"
|
|
4172
4250
|
},
|
|
4173
4251
|
"java": {
|
|
4174
|
-
"package": "software.amazon.awscdk.services.
|
|
4252
|
+
"package": "software.amazon.awscdk.services.textract"
|
|
4175
4253
|
},
|
|
4176
4254
|
"python": {
|
|
4177
|
-
"module": "aws_cdk.
|
|
4255
|
+
"module": "aws_cdk.aws_textract"
|
|
4178
4256
|
}
|
|
4179
4257
|
}
|
|
4180
4258
|
},
|
|
@@ -4217,16 +4295,16 @@
|
|
|
4217
4295
|
}
|
|
4218
4296
|
}
|
|
4219
4297
|
},
|
|
4220
|
-
"aws-cdk-lib.
|
|
4298
|
+
"aws-cdk-lib.aws_translate": {
|
|
4221
4299
|
"targets": {
|
|
4222
4300
|
"dotnet": {
|
|
4223
|
-
"namespace": "Amazon.CDK.AWS.
|
|
4301
|
+
"namespace": "Amazon.CDK.AWS.Translate"
|
|
4224
4302
|
},
|
|
4225
4303
|
"java": {
|
|
4226
|
-
"package": "software.amazon.awscdk.services.
|
|
4304
|
+
"package": "software.amazon.awscdk.services.translate"
|
|
4227
4305
|
},
|
|
4228
4306
|
"python": {
|
|
4229
|
-
"module": "aws_cdk.
|
|
4307
|
+
"module": "aws_cdk.aws_translate"
|
|
4230
4308
|
}
|
|
4231
4309
|
}
|
|
4232
4310
|
},
|
|
@@ -4334,6 +4412,19 @@
|
|
|
4334
4412
|
}
|
|
4335
4413
|
}
|
|
4336
4414
|
},
|
|
4415
|
+
"aws-cdk-lib.aws_wickr": {
|
|
4416
|
+
"targets": {
|
|
4417
|
+
"dotnet": {
|
|
4418
|
+
"namespace": "Amazon.CDK.AWS.Wickr"
|
|
4419
|
+
},
|
|
4420
|
+
"java": {
|
|
4421
|
+
"package": "software.amazon.awscdk.services.wickr"
|
|
4422
|
+
},
|
|
4423
|
+
"python": {
|
|
4424
|
+
"module": "aws_cdk.aws_wickr"
|
|
4425
|
+
}
|
|
4426
|
+
}
|
|
4427
|
+
},
|
|
4337
4428
|
"aws-cdk-lib.aws_wisdom": {
|
|
4338
4429
|
"targets": {
|
|
4339
4430
|
"dotnet": {
|
|
@@ -4500,6 +4591,22 @@
|
|
|
4500
4591
|
}
|
|
4501
4592
|
}
|
|
4502
4593
|
},
|
|
4594
|
+
"aws-cdk-lib.interfaces.aws_accountaccess": {
|
|
4595
|
+
"targets": {
|
|
4596
|
+
"dotnet": {
|
|
4597
|
+
"namespace": "Amazon.CDK.Interfaces.AccountAccess"
|
|
4598
|
+
},
|
|
4599
|
+
"go": {
|
|
4600
|
+
"packageName": "interfacesawsaccountaccess"
|
|
4601
|
+
},
|
|
4602
|
+
"java": {
|
|
4603
|
+
"package": "software.amazon.awscdk.interfaces.accountaccess"
|
|
4604
|
+
},
|
|
4605
|
+
"python": {
|
|
4606
|
+
"module": "aws_cdk.interfaces.aws_accountaccess"
|
|
4607
|
+
}
|
|
4608
|
+
}
|
|
4609
|
+
},
|
|
4503
4610
|
"aws-cdk-lib.interfaces.aws_acmpca": {
|
|
4504
4611
|
"targets": {
|
|
4505
4612
|
"dotnet": {
|
|
@@ -4516,6 +4623,22 @@
|
|
|
4516
4623
|
}
|
|
4517
4624
|
}
|
|
4518
4625
|
},
|
|
4626
|
+
"aws-cdk-lib.interfaces.aws_agentregistry": {
|
|
4627
|
+
"targets": {
|
|
4628
|
+
"dotnet": {
|
|
4629
|
+
"namespace": "Amazon.CDK.Interfaces.AgentRegistry"
|
|
4630
|
+
},
|
|
4631
|
+
"go": {
|
|
4632
|
+
"packageName": "interfacesawsagentregistry"
|
|
4633
|
+
},
|
|
4634
|
+
"java": {
|
|
4635
|
+
"package": "software.amazon.awscdk.interfaces.agentregistry"
|
|
4636
|
+
},
|
|
4637
|
+
"python": {
|
|
4638
|
+
"module": "aws_cdk.interfaces.aws_agentregistry"
|
|
4639
|
+
}
|
|
4640
|
+
}
|
|
4641
|
+
},
|
|
4519
4642
|
"aws-cdk-lib.interfaces.aws_aiops": {
|
|
4520
4643
|
"targets": {
|
|
4521
4644
|
"dotnet": {
|
|
@@ -4836,22 +4959,6 @@
|
|
|
4836
4959
|
}
|
|
4837
4960
|
}
|
|
4838
4961
|
},
|
|
4839
|
-
"aws-cdk-lib.interfaces.aws_artifact": {
|
|
4840
|
-
"targets": {
|
|
4841
|
-
"dotnet": {
|
|
4842
|
-
"namespace": "Amazon.CDK.Interfaces.Artifact"
|
|
4843
|
-
},
|
|
4844
|
-
"go": {
|
|
4845
|
-
"packageName": "interfacesawsartifact"
|
|
4846
|
-
},
|
|
4847
|
-
"java": {
|
|
4848
|
-
"package": "software.amazon.awscdk.interfaces.artifact"
|
|
4849
|
-
},
|
|
4850
|
-
"python": {
|
|
4851
|
-
"module": "aws_cdk.interfaces.aws_artifact"
|
|
4852
|
-
}
|
|
4853
|
-
}
|
|
4854
|
-
},
|
|
4855
4962
|
"aws-cdk-lib.interfaces.aws_athena": {
|
|
4856
4963
|
"targets": {
|
|
4857
4964
|
"dotnet": {
|
|
@@ -4980,22 +5087,6 @@
|
|
|
4980
5087
|
}
|
|
4981
5088
|
}
|
|
4982
5089
|
},
|
|
4983
|
-
"aws-cdk-lib.interfaces.aws_backupsearch": {
|
|
4984
|
-
"targets": {
|
|
4985
|
-
"dotnet": {
|
|
4986
|
-
"namespace": "Amazon.CDK.Interfaces.BackupSearch"
|
|
4987
|
-
},
|
|
4988
|
-
"go": {
|
|
4989
|
-
"packageName": "interfacesawsbackupsearch"
|
|
4990
|
-
},
|
|
4991
|
-
"java": {
|
|
4992
|
-
"package": "software.amazon.awscdk.interfaces.backupsearch"
|
|
4993
|
-
},
|
|
4994
|
-
"python": {
|
|
4995
|
-
"module": "aws_cdk.interfaces.aws_backupsearch"
|
|
4996
|
-
}
|
|
4997
|
-
}
|
|
4998
|
-
},
|
|
4999
5090
|
"aws-cdk-lib.interfaces.aws_batch": {
|
|
5000
5091
|
"targets": {
|
|
5001
5092
|
"dotnet": {
|
|
@@ -5348,6 +5439,22 @@
|
|
|
5348
5439
|
}
|
|
5349
5440
|
}
|
|
5350
5441
|
},
|
|
5442
|
+
"aws-cdk-lib.interfaces.aws_cloudhsm": {
|
|
5443
|
+
"targets": {
|
|
5444
|
+
"dotnet": {
|
|
5445
|
+
"namespace": "Amazon.CDK.Interfaces.CloudHSM"
|
|
5446
|
+
},
|
|
5447
|
+
"go": {
|
|
5448
|
+
"packageName": "interfacesawscloudhsm"
|
|
5449
|
+
},
|
|
5450
|
+
"java": {
|
|
5451
|
+
"package": "software.amazon.awscdk.interfaces.cloudhsm"
|
|
5452
|
+
},
|
|
5453
|
+
"python": {
|
|
5454
|
+
"module": "aws_cdk.interfaces.aws_cloudhsm"
|
|
5455
|
+
}
|
|
5456
|
+
}
|
|
5457
|
+
},
|
|
5351
5458
|
"aws-cdk-lib.interfaces.aws_cloudtrail": {
|
|
5352
5459
|
"targets": {
|
|
5353
5460
|
"dotnet": {
|
|
@@ -5572,22 +5679,6 @@
|
|
|
5572
5679
|
}
|
|
5573
5680
|
}
|
|
5574
5681
|
},
|
|
5575
|
-
"aws-cdk-lib.interfaces.aws_cognitosync": {
|
|
5576
|
-
"targets": {
|
|
5577
|
-
"dotnet": {
|
|
5578
|
-
"namespace": "Amazon.CDK.Interfaces.CognitoSync"
|
|
5579
|
-
},
|
|
5580
|
-
"go": {
|
|
5581
|
-
"packageName": "interfacesawscognitosync"
|
|
5582
|
-
},
|
|
5583
|
-
"java": {
|
|
5584
|
-
"package": "software.amazon.awscdk.interfaces.cognitosync"
|
|
5585
|
-
},
|
|
5586
|
-
"python": {
|
|
5587
|
-
"module": "aws_cdk.interfaces.aws_cognitosync"
|
|
5588
|
-
}
|
|
5589
|
-
}
|
|
5590
|
-
},
|
|
5591
5682
|
"aws-cdk-lib.interfaces.aws_comprehend": {
|
|
5592
5683
|
"targets": {
|
|
5593
5684
|
"dotnet": {
|
|
@@ -5684,22 +5775,6 @@
|
|
|
5684
5775
|
}
|
|
5685
5776
|
}
|
|
5686
5777
|
},
|
|
5687
|
-
"aws-cdk-lib.interfaces.aws_controlcatalog": {
|
|
5688
|
-
"targets": {
|
|
5689
|
-
"dotnet": {
|
|
5690
|
-
"namespace": "Amazon.CDK.Interfaces.ControlCatalog"
|
|
5691
|
-
},
|
|
5692
|
-
"go": {
|
|
5693
|
-
"packageName": "interfacesawscontrolcatalog"
|
|
5694
|
-
},
|
|
5695
|
-
"java": {
|
|
5696
|
-
"package": "software.amazon.awscdk.interfaces.controlcatalog"
|
|
5697
|
-
},
|
|
5698
|
-
"python": {
|
|
5699
|
-
"module": "aws_cdk.interfaces.aws_controlcatalog"
|
|
5700
|
-
}
|
|
5701
|
-
}
|
|
5702
|
-
},
|
|
5703
5778
|
"aws-cdk-lib.interfaces.aws_controltower": {
|
|
5704
5779
|
"targets": {
|
|
5705
5780
|
"dotnet": {
|
|
@@ -5764,6 +5839,22 @@
|
|
|
5764
5839
|
}
|
|
5765
5840
|
}
|
|
5766
5841
|
},
|
|
5842
|
+
"aws-cdk-lib.interfaces.aws_dataexchange": {
|
|
5843
|
+
"targets": {
|
|
5844
|
+
"dotnet": {
|
|
5845
|
+
"namespace": "Amazon.CDK.Interfaces.DataExchange"
|
|
5846
|
+
},
|
|
5847
|
+
"go": {
|
|
5848
|
+
"packageName": "interfacesawsdataexchange"
|
|
5849
|
+
},
|
|
5850
|
+
"java": {
|
|
5851
|
+
"package": "software.amazon.awscdk.interfaces.dataexchange"
|
|
5852
|
+
},
|
|
5853
|
+
"python": {
|
|
5854
|
+
"module": "aws_cdk.interfaces.aws_dataexchange"
|
|
5855
|
+
}
|
|
5856
|
+
}
|
|
5857
|
+
},
|
|
5767
5858
|
"aws-cdk-lib.interfaces.aws_datapipeline": {
|
|
5768
5859
|
"targets": {
|
|
5769
5860
|
"dotnet": {
|
|
@@ -6004,6 +6095,22 @@
|
|
|
6004
6095
|
}
|
|
6005
6096
|
}
|
|
6006
6097
|
},
|
|
6098
|
+
"aws-cdk-lib.interfaces.aws_drs": {
|
|
6099
|
+
"targets": {
|
|
6100
|
+
"dotnet": {
|
|
6101
|
+
"namespace": "Amazon.CDK.Interfaces.DRS"
|
|
6102
|
+
},
|
|
6103
|
+
"go": {
|
|
6104
|
+
"packageName": "interfacesawsdrs"
|
|
6105
|
+
},
|
|
6106
|
+
"java": {
|
|
6107
|
+
"package": "software.amazon.awscdk.interfaces.drs"
|
|
6108
|
+
},
|
|
6109
|
+
"python": {
|
|
6110
|
+
"module": "aws_cdk.interfaces.aws_drs"
|
|
6111
|
+
}
|
|
6112
|
+
}
|
|
6113
|
+
},
|
|
6007
6114
|
"aws-cdk-lib.interfaces.aws_dsql": {
|
|
6008
6115
|
"targets": {
|
|
6009
6116
|
"dotnet": {
|
|
@@ -6836,6 +6943,22 @@
|
|
|
6836
6943
|
}
|
|
6837
6944
|
}
|
|
6838
6945
|
},
|
|
6946
|
+
"aws-cdk-lib.interfaces.aws_iotsecuretunneling": {
|
|
6947
|
+
"targets": {
|
|
6948
|
+
"dotnet": {
|
|
6949
|
+
"namespace": "Amazon.CDK.Interfaces.IoTSecureTunneling"
|
|
6950
|
+
},
|
|
6951
|
+
"go": {
|
|
6952
|
+
"packageName": "interfacesawsiotsecuretunneling"
|
|
6953
|
+
},
|
|
6954
|
+
"java": {
|
|
6955
|
+
"package": "software.amazon.awscdk.interfaces.iotsecuretunneling"
|
|
6956
|
+
},
|
|
6957
|
+
"python": {
|
|
6958
|
+
"module": "aws_cdk.interfaces.aws_iotsecuretunneling"
|
|
6959
|
+
}
|
|
6960
|
+
}
|
|
6961
|
+
},
|
|
6839
6962
|
"aws-cdk-lib.interfaces.aws_iotsitewise": {
|
|
6840
6963
|
"targets": {
|
|
6841
6964
|
"dotnet": {
|
|
@@ -7428,6 +7551,22 @@
|
|
|
7428
7551
|
}
|
|
7429
7552
|
}
|
|
7430
7553
|
},
|
|
7554
|
+
"aws-cdk-lib.interfaces.aws_mgn": {
|
|
7555
|
+
"targets": {
|
|
7556
|
+
"dotnet": {
|
|
7557
|
+
"namespace": "Amazon.CDK.Interfaces.MGN"
|
|
7558
|
+
},
|
|
7559
|
+
"go": {
|
|
7560
|
+
"packageName": "interfacesawsmgn"
|
|
7561
|
+
},
|
|
7562
|
+
"java": {
|
|
7563
|
+
"package": "software.amazon.awscdk.interfaces.mgn"
|
|
7564
|
+
},
|
|
7565
|
+
"python": {
|
|
7566
|
+
"module": "aws_cdk.interfaces.aws_mgn"
|
|
7567
|
+
}
|
|
7568
|
+
}
|
|
7569
|
+
},
|
|
7431
7570
|
"aws-cdk-lib.interfaces.aws_mpa": {
|
|
7432
7571
|
"targets": {
|
|
7433
7572
|
"dotnet": {
|
|
@@ -7700,6 +7839,22 @@
|
|
|
7700
7839
|
}
|
|
7701
7840
|
}
|
|
7702
7841
|
},
|
|
7842
|
+
"aws-cdk-lib.interfaces.aws_opensearch": {
|
|
7843
|
+
"targets": {
|
|
7844
|
+
"dotnet": {
|
|
7845
|
+
"namespace": "Amazon.CDK.Interfaces.OpenSearch"
|
|
7846
|
+
},
|
|
7847
|
+
"go": {
|
|
7848
|
+
"packageName": "interfacesawsopensearch"
|
|
7849
|
+
},
|
|
7850
|
+
"java": {
|
|
7851
|
+
"package": "software.amazon.awscdk.interfaces.opensearch"
|
|
7852
|
+
},
|
|
7853
|
+
"python": {
|
|
7854
|
+
"module": "aws_cdk.interfaces.aws_opensearch"
|
|
7855
|
+
}
|
|
7856
|
+
}
|
|
7857
|
+
},
|
|
7703
7858
|
"aws-cdk-lib.interfaces.aws_opensearchserverless": {
|
|
7704
7859
|
"targets": {
|
|
7705
7860
|
"dotnet": {
|
|
@@ -7956,6 +8111,22 @@
|
|
|
7956
8111
|
}
|
|
7957
8112
|
}
|
|
7958
8113
|
},
|
|
8114
|
+
"aws-cdk-lib.interfaces.aws_pricingplanmanager": {
|
|
8115
|
+
"targets": {
|
|
8116
|
+
"dotnet": {
|
|
8117
|
+
"namespace": "Amazon.CDK.Interfaces.PricingPlanManager"
|
|
8118
|
+
},
|
|
8119
|
+
"go": {
|
|
8120
|
+
"packageName": "interfacesawspricingplanmanager"
|
|
8121
|
+
},
|
|
8122
|
+
"java": {
|
|
8123
|
+
"package": "software.amazon.awscdk.interfaces.pricingplanmanager"
|
|
8124
|
+
},
|
|
8125
|
+
"python": {
|
|
8126
|
+
"module": "aws_cdk.interfaces.aws_pricingplanmanager"
|
|
8127
|
+
}
|
|
8128
|
+
}
|
|
8129
|
+
},
|
|
7959
8130
|
"aws-cdk-lib.interfaces.aws_proton": {
|
|
7960
8131
|
"targets": {
|
|
7961
8132
|
"dotnet": {
|
|
@@ -8612,6 +8783,22 @@
|
|
|
8612
8783
|
}
|
|
8613
8784
|
}
|
|
8614
8785
|
},
|
|
8786
|
+
"aws-cdk-lib.interfaces.aws_serverlessrepo": {
|
|
8787
|
+
"targets": {
|
|
8788
|
+
"dotnet": {
|
|
8789
|
+
"namespace": "Amazon.CDK.Interfaces.ServerlessRepo"
|
|
8790
|
+
},
|
|
8791
|
+
"go": {
|
|
8792
|
+
"packageName": "interfacesawsserverlessrepo"
|
|
8793
|
+
},
|
|
8794
|
+
"java": {
|
|
8795
|
+
"package": "software.amazon.awscdk.interfaces.serverlessrepo"
|
|
8796
|
+
},
|
|
8797
|
+
"python": {
|
|
8798
|
+
"module": "aws_cdk.interfaces.aws_serverlessrepo"
|
|
8799
|
+
}
|
|
8800
|
+
}
|
|
8801
|
+
},
|
|
8615
8802
|
"aws-cdk-lib.interfaces.aws_servicecatalog": {
|
|
8616
8803
|
"targets": {
|
|
8617
8804
|
"dotnet": {
|
|
@@ -8868,22 +9055,6 @@
|
|
|
8868
9055
|
}
|
|
8869
9056
|
}
|
|
8870
9057
|
},
|
|
8871
|
-
"aws-cdk-lib.interfaces.aws_states": {
|
|
8872
|
-
"targets": {
|
|
8873
|
-
"dotnet": {
|
|
8874
|
-
"namespace": "Amazon.CDK.Interfaces.States"
|
|
8875
|
-
},
|
|
8876
|
-
"go": {
|
|
8877
|
-
"packageName": "interfacesawsstates"
|
|
8878
|
-
},
|
|
8879
|
-
"java": {
|
|
8880
|
-
"package": "software.amazon.awscdk.interfaces.states"
|
|
8881
|
-
},
|
|
8882
|
-
"python": {
|
|
8883
|
-
"module": "aws_cdk.interfaces.aws_states"
|
|
8884
|
-
}
|
|
8885
|
-
}
|
|
8886
|
-
},
|
|
8887
9058
|
"aws-cdk-lib.interfaces.aws_stepfunctions": {
|
|
8888
9059
|
"targets": {
|
|
8889
9060
|
"dotnet": {
|
|
@@ -8932,6 +9103,22 @@
|
|
|
8932
9103
|
}
|
|
8933
9104
|
}
|
|
8934
9105
|
},
|
|
9106
|
+
"aws-cdk-lib.interfaces.aws_supportauthz": {
|
|
9107
|
+
"targets": {
|
|
9108
|
+
"dotnet": {
|
|
9109
|
+
"namespace": "Amazon.CDK.Interfaces.SupportAuthZ"
|
|
9110
|
+
},
|
|
9111
|
+
"go": {
|
|
9112
|
+
"packageName": "interfacesawssupportauthz"
|
|
9113
|
+
},
|
|
9114
|
+
"java": {
|
|
9115
|
+
"package": "software.amazon.awscdk.interfaces.supportauthz"
|
|
9116
|
+
},
|
|
9117
|
+
"python": {
|
|
9118
|
+
"module": "aws_cdk.interfaces.aws_supportauthz"
|
|
9119
|
+
}
|
|
9120
|
+
}
|
|
9121
|
+
},
|
|
8935
9122
|
"aws-cdk-lib.interfaces.aws_synthetics": {
|
|
8936
9123
|
"targets": {
|
|
8937
9124
|
"dotnet": {
|
|
@@ -8964,19 +9151,19 @@
|
|
|
8964
9151
|
}
|
|
8965
9152
|
}
|
|
8966
9153
|
},
|
|
8967
|
-
"aws-cdk-lib.interfaces.
|
|
9154
|
+
"aws-cdk-lib.interfaces.aws_textract": {
|
|
8968
9155
|
"targets": {
|
|
8969
9156
|
"dotnet": {
|
|
8970
|
-
"namespace": "Amazon.CDK.Interfaces.
|
|
9157
|
+
"namespace": "Amazon.CDK.Interfaces.Textract"
|
|
8971
9158
|
},
|
|
8972
9159
|
"go": {
|
|
8973
|
-
"packageName": "
|
|
9160
|
+
"packageName": "interfacesawstextract"
|
|
8974
9161
|
},
|
|
8975
9162
|
"java": {
|
|
8976
|
-
"package": "software.amazon.awscdk.interfaces.
|
|
9163
|
+
"package": "software.amazon.awscdk.interfaces.textract"
|
|
8977
9164
|
},
|
|
8978
9165
|
"python": {
|
|
8979
|
-
"module": "aws_cdk.interfaces.
|
|
9166
|
+
"module": "aws_cdk.interfaces.aws_textract"
|
|
8980
9167
|
}
|
|
8981
9168
|
}
|
|
8982
9169
|
},
|
|
@@ -9028,19 +9215,19 @@
|
|
|
9028
9215
|
}
|
|
9029
9216
|
}
|
|
9030
9217
|
},
|
|
9031
|
-
"aws-cdk-lib.interfaces.
|
|
9218
|
+
"aws-cdk-lib.interfaces.aws_translate": {
|
|
9032
9219
|
"targets": {
|
|
9033
9220
|
"dotnet": {
|
|
9034
|
-
"namespace": "Amazon.CDK.Interfaces.
|
|
9221
|
+
"namespace": "Amazon.CDK.Interfaces.Translate"
|
|
9035
9222
|
},
|
|
9036
9223
|
"go": {
|
|
9037
|
-
"packageName": "
|
|
9224
|
+
"packageName": "interfacesawstranslate"
|
|
9038
9225
|
},
|
|
9039
9226
|
"java": {
|
|
9040
|
-
"package": "software.amazon.awscdk.interfaces.
|
|
9227
|
+
"package": "software.amazon.awscdk.interfaces.translate"
|
|
9041
9228
|
},
|
|
9042
9229
|
"python": {
|
|
9043
|
-
"module": "aws_cdk.interfaces.
|
|
9230
|
+
"module": "aws_cdk.interfaces.aws_translate"
|
|
9044
9231
|
}
|
|
9045
9232
|
}
|
|
9046
9233
|
},
|
|
@@ -9172,6 +9359,22 @@
|
|
|
9172
9359
|
}
|
|
9173
9360
|
}
|
|
9174
9361
|
},
|
|
9362
|
+
"aws-cdk-lib.interfaces.aws_wickr": {
|
|
9363
|
+
"targets": {
|
|
9364
|
+
"dotnet": {
|
|
9365
|
+
"namespace": "Amazon.CDK.Interfaces.Wickr"
|
|
9366
|
+
},
|
|
9367
|
+
"go": {
|
|
9368
|
+
"packageName": "interfacesawswickr"
|
|
9369
|
+
},
|
|
9370
|
+
"java": {
|
|
9371
|
+
"package": "software.amazon.awscdk.interfaces.wickr"
|
|
9372
|
+
},
|
|
9373
|
+
"python": {
|
|
9374
|
+
"module": "aws_cdk.interfaces.aws_wickr"
|
|
9375
|
+
}
|
|
9376
|
+
}
|
|
9377
|
+
},
|
|
9175
9378
|
"aws-cdk-lib.interfaces.aws_wisdom": {
|
|
9176
9379
|
"targets": {
|
|
9177
9380
|
"dotnet": {
|
|
@@ -9416,7 +9619,7 @@
|
|
|
9416
9619
|
},
|
|
9417
9620
|
"name": "cdk-preflight",
|
|
9418
9621
|
"readme": {
|
|
9419
|
-
"markdown": "<p align=\"center\">\n <img src=\"https://raw.githubusercontent.com/badmintoncryer/cdk-preflight/main/assets/logo.png\" alt=\"cdk-preflight\" width=\"104\" height=\"104\">\n</p>\n\n<h1 align=\"center\">cdk-preflight</h1>\n\n<p align=\"center\">\n <strong>Catch deploy-time CloudFormation failures at <code>cdk synth</code> time.</strong>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/badmintoncryer/cdk-preflight/actions/workflows/monthly-verify.yml\"><img src=\"https://github.com/badmintoncryer/cdk-preflight/actions/workflows/monthly-verify.yml/badge.svg\" alt=\"monthly real-deploy verification\"></a>\n <a href=\"https://www.npmjs.com/package/cdk-preflight\"><img src=\"https://img.shields.io/npm/v/cdk-preflight.svg\" alt=\"npm version\"></a>\n <a href=\"https://www.npmjs.com/package/cdk-preflight\"><img src=\"https://img.shields.io/npm/dt/cdk-preflight.svg\" alt=\"npm total downloads\"></a>\n <a href=\"docs/rules.md\"><img src=\"https://img.shields.io/badge/rules-3107-blue\" alt=\"3107 bundled rules\"></a>\n</p>\n\nSome CloudFormation constraints are not expressed in resource provider schemas — they live only in documentation, in service API validation, or across multiple properties. Templates that violate them pass `cdk synth`, pass CloudFormation pre-deployment validation, and then fail minutes into a deployment, burning a rollback cycle.\n\ncdk-preflight is a curated [Rego rule pack](docs/rules.md) for exactly those constraints, evaluated with the CloudFormation validation engine that ships inside `aws-cdk-lib` (>= 2.267.0). By default a violation **fails `cdk synth`** — a template that is known to fail at deploy time never leaves your machine.\n\nThe pack aims at **every deploy-time failure that no existing CDK mechanism already catches** — nothing narrower. Every bundled rule is backed by a `fail`/`pass` template pair, and the failure has been reproduced against real AWS. The handful of rules that could not be reproduced are marked `doc-only` and report as **warnings**, as does a rule whose remaining false positives cannot be told from the template (a cross-account Lambda layer the owner may have shared): they show up in the validation report but never fail synth. Rules that the built-in validation engine already covers are deliberately **not** duplicated — a test suite enforces this.\n\n> **Requires `aws-cdk-lib` >= 2.267.0** (released 2026-08-27) — the first release that bundles\n> the CloudFormation validation engine. On older versions the rules cannot run at all.\n\n## Quick start\n\n```bash\nnpm i -D cdk-preflight\nnpx cdkpf init # inserts Preflight.apply(app) into your CDK app\n # (`npx cdkpf init` is the same command, shorter)\n```\n\nor add one line yourself:\n\n```ts\nimport { Preflight } from 'cdk-preflight';\n\nconst app = new App();\nPreflight.apply(app);\n```\n\nOn violation, `cdk synth` fails with one error per finding, including the construct trace:\n\n```text\nERROR idle_timeout.timeout_seconds is 5000 but must be between 1 and 4000 seconds (cdk-preflight)\n MyStack/Alb/Resource (Alb16C2F182) aws-cdk-lib.aws_elasticloadbalancingv2.CfnLoadBalancer\n\nSynthesis finished with errors\n```\n\n## What it catches\n\nFour ordinary-looking snippets. All of them pass `cdk synth` and CloudFormation\npre-deployment validation, and all of them fail minutes into a deployment:\n\n```ts\n// 1) pf-iam-inline-policy-size — enumerate buckets, grant each one, blow past 10,240 chars\n// \"Maximum policy size of 10240 bytes exceeded for role IngestRole\"\n// (via role.addToPolicy the CDK auto-splits into managed policies instead,\n// and you hit the 6,144-char limit as pf-iam-managed-policy-size)\nnew iam.Policy(this, 'IngestPolicy', {\n roles: [role],\n statements: [new iam.PolicyStatement({\n actions: ['s3:GetObject', 's3:ListBucket'],\n resources: Array.from({ length: 200 },\n (_, i) => `arn:aws:s3:::data-lake-landing-zone-${i}/year=*/month=*/*`),\n })],\n});\n\n// 2) pf-lambda-env-size — a config blob in the environment, over the 4KB total\n// \"Lambda was unable to configure your environment variables because the\n// environment variables you have provided exceeded the 4KB limit\"\nnew lambda.Function(this, 'Fn', {\n runtime: lambda.Runtime.NODEJS_22_X,\n handler: 'index.handler',\n code: lambda.Code.fromInline('exports.handler = async () => {};'),\n environment: { FEATURE_FLAGS: JSON.stringify(bigFeatureFlagMap) },\n});\n\n// 3) pf-sfn-asl-missing-state (+ pf-sfn-asl-unreachable-state) — a typo in a state name\n// \"Invalid State Machine Definition: 'MISSING_TRANSITION_TARGET: ...'\"\nnew sfn.StateMachine(this, 'Pipeline', {\n definitionBody: sfn.DefinitionBody.fromString(JSON.stringify({\n StartAt: 'Validate',\n States: {\n Validate: { Type: 'Pass', Next: 'Transform' },\n Trasform: { Type: 'Pass', End: true }, // typo: Transform\n },\n })),\n});\n\n// 4) pf-logs-filter-pattern-bracket — a filter pattern opened with '[' and never closed\n// \"If a filter pattern starts with '[' it must end with ']'\"\nnew logs.MetricFilter(this, 'ErrorFilter', {\n logGroup,\n metricNamespace: 'Pipeline',\n metricName: 'Errors',\n filterPattern: logs.FilterPattern.literal('[time, level=ERROR, msg'),\n});\n```\n\nNone of these are type errors, so the L2 constructs accept them; none of them are\nexpressible in a resource schema, so CloudFormation accepts the template. With\n`Preflight.apply(app)` in place they fail `cdk synth` instead.\n\n## Observe-only mode\n\nTo roll the rules out gradually, start with `enforce: false`: findings then surface as synth **warnings** through the CDK built-in validator, with construct traces and per-finding acknowledgement:\n\n```ts\nPreflight.apply(app, { enforce: false });\n```\n\n```text\nWARNING idle_timeout.timeout_seconds is 5000 but must be between 1 and 4000 seconds (CloudFormation Validate)\n MyStack/Alb (Alb) aws-cdk-lib.aws_elasticloadbalancingv2.CfnLoadBalancer\n Acknowledge with 'CloudFormation-Validate::pf-elbv2-lb-idle-timeout-range'\n```\n\n> **Known limitation with stages.** The AWS CDK CLI drops validation findings for stacks nested in a `Stage`\n> before printing them, so in observe-only mode those findings appear **only** in `cdk.out/validation-report.json`\n> and never on the console. Enforce mode is not affected: cdk-preflight reports such findings itself and fails\n> synthesis. This is a CLI-side bug (present since aws-cdk 2.1128.1), not a rule evaluation problem.\n\n> **If the rules cannot run, the build stops.** When the evaluation engine fails on a template (a rule pack that\n> does not compile, an engine bug), enforce mode reports it as a violation named `pf-engine-error` and fails\n> synthesis for that stack instead of passing green with no rule having run. The other stacks keep their rules.\n> `pf-engine-error` is not a bundled rule and cannot be `exclude`d; `enforce: false` unblocks the build if you\n> need one.\n\n| Option | Default | Effect |\n|---|---|---|\n| `enforce` | `true` | Violations of bundled rules fail synthesis; set to `false` to only warn |\n| `strict` | `false` | With `enforce`: also fail on error-class findings (`ERROR`/`FATAL`, e.g. `F3034`) of the built-in validation engine itself, which the CDK currently downgrades to warnings |\n| `exclude` | `[]` | Rule ids to disable |\n| `includeUpstreamPending` | `true` | Include rules already proposed to the upstream engine but not yet merged |\n\nTo opt out of a single rule everywhere, pass its id in `exclude`. To suppress a\nsingle *finding* on one construct, acknowledge it — this works in both modes, the\nid prefix just differs (`cdk-preflight::` when enforcing, `CloudFormation-Validate::`\nin observe-only, as printed in the warning text):\n\n```ts\ncdk.Validations.of(errorFilter).acknowledge({\n id: 'cdk-preflight::pf-logs-filter-pattern-bracket',\n reason: 'log group is written by a legacy producer; pattern is fixed upstream',\n});\n```\n\n## Bundled rules\n\nSee [docs/rules.md](docs/rules.md) for the generated rule table.\n\n<!-- supported-resources:start -->\n<details>\n<summary><b>405 resource types across 74 services</b> — click to expand</summary>\n\nResource names are relative to `AWS::<Service>::`; the number in parentheses is how many rules target that type.\n\n| Service | Resource types |\n|---|---|\n| **(any resource type)** | `*` (14) |\n| **ApiGateway** | `ApiKey` (1), `Authorizer` (5), `Deployment` (1), `DocumentationPart` (1), `DomainName` (4), `GatewayResponse` (1), `Method` (12), `Model` (3), `Resource` (1), `RestApi` (4), `Stage` (9), `UsagePlan` (5), `VpcLink` (1) |\n| **ApiGatewayV2** | `Api` (5), `Authorizer` (11), `DomainName` (3), `Integration` (15), `IntegrationResponse` (1), `Model` (2), `Route` (6), `RouteResponse` (2), `Stage` (4), `VpcLink` (1) |\n| **ApplicationAutoScaling** | `ScalableTarget` (19), `ScalingPolicy` (30) |\n| **AppSync** | `Api` (7), `ApiCache` (4), `ApiKey` (2), `ChannelNamespace` (5), `DataSource` (15), `DomainName` (1), `FunctionConfiguration` (24), `GraphQLApi` (16), `GraphQLSchema` (12), `Resolver` (32), `SourceApiAssociation` (3) |\n| **APS** | `AnomalyDetector` (9), `ResourcePolicy` (5), `RuleGroupsNamespace` (10), `Workspace` (12) |\n| **Athena** | `DataCatalog` (6), `WorkGroup` (8) |\n| **AutoScaling** | `AutoScalingGroup` (38), `LifecycleHook` (8), `ScalingPolicy` (41), `ScheduledAction` (13), `WarmPool` (4) |\n| **Backup** | `BackupPlan` (12), `BackupSelection` (4), `BackupVault` (3), `Framework` (3), `LogicallyAirGappedBackupVault` (2), `ReportPlan` (2), `RestoreTestingPlan` (5), `RestoreTestingSelection` (3) |\n| **Batch** | `ComputeEnvironment` (40), `ConsumableResource` (2), `JobDefinition` (109), `JobQueue` (18), `SchedulingPolicy` (8), `ServiceEnvironment` (6) |\n| **Bedrock** | `ApplicationInferenceProfile` (2), `AutomatedReasoningPolicy` (3), `Blueprint` (3), `DataAutomationProject` (8), `DataSource` (12), `Flow` (14), `Guardrail` (19), `IntelligentPromptRouter` (5), `KnowledgeBase` (18), `Prompt` (4) |\n| **BedrockAgentCore** | `ApiKeyCredentialProvider` (1), `BrowserCustom` (1), `CodeInterpreterCustom` (1), `ConfigurationBundle` (3), `Dataset` (3), `Evaluator` (4), `Gateway` (5), `GatewayRule` (3), `GatewayTarget` (9), `Harness` (2), `HarnessEndpoint` (2), `Memory` (6), `OAuth2CredentialProvider` (3), `OnlineEvaluationConfig` (3), `PaymentCredentialProvider` (1), `PaymentManager` (1), `Policy` (3), `ResourcePolicy` (1), `Runtime` (8), `RuntimeEndpoint` (1) |\n| **CertificateManager** | `Certificate` (4) |\n| **CloudFormation** | `GuardHook` (1), `Stack` (2), `StackSet` (6) |\n| **CloudFront** | `AnycastIpList` (1), `CachePolicy` (7), `ContinuousDeploymentPolicy` (5), `Distribution` (55), `Function` (4), `KeyGroup` (1), `KeyValueStore` (2), `OriginRequestPolicy` (5), `PublicKey` (1), `RealtimeLogConfig` (3), `ResponseHeadersPolicy` (8), `VpcOrigin` (3) |\n| **CloudTrail** | `EventDataStore` (1), `Trail` (19) |\n| **CloudWatch** | `Alarm` (21), `AnomalyDetector` (6), `CompositeAlarm` (6), `Dashboard` (14), `InsightRule` (7), `MetricStream` (6) |\n| **CodeBuild** | `Project` (37), `ReportGroup` (2), `SourceCredential` (4) |\n| **CodeCommit** | `Repository` (11) |\n| **CodeDeploy** | `Application` (7), `DeploymentConfig` (12), `DeploymentGroup` (23) |\n| **CodePipeline** | `CustomActionType` (3), `Pipeline` (25), `Webhook` (2) |\n| **Cognito** | `IdentityPool` (3), `IdentityPoolRoleAttachment` (7), `LogDeliveryConfiguration` (3), `ManagedLoginBranding` (2), `UserPool` (52), `UserPoolClient` (21), `UserPoolDomain` (7), `UserPoolGroup` (1), `UserPoolIdentityProvider` (11), `UserPoolResourceServer` (4), `UserPoolRiskConfigurationAttachment` (6), `UserPoolUICustomizationAttachment` (2) |\n| **Config** | `ConfigRule` (6), `ConfigurationAggregator` (2), `ConfigurationRecorder` (7), `ConformancePack` (1), `RemediationConfiguration` (2) |\n| **DocDB** | `DBCluster` (14), `DBInstance` (1), `DBSubnetGroup` (2), `EventSubscription` (1) |\n| **DocDBElastic** | `Cluster` (7) |\n| **DynamoDB** | `GlobalTable` (26), `Table` (28) |\n| **EC2** | `ClientVpnAuthorizationRule` (1), `ClientVpnEndpoint` (6), `DHCPOptions` (2), `EIPAssociation` (1), `FlowLog` (4), `Instance` (10), `KeyPair` (1), `LaunchTemplate` (12), `NatGateway` (2), `NetworkAclEntry` (1), `NetworkInterface` (2), `PlacementGroup` (3), `PrefixList` (3), `Route` (1), `SecurityGroup` (7), `SecurityGroupEgress` (5), `SecurityGroupIngress` (5), `Subnet` (14), `TrafficMirrorTarget` (1), `TransitGateway` (2), `TransitGatewayRoute` (1), `Volume` (6), `VPC` (2), `VPCCidrBlock` (1), `VPCEndpoint` (4), `VPCGatewayAttachment` (1), `VPNConnection` (5) |\n| **ECR** | `PullThroughCacheRule` (3), `RegistryScanningConfiguration` (1), `ReplicationConfiguration` (1), `Repository` (7), `RepositoryCreationTemplate` (8), `SigningConfiguration` (1) |\n| **ECS** | `CapacityProvider` (3), `Cluster` (5), `Service` (37), `TaskDefinition` (64), `TaskSet` (2) |\n| **EFS** | `AccessPoint` (1), `FileSystem` (7), `MountTarget` (4) |\n| **EKS** | `AccessEntry` (14), `Addon` (5), `Cluster` (21), `FargateProfile` (5), `IdentityProviderConfig` (3), `Nodegroup` (21), `PodIdentityAssociation` (5) |\n| **ElastiCache** | `CacheCluster` (9), `ReplicationGroup` (14), `User` (2), `UserGroup` (1) |\n| **ElasticLoadBalancingV2** | `Listener` (57), `ListenerCertificate` (2), `ListenerRule` (37), `LoadBalancer` (37), `TargetGroup` (58), `TrustStore` (1), `TrustStoreRevocation` (1) |\n| **Events** | `ApiDestination` (1), `Archive` (5), `Connection` (1), `Endpoint` (2), `EventBus` (2), `Rule` (23) |\n| **EventSchemas** | `Discoverer` (1), `Registry` (1), `RegistryPolicy` (1), `Schema` (1) |\n| **GlobalAccelerator** | `Accelerator` (1), `EndpointGroup` (5), `Listener` (2) |\n| **Glue** | `Classifier` (6), `Connection` (5), `Crawler` (11), `CustomEntityType` (1), `Database` (1), `DataQualityRuleset` (1), `Job` (15), `MLTransform` (4), `Partition` (1), `Schema` (3), `SecurityConfiguration` (1), `Table` (1), `Trigger` (10), `UserDefinedFunction` (2), `Workflow` (1) |\n| **Grafana** | `Workspace` (7) |\n| **IAM** | `Group` (23), `GroupPolicy` (1), `InstanceProfile` (2), `ManagedPolicy` (31), `OIDCProvider` (2), `Policy` (29), `Role` (40), `RolePolicy` (1), `ServiceLinkedRole` (1), `User` (24), `UserPolicy` (1) |\n| **IoT** | `Authorizer` (3), `Certificate` (1), `CertificateProvider` (1), `Command` (1), `DomainConfiguration` (3), `JobTemplate` (3), `MitigationAction` (1), `Policy` (4), `PolicyPrincipalAttachment` (1), `ProvisioningTemplate` (3), `RoleAlias` (1), `ScheduledAudit` (1), `Thing` (1), `ThingGroup` (2), `TopicRule` (5), `TopicRuleDestination` (2) |\n| **Kinesis** | `ResourcePolicy` (4), `Stream` (5), `StreamConsumer` (2) |\n| **KinesisAnalyticsV2** | `Application` (20), `ApplicationCloudWatchLoggingOption` (1), `ApplicationOutput` (1), `ApplicationReferenceDataSource` (1) |\n| **KinesisFirehose** | `DeliveryStream` (68) |\n| **KMS** | `Alias` (2), `Key` (12), `ReplicaKey` (4) |\n| **Lambda** | `Alias` (7), `CodeSigningConfig` (1), `EventInvokeConfig` (5), `EventSourceMapping` (54), `Function` (46), `LayerVersion` (8), `LayerVersionPermission` (3), `Permission` (8), `Url` (8), `Version` (1) |\n| **Logs** | `AccountPolicy` (6), `DeliveryDestination` (3), `Destination` (1), `LogAnomalyDetector` (2), `LogGroup` (10), `MetricFilter` (7), `QueryDefinition` (1), `ResourcePolicy` (1), `SubscriptionFilter` (6), `Transformer` (3) |\n| **MemoryDB** | `Cluster` (8), `User` (1) |\n| **MSK** | `BatchScramSecret` (2), `Cluster` (31), `ClusterPolicy` (1), `Configuration` (4), `Replicator` (10), `ServerlessCluster` (4) |\n| **Neptune** | `DBCluster` (11), `DBClusterParameterGroup` (1), `DBInstance` (3), `DBSubnetGroup` (1), `GlobalCluster` (1) |\n| **NeptuneGraph** | `Graph` (2), `PrivateGraphEndpoint` (1) |\n| **NetworkFirewall** | `FirewallPolicy` (18), `RuleGroup` (34), `TLSInspectionConfiguration` (7) |\n| **OpenSearchServerless** | `AccessPolicy` (7), `Collection` (2), `CollectionGroup` (3), `LifecyclePolicy` (4), `SecurityConfig` (5), `SecurityPolicy` (14) |\n| **OpenSearchService** | `Domain` (65) |\n| **Pipes** | `Pipe` (9) |\n| **RDS** | `DBCluster` (19), `DBInstance` (33), `DBParameterGroup` (2), `DBProxy` (4), `DBProxyTargetGroup` (2), `DBShardGroup` (1), `DBSubnetGroup` (3), `EventSubscription` (3), `OptionGroup` (1) |\n| **Redshift** | `Cluster` (20), `EventSubscription` (1), `ScheduledAction` (2) |\n| **RedshiftServerless** | `Namespace` (5), `Workgroup` (6) |\n| **Route53** | `CidrCollection` (11), `DNSSEC` (3), `HealthCheck` (30), `HostedZone` (14), `KeySigningKey` (9), `RecordSet` (75), `RecordSetGroup` (76) |\n| **Route53Profiles** | `ProfileAssociation` (1), `ProfileResourceAssociation` (6) |\n| **Route53Resolver** | `FirewallDomainList` (3), `FirewallRuleGroup` (18), `FirewallRuleGroupAssociation` (4), `ResolverDNSSECConfig` (1), `ResolverEndpoint` (18), `ResolverQueryLoggingConfig` (1), `ResolverQueryLoggingConfigAssociation` (1), `ResolverRule` (15), `ResolverRuleAssociation` (1) |\n| **S3** | `AccessPoint` (1), `Bucket` (54), `BucketPolicy` (4), `StorageLens` (5), `StorageLensGroup` (3) |\n| **S3Express** | `AccessPoint` (3), `DirectoryBucket` (11) |\n| **Scheduler** | `Schedule` (10), `ScheduleGroup` (1) |\n| **SecretsManager** | `RotationSchedule` (4), `Secret` (5), `SecretTargetAttachment` (1) |\n| **ServiceDiscovery** | `HttpNamespace` (3), `Instance` (19), `PrivateDnsNamespace` (4), `PublicDnsNamespace` (4), `Service` (13) |\n| **SES** | `ConfigurationSetEventDestination` (8), `ContactList` (1), `EmailIdentity` (6), `ReceiptRule` (6), `ReceiptRuleSet` (1), `Template` (1) |\n| **SNS** | `Subscription` (9), `Topic` (12), `TopicPolicy` (1) |\n| **SQS** | `Queue` (9), `QueuePolicy` (1) |\n| **SSM** | `Association` (3), `Document` (3), `MaintenanceWindow` (2), `MaintenanceWindowTarget` (1), `MaintenanceWindowTask` (1), `Parameter` (5) |\n| **StepFunctions** | `Activity` (3), `StateMachine` (26) |\n| **Synthetics** | `Canary` (16) |\n| **VerifiedPermissions** | `IdentitySource` (3), `Policy` (26), `PolicyStore` (23), `PolicyStoreAlias` (1), `PolicyTemplate` (29) |\n| **WAFv2** | `IPSet` (3), `LoggingConfiguration` (3), `RegexPatternSet` (3), `RuleGroup` (18), `WebACL` (23), `WebACLAssociation` (2) |\n| **XRay** | `Group` (1), `ResourcePolicy` (3), `SamplingRule` (6) |\n\n</details>\n<!-- supported-resources:end -->\n\nHighlights:\n\n- **ELBv2**: `idle_timeout` / `deregistration_delay` / `slow_start` attribute ranges (stringly-typed Key/Value attributes are invisible to schema validation)\n- **IAM**: managed (6,144 chars) and inline (role/group/user) policy document size limits\n- **CloudFront**: `MinTTL <= DefaultTTL <= MaxTTL` ordering, ACM certificates must live in `us-east-1`\n- **Step Functions**: `Next`/`Default`/`Choices` must reference defined states (a dangling `StartAt` is already caught by the engine's built-in `E3601`)\n- **EC2**: security group TCP/UDP port ranges and `FromPort <= ToPort`\n\n## For AI agents\n\nTo add cdk-preflight to a CDK app:\n\n1. `npm i -D cdk-preflight`\n2. `npx cdk-preflight init` — or the shorter alias `npx cdkpf init` (finds the entry point via `cdk.json` and inserts `Preflight.apply(app)`; use `--dry-run` to preview)\n3. Run `cdk synth`. Violations fail the synth with a validation report; each finding carries a rule id, the actual value, and a suggested fix\n4. To fix a finding, prefer correcting the resource. To opt out instead: `exclude: ['<rule-id>']` disables one rule, `enforce: false` switches to warn-only reporting\n\nThe machine-readable findings are written to `cdk.out/validation-report.json` when synthesizing with `-c @aws-cdk/core:validationReportJson=true`.\n\n### Report missed deploy errors\n\ncdk-preflight only knows the failure modes it has benched. When a deploy fails on a constraint the pack should have caught, that report is how new rules get added — but at that moment cdk-preflight is out of the loop (it passed the synth), so the instruction has to already sit in your agent's context. Paste this into your repository's `AGENTS.md` (or `CLAUDE.md`):\n\n```markdown\n## cdk-preflight: report missed deploy errors\n\nIf `cdk deploy` fails even though `cdk synth` (with cdk-preflight enabled) passed,\nand the failure is a service-side validation rejection — CREATE_FAILED/UPDATE_FAILED\nwith a 400-class message such as \"Invalid request provided: ...\" — cdk-preflight is\nmissing a rule. Report it:\n\n1. Qualify first. NOT reportable: AccessDenied / permissions, service quotas,\n throttling, name conflicts with existing resources, stabilization timeouts.\n2. Redact account-specific data (account IDs -> 123456789012, real ARNs/domains\n -> placeholders).\n3. Search existing issues: https://github.com/badmintoncryer/cdk-preflight/issues\n4. With your user's approval, open a \"Missed deploy error\" issue with the verbatim\n error message, the resource type, a minimal template snippet, and your\n aws-cdk-lib / cdk-preflight versions.\n```\n\n## Scope and rule lifecycle\n\nA constraint belongs in the pack when violating it makes a real deployment fail *and* no layer that sees the same synthesized template already blocks it. There is no further \"is this worth a rule\" question — if the gap is real, it gets a rule.\n\nCDK L2 construct validation is deliberately **not** one of those layers. `CfnXxx` usage, escape hatches, `addPropertyOverride`, `cloudformation-include` and migrated templates all bypass L2, so an L2 guard covering the same mistake neither disqualifies a rule nor retires one.\n\nThat makes growth the normal state, and it has a consequence worth knowing before you upgrade: **new rules land in minor releases, so a minor upgrade can newly fail a `cdk synth` that passed yesterday.** That is intended, not a regression. If you need a frozen rule set, pin the version; to drop a single rule, `exclude: ['<rule-id>']`; to see everything without failing the build, `enforce: false`.\n\nRules move the other way too. Once the validation engine bundled in `aws-cdk-lib` (or CloudFormation's own pre-deploy validation) starts blocking a constraint, the rule is deleted rather than kept as a duplicate — staying on an older `aws-cdk-lib` and an older cdk-preflight keeps the old behavior.\n\n## How it works\n\n`Preflight.apply()` evaluates the rules with the [cloudformation-validate](https://github.com/aws-cloudformation/cloudformation-validate) Rust/WASM engine that ships inside `aws-cdk-lib` — no extra binaries, no network access at synth time. In the default enforce mode the engine is invoked through a dedicated CDK validation plugin so that violations fail synthesis; with `enforce: false` the rules are instead injected into the CDK built-in `CloudFormationValidatePlugin` and reported as warnings.\n\nConstraints that *can* be expressed in schemas or generic engine rules also make good upstream PRs to that engine, but nothing here waits on one — the upstream release cycle is deliberately slower than this pack's. Each rule's `meta.yaml` tracks its upstream status so that retirement stays bookkeeping.\n\n## Requirements\n\n- `aws-cdk-lib` >= 2.267.0, released 2026-08-27 (the first release that bundles the built-in CloudFormation validator). This is a recent release — an existing CDK app may need an upgrade before cdk-preflight can run.\n\n## Contributing\n\nRule authoring, the verification gates (including real-deploy reproduction), and the test layout are documented in [AGENTS.md](AGENTS.md) — written for AI coding agents and humans alike.\n\n## License\n\nApache-2.0\n"
|
|
9622
|
+
"markdown": "<p align=\"center\">\n <img src=\"https://raw.githubusercontent.com/badmintoncryer/cdk-preflight/main/assets/logo.png\" alt=\"cdk-preflight\" width=\"104\" height=\"104\">\n</p>\n\n<h1 align=\"center\">cdk-preflight</h1>\n\n<p align=\"center\">\n <strong>Catch deploy-time CloudFormation failures at <code>cdk synth</code> time.</strong>\n</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/badmintoncryer/cdk-preflight/actions/workflows/monthly-verify.yml\"><img src=\"https://github.com/badmintoncryer/cdk-preflight/actions/workflows/monthly-verify.yml/badge.svg\" alt=\"monthly real-deploy verification\"></a>\n <a href=\"https://www.npmjs.com/package/cdk-preflight\"><img src=\"https://img.shields.io/npm/v/cdk-preflight.svg\" alt=\"npm version\"></a>\n <a href=\"https://www.npmjs.com/package/cdk-preflight\"><img src=\"https://img.shields.io/npm/dt/cdk-preflight.svg\" alt=\"npm total downloads\"></a>\n <a href=\"docs/rules.md\"><img src=\"https://img.shields.io/badge/rules-3107-blue\" alt=\"3107 bundled rules\"></a>\n</p>\n\nSome CloudFormation constraints are not expressed in resource provider schemas — they live only in documentation, in service API validation, or across multiple properties. Templates that violate them pass `cdk synth`, pass CloudFormation pre-deployment validation, and then fail minutes into a deployment, burning a rollback cycle.\n\ncdk-preflight is a curated [Rego rule pack](docs/rules.md) for exactly those constraints, evaluated with the CloudFormation validation engine that ships inside `aws-cdk-lib` (>= 2.267.0). By default a violation **fails `cdk synth`** — a template that is known to fail at deploy time never leaves your machine.\n\nThe pack aims at **every deploy-time failure that no existing CDK mechanism already catches** — nothing narrower. Every bundled rule is backed by a `fail`/`pass` template pair, and the failure has been reproduced against real AWS. The handful of rules that could not be reproduced are marked `doc-only` and report as **warnings**, as does a rule whose remaining false positives cannot be told from the template (a cross-account Lambda layer the owner may have shared): they show up in the validation report but never fail synth. Rules that the built-in validation engine already covers are deliberately **not** duplicated — a test suite enforces this, and a rule the engine catches up with later is skipped on engines that cover it (see [Scope and rule lifecycle](#scope-and-rule-lifecycle)).\n\n> **Requires `aws-cdk-lib` >= 2.267.0** (released 2026-08-27) — the first release that bundles\n> the CloudFormation validation engine. On older versions the rules cannot run at all.\n\n## Quick start\n\n```bash\nnpm i -D cdk-preflight\nnpx cdkpf init # inserts Preflight.apply(app) into your CDK app\n # (`npx cdkpf init` is the same command, shorter)\n```\n\nor add one line yourself:\n\n```ts\nimport { Preflight } from 'cdk-preflight';\n\nconst app = new App();\nPreflight.apply(app);\n```\n\nOn violation, `cdk synth` fails with one error per finding, including the construct trace:\n\n```text\nERROR idle_timeout.timeout_seconds is 5000 but must be between 1 and 4000 seconds (cdk-preflight)\n MyStack/Alb/Resource (Alb16C2F182) aws-cdk-lib.aws_elasticloadbalancingv2.CfnLoadBalancer\n\nSynthesis finished with errors\n```\n\n## What it catches\n\nFour ordinary-looking snippets. All of them pass `cdk synth` and CloudFormation\npre-deployment validation, and all of them fail minutes into a deployment:\n\n```ts\n// 1) pf-iam-inline-policy-size — enumerate buckets, grant each one, blow past 10,240 chars\n// \"Maximum policy size of 10240 bytes exceeded for role IngestRole\"\n// (via role.addToPolicy the CDK auto-splits into managed policies instead,\n// and you hit the 6,144-char limit as pf-iam-managed-policy-size)\nnew iam.Policy(this, 'IngestPolicy', {\n roles: [role],\n statements: [new iam.PolicyStatement({\n actions: ['s3:GetObject', 's3:ListBucket'],\n resources: Array.from({ length: 200 },\n (_, i) => `arn:aws:s3:::data-lake-landing-zone-${i}/year=*/month=*/*`),\n })],\n});\n\n// 2) pf-lambda-env-size — a config blob in the environment, over the 4KB total\n// \"Lambda was unable to configure your environment variables because the\n// environment variables you have provided exceeded the 4KB limit\"\nnew lambda.Function(this, 'Fn', {\n runtime: lambda.Runtime.NODEJS_22_X,\n handler: 'index.handler',\n code: lambda.Code.fromInline('exports.handler = async () => {};'),\n environment: { FEATURE_FLAGS: JSON.stringify(bigFeatureFlagMap) },\n});\n\n// 3) pf-sfn-asl-missing-state (+ pf-sfn-asl-unreachable-state) — a typo in a state name\n// \"Invalid State Machine Definition: 'MISSING_TRANSITION_TARGET: ...'\"\nnew sfn.StateMachine(this, 'Pipeline', {\n definitionBody: sfn.DefinitionBody.fromString(JSON.stringify({\n StartAt: 'Validate',\n States: {\n Validate: { Type: 'Pass', Next: 'Transform' },\n Trasform: { Type: 'Pass', End: true }, // typo: Transform\n },\n })),\n});\n\n// 4) pf-logs-filter-pattern-bracket — a filter pattern opened with '[' and never closed\n// \"If a filter pattern starts with '[' it must end with ']'\"\nnew logs.MetricFilter(this, 'ErrorFilter', {\n logGroup,\n metricNamespace: 'Pipeline',\n metricName: 'Errors',\n filterPattern: logs.FilterPattern.literal('[time, level=ERROR, msg'),\n});\n```\n\nNone of these are type errors, so the L2 constructs accept them; none of them are\nexpressible in a resource schema, so CloudFormation accepts the template. With\n`Preflight.apply(app)` in place they fail `cdk synth` instead.\n\n## Observe-only mode\n\nTo roll the rules out gradually, start with `enforce: false`: findings then surface as synth **warnings** through the CDK built-in validator, with construct traces and per-finding acknowledgement:\n\n```ts\nPreflight.apply(app, { enforce: false });\n```\n\n```text\nWARNING idle_timeout.timeout_seconds is 5000 but must be between 1 and 4000 seconds (CloudFormation Validate)\n MyStack/Alb (Alb) aws-cdk-lib.aws_elasticloadbalancingv2.CfnLoadBalancer\n Acknowledge with 'CloudFormation-Validate::pf-elbv2-lb-idle-timeout-range'\n```\n\n> **Known limitation with stages.** The AWS CDK CLI drops validation findings for stacks nested in a `Stage`\n> before printing them, so in observe-only mode those findings appear **only** in `cdk.out/validation-report.json`\n> and never on the console. Enforce mode is not affected: cdk-preflight reports such findings itself and fails\n> synthesis. This is a CLI-side bug (present since aws-cdk 2.1128.1), not a rule evaluation problem.\n\n> **If the rules cannot run, the build stops.** When the evaluation engine fails on a template (a rule pack that\n> does not compile, an engine bug), enforce mode reports it as a violation named `pf-engine-error` and fails\n> synthesis for that stack instead of passing green with no rule having run. The other stacks keep their rules.\n> `pf-engine-error` is not a bundled rule and cannot be `exclude`d; `enforce: false` unblocks the build if you\n> need one.\n\n| Option | Default | Effect |\n|---|---|---|\n| `enforce` | `true` | Violations of bundled rules fail synthesis; set to `false` to only warn |\n| `strict` | `false` | With `enforce`: also fail on error-class findings (`ERROR`/`FATAL`, e.g. `F3034`) of the built-in validation engine itself, which the CDK currently downgrades to warnings |\n| `exclude` | `[]` | Rule ids to disable |\n| `includeUpstreamPending` | `true` | Include rules already proposed to the upstream engine but not yet merged |\n\nTo opt out of a single rule everywhere, pass its id in `exclude`. To suppress a\nsingle *finding* on one construct, acknowledge it — this works in both modes, the\nid prefix just differs (`cdk-preflight::` when enforcing, `CloudFormation-Validate::`\nin observe-only, as printed in the warning text):\n\n```ts\ncdk.Validations.of(errorFilter).acknowledge({\n id: 'cdk-preflight::pf-logs-filter-pattern-bracket',\n reason: 'log group is written by a legacy producer; pattern is fixed upstream',\n});\n```\n\n## Bundled rules\n\nSee [docs/rules.md](docs/rules.md) for the generated rule table.\n\n<!-- supported-resources:start -->\n<details>\n<summary><b>405 resource types across 74 services</b> — click to expand</summary>\n\nResource names are relative to `AWS::<Service>::`; the number in parentheses is how many rules target that type.\n\n| Service | Resource types |\n|---|---|\n| **(any resource type)** | `*` (14) |\n| **ApiGateway** | `ApiKey` (1), `Authorizer` (5), `Deployment` (1), `DocumentationPart` (1), `DomainName` (4), `GatewayResponse` (1), `Method` (12), `Model` (3), `Resource` (1), `RestApi` (4), `Stage` (9), `UsagePlan` (5), `VpcLink` (1) |\n| **ApiGatewayV2** | `Api` (5), `Authorizer` (11), `DomainName` (3), `Integration` (15), `IntegrationResponse` (1), `Model` (2), `Route` (6), `RouteResponse` (2), `Stage` (4), `VpcLink` (1) |\n| **ApplicationAutoScaling** | `ScalableTarget` (19), `ScalingPolicy` (30) |\n| **AppSync** | `Api` (7), `ApiCache` (4), `ApiKey` (2), `ChannelNamespace` (5), `DataSource` (15), `DomainName` (1), `FunctionConfiguration` (24), `GraphQLApi` (16), `GraphQLSchema` (12), `Resolver` (32), `SourceApiAssociation` (3) |\n| **APS** | `AnomalyDetector` (9), `ResourcePolicy` (5), `RuleGroupsNamespace` (10), `Workspace` (12) |\n| **Athena** | `DataCatalog` (6), `WorkGroup` (8) |\n| **AutoScaling** | `AutoScalingGroup` (38), `LifecycleHook` (8), `ScalingPolicy` (41), `ScheduledAction` (13), `WarmPool` (4) |\n| **Backup** | `BackupPlan` (12), `BackupSelection` (4), `BackupVault` (3), `Framework` (3), `LogicallyAirGappedBackupVault` (2), `ReportPlan` (2), `RestoreTestingPlan` (5), `RestoreTestingSelection` (3) |\n| **Batch** | `ComputeEnvironment` (40), `ConsumableResource` (2), `JobDefinition` (109), `JobQueue` (18), `SchedulingPolicy` (8), `ServiceEnvironment` (6) |\n| **Bedrock** | `ApplicationInferenceProfile` (2), `AutomatedReasoningPolicy` (3), `Blueprint` (3), `DataAutomationProject` (8), `DataSource` (12), `Flow` (14), `Guardrail` (19), `IntelligentPromptRouter` (5), `KnowledgeBase` (18), `Prompt` (4) |\n| **BedrockAgentCore** | `ApiKeyCredentialProvider` (1), `BrowserCustom` (1), `CodeInterpreterCustom` (1), `ConfigurationBundle` (3), `Dataset` (3), `Evaluator` (4), `Gateway` (5), `GatewayRule` (3), `GatewayTarget` (9), `Harness` (2), `HarnessEndpoint` (2), `Memory` (6), `OAuth2CredentialProvider` (3), `OnlineEvaluationConfig` (3), `PaymentCredentialProvider` (1), `PaymentManager` (1), `Policy` (3), `ResourcePolicy` (1), `Runtime` (8), `RuntimeEndpoint` (1) |\n| **CertificateManager** | `Certificate` (4) |\n| **CloudFormation** | `GuardHook` (1), `Stack` (2), `StackSet` (6) |\n| **CloudFront** | `AnycastIpList` (1), `CachePolicy` (7), `ContinuousDeploymentPolicy` (5), `Distribution` (55), `Function` (4), `KeyGroup` (1), `KeyValueStore` (2), `OriginRequestPolicy` (5), `PublicKey` (1), `RealtimeLogConfig` (3), `ResponseHeadersPolicy` (8), `VpcOrigin` (3) |\n| **CloudTrail** | `EventDataStore` (1), `Trail` (19) |\n| **CloudWatch** | `Alarm` (21), `AnomalyDetector` (6), `CompositeAlarm` (6), `Dashboard` (14), `InsightRule` (7), `MetricStream` (6) |\n| **CodeBuild** | `Project` (37), `ReportGroup` (2), `SourceCredential` (4) |\n| **CodeCommit** | `Repository` (11) |\n| **CodeDeploy** | `Application` (7), `DeploymentConfig` (12), `DeploymentGroup` (23) |\n| **CodePipeline** | `CustomActionType` (3), `Pipeline` (25), `Webhook` (2) |\n| **Cognito** | `IdentityPool` (3), `IdentityPoolRoleAttachment` (7), `LogDeliveryConfiguration` (3), `ManagedLoginBranding` (2), `UserPool` (52), `UserPoolClient` (21), `UserPoolDomain` (7), `UserPoolGroup` (1), `UserPoolIdentityProvider` (11), `UserPoolResourceServer` (4), `UserPoolRiskConfigurationAttachment` (6), `UserPoolUICustomizationAttachment` (2) |\n| **Config** | `ConfigRule` (6), `ConfigurationAggregator` (2), `ConfigurationRecorder` (7), `ConformancePack` (1), `RemediationConfiguration` (2) |\n| **DocDB** | `DBCluster` (14), `DBInstance` (1), `DBSubnetGroup` (2), `EventSubscription` (1) |\n| **DocDBElastic** | `Cluster` (7) |\n| **DynamoDB** | `GlobalTable` (26), `Table` (28) |\n| **EC2** | `ClientVpnAuthorizationRule` (1), `ClientVpnEndpoint` (6), `DHCPOptions` (2), `EIPAssociation` (1), `FlowLog` (4), `Instance` (10), `KeyPair` (1), `LaunchTemplate` (12), `NatGateway` (2), `NetworkAclEntry` (1), `NetworkInterface` (2), `PlacementGroup` (3), `PrefixList` (3), `Route` (1), `SecurityGroup` (7), `SecurityGroupEgress` (5), `SecurityGroupIngress` (5), `Subnet` (14), `TrafficMirrorTarget` (1), `TransitGateway` (2), `TransitGatewayRoute` (1), `Volume` (6), `VPC` (2), `VPCCidrBlock` (1), `VPCEndpoint` (4), `VPCGatewayAttachment` (1), `VPNConnection` (5) |\n| **ECR** | `PullThroughCacheRule` (3), `RegistryScanningConfiguration` (1), `ReplicationConfiguration` (1), `Repository` (7), `RepositoryCreationTemplate` (8), `SigningConfiguration` (1) |\n| **ECS** | `CapacityProvider` (3), `Cluster` (5), `Service` (37), `TaskDefinition` (64), `TaskSet` (2) |\n| **EFS** | `AccessPoint` (1), `FileSystem` (7), `MountTarget` (4) |\n| **EKS** | `AccessEntry` (14), `Addon` (5), `Cluster` (21), `FargateProfile` (5), `IdentityProviderConfig` (3), `Nodegroup` (21), `PodIdentityAssociation` (5) |\n| **ElastiCache** | `CacheCluster` (9), `ReplicationGroup` (14), `User` (2), `UserGroup` (1) |\n| **ElasticLoadBalancingV2** | `Listener` (57), `ListenerCertificate` (2), `ListenerRule` (37), `LoadBalancer` (37), `TargetGroup` (58), `TrustStore` (1), `TrustStoreRevocation` (1) |\n| **Events** | `ApiDestination` (1), `Archive` (5), `Connection` (1), `Endpoint` (2), `EventBus` (2), `Rule` (23) |\n| **EventSchemas** | `Discoverer` (1), `Registry` (1), `RegistryPolicy` (1), `Schema` (1) |\n| **GlobalAccelerator** | `Accelerator` (1), `EndpointGroup` (5), `Listener` (2) |\n| **Glue** | `Classifier` (6), `Connection` (5), `Crawler` (11), `CustomEntityType` (1), `Database` (1), `DataQualityRuleset` (1), `Job` (15), `MLTransform` (4), `Partition` (1), `Schema` (3), `SecurityConfiguration` (1), `Table` (1), `Trigger` (10), `UserDefinedFunction` (2), `Workflow` (1) |\n| **Grafana** | `Workspace` (7) |\n| **IAM** | `Group` (23), `GroupPolicy` (1), `InstanceProfile` (2), `ManagedPolicy` (31), `OIDCProvider` (2), `Policy` (29), `Role` (40), `RolePolicy` (1), `ServiceLinkedRole` (1), `User` (24), `UserPolicy` (1) |\n| **IoT** | `Authorizer` (3), `Certificate` (1), `CertificateProvider` (1), `Command` (1), `DomainConfiguration` (3), `JobTemplate` (3), `MitigationAction` (1), `Policy` (4), `PolicyPrincipalAttachment` (1), `ProvisioningTemplate` (3), `RoleAlias` (1), `ScheduledAudit` (1), `Thing` (1), `ThingGroup` (2), `TopicRule` (5), `TopicRuleDestination` (2) |\n| **Kinesis** | `ResourcePolicy` (4), `Stream` (5), `StreamConsumer` (2) |\n| **KinesisAnalyticsV2** | `Application` (20), `ApplicationCloudWatchLoggingOption` (1), `ApplicationOutput` (1), `ApplicationReferenceDataSource` (1) |\n| **KinesisFirehose** | `DeliveryStream` (68) |\n| **KMS** | `Alias` (2), `Key` (12), `ReplicaKey` (4) |\n| **Lambda** | `Alias` (7), `CodeSigningConfig` (1), `EventInvokeConfig` (5), `EventSourceMapping` (54), `Function` (46), `LayerVersion` (8), `LayerVersionPermission` (3), `Permission` (8), `Url` (8), `Version` (1) |\n| **Logs** | `AccountPolicy` (6), `DeliveryDestination` (3), `Destination` (1), `LogAnomalyDetector` (2), `LogGroup` (10), `MetricFilter` (7), `QueryDefinition` (1), `ResourcePolicy` (1), `SubscriptionFilter` (6), `Transformer` (3) |\n| **MemoryDB** | `Cluster` (8), `User` (1) |\n| **MSK** | `BatchScramSecret` (2), `Cluster` (31), `ClusterPolicy` (1), `Configuration` (4), `Replicator` (10), `ServerlessCluster` (4) |\n| **Neptune** | `DBCluster` (11), `DBClusterParameterGroup` (1), `DBInstance` (3), `DBSubnetGroup` (1), `GlobalCluster` (1) |\n| **NeptuneGraph** | `Graph` (2), `PrivateGraphEndpoint` (1) |\n| **NetworkFirewall** | `FirewallPolicy` (18), `RuleGroup` (34), `TLSInspectionConfiguration` (7) |\n| **OpenSearchServerless** | `AccessPolicy` (7), `Collection` (2), `CollectionGroup` (3), `LifecyclePolicy` (4), `SecurityConfig` (5), `SecurityPolicy` (14) |\n| **OpenSearchService** | `Domain` (65) |\n| **Pipes** | `Pipe` (9) |\n| **RDS** | `DBCluster` (19), `DBInstance` (33), `DBParameterGroup` (2), `DBProxy` (4), `DBProxyTargetGroup` (2), `DBShardGroup` (1), `DBSubnetGroup` (3), `EventSubscription` (3), `OptionGroup` (1) |\n| **Redshift** | `Cluster` (20), `EventSubscription` (1), `ScheduledAction` (2) |\n| **RedshiftServerless** | `Namespace` (5), `Workgroup` (6) |\n| **Route53** | `CidrCollection` (11), `DNSSEC` (3), `HealthCheck` (30), `HostedZone` (14), `KeySigningKey` (9), `RecordSet` (75), `RecordSetGroup` (76) |\n| **Route53Profiles** | `ProfileAssociation` (1), `ProfileResourceAssociation` (6) |\n| **Route53Resolver** | `FirewallDomainList` (3), `FirewallRuleGroup` (18), `FirewallRuleGroupAssociation` (4), `ResolverDNSSECConfig` (1), `ResolverEndpoint` (18), `ResolverQueryLoggingConfig` (1), `ResolverQueryLoggingConfigAssociation` (1), `ResolverRule` (15), `ResolverRuleAssociation` (1) |\n| **S3** | `AccessPoint` (1), `Bucket` (54), `BucketPolicy` (4), `StorageLens` (5), `StorageLensGroup` (3) |\n| **S3Express** | `AccessPoint` (3), `DirectoryBucket` (11) |\n| **Scheduler** | `Schedule` (10), `ScheduleGroup` (1) |\n| **SecretsManager** | `RotationSchedule` (4), `Secret` (5), `SecretTargetAttachment` (1) |\n| **ServiceDiscovery** | `HttpNamespace` (3), `Instance` (19), `PrivateDnsNamespace` (4), `PublicDnsNamespace` (4), `Service` (13) |\n| **SES** | `ConfigurationSetEventDestination` (8), `ContactList` (1), `EmailIdentity` (6), `ReceiptRule` (6), `ReceiptRuleSet` (1), `Template` (1) |\n| **SNS** | `Subscription` (9), `Topic` (12), `TopicPolicy` (1) |\n| **SQS** | `Queue` (9), `QueuePolicy` (1) |\n| **SSM** | `Association` (3), `Document` (3), `MaintenanceWindow` (2), `MaintenanceWindowTarget` (1), `MaintenanceWindowTask` (1), `Parameter` (5) |\n| **StepFunctions** | `Activity` (3), `StateMachine` (26) |\n| **Synthetics** | `Canary` (16) |\n| **VerifiedPermissions** | `IdentitySource` (3), `Policy` (26), `PolicyStore` (23), `PolicyStoreAlias` (1), `PolicyTemplate` (29) |\n| **WAFv2** | `IPSet` (3), `LoggingConfiguration` (3), `RegexPatternSet` (3), `RuleGroup` (18), `WebACL` (23), `WebACLAssociation` (2) |\n| **XRay** | `Group` (1), `ResourcePolicy` (3), `SamplingRule` (6) |\n\n</details>\n<!-- supported-resources:end -->\n\nHighlights:\n\n- **ELBv2**: `idle_timeout` / `deregistration_delay` / `slow_start` attribute ranges (stringly-typed Key/Value attributes are invisible to schema validation)\n- **IAM**: managed (6,144 chars) and inline (role/group/user) policy document size limits\n- **CloudFront**: `MinTTL <= DefaultTTL <= MaxTTL` ordering, ACM certificates must live in `us-east-1`\n- **Step Functions**: `Next`/`Default`/`Choices` must reference defined states (a dangling `StartAt` is already caught by the engine's built-in `E3601`)\n- **EC2**: security group TCP/UDP port ranges and `FromPort <= ToPort`\n\n## For AI agents\n\nTo add cdk-preflight to a CDK app:\n\n1. `npm i -D cdk-preflight`\n2. `npx cdk-preflight init` — or the shorter alias `npx cdkpf init` (finds the entry point via `cdk.json` and inserts `Preflight.apply(app)`; use `--dry-run` to preview)\n3. Run `cdk synth`. Violations fail the synth with a validation report; each finding carries a rule id, the actual value, and a suggested fix\n4. To fix a finding, prefer correcting the resource. To opt out instead: `exclude: ['<rule-id>']` disables one rule, `enforce: false` switches to warn-only reporting\n\nThe machine-readable findings are written to `cdk.out/validation-report.json` when synthesizing with `-c @aws-cdk/core:validationReportJson=true`.\n\n### Report missed deploy errors\n\ncdk-preflight only knows the failure modes it has benched. When a deploy fails on a constraint the pack should have caught, that report is how new rules get added — but at that moment cdk-preflight is out of the loop (it passed the synth), so the instruction has to already sit in your agent's context. Paste this into your repository's `AGENTS.md` (or `CLAUDE.md`):\n\n```markdown\n## cdk-preflight: report missed deploy errors\n\nIf `cdk deploy` fails even though `cdk synth` (with cdk-preflight enabled) passed,\nand the failure is a service-side validation rejection — CREATE_FAILED/UPDATE_FAILED\nwith a 400-class message such as \"Invalid request provided: ...\" — cdk-preflight is\nmissing a rule. Report it:\n\n1. Qualify first. NOT reportable: AccessDenied / permissions, service quotas,\n throttling, name conflicts with existing resources, stabilization timeouts.\n2. Redact account-specific data (account IDs -> 123456789012, real ARNs/domains\n -> placeholders).\n3. Search existing issues: https://github.com/badmintoncryer/cdk-preflight/issues\n4. With your user's approval, open a \"Missed deploy error\" issue with the verbatim\n error message, the resource type, a minimal template snippet, and your\n aws-cdk-lib / cdk-preflight versions.\n```\n\n## Scope and rule lifecycle\n\nA constraint belongs in the pack when violating it makes a real deployment fail *and* no layer that sees the same synthesized template already blocks it. There is no further \"is this worth a rule\" question — if the gap is real, it gets a rule.\n\nCDK L2 construct validation is deliberately **not** one of those layers. `CfnXxx` usage, escape hatches, `addPropertyOverride`, `cloudformation-include` and migrated templates all bypass L2, so an L2 guard covering the same mistake neither disqualifies a rule nor retires one.\n\nThat makes growth the normal state, and it has a consequence worth knowing before you upgrade: **new rules land in minor releases, so a minor upgrade can newly fail a `cdk synth` that passed yesterday.** That is intended, not a regression. If you need a frozen rule set, pin the version; to drop a single rule, `exclude: ['<rule-id>']`; to see everything without failing the build, `enforce: false`.\n\nRules move the other way too. Once the validation engine bundled in `aws-cdk-lib` starts blocking a constraint, the rule records the engine version that covers it and stops being evaluated on that engine or later — but only where that changes nothing about whether synth fails: with `enforce: false`, with `strict: true`, or when your app sets the context `@aws-cdk/core:validateAgainstDefaultRules: true`. In the default enforce mode the CDK reports its own engine's errors as warnings, so the rule keeps running and you may see both. Users on an older `aws-cdk-lib` keep the rule either way; it is deleted only once the minimum supported `aws-cdk-lib` bundles an engine that covers it.\n\n## How it works\n\n`Preflight.apply()` evaluates the rules with the [cloudformation-validate](https://github.com/aws-cloudformation/cloudformation-validate) Rust/WASM engine that ships inside `aws-cdk-lib` — no extra binaries, no network access at synth time. In the default enforce mode the engine is invoked through a dedicated CDK validation plugin so that violations fail synthesis; with `enforce: false` the rules are instead injected into the CDK built-in `CloudFormationValidatePlugin` and reported as warnings.\n\nConstraints that *can* be expressed in schemas or generic engine rules also make good upstream PRs to that engine, but nothing here waits on one — the upstream release cycle is deliberately slower than this pack's. Each rule's `meta.yaml` tracks its upstream status so that retirement stays bookkeeping.\n\n## Requirements\n\n- `aws-cdk-lib` >= 2.267.0, released 2026-08-27 (the first release that bundles the built-in CloudFormation validator). This is a recent release — an existing CDK app may need an upgrade before cdk-preflight can run.\n\n## Contributing\n\nRule authoring, the verification gates (including real-deploy reproduction), and the test layout are documented in [AGENTS.md](AGENTS.md) — written for AI coding agents and humans alike.\n\n## License\n\nApache-2.0\n"
|
|
9420
9623
|
},
|
|
9421
9624
|
"repository": {
|
|
9422
9625
|
"type": "git",
|
|
@@ -9445,7 +9648,7 @@
|
|
|
9445
9648
|
"kind": "class",
|
|
9446
9649
|
"locationInModule": {
|
|
9447
9650
|
"filename": "src/index.ts",
|
|
9448
|
-
"line":
|
|
9651
|
+
"line": 76
|
|
9449
9652
|
},
|
|
9450
9653
|
"methods": [
|
|
9451
9654
|
{
|
|
@@ -9455,7 +9658,7 @@
|
|
|
9455
9658
|
},
|
|
9456
9659
|
"locationInModule": {
|
|
9457
9660
|
"filename": "src/index.ts",
|
|
9458
|
-
"line":
|
|
9661
|
+
"line": 80
|
|
9459
9662
|
},
|
|
9460
9663
|
"name": "apply",
|
|
9461
9664
|
"parameters": [
|
|
@@ -9482,7 +9685,7 @@
|
|
|
9482
9685
|
},
|
|
9483
9686
|
"locationInModule": {
|
|
9484
9687
|
"filename": "src/index.ts",
|
|
9485
|
-
"line":
|
|
9688
|
+
"line": 113
|
|
9486
9689
|
},
|
|
9487
9690
|
"name": "ruleIds",
|
|
9488
9691
|
"returns": {
|
|
@@ -9569,7 +9772,7 @@
|
|
|
9569
9772
|
"immutable": true,
|
|
9570
9773
|
"locationInModule": {
|
|
9571
9774
|
"filename": "src/index.ts",
|
|
9572
|
-
"line":
|
|
9775
|
+
"line": 62
|
|
9573
9776
|
},
|
|
9574
9777
|
"name": "includeUpstreamPending",
|
|
9575
9778
|
"optional": true,
|
|
@@ -9581,14 +9784,14 @@
|
|
|
9581
9784
|
"abstract": true,
|
|
9582
9785
|
"docs": {
|
|
9583
9786
|
"default": "false",
|
|
9584
|
-
"remarks": "
|
|
9787
|
+
"remarks": "Since the engine's own errors then fail synthesis, bundled rules that the\nrunning engine already covers are skipped instead of being reported twice.\nThe same happens with `enforce: false`, and when the app sets the context\n`@aws-cdk/core:validateAgainstDefaultRules: true`.\n\nOnly effective in enforce mode (the default).",
|
|
9585
9788
|
"stability": "stable",
|
|
9586
9789
|
"summary": "In enforce mode, additionally fail synthesis on error-class findings (severity ERROR/FATAL) of the built-in validation engine itself, e.g. schema violations like `F3034`. This is the workaround for the CDK behavior where all built-in findings are downgraded to warnings."
|
|
9587
9790
|
},
|
|
9588
9791
|
"immutable": true,
|
|
9589
9792
|
"locationInModule": {
|
|
9590
9793
|
"filename": "src/index.ts",
|
|
9591
|
-
"line":
|
|
9794
|
+
"line": 47
|
|
9592
9795
|
},
|
|
9593
9796
|
"name": "strict",
|
|
9594
9797
|
"optional": true,
|
|
@@ -9600,6 +9803,6 @@
|
|
|
9600
9803
|
"symbolId": "src/index:PreflightOptions"
|
|
9601
9804
|
}
|
|
9602
9805
|
},
|
|
9603
|
-
"version": "0.0.
|
|
9604
|
-
"fingerprint": "
|
|
9806
|
+
"version": "0.0.177",
|
|
9807
|
+
"fingerprint": "6zhcN1OB6q4DLCR1mI/lW5hSREvyHuYe350dyhf55RA="
|
|
9605
9808
|
}
|