stacktape 3.0.12 → 3.0.13
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 +1 -1
- package/package.json +1 -1
- package/sdk.js +1 -1
- package/index.js.map +0 -7
- package/sdk.js.map +0 -7
package/index.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/api/npm/ts/index.ts", "../node_modules/change-case/src/index.ts", "../shared/naming/logical-names.ts", "../src/api/npm/ts/child-resources.ts", "../src/api/npm/ts/config.ts", "../src/api/npm/ts/directives.ts", "../src/api/npm/ts/global-aws-services.ts", "../src/api/npm/ts/class-config.ts", "../src/api/npm/ts/resource-metadata.ts", "../src/api/npm/ts/resources.ts", "../src/api/npm/ts/type-properties.ts"],
|
|
4
|
-
"sourcesContent": ["// Main export - only classes, directives, and defineConfig\n\n// defineConfig function\nexport { defineConfig } from './config';\n\n// Directives\nexport { $CfFormat, $CfResourceParam, $CfStackOutput, $GitInfo, $ResourceParam, $Secret } from './directives';\n\n// AWS service constants (for connectTo)\nexport { AWS_SES } from './global-aws-services';\n\n// Resource classes\nexport * from './resources';\n\n// Type/properties classes\nexport * from './type-properties';\n", "// Regexps involved with splitting words in various case formats.\nconst SPLIT_LOWER_UPPER_RE = /([\\p{Ll}\\d])(\\p{Lu})/gu;\nconst SPLIT_UPPER_UPPER_RE = /(\\p{Lu})([\\p{Lu}][\\p{Ll}])/gu;\n\n// Used to iterate over the initial split result and separate numbers.\nconst SPLIT_SEPARATE_NUMBER_RE = /(\\d)\\p{Ll}|(\\p{L})\\d/u;\n\n// Regexp involved with stripping non-word characters from the result.\nconst DEFAULT_STRIP_REGEXP = /[^\\p{L}\\d]+/giu;\n\n// The replacement value for splits.\nconst SPLIT_REPLACE_VALUE = \"$1\\0$2\";\n\n// The default characters to keep after transforming case.\nconst DEFAULT_PREFIX_SUFFIX_CHARACTERS = \"\";\n\n/**\n * Supported locale values. Use `false` to ignore locale.\n * Defaults to `undefined`, which uses the host environment.\n */\nexport type Locale = string[] | string | false | undefined;\n\n/**\n * Options used for converting strings to pascal/camel case.\n */\nexport interface PascalCaseOptions extends Options {\n mergeAmbiguousCharacters?: boolean;\n}\n\n/**\n * Options used for converting strings to any case.\n */\nexport interface Options {\n locale?: Locale;\n split?: (value: string) => string[];\n /** @deprecated Pass `split: splitSeparateNumbers` instead. */\n separateNumbers?: boolean;\n delimiter?: string;\n prefixCharacters?: string;\n suffixCharacters?: string;\n}\n\n/**\n * Split any cased input strings into an array of words.\n */\nexport function split(value: string) {\n let result = value.trim();\n\n result = result\n .replace(SPLIT_LOWER_UPPER_RE, SPLIT_REPLACE_VALUE)\n .replace(SPLIT_UPPER_UPPER_RE, SPLIT_REPLACE_VALUE);\n\n result = result.replace(DEFAULT_STRIP_REGEXP, \"\\0\");\n\n let start = 0;\n let end = result.length;\n\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\") start++;\n if (start === end) return [];\n while (result.charAt(end - 1) === \"\\0\") end--;\n\n return result.slice(start, end).split(/\\0/g);\n}\n\n/**\n * Split the input string into an array of words, separating numbers.\n */\nexport function splitSeparateNumbers(value: string) {\n const words = split(value);\n for (let i = 0; i < words.length; i++) {\n const word = words[i];\n const match = SPLIT_SEPARATE_NUMBER_RE.exec(word);\n if (match) {\n const offset = match.index + (match[1] ?? match[2]).length;\n words.splice(i, 1, word.slice(0, offset), word.slice(offset));\n }\n }\n return words;\n}\n\n/**\n * Convert a string to space separated lower case (`foo bar`).\n */\nexport function noCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n return (\n prefix +\n words.map(lowerFactory(options?.locale)).join(options?.delimiter ?? \" \") +\n suffix\n );\n}\n\n/**\n * Convert a string to camel case (`fooBar`).\n */\nexport function camelCase(input: string, options?: PascalCaseOptions) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return (\n prefix +\n words\n .map((word, index) => {\n if (index === 0) return lower(word);\n return transform(word, index);\n })\n .join(options?.delimiter ?? \"\") +\n suffix\n );\n}\n\n/**\n * Convert a string to pascal case (`FooBar`).\n */\nexport function pascalCase(input: string, options?: PascalCaseOptions) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return prefix + words.map(transform).join(options?.delimiter ?? \"\") + suffix;\n}\n\n/**\n * Convert a string to pascal snake case (`Foo_Bar`).\n */\nexport function pascalSnakeCase(input: string, options?: Options) {\n return capitalCase(input, { delimiter: \"_\", ...options });\n}\n\n/**\n * Convert a string to capital case (`Foo Bar`).\n */\nexport function capitalCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n return (\n prefix +\n words\n .map(capitalCaseTransformFactory(lower, upper))\n .join(options?.delimiter ?? \" \") +\n suffix\n );\n}\n\n/**\n * Convert a string to constant case (`FOO_BAR`).\n */\nexport function constantCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n return (\n prefix +\n words.map(upperFactory(options?.locale)).join(options?.delimiter ?? \"_\") +\n suffix\n );\n}\n\n/**\n * Convert a string to dot case (`foo.bar`).\n */\nexport function dotCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \".\", ...options });\n}\n\n/**\n * Convert a string to kebab case (`foo-bar`).\n */\nexport function kebabCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"-\", ...options });\n}\n\n/**\n * Convert a string to path case (`foo/bar`).\n */\nexport function pathCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"/\", ...options });\n}\n\n/**\n * Convert a string to path case (`Foo bar`).\n */\nexport function sentenceCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = capitalCaseTransformFactory(lower, upper);\n return (\n prefix +\n words\n .map((word, index) => {\n if (index === 0) return transform(word);\n return lower(word);\n })\n .join(options?.delimiter ?? \" \") +\n suffix\n );\n}\n\n/**\n * Convert a string to snake case (`foo_bar`).\n */\nexport function snakeCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"_\", ...options });\n}\n\n/**\n * Convert a string to header case (`Foo-Bar`).\n */\nexport function trainCase(input: string, options?: Options) {\n return capitalCase(input, { delimiter: \"-\", ...options });\n}\n\nfunction lowerFactory(locale: Locale): (input: string) => string {\n return locale === false\n ? (input: string) => input.toLowerCase()\n : (input: string) => input.toLocaleLowerCase(locale);\n}\n\nfunction upperFactory(locale: Locale): (input: string) => string {\n return locale === false\n ? (input: string) => input.toUpperCase()\n : (input: string) => input.toLocaleUpperCase(locale);\n}\n\nfunction capitalCaseTransformFactory(\n lower: (input: string) => string,\n upper: (input: string) => string,\n) {\n return (word: string) => `${upper(word[0])}${lower(word.slice(1))}`;\n}\n\nfunction pascalCaseTransformFactory(\n lower: (input: string) => string,\n upper: (input: string) => string,\n) {\n return (word: string, index: number) => {\n const char0 = word[0];\n const initial =\n index > 0 && char0 >= \"0\" && char0 <= \"9\" ? \"_\" + char0 : upper(char0);\n return initial + lower(word.slice(1));\n };\n}\n\nfunction splitPrefixSuffix(\n input: string,\n options: Options = {},\n): [string, string[], string] {\n const splitFn =\n options.split ?? (options.separateNumbers ? splitSeparateNumbers : split);\n const prefixCharacters =\n options.prefixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n const suffixCharacters =\n options.suffixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n let prefixIndex = 0;\n let suffixIndex = input.length;\n\n while (prefixIndex < input.length) {\n const char = input.charAt(prefixIndex);\n if (!prefixCharacters.includes(char)) break;\n prefixIndex++;\n }\n\n while (suffixIndex > prefixIndex) {\n const index = suffixIndex - 1;\n const char = input.charAt(index);\n if (!suffixCharacters.includes(char)) break;\n suffixIndex = index;\n }\n\n return [\n input.slice(0, prefixIndex),\n splitFn(input.slice(prefixIndex, suffixIndex)),\n input.slice(suffixIndex),\n ];\n}\n", "import type { CloudformationResourceType } from '@cloudform/resource-types';\nimport { pascalCase } from 'change-case';\n\nexport const cfLogicalNames = {\n bucket(stpResourceName: string) {\n return pascalCase(`${stpResourceName}-bucket`);\n },\n atlasMongoProject() {\n return buildCfLogicalName({\n specifier: { type: 'AtlasMongo' },\n suffix: { cloudformationResourceType: 'MongoDB::StpAtlasV1::Project' }\n });\n },\n atlasMongoCredentialsProvider() {\n return buildCfLogicalName({\n specifier: { type: 'AtlasMongoCredentialsProvider' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n atlasMongoProjectVpcNetworkContainer() {\n return buildCfLogicalName({\n specifier: { type: 'AtlasMongo' },\n suffix: { cloudformationResourceType: 'MongoDB::StpAtlasV1::NetworkContainer' }\n });\n },\n atlasMongoProjectVpcNetworkPeering() {\n return buildCfLogicalName({\n specifier: { type: 'AtlasMongo' },\n suffix: { cloudformationResourceType: 'MongoDB::StpAtlasV1::NetworkPeering' }\n });\n },\n atlasMongoProjectIpAccessList() {\n return buildCfLogicalName({\n specifier: { type: 'AtlasMongo' },\n suffix: { cloudformationResourceType: 'MongoDB::StpAtlasV1::ProjectIpAccessList' }\n });\n },\n atlasMongoUserAssociatedWithRole(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'AtlasMongo' },\n suffix: { cloudformationResourceType: 'MongoDB::StpAtlasV1::DatabaseUser' }\n });\n },\n atlasMongoClusterMasterUser(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'MongoDB::StpAtlasV1::DatabaseUser' }\n });\n },\n atlasMongoCluster(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'MongoDB::StpAtlasV1::Cluster' }\n });\n },\n redisReplicationGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ElastiCache::ReplicationGroup' }\n });\n },\n redisLogGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n redisParameterGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ElastiCache::ParameterGroup' }\n });\n },\n redisSubnetGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ElastiCache::SubnetGroup' }\n });\n },\n redisSecurityGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n efsFilesystem(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: {\n cloudformationResourceType: 'AWS::EFS::FileSystem'\n }\n });\n },\n efsAccessPoint({\n stpResourceName,\n efsFilesystemName,\n rootDirectory\n }: {\n stpResourceName: string;\n efsFilesystemName: string;\n rootDirectory?: string;\n }) {\n // Create a unique identifier based on the root directory\n const rootDirIdentifier = rootDirectory ? `${rootDirectory.replace(/\\//g, '-').replace(/^-|-$/g, '')}` : 'Root';\n\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: `${efsFilesystemName}-${rootDirIdentifier}`\n },\n suffix: {\n cloudformationResourceType: 'AWS::EFS::AccessPoint'\n }\n });\n },\n efsMountTarget(stpResourceName: string, mountTargetIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Subnet', typeIndex: mountTargetIndex },\n suffix: { cloudformationResourceType: 'AWS::EFS::MountTarget' }\n });\n },\n efsSecurityGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n snsRoleSendSmsFromCognito(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'SendSms' },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n cloudfrontDistribution(stpResourceName: string, distributionIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'CDN' },\n suffix: { cloudformationResourceType: 'AWS::CloudFront::Distribution', index: distributionIndex }\n });\n },\n cloudfrontCustomCachePolicy(stpResourceName: string, cachingOptionsHash: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `CDNCacheBehavior${cachingOptionsHash}` },\n suffix: { cloudformationResourceType: 'AWS::CloudFront::CachePolicy' }\n });\n },\n cloudfrontDefaultCachePolicy(type: 'DefDynamic' | 'DefStatic') {\n return buildCfLogicalName({\n specifier: { type: `CDN${type}` },\n suffix: { cloudformationResourceType: 'AWS::CloudFront::CachePolicy' }\n });\n },\n cloudfrontCustomOriginRequestPolicy(stpResourceName: string, forwardingOptionsHash: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `CDNCacheBehavior${forwardingOptionsHash}` },\n suffix: { cloudformationResourceType: 'AWS::CloudFront::OriginRequestPolicy' }\n });\n },\n cloudfrontDefaultOriginRequestPolicy(type: 'DefDynamic' | 'DefStatic') {\n return buildCfLogicalName({\n specifier: { type: `CDN${type}` },\n suffix: { cloudformationResourceType: 'AWS::CloudFront::OriginRequestPolicy' }\n });\n },\n cloudfrontOriginAccessIdentity(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'CDN' },\n suffix: { cloudformationResourceType: 'AWS::CloudFront::CloudFrontOriginAccessIdentity' }\n });\n },\n openNextHostHeaderRewriteFunction(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'OpenNextHostHeaderRewrite' },\n suffix: { cloudformationResourceType: 'AWS::CloudFront::Function' }\n });\n },\n openNextAssetReplacerCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'AssetReplacer' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n openNextDynamoInsertCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'DynamoInsert' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n dnsRecord(fullyQualifiedDomainName: string) {\n // we do not build build the resource name conventionally through stpResourceName\n // this is due to update behaviors of Cloudformation\n return buildCfLogicalName({\n stpResourceName: '',\n specifier: { type: getSpecifierForDomainResource(fullyQualifiedDomainName) },\n suffix: { cloudformationResourceType: 'AWS::Route53::RecordSet' }\n });\n },\n dynamoGlobalTable(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::DynamoDB::GlobalTable' }\n });\n },\n dynamoRegionalTable(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::DynamoDB::Table' }\n });\n },\n bucketPolicy(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::S3::BucketPolicy' }\n });\n },\n lambdaLogGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n eventOnDeliveryFailureSqsQueuePolicy(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Event',\n typeIndex: eventIndex\n },\n suffix: { cloudformationResourceType: 'AWS::SQS::QueuePolicy' }\n });\n },\n snsEventSubscription(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Event',\n typeIndex: eventIndex\n },\n suffix: { cloudformationResourceType: 'AWS::SNS::Subscription' }\n });\n },\n snsEventPermission(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Event',\n typeIndex: eventIndex\n },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n });\n },\n ecrRepo() {\n return buildCfLogicalName({\n specifier: {\n type: 'Container'\n },\n suffix: { cloudformationResourceType: 'AWS::ECR::Repository' }\n });\n },\n deploymentBucket() {\n return buildCfLogicalName({\n specifier: {\n type: 'Deployment'\n },\n suffix: { cloudformationResourceType: 'AWS::S3::Bucket' }\n });\n },\n deploymentBucketPolicy() {\n return buildCfLogicalName({\n specifier: {\n type: 'Deployment'\n },\n suffix: { cloudformationResourceType: 'AWS::S3::BucketPolicy' }\n });\n },\n lambdaInvokeConfig(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Lambda::EventInvokeConfig' }\n });\n },\n lambdaVersionPublisherCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Version' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n codeDeployServiceRole() {\n return buildCfLogicalName({\n specifier: {\n type: 'CodeDeploy'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n batchInstanceRole() {\n return buildCfLogicalName({\n specifier: {\n type: 'BatchInstance'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n batchInstanceDefaultSecurityGroup() {\n return buildCfLogicalName({\n specifier: {\n type: 'BatchInstance'\n },\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n batchInstanceProfile() {\n return buildCfLogicalName({\n specifier: {\n type: 'BatchInstance'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::InstanceProfile' }\n });\n },\n batchInstanceLaunchTemplate() {\n return buildCfLogicalName({\n specifier: {\n type: 'BatchInstance'\n },\n suffix: { cloudformationResourceType: 'AWS::EC2::LaunchTemplate' }\n });\n },\n batchStateMachineExecutionRole() {\n return buildCfLogicalName({\n specifier: {\n type: 'BatchStateMachine'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n batchSpotFleetRole() {\n return buildCfLogicalName({\n specifier: {\n type: 'BatchSpotFleet'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n batchServiceRole() {\n return buildCfLogicalName({\n specifier: {\n type: 'BatchService'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n batchJobExecutionRole(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n batchComputeEnvironment(spot: boolean, gpu: boolean) {\n return buildCfLogicalName({\n specifier: {\n type: `Batch-${spot ? 'spot' : 'onDemand'}-${gpu ? 'gpu' : ''}`\n },\n suffix: { cloudformationResourceType: 'AWS::Batch::ComputeEnvironment' }\n });\n },\n batchJobQueue(spot: boolean, gpu: boolean) {\n return buildCfLogicalName({\n specifier: {\n type: `Batch-${spot ? 'spot' : 'onDemand'}-${gpu ? 'gpu' : ''}`\n },\n suffix: { cloudformationResourceType: 'AWS::Batch::JobQueue' }\n });\n },\n subnet(publicSubnet: boolean, subnetIndex: number) {\n return buildCfLogicalName({\n specifier: {\n type: publicSubnet ? 'Public' : 'Private'\n },\n suffix: { cloudformationResourceType: 'AWS::EC2::Subnet', index: subnetIndex }\n });\n },\n vpc() {\n return buildCfLogicalName({\n suffix: { cloudformationResourceType: 'AWS::EC2::VPC' }\n });\n },\n vpcGatewayEndpoint(type: 's3' | 'dynamo-db') {\n return buildCfLogicalName({\n specifier: { type: `${type}-Gateway` },\n suffix: { cloudformationResourceType: 'AWS::EC2::VPCEndpoint' }\n });\n },\n dbSubnetGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::RDS::DBSubnetGroup' }\n });\n },\n auroraDbCluster(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::RDS::DBCluster' }\n });\n },\n auroraDbClusterParameterGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::RDS::DBClusterParameterGroup' }\n });\n },\n auroraDbClusterLogGroup(stpResourceName: string, logGroupType: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Cluster', subtype: logGroupType },\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n dbSecurityGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n dbInstance(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::RDS::DBInstance' }\n });\n },\n dbInstanceLogGroup(stpResourceName: string, logGroupType: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Instance', subtype: logGroupType },\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n openSearchDomainLogGroup(stpResourceName: string, logGroupType: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Instance', subtype: logGroupType },\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n dbOptionGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::RDS::OptionGroup' }\n });\n },\n dbInstanceParameterGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::RDS::DBParameterGroup' }\n });\n },\n dbReplica(stpResourceName: string, replicaNum: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Replica', typeIndex: replicaNum },\n suffix: { cloudformationResourceType: 'AWS::RDS::DBInstance' }\n });\n },\n dbReplicaLogGroup(stpResourceName: string, logGroupType: string, replicaNum: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Replica', typeIndex: replicaNum, subtype: logGroupType },\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n dbReplicaParameterGroup(stpResourceName: string, replicaNum: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Replica', typeIndex: replicaNum },\n suffix: { cloudformationResourceType: 'AWS::RDS::DBParameterGroup' }\n });\n },\n auroraDbInstance(stpResourceName: string, instanceNum: number) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::RDS::DBInstance', index: instanceNum }\n });\n },\n auroraDbInstanceParameterGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Instance' },\n suffix: { cloudformationResourceType: 'AWS::RDS::DBParameterGroup' }\n });\n },\n eventBusRule(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Event',\n typeIndex: eventIndex\n },\n suffix: { cloudformationResourceType: 'AWS::Events::Rule' }\n });\n },\n customTaggingScheduleRule() {\n return buildCfLogicalName({\n specifier: { type: 'StpCustomTaggingSchedule' },\n suffix: { cloudformationResourceType: 'AWS::Events::Rule' }\n });\n },\n customTaggingScheduleRulePermission() {\n return buildCfLogicalName({\n specifier: { type: 'StpCustomTaggingScheduleRule' },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n });\n },\n cloudWatchLogEventSubscriptionFilter(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Event',\n typeIndex: eventIndex\n },\n suffix: { cloudformationResourceType: 'AWS::Logs::SubscriptionFilter' }\n });\n },\n eventSourceMapping(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Event',\n typeIndex: eventIndex\n },\n suffix: { cloudformationResourceType: 'AWS::Lambda::EventSourceMapping' }\n });\n },\n iotEventTopicRule(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Event',\n typeIndex: eventIndex\n },\n suffix: { cloudformationResourceType: 'AWS::IoT::TopicRule' }\n });\n },\n kinesisEventConsumer(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Event',\n typeIndex: eventIndex\n },\n suffix: { cloudformationResourceType: 'AWS::Kinesis::StreamConsumer' }\n });\n },\n lambda(stpResourceName: string, isStpServiceFunction?: boolean) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: isStpServiceFunction ? { type: 'CustomResource' } : undefined,\n suffix: { cloudformationResourceType: 'AWS::Lambda::Function' }\n });\n },\n lambdaStpAlias(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: 'Stp'\n },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Alias' }\n });\n },\n lambdaUrl(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Lambda::Url' }\n });\n },\n codeDeployDeploymentGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::CodeDeploy::DeploymentGroup' }\n });\n },\n customResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n scriptCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Script' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n batchStateMachine(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'JobExecution' },\n suffix: { cloudformationResourceType: 'AWS::StepFunctions::StateMachine' }\n });\n },\n batchJobDefinition(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Batch::JobDefinition' }\n });\n },\n batchJobLogGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n globalStateMachinesRole() {\n return buildCfLogicalName({\n specifier: {\n type: 'GlobalStateMachine'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n stateMachine(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::StepFunctions::StateMachine' }\n });\n },\n internetGateway() {\n return buildCfLogicalName({\n suffix: { cloudformationResourceType: 'AWS::EC2::InternetGateway' }\n });\n },\n vpcGatewayAttachment() {\n return buildCfLogicalName({\n suffix: { cloudformationResourceType: 'AWS::EC2::VPCGatewayAttachment' }\n });\n },\n routeTable(publicSubnet: boolean, subnetIndex: number) {\n return buildCfLogicalName({\n specifier: { type: publicSubnet ? 'PublicSubnet' : 'PrivateSubnet', typeIndex: subnetIndex },\n suffix: { cloudformationResourceType: 'AWS::EC2::RouteTable' }\n });\n },\n internetGatewayRoute(subnetIndex: number) {\n return buildCfLogicalName({\n specifier: { type: 'InternetGateway' },\n suffix: { cloudformationResourceType: 'AWS::EC2::Route', index: subnetIndex }\n });\n },\n atlasMongoVpcRoute(publicSubnetTable: boolean, subnetIndex: number) {\n return buildCfLogicalName({\n specifier: { type: `AtlasMongo${publicSubnetTable ? 'PublicSubnet' : 'PrivateSubnet'}` },\n suffix: { cloudformationResourceType: 'AWS::EC2::Route', index: subnetIndex }\n });\n },\n routeTableToSubnetAssociation(publicSubnet: boolean, subnetIndex: number) {\n return buildCfLogicalName({\n specifier: { type: publicSubnet ? 'PublicSubnet' : 'PrivateSubnet', typeIndex: subnetIndex },\n suffix: { cloudformationResourceType: 'AWS::EC2::SubnetRouteTableAssociation' }\n });\n },\n natGateway(azIndex: number) {\n return buildCfLogicalName({\n suffix: { cloudformationResourceType: 'AWS::EC2::NatGateway', index: azIndex }\n });\n },\n natElasticIp(azIndex: number) {\n return buildCfLogicalName({\n specifier: { type: 'Nat' },\n suffix: { cloudformationResourceType: 'AWS::EC2::EIP', index: azIndex }\n });\n },\n natRoute(subnetIndex: number) {\n return buildCfLogicalName({\n specifier: { type: 'NatPrivateSubnet' },\n suffix: { cloudformationResourceType: 'AWS::EC2::Route', index: subnetIndex }\n });\n },\n eventBus(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Events::EventBus' }\n });\n },\n eventBusArchive(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Events::Archive' }\n });\n },\n ecsCluster(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ECS::Cluster' }\n });\n },\n ecsTaskDefinition(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ECS::TaskDefinition' }\n });\n },\n ecsService(stpResourceName: string, blueGreen: boolean) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: blueGreen ? { type: 'BlueGreen' } : undefined,\n suffix: { cloudformationResourceType: 'AWS::ECS::Service' }\n });\n },\n ecsExecutionRole() {\n return buildCfLogicalName({\n specifier: { type: 'EcsExecution' },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n ecsEc2InstanceRole() {\n return buildCfLogicalName({\n specifier: {\n type: 'EcsInstance'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n ecsEc2AutoscalingGroupWarmPool(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::AutoScaling::WarmPool' }\n });\n },\n eventBusRoleForScheduledInstanceRefresh() {\n return buildCfLogicalName({\n specifier: { type: 'ScheduledInstanceRefresh' },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n schedulerRuleForScheduledInstanceRefresh(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'ScheduledInstanceRefresh' },\n suffix: { cloudformationResourceType: 'AWS::Events::Rule' }\n });\n },\n ecsEc2InstanceLaunchTemplate(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::EC2::LaunchTemplate' }\n });\n },\n ecsEc2AutoscalingGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::AutoScaling::AutoScalingGroup' }\n });\n },\n ecsEc2ForceDeleteAutoscalingGroupCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'ForceDeleteAsg' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n ecsDisableManagedTerminationProtectionCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'DisableManagedTerminationProtection' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n\n ecsEc2CapacityProvider(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ECS::CapacityProvider' }\n });\n },\n ecsEc2CapacityProviderAssociation(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ECS::ClusterCapacityProviderAssociations' }\n });\n },\n ecsEc2InstanceProfile() {\n return buildCfLogicalName({\n specifier: {\n type: 'EcsInstance'\n },\n suffix: { cloudformationResourceType: 'AWS::IAM::InstanceProfile' }\n });\n },\n ecsTaskRole(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n ecsAutoScalingRole() {\n return buildCfLogicalName({\n specifier: { type: 'EcsAutoScale' },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n // ecsScheduledMaintenanceEventBusRule(stpResourceName: string) {\n // return buildCfLogicalName({\n // stpResourceName,\n // specifier: { type: 'ScheduledMaintenance' },\n // suffix: { cloudformationResourceType: 'AWS::Events::Rule' }\n // }).replaceAll('_', '');\n // },\n ecsScheduledMaintenanceLambdaPermission(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'ScheduledMaintenance' },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n }).replaceAll('_', '');\n },\n bastionEc2LaunchTemplate(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::EC2::LaunchTemplate' }\n });\n },\n bastionEc2InstanceProfile(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::IAM::InstanceProfile' }\n });\n },\n bastionEc2AutoscalingGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::AutoScaling::AutoScalingGroup' }\n });\n },\n bastionSecurityGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n bastionCwAgentSsmAssociation(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'CwAgent' },\n suffix: { cloudformationResourceType: 'AWS::SSM::Association' }\n });\n },\n bastionSsmAgentSsmAssociation(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'SsmAgent' },\n suffix: { cloudformationResourceType: 'AWS::SSM::Association' }\n });\n },\n bastionRole(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n bastionLogGroup(stpResourceName: string, logType: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: pascalCase(logType) },\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n bastionCloudwatchSsmDocument() {\n return buildCfLogicalName({\n specifier: { type: 'BastionCloudwatchAgent' },\n suffix: { cloudformationResourceType: 'AWS::SSM::Document' }\n });\n },\n serviceDiscoveryEcsService(stpResourceName: string, serviceTargetContainerPort: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `Port${serviceTargetContainerPort}Discovery` },\n suffix: { cloudformationResourceType: 'AWS::ServiceDiscovery::Service' }\n });\n },\n workloadSecurityGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n loadBalancerSecurityGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Lb' },\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n targetGroup({\n loadBalancerName,\n stpResourceName,\n targetContainerPort,\n blueGreen\n }: {\n stpResourceName: string;\n loadBalancerName: string;\n targetContainerPort?: number;\n blueGreen?: boolean;\n }) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: {\n type: `${loadBalancerName}${targetContainerPort ? `ToPort${targetContainerPort}` : ''}${blueGreen ? 'BG' : ''}`\n },\n suffix: { cloudformationResourceType: 'AWS::ElasticLoadBalancingV2::TargetGroup' }\n });\n },\n lambdaRole(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n defaultLambdaFunctionRole() {\n return buildCfLogicalName({\n specifier: { type: 'Lambda' },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n lambdaPermission(stpResourceName: string, eventIndex: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'Event', typeIndex: eventIndex },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n });\n },\n lambdaPublicUrlPermission(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'PublicUrl' },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n });\n },\n lambdaIotEventPermission(workloadName: string, eventIndex: number) {\n return pascalCase(`${workloadName}-Event${eventIndex}-lambda-iotEventPermission`);\n },\n lambdaTargetGroupPermission(stpResourceName: string, loadBalancerName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `${loadBalancerName}TargetGroup` },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n });\n },\n httpApi(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::Api' }\n });\n },\n httpApiLogGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n httpApiLambdaIntegration({\n stpResourceName,\n stpHttpApiGatewayName\n }: {\n stpResourceName: string;\n stpHttpApiGatewayName: string;\n }) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: stpHttpApiGatewayName },\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::Integration' }\n });\n },\n httpApiContainerWorkloadIntegration({\n stpResourceName,\n stpHttpApiGatewayName,\n targetContainerPort\n }: {\n stpResourceName: string;\n targetContainerPort: number;\n stpHttpApiGatewayName: string;\n }) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `${stpHttpApiGatewayName}ToPort${targetContainerPort}` },\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::Integration' }\n });\n },\n httpApiAuthorizer({ method, path, stpResourceName }: { method: HttpMethod; path: string; stpResourceName: string }) {\n return buildCfLogicalName({\n stpResourceName: '',\n specifier: {\n type: `${stpResourceName}-${method === '*' ? 'Any' : method}-${path === '*' ? 'Default' : path}`\n },\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::Authorizer' }\n });\n },\n httpApiRoute({ method, path, stpResourceName }: { method: HttpMethod; path: string; stpResourceName: string }) {\n return buildCfLogicalName({\n stpResourceName: '',\n specifier: {\n type: `${stpResourceName}-${method === '*' ? 'Any' : method}-${path === '*' ? 'Default' : path}`\n },\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::Route' }\n });\n },\n httpApiVpcLink(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::VpcLink' }\n });\n },\n httpApiVpcLinkSecurityGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'VpcLink' },\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n httpApiLambdaPermission({\n stpResourceNameOfLambda,\n stpResourceNameOfHttpApiGateway\n }: {\n stpResourceNameOfLambda: string;\n stpResourceNameOfHttpApiGateway: string;\n }) {\n return buildCfLogicalName({\n stpResourceName: stpResourceNameOfLambda,\n specifier: { type: stpResourceNameOfHttpApiGateway },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n });\n },\n httpApiStage(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::Stage' }\n });\n },\n httpApiDomain(fullyQualifiedDomainName: string) {\n // we do not build build the resource name conventionally through stpResourceName\n // this is due to update behaviors of Cloudformation\n return buildCfLogicalName({\n stpResourceName: '',\n specifier: { type: getSpecifierForDomainResource(fullyQualifiedDomainName) },\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::DomainName' }\n });\n },\n httpApiDefaultDomain(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::DomainName' }\n });\n },\n httpApiDomainMapping(fullyQualifiedDomainName: string) {\n // we do not build build the resource name conventionally through stpResourceName\n // this is due to update behaviors of Cloudformation\n return buildCfLogicalName({\n stpResourceName: '',\n specifier: { type: getSpecifierForDomainResource(fullyQualifiedDomainName) },\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::ApiMapping' }\n });\n },\n httpApiDefaultDomainMapping(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ApiGatewayV2::ApiMapping' }\n });\n },\n listener(exposurePort: number, stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `Port${exposurePort}` },\n suffix: { cloudformationResourceType: 'AWS::ElasticLoadBalancingV2::Listener' }\n });\n },\n listenerRule(exposurePort: number, stpResourceName: string, rulePriority: number) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `Port${exposurePort}Priority${rulePriority}` },\n suffix: { cloudformationResourceType: 'AWS::ElasticLoadBalancingV2::ListenerRule' }\n });\n },\n listenerCertificateList(exposurePort: number, stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `Port${exposurePort}` },\n suffix: { cloudformationResourceType: 'AWS::ElasticLoadBalancingV2::ListenerCertificate' }\n });\n },\n loadBalancer(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ElasticLoadBalancingV2::LoadBalancer' }\n });\n },\n ecsLogGroup(stpResourceName: string, containerName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: containerName },\n suffix: { cloudformationResourceType: 'AWS::Logs::LogGroup' }\n });\n },\n autoScalingTarget(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::ApplicationAutoScaling::ScalableTarget' }\n });\n },\n dynamoAutoScalingTarget(stpResourceName: string, metric: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: metric },\n suffix: { cloudformationResourceType: 'AWS::ApplicationAutoScaling::ScalableTarget' }\n });\n },\n autoScalingPolicy(stpResourceName: string, metric: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: metric },\n suffix: { cloudformationResourceType: 'AWS::ApplicationAutoScaling::ScalingPolicy' }\n });\n },\n customResourceS3Events() {\n return buildCfLogicalName({\n specifier: { type: 'Events' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n // @deprecated\n // stacktapeServiceCustomResourceEdgeFunctions() {\n // return buildCfLogicalName({\n // specifier: { type: 'EdgeFunctions' },\n // suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n // });\n // },\n customResourceSensitiveData() {\n return buildCfLogicalName({\n specifier: { type: 'SensitiveData' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n customResourceAcceptVpcPeerings() {\n return buildCfLogicalName({\n specifier: { type: 'AcceptVpcPeerings' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n customResourceDefaultDomainCert() {\n return buildCfLogicalName({\n specifier: { type: 'DefaultDomainCert' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n customResourceEdgeLambdaBucket() {\n return buildCfLogicalName({\n specifier: { type: 'EdgeLambdaBucket' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n customResourceEdgeLambda(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'EdgeLambda' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n customResourceDefaultDomain(stpResourceName: string, cdn?: boolean) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: `${cdn ? 'Cdn' : ''}DefaultDomain` },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n customResourceDatabaseDeletionProtection(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'DeletionProtection' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n userPool(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Cognito::UserPool' }\n });\n },\n userPoolClient(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Cognito::UserPoolClient' }\n });\n },\n userPoolDomain(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Cognito::UserPoolDomain' }\n });\n },\n identityProvider(stpResourceName: string, type: StpUserAuthPool['identityProviders'][number]['type']) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type },\n suffix: { cloudformationResourceType: 'AWS::Cognito::UserPoolIdentityProvider' }\n });\n },\n cognitoLambdaHookPermission(stpResourceName: string, hookName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: hookName },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n });\n },\n cognitoUserPoolDetailsCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'UserPoolDetails' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n userPoolUiCustomizationAttachment(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::Cognito::UserPoolUICustomizationAttachment' }\n });\n },\n serviceDiscoveryPrivateNamespace() {\n return buildCfLogicalName({\n specifier: { type: 'Discovery' },\n suffix: { cloudformationResourceType: 'AWS::ServiceDiscovery::Service' }\n });\n },\n lambdaCodeDeployApp() {\n return buildCfLogicalName({\n specifier: { type: 'LambdaCodeDeploy' },\n suffix: { cloudformationResourceType: 'AWS::CodeDeploy::Application' }\n });\n },\n ecsCodeDeployApp() {\n return buildCfLogicalName({\n specifier: { type: 'ECSCodeDeploy' },\n suffix: { cloudformationResourceType: 'AWS::CodeDeploy::Application' }\n });\n },\n stackBudget(stackName: string) {\n return buildCfLogicalName({\n specifier: { type: pascalCase(stackName).replaceAll('_', '') },\n suffix: { cloudformationResourceType: 'AWS::Budgets::Budget' }\n });\n },\n upstashRedisDatabase(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'Upstash::DatabasesV1::Database' }\n });\n },\n upstashCredentialsProvider() {\n return buildCfLogicalName({\n specifier: { type: 'UpstashCredentialsProvider' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n cloudwatchAlarm(stacktapeAlarmName: string) {\n return buildCfLogicalName({\n stpResourceName: stacktapeAlarmName,\n suffix: { cloudformationResourceType: 'AWS::CloudWatch::Alarm' }\n }).replaceAll('_', '');\n },\n cloudwatchAlarmEventBusNotificationRule(stacktapeAlarmName: string) {\n return buildCfLogicalName({\n stpResourceName: stacktapeAlarmName,\n specifier: { type: 'Notification' },\n suffix: { cloudformationResourceType: 'AWS::Events::Rule' }\n }).replaceAll('_', '');\n },\n cloudwatchAlarmEventBusNotificationRuleLambdaPermission(stacktapeAlarmName: string) {\n return buildCfLogicalName({\n stpResourceName: stacktapeAlarmName,\n specifier: { type: 'Notification' },\n suffix: { cloudformationResourceType: 'AWS::Lambda::Permission' }\n }).replaceAll('_', '');\n },\n sqsQueue(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::SQS::Queue' }\n }).replaceAll('_', '');\n },\n sqsQueuePolicy(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::SQS::QueuePolicy' }\n });\n },\n snsTopic(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::SNS::Topic' }\n }).replaceAll('_', '');\n },\n webAppFirewallCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'WebAppFirewall' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n webAppFirewallAssociation(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::WAFv2::WebACLAssociation' }\n });\n },\n openSearchDomain(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::OpenSearchService::Domain' }\n });\n },\n openSearchCustomResource(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'OpenSearch' },\n suffix: { cloudformationResourceType: 'AWS::CloudFormation::CustomResource' }\n });\n },\n openSearchSecurityGroup(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n suffix: { cloudformationResourceType: 'AWS::EC2::SecurityGroup' }\n });\n },\n logForwardingFirehoseToS3Role(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'LogForwardingS3' },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n logForwardingCwToFirehoseRole({ logGroupCfLogicalName }: { logGroupCfLogicalName: string }) {\n return buildCfLogicalName({\n stpResourceName: logGroupCfLogicalName,\n specifier: { type: 'CwToFirehose' },\n suffix: { cloudformationResourceType: 'AWS::IAM::Role' }\n });\n },\n logForwardingFailedEventsBucket(stpResourceName: string) {\n return buildCfLogicalName({\n stpResourceName,\n specifier: { type: 'LogForwardingFailedRecords' },\n suffix: { cloudformationResourceType: 'AWS::S3::Bucket' }\n });\n },\n logForwardingFirehoseDeliveryStream({ logGroupCfLogicalName }: { logGroupCfLogicalName: string }) {\n return buildCfLogicalName({\n stpResourceName: logGroupCfLogicalName,\n suffix: { cloudformationResourceType: 'AWS::KinesisFirehose::DeliveryStream' }\n });\n },\n logForwardingSubscriptionFilter({ logGroupCfLogicalName }: { logGroupCfLogicalName: string }) {\n return buildCfLogicalName({\n stpResourceName: logGroupCfLogicalName,\n suffix: { cloudformationResourceType: 'AWS::Logs::SubscriptionFilter' }\n });\n }\n};\n\nconst buildCfLogicalName = ({\n stpResourceName,\n specifier,\n suffix\n}: {\n stpResourceName?: string;\n specifier?: { type: string; typeIndex?: number; subtype?: string };\n suffix: {\n cloudformationResourceType: CloudformationResourceType | SupportedPrivateCfResourceType;\n index?: number;\n };\n}) => {\n const splittedType = suffix.cloudformationResourceType.split(':');\n const resolvedParentName = stpResourceName || 'Stp';\n const resolvedSpecifier = specifier\n ? `${specifier.type}${specifier.typeIndex !== undefined ? specifier.typeIndex : ''}${\n specifier.subtype !== undefined ? `-${specifier.subtype}` : ''\n }`\n : '';\n const resolvedSuffix = `${splittedType[splittedType.length - 1]}${suffix.index !== undefined ? suffix.index : ''}`;\n return pascalCase(`${resolvedParentName}-${resolvedSpecifier}-${resolvedSuffix}`);\n};\n\nconst getSpecifierForDomainResource = (fullyQualifiedDomainName) => {\n if (pascalCase(fullyQualifiedDomainName).replace('_', '').length < 85) {\n return pascalCase(fullyQualifiedDomainName).replace('_', '');\n }\n const splittedDomain = fullyQualifiedDomainName\n .split('.')\n .map((subdomain) => subdomain.split('-'))\n .flat();\n const maxCharactersPerWord = Math.floor(85 / splittedDomain.length);\n return splittedDomain.map((word) => pascalCase(word.slice(0, maxCharactersPerWord)).replace('_', '')).join('');\n};\n", "import { cfLogicalNames } from '@shared/naming/logical-names';\n\nexport const CHILD_RESOURCES: Record<\n StpResourceType,\n Array<{ logicalName: (...args: any[]) => string; resourceType: string; conditional?: true; unresolvable?: true }>\n> = {\n // ===== BUCKET =====\n bucket: [\n { logicalName: cfLogicalNames.bucket, resourceType: 'AWS::S3::Bucket' },\n { logicalName: cfLogicalNames.bucketPolicy, resourceType: 'AWS::S3::BucketPolicy', conditional: true },\n {\n logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,\n resourceType: 'AWS::CloudFront::CloudFrontOriginAccessIdentity',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDistribution,\n resourceType: 'AWS::CloudFront::Distribution',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true }\n ],\n\n // ===== FUNCTION =====\n function: [\n { logicalName: cfLogicalNames.lambdaRole, resourceType: 'AWS::IAM::Role' },\n { logicalName: cfLogicalNames.lambda, resourceType: 'AWS::Lambda::Function' },\n { logicalName: cfLogicalNames.efsAccessPoint, resourceType: 'AWS::EFS::AccessPoint', conditional: true },\n { logicalName: cfLogicalNames.workloadSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup', conditional: true },\n { logicalName: cfLogicalNames.lambdaUrl, resourceType: 'AWS::Lambda::Url', conditional: true },\n {\n logicalName: cfLogicalNames.lambdaPublicUrlPermission,\n resourceType: 'AWS::Lambda::Permission',\n conditional: true\n },\n { logicalName: cfLogicalNames.lambdaLogGroup, resourceType: 'AWS::Logs::LogGroup', conditional: true },\n {\n logicalName: cfLogicalNames.lambdaInvokeConfig,\n resourceType: 'AWS::Lambda::EventInvokeConfig',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.lambdaCodeDeployApp,\n resourceType: 'AWS::CodeDeploy::Application',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.lambdaVersionPublisherCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.codeDeployDeploymentGroup,\n resourceType: 'AWS::CodeDeploy::DeploymentGroup',\n conditional: true\n },\n { logicalName: cfLogicalNames.lambdaStpAlias, resourceType: 'AWS::Lambda::Alias', conditional: true },\n {\n logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,\n resourceType: 'AWS::CloudFront::CloudFrontOriginAccessIdentity',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true,\n unresolvable: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true,\n unresolvable: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDistribution,\n resourceType: 'AWS::CloudFront::Distribution',\n conditional: true,\n unresolvable: true\n },\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true },\n {\n logicalName: cfLogicalNames.lambdaPermission,\n resourceType: 'AWS::Lambda::Permission',\n conditional: true,\n unresolvable: true\n }\n ],\n\n // ===== RELATIONAL DATABASE =====\n 'relational-database': [\n { logicalName: cfLogicalNames.dbSubnetGroup, resourceType: 'AWS::RDS::DBSubnetGroup' },\n { logicalName: cfLogicalNames.dbSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n {\n logicalName: cfLogicalNames.customResourceDatabaseDeletionProtection,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.auroraDbCluster, resourceType: 'AWS::RDS::DBCluster', conditional: true },\n {\n logicalName: cfLogicalNames.auroraDbClusterParameterGroup,\n resourceType: 'AWS::RDS::DBClusterParameterGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.auroraDbClusterLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n },\n {\n logicalName: cfLogicalNames.auroraDbInstance,\n resourceType: 'AWS::RDS::DBInstance',\n conditional: true,\n unresolvable: true\n },\n {\n logicalName: cfLogicalNames.auroraDbInstanceParameterGroup,\n resourceType: 'AWS::RDS::DBParameterGroup',\n conditional: true\n },\n { logicalName: cfLogicalNames.dbInstance, resourceType: 'AWS::RDS::DBInstance', conditional: true },\n {\n logicalName: cfLogicalNames.dbInstanceLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n },\n { logicalName: cfLogicalNames.dbOptionGroup, resourceType: 'AWS::RDS::OptionGroup', conditional: true },\n {\n logicalName: cfLogicalNames.dbInstanceParameterGroup,\n resourceType: 'AWS::RDS::DBParameterGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.dbReplica,\n resourceType: 'AWS::RDS::DBInstance',\n conditional: true,\n unresolvable: true\n },\n {\n logicalName: cfLogicalNames.dbReplicaLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n }\n ],\n\n // ===== DYNAMO DB TABLE =====\n 'dynamo-db-table': [{ logicalName: cfLogicalNames.dynamoGlobalTable, resourceType: 'AWS::DynamoDB::GlobalTable' }],\n\n // ===== HTTP API GATEWAY =====\n 'http-api-gateway': [\n { logicalName: cfLogicalNames.httpApi, resourceType: 'AWS::ApiGatewayV2::Api' },\n { logicalName: cfLogicalNames.httpApiStage, resourceType: 'AWS::ApiGatewayV2::Stage' },\n { logicalName: cfLogicalNames.httpApiLogGroup, resourceType: 'AWS::Logs::LogGroup', conditional: true },\n {\n logicalName: cfLogicalNames.httpApiVpcLinkSecurityGroup,\n resourceType: 'AWS::EC2::SecurityGroup',\n conditional: true\n },\n { logicalName: cfLogicalNames.httpApiVpcLink, resourceType: 'AWS::ApiGatewayV2::VpcLink', conditional: true },\n { logicalName: cfLogicalNames.httpApiDomain, resourceType: 'AWS::ApiGatewayV2::DomainName', conditional: true },\n {\n logicalName: cfLogicalNames.httpApiDomainMapping,\n resourceType: 'AWS::ApiGatewayV2::ApiMapping',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.httpApiDefaultDomain,\n resourceType: 'AWS::ApiGatewayV2::DomainName',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.httpApiDefaultDomainMapping,\n resourceType: 'AWS::ApiGatewayV2::ApiMapping',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true },\n {\n logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,\n resourceType: 'AWS::CloudFront::CloudFrontOriginAccessIdentity',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDistribution,\n resourceType: 'AWS::CloudFront::Distribution',\n conditional: true\n }\n ],\n\n // ===== BATCH JOB =====\n 'batch-job': [\n { logicalName: cfLogicalNames.batchServiceRole, resourceType: 'AWS::IAM::Role', conditional: true },\n { logicalName: cfLogicalNames.batchSpotFleetRole, resourceType: 'AWS::IAM::Role', conditional: true },\n { logicalName: cfLogicalNames.batchInstanceRole, resourceType: 'AWS::IAM::Role', conditional: true },\n { logicalName: cfLogicalNames.batchInstanceProfile, resourceType: 'AWS::IAM::InstanceProfile', conditional: true },\n { logicalName: cfLogicalNames.batchStateMachineExecutionRole, resourceType: 'AWS::IAM::Role', conditional: true },\n {\n logicalName: cfLogicalNames.batchInstanceLaunchTemplate,\n resourceType: 'AWS::EC2::LaunchTemplate',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.batchInstanceDefaultSecurityGroup,\n resourceType: 'AWS::EC2::SecurityGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.batchComputeEnvironment,\n resourceType: 'AWS::Batch::ComputeEnvironment',\n conditional: true\n },\n { logicalName: cfLogicalNames.batchJobQueue, resourceType: 'AWS::Batch::JobQueue', conditional: true },\n { logicalName: cfLogicalNames.batchJobDefinition, resourceType: 'AWS::Batch::JobDefinition' },\n { logicalName: cfLogicalNames.batchStateMachine, resourceType: 'AWS::StepFunctions::StateMachine' },\n { logicalName: cfLogicalNames.batchJobLogGroup, resourceType: 'AWS::Logs::LogGroup', conditional: true },\n { logicalName: cfLogicalNames.batchJobExecutionRole, resourceType: 'AWS::IAM::Role' },\n {\n logicalName: cfLogicalNames.atlasMongoUserAssociatedWithRole,\n resourceType: 'MongoDB::StpAtlasV1::DatabaseUser',\n conditional: true\n }\n ],\n\n // ===== EVENT BUS =====\n 'event-bus': [\n { logicalName: cfLogicalNames.eventBus, resourceType: 'AWS::Events::EventBus' },\n { logicalName: cfLogicalNames.eventBusArchive, resourceType: 'AWS::Events::Archive', conditional: true }\n ],\n\n // ===== STATE MACHINE =====\n 'state-machine': [\n { logicalName: cfLogicalNames.globalStateMachinesRole, resourceType: 'AWS::IAM::Role', conditional: true },\n { logicalName: cfLogicalNames.stateMachine, resourceType: 'AWS::StepFunctions::StateMachine' }\n ],\n\n // ===== REDIS CLUSTER =====\n 'redis-cluster': [\n { logicalName: cfLogicalNames.redisParameterGroup, resourceType: 'AWS::ElastiCache::ParameterGroup' },\n { logicalName: cfLogicalNames.redisSubnetGroup, resourceType: 'AWS::ElastiCache::SubnetGroup' },\n { logicalName: cfLogicalNames.redisSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n { logicalName: cfLogicalNames.redisLogGroup, resourceType: 'AWS::Logs::LogGroup', conditional: true },\n { logicalName: cfLogicalNames.redisReplicationGroup, resourceType: 'AWS::ElastiCache::ReplicationGroup' }\n ],\n\n // ===== MONGO DB ATLAS CLUSTER =====\n 'mongo-db-atlas-cluster': [\n {\n logicalName: cfLogicalNames.atlasMongoCredentialsProvider,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.atlasMongoProject, resourceType: 'MongoDB::StpAtlasV1::Project', conditional: true },\n {\n logicalName: cfLogicalNames.atlasMongoProjectIpAccessList,\n resourceType: 'MongoDB::StpAtlasV1::ProjectIpAccessList',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.atlasMongoProjectVpcNetworkContainer,\n resourceType: 'MongoDB::StpAtlasV1::NetworkContainer',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.atlasMongoProjectVpcNetworkPeering,\n resourceType: 'MongoDB::StpAtlasV1::NetworkPeering',\n conditional: true\n },\n { logicalName: cfLogicalNames.atlasMongoVpcRoute, resourceType: 'AWS::EC2::Route', conditional: true },\n { logicalName: cfLogicalNames.atlasMongoCluster, resourceType: 'MongoDB::StpAtlasV1::Cluster' },\n {\n logicalName: cfLogicalNames.atlasMongoClusterMasterUser,\n resourceType: 'MongoDB::StpAtlasV1::DatabaseUser',\n conditional: true\n }\n ],\n\n // ===== USER AUTH POOL =====\n 'user-auth-pool': [\n { logicalName: cfLogicalNames.userPool, resourceType: 'AWS::Cognito::UserPool' },\n { logicalName: cfLogicalNames.snsRoleSendSmsFromCognito, resourceType: 'AWS::IAM::Role' },\n { logicalName: cfLogicalNames.userPoolClient, resourceType: 'AWS::Cognito::UserPoolClient' },\n { logicalName: cfLogicalNames.userPoolDomain, resourceType: 'AWS::Cognito::UserPoolDomain' },\n {\n logicalName: cfLogicalNames.cognitoUserPoolDetailsCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource'\n },\n {\n logicalName: cfLogicalNames.identityProvider,\n resourceType: 'AWS::Cognito::UserPoolIdentityProvider',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cognitoLambdaHookPermission,\n resourceType: 'AWS::Lambda::Permission',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.userPoolUiCustomizationAttachment,\n resourceType: 'AWS::Cognito::UserPoolUICustomizationAttachment',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.webAppFirewallAssociation,\n resourceType: 'AWS::WAFv2::WebACLAssociation',\n conditional: true\n }\n ],\n\n // ===== UPSTASH REDIS =====\n 'upstash-redis': [\n {\n logicalName: cfLogicalNames.upstashCredentialsProvider,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.upstashRedisDatabase, resourceType: 'Upstash::Redis::Database' }\n ],\n\n // ===== APPLICATION LOAD BALANCER =====\n 'application-load-balancer': [\n { logicalName: cfLogicalNames.loadBalancer, resourceType: 'AWS::ElasticLoadBalancingV2::LoadBalancer' },\n { logicalName: cfLogicalNames.loadBalancerSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n {\n logicalName: cfLogicalNames.webAppFirewallAssociation,\n resourceType: 'AWS::WAFv2::WebACLAssociation',\n conditional: true\n },\n { logicalName: cfLogicalNames.listener, resourceType: 'AWS::ElasticLoadBalancingV2::Listener', conditional: true },\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true },\n {\n logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,\n resourceType: 'AWS::CloudFront::CloudFrontOriginAccessIdentity',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDistribution,\n resourceType: 'AWS::CloudFront::Distribution',\n conditional: true\n }\n ],\n\n // ===== NETWORK LOAD BALANCER =====\n 'network-load-balancer': [\n { logicalName: cfLogicalNames.loadBalancer, resourceType: 'AWS::ElasticLoadBalancingV2::LoadBalancer' },\n { logicalName: cfLogicalNames.loadBalancerSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n { logicalName: cfLogicalNames.listener, resourceType: 'AWS::ElasticLoadBalancingV2::Listener', conditional: true },\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true }\n ],\n\n // ===== HOSTING BUCKET =====\n // Hosting bucket delegates to a bucket resource, so it includes all bucket child resources\n 'hosting-bucket': [\n { logicalName: cfLogicalNames.bucket, resourceType: 'AWS::S3::Bucket' },\n { logicalName: cfLogicalNames.bucketPolicy, resourceType: 'AWS::S3::BucketPolicy', conditional: true },\n {\n logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,\n resourceType: 'AWS::CloudFront::CloudFrontOriginAccessIdentity',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDistribution,\n resourceType: 'AWS::CloudFront::Distribution',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true }\n ],\n\n // ===== WEB APP FIREWALL =====\n 'web-app-firewall': [\n { logicalName: cfLogicalNames.webAppFirewallCustomResource, resourceType: 'AWS::CloudFormation::CustomResource' }\n ],\n\n // ===== OPEN SEARCH DOMAIN =====\n 'open-search-domain': [\n { logicalName: cfLogicalNames.openSearchDomain, resourceType: 'AWS::OpenSearchService::Domain' },\n { logicalName: cfLogicalNames.openSearchSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup', conditional: true },\n {\n logicalName: cfLogicalNames.openSearchDomainLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n },\n {\n logicalName: cfLogicalNames.openSearchCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n }\n ],\n\n // ===== EFS FILESYSTEM =====\n 'efs-filesystem': [\n { logicalName: cfLogicalNames.efsFilesystem, resourceType: 'AWS::EFS::FileSystem' },\n { logicalName: cfLogicalNames.efsSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n {\n logicalName: cfLogicalNames.efsMountTarget,\n resourceType: 'AWS::EFS::MountTarget',\n unresolvable: true\n }\n ],\n\n // ===== NEXTJS WEB =====\n // NextJS web delegates to: bucket, imageFunction, revalidationFunction, revalidationQueue,\n // revalidationTable, revalidationInsertFunction, and optionally serverEdgeFunction or serverFunction\n 'nextjs-web': [\n // NextJS-specific resources\n {\n logicalName: cfLogicalNames.openNextHostHeaderRewriteFunction,\n resourceType: 'AWS::CloudFront::Function'\n },\n {\n logicalName: cfLogicalNames.openNextAssetReplacerCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource'\n },\n {\n logicalName: cfLogicalNames.openNextDynamoInsertCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource'\n },\n // From bucket\n { logicalName: cfLogicalNames.bucket, resourceType: 'AWS::S3::Bucket' },\n { logicalName: cfLogicalNames.bucketPolicy, resourceType: 'AWS::S3::BucketPolicy', conditional: true },\n {\n logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,\n resourceType: 'AWS::CloudFront::CloudFrontOriginAccessIdentity',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDistribution,\n resourceType: 'AWS::CloudFront::Distribution',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true },\n // From functions (imageFunction, revalidationFunction, serverFunction, warmerFunction, revalidationInsertFunction)\n { logicalName: cfLogicalNames.lambdaRole, resourceType: 'AWS::IAM::Role' },\n { logicalName: cfLogicalNames.lambda, resourceType: 'AWS::Lambda::Function' },\n { logicalName: cfLogicalNames.lambdaLogGroup, resourceType: 'AWS::Logs::LogGroup', conditional: true },\n { logicalName: cfLogicalNames.lambdaUrl, resourceType: 'AWS::Lambda::Url', conditional: true },\n // From edge function (serverEdgeFunction)\n {\n logicalName: cfLogicalNames.customResourceEdgeLambda,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n // From revalidationQueue\n { logicalName: cfLogicalNames.sqsQueue, resourceType: 'AWS::SQS::Queue' },\n { logicalName: cfLogicalNames.sqsQueuePolicy, resourceType: 'AWS::SQS::QueuePolicy', conditional: true },\n // From revalidationTable\n { logicalName: cfLogicalNames.dynamoGlobalTable, resourceType: 'AWS::DynamoDB::GlobalTable' }\n ],\n\n // ===== MULTI-CONTAINER WORKLOAD =====\n 'multi-container-workload': [\n // Shared global resources (conditional - created only once if not exists)\n { logicalName: cfLogicalNames.ecsExecutionRole, resourceType: 'AWS::IAM::Role', conditional: true },\n { logicalName: cfLogicalNames.ecsAutoScalingRole, resourceType: 'AWS::IAM::Role', conditional: true },\n // Scaling resources (conditional - only if scaling is configured)\n {\n logicalName: cfLogicalNames.autoScalingTarget,\n resourceType: 'AWS::ApplicationAutoScaling::ScalableTarget',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.autoScalingPolicy,\n resourceType: 'AWS::ApplicationAutoScaling::ScalingPolicy',\n conditional: true,\n unresolvable: true\n },\n // EC2-based resources (conditional - only if instanceTypes are configured)\n { logicalName: cfLogicalNames.ecsEc2InstanceRole, resourceType: 'AWS::IAM::Role', conditional: true },\n {\n logicalName: cfLogicalNames.eventBusRoleForScheduledInstanceRefresh,\n resourceType: 'AWS::IAM::Role',\n conditional: true\n },\n { logicalName: cfLogicalNames.ecsEc2InstanceProfile, resourceType: 'AWS::IAM::InstanceProfile', conditional: true },\n {\n logicalName: cfLogicalNames.ecsEc2InstanceLaunchTemplate,\n resourceType: 'AWS::EC2::LaunchTemplate',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2AutoscalingGroup,\n resourceType: 'AWS::AutoScaling::AutoScalingGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2ForceDeleteAutoscalingGroupCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2CapacityProvider,\n resourceType: 'AWS::ECS::CapacityProvider',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2CapacityProviderAssociation,\n resourceType: 'AWS::ECS::ClusterCapacityProviderAssociations',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.schedulerRuleForScheduledInstanceRefresh,\n resourceType: 'AWS::Scheduler::Schedule',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2AutoscalingGroupWarmPool,\n resourceType: 'AWS::AutoScaling::WarmPool',\n conditional: true\n },\n // Deployment resources (conditional - only if deployment is configured)\n { logicalName: cfLogicalNames.ecsCodeDeployApp, resourceType: 'AWS::CodeDeploy::Application', conditional: true },\n {\n logicalName: cfLogicalNames.codeDeployDeploymentGroup,\n resourceType: 'AWS::CodeDeploy::DeploymentGroup',\n conditional: true\n },\n // Core resources (always present)\n { logicalName: cfLogicalNames.ecsCluster, resourceType: 'AWS::ECS::Cluster' },\n { logicalName: cfLogicalNames.workloadSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n {\n logicalName: cfLogicalNames.ecsService,\n resourceType: 'AWS::ECS::Service',\n unresolvable: true\n },\n { logicalName: cfLogicalNames.ecsTaskRole, resourceType: 'AWS::IAM::Role' },\n { logicalName: cfLogicalNames.ecsTaskDefinition, resourceType: 'AWS::ECS::TaskDefinition' },\n // Conditional resources\n {\n logicalName: cfLogicalNames.ecsLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n },\n { logicalName: cfLogicalNames.efsAccessPoint, resourceType: 'AWS::EFS::AccessPoint', conditional: true },\n {\n logicalName: cfLogicalNames.atlasMongoUserAssociatedWithRole,\n resourceType: 'MongoDB::StpAtlasV1::DatabaseUser',\n conditional: true\n }\n ],\n\n // ===== SQS QUEUE =====\n 'sqs-queue': [\n { logicalName: cfLogicalNames.sqsQueue, resourceType: 'AWS::SQS::Queue' },\n { logicalName: cfLogicalNames.sqsQueuePolicy, resourceType: 'AWS::SQS::QueuePolicy', conditional: true }\n ],\n\n // ===== SNS TOPIC =====\n 'sns-topic': [{ logicalName: cfLogicalNames.snsTopic, resourceType: 'AWS::SNS::Topic' }],\n\n // ===== BASTION =====\n bastion: [\n {\n logicalName: cfLogicalNames.bastionCloudwatchSsmDocument,\n resourceType: 'AWS::SSM::Document',\n conditional: true\n },\n { logicalName: cfLogicalNames.bastionEc2AutoscalingGroup, resourceType: 'AWS::AutoScaling::AutoScalingGroup' },\n { logicalName: cfLogicalNames.bastionSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n { logicalName: cfLogicalNames.bastionEc2LaunchTemplate, resourceType: 'AWS::EC2::LaunchTemplate' },\n { logicalName: cfLogicalNames.bastionRole, resourceType: 'AWS::IAM::Role' },\n { logicalName: cfLogicalNames.bastionEc2InstanceProfile, resourceType: 'AWS::IAM::InstanceProfile' },\n { logicalName: cfLogicalNames.bastionCwAgentSsmAssociation, resourceType: 'AWS::SSM::Association' },\n { logicalName: cfLogicalNames.bastionSsmAgentSsmAssociation, resourceType: 'AWS::SSM::Association' },\n {\n logicalName: cfLogicalNames.bastionLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n }\n ],\n\n // ===== EDGE LAMBDA FUNCTION =====\n 'edge-lambda-function': [\n { logicalName: cfLogicalNames.customResourceEdgeLambda, resourceType: 'AWS::CloudFormation::CustomResource' }\n ],\n\n // ===== WEB SERVICE =====\n // Web service delegates to: containerWorkload + optionally (httpApiGateway OR loadBalancer OR networkLoadBalancer)\n 'web-service': [\n // From multi-container-workload - core resources (always present)\n { logicalName: cfLogicalNames.ecsCluster, resourceType: 'AWS::ECS::Cluster' },\n { logicalName: cfLogicalNames.workloadSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n {\n logicalName: cfLogicalNames.ecsService,\n resourceType: 'AWS::ECS::Service',\n unresolvable: true\n },\n { logicalName: cfLogicalNames.ecsTaskRole, resourceType: 'AWS::IAM::Role' },\n { logicalName: cfLogicalNames.ecsTaskDefinition, resourceType: 'AWS::ECS::TaskDefinition' },\n // From multi-container-workload - conditional resources\n { logicalName: cfLogicalNames.ecsExecutionRole, resourceType: 'AWS::IAM::Role', conditional: true },\n { logicalName: cfLogicalNames.ecsAutoScalingRole, resourceType: 'AWS::IAM::Role', conditional: true },\n {\n logicalName: cfLogicalNames.autoScalingTarget,\n resourceType: 'AWS::ApplicationAutoScaling::ScalableTarget',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.autoScalingPolicy,\n resourceType: 'AWS::ApplicationAutoScaling::ScalingPolicy',\n conditional: true,\n unresolvable: true\n },\n { logicalName: cfLogicalNames.ecsEc2InstanceRole, resourceType: 'AWS::IAM::Role', conditional: true },\n {\n logicalName: cfLogicalNames.eventBusRoleForScheduledInstanceRefresh,\n resourceType: 'AWS::IAM::Role',\n conditional: true\n },\n { logicalName: cfLogicalNames.ecsEc2InstanceProfile, resourceType: 'AWS::IAM::InstanceProfile', conditional: true },\n {\n logicalName: cfLogicalNames.ecsEc2InstanceLaunchTemplate,\n resourceType: 'AWS::EC2::LaunchTemplate',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2AutoscalingGroup,\n resourceType: 'AWS::AutoScaling::AutoScalingGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2ForceDeleteAutoscalingGroupCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2CapacityProvider,\n resourceType: 'AWS::ECS::CapacityProvider',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2CapacityProviderAssociation,\n resourceType: 'AWS::ECS::ClusterCapacityProviderAssociations',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.schedulerRuleForScheduledInstanceRefresh,\n resourceType: 'AWS::Scheduler::Schedule',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2AutoscalingGroupWarmPool,\n resourceType: 'AWS::AutoScaling::WarmPool',\n conditional: true\n },\n { logicalName: cfLogicalNames.ecsCodeDeployApp, resourceType: 'AWS::CodeDeploy::Application', conditional: true },\n {\n logicalName: cfLogicalNames.codeDeployDeploymentGroup,\n resourceType: 'AWS::CodeDeploy::DeploymentGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n },\n { logicalName: cfLogicalNames.efsAccessPoint, resourceType: 'AWS::EFS::AccessPoint', conditional: true },\n // From application-load-balancer (conditional - only if ALB is used)\n {\n logicalName: cfLogicalNames.loadBalancer,\n resourceType: 'AWS::ElasticLoadBalancingV2::LoadBalancer',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.loadBalancerSecurityGroup,\n resourceType: 'AWS::EC2::SecurityGroup',\n conditional: true\n },\n { logicalName: cfLogicalNames.listener, resourceType: 'AWS::ElasticLoadBalancingV2::Listener', conditional: true },\n {\n logicalName: cfLogicalNames.webAppFirewallAssociation,\n resourceType: 'AWS::WAFv2::WebACLAssociation',\n conditional: true\n },\n // From http-api-gateway (conditional - only if HTTP API Gateway is used, alternative to ALB/NLB)\n { logicalName: cfLogicalNames.httpApi, resourceType: 'AWS::ApiGatewayV2::Api', conditional: true },\n { logicalName: cfLogicalNames.httpApiStage, resourceType: 'AWS::ApiGatewayV2::Stage', conditional: true },\n { logicalName: cfLogicalNames.httpApiLogGroup, resourceType: 'AWS::Logs::LogGroup', conditional: true },\n {\n logicalName: cfLogicalNames.httpApiVpcLinkSecurityGroup,\n resourceType: 'AWS::EC2::SecurityGroup',\n conditional: true\n },\n { logicalName: cfLogicalNames.httpApiVpcLink, resourceType: 'AWS::ApiGatewayV2::VpcLink', conditional: true },\n { logicalName: cfLogicalNames.httpApiDomain, resourceType: 'AWS::ApiGatewayV2::DomainName', conditional: true },\n {\n logicalName: cfLogicalNames.httpApiDomainMapping,\n resourceType: 'AWS::ApiGatewayV2::ApiMapping',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.httpApiDefaultDomain,\n resourceType: 'AWS::ApiGatewayV2::DomainName',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.httpApiDefaultDomainMapping,\n resourceType: 'AWS::ApiGatewayV2::ApiMapping',\n conditional: true\n },\n // Common resources (domains, CDN - all conditional)\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true },\n {\n logicalName: cfLogicalNames.cloudfrontOriginAccessIdentity,\n resourceType: 'AWS::CloudFront::CloudFrontOriginAccessIdentity',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultCachePolicy,\n resourceType: 'AWS::CloudFront::CachePolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontCustomOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDefaultOriginRequestPolicy,\n resourceType: 'AWS::CloudFront::OriginRequestPolicy',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.cloudfrontDistribution,\n resourceType: 'AWS::CloudFront::Distribution',\n conditional: true\n }\n ],\n\n // ===== PRIVATE SERVICE =====\n // Private service delegates to: containerWorkload + optionally loadBalancer\n 'private-service': [\n // From multi-container-workload - core resources (always present)\n { logicalName: cfLogicalNames.ecsCluster, resourceType: 'AWS::ECS::Cluster' },\n { logicalName: cfLogicalNames.workloadSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n {\n logicalName: cfLogicalNames.ecsService,\n resourceType: 'AWS::ECS::Service',\n unresolvable: true\n },\n { logicalName: cfLogicalNames.ecsTaskRole, resourceType: 'AWS::IAM::Role' },\n { logicalName: cfLogicalNames.ecsTaskDefinition, resourceType: 'AWS::ECS::TaskDefinition' },\n // From multi-container-workload - conditional resources\n { logicalName: cfLogicalNames.ecsExecutionRole, resourceType: 'AWS::IAM::Role', conditional: true },\n { logicalName: cfLogicalNames.ecsAutoScalingRole, resourceType: 'AWS::IAM::Role', conditional: true },\n {\n logicalName: cfLogicalNames.autoScalingTarget,\n resourceType: 'AWS::ApplicationAutoScaling::ScalableTarget',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.autoScalingPolicy,\n resourceType: 'AWS::ApplicationAutoScaling::ScalingPolicy',\n conditional: true,\n unresolvable: true\n },\n { logicalName: cfLogicalNames.ecsEc2InstanceRole, resourceType: 'AWS::IAM::Role', conditional: true },\n {\n logicalName: cfLogicalNames.eventBusRoleForScheduledInstanceRefresh,\n resourceType: 'AWS::IAM::Role',\n conditional: true\n },\n { logicalName: cfLogicalNames.ecsEc2InstanceProfile, resourceType: 'AWS::IAM::InstanceProfile', conditional: true },\n {\n logicalName: cfLogicalNames.ecsEc2InstanceLaunchTemplate,\n resourceType: 'AWS::EC2::LaunchTemplate',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2AutoscalingGroup,\n resourceType: 'AWS::AutoScaling::AutoScalingGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2ForceDeleteAutoscalingGroupCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2CapacityProvider,\n resourceType: 'AWS::ECS::CapacityProvider',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2CapacityProviderAssociation,\n resourceType: 'AWS::ECS::ClusterCapacityProviderAssociations',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.schedulerRuleForScheduledInstanceRefresh,\n resourceType: 'AWS::Scheduler::Schedule',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2AutoscalingGroupWarmPool,\n resourceType: 'AWS::AutoScaling::WarmPool',\n conditional: true\n },\n { logicalName: cfLogicalNames.ecsCodeDeployApp, resourceType: 'AWS::CodeDeploy::Application', conditional: true },\n {\n logicalName: cfLogicalNames.codeDeployDeploymentGroup,\n resourceType: 'AWS::CodeDeploy::DeploymentGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n },\n { logicalName: cfLogicalNames.efsAccessPoint, resourceType: 'AWS::EFS::AccessPoint', conditional: true },\n // From application-load-balancer (conditional - only if ALB is configured)\n {\n logicalName: cfLogicalNames.loadBalancer,\n resourceType: 'AWS::ElasticLoadBalancingV2::LoadBalancer',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.loadBalancerSecurityGroup,\n resourceType: 'AWS::EC2::SecurityGroup',\n conditional: true\n },\n { logicalName: cfLogicalNames.listener, resourceType: 'AWS::ElasticLoadBalancingV2::Listener', conditional: true },\n {\n logicalName: cfLogicalNames.customResourceDefaultDomain,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n { logicalName: cfLogicalNames.dnsRecord, resourceType: 'AWS::Route53::RecordSet', conditional: true }\n ],\n\n // ===== WORKER SERVICE =====\n // Worker service delegates to: containerWorkload only\n 'worker-service': [\n // From multi-container-workload - core resources (always present)\n { logicalName: cfLogicalNames.ecsCluster, resourceType: 'AWS::ECS::Cluster' },\n { logicalName: cfLogicalNames.workloadSecurityGroup, resourceType: 'AWS::EC2::SecurityGroup' },\n {\n logicalName: cfLogicalNames.ecsService,\n resourceType: 'AWS::ECS::Service',\n unresolvable: true\n },\n { logicalName: cfLogicalNames.ecsTaskRole, resourceType: 'AWS::IAM::Role' },\n { logicalName: cfLogicalNames.ecsTaskDefinition, resourceType: 'AWS::ECS::TaskDefinition' },\n // From multi-container-workload - conditional resources\n { logicalName: cfLogicalNames.ecsExecutionRole, resourceType: 'AWS::IAM::Role', conditional: true },\n { logicalName: cfLogicalNames.ecsAutoScalingRole, resourceType: 'AWS::IAM::Role', conditional: true },\n {\n logicalName: cfLogicalNames.autoScalingTarget,\n resourceType: 'AWS::ApplicationAutoScaling::ScalableTarget',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.autoScalingPolicy,\n resourceType: 'AWS::ApplicationAutoScaling::ScalingPolicy',\n conditional: true,\n unresolvable: true\n },\n { logicalName: cfLogicalNames.ecsEc2InstanceRole, resourceType: 'AWS::IAM::Role', conditional: true },\n {\n logicalName: cfLogicalNames.eventBusRoleForScheduledInstanceRefresh,\n resourceType: 'AWS::IAM::Role',\n conditional: true\n },\n { logicalName: cfLogicalNames.ecsEc2InstanceProfile, resourceType: 'AWS::IAM::InstanceProfile', conditional: true },\n {\n logicalName: cfLogicalNames.ecsEc2InstanceLaunchTemplate,\n resourceType: 'AWS::EC2::LaunchTemplate',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2AutoscalingGroup,\n resourceType: 'AWS::AutoScaling::AutoScalingGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2ForceDeleteAutoscalingGroupCustomResource,\n resourceType: 'AWS::CloudFormation::CustomResource',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2CapacityProvider,\n resourceType: 'AWS::ECS::CapacityProvider',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2CapacityProviderAssociation,\n resourceType: 'AWS::ECS::ClusterCapacityProviderAssociations',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.schedulerRuleForScheduledInstanceRefresh,\n resourceType: 'AWS::Scheduler::Schedule',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsEc2AutoscalingGroupWarmPool,\n resourceType: 'AWS::AutoScaling::WarmPool',\n conditional: true\n },\n { logicalName: cfLogicalNames.ecsCodeDeployApp, resourceType: 'AWS::CodeDeploy::Application', conditional: true },\n {\n logicalName: cfLogicalNames.codeDeployDeploymentGroup,\n resourceType: 'AWS::CodeDeploy::DeploymentGroup',\n conditional: true\n },\n {\n logicalName: cfLogicalNames.ecsLogGroup,\n resourceType: 'AWS::Logs::LogGroup',\n conditional: true,\n unresolvable: true\n },\n { logicalName: cfLogicalNames.efsAccessPoint, resourceType: 'AWS::EFS::AccessPoint', conditional: true },\n {\n logicalName: cfLogicalNames.atlasMongoUserAssociatedWithRole,\n resourceType: 'MongoDB::StpAtlasV1::DatabaseUser',\n conditional: true\n }\n ],\n\n // ===== OTHER RESOURCES =====\n 'custom-resource-instance': [],\n 'custom-resource-definition': [],\n 'deployment-script': [],\n 'aws-cdk-construct': []\n};\n", "import { CHILD_RESOURCES } from './child-resources';\n\n// Private symbols for internal methods - not accessible from outside\n// Use Symbol.for() so it can be accessed across modules (crucial for npm package interop)\nconst getParamReferenceSymbol = Symbol.for('stacktape:getParamReference');\nconst getTypeSymbol = Symbol.for('stacktape:getType');\nconst getPropertiesSymbol = Symbol.for('stacktape:getProperties');\nconst getOverridesSymbol = Symbol.for('stacktape:getOverrides');\nconst getTransformsSymbol = Symbol.for('stacktape:getTransforms');\nconst setResourceNameSymbol = Symbol.for('stacktape:setResourceName');\nconst resourceParamRefSymbol = Symbol.for('stacktape:isResourceParamRef');\nconst baseTypePropertiesSymbol = Symbol.for('stacktape:isBaseTypeProperties');\n\n// Duck-type checkers - use symbols instead of instanceof for cross-module compatibility\nconst isBaseResource = (value: unknown): value is BaseResource =>\n value !== null && typeof value === 'object' && setResourceNameSymbol in value;\n\nconst isBaseTypeProperties = (value: unknown): value is BaseTypeProperties =>\n value !== null && typeof value === 'object' && baseTypePropertiesSymbol in value;\n\nconst isResourceParamReference = (value: unknown): value is ResourceParamReference =>\n value !== null && typeof value === 'object' && resourceParamRefSymbol in value;\n\nconst deferredNameSymbol = Symbol.for('stacktape:isDeferredResourceName');\n\nconst isDeferredResourceName = (value: unknown): value is DeferredResourceName =>\n value !== null && typeof value === 'object' && deferredNameSymbol in value;\n\n/**\n * A deferred reference to a resource's name.\n * Used when accessing resourceName before the name is set.\n * Resolves lazily during transformation.\n */\nclass DeferredResourceName {\n private __resource: BaseResource;\n readonly [deferredNameSymbol] = true;\n\n constructor(resource: BaseResource) {\n this.__resource = resource;\n }\n\n resolve(): string {\n // At resolution time, the name should be set\n const name = (this.__resource as any)._resourceName;\n if (name === undefined) {\n throw new Error(\n 'Resource name not set. Make sure to add the resource to the resources object in your config. ' +\n 'The resource name is automatically derived from the object key.'\n );\n }\n return name;\n }\n\n toString(): string {\n return this.resolve();\n }\n\n toJSON(): string {\n return this.resolve();\n }\n\n valueOf(): string {\n return this.resolve();\n }\n}\n\n/**\n * A reference to a resource parameter that will be resolved at runtime.\n * Stores a reference to the resource for lazy name resolution.\n */\nexport class ResourceParamReference {\n private __resource: BaseResource;\n private __param: string;\n readonly [resourceParamRefSymbol] = true;\n\n constructor(resource: BaseResource, param: string) {\n this.__resource = resource;\n this.__param = param;\n }\n\n toString(): string {\n return `$ResourceParam('${this.__resource.resourceName}', '${this.__param}')`;\n }\n\n toJSON(): string {\n return this.toString();\n }\n\n // Allow the reference to be used directly in template strings\n valueOf(): string {\n return this.toString();\n }\n}\n\n/**\n * Base class for type/properties structures (engines, packaging, events, etc.)\n */\nexport class BaseTypeProperties {\n public readonly type: string;\n public readonly properties: any;\n readonly [baseTypePropertiesSymbol] = true;\n\n constructor(type: string, properties: any) {\n this.type = type;\n this.properties = properties;\n }\n}\n\n/**\n * Base resource class that provides common functionality\n */\nexport class BaseResource {\n private readonly _type: string;\n private _properties: any;\n private _overrides?: any;\n private _transforms?: any;\n private _resourceName: string | undefined;\n private _explicitName: boolean;\n\n constructor(name: string | undefined, type: string, properties: any, overrides?: any) {\n this._resourceName = name;\n this._explicitName = name !== undefined;\n this._type = type;\n\n // Store properties and overrides initially - they'll be processed when name is set\n this._properties = properties;\n this._overrides = overrides;\n\n // If name is already set, process overrides and transforms now\n if (name !== undefined) {\n this._processOverridesAndTransforms();\n }\n }\n\n /**\n * Process overrides and transforms extraction from properties.\n * Called when the resource name is available.\n */\n private _processOverridesAndTransforms(): void {\n const properties = this._properties;\n if (properties && typeof properties === 'object') {\n // Clone properties without overrides and transforms\n const finalProperties = { ...properties };\n\n // Handle overrides\n if ('overrides' in finalProperties) {\n const propertiesOverrides = finalProperties.overrides;\n delete finalProperties.overrides;\n\n // Transform overrides using cfLogicalNames\n if (propertiesOverrides && typeof propertiesOverrides === 'object') {\n this._overrides = transformOverridesToLogicalNames(this._resourceName!, this._type, propertiesOverrides);\n }\n }\n\n // Handle transforms\n if ('transforms' in finalProperties) {\n const propertiesTransforms = finalProperties.transforms;\n delete finalProperties.transforms;\n\n // Transform transforms using cfLogicalNames (same mapping as overrides)\n if (propertiesTransforms && typeof propertiesTransforms === 'object') {\n this._transforms = transformTransformsToLogicalNames(this._resourceName!, this._type, propertiesTransforms);\n }\n }\n\n this._properties = finalProperties;\n }\n }\n\n // Public getter for resource name (used for referencing resources)\n // Returns a deferred reference when name isn't set yet, which resolves during transformation\n get resourceName(): string {\n if (this._resourceName === undefined) {\n // Return a deferred reference that will resolve during transformation\n // TypeScript sees this as string due to toString/valueOf, runtime resolves lazily\n return new DeferredResourceName(this) as unknown as string;\n }\n return this._resourceName;\n }\n\n /**\n * Internal method to set the resource name from the object key.\n * Called by transformConfigWithResources.\n */\n [setResourceNameSymbol](name: string): void {\n if (this._explicitName && this._resourceName !== name) {\n // If an explicit name was provided and it differs from the key, use the explicit name\n return;\n }\n if (this._resourceName === undefined) {\n this._resourceName = name;\n // Now that we have a name, process overrides and transforms\n this._processOverridesAndTransforms();\n }\n }\n\n // Private methods using symbols - not accessible from outside or in autocomplete\n [getParamReferenceSymbol](paramName: string): ResourceParamReference {\n return new ResourceParamReference(this, paramName);\n }\n\n [getTypeSymbol](): string {\n return this._type;\n }\n\n [getPropertiesSymbol](): any {\n return this._properties;\n }\n\n [getOverridesSymbol](): any | undefined {\n return this._overrides;\n }\n\n [getTransformsSymbol](): any | undefined {\n return this._transforms;\n }\n}\n\n/**\n * Transform user-friendly overrides (with property names like 'bucket', 'lambdaLogGroup')\n * to CloudFormation logical names using cfLogicalNames\n */\nfunction transformOverridesToLogicalNames(resourceName: string, resourceType: string, overrides: any): any {\n // Get child resources for this resource type\n const childResources = CHILD_RESOURCES[resourceType] || [];\n\n // Build a map of property names to child resources\n const propertyNameMap = new Map<string, any>();\n\n for (const childResource of childResources) {\n // The logicalName function has a name property that matches the property name\n if (childResource.logicalName && childResource.logicalName.name) {\n propertyNameMap.set(childResource.logicalName.name, childResource);\n }\n }\n\n // Transform overrides object\n const transformedOverrides: any = {};\n const errorMessage = `Override of property {propertyName} of resource ${resourceName} is not supported.\\n\nRemove 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.`;\n\n for (const propertyName in overrides) {\n const childResource = propertyNameMap.get(propertyName);\n\n // Skip unresolvable resources\n if (childResource?.unresolvable) {\n throw new Error(errorMessage.replace('{propertyName}', propertyName));\n }\n\n if (childResource) {\n const logicalNameFn = childResource.logicalName;\n // Call the cfLogicalNames function to get the actual CloudFormation logical name\n // Try with resourceName first (most common), then try without arguments\n let logicalName: string;\n try {\n logicalName = logicalNameFn(resourceName);\n } catch {\n try {\n logicalName = logicalNameFn();\n } catch {\n // If both fail, use property name as-is\n logicalName = propertyName;\n }\n }\n if (logicalName.includes('undefined')) {\n throw new Error(errorMessage.replace('{propertyName}', propertyName));\n }\n transformedOverrides[logicalName] = overrides[propertyName];\n } else {\n // If not found in map, use property name as-is (shouldn't happen with proper types)\n transformedOverrides[propertyName] = overrides[propertyName];\n }\n }\n\n return transformedOverrides;\n}\n\n/**\n * Transform user-friendly transforms (with property names like 'lambda', 'lambdaLogGroup')\n * to CloudFormation logical names using cfLogicalNames\n * Similar to overrides but the values are functions instead of objects\n */\nfunction transformTransformsToLogicalNames(resourceName: string, resourceType: string, transforms: any): any {\n // Get child resources for this resource type\n const childResources = CHILD_RESOURCES[resourceType] || [];\n\n // Build a map of property names to child resources\n const propertyNameMap = new Map<string, any>();\n\n for (const childResource of childResources) {\n // The logicalName function has a name property that matches the property name\n if (childResource.logicalName && childResource.logicalName.name) {\n propertyNameMap.set(childResource.logicalName.name, childResource);\n }\n }\n\n // Transform transforms object\n const transformedTransforms: any = {};\n const errorMessage = `Transform of property {propertyName} of resource ${resourceName} is not supported.\\n\nRemove the transform, run 'stacktape compile:template' command, and find the logical name of the resource you want to transform manually. Then add it to the transforms object.`;\n\n for (const propertyName in transforms) {\n const childResource = propertyNameMap.get(propertyName);\n\n // Skip unresolvable resources\n if (childResource?.unresolvable) {\n throw new Error(errorMessage.replace('{propertyName}', propertyName));\n }\n\n if (childResource) {\n const logicalNameFn = childResource.logicalName;\n // Call the cfLogicalNames function to get the actual CloudFormation logical name\n // Try with resourceName first (most common), then try without arguments\n let logicalName: string;\n try {\n logicalName = logicalNameFn(resourceName);\n } catch {\n try {\n logicalName = logicalNameFn();\n } catch {\n // If both fail, use property name as-is\n logicalName = propertyName;\n }\n }\n if (logicalName.includes('undefined')) {\n throw new Error(errorMessage.replace('{propertyName}', propertyName));\n }\n transformedTransforms[logicalName] = transforms[propertyName];\n } else {\n // If not found in map, use property name as-is (shouldn't happen with proper types)\n transformedTransforms[propertyName] = transforms[propertyName];\n }\n }\n\n return transformedTransforms;\n}\n\nexport type GetConfigParams = {\n /**\n * Project name used for this operation\n */\n projectName: string;\n /**\n * Stage (\"environment\") used for this operation\n */\n stage: string;\n /**\n * AWS region used for this operation\n * The list of available regions is available at https://www.aws-services.info/regions.html\n */\n region: string;\n /**\n * List of arguments passed to the operation\n */\n cliArgs: StacktapeArgs;\n /**\n * Stacktape command used to perform this operation (can be either deploy, codebuild:deploy, delete, etc.)\n */\n command: string;\n /**\n * Locally-configured AWS profile used to execute the operation.\n * Doesn't apply if you have your AWS account connected in \"automatic\" mode.\n */\n awsProfile: string;\n /**\n * Information about the user performing the stack operation\n */\n user: {\n id: string;\n name: string;\n email: string;\n };\n};\n\n/**\n * Helper function to define a config with automatic transformation\n * Use this when exporting your config for the Stacktape CLI\n */\nexport const defineConfig = (configFn: (params: GetConfigParams) => StacktapeConfig) => {\n return (params: GetConfigParams) => {\n const config = configFn(params);\n return transformConfigWithResources(config);\n };\n};\n\n/**\n * Transforms a config with resource instances into a plain config object\n */\nexport const transformConfigWithResources = (config: any): any => {\n if (!config || typeof config !== 'object') {\n return config;\n }\n\n // First pass: set all resource names from object keys\n // This must happen before any transformation so that ResourceParamReferences can resolve names\n if (config.resources && typeof config.resources === 'object') {\n for (const key in config.resources) {\n const resource = config.resources[key];\n if (isBaseResource(resource)) {\n (resource as any)[setResourceNameSymbol](key);\n }\n }\n }\n\n // Second pass: transform the config\n const result: any = {};\n for (const key in config) {\n if (key === 'resources') {\n // Resources are transformed as definitions\n result[key] = transformResourceDefinitions(config[key]);\n } else if (key === 'scripts') {\n // Scripts are also transformed as definitions\n result[key] = transformScriptDefinitions(config[key]);\n } else {\n result[key] = transformValue(config[key]);\n }\n }\n return result;\n};\n\n/**\n * Transforms environment object to array format\n */\nconst transformEnvironment = (env: any): any => {\n if (!env || typeof env !== 'object' || Array.isArray(env)) {\n return env;\n }\n\n // Convert { KEY: value } to [{ name: 'KEY', value }]\n return Object.entries(env).map(([name, value]) => ({\n name,\n value: transformValue(value)\n }));\n};\n\n/**\n * Transforms resource definitions (values in the resources object)\n */\nconst transformResourceDefinitions = (resources: any): any => {\n if (!resources || typeof resources !== 'object') {\n return resources;\n }\n\n const result: any = {};\n for (const key in resources) {\n const resource = resources[key];\n if (isBaseResource(resource)) {\n const type = (resource as any)[getTypeSymbol]();\n const properties = (resource as any)[getPropertiesSymbol]();\n const overrides = (resource as any)[getOverridesSymbol]();\n const transforms = (resource as any)[getTransformsSymbol]();\n result[key] = {\n type,\n properties: transformValue(properties),\n ...(overrides !== undefined && { overrides: transformValue(overrides) }),\n ...(transforms !== undefined && { transforms })\n };\n } else {\n result[key] = transformValue(resource);\n }\n }\n return result;\n};\n\n/**\n * Transforms script definitions (values in the scripts object)\n */\nconst transformScriptDefinitions = (scripts: any): any => {\n if (!scripts || typeof scripts !== 'object') {\n return scripts;\n }\n\n const result: any = {};\n for (const key in scripts) {\n const script = scripts[key];\n if (isBaseTypeProperties(script)) {\n result[key] = {\n type: script.type,\n properties: transformValue(script.properties)\n };\n } else {\n result[key] = transformValue(script);\n }\n }\n return result;\n};\n\nexport const transformValue = (value: any): any => {\n if (value === null || value === undefined) {\n return value;\n }\n\n // Transform DeferredResourceName - resolve to actual name\n if (isDeferredResourceName(value)) {\n return value.resolve();\n }\n\n // Transform ResourceParamReference\n if (isResourceParamReference(value)) {\n return value.toString();\n }\n\n // Transform BaseResource references (not definitions) to resourceName\n // This handles cases like connectTo: [database]\n if (isBaseResource(value)) {\n return value.resourceName;\n }\n\n // Transform BaseTypeProperties (engines, packaging, events) to plain object\n if (isBaseTypeProperties(value)) {\n return {\n type: value.type,\n properties: transformValue(value.properties)\n };\n }\n\n // Transform arrays\n if (Array.isArray(value)) {\n return value.map((item) => {\n // If it's a resource instance in an array (e.g., connectTo), transform to resourceName\n if (isBaseResource(item)) {\n return item.resourceName;\n }\n return transformValue(item);\n });\n }\n\n // Transform objects\n if (typeof value === 'object') {\n const result: any = {};\n for (const key in value) {\n // Special handling for environment property\n if (key === 'environment') {\n result[key] = transformEnvironment(value[key]);\n } else {\n result[key] = transformValue(value[key]);\n }\n }\n return result;\n }\n\n return value;\n};\n", "/**\n * Returns a reference to a resource parameter.\n * @param resourceName - The name of the resource as specified in the Stacktape config.\n * @param property - The property of the resource. The list of properties is available in the Stacktape docs for every given resource type.\n */\nexport const $ResourceParam = (resourceName: string, property: string) => {\n return `$ResourceParam('${resourceName}','${property}')`;\n};\n\n/**\n * Returns a reference to a CloudFormation resource parameter.\n * @param cloudformationResourceLogicalId - The logical name of the Cloudformation resource.\n * If you are referencing a resource defined in the cloudformationResources section, use its name.\n * To reference a child resource of a Stacktape resource, you can get a list of child resources with the `stacktape stack-info` command\n * @param property - The parameter of the Cloudformation resource to reference.\n * For a list of all referenceable parameters, refer to the [Referencing parameters](https://docs.stacktape.com/configuration/referencing-parameters#parameters-of-cloudformation-resources) section in the Stacktape docs.\n */\nexport const $CfResourceParam = (cloudformationResourceLogicalId: string, property: string) => {\n return `$CfResourceParam('${cloudformationResourceLogicalId}','${property}')`;\n};\n\n/**\n * Returns a reference to a secret.\n * @param secretName - The name of the secret. Must be a valid secret name in the AWS Secrets Manager in the region you're deploying to.\n * If the secret is in JSON format, you can extract nested properties using dot notation.\n * Example: `$Secret('my-secret.api-key')` will return the value of the `api-key` property in the `my-secret` secret.\n */\nexport const $Secret = (secretName: string) => {\n return `$Secret('${secretName}')`;\n};\n\n/**\n * Returns an interpolated string. Unlike the $Format() directive, the $CfFormat() directive can contain runtime-resolved directives as arguments.\n * @param interpolatedString - Occurrences of {} are replaced by the subsequent arguments.\n * @param values - The number of values must be equal to the number of {} placeholders in the first argument.\n * Example:\n * `$CfFormat('{}-{}', 'foo', 'bar')` results in `foo-bar`.\n * $CfFormat('{}-mydomain.com', 'foo') results in foo-mydomain.com.\n * `$CfFormat('{}.mydomain.com', $Stage())` results in `staging.mydomain.com` if the stage is staging.\n */\nexport const $CfFormat = (interpolatedString: string, ...values: any[]) => {\n return `$CfFormat('${interpolatedString}', '${values.join(',')}')`;\n};\n\n/**\n * Returns the output of another stack, allowing you to reference resources deployed in another stack. The referenced stack must already be deployed. If you try to delete a stack that is referenced by another stack, you will get an error.\n * To get the output locally (i.e., download the value and pass it to the configuration), use the $StackOutput() directive.\n * @param stackName - The name of the stack.\n * @param outputName - The name of the output.\n */\nexport const $CfStackOutput = (stackName: string, outputName: string) => {\n return `$CfStackOutput('${stackName}','${outputName}')`;\n};\n\n/**\n * Returns information about the current Git repository.\n *\n * $GitInfo().sha1 - SHA-1 of the latest commit\n *\n * $GitInfo().commit - The latest commit ID\n *\n * $GitInfo().branch - The name of the current branch\n *\n * $GitInfo().message - The message of the last commit\n *\n * $GitInfo().user - Git user's name\n *\n * $GitInfo().email - Git user's email\n *\n * $GitInfo().repository - The name of the git repository\n *\n * $GitInfo().tags - The tags pointing to the current commit\n *\n * $GitInfo().describe - The most recent tag that is reachable from a commit\n */\nexport const $GitInfo = () => {\n return '$GitInfo()';\n};\n", "/**\n * AWS SES (Simple Email Service) reference for connectTo\n * Grants full permissions for AWS SES (ses:*)\n */\nexport const AWS_SES = 'aws:ses' as const;\n\n/**\n * Type that represents any AWS service constant\n */\nexport type GlobalAwsServiceConstant = typeof AWS_SES;\n", "/**\n * This file defines type-properties shaped definitions (e.g. Stacktape resources, packaging types etc.)\n * that can be converted to a Typescript class. These classes are then exported from stacktape/classes\n *\n * @example import { StacktapeLambdaBuildpackPackaging } from 'stacktape/classes';\n */\n\nexport type ResourceClassName = Omit<KebabToPascalCase<StpResourceType>, 'Function'> | 'LambdaFunction';\n\nexport type ResourceDefinition = {\n /** Class name for the resource (e.g., 'LambdaFunction') */\n className: ResourceClassName;\n /** Resource type identifier used in config (e.g., 'function') */\n resourceType: string;\n /** Props type name (e.g., 'LambdaFunctionProps') */\n propsType: string;\n /** Interface name in the source .d.ts file (e.g., 'LambdaFunction') */\n interfaceName: string;\n /** Source .d.ts file name (e.g., 'functions.d.ts') */\n sourceFile: string;\n /** Resources and AWS services this resource can connect to. GlobalAwsServiceConstant is for global services, e.g. aws:ses */\n canConnectTo?: string[];\n /** Whether this resource supports overrides (default: true) */\n supportsOverrides?: boolean;\n /** Whether this resource has augmented connectTo/environment props (default: false) */\n hasAugmentedProps?: boolean;\n};\n\n/**\n * Complete list of all Stacktape resources.\n * This is the single source of truth - all code generation derives from this.\n */\nexport const RESOURCES_CONVERTIBLE_TO_CLASSES: ResourceDefinition[] = [\n {\n className: 'RelationalDatabase',\n resourceType: 'relational-database',\n propsType: 'RelationalDatabaseProps',\n interfaceName: 'RelationalDatabase',\n sourceFile: 'relational-databases.d.ts',\n canConnectTo: []\n },\n {\n className: 'WebService',\n resourceType: 'web-service',\n propsType: 'WebServiceProps',\n interfaceName: 'WebService',\n sourceFile: 'web-services.d.ts',\n hasAugmentedProps: true,\n canConnectTo: [\n 'RelationalDatabase',\n 'Bucket',\n 'HostingBucket',\n 'DynamoDbTable',\n 'EventBus',\n 'RedisCluster',\n 'MongoDbAtlasCluster',\n 'UpstashRedis',\n 'SqsQueue',\n 'SnsTopic',\n 'OpenSearchDomain',\n 'EfsFilesystem',\n 'PrivateService'\n ]\n },\n {\n className: 'PrivateService',\n resourceType: 'private-service',\n propsType: 'PrivateServiceProps',\n interfaceName: 'PrivateService',\n sourceFile: 'private-services.d.ts',\n hasAugmentedProps: true,\n canConnectTo: [\n 'RelationalDatabase',\n 'Bucket',\n 'HostingBucket',\n 'DynamoDbTable',\n 'EventBus',\n 'RedisCluster',\n 'MongoDbAtlasCluster',\n 'UpstashRedis',\n 'SqsQueue',\n 'SnsTopic',\n 'OpenSearchDomain',\n 'EfsFilesystem'\n ]\n },\n {\n className: 'WorkerService',\n resourceType: 'worker-service',\n propsType: 'WorkerServiceProps',\n interfaceName: 'WorkerService',\n sourceFile: 'worker-services.d.ts',\n hasAugmentedProps: true,\n canConnectTo: [\n 'RelationalDatabase',\n 'Bucket',\n 'HostingBucket',\n 'DynamoDbTable',\n 'EventBus',\n 'RedisCluster',\n 'MongoDbAtlasCluster',\n 'UpstashRedis',\n 'SqsQueue',\n 'SnsTopic',\n 'OpenSearchDomain',\n 'EfsFilesystem'\n ]\n },\n {\n className: 'MultiContainerWorkload',\n resourceType: 'multi-container-workload',\n propsType: 'ContainerWorkloadProps',\n interfaceName: 'MultiContainerWorkload',\n sourceFile: 'multi-container-workloads.d.ts',\n hasAugmentedProps: true,\n canConnectTo: [\n 'RelationalDatabase',\n 'Bucket',\n 'HostingBucket',\n 'DynamoDbTable',\n 'EventBus',\n 'RedisCluster',\n 'MongoDbAtlasCluster',\n 'UpstashRedis',\n 'SqsQueue',\n 'SnsTopic',\n 'OpenSearchDomain',\n 'EfsFilesystem'\n ]\n },\n {\n className: 'LambdaFunction',\n resourceType: 'function',\n propsType: 'LambdaFunctionProps',\n interfaceName: 'LambdaFunction',\n sourceFile: 'functions.d.ts',\n hasAugmentedProps: true,\n canConnectTo: [\n 'RelationalDatabase',\n 'Bucket',\n 'HostingBucket',\n 'DynamoDbTable',\n 'EventBus',\n 'RedisCluster',\n 'MongoDbAtlasCluster',\n 'UpstashRedis',\n 'SqsQueue',\n 'SnsTopic',\n 'OpenSearchDomain',\n 'EfsFilesystem',\n 'PrivateService',\n 'WebService'\n ]\n },\n {\n className: 'BatchJob',\n resourceType: 'batch-job',\n propsType: 'BatchJobProps',\n interfaceName: 'BatchJob',\n sourceFile: 'batch-jobs.d.ts',\n hasAugmentedProps: true,\n canConnectTo: [\n 'RelationalDatabase',\n 'Bucket',\n 'HostingBucket',\n 'DynamoDbTable',\n 'EventBus',\n 'RedisCluster',\n 'MongoDbAtlasCluster',\n 'UpstashRedis',\n 'SqsQueue',\n 'SnsTopic',\n 'OpenSearchDomain',\n 'EfsFilesystem'\n ]\n },\n {\n className: 'Bucket',\n resourceType: 'bucket',\n propsType: 'BucketProps',\n interfaceName: 'Bucket',\n sourceFile: 'buckets.d.ts',\n canConnectTo: []\n },\n {\n className: 'HostingBucket',\n resourceType: 'hosting-bucket',\n propsType: 'HostingBucketProps',\n interfaceName: 'HostingBucket',\n sourceFile: 'hosting-buckets.d.ts',\n canConnectTo: []\n },\n {\n className: 'DynamoDbTable',\n resourceType: 'dynamo-db-table',\n propsType: 'DynamoDbTableProps',\n interfaceName: 'DynamoDbTable',\n sourceFile: 'dynamo-db-tables.d.ts',\n canConnectTo: []\n },\n {\n className: 'EventBus',\n resourceType: 'event-bus',\n propsType: 'EventBusProps',\n interfaceName: 'EventBus',\n sourceFile: 'event-buses.d.ts',\n canConnectTo: []\n },\n {\n className: 'HttpApiGateway',\n resourceType: 'http-api-gateway',\n propsType: 'HttpApiGatewayProps',\n interfaceName: 'HttpApiGateway',\n sourceFile: 'http-api-gateways.d.ts',\n canConnectTo: []\n },\n {\n className: 'ApplicationLoadBalancer',\n resourceType: 'application-load-balancer',\n propsType: 'ApplicationLoadBalancerProps',\n interfaceName: 'ApplicationLoadBalancer',\n sourceFile: 'application-load-balancers.d.ts',\n canConnectTo: []\n },\n {\n className: 'NetworkLoadBalancer',\n resourceType: 'network-load-balancer',\n propsType: 'NetworkLoadBalancerProps',\n interfaceName: 'NetworkLoadBalancer',\n sourceFile: 'network-load-balancer.d.ts',\n canConnectTo: []\n },\n {\n className: 'RedisCluster',\n resourceType: 'redis-cluster',\n propsType: 'RedisClusterProps',\n interfaceName: 'RedisCluster',\n sourceFile: 'redis-cluster.d.ts',\n canConnectTo: []\n },\n {\n className: 'MongoDbAtlasCluster',\n resourceType: 'mongo-db-atlas-cluster',\n propsType: 'MongoDbAtlasClusterProps',\n interfaceName: 'MongoDbAtlasCluster',\n sourceFile: 'mongo-db-atlas-clusters.d.ts',\n supportsOverrides: false,\n canConnectTo: []\n },\n {\n className: 'StateMachine',\n resourceType: 'state-machine',\n propsType: 'StateMachineProps',\n interfaceName: 'StateMachine',\n sourceFile: 'state-machines.d.ts',\n hasAugmentedProps: true,\n canConnectTo: ['Function', 'BatchJob']\n },\n {\n className: 'UserAuthPool',\n resourceType: 'user-auth-pool',\n propsType: 'UserAuthPoolProps',\n interfaceName: 'UserAuthPool',\n sourceFile: 'user-pools.d.ts',\n canConnectTo: []\n },\n {\n className: 'UpstashRedis',\n resourceType: 'upstash-redis',\n propsType: 'UpstashRedisProps',\n interfaceName: 'UpstashRedis',\n sourceFile: 'upstash-redis.d.ts',\n supportsOverrides: false,\n canConnectTo: []\n },\n {\n className: 'SqsQueue',\n resourceType: 'sqs-queue',\n propsType: 'SqsQueueProps',\n interfaceName: 'SqsQueue',\n sourceFile: 'sqs-queues.d.ts',\n canConnectTo: []\n },\n {\n className: 'SnsTopic',\n resourceType: 'sns-topic',\n propsType: 'SnsTopicProps',\n interfaceName: 'SnsTopic',\n sourceFile: 'sns-topic.d.ts',\n canConnectTo: []\n },\n {\n className: 'WebAppFirewall',\n resourceType: 'web-app-firewall',\n propsType: 'WebAppFirewallProps',\n interfaceName: 'WebAppFirewall',\n sourceFile: 'web-app-firewall.d.ts',\n canConnectTo: []\n },\n {\n className: 'OpenSearchDomain',\n resourceType: 'open-search-domain',\n propsType: 'OpenSearchDomainProps',\n interfaceName: 'OpenSearchDomain',\n sourceFile: 'open-search.d.ts',\n canConnectTo: []\n },\n {\n className: 'EfsFilesystem',\n resourceType: 'efs-filesystem',\n propsType: 'EfsFilesystemProps',\n interfaceName: 'EfsFilesystem',\n sourceFile: 'efs-filesystem.d.ts',\n canConnectTo: []\n },\n {\n className: 'NextjsWeb',\n resourceType: 'nextjs-web',\n propsType: 'NextjsWebProps',\n interfaceName: 'NextjsWeb',\n sourceFile: 'nextjs-web.d.ts',\n canConnectTo: []\n },\n {\n className: 'Bastion',\n resourceType: 'bastion',\n propsType: 'BastionProps',\n interfaceName: 'Bastion',\n sourceFile: 'bastion.d.ts',\n canConnectTo: []\n }\n];\n\n/**\n * Defines all type + properties shaped definitions that can be converted to a Typescript class\n */\nexport type TypePropertiesDefinition = {\n className: string;\n typeValue: string;\n propsType: string;\n interfaceName: string;\n sourceFile: string;\n};\n\nexport const MISC_TYPES_CONVERTIBLE_TO_CLASSES: TypePropertiesDefinition[] = [\n // Database Engines\n {\n className: 'RdsEnginePostgres',\n typeValue: 'postgres',\n propsType: 'RdsEngineProperties',\n interfaceName: 'RdsEngine',\n sourceFile: 'relational-databases.d.ts'\n },\n {\n className: 'RdsEngineMariadb',\n typeValue: 'mariadb',\n propsType: 'RdsEngineProperties',\n interfaceName: 'RdsEngine',\n sourceFile: 'relational-databases.d.ts'\n },\n {\n className: 'RdsEngineMysql',\n typeValue: 'mysql',\n propsType: 'RdsEngineProperties',\n interfaceName: 'RdsEngine',\n sourceFile: 'relational-databases.d.ts'\n },\n {\n className: 'RdsEngineOracleEE',\n typeValue: 'oracle-ee',\n propsType: 'RdsEngineProperties',\n interfaceName: 'RdsEngine',\n sourceFile: 'relational-databases.d.ts'\n },\n {\n className: 'RdsEngineOracleSE2',\n typeValue: 'oracle-se2',\n propsType: 'RdsEngineProperties',\n interfaceName: 'RdsEngine',\n sourceFile: 'relational-databases.d.ts'\n },\n {\n className: 'RdsEngineSqlServerEE',\n typeValue: 'sqlserver-ee',\n propsType: 'RdsEngineProperties',\n interfaceName: 'RdsEngine',\n sourceFile: 'relational-databases.d.ts'\n },\n {\n className: 'RdsEngineSqlServerEX',\n typeValue: 'sqlserver-ex',\n propsType: 'RdsEngineProperties',\n interfaceName: 'RdsEngine',\n sourceFile: 'relational-databases.d.ts'\n },\n {\n className: 'RdsEngineSqlServerSE',\n typeValue: 'sqlserver-se',\n propsType: 'RdsEngineProperties',\n interfaceName: 'RdsEngine',\n sourceFile: 'relational-databases.d.ts'\n },\n {\n className: 'RdsEngineSqlServerWeb',\n typeValue: 'sqlserver-web',\n propsType: 'RdsEngineProperties',\n interfaceName: 'RdsEngine',\n sourceFile: 'relational-databases.d.ts'\n },\n {\n className: 'AuroraEnginePostgresql',\n typeValue: 'aurora-postgresql',\n propsType: 'AuroraEngineProperties',\n interfaceName: 'AuroraEngine',\n sourceFile: 'relational-databases.d.ts'\n },\n {\n className: 'AuroraEngineMysql',\n typeValue: 'aurora-mysql',\n propsType: 'AuroraEngineProperties',\n interfaceName: 'AuroraEngine',\n sourceFile: 'relational-databases.d.ts'\n },\n {\n className: 'AuroraServerlessEnginePostgresql',\n typeValue: 'aurora-postgresql-serverless',\n propsType: 'AuroraServerlessEngineProperties',\n interfaceName: 'AuroraServerlessEngine',\n sourceFile: 'relational-databases.d.ts'\n },\n {\n className: 'AuroraServerlessEngineMysql',\n typeValue: 'aurora-mysql-serverless',\n propsType: 'AuroraServerlessEngineProperties',\n interfaceName: 'AuroraServerlessEngine',\n sourceFile: 'relational-databases.d.ts'\n },\n {\n className: 'AuroraServerlessV2EnginePostgresql',\n typeValue: 'aurora-postgresql-serverless-v2',\n propsType: 'AuroraServerlessV2EngineProperties',\n interfaceName: 'AuroraServerlessV2Engine',\n sourceFile: 'relational-databases.d.ts'\n },\n {\n className: 'AuroraServerlessV2EngineMysql',\n typeValue: 'aurora-mysql-serverless-v2',\n propsType: 'AuroraServerlessV2EngineProperties',\n interfaceName: 'AuroraServerlessV2Engine',\n sourceFile: 'relational-databases.d.ts'\n },\n // Lambda Packaging\n {\n className: 'StacktapeLambdaBuildpackPackaging',\n typeValue: 'stacktape-lambda-buildpack',\n propsType: 'StpBuildpackLambdaPackagingProps',\n interfaceName: 'StpBuildpackLambdaPackaging',\n sourceFile: 'deployment-artifacts.d.ts'\n },\n {\n className: 'CustomArtifactLambdaPackaging',\n typeValue: 'custom-artifact',\n propsType: 'CustomArtifactLambdaPackagingProps',\n interfaceName: 'CustomArtifactLambdaPackaging',\n sourceFile: 'deployment-artifacts.d.ts'\n },\n // Container Packaging\n {\n className: 'PrebuiltImagePackaging',\n typeValue: 'prebuilt-image',\n propsType: 'PrebuiltImageCwPackagingProps',\n interfaceName: 'PrebuiltCwImagePackaging',\n sourceFile: 'deployment-artifacts.d.ts'\n },\n {\n className: 'CustomDockerfilePackaging',\n typeValue: 'custom-dockerfile',\n propsType: 'CustomDockerfileCwImagePackagingProps',\n interfaceName: 'CustomDockerfileCwImagePackaging',\n sourceFile: 'deployment-artifacts.d.ts'\n },\n {\n className: 'ExternalBuildpackPackaging',\n typeValue: 'external-buildpack',\n propsType: 'ExternalBuildpackCwImagePackagingProps',\n interfaceName: 'ExternalBuildpackCwImagePackaging',\n sourceFile: 'deployment-artifacts.d.ts'\n },\n {\n className: 'NixpacksPackaging',\n typeValue: 'nixpacks',\n propsType: 'NixpacksCwImagePackagingProps',\n interfaceName: 'NixpacksCwImagePackaging',\n sourceFile: 'deployment-artifacts.d.ts'\n },\n {\n className: 'StacktapeImageBuildpackPackaging',\n typeValue: 'stacktape-image-buildpack',\n propsType: 'StpBuildpackCwImagePackagingProps',\n interfaceName: 'StpBuildpackCwImagePackaging',\n sourceFile: 'deployment-artifacts.d.ts'\n },\n // Lambda Function Events/Integrations\n {\n className: 'HttpApiIntegration',\n typeValue: 'http-api-gateway',\n propsType: 'HttpApiIntegrationProps',\n interfaceName: 'HttpApiIntegration',\n sourceFile: 'events.d.ts'\n },\n {\n className: 'S3Integration',\n typeValue: 's3',\n propsType: 'S3IntegrationProps',\n interfaceName: 'S3Integration',\n sourceFile: 'events.d.ts'\n },\n {\n className: 'ScheduleIntegration',\n typeValue: 'schedule',\n propsType: 'ScheduleIntegrationProps',\n interfaceName: 'ScheduleIntegration',\n sourceFile: 'events.d.ts'\n },\n {\n className: 'SnsIntegration',\n typeValue: 'sns',\n propsType: 'SnsIntegrationProps',\n interfaceName: 'SnsIntegration',\n sourceFile: 'events.d.ts'\n },\n {\n className: 'SqsIntegration',\n typeValue: 'sqs',\n propsType: 'SqsIntegrationProps',\n interfaceName: 'SqsIntegration',\n sourceFile: 'events.d.ts'\n },\n {\n className: 'KinesisIntegration',\n typeValue: 'kinesis',\n propsType: 'KinesisIntegrationProps',\n interfaceName: 'KinesisIntegration',\n sourceFile: 'events.d.ts'\n },\n {\n className: 'DynamoDbIntegration',\n typeValue: 'dynamodb',\n propsType: 'DynamoDbIntegrationProps',\n interfaceName: 'DynamoDbIntegration',\n sourceFile: 'events.d.ts'\n },\n {\n className: 'CloudwatchLogIntegration',\n typeValue: 'cloudwatch-logs',\n propsType: 'CloudwatchLogIntegrationProps',\n interfaceName: 'CloudwatchLogIntegration',\n sourceFile: 'events.d.ts'\n },\n {\n className: 'ApplicationLoadBalancerIntegration',\n typeValue: 'application-load-balancer',\n propsType: 'ApplicationLoadBalancerIntegrationProps',\n interfaceName: 'ApplicationLoadBalancerIntegration',\n sourceFile: 'events.d.ts'\n },\n {\n className: 'EventBusIntegration',\n typeValue: 'event-bus',\n propsType: 'EventBusIntegrationProps',\n interfaceName: 'EventBusIntegration',\n sourceFile: 'events.d.ts'\n },\n {\n className: 'KafkaTopicIntegration',\n typeValue: 'kafka-topic',\n propsType: 'KafkaTopicIntegrationProps',\n interfaceName: 'KafkaTopicIntegration',\n sourceFile: 'events.d.ts'\n },\n {\n className: 'AlarmIntegration',\n typeValue: 'alarm',\n propsType: 'AlarmIntegrationProps',\n interfaceName: 'AlarmIntegration',\n sourceFile: 'events.d.ts'\n },\n {\n className: 'IotIntegration',\n typeValue: 'iot',\n propsType: 'IotIntegrationProps',\n interfaceName: 'IotIntegration',\n sourceFile: 'events.d.ts'\n },\n // CDN Routes\n {\n className: 'CdnLoadBalancerRoute',\n typeValue: 'application-load-balancer',\n propsType: 'CdnLoadBalancerOrigin',\n interfaceName: 'CdnLoadBalancerOrigin',\n sourceFile: 'cdn.d.ts'\n },\n {\n className: 'CdnHttpApiGatewayRoute',\n typeValue: 'http-api-gateway',\n propsType: 'CdnHttpApiGatewayOrigin',\n interfaceName: 'CdnHttpApiGatewayOrigin',\n sourceFile: 'cdn.d.ts'\n },\n {\n className: 'CdnLambdaFunctionRoute',\n typeValue: 'function',\n propsType: 'CdnLambdaFunctionOrigin',\n interfaceName: 'CdnLambdaFunctionOrigin',\n sourceFile: 'cdn.d.ts'\n },\n {\n className: 'CdnCustomDomainRoute',\n typeValue: 'custom-origin',\n propsType: 'CdnCustomOrigin',\n interfaceName: 'CdnCustomOrigin',\n sourceFile: 'cdn.d.ts'\n },\n {\n className: 'CdnBucketRoute',\n typeValue: 'bucket',\n propsType: 'CdnBucketOrigin',\n interfaceName: 'CdnBucketOrigin',\n sourceFile: 'cdn.d.ts'\n },\n // Web App Firewall Rules\n {\n className: 'ManagedRuleGroup',\n typeValue: 'managed-rule-group',\n propsType: 'ManagedRuleGroupProps',\n interfaceName: 'ManagedRuleGroup',\n sourceFile: 'web-app-firewall.d.ts'\n },\n {\n className: 'CustomRuleGroup',\n typeValue: 'custom-rule-group',\n propsType: 'CustomRuleGroupProps',\n interfaceName: 'CustomRuleGroup',\n sourceFile: 'web-app-firewall.d.ts'\n },\n {\n className: 'RateBasedRule',\n typeValue: 'rate-based-rule',\n propsType: 'RateBasedStatementProps',\n interfaceName: 'RateBasedRule',\n sourceFile: 'web-app-firewall.d.ts'\n },\n // SQS Queue Integrations\n {\n className: 'SqsQueueEventBusIntegration',\n typeValue: 'event-bus',\n propsType: 'SqsQueueEventBusIntegrationProps',\n interfaceName: 'SqsQueueEventBusIntegration',\n sourceFile: 'sqs-queues.d.ts'\n },\n // Multi Container Workload Integrations\n {\n className: 'MultiContainerWorkloadHttpApiIntegration',\n typeValue: 'http-api-gateway',\n propsType: 'ContainerWorkloadHttpApiIntegrationProps',\n interfaceName: 'ContainerWorkloadHttpApiIntegration',\n sourceFile: 'multi-container-workloads.d.ts'\n },\n {\n className: 'MultiContainerWorkloadLoadBalancerIntegration',\n typeValue: 'application-load-balancer',\n propsType: 'ContainerWorkloadLoadBalancerIntegrationProps',\n interfaceName: 'ContainerWorkloadLoadBalancerIntegration',\n sourceFile: 'multi-container-workloads.d.ts'\n },\n {\n className: 'MultiContainerWorkloadNetworkLoadBalancerIntegration',\n typeValue: 'network-load-balancer',\n propsType: 'ContainerWorkloadNetworkLoadBalancerIntegrationProps',\n interfaceName: 'ContainerWorkloadNetworkLoadBalancerIntegration',\n sourceFile: 'multi-container-workloads.d.ts'\n },\n {\n className: 'MultiContainerWorkloadInternalIntegration',\n typeValue: 'workload-internal',\n propsType: 'ContainerWorkloadInternalIntegrationProps',\n interfaceName: 'ContainerWorkloadInternalIntegration',\n sourceFile: 'multi-container-workloads.d.ts'\n },\n {\n className: 'MultiContainerWorkloadServiceConnectIntegration',\n typeValue: 'service-connect',\n propsType: 'ContainerWorkloadServiceConnectIntegrationProps',\n interfaceName: 'ContainerWorkloadServiceConnectIntegration',\n sourceFile: 'multi-container-workloads.d.ts'\n },\n // Scripts\n {\n className: 'LocalScript',\n typeValue: 'local-script',\n propsType: 'LocalScriptProps',\n interfaceName: 'LocalScript',\n sourceFile: '__helpers.d.ts'\n },\n {\n className: 'BastionScript',\n typeValue: 'bastion-script',\n propsType: 'BastionScriptProps',\n interfaceName: 'BastionScript',\n sourceFile: '__helpers.d.ts'\n },\n {\n className: 'LocalScriptWithBastionTunneling',\n typeValue: 'local-script-with-bastion-tunneling',\n propsType: 'LocalScriptWithBastionTunnelingProps',\n interfaceName: 'LocalScriptWithBastionTunneling',\n sourceFile: '__helpers.d.ts'\n },\n // Log Forwarding\n {\n className: 'HttpEndpointLogForwarding',\n typeValue: 'http-endpoint',\n propsType: 'HttpEndpointLogForwardingProps',\n interfaceName: 'HttpEndpointLogForwarding',\n sourceFile: '__helpers.d.ts'\n },\n {\n className: 'HighlightLogForwarding',\n typeValue: 'highlight',\n propsType: 'HighlightLogForwardingProps',\n interfaceName: 'HighlightLogForwarding',\n sourceFile: '__helpers.d.ts'\n },\n {\n className: 'DatadogLogForwarding',\n typeValue: 'datadog',\n propsType: 'DatadogLogForwardingProps',\n interfaceName: 'DatadogLogForwarding',\n sourceFile: '__helpers.d.ts'\n },\n // Bucket Lifecycle Rules\n {\n className: 'ExpirationLifecycleRule',\n typeValue: 'expiration',\n propsType: 'ExpirationProps',\n interfaceName: 'ExpirationLifecycleRule',\n sourceFile: 'buckets.d.ts'\n },\n {\n className: 'NonCurrentVersionExpirationLifecycleRule',\n typeValue: 'non-current-version-expiration',\n propsType: 'NonCurrentVersionExpirationProps',\n interfaceName: 'NonCurrentVersionExpirationLifecycleRule',\n sourceFile: 'buckets.d.ts'\n },\n // EFS Mounts\n {\n className: 'ContainerEfsMount',\n typeValue: 'efs',\n propsType: 'ContainerEfsMountProps',\n interfaceName: 'ContainerEfsMount',\n sourceFile: '__helpers.d.ts'\n },\n {\n className: 'LambdaEfsMount',\n typeValue: 'efs',\n propsType: 'LambdaEfsMountProps',\n interfaceName: 'LambdaEfsMount',\n sourceFile: 'functions.d.ts'\n },\n // Authorizers\n {\n className: 'CognitoAuthorizer',\n typeValue: 'cognito',\n propsType: 'CognitoAuthorizerProperties',\n interfaceName: 'CognitoAuthorizer',\n sourceFile: 'user-pools.d.ts'\n },\n {\n className: 'LambdaAuthorizer',\n typeValue: 'lambda',\n propsType: 'LambdaAuthorizerProperties',\n interfaceName: 'LambdaAuthorizer',\n sourceFile: 'user-pools.d.ts'\n },\n // Custom Resources\n {\n className: 'CustomResourceDefinition',\n typeValue: 'custom-resource-definition',\n propsType: 'CustomResourceDefinitionProps',\n interfaceName: 'CustomResourceDefinition',\n sourceFile: 'custom-resources.d.ts'\n },\n {\n className: 'CustomResourceInstance',\n typeValue: 'custom-resource-instance',\n propsType: 'CustomResourceInstanceProps',\n interfaceName: 'CustomResourceInstance',\n sourceFile: 'custom-resources.d.ts'\n },\n // Deployment Scripts\n {\n className: 'DeploymentScript',\n typeValue: 'deployment-script',\n propsType: 'DeploymentScriptProps',\n interfaceName: 'DeploymentScript',\n sourceFile: 'deployment-script.d.ts'\n },\n // Edge Lambda Functions\n {\n className: 'EdgeLambdaFunction',\n typeValue: 'edge-lambda-function',\n propsType: 'EdgeLambdaFunctionProps',\n interfaceName: 'EdgeLambdaFunction',\n sourceFile: 'edge-lambda-functions.d.ts'\n }\n];\n\n// ==================== HELPER FUNCTIONS ====================\n\nexport function getResourceByClassName(className: string): ResourceDefinition | undefined {\n return RESOURCES_CONVERTIBLE_TO_CLASSES.find((r) => r.className === className);\n}\n\nexport function getResourceByType(resourceType: string): ResourceDefinition | undefined {\n return RESOURCES_CONVERTIBLE_TO_CLASSES.find((r) => r.resourceType === resourceType);\n}\n\nexport function getResourcesWithAugmentedProps(): ResourceDefinition[] {\n return RESOURCES_CONVERTIBLE_TO_CLASSES.filter((r) => r.hasAugmentedProps);\n}\n\nexport function getResourcesWithOverrides(): ResourceDefinition[] {\n return RESOURCES_CONVERTIBLE_TO_CLASSES.filter((r) => r.supportsOverrides !== false);\n}\n\nexport function getTypePropertiesByClassName(className: string): TypePropertiesDefinition | undefined {\n return MISC_TYPES_CONVERTIBLE_TO_CLASSES.find((t) => t.className === className);\n}\n\nexport function getTypePropertiesByTypeValue(typeValue: string): TypePropertiesDefinition | undefined {\n return MISC_TYPES_CONVERTIBLE_TO_CLASSES.find((t) => t.typeValue === typeValue);\n}\n\n// ==================== DERIVED MAPPINGS ====================\n\n/** Resource type \u2192 class name mapping */\nexport const RESOURCE_TYPE_TO_CLASS: Record<string, ResourceClassName> = Object.fromEntries(\n RESOURCES_CONVERTIBLE_TO_CLASSES.map((r) => [r.resourceType, r.className])\n);\n\n/** Script type \u2192 class name mapping */\nexport const SCRIPT_TYPE_TO_CLASS: Record<string, string> = Object.fromEntries(\n MISC_TYPES_CONVERTIBLE_TO_CLASSES.filter(\n (t) => t.sourceFile === '__helpers.d.ts' && t.propsType.includes('Script')\n ).map((t) => [t.typeValue, t.className])\n);\n\n/** Packaging type \u2192 class name mapping */\nexport const PACKAGING_TYPE_TO_CLASS: Record<string, string> = Object.fromEntries(\n MISC_TYPES_CONVERTIBLE_TO_CLASSES.filter((t) => t.sourceFile === 'deployment-artifacts.d.ts').map((t) => [\n t.typeValue,\n t.className\n ])\n);\n\n/** Engine type \u2192 class name mapping */\nexport const ENGINE_TYPE_TO_CLASS: Record<string, string> = Object.fromEntries(\n MISC_TYPES_CONVERTIBLE_TO_CLASSES.filter((t) => t.propsType.includes('Engine')).map((t) => [t.typeValue, t.className])\n);\n", "// Re-export from class-config (single source of truth)\nexport {\n getResourceByClassName,\n getResourceByType,\n getResourcesWithAugmentedProps,\n getResourcesWithOverrides,\n getTypePropertiesByClassName,\n getTypePropertiesByTypeValue,\n MISC_TYPES_CONVERTIBLE_TO_CLASSES,\n type ResourceDefinition,\n RESOURCES_CONVERTIBLE_TO_CLASSES,\n type TypePropertiesDefinition\n} from './class-config';\n\n// These can be referenced using $ResourceParam directive\nexport const REFERENCEABLE_PARAMS: Record<string, Array<{ name: string; description: string }>> = {\n 'relational-database': [\n { name: 'connectionString', description: 'Connection string for the database' },\n { name: 'jdbcConnectionString', description: 'JDBC connection string' },\n { name: 'host', description: 'Database host' },\n { name: 'port', description: 'Database port' },\n { name: 'dbName', description: 'Database name' },\n { name: 'readerHost', description: 'Reader endpoint host' },\n { name: 'readerConnectionString', description: 'Reader connection string' },\n { name: 'readerJdbcConnectionString', description: 'Reader JDBC connection string' }\n ],\n 'web-service': [\n { name: 'domain', description: 'Web service domain' },\n { name: 'url', description: 'Web service URL' },\n { name: 'customDomains', description: 'Custom domains' },\n { name: 'customDomainUrls', description: 'Custom domain URLs' }\n ],\n 'private-service': [{ name: 'address', description: 'Private service address' }],\n bucket: [\n { name: 'name', description: 'Bucket name' },\n { name: 'arn', description: 'Bucket ARN' }\n ],\n 'dynamo-db-table': [\n { name: 'name', description: 'Table name' },\n { name: 'arn', description: 'Table ARN' },\n { name: 'streamArn', description: 'Stream ARN' }\n ],\n function: [\n { name: 'arn', description: 'Function ARN' },\n { name: 'logGroupArn', description: 'Log group ARN' }\n ],\n 'batch-job': [\n { name: 'jobDefinitionArn', description: 'Job definition ARN' },\n { name: 'stateMachineArn', description: 'State machine ARN' },\n { name: 'logGroupArn', description: 'Log group ARN' }\n ],\n 'event-bus': [\n { name: 'arn', description: 'Event bus ARN' },\n { name: 'archiveArn', description: 'Archive ARN' }\n ],\n 'http-api-gateway': [\n { name: 'domain', description: 'API Gateway domain' },\n { name: 'url', description: 'API Gateway URL' },\n { name: 'customDomains', description: 'Custom domains' },\n { name: 'customDomainUrls', description: 'Custom domain URLs' },\n { name: 'customDomainUrl', description: 'First custom domain URL' }\n ],\n 'mongo-db-atlas-cluster': [{ name: 'connectionString', description: 'MongoDB connection string' }],\n 'redis-cluster': [\n { name: 'host', description: 'Redis host' },\n { name: 'readerHost', description: 'Redis reader host' },\n { name: 'port', description: 'Redis port' },\n { name: 'sharding', description: 'Sharding status' }\n ],\n 'state-machine': [\n { name: 'arn', description: 'State machine ARN' },\n { name: 'name', description: 'State machine name' }\n ],\n 'user-auth-pool': [\n { name: 'id', description: 'User pool ID' },\n { name: 'clientId', description: 'Client ID' },\n { name: 'domain', description: 'User pool domain' }\n ],\n 'upstash-redis': [\n { name: 'host', description: 'Upstash Redis host' },\n { name: 'port', description: 'Upstash Redis port' },\n { name: 'password', description: 'Password' },\n { name: 'restToken', description: 'REST token' },\n { name: 'readOnlyRestToken', description: 'Read-only REST token' },\n { name: 'restUrl', description: 'REST URL' },\n { name: 'redisUrl', description: 'Redis URL' }\n ],\n 'application-load-balancer': [\n { name: 'domain', description: 'Load balancer domain' },\n { name: 'customDomains', description: 'Custom domains' }\n ],\n 'network-load-balancer': [\n { name: 'domain', description: 'Load balancer domain' },\n { name: 'customDomains', description: 'Custom domains' }\n ],\n 'hosting-bucket': [\n { name: 'name', description: 'Bucket name' },\n { name: 'arn', description: 'Bucket ARN' }\n ],\n 'web-app-firewall': [\n { name: 'arn', description: 'Firewall ARN' },\n { name: 'scope', description: 'Firewall scope' }\n ],\n 'open-search-domain': [\n { name: 'domainEndpoint', description: 'OpenSearch domain endpoint' },\n { name: 'arn', description: 'Domain ARN' }\n ],\n 'efs-filesystem': [\n { name: 'arn', description: 'EFS ARN' },\n { name: 'id', description: 'EFS ID' }\n ],\n 'nextjs-web': [{ name: 'url', description: 'Website URL' }],\n 'multi-container-workload': [{ name: 'logGroupArn', description: 'Log group ARN' }]\n};\n", "import type { ResourceClassName } from './class-config';\nimport { RESOURCES_CONVERTIBLE_TO_CLASSES } from './class-config';\nimport { BaseResource } from './config';\nimport { REFERENCEABLE_PARAMS } from './resource-metadata';\n\n// Private symbol for accessing the internal param reference method\nconst getParamReferenceSymbol = Symbol.for('stacktape:getParamReference');\n\n/**\n * Factory function to create a resource class with referenceable parameters.\n * Supports two calling conventions:\n * - new Resource(properties) - name derived from object key in resources\n * - new Resource(name, properties) - explicit name (backwards compatible)\n */\nfunction createResourceClass(className: ResourceClassName, resourceType: string): any {\n // Create the class dynamically\n const ResourceClass = class extends BaseResource {\n constructor(nameOrProperties: string | any, properties?: any) {\n if (typeof nameOrProperties === 'string') {\n // Old style: (name, properties) - explicit name\n super(nameOrProperties, resourceType, properties);\n } else {\n // New style: (properties) - name will be set from object key\n super(undefined, resourceType, nameOrProperties);\n }\n }\n };\n\n // Set the class name for better debugging\n Object.defineProperty(ResourceClass, 'name', { value: className });\n\n // Add referenceable parameter getters\n const referenceableParams = REFERENCEABLE_PARAMS[resourceType] || [];\n for (const param of referenceableParams) {\n Object.defineProperty(ResourceClass.prototype, param.name, {\n get(this: BaseResource) {\n return (this as any)[getParamReferenceSymbol](param.name);\n },\n enumerable: false,\n configurable: true\n });\n }\n\n return ResourceClass;\n}\n\n// Create all resource classes from config\nconst RESOURCE_CLASSES: Record<string, ReturnType<typeof createResourceClass>> = {};\nfor (const def of RESOURCES_CONVERTIBLE_TO_CLASSES) {\n // Use 'LambdaFunction' as the exported name for 'Function' to avoid JS reserved word issues\n RESOURCE_CLASSES[def.className as any] = createResourceClass(def.className, def.resourceType);\n}\n\n// Export all resource classes for named imports\nexport const {\n RelationalDatabase,\n WebService,\n PrivateService,\n WorkerService,\n MultiContainerWorkload,\n LambdaFunction,\n BatchJob,\n Bucket,\n HostingBucket,\n DynamoDbTable,\n EventBus,\n HttpApiGateway,\n ApplicationLoadBalancer,\n NetworkLoadBalancer,\n RedisCluster,\n MongoDbAtlasCluster,\n StateMachine,\n UserAuthPool,\n UpstashRedis,\n SqsQueue,\n SnsTopic,\n WebAppFirewall,\n OpenSearchDomain,\n EfsFilesystem,\n NextjsWeb,\n Bastion\n} = RESOURCE_CLASSES;\n", "import { MISC_TYPES_CONVERTIBLE_TO_CLASSES } from './class-config';\nimport { BaseTypeProperties } from './config';\n\nfunction createTypePropertiesClass(className: string, typeValue: string): any {\n const TypePropertiesClass = class extends BaseTypeProperties {\n constructor(properties: any) {\n super(typeValue, properties);\n }\n };\n\n Object.defineProperty(TypePropertiesClass, 'name', { value: className });\n return TypePropertiesClass;\n}\n\n// Create all type-properties classes from config\nconst TYPE_PROPERTIES_CLASSES: Record<string, ReturnType<typeof createTypePropertiesClass>> = {};\nfor (const def of MISC_TYPES_CONVERTIBLE_TO_CLASSES) {\n TYPE_PROPERTIES_CLASSES[def.className] = createTypePropertiesClass(def.className, def.typeValue);\n}\n\n// Export all classes for named imports (TypeScript needs these explicit exports)\nexport const {\n // Database Engines\n RdsEnginePostgres,\n RdsEngineMariadb,\n RdsEngineMysql,\n RdsEngineOracleEE,\n RdsEngineOracleSE2,\n RdsEngineSqlServerEE,\n RdsEngineSqlServerEX,\n RdsEngineSqlServerSE,\n RdsEngineSqlServerWeb,\n AuroraEnginePostgresql,\n AuroraEngineMysql,\n AuroraServerlessEnginePostgresql,\n AuroraServerlessEngineMysql,\n AuroraServerlessV2EnginePostgresql,\n AuroraServerlessV2EngineMysql,\n // Lambda Packaging\n StacktapeLambdaBuildpackPackaging,\n CustomArtifactLambdaPackaging,\n // Container Packaging\n PrebuiltImagePackaging,\n CustomDockerfilePackaging,\n ExternalBuildpackPackaging,\n NixpacksPackaging,\n StacktapeImageBuildpackPackaging,\n // Lambda Function Events/Integrations\n HttpApiIntegration,\n S3Integration,\n ScheduleIntegration,\n SnsIntegration,\n SqsIntegration,\n KinesisIntegration,\n DynamoDbIntegration,\n CloudwatchLogIntegration,\n ApplicationLoadBalancerIntegration,\n EventBusIntegration,\n KafkaTopicIntegration,\n AlarmIntegration,\n IotIntegration,\n // CDN Routes\n CdnLoadBalancerRoute,\n CdnHttpApiGatewayRoute,\n CdnLambdaFunctionRoute,\n CdnCustomDomainRoute,\n CdnBucketRoute,\n // Web App Firewall Rules\n ManagedRuleGroup,\n CustomRuleGroup,\n RateBasedRule,\n // SQS Queue Integrations\n SqsQueueEventBusIntegration,\n // Multi Container Workload Integrations\n MultiContainerWorkloadHttpApiIntegration,\n MultiContainerWorkloadLoadBalancerIntegration,\n MultiContainerWorkloadNetworkLoadBalancerIntegration,\n MultiContainerWorkloadInternalIntegration,\n MultiContainerWorkloadServiceConnectIntegration,\n // Scripts\n LocalScript,\n BastionScript,\n LocalScriptWithBastionTunneling,\n // Log Forwarding\n HttpEndpointLogForwarding,\n HighlightLogForwarding,\n DatadogLogForwarding,\n // Bucket Lifecycle Rules\n ExpirationLifecycleRule,\n NonCurrentVersionExpirationLifecycleRule,\n // EFS Mounts\n ContainerEfsMount,\n LambdaEfsMount,\n // Authorizers\n CognitoAuthorizer,\n LambdaAuthorizer,\n // Custom Resources\n CustomResourceDefinition,\n CustomResourceInstance,\n // Deployment Scripts\n DeploymentScript,\n // Edge Lambda Functions\n EdgeLambdaFunction\n} = TYPE_PROPERTIES_CLASSES;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["_a", "getParamReferenceSymbol"]
|
|
7
|
-
}
|