stacktape 2.23.0 → 2.24.0-beta.24

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/index.js CHANGED
@@ -1,3 +1,3260 @@
1
- module.exports.sayHello = () => {
2
- console.log('Hello, world!');
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
3
9
  };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/api/npm/ts/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ $CfFormat: () => $CfFormat,
24
+ $CfResourceParam: () => $CfResourceParam,
25
+ $CfStackOutput: () => $CfStackOutput,
26
+ $GitInfo: () => $GitInfo,
27
+ $ResourceParam: () => $ResourceParam,
28
+ $Secret: () => $Secret,
29
+ AWS_SES: () => AWS_SES,
30
+ AlarmIntegration: () => AlarmIntegration,
31
+ ApplicationLoadBalancer: () => ApplicationLoadBalancer,
32
+ ApplicationLoadBalancerIntegration: () => ApplicationLoadBalancerIntegration,
33
+ AuroraEngineMysql: () => AuroraEngineMysql,
34
+ AuroraEnginePostgresql: () => AuroraEnginePostgresql,
35
+ AuroraServerlessEngineMysql: () => AuroraServerlessEngineMysql,
36
+ AuroraServerlessEnginePostgresql: () => AuroraServerlessEnginePostgresql,
37
+ AuroraServerlessV2EngineMysql: () => AuroraServerlessV2EngineMysql,
38
+ AuroraServerlessV2EnginePostgresql: () => AuroraServerlessV2EnginePostgresql,
39
+ BaseResource: () => BaseResource,
40
+ BaseTypeProperties: () => BaseTypeProperties,
41
+ Bastion: () => Bastion,
42
+ BastionScriptWithCommand: () => BastionScriptWithCommand,
43
+ BastionScriptWithCommands: () => BastionScriptWithCommands,
44
+ BatchJob: () => BatchJob,
45
+ Bucket: () => Bucket,
46
+ CdnBucketRoute: () => CdnBucketRoute,
47
+ CdnCustomDomainRoute: () => CdnCustomDomainRoute,
48
+ CdnHttpApiGatewayRoute: () => CdnHttpApiGatewayRoute,
49
+ CdnLambdaFunctionRoute: () => CdnLambdaFunctionRoute,
50
+ CdnLoadBalancerRoute: () => CdnLoadBalancerRoute,
51
+ CloudwatchLogIntegration: () => CloudwatchLogIntegration,
52
+ ContainerEfsMount: () => ContainerEfsMount,
53
+ ContainerWorkload: () => ContainerWorkload,
54
+ ContainerWorkloadHttpApiIntegration: () => ContainerWorkloadHttpApiIntegration,
55
+ ContainerWorkloadInternalIntegration: () => ContainerWorkloadInternalIntegration,
56
+ ContainerWorkloadServiceConnectIntegration: () => ContainerWorkloadServiceConnectIntegration,
57
+ CustomArtifactLambdaPackaging: () => CustomArtifactLambdaPackaging,
58
+ CustomDockerfilePackaging: () => CustomDockerfilePackaging,
59
+ CustomRuleGroup: () => CustomRuleGroup,
60
+ DatadogLogForwarding: () => DatadogLogForwarding,
61
+ DynamoDbIntegration: () => DynamoDbIntegration,
62
+ DynamoDbTable: () => DynamoDbTable,
63
+ EfsFilesystem: () => EfsFilesystem,
64
+ EventBus: () => EventBus,
65
+ EventBusIntegration: () => EventBusIntegration,
66
+ ExpirationLifecycleRule: () => ExpirationLifecycleRule,
67
+ ExternalBuildpackPackaging: () => ExternalBuildpackPackaging,
68
+ HighlightLogForwarding: () => HighlightLogForwarding,
69
+ HostingBucket: () => HostingBucket,
70
+ HttpApiGateway: () => HttpApiGateway,
71
+ HttpApiIntegration: () => HttpApiIntegration,
72
+ HttpEndpointLogForwarding: () => HttpEndpointLogForwarding,
73
+ KafkaTopicIntegration: () => KafkaTopicIntegration,
74
+ KinesisIntegration: () => KinesisIntegration,
75
+ LambdaEfsMount: () => LambdaEfsMount,
76
+ LambdaFunction: () => LambdaFunction,
77
+ LocalScriptWithBastionTunnelingCommand: () => LocalScriptWithBastionTunnelingCommand,
78
+ LocalScriptWithBastionTunnelingCommands: () => LocalScriptWithBastionTunnelingCommands,
79
+ LocalScriptWithBastionTunnelingFileScript: () => LocalScriptWithBastionTunnelingFileScript,
80
+ LocalScriptWithBastionTunnelingFileScripts: () => LocalScriptWithBastionTunnelingFileScripts,
81
+ LocalScriptWithCommand: () => LocalScriptWithCommand,
82
+ LocalScriptWithCommands: () => LocalScriptWithCommands,
83
+ LocalScriptWithFileScript: () => LocalScriptWithFileScript,
84
+ LocalScriptWithFileScripts: () => LocalScriptWithFileScripts,
85
+ ManagedRuleGroup: () => ManagedRuleGroup,
86
+ MongoDbAtlasCluster: () => MongoDbAtlasCluster,
87
+ NetworkLoadBalancer: () => NetworkLoadBalancer,
88
+ NextjsWeb: () => NextjsWeb,
89
+ NixpacksPackaging: () => NixpacksPackaging,
90
+ NonCurrentVersionExpirationLifecycleRule: () => NonCurrentVersionExpirationLifecycleRule,
91
+ OpenSearchDomain: () => OpenSearchDomain,
92
+ PrebuiltImagePackaging: () => PrebuiltImagePackaging,
93
+ PrivateService: () => PrivateService,
94
+ RateBasedRule: () => RateBasedRule,
95
+ RdsEngineMariadb: () => RdsEngineMariadb,
96
+ RdsEngineMysql: () => RdsEngineMysql,
97
+ RdsEngineOracleEE: () => RdsEngineOracleEE,
98
+ RdsEngineOracleSE2: () => RdsEngineOracleSE2,
99
+ RdsEnginePostgres: () => RdsEnginePostgres,
100
+ RdsEngineSqlServerEE: () => RdsEngineSqlServerEE,
101
+ RdsEngineSqlServerEX: () => RdsEngineSqlServerEX,
102
+ RdsEngineSqlServerSE: () => RdsEngineSqlServerSE,
103
+ RdsEngineSqlServerWeb: () => RdsEngineSqlServerWeb,
104
+ RedisCluster: () => RedisCluster,
105
+ RelationalDatabase: () => RelationalDatabase,
106
+ ResourceParamReference: () => ResourceParamReference,
107
+ S3Integration: () => S3Integration,
108
+ ScheduleIntegration: () => ScheduleIntegration,
109
+ SnsIntegration: () => SnsIntegration,
110
+ SnsTopic: () => SnsTopic,
111
+ SqsIntegration: () => SqsIntegration,
112
+ SqsQueue: () => SqsQueue,
113
+ SqsQueueEventBusIntegration: () => SqsQueueEventBusIntegration,
114
+ StacktapeImageBuildpackPackaging: () => StacktapeImageBuildpackPackaging,
115
+ StacktapeLambdaBuildpackPackaging: () => StacktapeLambdaBuildpackPackaging,
116
+ StateMachine: () => StateMachine,
117
+ UpstashRedis: () => UpstashRedis,
118
+ UserAuthPool: () => UserAuthPool,
119
+ WebAppFirewall: () => WebAppFirewall,
120
+ WebService: () => WebService,
121
+ WorkerService: () => WorkerService,
122
+ defineConfig: () => defineConfig,
123
+ transformConfigWithResources: () => transformConfigWithResources,
124
+ transformValue: () => transformValue
125
+ });
126
+ module.exports = __toCommonJS(index_exports);
127
+
128
+ // node_modules/change-case/dist/index.js
129
+ var SPLIT_LOWER_UPPER_RE = new RegExp("([\\p{Ll}\\d])(\\p{Lu})", "gu");
130
+ var SPLIT_UPPER_UPPER_RE = new RegExp("(\\p{Lu})([\\p{Lu}][\\p{Ll}])", "gu");
131
+ var SPLIT_SEPARATE_NUMBER_RE = new RegExp("(\\d)\\p{Ll}|(\\p{L})\\d", "u");
132
+ var DEFAULT_STRIP_REGEXP = /[^\p{L}\d]+/giu;
133
+ var SPLIT_REPLACE_VALUE = "$1\0$2";
134
+ var DEFAULT_PREFIX_SUFFIX_CHARACTERS = "";
135
+ function split(value) {
136
+ let result = value.trim();
137
+ result = result.replace(SPLIT_LOWER_UPPER_RE, SPLIT_REPLACE_VALUE).replace(SPLIT_UPPER_UPPER_RE, SPLIT_REPLACE_VALUE);
138
+ result = result.replace(DEFAULT_STRIP_REGEXP, "\0");
139
+ let start = 0;
140
+ let end = result.length;
141
+ while (result.charAt(start) === "\0")
142
+ start++;
143
+ if (start === end)
144
+ return [];
145
+ while (result.charAt(end - 1) === "\0")
146
+ end--;
147
+ return result.slice(start, end).split(/\0/g);
148
+ }
149
+ __name(split, "split");
150
+ function splitSeparateNumbers(value) {
151
+ const words = split(value);
152
+ for (let i = 0; i < words.length; i++) {
153
+ const word = words[i];
154
+ const match = SPLIT_SEPARATE_NUMBER_RE.exec(word);
155
+ if (match) {
156
+ const offset = match.index + (match[1] ?? match[2]).length;
157
+ words.splice(i, 1, word.slice(0, offset), word.slice(offset));
158
+ }
159
+ }
160
+ return words;
161
+ }
162
+ __name(splitSeparateNumbers, "splitSeparateNumbers");
163
+ function pascalCase(input, options) {
164
+ const [prefix, words, suffix] = splitPrefixSuffix(input, options);
165
+ const lower = lowerFactory(options?.locale);
166
+ const upper = upperFactory(options?.locale);
167
+ const transform = options?.mergeAmbiguousCharacters ? capitalCaseTransformFactory(lower, upper) : pascalCaseTransformFactory(lower, upper);
168
+ return prefix + words.map(transform).join(options?.delimiter ?? "") + suffix;
169
+ }
170
+ __name(pascalCase, "pascalCase");
171
+ function lowerFactory(locale) {
172
+ return locale === false ? (input) => input.toLowerCase() : (input) => input.toLocaleLowerCase(locale);
173
+ }
174
+ __name(lowerFactory, "lowerFactory");
175
+ function upperFactory(locale) {
176
+ return locale === false ? (input) => input.toUpperCase() : (input) => input.toLocaleUpperCase(locale);
177
+ }
178
+ __name(upperFactory, "upperFactory");
179
+ function capitalCaseTransformFactory(lower, upper) {
180
+ return (word) => `${upper(word[0])}${lower(word.slice(1))}`;
181
+ }
182
+ __name(capitalCaseTransformFactory, "capitalCaseTransformFactory");
183
+ function pascalCaseTransformFactory(lower, upper) {
184
+ return (word, index) => {
185
+ const char0 = word[0];
186
+ const initial = index > 0 && char0 >= "0" && char0 <= "9" ? "_" + char0 : upper(char0);
187
+ return initial + lower(word.slice(1));
188
+ };
189
+ }
190
+ __name(pascalCaseTransformFactory, "pascalCaseTransformFactory");
191
+ function splitPrefixSuffix(input, options = {}) {
192
+ const splitFn = options.split ?? (options.separateNumbers ? splitSeparateNumbers : split);
193
+ const prefixCharacters = options.prefixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;
194
+ const suffixCharacters = options.suffixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;
195
+ let prefixIndex = 0;
196
+ let suffixIndex = input.length;
197
+ while (prefixIndex < input.length) {
198
+ const char = input.charAt(prefixIndex);
199
+ if (!prefixCharacters.includes(char))
200
+ break;
201
+ prefixIndex++;
202
+ }
203
+ while (suffixIndex > prefixIndex) {
204
+ const index = suffixIndex - 1;
205
+ const char = input.charAt(index);
206
+ if (!suffixCharacters.includes(char))
207
+ break;
208
+ suffixIndex = index;
209
+ }
210
+ return [
211
+ input.slice(0, prefixIndex),
212
+ splitFn(input.slice(prefixIndex, suffixIndex)),
213
+ input.slice(suffixIndex)
214
+ ];
215
+ }
216
+ __name(splitPrefixSuffix, "splitPrefixSuffix");
217
+
218
+ // shared/naming/logical-names.ts
219
+ var cfLogicalNames = {
220
+ bucket(stpResourceName) {
221
+ return pascalCase(`${stpResourceName}-bucket`);
222
+ },
223
+ atlasMongoProject() {
224
+ return buildCfLogicalName({
225
+ specifier: { type: "AtlasMongo" },
226
+ suffix: { cloudformationResourceType: "MongoDB::StpAtlasV1::Project" }
227
+ });
228
+ },
229
+ atlasMongoCredentialsProvider() {
230
+ return buildCfLogicalName({
231
+ specifier: { type: "AtlasMongoCredentialsProvider" },
232
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
233
+ });
234
+ },
235
+ atlasMongoProjectVpcNetworkContainer() {
236
+ return buildCfLogicalName({
237
+ specifier: { type: "AtlasMongo" },
238
+ suffix: { cloudformationResourceType: "MongoDB::StpAtlasV1::NetworkContainer" }
239
+ });
240
+ },
241
+ atlasMongoProjectVpcNetworkPeering() {
242
+ return buildCfLogicalName({
243
+ specifier: { type: "AtlasMongo" },
244
+ suffix: { cloudformationResourceType: "MongoDB::StpAtlasV1::NetworkPeering" }
245
+ });
246
+ },
247
+ atlasMongoProjectIpAccessList() {
248
+ return buildCfLogicalName({
249
+ specifier: { type: "AtlasMongo" },
250
+ suffix: { cloudformationResourceType: "MongoDB::StpAtlasV1::ProjectIpAccessList" }
251
+ });
252
+ },
253
+ atlasMongoUserAssociatedWithRole(stpResourceName) {
254
+ return buildCfLogicalName({
255
+ stpResourceName,
256
+ specifier: { type: "AtlasMongo" },
257
+ suffix: { cloudformationResourceType: "MongoDB::StpAtlasV1::DatabaseUser" }
258
+ });
259
+ },
260
+ atlasMongoClusterMasterUser(stpResourceName) {
261
+ return buildCfLogicalName({
262
+ stpResourceName,
263
+ suffix: { cloudformationResourceType: "MongoDB::StpAtlasV1::DatabaseUser" }
264
+ });
265
+ },
266
+ atlasMongoCluster(stpResourceName) {
267
+ return buildCfLogicalName({
268
+ stpResourceName,
269
+ suffix: { cloudformationResourceType: "MongoDB::StpAtlasV1::Cluster" }
270
+ });
271
+ },
272
+ redisReplicationGroup(stpResourceName) {
273
+ return buildCfLogicalName({
274
+ stpResourceName,
275
+ suffix: { cloudformationResourceType: "AWS::ElastiCache::ReplicationGroup" }
276
+ });
277
+ },
278
+ redisLogGroup(stpResourceName) {
279
+ return buildCfLogicalName({
280
+ stpResourceName,
281
+ suffix: { cloudformationResourceType: "AWS::Logs::LogGroup" }
282
+ });
283
+ },
284
+ redisParameterGroup(stpResourceName) {
285
+ return buildCfLogicalName({
286
+ stpResourceName,
287
+ suffix: { cloudformationResourceType: "AWS::ElastiCache::ParameterGroup" }
288
+ });
289
+ },
290
+ redisSubnetGroup(stpResourceName) {
291
+ return buildCfLogicalName({
292
+ stpResourceName,
293
+ suffix: { cloudformationResourceType: "AWS::ElastiCache::SubnetGroup" }
294
+ });
295
+ },
296
+ redisSecurityGroup(stpResourceName) {
297
+ return buildCfLogicalName({
298
+ stpResourceName,
299
+ suffix: { cloudformationResourceType: "AWS::EC2::SecurityGroup" }
300
+ });
301
+ },
302
+ efsFilesystem(stpResourceName) {
303
+ return buildCfLogicalName({
304
+ stpResourceName,
305
+ suffix: {
306
+ cloudformationResourceType: "AWS::EFS::FileSystem"
307
+ }
308
+ });
309
+ },
310
+ efsAccessPoint({
311
+ stpResourceName,
312
+ efsFilesystemName,
313
+ rootDirectory
314
+ }) {
315
+ const rootDirIdentifier = rootDirectory ? `${rootDirectory.replace(/\//g, "-").replace(/^-|-$/g, "")}` : "Root";
316
+ return buildCfLogicalName({
317
+ stpResourceName,
318
+ specifier: {
319
+ type: `${efsFilesystemName}-${rootDirIdentifier}`
320
+ },
321
+ suffix: {
322
+ cloudformationResourceType: "AWS::EFS::AccessPoint"
323
+ }
324
+ });
325
+ },
326
+ efsMountTarget(stpResourceName, mountTargetIndex) {
327
+ return buildCfLogicalName({
328
+ stpResourceName,
329
+ specifier: { type: "Subnet", typeIndex: mountTargetIndex },
330
+ suffix: { cloudformationResourceType: "AWS::EFS::MountTarget" }
331
+ });
332
+ },
333
+ efsSecurityGroup(stpResourceName) {
334
+ return buildCfLogicalName({
335
+ stpResourceName,
336
+ suffix: { cloudformationResourceType: "AWS::EC2::SecurityGroup" }
337
+ });
338
+ },
339
+ snsRoleSendSmsFromCognito(stpResourceName) {
340
+ return buildCfLogicalName({
341
+ stpResourceName,
342
+ specifier: { type: "SendSms" },
343
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
344
+ });
345
+ },
346
+ cloudfrontDistribution(stpResourceName, distributionIndex) {
347
+ return buildCfLogicalName({
348
+ stpResourceName,
349
+ specifier: { type: "CDN" },
350
+ suffix: { cloudformationResourceType: "AWS::CloudFront::Distribution", index: distributionIndex }
351
+ });
352
+ },
353
+ cloudfrontCustomCachePolicy(stpResourceName, cachingOptionsHash) {
354
+ return buildCfLogicalName({
355
+ stpResourceName,
356
+ specifier: { type: `CDNCacheBehavior${cachingOptionsHash}` },
357
+ suffix: { cloudformationResourceType: "AWS::CloudFront::CachePolicy" }
358
+ });
359
+ },
360
+ cloudfrontDefaultCachePolicy(type) {
361
+ return buildCfLogicalName({
362
+ specifier: { type: `CDN${type}` },
363
+ suffix: { cloudformationResourceType: "AWS::CloudFront::CachePolicy" }
364
+ });
365
+ },
366
+ cloudfrontCustomOriginRequestPolicy(stpResourceName, forwardingOptionsHash) {
367
+ return buildCfLogicalName({
368
+ stpResourceName,
369
+ specifier: { type: `CDNCacheBehavior${forwardingOptionsHash}` },
370
+ suffix: { cloudformationResourceType: "AWS::CloudFront::OriginRequestPolicy" }
371
+ });
372
+ },
373
+ cloudfrontDefaultOriginRequestPolicy(type) {
374
+ return buildCfLogicalName({
375
+ specifier: { type: `CDN${type}` },
376
+ suffix: { cloudformationResourceType: "AWS::CloudFront::OriginRequestPolicy" }
377
+ });
378
+ },
379
+ cloudfrontOriginAccessIdentity(stpResourceName) {
380
+ return buildCfLogicalName({
381
+ stpResourceName,
382
+ specifier: { type: "CDN" },
383
+ suffix: { cloudformationResourceType: "AWS::CloudFront::CloudFrontOriginAccessIdentity" }
384
+ });
385
+ },
386
+ openNextHostHeaderRewriteFunction(stpResourceName) {
387
+ return buildCfLogicalName({
388
+ stpResourceName,
389
+ specifier: { type: "OpenNextHostHeaderRewrite" },
390
+ suffix: { cloudformationResourceType: "AWS::CloudFront::Function" }
391
+ });
392
+ },
393
+ openNextAssetReplacerCustomResource(stpResourceName) {
394
+ return buildCfLogicalName({
395
+ stpResourceName,
396
+ specifier: { type: "AssetReplacer" },
397
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
398
+ });
399
+ },
400
+ openNextDynamoInsertCustomResource(stpResourceName) {
401
+ return buildCfLogicalName({
402
+ stpResourceName,
403
+ specifier: { type: "DynamoInsert" },
404
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
405
+ });
406
+ },
407
+ dnsRecord(fullyQualifiedDomainName) {
408
+ return buildCfLogicalName({
409
+ stpResourceName: "",
410
+ specifier: { type: getSpecifierForDomainResource(fullyQualifiedDomainName) },
411
+ suffix: { cloudformationResourceType: "AWS::Route53::RecordSet" }
412
+ });
413
+ },
414
+ dynamoGlobalTable(stpResourceName) {
415
+ return buildCfLogicalName({
416
+ stpResourceName,
417
+ suffix: { cloudformationResourceType: "AWS::DynamoDB::GlobalTable" }
418
+ });
419
+ },
420
+ dynamoRegionalTable(stpResourceName) {
421
+ return buildCfLogicalName({
422
+ stpResourceName,
423
+ suffix: { cloudformationResourceType: "AWS::DynamoDB::Table" }
424
+ });
425
+ },
426
+ bucketPolicy(stpResourceName) {
427
+ return buildCfLogicalName({
428
+ stpResourceName,
429
+ suffix: { cloudformationResourceType: "AWS::S3::BucketPolicy" }
430
+ });
431
+ },
432
+ lambdaLogGroup(stpResourceName) {
433
+ return buildCfLogicalName({
434
+ stpResourceName,
435
+ suffix: { cloudformationResourceType: "AWS::Logs::LogGroup" }
436
+ });
437
+ },
438
+ eventOnDeliveryFailureSqsQueuePolicy(stpResourceName, eventIndex) {
439
+ return buildCfLogicalName({
440
+ stpResourceName,
441
+ specifier: {
442
+ type: "Event",
443
+ typeIndex: eventIndex
444
+ },
445
+ suffix: { cloudformationResourceType: "AWS::SQS::QueuePolicy" }
446
+ });
447
+ },
448
+ snsEventSubscription(stpResourceName, eventIndex) {
449
+ return buildCfLogicalName({
450
+ stpResourceName,
451
+ specifier: {
452
+ type: "Event",
453
+ typeIndex: eventIndex
454
+ },
455
+ suffix: { cloudformationResourceType: "AWS::SNS::Subscription" }
456
+ });
457
+ },
458
+ snsEventPermission(stpResourceName, eventIndex) {
459
+ return buildCfLogicalName({
460
+ stpResourceName,
461
+ specifier: {
462
+ type: "Event",
463
+ typeIndex: eventIndex
464
+ },
465
+ suffix: { cloudformationResourceType: "AWS::Lambda::Permission" }
466
+ });
467
+ },
468
+ ecrRepo() {
469
+ return buildCfLogicalName({
470
+ specifier: {
471
+ type: "Container"
472
+ },
473
+ suffix: { cloudformationResourceType: "AWS::ECR::Repository" }
474
+ });
475
+ },
476
+ deploymentBucket() {
477
+ return buildCfLogicalName({
478
+ specifier: {
479
+ type: "Deployment"
480
+ },
481
+ suffix: { cloudformationResourceType: "AWS::S3::Bucket" }
482
+ });
483
+ },
484
+ deploymentBucketPolicy() {
485
+ return buildCfLogicalName({
486
+ specifier: {
487
+ type: "Deployment"
488
+ },
489
+ suffix: { cloudformationResourceType: "AWS::S3::BucketPolicy" }
490
+ });
491
+ },
492
+ lambdaInvokeConfig(stpResourceName) {
493
+ return buildCfLogicalName({
494
+ stpResourceName,
495
+ suffix: { cloudformationResourceType: "AWS::Lambda::EventInvokeConfig" }
496
+ });
497
+ },
498
+ lambdaVersionPublisherCustomResource(stpResourceName) {
499
+ return buildCfLogicalName({
500
+ stpResourceName,
501
+ specifier: { type: "Version" },
502
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
503
+ });
504
+ },
505
+ codeDeployServiceRole() {
506
+ return buildCfLogicalName({
507
+ specifier: {
508
+ type: "CodeDeploy"
509
+ },
510
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
511
+ });
512
+ },
513
+ batchInstanceRole() {
514
+ return buildCfLogicalName({
515
+ specifier: {
516
+ type: "BatchInstance"
517
+ },
518
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
519
+ });
520
+ },
521
+ batchInstanceDefaultSecurityGroup() {
522
+ return buildCfLogicalName({
523
+ specifier: {
524
+ type: "BatchInstance"
525
+ },
526
+ suffix: { cloudformationResourceType: "AWS::EC2::SecurityGroup" }
527
+ });
528
+ },
529
+ batchInstanceProfile() {
530
+ return buildCfLogicalName({
531
+ specifier: {
532
+ type: "BatchInstance"
533
+ },
534
+ suffix: { cloudformationResourceType: "AWS::IAM::InstanceProfile" }
535
+ });
536
+ },
537
+ batchInstanceLaunchTemplate() {
538
+ return buildCfLogicalName({
539
+ specifier: {
540
+ type: "BatchInstance"
541
+ },
542
+ suffix: { cloudformationResourceType: "AWS::EC2::LaunchTemplate" }
543
+ });
544
+ },
545
+ batchStateMachineExecutionRole() {
546
+ return buildCfLogicalName({
547
+ specifier: {
548
+ type: "BatchStateMachine"
549
+ },
550
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
551
+ });
552
+ },
553
+ batchSpotFleetRole() {
554
+ return buildCfLogicalName({
555
+ specifier: {
556
+ type: "BatchSpotFleet"
557
+ },
558
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
559
+ });
560
+ },
561
+ batchServiceRole() {
562
+ return buildCfLogicalName({
563
+ specifier: {
564
+ type: "BatchService"
565
+ },
566
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
567
+ });
568
+ },
569
+ batchJobExecutionRole(stpResourceName) {
570
+ return buildCfLogicalName({
571
+ stpResourceName,
572
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
573
+ });
574
+ },
575
+ batchComputeEnvironment(spot, gpu) {
576
+ return buildCfLogicalName({
577
+ specifier: {
578
+ type: `Batch-${spot ? "spot" : "onDemand"}-${gpu ? "gpu" : ""}`
579
+ },
580
+ suffix: { cloudformationResourceType: "AWS::Batch::ComputeEnvironment" }
581
+ });
582
+ },
583
+ batchJobQueue(spot, gpu) {
584
+ return buildCfLogicalName({
585
+ specifier: {
586
+ type: `Batch-${spot ? "spot" : "onDemand"}-${gpu ? "gpu" : ""}`
587
+ },
588
+ suffix: { cloudformationResourceType: "AWS::Batch::JobQueue" }
589
+ });
590
+ },
591
+ subnet(publicSubnet, subnetIndex) {
592
+ return buildCfLogicalName({
593
+ specifier: {
594
+ type: publicSubnet ? "Public" : "Private"
595
+ },
596
+ suffix: { cloudformationResourceType: "AWS::EC2::Subnet", index: subnetIndex }
597
+ });
598
+ },
599
+ vpc() {
600
+ return buildCfLogicalName({
601
+ suffix: { cloudformationResourceType: "AWS::EC2::VPC" }
602
+ });
603
+ },
604
+ vpcGatewayEndpoint(type) {
605
+ return buildCfLogicalName({
606
+ specifier: { type: `${type}-Gateway` },
607
+ suffix: { cloudformationResourceType: "AWS::EC2::VPCEndpoint" }
608
+ });
609
+ },
610
+ dbSubnetGroup(stpResourceName) {
611
+ return buildCfLogicalName({
612
+ stpResourceName,
613
+ suffix: { cloudformationResourceType: "AWS::RDS::DBSubnetGroup" }
614
+ });
615
+ },
616
+ auroraDbCluster(stpResourceName) {
617
+ return buildCfLogicalName({
618
+ stpResourceName,
619
+ suffix: { cloudformationResourceType: "AWS::RDS::DBCluster" }
620
+ });
621
+ },
622
+ auroraDbClusterParameterGroup(stpResourceName) {
623
+ return buildCfLogicalName({
624
+ stpResourceName,
625
+ suffix: { cloudformationResourceType: "AWS::RDS::DBClusterParameterGroup" }
626
+ });
627
+ },
628
+ auroraDbClusterLogGroup(stpResourceName, logGroupType) {
629
+ return buildCfLogicalName({
630
+ stpResourceName,
631
+ specifier: { type: "Cluster", subtype: logGroupType },
632
+ suffix: { cloudformationResourceType: "AWS::Logs::LogGroup" }
633
+ });
634
+ },
635
+ dbSecurityGroup(stpResourceName) {
636
+ return buildCfLogicalName({
637
+ stpResourceName,
638
+ suffix: { cloudformationResourceType: "AWS::EC2::SecurityGroup" }
639
+ });
640
+ },
641
+ dbInstance(stpResourceName) {
642
+ return buildCfLogicalName({
643
+ stpResourceName,
644
+ suffix: { cloudformationResourceType: "AWS::RDS::DBInstance" }
645
+ });
646
+ },
647
+ dbInstanceLogGroup(stpResourceName, logGroupType) {
648
+ return buildCfLogicalName({
649
+ stpResourceName,
650
+ specifier: { type: "Instance", subtype: logGroupType },
651
+ suffix: { cloudformationResourceType: "AWS::Logs::LogGroup" }
652
+ });
653
+ },
654
+ openSearchDomainLogGroup(stpResourceName, logGroupType) {
655
+ return buildCfLogicalName({
656
+ stpResourceName,
657
+ specifier: { type: "Instance", subtype: logGroupType },
658
+ suffix: { cloudformationResourceType: "AWS::Logs::LogGroup" }
659
+ });
660
+ },
661
+ dbOptionGroup(stpResourceName) {
662
+ return buildCfLogicalName({
663
+ stpResourceName,
664
+ suffix: { cloudformationResourceType: "AWS::RDS::OptionGroup" }
665
+ });
666
+ },
667
+ dbInstanceParameterGroup(stpResourceName) {
668
+ return buildCfLogicalName({
669
+ stpResourceName,
670
+ suffix: { cloudformationResourceType: "AWS::RDS::DBParameterGroup" }
671
+ });
672
+ },
673
+ dbReplica(stpResourceName, replicaNum) {
674
+ return buildCfLogicalName({
675
+ stpResourceName,
676
+ specifier: { type: "Replica", typeIndex: replicaNum },
677
+ suffix: { cloudformationResourceType: "AWS::RDS::DBInstance" }
678
+ });
679
+ },
680
+ dbReplicaLogGroup(stpResourceName, logGroupType, replicaNum) {
681
+ return buildCfLogicalName({
682
+ stpResourceName,
683
+ specifier: { type: "Replica", typeIndex: replicaNum, subtype: logGroupType },
684
+ suffix: { cloudformationResourceType: "AWS::Logs::LogGroup" }
685
+ });
686
+ },
687
+ dbReplicaParameterGroup(stpResourceName, replicaNum) {
688
+ return buildCfLogicalName({
689
+ stpResourceName,
690
+ specifier: { type: "Replica", typeIndex: replicaNum },
691
+ suffix: { cloudformationResourceType: "AWS::RDS::DBParameterGroup" }
692
+ });
693
+ },
694
+ auroraDbInstance(stpResourceName, instanceNum) {
695
+ return buildCfLogicalName({
696
+ stpResourceName,
697
+ suffix: { cloudformationResourceType: "AWS::RDS::DBInstance", index: instanceNum }
698
+ });
699
+ },
700
+ auroraDbInstanceParameterGroup(stpResourceName) {
701
+ return buildCfLogicalName({
702
+ stpResourceName,
703
+ specifier: { type: "Instance" },
704
+ suffix: { cloudformationResourceType: "AWS::RDS::DBParameterGroup" }
705
+ });
706
+ },
707
+ eventBusRule(stpResourceName, eventIndex) {
708
+ return buildCfLogicalName({
709
+ stpResourceName,
710
+ specifier: {
711
+ type: "Event",
712
+ typeIndex: eventIndex
713
+ },
714
+ suffix: { cloudformationResourceType: "AWS::Events::Rule" }
715
+ });
716
+ },
717
+ customTaggingScheduleRule() {
718
+ return buildCfLogicalName({
719
+ specifier: { type: "StpCustomTaggingSchedule" },
720
+ suffix: { cloudformationResourceType: "AWS::Events::Rule" }
721
+ });
722
+ },
723
+ customTaggingScheduleRulePermission() {
724
+ return buildCfLogicalName({
725
+ specifier: { type: "StpCustomTaggingScheduleRule" },
726
+ suffix: { cloudformationResourceType: "AWS::Lambda::Permission" }
727
+ });
728
+ },
729
+ cloudWatchLogEventSubscriptionFilter(stpResourceName, eventIndex) {
730
+ return buildCfLogicalName({
731
+ stpResourceName,
732
+ specifier: {
733
+ type: "Event",
734
+ typeIndex: eventIndex
735
+ },
736
+ suffix: { cloudformationResourceType: "AWS::Logs::SubscriptionFilter" }
737
+ });
738
+ },
739
+ eventSourceMapping(stpResourceName, eventIndex) {
740
+ return buildCfLogicalName({
741
+ stpResourceName,
742
+ specifier: {
743
+ type: "Event",
744
+ typeIndex: eventIndex
745
+ },
746
+ suffix: { cloudformationResourceType: "AWS::Lambda::EventSourceMapping" }
747
+ });
748
+ },
749
+ iotEventTopicRule(stpResourceName, eventIndex) {
750
+ return buildCfLogicalName({
751
+ stpResourceName,
752
+ specifier: {
753
+ type: "Event",
754
+ typeIndex: eventIndex
755
+ },
756
+ suffix: { cloudformationResourceType: "AWS::IoT::TopicRule" }
757
+ });
758
+ },
759
+ kinesisEventConsumer(stpResourceName, eventIndex) {
760
+ return buildCfLogicalName({
761
+ stpResourceName,
762
+ specifier: {
763
+ type: "Event",
764
+ typeIndex: eventIndex
765
+ },
766
+ suffix: { cloudformationResourceType: "AWS::Kinesis::StreamConsumer" }
767
+ });
768
+ },
769
+ lambda(stpResourceName, isStpServiceFunction) {
770
+ return buildCfLogicalName({
771
+ stpResourceName,
772
+ specifier: isStpServiceFunction ? { type: "CustomResource" } : void 0,
773
+ suffix: { cloudformationResourceType: "AWS::Lambda::Function" }
774
+ });
775
+ },
776
+ lambdaStpAlias(stpResourceName) {
777
+ return buildCfLogicalName({
778
+ stpResourceName,
779
+ specifier: {
780
+ type: "Stp"
781
+ },
782
+ suffix: { cloudformationResourceType: "AWS::Lambda::Alias" }
783
+ });
784
+ },
785
+ lambdaUrl(stpResourceName) {
786
+ return buildCfLogicalName({
787
+ stpResourceName,
788
+ suffix: { cloudformationResourceType: "AWS::Lambda::Url" }
789
+ });
790
+ },
791
+ codeDeployDeploymentGroup(stpResourceName) {
792
+ return buildCfLogicalName({
793
+ stpResourceName,
794
+ suffix: { cloudformationResourceType: "AWS::CodeDeploy::DeploymentGroup" }
795
+ });
796
+ },
797
+ customResource(stpResourceName) {
798
+ return buildCfLogicalName({
799
+ stpResourceName,
800
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
801
+ });
802
+ },
803
+ scriptCustomResource(stpResourceName) {
804
+ return buildCfLogicalName({
805
+ stpResourceName,
806
+ specifier: { type: "Script" },
807
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
808
+ });
809
+ },
810
+ batchStateMachine(stpResourceName) {
811
+ return buildCfLogicalName({
812
+ stpResourceName,
813
+ specifier: { type: "JobExecution" },
814
+ suffix: { cloudformationResourceType: "AWS::StepFunctions::StateMachine" }
815
+ });
816
+ },
817
+ batchJobDefinition(stpResourceName) {
818
+ return buildCfLogicalName({
819
+ stpResourceName,
820
+ suffix: { cloudformationResourceType: "AWS::Batch::JobDefinition" }
821
+ });
822
+ },
823
+ batchJobLogGroup(stpResourceName) {
824
+ return buildCfLogicalName({
825
+ stpResourceName,
826
+ suffix: { cloudformationResourceType: "AWS::Logs::LogGroup" }
827
+ });
828
+ },
829
+ globalStateMachinesRole() {
830
+ return buildCfLogicalName({
831
+ specifier: {
832
+ type: "GlobalStateMachine"
833
+ },
834
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
835
+ });
836
+ },
837
+ stateMachine(stpResourceName) {
838
+ return buildCfLogicalName({
839
+ stpResourceName,
840
+ suffix: { cloudformationResourceType: "AWS::StepFunctions::StateMachine" }
841
+ });
842
+ },
843
+ internetGateway() {
844
+ return buildCfLogicalName({
845
+ suffix: { cloudformationResourceType: "AWS::EC2::InternetGateway" }
846
+ });
847
+ },
848
+ vpcGatewayAttachment() {
849
+ return buildCfLogicalName({
850
+ suffix: { cloudformationResourceType: "AWS::EC2::VPCGatewayAttachment" }
851
+ });
852
+ },
853
+ routeTable(publicSubnet, subnetIndex) {
854
+ return buildCfLogicalName({
855
+ specifier: { type: publicSubnet ? "PublicSubnet" : "PrivateSubnet", typeIndex: subnetIndex },
856
+ suffix: { cloudformationResourceType: "AWS::EC2::RouteTable" }
857
+ });
858
+ },
859
+ internetGatewayRoute(subnetIndex) {
860
+ return buildCfLogicalName({
861
+ specifier: { type: "InternetGateway" },
862
+ suffix: { cloudformationResourceType: "AWS::EC2::Route", index: subnetIndex }
863
+ });
864
+ },
865
+ atlasMongoVpcRoute(publicSubnetTable, subnetIndex) {
866
+ return buildCfLogicalName({
867
+ specifier: { type: `AtlasMongo${publicSubnetTable ? "PublicSubnet" : "PrivateSubnet"}` },
868
+ suffix: { cloudformationResourceType: "AWS::EC2::Route", index: subnetIndex }
869
+ });
870
+ },
871
+ routeTableToSubnetAssociation(publicSubnet, subnetIndex) {
872
+ return buildCfLogicalName({
873
+ specifier: { type: publicSubnet ? "PublicSubnet" : "PrivateSubnet", typeIndex: subnetIndex },
874
+ suffix: { cloudformationResourceType: "AWS::EC2::SubnetRouteTableAssociation" }
875
+ });
876
+ },
877
+ natGateway(azIndex) {
878
+ return buildCfLogicalName({
879
+ suffix: { cloudformationResourceType: "AWS::EC2::NatGateway", index: azIndex }
880
+ });
881
+ },
882
+ natElasticIp(azIndex) {
883
+ return buildCfLogicalName({
884
+ specifier: { type: "Nat" },
885
+ suffix: { cloudformationResourceType: "AWS::EC2::EIP", index: azIndex }
886
+ });
887
+ },
888
+ natRoute(subnetIndex) {
889
+ return buildCfLogicalName({
890
+ specifier: { type: "NatPrivateSubnet" },
891
+ suffix: { cloudformationResourceType: "AWS::EC2::Route", index: subnetIndex }
892
+ });
893
+ },
894
+ eventBus(stpResourceName) {
895
+ return buildCfLogicalName({
896
+ stpResourceName,
897
+ suffix: { cloudformationResourceType: "AWS::Events::EventBus" }
898
+ });
899
+ },
900
+ eventBusArchive(stpResourceName) {
901
+ return buildCfLogicalName({
902
+ stpResourceName,
903
+ suffix: { cloudformationResourceType: "AWS::Events::Archive" }
904
+ });
905
+ },
906
+ ecsCluster(stpResourceName) {
907
+ return buildCfLogicalName({
908
+ stpResourceName,
909
+ suffix: { cloudformationResourceType: "AWS::ECS::Cluster" }
910
+ });
911
+ },
912
+ ecsTaskDefinition(stpResourceName) {
913
+ return buildCfLogicalName({
914
+ stpResourceName,
915
+ suffix: { cloudformationResourceType: "AWS::ECS::TaskDefinition" }
916
+ });
917
+ },
918
+ ecsService(stpResourceName, blueGreen) {
919
+ return buildCfLogicalName({
920
+ stpResourceName,
921
+ specifier: blueGreen ? { type: "BlueGreen" } : void 0,
922
+ suffix: { cloudformationResourceType: "AWS::ECS::Service" }
923
+ });
924
+ },
925
+ ecsExecutionRole() {
926
+ return buildCfLogicalName({
927
+ specifier: { type: "EcsExecution" },
928
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
929
+ });
930
+ },
931
+ ecsEc2InstanceRole() {
932
+ return buildCfLogicalName({
933
+ specifier: {
934
+ type: "EcsInstance"
935
+ },
936
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
937
+ });
938
+ },
939
+ ecsEc2AutoscalingGroupWarmPool(stpResourceName) {
940
+ return buildCfLogicalName({
941
+ stpResourceName,
942
+ suffix: { cloudformationResourceType: "AWS::AutoScaling::WarmPool" }
943
+ });
944
+ },
945
+ eventBusRoleForScheduledInstanceRefresh() {
946
+ return buildCfLogicalName({
947
+ specifier: { type: "ScheduledInstanceRefresh" },
948
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
949
+ });
950
+ },
951
+ schedulerRuleForScheduledInstanceRefresh(stpResourceName) {
952
+ return buildCfLogicalName({
953
+ stpResourceName,
954
+ specifier: { type: "ScheduledInstanceRefresh" },
955
+ suffix: { cloudformationResourceType: "AWS::Events::Rule" }
956
+ });
957
+ },
958
+ ecsEc2InstanceLaunchTemplate(stpResourceName) {
959
+ return buildCfLogicalName({
960
+ stpResourceName,
961
+ suffix: { cloudformationResourceType: "AWS::EC2::LaunchTemplate" }
962
+ });
963
+ },
964
+ ecsEc2AutoscalingGroup(stpResourceName) {
965
+ return buildCfLogicalName({
966
+ stpResourceName,
967
+ suffix: { cloudformationResourceType: "AWS::AutoScaling::AutoScalingGroup" }
968
+ });
969
+ },
970
+ ecsEc2ForceDeleteAutoscalingGroupCustomResource(stpResourceName) {
971
+ return buildCfLogicalName({
972
+ stpResourceName,
973
+ specifier: { type: "ForceDeleteAsg" },
974
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
975
+ });
976
+ },
977
+ ecsDisableManagedTerminationProtectionCustomResource(stpResourceName) {
978
+ return buildCfLogicalName({
979
+ stpResourceName,
980
+ specifier: { type: "DisableManagedTerminationProtection" },
981
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
982
+ });
983
+ },
984
+ ecsEc2CapacityProvider(stpResourceName) {
985
+ return buildCfLogicalName({
986
+ stpResourceName,
987
+ suffix: { cloudformationResourceType: "AWS::ECS::CapacityProvider" }
988
+ });
989
+ },
990
+ ecsEc2CapacityProviderAssociation(stpResourceName) {
991
+ return buildCfLogicalName({
992
+ stpResourceName,
993
+ suffix: { cloudformationResourceType: "AWS::ECS::ClusterCapacityProviderAssociations" }
994
+ });
995
+ },
996
+ ecsEc2InstanceProfile() {
997
+ return buildCfLogicalName({
998
+ specifier: {
999
+ type: "EcsInstance"
1000
+ },
1001
+ suffix: { cloudformationResourceType: "AWS::IAM::InstanceProfile" }
1002
+ });
1003
+ },
1004
+ ecsTaskRole(stpResourceName) {
1005
+ return buildCfLogicalName({
1006
+ stpResourceName,
1007
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
1008
+ });
1009
+ },
1010
+ ecsAutoScalingRole() {
1011
+ return buildCfLogicalName({
1012
+ specifier: { type: "EcsAutoScale" },
1013
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
1014
+ });
1015
+ },
1016
+ // ecsScheduledMaintenanceEventBusRule(stpResourceName: string) {
1017
+ // return buildCfLogicalName({
1018
+ // stpResourceName,
1019
+ // specifier: { type: 'ScheduledMaintenance' },
1020
+ // suffix: { cloudformationResourceType: 'AWS::Events::Rule' }
1021
+ // }).replaceAll('_', '');
1022
+ // },
1023
+ ecsScheduledMaintenanceLambdaPermission(stpResourceName) {
1024
+ return buildCfLogicalName({
1025
+ stpResourceName,
1026
+ specifier: { type: "ScheduledMaintenance" },
1027
+ suffix: { cloudformationResourceType: "AWS::Lambda::Permission" }
1028
+ }).replaceAll("_", "");
1029
+ },
1030
+ bastionEc2LaunchTemplate(stpResourceName) {
1031
+ return buildCfLogicalName({
1032
+ stpResourceName,
1033
+ suffix: { cloudformationResourceType: "AWS::EC2::LaunchTemplate" }
1034
+ });
1035
+ },
1036
+ bastionEc2InstanceProfile(stpResourceName) {
1037
+ return buildCfLogicalName({
1038
+ stpResourceName,
1039
+ suffix: { cloudformationResourceType: "AWS::IAM::InstanceProfile" }
1040
+ });
1041
+ },
1042
+ bastionEc2AutoscalingGroup(stpResourceName) {
1043
+ return buildCfLogicalName({
1044
+ stpResourceName,
1045
+ suffix: { cloudformationResourceType: "AWS::AutoScaling::AutoScalingGroup" }
1046
+ });
1047
+ },
1048
+ bastionSecurityGroup(stpResourceName) {
1049
+ return buildCfLogicalName({
1050
+ stpResourceName,
1051
+ suffix: { cloudformationResourceType: "AWS::EC2::SecurityGroup" }
1052
+ });
1053
+ },
1054
+ bastionCwAgentSsmAssociation(stpResourceName) {
1055
+ return buildCfLogicalName({
1056
+ stpResourceName,
1057
+ specifier: { type: "CwAgent" },
1058
+ suffix: { cloudformationResourceType: "AWS::SSM::Association" }
1059
+ });
1060
+ },
1061
+ bastionSsmAgentSsmAssociation(stpResourceName) {
1062
+ return buildCfLogicalName({
1063
+ stpResourceName,
1064
+ specifier: { type: "SsmAgent" },
1065
+ suffix: { cloudformationResourceType: "AWS::SSM::Association" }
1066
+ });
1067
+ },
1068
+ bastionRole(stpResourceName) {
1069
+ return buildCfLogicalName({
1070
+ stpResourceName,
1071
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
1072
+ });
1073
+ },
1074
+ bastionLogGroup(stpResourceName, logType) {
1075
+ return buildCfLogicalName({
1076
+ stpResourceName,
1077
+ specifier: { type: pascalCase(logType) },
1078
+ suffix: { cloudformationResourceType: "AWS::Logs::LogGroup" }
1079
+ });
1080
+ },
1081
+ bastionCloudwatchSsmDocument() {
1082
+ return buildCfLogicalName({
1083
+ specifier: { type: "BastionCloudwatchAgent" },
1084
+ suffix: { cloudformationResourceType: "AWS::SSM::Document" }
1085
+ });
1086
+ },
1087
+ serviceDiscoveryEcsService(stpResourceName, serviceTargetContainerPort) {
1088
+ return buildCfLogicalName({
1089
+ stpResourceName,
1090
+ specifier: { type: `Port${serviceTargetContainerPort}Discovery` },
1091
+ suffix: { cloudformationResourceType: "AWS::ServiceDiscovery::Service" }
1092
+ });
1093
+ },
1094
+ workloadSecurityGroup(stpResourceName) {
1095
+ return buildCfLogicalName({
1096
+ stpResourceName,
1097
+ suffix: { cloudformationResourceType: "AWS::EC2::SecurityGroup" }
1098
+ });
1099
+ },
1100
+ loadBalancerSecurityGroup(stpResourceName) {
1101
+ return buildCfLogicalName({
1102
+ stpResourceName,
1103
+ specifier: { type: "Lb" },
1104
+ suffix: { cloudformationResourceType: "AWS::EC2::SecurityGroup" }
1105
+ });
1106
+ },
1107
+ targetGroup({
1108
+ loadBalancerName,
1109
+ stpResourceName,
1110
+ targetContainerPort,
1111
+ blueGreen
1112
+ }) {
1113
+ return buildCfLogicalName({
1114
+ stpResourceName,
1115
+ specifier: {
1116
+ type: `${loadBalancerName}${targetContainerPort ? `ToPort${targetContainerPort}` : ""}${blueGreen ? "BG" : ""}`
1117
+ },
1118
+ suffix: { cloudformationResourceType: "AWS::ElasticLoadBalancingV2::TargetGroup" }
1119
+ });
1120
+ },
1121
+ lambdaRole(stpResourceName) {
1122
+ return buildCfLogicalName({
1123
+ stpResourceName,
1124
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
1125
+ });
1126
+ },
1127
+ defaultLambdaFunctionRole() {
1128
+ return buildCfLogicalName({
1129
+ specifier: { type: "Lambda" },
1130
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
1131
+ });
1132
+ },
1133
+ lambdaPermission(stpResourceName, eventIndex) {
1134
+ return buildCfLogicalName({
1135
+ stpResourceName,
1136
+ specifier: { type: "Event", typeIndex: eventIndex },
1137
+ suffix: { cloudformationResourceType: "AWS::Lambda::Permission" }
1138
+ });
1139
+ },
1140
+ lambdaPublicUrlPermission(stpResourceName) {
1141
+ return buildCfLogicalName({
1142
+ stpResourceName,
1143
+ specifier: { type: "PublicUrl" },
1144
+ suffix: { cloudformationResourceType: "AWS::Lambda::Permission" }
1145
+ });
1146
+ },
1147
+ lambdaIotEventPermission(workloadName, eventIndex) {
1148
+ return pascalCase(`${workloadName}-Event${eventIndex}-lambda-iotEventPermission`);
1149
+ },
1150
+ lambdaTargetGroupPermission(stpResourceName, loadBalancerName) {
1151
+ return buildCfLogicalName({
1152
+ stpResourceName,
1153
+ specifier: { type: `${loadBalancerName}TargetGroup` },
1154
+ suffix: { cloudformationResourceType: "AWS::Lambda::Permission" }
1155
+ });
1156
+ },
1157
+ httpApi(stpResourceName) {
1158
+ return buildCfLogicalName({
1159
+ stpResourceName,
1160
+ suffix: { cloudformationResourceType: "AWS::ApiGatewayV2::Api" }
1161
+ });
1162
+ },
1163
+ httpApiLogGroup(stpResourceName) {
1164
+ return buildCfLogicalName({
1165
+ stpResourceName,
1166
+ suffix: { cloudformationResourceType: "AWS::Logs::LogGroup" }
1167
+ });
1168
+ },
1169
+ httpApiLambdaIntegration({
1170
+ stpResourceName,
1171
+ stpHttpApiGatewayName
1172
+ }) {
1173
+ return buildCfLogicalName({
1174
+ stpResourceName,
1175
+ specifier: { type: stpHttpApiGatewayName },
1176
+ suffix: { cloudformationResourceType: "AWS::ApiGatewayV2::Integration" }
1177
+ });
1178
+ },
1179
+ httpApiContainerWorkloadIntegration({
1180
+ stpResourceName,
1181
+ stpHttpApiGatewayName,
1182
+ targetContainerPort
1183
+ }) {
1184
+ return buildCfLogicalName({
1185
+ stpResourceName,
1186
+ specifier: { type: `${stpHttpApiGatewayName}ToPort${targetContainerPort}` },
1187
+ suffix: { cloudformationResourceType: "AWS::ApiGatewayV2::Integration" }
1188
+ });
1189
+ },
1190
+ httpApiAuthorizer({ method, path, stpResourceName }) {
1191
+ return buildCfLogicalName({
1192
+ stpResourceName: "",
1193
+ specifier: {
1194
+ type: `${stpResourceName}-${method === "*" ? "Any" : method}-${path === "*" ? "Default" : path}`
1195
+ },
1196
+ suffix: { cloudformationResourceType: "AWS::ApiGatewayV2::Authorizer" }
1197
+ });
1198
+ },
1199
+ httpApiRoute({ method, path, stpResourceName }) {
1200
+ return buildCfLogicalName({
1201
+ stpResourceName: "",
1202
+ specifier: {
1203
+ type: `${stpResourceName}-${method === "*" ? "Any" : method}-${path === "*" ? "Default" : path}`
1204
+ },
1205
+ suffix: { cloudformationResourceType: "AWS::ApiGatewayV2::Route" }
1206
+ });
1207
+ },
1208
+ httpApiVpcLink(stpResourceName) {
1209
+ return buildCfLogicalName({
1210
+ stpResourceName,
1211
+ suffix: { cloudformationResourceType: "AWS::ApiGatewayV2::VpcLink" }
1212
+ });
1213
+ },
1214
+ httpApiVpcLinkSecurityGroup(stpResourceName) {
1215
+ return buildCfLogicalName({
1216
+ stpResourceName,
1217
+ specifier: { type: "VpcLink" },
1218
+ suffix: { cloudformationResourceType: "AWS::EC2::SecurityGroup" }
1219
+ });
1220
+ },
1221
+ httpApiLambdaPermission({
1222
+ stpResourceNameOfLambda,
1223
+ stpResourceNameOfHttpApiGateway
1224
+ }) {
1225
+ return buildCfLogicalName({
1226
+ stpResourceName: stpResourceNameOfLambda,
1227
+ specifier: { type: stpResourceNameOfHttpApiGateway },
1228
+ suffix: { cloudformationResourceType: "AWS::Lambda::Permission" }
1229
+ });
1230
+ },
1231
+ httpApiStage(stpResourceName) {
1232
+ return buildCfLogicalName({
1233
+ stpResourceName,
1234
+ suffix: { cloudformationResourceType: "AWS::ApiGatewayV2::Stage" }
1235
+ });
1236
+ },
1237
+ httpApiDomain(fullyQualifiedDomainName) {
1238
+ return buildCfLogicalName({
1239
+ stpResourceName: "",
1240
+ specifier: { type: getSpecifierForDomainResource(fullyQualifiedDomainName) },
1241
+ suffix: { cloudformationResourceType: "AWS::ApiGatewayV2::DomainName" }
1242
+ });
1243
+ },
1244
+ httpApiDefaultDomain(stpResourceName) {
1245
+ return buildCfLogicalName({
1246
+ stpResourceName,
1247
+ suffix: { cloudformationResourceType: "AWS::ApiGatewayV2::DomainName" }
1248
+ });
1249
+ },
1250
+ httpApiDomainMapping(fullyQualifiedDomainName) {
1251
+ return buildCfLogicalName({
1252
+ stpResourceName: "",
1253
+ specifier: { type: getSpecifierForDomainResource(fullyQualifiedDomainName) },
1254
+ suffix: { cloudformationResourceType: "AWS::ApiGatewayV2::ApiMapping" }
1255
+ });
1256
+ },
1257
+ httpApiDefaultDomainMapping(stpResourceName) {
1258
+ return buildCfLogicalName({
1259
+ stpResourceName,
1260
+ suffix: { cloudformationResourceType: "AWS::ApiGatewayV2::ApiMapping" }
1261
+ });
1262
+ },
1263
+ listener(exposurePort, stpResourceName) {
1264
+ return buildCfLogicalName({
1265
+ stpResourceName,
1266
+ specifier: { type: `Port${exposurePort}` },
1267
+ suffix: { cloudformationResourceType: "AWS::ElasticLoadBalancingV2::Listener" }
1268
+ });
1269
+ },
1270
+ listenerRule(exposurePort, stpResourceName, rulePriority) {
1271
+ return buildCfLogicalName({
1272
+ stpResourceName,
1273
+ specifier: { type: `Port${exposurePort}Priority${rulePriority}` },
1274
+ suffix: { cloudformationResourceType: "AWS::ElasticLoadBalancingV2::ListenerRule" }
1275
+ });
1276
+ },
1277
+ listenerCertificateList(exposurePort, stpResourceName) {
1278
+ return buildCfLogicalName({
1279
+ stpResourceName,
1280
+ specifier: { type: `Port${exposurePort}` },
1281
+ suffix: { cloudformationResourceType: "AWS::ElasticLoadBalancingV2::ListenerCertificate" }
1282
+ });
1283
+ },
1284
+ loadBalancer(stpResourceName) {
1285
+ return buildCfLogicalName({
1286
+ stpResourceName,
1287
+ suffix: { cloudformationResourceType: "AWS::ElasticLoadBalancingV2::LoadBalancer" }
1288
+ });
1289
+ },
1290
+ ecsLogGroup(stpResourceName, containerName) {
1291
+ return buildCfLogicalName({
1292
+ stpResourceName,
1293
+ specifier: { type: containerName },
1294
+ suffix: { cloudformationResourceType: "AWS::Logs::LogGroup" }
1295
+ });
1296
+ },
1297
+ autoScalingTarget(stpResourceName) {
1298
+ return buildCfLogicalName({
1299
+ stpResourceName,
1300
+ suffix: { cloudformationResourceType: "AWS::ApplicationAutoScaling::ScalableTarget" }
1301
+ });
1302
+ },
1303
+ dynamoAutoScalingTarget(stpResourceName, metric) {
1304
+ return buildCfLogicalName({
1305
+ stpResourceName,
1306
+ specifier: { type: metric },
1307
+ suffix: { cloudformationResourceType: "AWS::ApplicationAutoScaling::ScalableTarget" }
1308
+ });
1309
+ },
1310
+ autoScalingPolicy(stpResourceName, metric) {
1311
+ return buildCfLogicalName({
1312
+ stpResourceName,
1313
+ specifier: { type: metric },
1314
+ suffix: { cloudformationResourceType: "AWS::ApplicationAutoScaling::ScalingPolicy" }
1315
+ });
1316
+ },
1317
+ customResourceS3Events() {
1318
+ return buildCfLogicalName({
1319
+ specifier: { type: "Events" },
1320
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
1321
+ });
1322
+ },
1323
+ // @deprecated
1324
+ // stacktapeServiceCustomResourceEdgeFunctions() {
1325
+ // return buildCfLogicalName({
1326
+ // specifier: { type: 'EdgeFunctions' },
1327
+ // suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }
1328
+ // });
1329
+ // },
1330
+ customResourceSensitiveData() {
1331
+ return buildCfLogicalName({
1332
+ specifier: { type: "SensitiveData" },
1333
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
1334
+ });
1335
+ },
1336
+ customResourceAcceptVpcPeerings() {
1337
+ return buildCfLogicalName({
1338
+ specifier: { type: "AcceptVpcPeerings" },
1339
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
1340
+ });
1341
+ },
1342
+ customResourceDefaultDomainCert() {
1343
+ return buildCfLogicalName({
1344
+ specifier: { type: "DefaultDomainCert" },
1345
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
1346
+ });
1347
+ },
1348
+ customResourceEdgeLambdaBucket() {
1349
+ return buildCfLogicalName({
1350
+ specifier: { type: "EdgeLambdaBucket" },
1351
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
1352
+ });
1353
+ },
1354
+ customResourceEdgeLambda(stpResourceName) {
1355
+ return buildCfLogicalName({
1356
+ stpResourceName,
1357
+ specifier: { type: "EdgeLambda" },
1358
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
1359
+ });
1360
+ },
1361
+ customResourceDefaultDomain(stpResourceName, cdn) {
1362
+ return buildCfLogicalName({
1363
+ stpResourceName,
1364
+ specifier: { type: `${cdn ? "Cdn" : ""}DefaultDomain` },
1365
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
1366
+ });
1367
+ },
1368
+ customResourceDatabaseDeletionProtection(stpResourceName) {
1369
+ return buildCfLogicalName({
1370
+ stpResourceName,
1371
+ specifier: { type: "DeletionProtection" },
1372
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
1373
+ });
1374
+ },
1375
+ userPool(stpResourceName) {
1376
+ return buildCfLogicalName({
1377
+ stpResourceName,
1378
+ suffix: { cloudformationResourceType: "AWS::Cognito::UserPool" }
1379
+ });
1380
+ },
1381
+ userPoolClient(stpResourceName) {
1382
+ return buildCfLogicalName({
1383
+ stpResourceName,
1384
+ suffix: { cloudformationResourceType: "AWS::Cognito::UserPoolClient" }
1385
+ });
1386
+ },
1387
+ userPoolDomain(stpResourceName) {
1388
+ return buildCfLogicalName({
1389
+ stpResourceName,
1390
+ suffix: { cloudformationResourceType: "AWS::Cognito::UserPoolDomain" }
1391
+ });
1392
+ },
1393
+ identityProvider(stpResourceName, type) {
1394
+ return buildCfLogicalName({
1395
+ stpResourceName,
1396
+ specifier: { type },
1397
+ suffix: { cloudformationResourceType: "AWS::Cognito::UserPoolIdentityProvider" }
1398
+ });
1399
+ },
1400
+ cognitoLambdaHookPermission(stpResourceName, hookName) {
1401
+ return buildCfLogicalName({
1402
+ stpResourceName,
1403
+ specifier: { type: hookName },
1404
+ suffix: { cloudformationResourceType: "AWS::Lambda::Permission" }
1405
+ });
1406
+ },
1407
+ cognitoUserPoolDetailsCustomResource(stpResourceName) {
1408
+ return buildCfLogicalName({
1409
+ stpResourceName,
1410
+ specifier: { type: "UserPoolDetails" },
1411
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
1412
+ });
1413
+ },
1414
+ userPoolUiCustomizationAttachment(stpResourceName) {
1415
+ return buildCfLogicalName({
1416
+ stpResourceName,
1417
+ suffix: { cloudformationResourceType: "AWS::Cognito::UserPoolUICustomizationAttachment" }
1418
+ });
1419
+ },
1420
+ serviceDiscoveryPrivateNamespace() {
1421
+ return buildCfLogicalName({
1422
+ specifier: { type: "Discovery" },
1423
+ suffix: { cloudformationResourceType: "AWS::ServiceDiscovery::Service" }
1424
+ });
1425
+ },
1426
+ lambdaCodeDeployApp() {
1427
+ return buildCfLogicalName({
1428
+ specifier: { type: "LambdaCodeDeploy" },
1429
+ suffix: { cloudformationResourceType: "AWS::CodeDeploy::Application" }
1430
+ });
1431
+ },
1432
+ ecsCodeDeployApp() {
1433
+ return buildCfLogicalName({
1434
+ specifier: { type: "ECSCodeDeploy" },
1435
+ suffix: { cloudformationResourceType: "AWS::CodeDeploy::Application" }
1436
+ });
1437
+ },
1438
+ stackBudget(stackName) {
1439
+ return buildCfLogicalName({
1440
+ specifier: { type: pascalCase(stackName).replaceAll("_", "") },
1441
+ suffix: { cloudformationResourceType: "AWS::Budgets::Budget" }
1442
+ });
1443
+ },
1444
+ upstashRedisDatabase(stpResourceName) {
1445
+ return buildCfLogicalName({
1446
+ stpResourceName,
1447
+ suffix: { cloudformationResourceType: "Upstash::DatabasesV1::Database" }
1448
+ });
1449
+ },
1450
+ upstashCredentialsProvider() {
1451
+ return buildCfLogicalName({
1452
+ specifier: { type: "UpstashCredentialsProvider" },
1453
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
1454
+ });
1455
+ },
1456
+ cloudwatchAlarm(stacktapeAlarmName) {
1457
+ return buildCfLogicalName({
1458
+ stpResourceName: stacktapeAlarmName,
1459
+ suffix: { cloudformationResourceType: "AWS::CloudWatch::Alarm" }
1460
+ }).replaceAll("_", "");
1461
+ },
1462
+ cloudwatchAlarmEventBusNotificationRule(stacktapeAlarmName) {
1463
+ return buildCfLogicalName({
1464
+ stpResourceName: stacktapeAlarmName,
1465
+ specifier: { type: "Notification" },
1466
+ suffix: { cloudformationResourceType: "AWS::Events::Rule" }
1467
+ }).replaceAll("_", "");
1468
+ },
1469
+ cloudwatchAlarmEventBusNotificationRuleLambdaPermission(stacktapeAlarmName) {
1470
+ return buildCfLogicalName({
1471
+ stpResourceName: stacktapeAlarmName,
1472
+ specifier: { type: "Notification" },
1473
+ suffix: { cloudformationResourceType: "AWS::Lambda::Permission" }
1474
+ }).replaceAll("_", "");
1475
+ },
1476
+ sqsQueue(stpResourceName) {
1477
+ return buildCfLogicalName({
1478
+ stpResourceName,
1479
+ suffix: { cloudformationResourceType: "AWS::SQS::Queue" }
1480
+ }).replaceAll("_", "");
1481
+ },
1482
+ sqsQueuePolicy(stpResourceName) {
1483
+ return buildCfLogicalName({
1484
+ stpResourceName,
1485
+ suffix: { cloudformationResourceType: "AWS::SQS::QueuePolicy" }
1486
+ });
1487
+ },
1488
+ snsTopic(stpResourceName) {
1489
+ return buildCfLogicalName({
1490
+ stpResourceName,
1491
+ suffix: { cloudformationResourceType: "AWS::SNS::Topic" }
1492
+ }).replaceAll("_", "");
1493
+ },
1494
+ webAppFirewallCustomResource(stpResourceName) {
1495
+ return buildCfLogicalName({
1496
+ stpResourceName,
1497
+ specifier: { type: "WebAppFirewall" },
1498
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
1499
+ });
1500
+ },
1501
+ webAppFirewallAssociation(stpResourceName) {
1502
+ return buildCfLogicalName({
1503
+ stpResourceName,
1504
+ suffix: { cloudformationResourceType: "AWS::WAFv2::WebACLAssociation" }
1505
+ });
1506
+ },
1507
+ openSearchDomain(stpResourceName) {
1508
+ return buildCfLogicalName({
1509
+ stpResourceName,
1510
+ suffix: { cloudformationResourceType: "AWS::OpenSearchService::Domain" }
1511
+ });
1512
+ },
1513
+ openSearchCustomResource(stpResourceName) {
1514
+ return buildCfLogicalName({
1515
+ stpResourceName,
1516
+ specifier: { type: "OpenSearch" },
1517
+ suffix: { cloudformationResourceType: "AWS::CloudFormation::CustomResource" }
1518
+ });
1519
+ },
1520
+ openSearchSecurityGroup(stpResourceName) {
1521
+ return buildCfLogicalName({
1522
+ stpResourceName,
1523
+ suffix: { cloudformationResourceType: "AWS::EC2::SecurityGroup" }
1524
+ });
1525
+ },
1526
+ logForwardingFirehoseToS3Role(stpResourceName) {
1527
+ return buildCfLogicalName({
1528
+ stpResourceName,
1529
+ specifier: { type: "LogForwardingS3" },
1530
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
1531
+ });
1532
+ },
1533
+ logForwardingCwToFirehoseRole({ logGroupCfLogicalName }) {
1534
+ return buildCfLogicalName({
1535
+ stpResourceName: logGroupCfLogicalName,
1536
+ specifier: { type: "CwToFirehose" },
1537
+ suffix: { cloudformationResourceType: "AWS::IAM::Role" }
1538
+ });
1539
+ },
1540
+ logForwardingFailedEventsBucket(stpResourceName) {
1541
+ return buildCfLogicalName({
1542
+ stpResourceName,
1543
+ specifier: { type: "LogForwardingFailedRecords" },
1544
+ suffix: { cloudformationResourceType: "AWS::S3::Bucket" }
1545
+ });
1546
+ },
1547
+ logForwardingFirehoseDeliveryStream({ logGroupCfLogicalName }) {
1548
+ return buildCfLogicalName({
1549
+ stpResourceName: logGroupCfLogicalName,
1550
+ suffix: { cloudformationResourceType: "AWS::KinesisFirehose::DeliveryStream" }
1551
+ });
1552
+ },
1553
+ logForwardingSubscriptionFilter({ logGroupCfLogicalName }) {
1554
+ return buildCfLogicalName({
1555
+ stpResourceName: logGroupCfLogicalName,
1556
+ suffix: { cloudformationResourceType: "AWS::Logs::SubscriptionFilter" }
1557
+ });
1558
+ }
1559
+ };
1560
+ var buildCfLogicalName = /* @__PURE__ */ __name(({
1561
+ stpResourceName,
1562
+ specifier,
1563
+ suffix
1564
+ }) => {
1565
+ const splittedType = suffix.cloudformationResourceType.split(":");
1566
+ const resolvedParentName = stpResourceName || "Stp";
1567
+ const resolvedSpecifier = specifier ? `${specifier.type}${specifier.typeIndex !== void 0 ? specifier.typeIndex : ""}${specifier.subtype !== void 0 ? `-${specifier.subtype}` : ""}` : "";
1568
+ const resolvedSuffix = `${splittedType[splittedType.length - 1]}${suffix.index !== void 0 ? suffix.index : ""}`;
1569
+ return pascalCase(`${resolvedParentName}-${resolvedSpecifier}-${resolvedSuffix}`);
1570
+ }, "buildCfLogicalName");
1571
+ var getSpecifierForDomainResource = /* @__PURE__ */ __name((fullyQualifiedDomainName) => {
1572
+ if (pascalCase(fullyQualifiedDomainName).replace("_", "").length < 85) {
1573
+ return pascalCase(fullyQualifiedDomainName).replace("_", "");
1574
+ }
1575
+ const splittedDomain = fullyQualifiedDomainName.split(".").map((subdomain) => subdomain.split("-")).flat();
1576
+ const maxCharactersPerWord = Math.floor(85 / splittedDomain.length);
1577
+ return splittedDomain.map((word) => pascalCase(word.slice(0, maxCharactersPerWord)).replace("_", "")).join("");
1578
+ }, "getSpecifierForDomainResource");
1579
+
1580
+ // src/api/npm/ts/child-resources.ts
1581
+ var CHILD_RESOURCES = {
1582
+ // ===== BUCKET =====
1583
+ bucket: [
1584
+ { logicalName: cfLogicalNames.bucket, resourceType: "AWS::S3::Bucket" },
1585
+ { logicalName: cfLogicalNames.bucketPolicy, resourceType: "AWS::S3::BucketPolicy", conditional: true },
1586
+ {
1587
+ logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,
1588
+ resourceType: "AWS::CloudFront::CloudFrontOriginAccessIdentity",
1589
+ conditional: true
1590
+ },
1591
+ {
1592
+ logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,
1593
+ resourceType: "AWS::CloudFront::CachePolicy",
1594
+ conditional: true
1595
+ },
1596
+ {
1597
+ logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,
1598
+ resourceType: "AWS::CloudFront::CachePolicy",
1599
+ conditional: true
1600
+ },
1601
+ {
1602
+ logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,
1603
+ resourceType: "AWS::CloudFront::OriginRequestPolicy",
1604
+ conditional: true
1605
+ },
1606
+ {
1607
+ logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,
1608
+ resourceType: "AWS::CloudFront::OriginRequestPolicy",
1609
+ conditional: true
1610
+ },
1611
+ {
1612
+ logicalName: cfLogicalNames.cloudfrontDistribution,
1613
+ resourceType: "AWS::CloudFront::Distribution",
1614
+ conditional: true
1615
+ },
1616
+ {
1617
+ logicalName: cfLogicalNames.customResourceDefaultDomain,
1618
+ resourceType: "AWS::CloudFormation::CustomResource",
1619
+ conditional: true
1620
+ },
1621
+ { logicalName: cfLogicalNames.dnsRecord, resourceType: "AWS::Route53::RecordSet", conditional: true }
1622
+ ],
1623
+ // ===== FUNCTION =====
1624
+ function: [
1625
+ { logicalName: cfLogicalNames.lambdaRole, resourceType: "AWS::IAM::Role" },
1626
+ { logicalName: cfLogicalNames.lambda, resourceType: "AWS::Lambda::Function" },
1627
+ { logicalName: cfLogicalNames.efsAccessPoint, resourceType: "AWS::EFS::AccessPoint", conditional: true },
1628
+ { logicalName: cfLogicalNames.workloadSecurityGroup, resourceType: "AWS::EC2::SecurityGroup", conditional: true },
1629
+ { logicalName: cfLogicalNames.lambdaUrl, resourceType: "AWS::Lambda::Url", conditional: true },
1630
+ {
1631
+ logicalName: cfLogicalNames.lambdaPublicUrlPermission,
1632
+ resourceType: "AWS::Lambda::Permission",
1633
+ conditional: true
1634
+ },
1635
+ { logicalName: cfLogicalNames.lambdaLogGroup, resourceType: "AWS::Logs::LogGroup", conditional: true },
1636
+ {
1637
+ logicalName: cfLogicalNames.lambdaInvokeConfig,
1638
+ resourceType: "AWS::Lambda::EventInvokeConfig",
1639
+ conditional: true
1640
+ },
1641
+ {
1642
+ logicalName: cfLogicalNames.lambdaCodeDeployApp,
1643
+ resourceType: "AWS::CodeDeploy::Application",
1644
+ conditional: true
1645
+ },
1646
+ {
1647
+ logicalName: cfLogicalNames.lambdaVersionPublisherCustomResource,
1648
+ resourceType: "AWS::CloudFormation::CustomResource",
1649
+ conditional: true
1650
+ },
1651
+ {
1652
+ logicalName: cfLogicalNames.codeDeployDeploymentGroup,
1653
+ resourceType: "AWS::CodeDeploy::DeploymentGroup",
1654
+ conditional: true
1655
+ },
1656
+ { logicalName: cfLogicalNames.lambdaStpAlias, resourceType: "AWS::Lambda::Alias", conditional: true },
1657
+ {
1658
+ logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,
1659
+ resourceType: "AWS::CloudFront::CloudFrontOriginAccessIdentity",
1660
+ conditional: true
1661
+ },
1662
+ {
1663
+ logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,
1664
+ resourceType: "AWS::CloudFront::CachePolicy",
1665
+ conditional: true,
1666
+ unresolvable: true
1667
+ },
1668
+ {
1669
+ logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,
1670
+ resourceType: "AWS::CloudFront::CachePolicy",
1671
+ conditional: true
1672
+ },
1673
+ {
1674
+ logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,
1675
+ resourceType: "AWS::CloudFront::OriginRequestPolicy",
1676
+ conditional: true,
1677
+ unresolvable: true
1678
+ },
1679
+ {
1680
+ logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,
1681
+ resourceType: "AWS::CloudFront::OriginRequestPolicy",
1682
+ conditional: true
1683
+ },
1684
+ {
1685
+ logicalName: cfLogicalNames.cloudfrontDistribution,
1686
+ resourceType: "AWS::CloudFront::Distribution",
1687
+ conditional: true,
1688
+ unresolvable: true
1689
+ },
1690
+ {
1691
+ logicalName: cfLogicalNames.customResourceDefaultDomain,
1692
+ resourceType: "AWS::CloudFormation::CustomResource",
1693
+ conditional: true
1694
+ },
1695
+ { logicalName: cfLogicalNames.dnsRecord, resourceType: "AWS::Route53::RecordSet", conditional: true },
1696
+ {
1697
+ logicalName: cfLogicalNames.lambdaPermission,
1698
+ resourceType: "AWS::Lambda::Permission",
1699
+ conditional: true,
1700
+ unresolvable: true
1701
+ }
1702
+ ],
1703
+ // ===== RELATIONAL DATABASE =====
1704
+ "relational-database": [
1705
+ { logicalName: cfLogicalNames.dbSubnetGroup, resourceType: "AWS::RDS::DBSubnetGroup" },
1706
+ { logicalName: cfLogicalNames.dbSecurityGroup, resourceType: "AWS::EC2::SecurityGroup" },
1707
+ {
1708
+ logicalName: cfLogicalNames.customResourceDatabaseDeletionProtection,
1709
+ resourceType: "AWS::CloudFormation::CustomResource",
1710
+ conditional: true
1711
+ },
1712
+ { logicalName: cfLogicalNames.auroraDbCluster, resourceType: "AWS::RDS::DBCluster", conditional: true },
1713
+ {
1714
+ logicalName: cfLogicalNames.auroraDbClusterParameterGroup,
1715
+ resourceType: "AWS::RDS::DBClusterParameterGroup",
1716
+ conditional: true
1717
+ },
1718
+ {
1719
+ logicalName: cfLogicalNames.auroraDbClusterLogGroup,
1720
+ resourceType: "AWS::Logs::LogGroup",
1721
+ conditional: true,
1722
+ unresolvable: true
1723
+ },
1724
+ {
1725
+ logicalName: cfLogicalNames.auroraDbInstance,
1726
+ resourceType: "AWS::RDS::DBInstance",
1727
+ conditional: true,
1728
+ unresolvable: true
1729
+ },
1730
+ {
1731
+ logicalName: cfLogicalNames.auroraDbInstanceParameterGroup,
1732
+ resourceType: "AWS::RDS::DBParameterGroup",
1733
+ conditional: true
1734
+ },
1735
+ { logicalName: cfLogicalNames.dbInstance, resourceType: "AWS::RDS::DBInstance", conditional: true },
1736
+ {
1737
+ logicalName: cfLogicalNames.dbInstanceLogGroup,
1738
+ resourceType: "AWS::Logs::LogGroup",
1739
+ conditional: true,
1740
+ unresolvable: true
1741
+ },
1742
+ { logicalName: cfLogicalNames.dbOptionGroup, resourceType: "AWS::RDS::OptionGroup", conditional: true },
1743
+ {
1744
+ logicalName: cfLogicalNames.dbInstanceParameterGroup,
1745
+ resourceType: "AWS::RDS::DBParameterGroup",
1746
+ conditional: true
1747
+ },
1748
+ {
1749
+ logicalName: cfLogicalNames.dbReplica,
1750
+ resourceType: "AWS::RDS::DBInstance",
1751
+ conditional: true,
1752
+ unresolvable: true
1753
+ },
1754
+ {
1755
+ logicalName: cfLogicalNames.dbReplicaLogGroup,
1756
+ resourceType: "AWS::Logs::LogGroup",
1757
+ conditional: true,
1758
+ unresolvable: true
1759
+ }
1760
+ ],
1761
+ // ===== DYNAMO DB TABLE =====
1762
+ "dynamo-db-table": [{ logicalName: cfLogicalNames.dynamoGlobalTable, resourceType: "AWS::DynamoDB::GlobalTable" }],
1763
+ // ===== HTTP API GATEWAY =====
1764
+ "http-api-gateway": [
1765
+ { logicalName: cfLogicalNames.httpApi, resourceType: "AWS::ApiGatewayV2::Api" },
1766
+ { logicalName: cfLogicalNames.httpApiStage, resourceType: "AWS::ApiGatewayV2::Stage" },
1767
+ { logicalName: cfLogicalNames.httpApiLogGroup, resourceType: "AWS::Logs::LogGroup", conditional: true },
1768
+ {
1769
+ logicalName: cfLogicalNames.httpApiVpcLinkSecurityGroup,
1770
+ resourceType: "AWS::EC2::SecurityGroup",
1771
+ conditional: true
1772
+ },
1773
+ { logicalName: cfLogicalNames.httpApiVpcLink, resourceType: "AWS::ApiGatewayV2::VpcLink", conditional: true },
1774
+ { logicalName: cfLogicalNames.httpApiDomain, resourceType: "AWS::ApiGatewayV2::DomainName", conditional: true },
1775
+ {
1776
+ logicalName: cfLogicalNames.httpApiDomainMapping,
1777
+ resourceType: "AWS::ApiGatewayV2::ApiMapping",
1778
+ conditional: true
1779
+ },
1780
+ {
1781
+ logicalName: cfLogicalNames.httpApiDefaultDomain,
1782
+ resourceType: "AWS::ApiGatewayV2::DomainName",
1783
+ conditional: true
1784
+ },
1785
+ {
1786
+ logicalName: cfLogicalNames.httpApiDefaultDomainMapping,
1787
+ resourceType: "AWS::ApiGatewayV2::ApiMapping",
1788
+ conditional: true
1789
+ },
1790
+ {
1791
+ logicalName: cfLogicalNames.customResourceDefaultDomain,
1792
+ resourceType: "AWS::CloudFormation::CustomResource",
1793
+ conditional: true
1794
+ },
1795
+ { logicalName: cfLogicalNames.dnsRecord, resourceType: "AWS::Route53::RecordSet", conditional: true },
1796
+ {
1797
+ logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,
1798
+ resourceType: "AWS::CloudFront::CloudFrontOriginAccessIdentity",
1799
+ conditional: true
1800
+ },
1801
+ {
1802
+ logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,
1803
+ resourceType: "AWS::CloudFront::CachePolicy",
1804
+ conditional: true
1805
+ },
1806
+ {
1807
+ logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,
1808
+ resourceType: "AWS::CloudFront::CachePolicy",
1809
+ conditional: true
1810
+ },
1811
+ {
1812
+ logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,
1813
+ resourceType: "AWS::CloudFront::OriginRequestPolicy",
1814
+ conditional: true
1815
+ },
1816
+ {
1817
+ logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,
1818
+ resourceType: "AWS::CloudFront::OriginRequestPolicy",
1819
+ conditional: true
1820
+ },
1821
+ {
1822
+ logicalName: cfLogicalNames.cloudfrontDistribution,
1823
+ resourceType: "AWS::CloudFront::Distribution",
1824
+ conditional: true
1825
+ }
1826
+ ],
1827
+ // ===== BATCH JOB =====
1828
+ "batch-job": [
1829
+ { logicalName: cfLogicalNames.batchServiceRole, resourceType: "AWS::IAM::Role", conditional: true },
1830
+ { logicalName: cfLogicalNames.batchSpotFleetRole, resourceType: "AWS::IAM::Role", conditional: true },
1831
+ { logicalName: cfLogicalNames.batchInstanceRole, resourceType: "AWS::IAM::Role", conditional: true },
1832
+ { logicalName: cfLogicalNames.batchInstanceProfile, resourceType: "AWS::IAM::InstanceProfile", conditional: true },
1833
+ { logicalName: cfLogicalNames.batchStateMachineExecutionRole, resourceType: "AWS::IAM::Role", conditional: true },
1834
+ {
1835
+ logicalName: cfLogicalNames.batchInstanceLaunchTemplate,
1836
+ resourceType: "AWS::EC2::LaunchTemplate",
1837
+ conditional: true
1838
+ },
1839
+ {
1840
+ logicalName: cfLogicalNames.batchInstanceDefaultSecurityGroup,
1841
+ resourceType: "AWS::EC2::SecurityGroup",
1842
+ conditional: true
1843
+ },
1844
+ {
1845
+ logicalName: cfLogicalNames.batchComputeEnvironment,
1846
+ resourceType: "AWS::Batch::ComputeEnvironment",
1847
+ conditional: true
1848
+ },
1849
+ { logicalName: cfLogicalNames.batchJobQueue, resourceType: "AWS::Batch::JobQueue", conditional: true },
1850
+ { logicalName: cfLogicalNames.batchJobDefinition, resourceType: "AWS::Batch::JobDefinition" },
1851
+ { logicalName: cfLogicalNames.batchStateMachine, resourceType: "AWS::StepFunctions::StateMachine" },
1852
+ { logicalName: cfLogicalNames.batchJobLogGroup, resourceType: "AWS::Logs::LogGroup", conditional: true },
1853
+ { logicalName: cfLogicalNames.batchJobExecutionRole, resourceType: "AWS::IAM::Role" },
1854
+ {
1855
+ logicalName: cfLogicalNames.atlasMongoUserAssociatedWithRole,
1856
+ resourceType: "MongoDB::StpAtlasV1::DatabaseUser",
1857
+ conditional: true
1858
+ }
1859
+ ],
1860
+ // ===== EVENT BUS =====
1861
+ "event-bus": [
1862
+ { logicalName: cfLogicalNames.eventBus, resourceType: "AWS::Events::EventBus" },
1863
+ { logicalName: cfLogicalNames.eventBusArchive, resourceType: "AWS::Events::Archive", conditional: true }
1864
+ ],
1865
+ // ===== STATE MACHINE =====
1866
+ "state-machine": [
1867
+ { logicalName: cfLogicalNames.globalStateMachinesRole, resourceType: "AWS::IAM::Role", conditional: true },
1868
+ { logicalName: cfLogicalNames.stateMachine, resourceType: "AWS::StepFunctions::StateMachine" }
1869
+ ],
1870
+ // ===== REDIS CLUSTER =====
1871
+ "redis-cluster": [
1872
+ { logicalName: cfLogicalNames.redisParameterGroup, resourceType: "AWS::ElastiCache::ParameterGroup" },
1873
+ { logicalName: cfLogicalNames.redisSubnetGroup, resourceType: "AWS::ElastiCache::SubnetGroup" },
1874
+ { logicalName: cfLogicalNames.redisSecurityGroup, resourceType: "AWS::EC2::SecurityGroup" },
1875
+ { logicalName: cfLogicalNames.redisLogGroup, resourceType: "AWS::Logs::LogGroup", conditional: true },
1876
+ { logicalName: cfLogicalNames.redisReplicationGroup, resourceType: "AWS::ElastiCache::ReplicationGroup" }
1877
+ ],
1878
+ // ===== MONGO DB ATLAS CLUSTER =====
1879
+ "mongo-db-atlas-cluster": [
1880
+ {
1881
+ logicalName: cfLogicalNames.atlasMongoCredentialsProvider,
1882
+ resourceType: "AWS::CloudFormation::CustomResource",
1883
+ conditional: true
1884
+ },
1885
+ { logicalName: cfLogicalNames.atlasMongoProject, resourceType: "MongoDB::StpAtlasV1::Project", conditional: true },
1886
+ {
1887
+ logicalName: cfLogicalNames.atlasMongoProjectIpAccessList,
1888
+ resourceType: "MongoDB::StpAtlasV1::ProjectIpAccessList",
1889
+ conditional: true
1890
+ },
1891
+ {
1892
+ logicalName: cfLogicalNames.atlasMongoProjectVpcNetworkContainer,
1893
+ resourceType: "MongoDB::StpAtlasV1::NetworkContainer",
1894
+ conditional: true
1895
+ },
1896
+ {
1897
+ logicalName: cfLogicalNames.atlasMongoProjectVpcNetworkPeering,
1898
+ resourceType: "MongoDB::StpAtlasV1::NetworkPeering",
1899
+ conditional: true
1900
+ },
1901
+ { logicalName: cfLogicalNames.atlasMongoVpcRoute, resourceType: "AWS::EC2::Route", conditional: true },
1902
+ { logicalName: cfLogicalNames.atlasMongoCluster, resourceType: "MongoDB::StpAtlasV1::Cluster" },
1903
+ {
1904
+ logicalName: cfLogicalNames.atlasMongoClusterMasterUser,
1905
+ resourceType: "MongoDB::StpAtlasV1::DatabaseUser",
1906
+ conditional: true
1907
+ }
1908
+ ],
1909
+ // ===== USER AUTH POOL =====
1910
+ "user-auth-pool": [
1911
+ { logicalName: cfLogicalNames.userPool, resourceType: "AWS::Cognito::UserPool" },
1912
+ { logicalName: cfLogicalNames.snsRoleSendSmsFromCognito, resourceType: "AWS::IAM::Role" },
1913
+ { logicalName: cfLogicalNames.userPoolClient, resourceType: "AWS::Cognito::UserPoolClient" },
1914
+ { logicalName: cfLogicalNames.userPoolDomain, resourceType: "AWS::Cognito::UserPoolDomain" },
1915
+ {
1916
+ logicalName: cfLogicalNames.cognitoUserPoolDetailsCustomResource,
1917
+ resourceType: "AWS::CloudFormation::CustomResource"
1918
+ },
1919
+ {
1920
+ logicalName: cfLogicalNames.identityProvider,
1921
+ resourceType: "AWS::Cognito::UserPoolIdentityProvider",
1922
+ conditional: true
1923
+ },
1924
+ {
1925
+ logicalName: cfLogicalNames.cognitoLambdaHookPermission,
1926
+ resourceType: "AWS::Lambda::Permission",
1927
+ conditional: true
1928
+ },
1929
+ {
1930
+ logicalName: cfLogicalNames.userPoolUiCustomizationAttachment,
1931
+ resourceType: "AWS::Cognito::UserPoolUICustomizationAttachment",
1932
+ conditional: true
1933
+ },
1934
+ {
1935
+ logicalName: cfLogicalNames.webAppFirewallAssociation,
1936
+ resourceType: "AWS::WAFv2::WebACLAssociation",
1937
+ conditional: true
1938
+ }
1939
+ ],
1940
+ // ===== UPSTASH REDIS =====
1941
+ "upstash-redis": [
1942
+ {
1943
+ logicalName: cfLogicalNames.upstashCredentialsProvider,
1944
+ resourceType: "AWS::CloudFormation::CustomResource",
1945
+ conditional: true
1946
+ },
1947
+ { logicalName: cfLogicalNames.upstashRedisDatabase, resourceType: "Upstash::Redis::Database" }
1948
+ ],
1949
+ // ===== APPLICATION LOAD BALANCER =====
1950
+ "application-load-balancer": [
1951
+ { logicalName: cfLogicalNames.loadBalancer, resourceType: "AWS::ElasticLoadBalancingV2::LoadBalancer" },
1952
+ { logicalName: cfLogicalNames.loadBalancerSecurityGroup, resourceType: "AWS::EC2::SecurityGroup" },
1953
+ {
1954
+ logicalName: cfLogicalNames.webAppFirewallAssociation,
1955
+ resourceType: "AWS::WAFv2::WebACLAssociation",
1956
+ conditional: true
1957
+ },
1958
+ { logicalName: cfLogicalNames.listener, resourceType: "AWS::ElasticLoadBalancingV2::Listener", conditional: true },
1959
+ {
1960
+ logicalName: cfLogicalNames.customResourceDefaultDomain,
1961
+ resourceType: "AWS::CloudFormation::CustomResource",
1962
+ conditional: true
1963
+ },
1964
+ { logicalName: cfLogicalNames.dnsRecord, resourceType: "AWS::Route53::RecordSet", conditional: true },
1965
+ {
1966
+ logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,
1967
+ resourceType: "AWS::CloudFront::CloudFrontOriginAccessIdentity",
1968
+ conditional: true
1969
+ },
1970
+ {
1971
+ logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,
1972
+ resourceType: "AWS::CloudFront::CachePolicy",
1973
+ conditional: true
1974
+ },
1975
+ {
1976
+ logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,
1977
+ resourceType: "AWS::CloudFront::CachePolicy",
1978
+ conditional: true
1979
+ },
1980
+ {
1981
+ logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,
1982
+ resourceType: "AWS::CloudFront::OriginRequestPolicy",
1983
+ conditional: true
1984
+ },
1985
+ {
1986
+ logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,
1987
+ resourceType: "AWS::CloudFront::OriginRequestPolicy",
1988
+ conditional: true
1989
+ },
1990
+ {
1991
+ logicalName: cfLogicalNames.cloudfrontDistribution,
1992
+ resourceType: "AWS::CloudFront::Distribution",
1993
+ conditional: true
1994
+ }
1995
+ ],
1996
+ // ===== NETWORK LOAD BALANCER =====
1997
+ "network-load-balancer": [
1998
+ { logicalName: cfLogicalNames.loadBalancer, resourceType: "AWS::ElasticLoadBalancingV2::LoadBalancer" },
1999
+ { logicalName: cfLogicalNames.loadBalancerSecurityGroup, resourceType: "AWS::EC2::SecurityGroup" },
2000
+ { logicalName: cfLogicalNames.listener, resourceType: "AWS::ElasticLoadBalancingV2::Listener", conditional: true },
2001
+ {
2002
+ logicalName: cfLogicalNames.customResourceDefaultDomain,
2003
+ resourceType: "AWS::CloudFormation::CustomResource",
2004
+ conditional: true
2005
+ },
2006
+ { logicalName: cfLogicalNames.dnsRecord, resourceType: "AWS::Route53::RecordSet", conditional: true }
2007
+ ],
2008
+ // ===== HOSTING BUCKET =====
2009
+ // Hosting bucket delegates to a bucket resource, so it includes all bucket child resources
2010
+ "hosting-bucket": [
2011
+ { logicalName: cfLogicalNames.bucket, resourceType: "AWS::S3::Bucket" },
2012
+ { logicalName: cfLogicalNames.bucketPolicy, resourceType: "AWS::S3::BucketPolicy", conditional: true },
2013
+ {
2014
+ logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,
2015
+ resourceType: "AWS::CloudFront::CloudFrontOriginAccessIdentity",
2016
+ conditional: true
2017
+ },
2018
+ {
2019
+ logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,
2020
+ resourceType: "AWS::CloudFront::CachePolicy",
2021
+ conditional: true
2022
+ },
2023
+ {
2024
+ logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,
2025
+ resourceType: "AWS::CloudFront::CachePolicy",
2026
+ conditional: true
2027
+ },
2028
+ {
2029
+ logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,
2030
+ resourceType: "AWS::CloudFront::OriginRequestPolicy",
2031
+ conditional: true
2032
+ },
2033
+ {
2034
+ logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,
2035
+ resourceType: "AWS::CloudFront::OriginRequestPolicy",
2036
+ conditional: true
2037
+ },
2038
+ {
2039
+ logicalName: cfLogicalNames.cloudfrontDistribution,
2040
+ resourceType: "AWS::CloudFront::Distribution",
2041
+ conditional: true
2042
+ },
2043
+ {
2044
+ logicalName: cfLogicalNames.customResourceDefaultDomain,
2045
+ resourceType: "AWS::CloudFormation::CustomResource",
2046
+ conditional: true
2047
+ },
2048
+ { logicalName: cfLogicalNames.dnsRecord, resourceType: "AWS::Route53::RecordSet", conditional: true }
2049
+ ],
2050
+ // ===== WEB APP FIREWALL =====
2051
+ "web-app-firewall": [
2052
+ { logicalName: cfLogicalNames.webAppFirewallCustomResource, resourceType: "AWS::CloudFormation::CustomResource" }
2053
+ ],
2054
+ // ===== OPEN SEARCH DOMAIN =====
2055
+ "open-search-domain": [
2056
+ { logicalName: cfLogicalNames.openSearchDomain, resourceType: "AWS::OpenSearchService::Domain" },
2057
+ { logicalName: cfLogicalNames.openSearchSecurityGroup, resourceType: "AWS::EC2::SecurityGroup", conditional: true },
2058
+ {
2059
+ logicalName: cfLogicalNames.openSearchDomainLogGroup,
2060
+ resourceType: "AWS::Logs::LogGroup",
2061
+ conditional: true,
2062
+ unresolvable: true
2063
+ },
2064
+ {
2065
+ logicalName: cfLogicalNames.openSearchCustomResource,
2066
+ resourceType: "AWS::CloudFormation::CustomResource",
2067
+ conditional: true
2068
+ }
2069
+ ],
2070
+ // ===== EFS FILESYSTEM =====
2071
+ "efs-filesystem": [
2072
+ { logicalName: cfLogicalNames.efsFilesystem, resourceType: "AWS::EFS::FileSystem" },
2073
+ { logicalName: cfLogicalNames.efsSecurityGroup, resourceType: "AWS::EC2::SecurityGroup" },
2074
+ {
2075
+ logicalName: cfLogicalNames.efsMountTarget,
2076
+ resourceType: "AWS::EFS::MountTarget",
2077
+ unresolvable: true
2078
+ }
2079
+ ],
2080
+ // ===== NEXTJS WEB =====
2081
+ // NextJS web delegates to: bucket, imageFunction, revalidationFunction, revalidationQueue,
2082
+ // revalidationTable, revalidationInsertFunction, and optionally serverEdgeFunction or serverFunction
2083
+ "nextjs-web": [
2084
+ // NextJS-specific resources
2085
+ {
2086
+ logicalName: cfLogicalNames.openNextHostHeaderRewriteFunction,
2087
+ resourceType: "AWS::CloudFront::Function"
2088
+ },
2089
+ {
2090
+ logicalName: cfLogicalNames.openNextAssetReplacerCustomResource,
2091
+ resourceType: "AWS::CloudFormation::CustomResource"
2092
+ },
2093
+ {
2094
+ logicalName: cfLogicalNames.openNextDynamoInsertCustomResource,
2095
+ resourceType: "AWS::CloudFormation::CustomResource"
2096
+ },
2097
+ // From bucket
2098
+ { logicalName: cfLogicalNames.bucket, resourceType: "AWS::S3::Bucket" },
2099
+ { logicalName: cfLogicalNames.bucketPolicy, resourceType: "AWS::S3::BucketPolicy", conditional: true },
2100
+ {
2101
+ logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,
2102
+ resourceType: "AWS::CloudFront::CloudFrontOriginAccessIdentity",
2103
+ conditional: true
2104
+ },
2105
+ {
2106
+ logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,
2107
+ resourceType: "AWS::CloudFront::CachePolicy",
2108
+ conditional: true
2109
+ },
2110
+ {
2111
+ logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,
2112
+ resourceType: "AWS::CloudFront::CachePolicy",
2113
+ conditional: true
2114
+ },
2115
+ {
2116
+ logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,
2117
+ resourceType: "AWS::CloudFront::OriginRequestPolicy",
2118
+ conditional: true
2119
+ },
2120
+ {
2121
+ logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,
2122
+ resourceType: "AWS::CloudFront::OriginRequestPolicy",
2123
+ conditional: true
2124
+ },
2125
+ {
2126
+ logicalName: cfLogicalNames.cloudfrontDistribution,
2127
+ resourceType: "AWS::CloudFront::Distribution",
2128
+ conditional: true
2129
+ },
2130
+ {
2131
+ logicalName: cfLogicalNames.customResourceDefaultDomain,
2132
+ resourceType: "AWS::CloudFormation::CustomResource",
2133
+ conditional: true
2134
+ },
2135
+ { logicalName: cfLogicalNames.dnsRecord, resourceType: "AWS::Route53::RecordSet", conditional: true },
2136
+ // From functions (imageFunction, revalidationFunction, serverFunction, warmerFunction, revalidationInsertFunction)
2137
+ { logicalName: cfLogicalNames.lambdaRole, resourceType: "AWS::IAM::Role" },
2138
+ { logicalName: cfLogicalNames.lambda, resourceType: "AWS::Lambda::Function" },
2139
+ { logicalName: cfLogicalNames.lambdaLogGroup, resourceType: "AWS::Logs::LogGroup", conditional: true },
2140
+ { logicalName: cfLogicalNames.lambdaUrl, resourceType: "AWS::Lambda::Url", conditional: true },
2141
+ // From edge function (serverEdgeFunction)
2142
+ {
2143
+ logicalName: cfLogicalNames.customResourceEdgeLambda,
2144
+ resourceType: "AWS::CloudFormation::CustomResource",
2145
+ conditional: true
2146
+ },
2147
+ // From revalidationQueue
2148
+ { logicalName: cfLogicalNames.sqsQueue, resourceType: "AWS::SQS::Queue" },
2149
+ { logicalName: cfLogicalNames.sqsQueuePolicy, resourceType: "AWS::SQS::QueuePolicy", conditional: true },
2150
+ // From revalidationTable
2151
+ { logicalName: cfLogicalNames.dynamoGlobalTable, resourceType: "AWS::DynamoDB::GlobalTable" }
2152
+ ],
2153
+ // ===== MULTI-CONTAINER WORKLOAD =====
2154
+ "multi-container-workload": [
2155
+ // Shared global resources (conditional - created only once if not exists)
2156
+ { logicalName: cfLogicalNames.ecsExecutionRole, resourceType: "AWS::IAM::Role", conditional: true },
2157
+ { logicalName: cfLogicalNames.ecsAutoScalingRole, resourceType: "AWS::IAM::Role", conditional: true },
2158
+ // Scaling resources (conditional - only if scaling is configured)
2159
+ {
2160
+ logicalName: cfLogicalNames.autoScalingTarget,
2161
+ resourceType: "AWS::ApplicationAutoScaling::ScalableTarget",
2162
+ conditional: true
2163
+ },
2164
+ {
2165
+ logicalName: cfLogicalNames.autoScalingPolicy,
2166
+ resourceType: "AWS::ApplicationAutoScaling::ScalingPolicy",
2167
+ conditional: true,
2168
+ unresolvable: true
2169
+ },
2170
+ // EC2-based resources (conditional - only if instanceTypes are configured)
2171
+ { logicalName: cfLogicalNames.ecsEc2InstanceRole, resourceType: "AWS::IAM::Role", conditional: true },
2172
+ {
2173
+ logicalName: cfLogicalNames.eventBusRoleForScheduledInstanceRefresh,
2174
+ resourceType: "AWS::IAM::Role",
2175
+ conditional: true
2176
+ },
2177
+ { logicalName: cfLogicalNames.ecsEc2InstanceProfile, resourceType: "AWS::IAM::InstanceProfile", conditional: true },
2178
+ {
2179
+ logicalName: cfLogicalNames.ecsEc2InstanceLaunchTemplate,
2180
+ resourceType: "AWS::EC2::LaunchTemplate",
2181
+ conditional: true
2182
+ },
2183
+ {
2184
+ logicalName: cfLogicalNames.ecsEc2AutoscalingGroup,
2185
+ resourceType: "AWS::AutoScaling::AutoScalingGroup",
2186
+ conditional: true
2187
+ },
2188
+ {
2189
+ logicalName: cfLogicalNames.ecsEc2ForceDeleteAutoscalingGroupCustomResource,
2190
+ resourceType: "AWS::CloudFormation::CustomResource",
2191
+ conditional: true
2192
+ },
2193
+ {
2194
+ logicalName: cfLogicalNames.ecsEc2CapacityProvider,
2195
+ resourceType: "AWS::ECS::CapacityProvider",
2196
+ conditional: true
2197
+ },
2198
+ {
2199
+ logicalName: cfLogicalNames.ecsEc2CapacityProviderAssociation,
2200
+ resourceType: "AWS::ECS::ClusterCapacityProviderAssociations",
2201
+ conditional: true
2202
+ },
2203
+ {
2204
+ logicalName: cfLogicalNames.schedulerRuleForScheduledInstanceRefresh,
2205
+ resourceType: "AWS::Scheduler::Schedule",
2206
+ conditional: true
2207
+ },
2208
+ {
2209
+ logicalName: cfLogicalNames.ecsEc2AutoscalingGroupWarmPool,
2210
+ resourceType: "AWS::AutoScaling::WarmPool",
2211
+ conditional: true
2212
+ },
2213
+ // Deployment resources (conditional - only if deployment is configured)
2214
+ { logicalName: cfLogicalNames.ecsCodeDeployApp, resourceType: "AWS::CodeDeploy::Application", conditional: true },
2215
+ {
2216
+ logicalName: cfLogicalNames.codeDeployDeploymentGroup,
2217
+ resourceType: "AWS::CodeDeploy::DeploymentGroup",
2218
+ conditional: true
2219
+ },
2220
+ // Core resources (always present)
2221
+ { logicalName: cfLogicalNames.ecsCluster, resourceType: "AWS::ECS::Cluster" },
2222
+ { logicalName: cfLogicalNames.workloadSecurityGroup, resourceType: "AWS::EC2::SecurityGroup" },
2223
+ {
2224
+ logicalName: cfLogicalNames.ecsService,
2225
+ resourceType: "AWS::ECS::Service",
2226
+ unresolvable: true
2227
+ },
2228
+ { logicalName: cfLogicalNames.ecsTaskRole, resourceType: "AWS::IAM::Role" },
2229
+ { logicalName: cfLogicalNames.ecsTaskDefinition, resourceType: "AWS::ECS::TaskDefinition" },
2230
+ // Conditional resources
2231
+ {
2232
+ logicalName: cfLogicalNames.ecsLogGroup,
2233
+ resourceType: "AWS::Logs::LogGroup",
2234
+ conditional: true,
2235
+ unresolvable: true
2236
+ },
2237
+ { logicalName: cfLogicalNames.efsAccessPoint, resourceType: "AWS::EFS::AccessPoint", conditional: true },
2238
+ {
2239
+ logicalName: cfLogicalNames.atlasMongoUserAssociatedWithRole,
2240
+ resourceType: "MongoDB::StpAtlasV1::DatabaseUser",
2241
+ conditional: true
2242
+ }
2243
+ ],
2244
+ // ===== SQS QUEUE =====
2245
+ "sqs-queue": [
2246
+ { logicalName: cfLogicalNames.sqsQueue, resourceType: "AWS::SQS::Queue" },
2247
+ { logicalName: cfLogicalNames.sqsQueuePolicy, resourceType: "AWS::SQS::QueuePolicy", conditional: true }
2248
+ ],
2249
+ // ===== SNS TOPIC =====
2250
+ "sns-topic": [{ logicalName: cfLogicalNames.snsTopic, resourceType: "AWS::SNS::Topic" }],
2251
+ // ===== BASTION =====
2252
+ bastion: [
2253
+ {
2254
+ logicalName: cfLogicalNames.bastionCloudwatchSsmDocument,
2255
+ resourceType: "AWS::SSM::Document",
2256
+ conditional: true
2257
+ },
2258
+ { logicalName: cfLogicalNames.bastionEc2AutoscalingGroup, resourceType: "AWS::AutoScaling::AutoScalingGroup" },
2259
+ { logicalName: cfLogicalNames.bastionSecurityGroup, resourceType: "AWS::EC2::SecurityGroup" },
2260
+ { logicalName: cfLogicalNames.bastionEc2LaunchTemplate, resourceType: "AWS::EC2::LaunchTemplate" },
2261
+ { logicalName: cfLogicalNames.bastionRole, resourceType: "AWS::IAM::Role" },
2262
+ { logicalName: cfLogicalNames.bastionEc2InstanceProfile, resourceType: "AWS::IAM::InstanceProfile" },
2263
+ { logicalName: cfLogicalNames.bastionCwAgentSsmAssociation, resourceType: "AWS::SSM::Association" },
2264
+ { logicalName: cfLogicalNames.bastionSsmAgentSsmAssociation, resourceType: "AWS::SSM::Association" },
2265
+ {
2266
+ logicalName: cfLogicalNames.bastionLogGroup,
2267
+ resourceType: "AWS::Logs::LogGroup",
2268
+ conditional: true,
2269
+ unresolvable: true
2270
+ }
2271
+ ],
2272
+ // ===== EDGE LAMBDA FUNCTION =====
2273
+ "edge-lambda-function": [
2274
+ { logicalName: cfLogicalNames.customResourceEdgeLambda, resourceType: "AWS::CloudFormation::CustomResource" }
2275
+ ],
2276
+ // ===== WEB SERVICE =====
2277
+ // Web service delegates to: containerWorkload + optionally (httpApiGateway OR loadBalancer OR networkLoadBalancer)
2278
+ "web-service": [
2279
+ // From multi-container-workload - core resources (always present)
2280
+ { logicalName: cfLogicalNames.ecsCluster, resourceType: "AWS::ECS::Cluster" },
2281
+ { logicalName: cfLogicalNames.workloadSecurityGroup, resourceType: "AWS::EC2::SecurityGroup" },
2282
+ {
2283
+ logicalName: cfLogicalNames.ecsService,
2284
+ resourceType: "AWS::ECS::Service",
2285
+ unresolvable: true
2286
+ },
2287
+ { logicalName: cfLogicalNames.ecsTaskRole, resourceType: "AWS::IAM::Role" },
2288
+ { logicalName: cfLogicalNames.ecsTaskDefinition, resourceType: "AWS::ECS::TaskDefinition" },
2289
+ // From multi-container-workload - conditional resources
2290
+ { logicalName: cfLogicalNames.ecsExecutionRole, resourceType: "AWS::IAM::Role", conditional: true },
2291
+ { logicalName: cfLogicalNames.ecsAutoScalingRole, resourceType: "AWS::IAM::Role", conditional: true },
2292
+ {
2293
+ logicalName: cfLogicalNames.autoScalingTarget,
2294
+ resourceType: "AWS::ApplicationAutoScaling::ScalableTarget",
2295
+ conditional: true
2296
+ },
2297
+ {
2298
+ logicalName: cfLogicalNames.autoScalingPolicy,
2299
+ resourceType: "AWS::ApplicationAutoScaling::ScalingPolicy",
2300
+ conditional: true,
2301
+ unresolvable: true
2302
+ },
2303
+ { logicalName: cfLogicalNames.ecsEc2InstanceRole, resourceType: "AWS::IAM::Role", conditional: true },
2304
+ {
2305
+ logicalName: cfLogicalNames.eventBusRoleForScheduledInstanceRefresh,
2306
+ resourceType: "AWS::IAM::Role",
2307
+ conditional: true
2308
+ },
2309
+ { logicalName: cfLogicalNames.ecsEc2InstanceProfile, resourceType: "AWS::IAM::InstanceProfile", conditional: true },
2310
+ {
2311
+ logicalName: cfLogicalNames.ecsEc2InstanceLaunchTemplate,
2312
+ resourceType: "AWS::EC2::LaunchTemplate",
2313
+ conditional: true
2314
+ },
2315
+ {
2316
+ logicalName: cfLogicalNames.ecsEc2AutoscalingGroup,
2317
+ resourceType: "AWS::AutoScaling::AutoScalingGroup",
2318
+ conditional: true
2319
+ },
2320
+ {
2321
+ logicalName: cfLogicalNames.ecsEc2ForceDeleteAutoscalingGroupCustomResource,
2322
+ resourceType: "AWS::CloudFormation::CustomResource",
2323
+ conditional: true
2324
+ },
2325
+ {
2326
+ logicalName: cfLogicalNames.ecsEc2CapacityProvider,
2327
+ resourceType: "AWS::ECS::CapacityProvider",
2328
+ conditional: true
2329
+ },
2330
+ {
2331
+ logicalName: cfLogicalNames.ecsEc2CapacityProviderAssociation,
2332
+ resourceType: "AWS::ECS::ClusterCapacityProviderAssociations",
2333
+ conditional: true
2334
+ },
2335
+ {
2336
+ logicalName: cfLogicalNames.schedulerRuleForScheduledInstanceRefresh,
2337
+ resourceType: "AWS::Scheduler::Schedule",
2338
+ conditional: true
2339
+ },
2340
+ {
2341
+ logicalName: cfLogicalNames.ecsEc2AutoscalingGroupWarmPool,
2342
+ resourceType: "AWS::AutoScaling::WarmPool",
2343
+ conditional: true
2344
+ },
2345
+ { logicalName: cfLogicalNames.ecsCodeDeployApp, resourceType: "AWS::CodeDeploy::Application", conditional: true },
2346
+ {
2347
+ logicalName: cfLogicalNames.codeDeployDeploymentGroup,
2348
+ resourceType: "AWS::CodeDeploy::DeploymentGroup",
2349
+ conditional: true
2350
+ },
2351
+ {
2352
+ logicalName: cfLogicalNames.ecsLogGroup,
2353
+ resourceType: "AWS::Logs::LogGroup",
2354
+ conditional: true,
2355
+ unresolvable: true
2356
+ },
2357
+ { logicalName: cfLogicalNames.efsAccessPoint, resourceType: "AWS::EFS::AccessPoint", conditional: true },
2358
+ // From application-load-balancer (conditional - only if ALB is used)
2359
+ {
2360
+ logicalName: cfLogicalNames.loadBalancer,
2361
+ resourceType: "AWS::ElasticLoadBalancingV2::LoadBalancer",
2362
+ conditional: true
2363
+ },
2364
+ {
2365
+ logicalName: cfLogicalNames.loadBalancerSecurityGroup,
2366
+ resourceType: "AWS::EC2::SecurityGroup",
2367
+ conditional: true
2368
+ },
2369
+ { logicalName: cfLogicalNames.listener, resourceType: "AWS::ElasticLoadBalancingV2::Listener", conditional: true },
2370
+ {
2371
+ logicalName: cfLogicalNames.webAppFirewallAssociation,
2372
+ resourceType: "AWS::WAFv2::WebACLAssociation",
2373
+ conditional: true
2374
+ },
2375
+ // From http-api-gateway (conditional - only if HTTP API Gateway is used, alternative to ALB/NLB)
2376
+ { logicalName: cfLogicalNames.httpApi, resourceType: "AWS::ApiGatewayV2::Api", conditional: true },
2377
+ { logicalName: cfLogicalNames.httpApiStage, resourceType: "AWS::ApiGatewayV2::Stage", conditional: true },
2378
+ { logicalName: cfLogicalNames.httpApiLogGroup, resourceType: "AWS::Logs::LogGroup", conditional: true },
2379
+ {
2380
+ logicalName: cfLogicalNames.httpApiVpcLinkSecurityGroup,
2381
+ resourceType: "AWS::EC2::SecurityGroup",
2382
+ conditional: true
2383
+ },
2384
+ { logicalName: cfLogicalNames.httpApiVpcLink, resourceType: "AWS::ApiGatewayV2::VpcLink", conditional: true },
2385
+ { logicalName: cfLogicalNames.httpApiDomain, resourceType: "AWS::ApiGatewayV2::DomainName", conditional: true },
2386
+ {
2387
+ logicalName: cfLogicalNames.httpApiDomainMapping,
2388
+ resourceType: "AWS::ApiGatewayV2::ApiMapping",
2389
+ conditional: true
2390
+ },
2391
+ {
2392
+ logicalName: cfLogicalNames.httpApiDefaultDomain,
2393
+ resourceType: "AWS::ApiGatewayV2::DomainName",
2394
+ conditional: true
2395
+ },
2396
+ {
2397
+ logicalName: cfLogicalNames.httpApiDefaultDomainMapping,
2398
+ resourceType: "AWS::ApiGatewayV2::ApiMapping",
2399
+ conditional: true
2400
+ },
2401
+ // Common resources (domains, CDN - all conditional)
2402
+ {
2403
+ logicalName: cfLogicalNames.customResourceDefaultDomain,
2404
+ resourceType: "AWS::CloudFormation::CustomResource",
2405
+ conditional: true
2406
+ },
2407
+ { logicalName: cfLogicalNames.dnsRecord, resourceType: "AWS::Route53::RecordSet", conditional: true },
2408
+ {
2409
+ logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,
2410
+ resourceType: "AWS::CloudFront::CloudFrontOriginAccessIdentity",
2411
+ conditional: true
2412
+ },
2413
+ {
2414
+ logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,
2415
+ resourceType: "AWS::CloudFront::CachePolicy",
2416
+ conditional: true
2417
+ },
2418
+ {
2419
+ logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,
2420
+ resourceType: "AWS::CloudFront::CachePolicy",
2421
+ conditional: true
2422
+ },
2423
+ {
2424
+ logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,
2425
+ resourceType: "AWS::CloudFront::OriginRequestPolicy",
2426
+ conditional: true
2427
+ },
2428
+ {
2429
+ logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,
2430
+ resourceType: "AWS::CloudFront::OriginRequestPolicy",
2431
+ conditional: true
2432
+ },
2433
+ {
2434
+ logicalName: cfLogicalNames.cloudfrontDistribution,
2435
+ resourceType: "AWS::CloudFront::Distribution",
2436
+ conditional: true
2437
+ }
2438
+ ],
2439
+ // ===== PRIVATE SERVICE =====
2440
+ // Private service delegates to: containerWorkload + optionally loadBalancer
2441
+ "private-service": [
2442
+ // From multi-container-workload - core resources (always present)
2443
+ { logicalName: cfLogicalNames.ecsCluster, resourceType: "AWS::ECS::Cluster" },
2444
+ { logicalName: cfLogicalNames.workloadSecurityGroup, resourceType: "AWS::EC2::SecurityGroup" },
2445
+ {
2446
+ logicalName: cfLogicalNames.ecsService,
2447
+ resourceType: "AWS::ECS::Service",
2448
+ unresolvable: true
2449
+ },
2450
+ { logicalName: cfLogicalNames.ecsTaskRole, resourceType: "AWS::IAM::Role" },
2451
+ { logicalName: cfLogicalNames.ecsTaskDefinition, resourceType: "AWS::ECS::TaskDefinition" },
2452
+ // From multi-container-workload - conditional resources
2453
+ { logicalName: cfLogicalNames.ecsExecutionRole, resourceType: "AWS::IAM::Role", conditional: true },
2454
+ { logicalName: cfLogicalNames.ecsAutoScalingRole, resourceType: "AWS::IAM::Role", conditional: true },
2455
+ {
2456
+ logicalName: cfLogicalNames.autoScalingTarget,
2457
+ resourceType: "AWS::ApplicationAutoScaling::ScalableTarget",
2458
+ conditional: true
2459
+ },
2460
+ {
2461
+ logicalName: cfLogicalNames.autoScalingPolicy,
2462
+ resourceType: "AWS::ApplicationAutoScaling::ScalingPolicy",
2463
+ conditional: true,
2464
+ unresolvable: true
2465
+ },
2466
+ { logicalName: cfLogicalNames.ecsEc2InstanceRole, resourceType: "AWS::IAM::Role", conditional: true },
2467
+ {
2468
+ logicalName: cfLogicalNames.eventBusRoleForScheduledInstanceRefresh,
2469
+ resourceType: "AWS::IAM::Role",
2470
+ conditional: true
2471
+ },
2472
+ { logicalName: cfLogicalNames.ecsEc2InstanceProfile, resourceType: "AWS::IAM::InstanceProfile", conditional: true },
2473
+ {
2474
+ logicalName: cfLogicalNames.ecsEc2InstanceLaunchTemplate,
2475
+ resourceType: "AWS::EC2::LaunchTemplate",
2476
+ conditional: true
2477
+ },
2478
+ {
2479
+ logicalName: cfLogicalNames.ecsEc2AutoscalingGroup,
2480
+ resourceType: "AWS::AutoScaling::AutoScalingGroup",
2481
+ conditional: true
2482
+ },
2483
+ {
2484
+ logicalName: cfLogicalNames.ecsEc2ForceDeleteAutoscalingGroupCustomResource,
2485
+ resourceType: "AWS::CloudFormation::CustomResource",
2486
+ conditional: true
2487
+ },
2488
+ {
2489
+ logicalName: cfLogicalNames.ecsEc2CapacityProvider,
2490
+ resourceType: "AWS::ECS::CapacityProvider",
2491
+ conditional: true
2492
+ },
2493
+ {
2494
+ logicalName: cfLogicalNames.ecsEc2CapacityProviderAssociation,
2495
+ resourceType: "AWS::ECS::ClusterCapacityProviderAssociations",
2496
+ conditional: true
2497
+ },
2498
+ {
2499
+ logicalName: cfLogicalNames.schedulerRuleForScheduledInstanceRefresh,
2500
+ resourceType: "AWS::Scheduler::Schedule",
2501
+ conditional: true
2502
+ },
2503
+ {
2504
+ logicalName: cfLogicalNames.ecsEc2AutoscalingGroupWarmPool,
2505
+ resourceType: "AWS::AutoScaling::WarmPool",
2506
+ conditional: true
2507
+ },
2508
+ { logicalName: cfLogicalNames.ecsCodeDeployApp, resourceType: "AWS::CodeDeploy::Application", conditional: true },
2509
+ {
2510
+ logicalName: cfLogicalNames.codeDeployDeploymentGroup,
2511
+ resourceType: "AWS::CodeDeploy::DeploymentGroup",
2512
+ conditional: true
2513
+ },
2514
+ {
2515
+ logicalName: cfLogicalNames.ecsLogGroup,
2516
+ resourceType: "AWS::Logs::LogGroup",
2517
+ conditional: true,
2518
+ unresolvable: true
2519
+ },
2520
+ { logicalName: cfLogicalNames.efsAccessPoint, resourceType: "AWS::EFS::AccessPoint", conditional: true },
2521
+ // From application-load-balancer (conditional - only if ALB is configured)
2522
+ {
2523
+ logicalName: cfLogicalNames.loadBalancer,
2524
+ resourceType: "AWS::ElasticLoadBalancingV2::LoadBalancer",
2525
+ conditional: true
2526
+ },
2527
+ {
2528
+ logicalName: cfLogicalNames.loadBalancerSecurityGroup,
2529
+ resourceType: "AWS::EC2::SecurityGroup",
2530
+ conditional: true
2531
+ },
2532
+ { logicalName: cfLogicalNames.listener, resourceType: "AWS::ElasticLoadBalancingV2::Listener", conditional: true },
2533
+ {
2534
+ logicalName: cfLogicalNames.customResourceDefaultDomain,
2535
+ resourceType: "AWS::CloudFormation::CustomResource",
2536
+ conditional: true
2537
+ },
2538
+ { logicalName: cfLogicalNames.dnsRecord, resourceType: "AWS::Route53::RecordSet", conditional: true }
2539
+ ],
2540
+ // ===== WORKER SERVICE =====
2541
+ // Worker service delegates to: containerWorkload only
2542
+ "worker-service": [
2543
+ // From multi-container-workload - core resources (always present)
2544
+ { logicalName: cfLogicalNames.ecsCluster, resourceType: "AWS::ECS::Cluster" },
2545
+ { logicalName: cfLogicalNames.workloadSecurityGroup, resourceType: "AWS::EC2::SecurityGroup" },
2546
+ {
2547
+ logicalName: cfLogicalNames.ecsService,
2548
+ resourceType: "AWS::ECS::Service",
2549
+ unresolvable: true
2550
+ },
2551
+ { logicalName: cfLogicalNames.ecsTaskRole, resourceType: "AWS::IAM::Role" },
2552
+ { logicalName: cfLogicalNames.ecsTaskDefinition, resourceType: "AWS::ECS::TaskDefinition" },
2553
+ // From multi-container-workload - conditional resources
2554
+ { logicalName: cfLogicalNames.ecsExecutionRole, resourceType: "AWS::IAM::Role", conditional: true },
2555
+ { logicalName: cfLogicalNames.ecsAutoScalingRole, resourceType: "AWS::IAM::Role", conditional: true },
2556
+ {
2557
+ logicalName: cfLogicalNames.autoScalingTarget,
2558
+ resourceType: "AWS::ApplicationAutoScaling::ScalableTarget",
2559
+ conditional: true
2560
+ },
2561
+ {
2562
+ logicalName: cfLogicalNames.autoScalingPolicy,
2563
+ resourceType: "AWS::ApplicationAutoScaling::ScalingPolicy",
2564
+ conditional: true,
2565
+ unresolvable: true
2566
+ },
2567
+ { logicalName: cfLogicalNames.ecsEc2InstanceRole, resourceType: "AWS::IAM::Role", conditional: true },
2568
+ {
2569
+ logicalName: cfLogicalNames.eventBusRoleForScheduledInstanceRefresh,
2570
+ resourceType: "AWS::IAM::Role",
2571
+ conditional: true
2572
+ },
2573
+ { logicalName: cfLogicalNames.ecsEc2InstanceProfile, resourceType: "AWS::IAM::InstanceProfile", conditional: true },
2574
+ {
2575
+ logicalName: cfLogicalNames.ecsEc2InstanceLaunchTemplate,
2576
+ resourceType: "AWS::EC2::LaunchTemplate",
2577
+ conditional: true
2578
+ },
2579
+ {
2580
+ logicalName: cfLogicalNames.ecsEc2AutoscalingGroup,
2581
+ resourceType: "AWS::AutoScaling::AutoScalingGroup",
2582
+ conditional: true
2583
+ },
2584
+ {
2585
+ logicalName: cfLogicalNames.ecsEc2ForceDeleteAutoscalingGroupCustomResource,
2586
+ resourceType: "AWS::CloudFormation::CustomResource",
2587
+ conditional: true
2588
+ },
2589
+ {
2590
+ logicalName: cfLogicalNames.ecsEc2CapacityProvider,
2591
+ resourceType: "AWS::ECS::CapacityProvider",
2592
+ conditional: true
2593
+ },
2594
+ {
2595
+ logicalName: cfLogicalNames.ecsEc2CapacityProviderAssociation,
2596
+ resourceType: "AWS::ECS::ClusterCapacityProviderAssociations",
2597
+ conditional: true
2598
+ },
2599
+ {
2600
+ logicalName: cfLogicalNames.schedulerRuleForScheduledInstanceRefresh,
2601
+ resourceType: "AWS::Scheduler::Schedule",
2602
+ conditional: true
2603
+ },
2604
+ {
2605
+ logicalName: cfLogicalNames.ecsEc2AutoscalingGroupWarmPool,
2606
+ resourceType: "AWS::AutoScaling::WarmPool",
2607
+ conditional: true
2608
+ },
2609
+ { logicalName: cfLogicalNames.ecsCodeDeployApp, resourceType: "AWS::CodeDeploy::Application", conditional: true },
2610
+ {
2611
+ logicalName: cfLogicalNames.codeDeployDeploymentGroup,
2612
+ resourceType: "AWS::CodeDeploy::DeploymentGroup",
2613
+ conditional: true
2614
+ },
2615
+ {
2616
+ logicalName: cfLogicalNames.ecsLogGroup,
2617
+ resourceType: "AWS::Logs::LogGroup",
2618
+ conditional: true,
2619
+ unresolvable: true
2620
+ },
2621
+ { logicalName: cfLogicalNames.efsAccessPoint, resourceType: "AWS::EFS::AccessPoint", conditional: true },
2622
+ {
2623
+ logicalName: cfLogicalNames.atlasMongoUserAssociatedWithRole,
2624
+ resourceType: "MongoDB::StpAtlasV1::DatabaseUser",
2625
+ conditional: true
2626
+ }
2627
+ ],
2628
+ // ===== OTHER RESOURCES =====
2629
+ "custom-resource-instance": [],
2630
+ "custom-resource-definition": [],
2631
+ "deployment-script": [],
2632
+ "aws-cdk-construct": []
2633
+ };
2634
+
2635
+ // src/api/npm/ts/config.ts
2636
+ var getParamReferenceSymbol = Symbol.for("stacktape:getParamReference");
2637
+ var getTypeSymbol = Symbol.for("stacktape:getType");
2638
+ var getPropertiesSymbol = Symbol.for("stacktape:getProperties");
2639
+ var getOverridesSymbol = Symbol.for("stacktape:getOverrides");
2640
+ var ResourceParamReference = class {
2641
+ static {
2642
+ __name(this, "ResourceParamReference");
2643
+ }
2644
+ constructor(resourceName, param) {
2645
+ this.__resourceName = resourceName;
2646
+ this.__param = param;
2647
+ }
2648
+ toString() {
2649
+ return `$ResourceParam('${this.__resourceName}', '${this.__param}')`;
2650
+ }
2651
+ toJSON() {
2652
+ return this.toString();
2653
+ }
2654
+ // Allow the reference to be used directly in template strings
2655
+ valueOf() {
2656
+ return this.toString();
2657
+ }
2658
+ };
2659
+ var BaseTypeProperties = class {
2660
+ static {
2661
+ __name(this, "BaseTypeProperties");
2662
+ }
2663
+ constructor(type, properties) {
2664
+ this.type = type;
2665
+ this.properties = properties;
2666
+ }
2667
+ };
2668
+ var BaseResource = class {
2669
+ static {
2670
+ __name(this, "BaseResource");
2671
+ }
2672
+ constructor(name, type, properties, overrides) {
2673
+ this._resourceName = name;
2674
+ this._type = type;
2675
+ let finalProperties = properties;
2676
+ let finalOverrides = overrides;
2677
+ if (properties && typeof properties === "object" && "overrides" in properties) {
2678
+ finalProperties = { ...properties };
2679
+ const propertiesOverrides = finalProperties.overrides;
2680
+ delete finalProperties.overrides;
2681
+ if (propertiesOverrides && typeof propertiesOverrides === "object") {
2682
+ finalOverrides = transformOverridesToLogicalNames(name, type, propertiesOverrides);
2683
+ }
2684
+ }
2685
+ this._properties = finalProperties;
2686
+ this._overrides = finalOverrides;
2687
+ }
2688
+ // Public getter for resource name (used for referencing resources)
2689
+ get resourceName() {
2690
+ return this._resourceName;
2691
+ }
2692
+ // Private methods using symbols - not accessible from outside or in autocomplete
2693
+ [getParamReferenceSymbol](paramName) {
2694
+ return new ResourceParamReference(this._resourceName, paramName);
2695
+ }
2696
+ [getTypeSymbol]() {
2697
+ return this._type;
2698
+ }
2699
+ [getPropertiesSymbol]() {
2700
+ return this._properties;
2701
+ }
2702
+ [getOverridesSymbol]() {
2703
+ return this._overrides;
2704
+ }
2705
+ };
2706
+ function transformOverridesToLogicalNames(resourceName, resourceType, overrides) {
2707
+ const childResources = CHILD_RESOURCES[resourceType] || [];
2708
+ const propertyNameMap = /* @__PURE__ */ new Map();
2709
+ for (const childResource of childResources) {
2710
+ if (childResource.logicalName && childResource.logicalName.name) {
2711
+ propertyNameMap.set(childResource.logicalName.name, childResource);
2712
+ }
2713
+ }
2714
+ const transformedOverrides = {};
2715
+ const errorMessage = `Override of property {propertyName} of resource ${resourceName} is not supported.
2716
+
2717
+ Remove the override, run 'stacktape compile:template' command, and find the logical name of the resource you want to override manually. Then add it to the overrides object.`;
2718
+ for (const propertyName in overrides) {
2719
+ const childResource = propertyNameMap.get(propertyName);
2720
+ if (childResource?.unresolvable) {
2721
+ throw new Error(errorMessage.replace("{propertyName}", propertyName));
2722
+ }
2723
+ if (childResource) {
2724
+ const logicalNameFn = childResource.logicalName;
2725
+ let logicalName;
2726
+ try {
2727
+ logicalName = logicalNameFn(resourceName);
2728
+ } catch {
2729
+ try {
2730
+ logicalName = logicalNameFn();
2731
+ } catch {
2732
+ logicalName = propertyName;
2733
+ }
2734
+ }
2735
+ if (logicalName.includes("undefined")) {
2736
+ throw new Error(errorMessage.replace("{propertyName}", propertyName));
2737
+ }
2738
+ transformedOverrides[logicalName] = overrides[propertyName];
2739
+ } else {
2740
+ transformedOverrides[propertyName] = overrides[propertyName];
2741
+ }
2742
+ }
2743
+ return transformedOverrides;
2744
+ }
2745
+ __name(transformOverridesToLogicalNames, "transformOverridesToLogicalNames");
2746
+ var defineConfig = /* @__PURE__ */ __name((configFn) => {
2747
+ return (params) => {
2748
+ const config = configFn(params);
2749
+ return transformConfigWithResources(config);
2750
+ };
2751
+ }, "defineConfig");
2752
+ var transformConfigWithResources = /* @__PURE__ */ __name((config) => {
2753
+ if (!config || typeof config !== "object") {
2754
+ return config;
2755
+ }
2756
+ const result = {};
2757
+ for (const key in config) {
2758
+ if (key === "resources") {
2759
+ result[key] = transformResourceDefinitions(config[key]);
2760
+ } else if (key === "scripts") {
2761
+ result[key] = transformScriptDefinitions(config[key]);
2762
+ } else {
2763
+ result[key] = transformValue(config[key]);
2764
+ }
2765
+ }
2766
+ return result;
2767
+ }, "transformConfigWithResources");
2768
+ var transformEnvironment = /* @__PURE__ */ __name((env) => {
2769
+ if (!env || typeof env !== "object" || Array.isArray(env)) {
2770
+ return env;
2771
+ }
2772
+ return Object.entries(env).map(([name, value]) => ({
2773
+ name,
2774
+ value: transformValue(value)
2775
+ }));
2776
+ }, "transformEnvironment");
2777
+ var transformResourceDefinitions = /* @__PURE__ */ __name((resources) => {
2778
+ if (!resources || typeof resources !== "object") {
2779
+ return resources;
2780
+ }
2781
+ const result = {};
2782
+ for (const key in resources) {
2783
+ const resource = resources[key];
2784
+ if (resource instanceof BaseResource) {
2785
+ const type = resource[getTypeSymbol]();
2786
+ const properties = resource[getPropertiesSymbol]();
2787
+ const overrides = resource[getOverridesSymbol]();
2788
+ result[key] = {
2789
+ type,
2790
+ properties: transformValue(properties),
2791
+ ...overrides !== void 0 && { overrides: transformValue(overrides) }
2792
+ };
2793
+ } else {
2794
+ result[key] = transformValue(resource);
2795
+ }
2796
+ }
2797
+ return result;
2798
+ }, "transformResourceDefinitions");
2799
+ var transformScriptDefinitions = /* @__PURE__ */ __name((scripts) => {
2800
+ if (!scripts || typeof scripts !== "object") {
2801
+ return scripts;
2802
+ }
2803
+ const result = {};
2804
+ for (const key in scripts) {
2805
+ const script = scripts[key];
2806
+ if (script instanceof BaseTypeProperties) {
2807
+ result[key] = {
2808
+ type: script.type,
2809
+ properties: transformValue(script.properties)
2810
+ };
2811
+ } else {
2812
+ result[key] = transformValue(script);
2813
+ }
2814
+ }
2815
+ return result;
2816
+ }, "transformScriptDefinitions");
2817
+ var transformValue = /* @__PURE__ */ __name((value) => {
2818
+ if (value === null || value === void 0) {
2819
+ return value;
2820
+ }
2821
+ if (value instanceof ResourceParamReference) {
2822
+ return value.toString();
2823
+ }
2824
+ if (value instanceof BaseResource) {
2825
+ return value.resourceName;
2826
+ }
2827
+ if (value instanceof BaseTypeProperties) {
2828
+ return {
2829
+ type: value.type,
2830
+ properties: transformValue(value.properties)
2831
+ };
2832
+ }
2833
+ if (Array.isArray(value)) {
2834
+ return value.map((item) => {
2835
+ if (item instanceof BaseResource) {
2836
+ return item.resourceName;
2837
+ }
2838
+ return transformValue(item);
2839
+ });
2840
+ }
2841
+ if (typeof value === "object") {
2842
+ const result = {};
2843
+ for (const key in value) {
2844
+ if (key === "environment") {
2845
+ result[key] = transformEnvironment(value[key]);
2846
+ } else {
2847
+ result[key] = transformValue(value[key]);
2848
+ }
2849
+ }
2850
+ return result;
2851
+ }
2852
+ return value;
2853
+ }, "transformValue");
2854
+
2855
+ // src/api/npm/ts/directives.ts
2856
+ var $ResourceParam = /* @__PURE__ */ __name((resourceName, property) => {
2857
+ return `$ResourceParam('${resourceName}','${property}')`;
2858
+ }, "$ResourceParam");
2859
+ var $CfResourceParam = /* @__PURE__ */ __name((cloudformationResourceLogicalId, property) => {
2860
+ return `$CfResourceParam('${cloudformationResourceLogicalId}','${property}')`;
2861
+ }, "$CfResourceParam");
2862
+ var $Secret = /* @__PURE__ */ __name((secretName) => {
2863
+ return `$Secret('${secretName}')`;
2864
+ }, "$Secret");
2865
+ var $CfFormat = /* @__PURE__ */ __name((interpolatedString, ...values) => {
2866
+ return `$CfFormat('${interpolatedString}', '${values.join(",")}')`;
2867
+ }, "$CfFormat");
2868
+ var $CfStackOutput = /* @__PURE__ */ __name((stackName, outputName) => {
2869
+ return `$CfStackOutput('${stackName}','${outputName}')`;
2870
+ }, "$CfStackOutput");
2871
+ var $GitInfo = /* @__PURE__ */ __name(() => {
2872
+ return "$GitInfo()";
2873
+ }, "$GitInfo");
2874
+
2875
+ // src/api/npm/ts/global-aws-services.ts
2876
+ var AWS_SES = "aws:ses";
2877
+
2878
+ // src/api/npm/ts/resource-metadata.ts
2879
+ var REFERENCEABLE_PARAMS = {
2880
+ "relational-database": [
2881
+ { name: "connectionString", description: "Connection string for the database" },
2882
+ { name: "jdbcConnectionString", description: "JDBC connection string" },
2883
+ { name: "host", description: "Database host" },
2884
+ { name: "port", description: "Database port" },
2885
+ { name: "dbName", description: "Database name" },
2886
+ { name: "readerHost", description: "Reader endpoint host" },
2887
+ { name: "readerConnectionString", description: "Reader connection string" },
2888
+ { name: "readerJdbcConnectionString", description: "Reader JDBC connection string" }
2889
+ ],
2890
+ "web-service": [
2891
+ { name: "domain", description: "Web service domain" },
2892
+ { name: "url", description: "Web service URL" },
2893
+ { name: "customDomains", description: "Custom domains" },
2894
+ { name: "customDomainUrls", description: "Custom domain URLs" }
2895
+ ],
2896
+ "private-service": [{ name: "address", description: "Private service address" }],
2897
+ bucket: [
2898
+ { name: "name", description: "Bucket name" },
2899
+ { name: "arn", description: "Bucket ARN" }
2900
+ ],
2901
+ "dynamo-db-table": [
2902
+ { name: "name", description: "Table name" },
2903
+ { name: "arn", description: "Table ARN" },
2904
+ { name: "streamArn", description: "Stream ARN" }
2905
+ ],
2906
+ function: [
2907
+ { name: "arn", description: "Function ARN" },
2908
+ { name: "logGroupArn", description: "Log group ARN" }
2909
+ ],
2910
+ "batch-job": [
2911
+ { name: "jobDefinitionArn", description: "Job definition ARN" },
2912
+ { name: "stateMachineArn", description: "State machine ARN" },
2913
+ { name: "logGroupArn", description: "Log group ARN" }
2914
+ ],
2915
+ "event-bus": [
2916
+ { name: "arn", description: "Event bus ARN" },
2917
+ { name: "archiveArn", description: "Archive ARN" }
2918
+ ],
2919
+ "http-api-gateway": [
2920
+ { name: "domain", description: "API Gateway domain" },
2921
+ { name: "url", description: "API Gateway URL" },
2922
+ { name: "customDomains", description: "Custom domains" },
2923
+ { name: "customDomainUrls", description: "Custom domain URLs" },
2924
+ { name: "customDomainUrl", description: "First custom domain URL" }
2925
+ ],
2926
+ "mongo-db-atlas-cluster": [{ name: "connectionString", description: "MongoDB connection string" }],
2927
+ "redis-cluster": [
2928
+ { name: "host", description: "Redis host" },
2929
+ { name: "readerHost", description: "Redis reader host" },
2930
+ { name: "port", description: "Redis port" },
2931
+ { name: "sharding", description: "Sharding status" }
2932
+ ],
2933
+ "state-machine": [
2934
+ { name: "arn", description: "State machine ARN" },
2935
+ { name: "name", description: "State machine name" }
2936
+ ],
2937
+ "user-auth-pool": [
2938
+ { name: "id", description: "User pool ID" },
2939
+ { name: "clientId", description: "Client ID" },
2940
+ { name: "domain", description: "User pool domain" }
2941
+ ],
2942
+ "upstash-redis": [
2943
+ { name: "host", description: "Upstash Redis host" },
2944
+ { name: "port", description: "Upstash Redis port" },
2945
+ { name: "password", description: "Password" },
2946
+ { name: "restToken", description: "REST token" },
2947
+ { name: "readOnlyRestToken", description: "Read-only REST token" },
2948
+ { name: "restUrl", description: "REST URL" },
2949
+ { name: "redisUrl", description: "Redis URL" }
2950
+ ],
2951
+ "application-load-balancer": [
2952
+ { name: "domain", description: "Load balancer domain" },
2953
+ { name: "customDomains", description: "Custom domains" }
2954
+ ],
2955
+ "network-load-balancer": [
2956
+ { name: "domain", description: "Load balancer domain" },
2957
+ { name: "customDomains", description: "Custom domains" }
2958
+ ],
2959
+ "hosting-bucket": [
2960
+ { name: "name", description: "Bucket name" },
2961
+ { name: "arn", description: "Bucket ARN" }
2962
+ ],
2963
+ "web-app-firewall": [
2964
+ { name: "arn", description: "Firewall ARN" },
2965
+ { name: "scope", description: "Firewall scope" }
2966
+ ],
2967
+ "open-search-domain": [
2968
+ { name: "domainEndpoint", description: "OpenSearch domain endpoint" },
2969
+ { name: "arn", description: "Domain ARN" }
2970
+ ],
2971
+ "efs-filesystem": [
2972
+ { name: "arn", description: "EFS ARN" },
2973
+ { name: "id", description: "EFS ID" }
2974
+ ],
2975
+ "nextjs-web": [{ name: "url", description: "Website URL" }]
2976
+ };
2977
+
2978
+ // src/api/npm/ts/resources.ts
2979
+ var getParamReferenceSymbol2 = Symbol.for("stacktape:getParamReference");
2980
+ function createResourceClass(className, resourceType) {
2981
+ const ResourceClass = class extends BaseResource {
2982
+ static {
2983
+ __name(this, "ResourceClass");
2984
+ }
2985
+ constructor(name, properties, overrides) {
2986
+ super(name, resourceType, properties, overrides);
2987
+ }
2988
+ };
2989
+ Object.defineProperty(ResourceClass, "name", { value: className });
2990
+ const referenceableParams = REFERENCEABLE_PARAMS[resourceType] || [];
2991
+ for (const param of referenceableParams) {
2992
+ Object.defineProperty(ResourceClass.prototype, param.name, {
2993
+ get() {
2994
+ return this[getParamReferenceSymbol2](param.name);
2995
+ },
2996
+ enumerable: false,
2997
+ configurable: true
2998
+ });
2999
+ }
3000
+ return ResourceClass;
3001
+ }
3002
+ __name(createResourceClass, "createResourceClass");
3003
+ var RelationalDatabase = createResourceClass("RelationalDatabase", "relational-database");
3004
+ var WebService = createResourceClass("WebService", "web-service");
3005
+ var PrivateService = createResourceClass("PrivateService", "private-service");
3006
+ var WorkerService = createResourceClass("WorkerService", "worker-service");
3007
+ var ContainerWorkload = createResourceClass("ContainerWorkload", "multi-container-workload");
3008
+ var LambdaFunction = createResourceClass("LambdaFunction", "function");
3009
+ var BatchJob = createResourceClass("BatchJob", "batch-job");
3010
+ var Bucket = createResourceClass("Bucket", "bucket");
3011
+ var HostingBucket = createResourceClass("HostingBucket", "hosting-bucket");
3012
+ var DynamoDbTable = createResourceClass("DynamoDbTable", "dynamo-db-table");
3013
+ var EventBus = createResourceClass("EventBus", "event-bus");
3014
+ var HttpApiGateway = createResourceClass("HttpApiGateway", "http-api-gateway");
3015
+ var ApplicationLoadBalancer = createResourceClass("ApplicationLoadBalancer", "application-load-balancer");
3016
+ var NetworkLoadBalancer = createResourceClass("NetworkLoadBalancer", "network-load-balancer");
3017
+ var RedisCluster = createResourceClass("RedisCluster", "redis-cluster");
3018
+ var MongoDbAtlasCluster = createResourceClass("MongoDbAtlasCluster", "mongo-db-atlas-cluster");
3019
+ var StateMachine = createResourceClass("StateMachine", "state-machine");
3020
+ var UserAuthPool = createResourceClass("UserAuthPool", "user-auth-pool");
3021
+ var UpstashRedis = createResourceClass("UpstashRedis", "upstash-redis");
3022
+ var SqsQueue = createResourceClass("SqsQueue", "sqs-queue");
3023
+ var SnsTopic = createResourceClass("SnsTopic", "sns-topic");
3024
+ var WebAppFirewall = createResourceClass("WebAppFirewall", "web-app-firewall");
3025
+ var OpenSearchDomain = createResourceClass("OpenSearchDomain", "open-search-domain");
3026
+ var EfsFilesystem = createResourceClass("EfsFilesystem", "efs-filesystem");
3027
+ var NextjsWeb = createResourceClass("NextjsWeb", "nextjs-web");
3028
+ var Bastion = createResourceClass("Bastion", "bastion");
3029
+
3030
+ // src/api/npm/ts/type-properties.ts
3031
+ function createTypePropertiesClass(className, typeValue) {
3032
+ const TypePropertiesClass = class extends BaseTypeProperties {
3033
+ static {
3034
+ __name(this, "TypePropertiesClass");
3035
+ }
3036
+ constructor(properties) {
3037
+ super(typeValue, properties);
3038
+ }
3039
+ };
3040
+ Object.defineProperty(TypePropertiesClass, "name", { value: className });
3041
+ return TypePropertiesClass;
3042
+ }
3043
+ __name(createTypePropertiesClass, "createTypePropertiesClass");
3044
+ var RdsEnginePostgres = createTypePropertiesClass("RdsEnginePostgres", "postgres");
3045
+ var RdsEngineMariadb = createTypePropertiesClass("RdsEngineMariadb", "mariadb");
3046
+ var RdsEngineMysql = createTypePropertiesClass("RdsEngineMysql", "mysql");
3047
+ var RdsEngineOracleEE = createTypePropertiesClass("RdsEngineOracleEE", "oracle-ee");
3048
+ var RdsEngineOracleSE2 = createTypePropertiesClass("RdsEngineOracleSE2", "oracle-se2");
3049
+ var RdsEngineSqlServerEE = createTypePropertiesClass("RdsEngineSqlServerEE", "sqlserver-ee");
3050
+ var RdsEngineSqlServerEX = createTypePropertiesClass("RdsEngineSqlServerEX", "sqlserver-ex");
3051
+ var RdsEngineSqlServerSE = createTypePropertiesClass("RdsEngineSqlServerSE", "sqlserver-se");
3052
+ var RdsEngineSqlServerWeb = createTypePropertiesClass("RdsEngineSqlServerWeb", "sqlserver-web");
3053
+ var AuroraEnginePostgresql = createTypePropertiesClass("AuroraEnginePostgresql", "aurora-postgresql");
3054
+ var AuroraEngineMysql = createTypePropertiesClass("AuroraEngineMysql", "aurora-mysql");
3055
+ var AuroraServerlessEnginePostgresql = createTypePropertiesClass(
3056
+ "AuroraServerlessEnginePostgresql",
3057
+ "aurora-postgresql-serverless"
3058
+ );
3059
+ var AuroraServerlessEngineMysql = createTypePropertiesClass(
3060
+ "AuroraServerlessEngineMysql",
3061
+ "aurora-mysql-serverless"
3062
+ );
3063
+ var AuroraServerlessV2EnginePostgresql = createTypePropertiesClass(
3064
+ "AuroraServerlessV2EnginePostgresql",
3065
+ "aurora-postgresql-serverless-v2"
3066
+ );
3067
+ var AuroraServerlessV2EngineMysql = createTypePropertiesClass(
3068
+ "AuroraServerlessV2EngineMysql",
3069
+ "aurora-mysql-serverless-v2"
3070
+ );
3071
+ var StacktapeLambdaBuildpackPackaging = createTypePropertiesClass(
3072
+ "StacktapeLambdaBuildpackPackaging",
3073
+ "stacktape-lambda-buildpack"
3074
+ );
3075
+ var CustomArtifactLambdaPackaging = createTypePropertiesClass(
3076
+ "CustomArtifactLambdaPackaging",
3077
+ "custom-artifact"
3078
+ );
3079
+ var PrebuiltImagePackaging = createTypePropertiesClass("PrebuiltImagePackaging", "prebuilt-image");
3080
+ var CustomDockerfilePackaging = createTypePropertiesClass("CustomDockerfilePackaging", "custom-dockerfile");
3081
+ var ExternalBuildpackPackaging = createTypePropertiesClass("ExternalBuildpackPackaging", "external-buildpack");
3082
+ var NixpacksPackaging = createTypePropertiesClass("NixpacksPackaging", "nixpacks");
3083
+ var StacktapeImageBuildpackPackaging = createTypePropertiesClass(
3084
+ "StacktapeImageBuildpackPackaging",
3085
+ "stacktape-image-buildpack"
3086
+ );
3087
+ var HttpApiIntegration = createTypePropertiesClass("HttpApiIntegration", "http-api-gateway");
3088
+ var S3Integration = createTypePropertiesClass("S3Integration", "s3");
3089
+ var ScheduleIntegration = createTypePropertiesClass("ScheduleIntegration", "schedule");
3090
+ var SnsIntegration = createTypePropertiesClass("SnsIntegration", "sns");
3091
+ var SqsIntegration = createTypePropertiesClass("SqsIntegration", "sqs");
3092
+ var KinesisIntegration = createTypePropertiesClass("KinesisIntegration", "kinesis");
3093
+ var DynamoDbIntegration = createTypePropertiesClass("DynamoDbIntegration", "dynamodb");
3094
+ var CloudwatchLogIntegration = createTypePropertiesClass("CloudwatchLogIntegration", "cloudwatch-logs");
3095
+ var ApplicationLoadBalancerIntegration = createTypePropertiesClass(
3096
+ "ApplicationLoadBalancerIntegration",
3097
+ "application-load-balancer"
3098
+ );
3099
+ var EventBusIntegration = createTypePropertiesClass("EventBusIntegration", "event-bus");
3100
+ var KafkaTopicIntegration = createTypePropertiesClass("KafkaTopicIntegration", "kafka-topic");
3101
+ var AlarmIntegration = createTypePropertiesClass("AlarmIntegration", "alarm");
3102
+ var CdnLoadBalancerRoute = createTypePropertiesClass("CdnLoadBalancerRoute", "application-load-balancer");
3103
+ var CdnHttpApiGatewayRoute = createTypePropertiesClass("CdnHttpApiGatewayRoute", "http-api-gateway");
3104
+ var CdnLambdaFunctionRoute = createTypePropertiesClass("CdnLambdaFunctionRoute", "function");
3105
+ var CdnCustomDomainRoute = createTypePropertiesClass("CdnCustomDomainRoute", "custom-origin");
3106
+ var CdnBucketRoute = createTypePropertiesClass("CdnBucketRoute", "bucket");
3107
+ var ManagedRuleGroup = createTypePropertiesClass("ManagedRuleGroup", "managed-rule-group");
3108
+ var CustomRuleGroup = createTypePropertiesClass("CustomRuleGroup", "custom-rule-group");
3109
+ var RateBasedRule = createTypePropertiesClass("RateBasedRule", "rate-based-rule");
3110
+ var SqsQueueEventBusIntegration = createTypePropertiesClass("SqsQueueEventBusIntegration", "event-bus");
3111
+ var ContainerWorkloadHttpApiIntegration = createTypePropertiesClass(
3112
+ "ContainerWorkloadHttpApiIntegration",
3113
+ "http-api-gateway"
3114
+ );
3115
+ var ContainerWorkloadInternalIntegration = createTypePropertiesClass(
3116
+ "ContainerWorkloadInternalIntegration",
3117
+ "internal"
3118
+ );
3119
+ var ContainerWorkloadServiceConnectIntegration = createTypePropertiesClass(
3120
+ "ContainerWorkloadServiceConnectIntegration",
3121
+ "service-connect"
3122
+ );
3123
+ var LocalScriptWithCommand = createTypePropertiesClass("LocalScriptWithCommand", "local-script");
3124
+ var LocalScriptWithCommands = createTypePropertiesClass("LocalScriptWithCommands", "local-script");
3125
+ var LocalScriptWithFileScript = createTypePropertiesClass("LocalScriptWithFileScript", "local-script");
3126
+ var LocalScriptWithFileScripts = createTypePropertiesClass("LocalScriptWithFileScripts", "local-script");
3127
+ var BastionScriptWithCommand = createTypePropertiesClass("BastionScriptWithCommand", "bastion-script");
3128
+ var BastionScriptWithCommands = createTypePropertiesClass("BastionScriptWithCommands", "bastion-script");
3129
+ var LocalScriptWithBastionTunnelingCommand = createTypePropertiesClass(
3130
+ "LocalScriptWithBastionTunnelingCommand",
3131
+ "local-script-with-bastion-tunneling"
3132
+ );
3133
+ var LocalScriptWithBastionTunnelingCommands = createTypePropertiesClass(
3134
+ "LocalScriptWithBastionTunnelingCommands",
3135
+ "local-script-with-bastion-tunneling"
3136
+ );
3137
+ var LocalScriptWithBastionTunnelingFileScript = createTypePropertiesClass(
3138
+ "LocalScriptWithBastionTunnelingFileScript",
3139
+ "local-script-with-bastion-tunneling"
3140
+ );
3141
+ var LocalScriptWithBastionTunnelingFileScripts = createTypePropertiesClass(
3142
+ "LocalScriptWithBastionTunnelingFileScripts",
3143
+ "local-script-with-bastion-tunneling"
3144
+ );
3145
+ var HttpEndpointLogForwarding = createTypePropertiesClass("HttpEndpointLogForwarding", "http-endpoint");
3146
+ var HighlightLogForwarding = createTypePropertiesClass("HighlightLogForwarding", "highlight");
3147
+ var DatadogLogForwarding = createTypePropertiesClass("DatadogLogForwarding", "datadog");
3148
+ var ExpirationLifecycleRule = createTypePropertiesClass("ExpirationLifecycleRule", "expiration");
3149
+ var NonCurrentVersionExpirationLifecycleRule = createTypePropertiesClass(
3150
+ "NonCurrentVersionExpirationLifecycleRule",
3151
+ "non-current-version-expiration"
3152
+ );
3153
+ var ContainerEfsMount = createTypePropertiesClass("ContainerEfsMount", "efs");
3154
+ var LambdaEfsMount = createTypePropertiesClass("LambdaEfsMount", "efs");
3155
+ // Annotate the CommonJS export names for ESM import in node:
3156
+ 0 && (module.exports = {
3157
+ $CfFormat,
3158
+ $CfResourceParam,
3159
+ $CfStackOutput,
3160
+ $GitInfo,
3161
+ $ResourceParam,
3162
+ $Secret,
3163
+ AWS_SES,
3164
+ AlarmIntegration,
3165
+ ApplicationLoadBalancer,
3166
+ ApplicationLoadBalancerIntegration,
3167
+ AuroraEngineMysql,
3168
+ AuroraEnginePostgresql,
3169
+ AuroraServerlessEngineMysql,
3170
+ AuroraServerlessEnginePostgresql,
3171
+ AuroraServerlessV2EngineMysql,
3172
+ AuroraServerlessV2EnginePostgresql,
3173
+ BaseResource,
3174
+ BaseTypeProperties,
3175
+ Bastion,
3176
+ BastionScriptWithCommand,
3177
+ BastionScriptWithCommands,
3178
+ BatchJob,
3179
+ Bucket,
3180
+ CdnBucketRoute,
3181
+ CdnCustomDomainRoute,
3182
+ CdnHttpApiGatewayRoute,
3183
+ CdnLambdaFunctionRoute,
3184
+ CdnLoadBalancerRoute,
3185
+ CloudwatchLogIntegration,
3186
+ ContainerEfsMount,
3187
+ ContainerWorkload,
3188
+ ContainerWorkloadHttpApiIntegration,
3189
+ ContainerWorkloadInternalIntegration,
3190
+ ContainerWorkloadServiceConnectIntegration,
3191
+ CustomArtifactLambdaPackaging,
3192
+ CustomDockerfilePackaging,
3193
+ CustomRuleGroup,
3194
+ DatadogLogForwarding,
3195
+ DynamoDbIntegration,
3196
+ DynamoDbTable,
3197
+ EfsFilesystem,
3198
+ EventBus,
3199
+ EventBusIntegration,
3200
+ ExpirationLifecycleRule,
3201
+ ExternalBuildpackPackaging,
3202
+ HighlightLogForwarding,
3203
+ HostingBucket,
3204
+ HttpApiGateway,
3205
+ HttpApiIntegration,
3206
+ HttpEndpointLogForwarding,
3207
+ KafkaTopicIntegration,
3208
+ KinesisIntegration,
3209
+ LambdaEfsMount,
3210
+ LambdaFunction,
3211
+ LocalScriptWithBastionTunnelingCommand,
3212
+ LocalScriptWithBastionTunnelingCommands,
3213
+ LocalScriptWithBastionTunnelingFileScript,
3214
+ LocalScriptWithBastionTunnelingFileScripts,
3215
+ LocalScriptWithCommand,
3216
+ LocalScriptWithCommands,
3217
+ LocalScriptWithFileScript,
3218
+ LocalScriptWithFileScripts,
3219
+ ManagedRuleGroup,
3220
+ MongoDbAtlasCluster,
3221
+ NetworkLoadBalancer,
3222
+ NextjsWeb,
3223
+ NixpacksPackaging,
3224
+ NonCurrentVersionExpirationLifecycleRule,
3225
+ OpenSearchDomain,
3226
+ PrebuiltImagePackaging,
3227
+ PrivateService,
3228
+ RateBasedRule,
3229
+ RdsEngineMariadb,
3230
+ RdsEngineMysql,
3231
+ RdsEngineOracleEE,
3232
+ RdsEngineOracleSE2,
3233
+ RdsEnginePostgres,
3234
+ RdsEngineSqlServerEE,
3235
+ RdsEngineSqlServerEX,
3236
+ RdsEngineSqlServerSE,
3237
+ RdsEngineSqlServerWeb,
3238
+ RedisCluster,
3239
+ RelationalDatabase,
3240
+ ResourceParamReference,
3241
+ S3Integration,
3242
+ ScheduleIntegration,
3243
+ SnsIntegration,
3244
+ SnsTopic,
3245
+ SqsIntegration,
3246
+ SqsQueue,
3247
+ SqsQueueEventBusIntegration,
3248
+ StacktapeImageBuildpackPackaging,
3249
+ StacktapeLambdaBuildpackPackaging,
3250
+ StateMachine,
3251
+ UpstashRedis,
3252
+ UserAuthPool,
3253
+ WebAppFirewall,
3254
+ WebService,
3255
+ WorkerService,
3256
+ defineConfig,
3257
+ transformConfigWithResources,
3258
+ transformValue
3259
+ });
3260
+ //# sourceMappingURL=index.js.map