@incloodsolutions/devkit 0.0.2 → 0.0.3

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.
Files changed (153) hide show
  1. package/dist/aws/cdk/constructs/api-gateway-construct.cjs +95 -0
  2. package/dist/aws/cdk/constructs/api-gateway-construct.cjs.map +1 -0
  3. package/dist/aws/cdk/constructs/api-gateway-construct.d.cts +80 -0
  4. package/dist/aws/cdk/constructs/api-gateway-construct.d.ts +80 -0
  5. package/dist/aws/cdk/constructs/api-gateway-construct.js +93 -0
  6. package/dist/aws/cdk/constructs/api-gateway-construct.js.map +1 -0
  7. package/dist/aws/cdk/constructs/api-gateway-v2-construct.cjs +77 -0
  8. package/dist/aws/cdk/constructs/api-gateway-v2-construct.cjs.map +1 -0
  9. package/dist/aws/cdk/constructs/api-gateway-v2-construct.d.cts +55 -0
  10. package/dist/aws/cdk/constructs/api-gateway-v2-construct.d.ts +55 -0
  11. package/dist/aws/cdk/constructs/api-gateway-v2-construct.js +75 -0
  12. package/dist/aws/cdk/constructs/api-gateway-v2-construct.js.map +1 -0
  13. package/dist/aws/cdk/constructs/api-gateway-websocket-construct.cjs +65 -0
  14. package/dist/aws/cdk/constructs/api-gateway-websocket-construct.cjs.map +1 -0
  15. package/dist/aws/cdk/constructs/api-gateway-websocket-construct.d.cts +73 -0
  16. package/dist/aws/cdk/constructs/api-gateway-websocket-construct.d.ts +73 -0
  17. package/dist/aws/cdk/constructs/api-gateway-websocket-construct.js +63 -0
  18. package/dist/aws/cdk/constructs/api-gateway-websocket-construct.js.map +1 -0
  19. package/dist/aws/cdk/constructs/cloudfront-construct.cjs +68 -0
  20. package/dist/aws/cdk/constructs/cloudfront-construct.cjs.map +1 -0
  21. package/dist/aws/cdk/constructs/cloudfront-construct.d.cts +36 -0
  22. package/dist/aws/cdk/constructs/cloudfront-construct.d.ts +36 -0
  23. package/dist/aws/cdk/constructs/cloudfront-construct.js +66 -0
  24. package/dist/aws/cdk/constructs/cloudfront-construct.js.map +1 -0
  25. package/dist/aws/cdk/constructs/cloudwatch-construct.cjs +43 -0
  26. package/dist/aws/cdk/constructs/cloudwatch-construct.cjs.map +1 -0
  27. package/dist/aws/cdk/constructs/cloudwatch-construct.d.cts +36 -0
  28. package/dist/aws/cdk/constructs/cloudwatch-construct.d.ts +36 -0
  29. package/dist/aws/cdk/constructs/cloudwatch-construct.js +41 -0
  30. package/dist/aws/cdk/constructs/cloudwatch-construct.js.map +1 -0
  31. package/dist/aws/cdk/constructs/dynamo-db-construct.cjs +113 -0
  32. package/dist/aws/cdk/constructs/dynamo-db-construct.cjs.map +1 -0
  33. package/dist/aws/cdk/constructs/dynamo-db-construct.d.cts +53 -0
  34. package/dist/aws/cdk/constructs/dynamo-db-construct.d.ts +53 -0
  35. package/dist/aws/cdk/constructs/dynamo-db-construct.js +111 -0
  36. package/dist/aws/cdk/constructs/dynamo-db-construct.js.map +1 -0
  37. package/dist/aws/cdk/constructs/event-bridge-construct.cjs +47 -0
  38. package/dist/aws/cdk/constructs/event-bridge-construct.cjs.map +1 -0
  39. package/dist/aws/cdk/constructs/event-bridge-construct.d.cts +41 -0
  40. package/dist/aws/cdk/constructs/event-bridge-construct.d.ts +41 -0
  41. package/dist/aws/cdk/constructs/event-bridge-construct.js +45 -0
  42. package/dist/aws/cdk/constructs/event-bridge-construct.js.map +1 -0
  43. package/dist/aws/cdk/constructs/index.cjs +881 -0
  44. package/dist/aws/cdk/constructs/index.cjs.map +1 -0
  45. package/dist/aws/cdk/constructs/index.d.cts +34 -0
  46. package/dist/aws/cdk/constructs/index.d.ts +34 -0
  47. package/dist/aws/cdk/constructs/index.js +863 -0
  48. package/dist/aws/cdk/constructs/index.js.map +1 -0
  49. package/dist/aws/cdk/constructs/lambda-authorizer-construct.cjs +37 -0
  50. package/dist/aws/cdk/constructs/lambda-authorizer-construct.cjs.map +1 -0
  51. package/dist/aws/cdk/constructs/lambda-authorizer-construct.d.cts +44 -0
  52. package/dist/aws/cdk/constructs/lambda-authorizer-construct.d.ts +44 -0
  53. package/dist/aws/cdk/constructs/lambda-authorizer-construct.js +35 -0
  54. package/dist/aws/cdk/constructs/lambda-authorizer-construct.js.map +1 -0
  55. package/dist/aws/cdk/constructs/lambda-authorizer-v2-construct.cjs +47 -0
  56. package/dist/aws/cdk/constructs/lambda-authorizer-v2-construct.cjs.map +1 -0
  57. package/dist/aws/cdk/constructs/lambda-authorizer-v2-construct.d.cts +45 -0
  58. package/dist/aws/cdk/constructs/lambda-authorizer-v2-construct.d.ts +45 -0
  59. package/dist/aws/cdk/constructs/lambda-authorizer-v2-construct.js +45 -0
  60. package/dist/aws/cdk/constructs/lambda-authorizer-v2-construct.js.map +1 -0
  61. package/dist/aws/cdk/constructs/lambda-construct.cjs +82 -0
  62. package/dist/aws/cdk/constructs/lambda-construct.cjs.map +1 -0
  63. package/dist/aws/cdk/constructs/lambda-construct.d.cts +37 -0
  64. package/dist/aws/cdk/constructs/lambda-construct.d.ts +37 -0
  65. package/dist/aws/cdk/constructs/lambda-construct.js +80 -0
  66. package/dist/aws/cdk/constructs/lambda-construct.js.map +1 -0
  67. package/dist/aws/cdk/constructs/lambda-layer-construct.cjs +72 -0
  68. package/dist/aws/cdk/constructs/lambda-layer-construct.cjs.map +1 -0
  69. package/dist/aws/cdk/constructs/lambda-layer-construct.d.cts +52 -0
  70. package/dist/aws/cdk/constructs/lambda-layer-construct.d.ts +52 -0
  71. package/dist/aws/cdk/constructs/lambda-layer-construct.js +70 -0
  72. package/dist/aws/cdk/constructs/lambda-layer-construct.js.map +1 -0
  73. package/dist/aws/cdk/constructs/role-policy-construct.cjs +53 -0
  74. package/dist/aws/cdk/constructs/role-policy-construct.cjs.map +1 -0
  75. package/dist/aws/cdk/constructs/role-policy-construct.d.cts +44 -0
  76. package/dist/aws/cdk/constructs/role-policy-construct.d.ts +44 -0
  77. package/dist/aws/cdk/constructs/role-policy-construct.js +51 -0
  78. package/dist/aws/cdk/constructs/role-policy-construct.js.map +1 -0
  79. package/dist/aws/cdk/constructs/s3-construct.cjs +38 -0
  80. package/dist/aws/cdk/constructs/s3-construct.cjs.map +1 -0
  81. package/dist/aws/cdk/constructs/s3-construct.d.cts +36 -0
  82. package/dist/aws/cdk/constructs/s3-construct.d.ts +36 -0
  83. package/dist/aws/cdk/constructs/s3-construct.js +36 -0
  84. package/dist/aws/cdk/constructs/s3-construct.js.map +1 -0
  85. package/dist/aws/cdk/constructs/s3-deployment-construct.cjs +168 -0
  86. package/dist/aws/cdk/constructs/s3-deployment-construct.cjs.map +1 -0
  87. package/dist/aws/cdk/constructs/s3-deployment-construct.d.cts +72 -0
  88. package/dist/aws/cdk/constructs/s3-deployment-construct.d.ts +72 -0
  89. package/dist/aws/cdk/constructs/s3-deployment-construct.js +166 -0
  90. package/dist/aws/cdk/constructs/s3-deployment-construct.js.map +1 -0
  91. package/dist/aws/cdk/constructs/sns-construct.cjs +43 -0
  92. package/dist/aws/cdk/constructs/sns-construct.cjs.map +1 -0
  93. package/dist/aws/cdk/constructs/sns-construct.d.cts +45 -0
  94. package/dist/aws/cdk/constructs/sns-construct.d.ts +45 -0
  95. package/dist/aws/cdk/constructs/sns-construct.js +41 -0
  96. package/dist/aws/cdk/constructs/sns-construct.js.map +1 -0
  97. package/dist/aws/cdk/constructs/sqs-construct.cjs +55 -0
  98. package/dist/aws/cdk/constructs/sqs-construct.cjs.map +1 -0
  99. package/dist/aws/cdk/constructs/sqs-construct.d.cts +52 -0
  100. package/dist/aws/cdk/constructs/sqs-construct.d.ts +52 -0
  101. package/dist/aws/cdk/constructs/sqs-construct.js +53 -0
  102. package/dist/aws/cdk/constructs/sqs-construct.js.map +1 -0
  103. package/dist/aws/cdk/constructs/vpc-construct.cjs +33 -0
  104. package/dist/aws/cdk/constructs/vpc-construct.cjs.map +1 -0
  105. package/dist/aws/cdk/constructs/vpc-construct.d.cts +34 -0
  106. package/dist/aws/cdk/constructs/vpc-construct.d.ts +34 -0
  107. package/dist/aws/cdk/constructs/vpc-construct.js +31 -0
  108. package/dist/aws/cdk/constructs/vpc-construct.js.map +1 -0
  109. package/dist/aws/cdk/index.cjs +881 -0
  110. package/dist/aws/cdk/index.cjs.map +1 -0
  111. package/dist/aws/cdk/index.d.cts +34 -0
  112. package/dist/aws/cdk/index.d.ts +34 -0
  113. package/dist/aws/cdk/index.js +863 -0
  114. package/dist/aws/cdk/index.js.map +1 -0
  115. package/dist/aws/cli/index.cjs +4 -0
  116. package/dist/aws/cli/index.cjs.map +1 -0
  117. package/dist/aws/cli/index.d.cts +2 -0
  118. package/dist/aws/cli/index.d.ts +2 -0
  119. package/dist/aws/cli/index.js +3 -0
  120. package/dist/aws/cli/index.js.map +1 -0
  121. package/dist/aws/index.cjs +881 -0
  122. package/dist/aws/index.cjs.map +1 -0
  123. package/dist/aws/index.d.cts +34 -0
  124. package/dist/aws/index.d.ts +34 -0
  125. package/dist/aws/index.js +863 -0
  126. package/dist/aws/index.js.map +1 -0
  127. package/dist/aws/types/index.cjs +4 -0
  128. package/dist/aws/types/index.cjs.map +1 -0
  129. package/dist/aws/types/index.d.cts +18 -0
  130. package/dist/aws/types/index.d.ts +18 -0
  131. package/dist/aws/types/index.js +3 -0
  132. package/dist/aws/types/index.js.map +1 -0
  133. package/dist/index.d.cts +34 -755
  134. package/dist/index.d.ts +34 -755
  135. package/dist/lint/index.cjs +4 -0
  136. package/dist/lint/index.cjs.map +1 -0
  137. package/dist/lint/index.d.cts +2 -0
  138. package/dist/lint/index.d.ts +2 -0
  139. package/dist/lint/index.js +3 -0
  140. package/dist/lint/index.js.map +1 -0
  141. package/dist/prettier/index.cjs +4 -0
  142. package/dist/prettier/index.cjs.map +1 -0
  143. package/dist/prettier/index.d.cts +2 -0
  144. package/dist/prettier/index.d.ts +2 -0
  145. package/dist/prettier/index.js +3 -0
  146. package/dist/prettier/index.js.map +1 -0
  147. package/dist/utility/index.cjs +4 -0
  148. package/dist/utility/index.cjs.map +1 -0
  149. package/dist/utility/index.d.cts +2 -0
  150. package/dist/utility/index.d.ts +2 -0
  151. package/dist/utility/index.js +3 -0
  152. package/dist/utility/index.js.map +1 -0
  153. package/package.json +7 -2
@@ -0,0 +1,82 @@
1
+ 'use strict';
2
+
3
+ var constructs = require('constructs');
4
+ var awsCdkLib = require('aws-cdk-lib');
5
+ var awsLambda = require('aws-cdk-lib/aws-lambda');
6
+ var toolkit = require('@incloodsolutions/toolkit');
7
+
8
+ var __defProp = Object.defineProperty;
9
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
+ var BaseLambdaConstruct = class extends constructs.Construct {
11
+ static {
12
+ __name(this, "BaseLambdaConstruct");
13
+ }
14
+ /** The created Lambda function instance */
15
+ function;
16
+ /**
17
+ * @param scope Parent construct
18
+ * @param id Unique construct identifier
19
+ * @param props Configuration for Lambda function
20
+ */
21
+ constructor(scope, id, props) {
22
+ super(scope, id);
23
+ const environment = {
24
+ ...props.options?.lambdaOptions?.environment,
25
+ NODE_ENV: props.stage,
26
+ NODE_OPTIONS: "--enable-source-maps",
27
+ AWS_NODEJS_CONNECTION_REUSE_ENABLED: "1"
28
+ };
29
+ toolkit.detectDuplicateProperties({ data: environment });
30
+ this.function = new awsLambda.Function(this, id, {
31
+ ...props?.options?.lambdaOptions,
32
+ /**
33
+ * Lambda function name
34
+ * Defaults to "<stackName>-handler" if not provided
35
+ */
36
+ functionName: `${props?.options?.lambdaOptions?.functionName || props?.stackName}-handler`,
37
+ /**
38
+ * Function description
39
+ */
40
+ description: props?.options?.lambdaOptions?.description || "A lambda function",
41
+ /**
42
+ * Entry handler for the Lambda function
43
+ */
44
+ handler: props?.options?.lambdaOptions?.handler || "lambda.handler",
45
+ /**
46
+ * Runtime environment
47
+ */
48
+ runtime: props?.options?.lambdaOptions?.runtime || awsLambda.Runtime.NODEJS_24_X,
49
+ /**
50
+ * Execution timeout
51
+ * - 30 seconds in production
52
+ * - 15 seconds otherwise
53
+ */
54
+ timeout: props?.options?.lambdaOptions?.timeout || awsCdkLib.Duration.seconds(
55
+ props.stage === toolkit.AppEnvironmentEnum.PRODUCTION ? 30 : 15
56
+ ),
57
+ /**
58
+ * Memory allocation (in MB)
59
+ */
60
+ memorySize: props?.options?.lambdaOptions?.memorySize || 1024,
61
+ /**
62
+ * CPU architecture
63
+ */
64
+ architecture: props?.options?.lambdaOptions?.architecture || awsLambda.Architecture.ARM_64,
65
+ /**
66
+ * Lambda deployment package source
67
+ */
68
+ code: props?.options?.lambdaOptions?.code || awsLambda.Code.fromAsset("dist"),
69
+ /**
70
+ * Final merged environment variables
71
+ */
72
+ environment
73
+ });
74
+ new awsCdkLib.CfnOutput(this, "LambdaFunctionArn", {
75
+ value: this.function.functionArn
76
+ });
77
+ }
78
+ };
79
+
80
+ exports.BaseLambdaConstruct = BaseLambdaConstruct;
81
+ //# sourceMappingURL=lambda-construct.cjs.map
82
+ //# sourceMappingURL=lambda-construct.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/aws/cdk/constructs/lambda-construct.ts"],"names":["Construct","detectDuplicateProperties","Function","Runtime","Duration","AppEnvironmentEnum","Architecture","Code","CfnOutput"],"mappings":";;;;;;;;;AA4BO,IAAM,mBAAA,GAAN,cAAkCA,oBAAA,CAAU;AAAA,EA5BnD;AA4BmD,IAAA,MAAA,CAAA,IAAA,EAAA,qBAAA,CAAA;AAAA;AAAA;AAAA,EAEzC,QAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,WAAA,CAAY,KAAA,EAAkB,EAAA,EAAY,KAAA,EAA8B;AACvE,IAAA,KAAA,CAAM,OAAO,EAAE,CAAA;AAUf,IAAA,MAAM,WAAA,GAAc;AAAA,MACnB,GAAG,KAAA,CAAM,OAAA,EAAS,aAAA,EAAe,WAAA;AAAA,MACjC,UAAU,KAAA,CAAM,KAAA;AAAA,MAChB,YAAA,EAAc,sBAAA;AAAA,MACd,mCAAA,EAAqC;AAAA,KACtC;AAKA,IAAAC,iCAAA,CAA0B,EAAE,IAAA,EAAM,WAAA,EAAa,CAAA;AAE/C,IAAA,IAAA,CAAK,QAAA,GAAW,IAAIC,kBAAA,CAAS,IAAA,EAAM,EAAA,EAAI;AAAA,MACtC,GAAG,OAAO,OAAA,EAAS,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMnB,cACC,CAAA,EAAG,KAAA,EAAO,SAAS,aAAA,EAAe,YAAA,IAAgB,OAAO,SAAS,CAAA,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA,MAKnE,WAAA,EACC,KAAA,EAAO,OAAA,EAAS,aAAA,EAAe,WAAA,IAC5B,mBAAA;AAAA;AAAA;AAAA;AAAA,MAKJ,OAAA,EACC,KAAA,EAAO,OAAA,EAAS,aAAA,EAAe,OAAA,IAC5B,gBAAA;AAAA;AAAA;AAAA;AAAA,MAKJ,OAAA,EACC,KAAA,EAAO,OAAA,EAAS,aAAA,EAAe,WAC5BC,iBAAA,CAAQ,WAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOZ,OAAA,EACC,KAAA,EAAO,OAAA,EAAS,aAAA,EAAe,WAC5BC,kBAAA,CAAS,OAAA;AAAA,QACX,KAAA,CAAM,KAAA,KAAUC,0BAAA,CAAmB,UAAA,GAAa,EAAA,GAAK;AAAA,OACtD;AAAA;AAAA;AAAA;AAAA,MAKD,UAAA,EACC,KAAA,EAAO,OAAA,EAAS,aAAA,EAAe,UAAA,IAC5B,IAAA;AAAA;AAAA;AAAA;AAAA,MAKJ,YAAA,EACC,KAAA,EAAO,OAAA,EAAS,aAAA,EAAe,gBAC5BC,sBAAA,CAAa,MAAA;AAAA;AAAA;AAAA;AAAA,MAKjB,MACC,KAAA,EAAO,OAAA,EAAS,eAAe,IAAA,IAC5BC,cAAA,CAAK,UAAU,MAAM,CAAA;AAAA;AAAA;AAAA;AAAA,MAKzB;AAAA,KACA,CAAA;AAKD,IAAA,IAAIC,mBAAA,CAAU,MAAM,mBAAA,EAAqB;AAAA,MACxC,KAAA,EAAO,KAAK,QAAA,CAAS;AAAA,KACrB,CAAA;AAAA,EACF;AACD","file":"lambda-construct.cjs","sourcesContent":["import { Construct } from 'constructs';\nimport { CfnOutput, Duration } from 'aws-cdk-lib';\nimport { Architecture, Code, Function, FunctionProps, Runtime } from 'aws-cdk-lib/aws-lambda';\n\nimport { detectDuplicateProperties, AppEnvironmentEnum } from '@incloodsolutions/toolkit';\n\nimport { IBaseCdkConstructProps } from '../../types';\n\n/**\n * Props for BaseLambdaConstruct\n *\n * Provides configuration for creating a Lambda function\n * with optional overrides for runtime, memory, timeout, and environment.\n */\ninterface ILambdaConstructProps extends Omit<IBaseCdkConstructProps<{\n\t/** Partial Lambda configuration options */\n\treadonly lambdaOptions: Partial<FunctionProps>;\n}>, 'appName'> { }\n\n/**\n * CDK construct for AWS Lambda function\n *\n * Responsibilities:\n * - Creates a Lambda function with sensible defaults\n * - Merges and validates environment variables\n * - Applies stage-based configuration (e.g. timeout)\n * - Exposes the function ARN as a CloudFormation output\n */\nexport class BaseLambdaConstruct extends Construct {\n\t/** The created Lambda function instance */\n\treadonly function: Function;\n\n\t/**\n\t * @param scope Parent construct\n\t * @param id Unique construct identifier\n\t * @param props Configuration for Lambda function\n\t */\n\tconstructor(scope: Construct, id: string, props: ILambdaConstructProps) {\n\t\tsuper(scope, id);\n\n\t\t/**\n\t\t * Environment variables for the Lambda function\n\t\t *\n\t\t * Includes:\n\t\t * - User-defined variables\n\t\t * - NODE_ENV derived from stage\n\t\t * - Node.js runtime optimisations\n\t\t */\n\t\tconst environment = {\n\t\t\t...props.options?.lambdaOptions?.environment,\n\t\t\tNODE_ENV: props.stage,\n\t\t\tNODE_OPTIONS: '--enable-source-maps',\n\t\t\tAWS_NODEJS_CONNECTION_REUSE_ENABLED: '1'\n\t\t};\n\n\t\t/**\n\t\t * Validate environment variables for duplicate keys\n\t\t */\n\t\tdetectDuplicateProperties({ data: environment });\n\n\t\tthis.function = new Function(this, id, {\n\t\t\t...props?.options?.lambdaOptions,\n\n\t\t\t/**\n\t\t\t * Lambda function name\n\t\t\t * Defaults to \"<stackName>-handler\" if not provided\n\t\t\t */\n\t\t\tfunctionName:\n\t\t\t\t`${props?.options?.lambdaOptions?.functionName || props?.stackName}-handler`,\n\n\t\t\t/**\n\t\t\t * Function description\n\t\t\t */\n\t\t\tdescription:\n\t\t\t\tprops?.options?.lambdaOptions?.description\n\t\t\t\t|| 'A lambda function',\n\n\t\t\t/**\n\t\t\t * Entry handler for the Lambda function\n\t\t\t */\n\t\t\thandler:\n\t\t\t\tprops?.options?.lambdaOptions?.handler\n\t\t\t\t|| 'lambda.handler',\n\n\t\t\t/**\n\t\t\t * Runtime environment\n\t\t\t */\n\t\t\truntime:\n\t\t\t\tprops?.options?.lambdaOptions?.runtime\n\t\t\t\t|| Runtime.NODEJS_24_X,\n\n\t\t\t/**\n\t\t\t * Execution timeout\n\t\t\t * - 30 seconds in production\n\t\t\t * - 15 seconds otherwise\n\t\t\t */\n\t\t\ttimeout:\n\t\t\t\tprops?.options?.lambdaOptions?.timeout\n\t\t\t\t|| Duration.seconds(\n\t\t\t\t\tprops.stage === AppEnvironmentEnum.PRODUCTION ? 30 : 15\n\t\t\t\t),\n\n\t\t\t/**\n\t\t\t * Memory allocation (in MB)\n\t\t\t */\n\t\t\tmemorySize:\n\t\t\t\tprops?.options?.lambdaOptions?.memorySize\n\t\t\t\t|| 1024,\n\n\t\t\t/**\n\t\t\t * CPU architecture\n\t\t\t */\n\t\t\tarchitecture:\n\t\t\t\tprops?.options?.lambdaOptions?.architecture\n\t\t\t\t|| Architecture.ARM_64,\n\n\t\t\t/**\n\t\t\t * Lambda deployment package source\n\t\t\t */\n\t\t\tcode:\n\t\t\t\tprops?.options?.lambdaOptions?.code\n\t\t\t\t|| Code.fromAsset('dist'),\n\n\t\t\t/**\n\t\t\t * Final merged environment variables\n\t\t\t */\n\t\t\tenvironment\n\t\t});\n\n\t\t/**\n\t\t * CloudFormation output exposing the Lambda function ARN\n\t\t */\n\t\tnew CfnOutput(this, 'LambdaFunctionArn', {\n\t\t\tvalue: this.function.functionArn\n\t\t});\n\t}\n}"]}
@@ -0,0 +1,37 @@
1
+ import { Construct } from 'constructs';
2
+ import { Function, FunctionProps } from 'aws-cdk-lib/aws-lambda';
3
+ import { IBaseCdkConstructProps } from '../../types/index.cjs';
4
+ import '@incloodsolutions/toolkit';
5
+
6
+ /**
7
+ * Props for BaseLambdaConstruct
8
+ *
9
+ * Provides configuration for creating a Lambda function
10
+ * with optional overrides for runtime, memory, timeout, and environment.
11
+ */
12
+ interface ILambdaConstructProps extends Omit<IBaseCdkConstructProps<{
13
+ /** Partial Lambda configuration options */
14
+ readonly lambdaOptions: Partial<FunctionProps>;
15
+ }>, 'appName'> {
16
+ }
17
+ /**
18
+ * CDK construct for AWS Lambda function
19
+ *
20
+ * Responsibilities:
21
+ * - Creates a Lambda function with sensible defaults
22
+ * - Merges and validates environment variables
23
+ * - Applies stage-based configuration (e.g. timeout)
24
+ * - Exposes the function ARN as a CloudFormation output
25
+ */
26
+ declare class BaseLambdaConstruct extends Construct {
27
+ /** The created Lambda function instance */
28
+ readonly function: Function;
29
+ /**
30
+ * @param scope Parent construct
31
+ * @param id Unique construct identifier
32
+ * @param props Configuration for Lambda function
33
+ */
34
+ constructor(scope: Construct, id: string, props: ILambdaConstructProps);
35
+ }
36
+
37
+ export { BaseLambdaConstruct };
@@ -0,0 +1,37 @@
1
+ import { Construct } from 'constructs';
2
+ import { Function, FunctionProps } from 'aws-cdk-lib/aws-lambda';
3
+ import { IBaseCdkConstructProps } from '../../types/index.js';
4
+ import '@incloodsolutions/toolkit';
5
+
6
+ /**
7
+ * Props for BaseLambdaConstruct
8
+ *
9
+ * Provides configuration for creating a Lambda function
10
+ * with optional overrides for runtime, memory, timeout, and environment.
11
+ */
12
+ interface ILambdaConstructProps extends Omit<IBaseCdkConstructProps<{
13
+ /** Partial Lambda configuration options */
14
+ readonly lambdaOptions: Partial<FunctionProps>;
15
+ }>, 'appName'> {
16
+ }
17
+ /**
18
+ * CDK construct for AWS Lambda function
19
+ *
20
+ * Responsibilities:
21
+ * - Creates a Lambda function with sensible defaults
22
+ * - Merges and validates environment variables
23
+ * - Applies stage-based configuration (e.g. timeout)
24
+ * - Exposes the function ARN as a CloudFormation output
25
+ */
26
+ declare class BaseLambdaConstruct extends Construct {
27
+ /** The created Lambda function instance */
28
+ readonly function: Function;
29
+ /**
30
+ * @param scope Parent construct
31
+ * @param id Unique construct identifier
32
+ * @param props Configuration for Lambda function
33
+ */
34
+ constructor(scope: Construct, id: string, props: ILambdaConstructProps);
35
+ }
36
+
37
+ export { BaseLambdaConstruct };
@@ -0,0 +1,80 @@
1
+ import { Construct } from 'constructs';
2
+ import { Duration, CfnOutput } from 'aws-cdk-lib';
3
+ import { Function, Architecture, Runtime, Code } from 'aws-cdk-lib/aws-lambda';
4
+ import { detectDuplicateProperties, AppEnvironmentEnum } from '@incloodsolutions/toolkit';
5
+
6
+ var __defProp = Object.defineProperty;
7
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
+ var BaseLambdaConstruct = class extends Construct {
9
+ static {
10
+ __name(this, "BaseLambdaConstruct");
11
+ }
12
+ /** The created Lambda function instance */
13
+ function;
14
+ /**
15
+ * @param scope Parent construct
16
+ * @param id Unique construct identifier
17
+ * @param props Configuration for Lambda function
18
+ */
19
+ constructor(scope, id, props) {
20
+ super(scope, id);
21
+ const environment = {
22
+ ...props.options?.lambdaOptions?.environment,
23
+ NODE_ENV: props.stage,
24
+ NODE_OPTIONS: "--enable-source-maps",
25
+ AWS_NODEJS_CONNECTION_REUSE_ENABLED: "1"
26
+ };
27
+ detectDuplicateProperties({ data: environment });
28
+ this.function = new Function(this, id, {
29
+ ...props?.options?.lambdaOptions,
30
+ /**
31
+ * Lambda function name
32
+ * Defaults to "<stackName>-handler" if not provided
33
+ */
34
+ functionName: `${props?.options?.lambdaOptions?.functionName || props?.stackName}-handler`,
35
+ /**
36
+ * Function description
37
+ */
38
+ description: props?.options?.lambdaOptions?.description || "A lambda function",
39
+ /**
40
+ * Entry handler for the Lambda function
41
+ */
42
+ handler: props?.options?.lambdaOptions?.handler || "lambda.handler",
43
+ /**
44
+ * Runtime environment
45
+ */
46
+ runtime: props?.options?.lambdaOptions?.runtime || Runtime.NODEJS_24_X,
47
+ /**
48
+ * Execution timeout
49
+ * - 30 seconds in production
50
+ * - 15 seconds otherwise
51
+ */
52
+ timeout: props?.options?.lambdaOptions?.timeout || Duration.seconds(
53
+ props.stage === AppEnvironmentEnum.PRODUCTION ? 30 : 15
54
+ ),
55
+ /**
56
+ * Memory allocation (in MB)
57
+ */
58
+ memorySize: props?.options?.lambdaOptions?.memorySize || 1024,
59
+ /**
60
+ * CPU architecture
61
+ */
62
+ architecture: props?.options?.lambdaOptions?.architecture || Architecture.ARM_64,
63
+ /**
64
+ * Lambda deployment package source
65
+ */
66
+ code: props?.options?.lambdaOptions?.code || Code.fromAsset("dist"),
67
+ /**
68
+ * Final merged environment variables
69
+ */
70
+ environment
71
+ });
72
+ new CfnOutput(this, "LambdaFunctionArn", {
73
+ value: this.function.functionArn
74
+ });
75
+ }
76
+ };
77
+
78
+ export { BaseLambdaConstruct };
79
+ //# sourceMappingURL=lambda-construct.js.map
80
+ //# sourceMappingURL=lambda-construct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/aws/cdk/constructs/lambda-construct.ts"],"names":[],"mappings":";;;;;;;AA4BO,IAAM,mBAAA,GAAN,cAAkC,SAAA,CAAU;AAAA,EA5BnD;AA4BmD,IAAA,MAAA,CAAA,IAAA,EAAA,qBAAA,CAAA;AAAA;AAAA;AAAA,EAEzC,QAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,WAAA,CAAY,KAAA,EAAkB,EAAA,EAAY,KAAA,EAA8B;AACvE,IAAA,KAAA,CAAM,OAAO,EAAE,CAAA;AAUf,IAAA,MAAM,WAAA,GAAc;AAAA,MACnB,GAAG,KAAA,CAAM,OAAA,EAAS,aAAA,EAAe,WAAA;AAAA,MACjC,UAAU,KAAA,CAAM,KAAA;AAAA,MAChB,YAAA,EAAc,sBAAA;AAAA,MACd,mCAAA,EAAqC;AAAA,KACtC;AAKA,IAAA,yBAAA,CAA0B,EAAE,IAAA,EAAM,WAAA,EAAa,CAAA;AAE/C,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,QAAA,CAAS,IAAA,EAAM,EAAA,EAAI;AAAA,MACtC,GAAG,OAAO,OAAA,EAAS,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMnB,cACC,CAAA,EAAG,KAAA,EAAO,SAAS,aAAA,EAAe,YAAA,IAAgB,OAAO,SAAS,CAAA,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA,MAKnE,WAAA,EACC,KAAA,EAAO,OAAA,EAAS,aAAA,EAAe,WAAA,IAC5B,mBAAA;AAAA;AAAA;AAAA;AAAA,MAKJ,OAAA,EACC,KAAA,EAAO,OAAA,EAAS,aAAA,EAAe,OAAA,IAC5B,gBAAA;AAAA;AAAA;AAAA;AAAA,MAKJ,OAAA,EACC,KAAA,EAAO,OAAA,EAAS,aAAA,EAAe,WAC5B,OAAA,CAAQ,WAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOZ,OAAA,EACC,KAAA,EAAO,OAAA,EAAS,aAAA,EAAe,WAC5B,QAAA,CAAS,OAAA;AAAA,QACX,KAAA,CAAM,KAAA,KAAU,kBAAA,CAAmB,UAAA,GAAa,EAAA,GAAK;AAAA,OACtD;AAAA;AAAA;AAAA;AAAA,MAKD,UAAA,EACC,KAAA,EAAO,OAAA,EAAS,aAAA,EAAe,UAAA,IAC5B,IAAA;AAAA;AAAA;AAAA;AAAA,MAKJ,YAAA,EACC,KAAA,EAAO,OAAA,EAAS,aAAA,EAAe,gBAC5B,YAAA,CAAa,MAAA;AAAA;AAAA;AAAA;AAAA,MAKjB,MACC,KAAA,EAAO,OAAA,EAAS,eAAe,IAAA,IAC5B,IAAA,CAAK,UAAU,MAAM,CAAA;AAAA;AAAA;AAAA;AAAA,MAKzB;AAAA,KACA,CAAA;AAKD,IAAA,IAAI,SAAA,CAAU,MAAM,mBAAA,EAAqB;AAAA,MACxC,KAAA,EAAO,KAAK,QAAA,CAAS;AAAA,KACrB,CAAA;AAAA,EACF;AACD","file":"lambda-construct.js","sourcesContent":["import { Construct } from 'constructs';\nimport { CfnOutput, Duration } from 'aws-cdk-lib';\nimport { Architecture, Code, Function, FunctionProps, Runtime } from 'aws-cdk-lib/aws-lambda';\n\nimport { detectDuplicateProperties, AppEnvironmentEnum } from '@incloodsolutions/toolkit';\n\nimport { IBaseCdkConstructProps } from '../../types';\n\n/**\n * Props for BaseLambdaConstruct\n *\n * Provides configuration for creating a Lambda function\n * with optional overrides for runtime, memory, timeout, and environment.\n */\ninterface ILambdaConstructProps extends Omit<IBaseCdkConstructProps<{\n\t/** Partial Lambda configuration options */\n\treadonly lambdaOptions: Partial<FunctionProps>;\n}>, 'appName'> { }\n\n/**\n * CDK construct for AWS Lambda function\n *\n * Responsibilities:\n * - Creates a Lambda function with sensible defaults\n * - Merges and validates environment variables\n * - Applies stage-based configuration (e.g. timeout)\n * - Exposes the function ARN as a CloudFormation output\n */\nexport class BaseLambdaConstruct extends Construct {\n\t/** The created Lambda function instance */\n\treadonly function: Function;\n\n\t/**\n\t * @param scope Parent construct\n\t * @param id Unique construct identifier\n\t * @param props Configuration for Lambda function\n\t */\n\tconstructor(scope: Construct, id: string, props: ILambdaConstructProps) {\n\t\tsuper(scope, id);\n\n\t\t/**\n\t\t * Environment variables for the Lambda function\n\t\t *\n\t\t * Includes:\n\t\t * - User-defined variables\n\t\t * - NODE_ENV derived from stage\n\t\t * - Node.js runtime optimisations\n\t\t */\n\t\tconst environment = {\n\t\t\t...props.options?.lambdaOptions?.environment,\n\t\t\tNODE_ENV: props.stage,\n\t\t\tNODE_OPTIONS: '--enable-source-maps',\n\t\t\tAWS_NODEJS_CONNECTION_REUSE_ENABLED: '1'\n\t\t};\n\n\t\t/**\n\t\t * Validate environment variables for duplicate keys\n\t\t */\n\t\tdetectDuplicateProperties({ data: environment });\n\n\t\tthis.function = new Function(this, id, {\n\t\t\t...props?.options?.lambdaOptions,\n\n\t\t\t/**\n\t\t\t * Lambda function name\n\t\t\t * Defaults to \"<stackName>-handler\" if not provided\n\t\t\t */\n\t\t\tfunctionName:\n\t\t\t\t`${props?.options?.lambdaOptions?.functionName || props?.stackName}-handler`,\n\n\t\t\t/**\n\t\t\t * Function description\n\t\t\t */\n\t\t\tdescription:\n\t\t\t\tprops?.options?.lambdaOptions?.description\n\t\t\t\t|| 'A lambda function',\n\n\t\t\t/**\n\t\t\t * Entry handler for the Lambda function\n\t\t\t */\n\t\t\thandler:\n\t\t\t\tprops?.options?.lambdaOptions?.handler\n\t\t\t\t|| 'lambda.handler',\n\n\t\t\t/**\n\t\t\t * Runtime environment\n\t\t\t */\n\t\t\truntime:\n\t\t\t\tprops?.options?.lambdaOptions?.runtime\n\t\t\t\t|| Runtime.NODEJS_24_X,\n\n\t\t\t/**\n\t\t\t * Execution timeout\n\t\t\t * - 30 seconds in production\n\t\t\t * - 15 seconds otherwise\n\t\t\t */\n\t\t\ttimeout:\n\t\t\t\tprops?.options?.lambdaOptions?.timeout\n\t\t\t\t|| Duration.seconds(\n\t\t\t\t\tprops.stage === AppEnvironmentEnum.PRODUCTION ? 30 : 15\n\t\t\t\t),\n\n\t\t\t/**\n\t\t\t * Memory allocation (in MB)\n\t\t\t */\n\t\t\tmemorySize:\n\t\t\t\tprops?.options?.lambdaOptions?.memorySize\n\t\t\t\t|| 1024,\n\n\t\t\t/**\n\t\t\t * CPU architecture\n\t\t\t */\n\t\t\tarchitecture:\n\t\t\t\tprops?.options?.lambdaOptions?.architecture\n\t\t\t\t|| Architecture.ARM_64,\n\n\t\t\t/**\n\t\t\t * Lambda deployment package source\n\t\t\t */\n\t\t\tcode:\n\t\t\t\tprops?.options?.lambdaOptions?.code\n\t\t\t\t|| Code.fromAsset('dist'),\n\n\t\t\t/**\n\t\t\t * Final merged environment variables\n\t\t\t */\n\t\t\tenvironment\n\t\t});\n\n\t\t/**\n\t\t * CloudFormation output exposing the Lambda function ARN\n\t\t */\n\t\tnew CfnOutput(this, 'LambdaFunctionArn', {\n\t\t\tvalue: this.function.functionArn\n\t\t});\n\t}\n}"]}
@@ -0,0 +1,72 @@
1
+ 'use strict';
2
+
3
+ var constructs = require('constructs');
4
+ var awsCdkLib = require('aws-cdk-lib');
5
+ var awsLambda = require('aws-cdk-lib/aws-lambda');
6
+
7
+ var __defProp = Object.defineProperty;
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
+ var BaseLambdaLayerConstruct = class extends constructs.Construct {
10
+ static {
11
+ __name(this, "BaseLambdaLayerConstruct");
12
+ }
13
+ /** Newly created Lambda Layer (null if importing existing layer) */
14
+ layer;
15
+ /** Imported Lambda Layer reference (null if creating new layer) */
16
+ existingLayer;
17
+ /**
18
+ * @param scope Parent construct
19
+ * @param id Unique construct identifier
20
+ * @param props Configuration for layer creation or import
21
+ */
22
+ constructor(scope, id, props) {
23
+ super(scope, id);
24
+ if (props?.options?.fromExistingLayerArn) {
25
+ this.existingLayer = awsLambda.LayerVersion.fromLayerVersionArn(
26
+ this,
27
+ `${id}-Arn`,
28
+ props?.options?.fromExistingLayerArn
29
+ );
30
+ } else if (props?.options?.fromExistingLayerAttribute) {
31
+ this.existingLayer = awsLambda.LayerVersion.fromLayerVersionAttributes(
32
+ this,
33
+ `${id}-Attribute`,
34
+ props?.options?.fromExistingLayerAttribute
35
+ );
36
+ } else {
37
+ this.layer = new awsLambda.LayerVersion(this, id, {
38
+ ...props.options?.layerOptions,
39
+ /**
40
+ * Default layer code asset
41
+ */
42
+ code: props?.options?.layerOptions?.code || awsLambda.Code.fromAsset("./dist-layer"),
43
+ /**
44
+ * Layer description
45
+ */
46
+ description: props?.options?.layerOptions?.description || "Lambda Layer written in NodeJS, NestJS, NodeJS-express, serverless-express",
47
+ /**
48
+ * Supported CPU architectures
49
+ */
50
+ compatibleArchitectures: [
51
+ awsLambda.Architecture.ARM_64,
52
+ awsLambda.Architecture.X86_64
53
+ ],
54
+ /**
55
+ * Supported runtimes
56
+ */
57
+ compatibleRuntimes: [
58
+ awsLambda.Runtime.NODEJS_22_X,
59
+ awsLambda.Runtime.NODEJS_24_X,
60
+ awsLambda.Runtime.NODEJS_LATEST
61
+ ]
62
+ });
63
+ }
64
+ new awsCdkLib.CfnOutput(this, "LambdaLayerArn", {
65
+ value: props.options?.fromExistingLayerArn || props.options?.fromExistingLayerAttribute ? this.existingLayer.layerVersionArn : this.layer.layerVersionArn
66
+ });
67
+ }
68
+ };
69
+
70
+ exports.BaseLambdaLayerConstruct = BaseLambdaLayerConstruct;
71
+ //# sourceMappingURL=lambda-layer-construct.cjs.map
72
+ //# sourceMappingURL=lambda-layer-construct.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/aws/cdk/constructs/lambda-layer-construct.ts"],"names":["Construct","LayerVersion","Code","Architecture","Runtime","CfnOutput"],"mappings":";;;;;;;;AA0CO,IAAM,wBAAA,GAAN,cAAuCA,oBAAA,CAAU;AAAA,EA1CxD;AA0CwD,IAAA,MAAA,CAAA,IAAA,EAAA,0BAAA,CAAA;AAAA;AAAA;AAAA,EAE9C,KAAA;AAAA;AAAA,EAGA,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,WAAA,CAAY,KAAA,EAAkB,EAAA,EAAY,KAAA,EAAoC;AAC7E,IAAA,KAAA,CAAM,OAAO,EAAE,CAAA;AAKf,IAAA,IAAI,KAAA,EAAO,SAAS,oBAAA,EAAsB;AACzC,MAAA,IAAA,CAAK,gBAAgBC,sBAAA,CAAa,mBAAA;AAAA,QACjC,IAAA;AAAA,QACA,GAAG,EAAE,CAAA,IAAA,CAAA;AAAA,QACL,OAAO,OAAA,EAAS;AAAA,OACjB;AAAA,IAKD,CAAA,MAAA,IAAW,KAAA,EAAO,OAAA,EAAS,0BAAA,EAA4B;AACtD,MAAA,IAAA,CAAK,gBAAgBA,sBAAA,CAAa,0BAAA;AAAA,QACjC,IAAA;AAAA,QACA,GAAG,EAAE,CAAA,UAAA,CAAA;AAAA,QACL,OAAO,OAAA,EAAS;AAAA,OACjB;AAAA,IAKD,CAAA,MAAO;AACN,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAIA,sBAAA,CAAa,IAAA,EAAM,EAAA,EAAI;AAAA,QACvC,GAAG,MAAM,OAAA,EAAS,YAAA;AAAA;AAAA;AAAA;AAAA,QAKlB,MACC,KAAA,EAAO,OAAA,EAAS,cAAc,IAAA,IAC3BC,cAAA,CAAK,UAAU,cAAc,CAAA;AAAA;AAAA;AAAA;AAAA,QAKjC,WAAA,EACC,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,WAAA,IAC3B,4EAAA;AAAA;AAAA;AAAA;AAAA,QAKJ,uBAAA,EAAyB;AAAA,UACxBC,sBAAA,CAAa,MAAA;AAAA,UACbA,sBAAA,CAAa;AAAA,SACd;AAAA;AAAA;AAAA;AAAA,QAKA,kBAAA,EAAoB;AAAA,UACnBC,iBAAA,CAAQ,WAAA;AAAA,UACRA,iBAAA,CAAQ,WAAA;AAAA,UACRA,iBAAA,CAAQ;AAAA;AACT,OACqB,CAAA;AAAA,IACvB;AAMA,IAAA,IAAIC,mBAAA,CAAU,MAAM,gBAAA,EAAkB;AAAA,MACrC,KAAA,EACE,KAAA,CAAM,OAAA,EAAS,oBAAA,IAAwB,KAAA,CAAM,OAAA,EAAS,0BAAA,GACpD,IAAA,CAAK,aAAA,CAAc,eAAA,GACnB,IAAA,CAAK,KAAA,CAAM;AAAA,KACf,CAAA;AAAA,EACF;AACD","file":"lambda-layer-construct.cjs","sourcesContent":["import { Construct } from 'constructs';\nimport { CfnOutput } from 'aws-cdk-lib';\nimport { Architecture, Code, ILayerVersion, LayerVersion, LayerVersionProps, Runtime } from 'aws-cdk-lib/aws-lambda';\n\nimport { IBaseCdkConstructProps } from '../../types';\n\n/**\n * Props for BaseLambdaLayerConstruct\n *\n * Provides configuration for:\n * - Creating a new Lambda Layer\n * - Importing an existing layer by ARN or attributes\n */\ninterface ILambdaLayerConstructProps extends Omit<IBaseCdkConstructProps<{\n\t/**\n\t * Configuration for creating a new Lambda layer\n\t *\n\t * Note:\n\t * - `layerVersionName` is required\n\t * - `compatibleArchitectures` is managed internally\n\t */\n\treadonly layerOptions?: Partial<Omit<LayerVersionProps, 'layerVersionName' | 'compatibleArchitectures'>>\n\t& Required<Pick<LayerVersionProps, 'layerVersionName'>>;\n\n\t/** Import an existing layer by ARN */\n\treadonly fromExistingLayerArn?: string;\n\n\t/** Import an existing layer using attributes */\n\treadonly fromExistingLayerAttribute?: {\n\t\treadonly layerVersionArn: string;\n\t\treadonly compatibleRuntimes?: Runtime[];\n\t};\n}>, 'appName' | 'stage' | 'stackName'> { }\n\n/**\n * CDK construct for Lambda Layer\n *\n * Responsibilities:\n * - Creates a new Lambda layer or imports an existing one\n * - Applies default runtime and architecture compatibility\n * - Exposes the layer ARN as a CloudFormation output\n */\nexport class BaseLambdaLayerConstruct extends Construct {\n\t/** Newly created Lambda Layer (null if importing existing layer) */\n\treadonly layer: LayerVersion;\n\n\t/** Imported Lambda Layer reference (null if creating new layer) */\n\treadonly existingLayer: ILayerVersion;\n\n\t/**\n\t * @param scope Parent construct\n\t * @param id Unique construct identifier\n\t * @param props Configuration for layer creation or import\n\t */\n\tconstructor(scope: Construct, id: string, props?: ILambdaLayerConstructProps) {\n\t\tsuper(scope, id);\n\n\t\t/**\n\t\t * Import layer by ARN\n\t\t */\n\t\tif (props?.options?.fromExistingLayerArn) {\n\t\t\tthis.existingLayer = LayerVersion.fromLayerVersionArn(\n\t\t\t\tthis,\n\t\t\t\t`${id}-Arn`,\n\t\t\t\tprops?.options?.fromExistingLayerArn\n\t\t\t);\n\n\t\t\t/**\n\t\t\t * Import layer using attributes\n\t\t\t */\n\t\t} else if (props?.options?.fromExistingLayerAttribute) {\n\t\t\tthis.existingLayer = LayerVersion.fromLayerVersionAttributes(\n\t\t\t\tthis,\n\t\t\t\t`${id}-Attribute`,\n\t\t\t\tprops?.options?.fromExistingLayerAttribute\n\t\t\t);\n\n\t\t\t/**\n\t\t\t * Create new Lambda layer\n\t\t\t */\n\t\t} else {\n\t\t\tthis.layer = new LayerVersion(this, id, {\n\t\t\t\t...props.options?.layerOptions,\n\n\t\t\t\t/**\n\t\t\t\t * Default layer code asset\n\t\t\t\t */\n\t\t\t\tcode:\n\t\t\t\t\tprops?.options?.layerOptions?.code\n\t\t\t\t\t|| Code.fromAsset('./dist-layer'),\n\n\t\t\t\t/**\n\t\t\t\t * Layer description\n\t\t\t\t */\n\t\t\t\tdescription:\n\t\t\t\t\tprops?.options?.layerOptions?.description\n\t\t\t\t\t|| 'Lambda Layer written in NodeJS, NestJS, NodeJS-express, serverless-express',\n\n\t\t\t\t/**\n\t\t\t\t * Supported CPU architectures\n\t\t\t\t */\n\t\t\t\tcompatibleArchitectures: [\n\t\t\t\t\tArchitecture.ARM_64,\n\t\t\t\t\tArchitecture.X86_64\n\t\t\t\t],\n\n\t\t\t\t/**\n\t\t\t\t * Supported runtimes\n\t\t\t\t */\n\t\t\t\tcompatibleRuntimes: [\n\t\t\t\t\tRuntime.NODEJS_22_X,\n\t\t\t\t\tRuntime.NODEJS_24_X,\n\t\t\t\t\tRuntime.NODEJS_LATEST\n\t\t\t\t]\n\t\t\t} as LayerVersionProps);\n\t\t}\n\n\t\t/**\n\t\t * CloudFormation output exposing the layer ARN\n\t\t * Resolves to either created or imported layer\n\t\t */\n\t\tnew CfnOutput(this, 'LambdaLayerArn', {\n\t\t\tvalue:\n\t\t\t\t(props.options?.fromExistingLayerArn || props.options?.fromExistingLayerAttribute)\n\t\t\t\t\t? this.existingLayer.layerVersionArn\n\t\t\t\t\t: this.layer.layerVersionArn\n\t\t});\n\t}\n}"]}
@@ -0,0 +1,52 @@
1
+ import { Construct } from 'constructs';
2
+ import { LayerVersion, ILayerVersion, LayerVersionProps, Runtime } from 'aws-cdk-lib/aws-lambda';
3
+ import { IBaseCdkConstructProps } from '../../types/index.cjs';
4
+ import '@incloodsolutions/toolkit';
5
+
6
+ /**
7
+ * Props for BaseLambdaLayerConstruct
8
+ *
9
+ * Provides configuration for:
10
+ * - Creating a new Lambda Layer
11
+ * - Importing an existing layer by ARN or attributes
12
+ */
13
+ interface ILambdaLayerConstructProps extends Omit<IBaseCdkConstructProps<{
14
+ /**
15
+ * Configuration for creating a new Lambda layer
16
+ *
17
+ * Note:
18
+ * - `layerVersionName` is required
19
+ * - `compatibleArchitectures` is managed internally
20
+ */
21
+ readonly layerOptions?: Partial<Omit<LayerVersionProps, 'layerVersionName' | 'compatibleArchitectures'>> & Required<Pick<LayerVersionProps, 'layerVersionName'>>;
22
+ /** Import an existing layer by ARN */
23
+ readonly fromExistingLayerArn?: string;
24
+ /** Import an existing layer using attributes */
25
+ readonly fromExistingLayerAttribute?: {
26
+ readonly layerVersionArn: string;
27
+ readonly compatibleRuntimes?: Runtime[];
28
+ };
29
+ }>, 'appName' | 'stage' | 'stackName'> {
30
+ }
31
+ /**
32
+ * CDK construct for Lambda Layer
33
+ *
34
+ * Responsibilities:
35
+ * - Creates a new Lambda layer or imports an existing one
36
+ * - Applies default runtime and architecture compatibility
37
+ * - Exposes the layer ARN as a CloudFormation output
38
+ */
39
+ declare class BaseLambdaLayerConstruct extends Construct {
40
+ /** Newly created Lambda Layer (null if importing existing layer) */
41
+ readonly layer: LayerVersion;
42
+ /** Imported Lambda Layer reference (null if creating new layer) */
43
+ readonly existingLayer: ILayerVersion;
44
+ /**
45
+ * @param scope Parent construct
46
+ * @param id Unique construct identifier
47
+ * @param props Configuration for layer creation or import
48
+ */
49
+ constructor(scope: Construct, id: string, props?: ILambdaLayerConstructProps);
50
+ }
51
+
52
+ export { BaseLambdaLayerConstruct };
@@ -0,0 +1,52 @@
1
+ import { Construct } from 'constructs';
2
+ import { LayerVersion, ILayerVersion, LayerVersionProps, Runtime } from 'aws-cdk-lib/aws-lambda';
3
+ import { IBaseCdkConstructProps } from '../../types/index.js';
4
+ import '@incloodsolutions/toolkit';
5
+
6
+ /**
7
+ * Props for BaseLambdaLayerConstruct
8
+ *
9
+ * Provides configuration for:
10
+ * - Creating a new Lambda Layer
11
+ * - Importing an existing layer by ARN or attributes
12
+ */
13
+ interface ILambdaLayerConstructProps extends Omit<IBaseCdkConstructProps<{
14
+ /**
15
+ * Configuration for creating a new Lambda layer
16
+ *
17
+ * Note:
18
+ * - `layerVersionName` is required
19
+ * - `compatibleArchitectures` is managed internally
20
+ */
21
+ readonly layerOptions?: Partial<Omit<LayerVersionProps, 'layerVersionName' | 'compatibleArchitectures'>> & Required<Pick<LayerVersionProps, 'layerVersionName'>>;
22
+ /** Import an existing layer by ARN */
23
+ readonly fromExistingLayerArn?: string;
24
+ /** Import an existing layer using attributes */
25
+ readonly fromExistingLayerAttribute?: {
26
+ readonly layerVersionArn: string;
27
+ readonly compatibleRuntimes?: Runtime[];
28
+ };
29
+ }>, 'appName' | 'stage' | 'stackName'> {
30
+ }
31
+ /**
32
+ * CDK construct for Lambda Layer
33
+ *
34
+ * Responsibilities:
35
+ * - Creates a new Lambda layer or imports an existing one
36
+ * - Applies default runtime and architecture compatibility
37
+ * - Exposes the layer ARN as a CloudFormation output
38
+ */
39
+ declare class BaseLambdaLayerConstruct extends Construct {
40
+ /** Newly created Lambda Layer (null if importing existing layer) */
41
+ readonly layer: LayerVersion;
42
+ /** Imported Lambda Layer reference (null if creating new layer) */
43
+ readonly existingLayer: ILayerVersion;
44
+ /**
45
+ * @param scope Parent construct
46
+ * @param id Unique construct identifier
47
+ * @param props Configuration for layer creation or import
48
+ */
49
+ constructor(scope: Construct, id: string, props?: ILambdaLayerConstructProps);
50
+ }
51
+
52
+ export { BaseLambdaLayerConstruct };
@@ -0,0 +1,70 @@
1
+ import { Construct } from 'constructs';
2
+ import { CfnOutput } from 'aws-cdk-lib';
3
+ import { LayerVersion, Runtime, Architecture, Code } from 'aws-cdk-lib/aws-lambda';
4
+
5
+ var __defProp = Object.defineProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var BaseLambdaLayerConstruct = class extends Construct {
8
+ static {
9
+ __name(this, "BaseLambdaLayerConstruct");
10
+ }
11
+ /** Newly created Lambda Layer (null if importing existing layer) */
12
+ layer;
13
+ /** Imported Lambda Layer reference (null if creating new layer) */
14
+ existingLayer;
15
+ /**
16
+ * @param scope Parent construct
17
+ * @param id Unique construct identifier
18
+ * @param props Configuration for layer creation or import
19
+ */
20
+ constructor(scope, id, props) {
21
+ super(scope, id);
22
+ if (props?.options?.fromExistingLayerArn) {
23
+ this.existingLayer = LayerVersion.fromLayerVersionArn(
24
+ this,
25
+ `${id}-Arn`,
26
+ props?.options?.fromExistingLayerArn
27
+ );
28
+ } else if (props?.options?.fromExistingLayerAttribute) {
29
+ this.existingLayer = LayerVersion.fromLayerVersionAttributes(
30
+ this,
31
+ `${id}-Attribute`,
32
+ props?.options?.fromExistingLayerAttribute
33
+ );
34
+ } else {
35
+ this.layer = new LayerVersion(this, id, {
36
+ ...props.options?.layerOptions,
37
+ /**
38
+ * Default layer code asset
39
+ */
40
+ code: props?.options?.layerOptions?.code || Code.fromAsset("./dist-layer"),
41
+ /**
42
+ * Layer description
43
+ */
44
+ description: props?.options?.layerOptions?.description || "Lambda Layer written in NodeJS, NestJS, NodeJS-express, serverless-express",
45
+ /**
46
+ * Supported CPU architectures
47
+ */
48
+ compatibleArchitectures: [
49
+ Architecture.ARM_64,
50
+ Architecture.X86_64
51
+ ],
52
+ /**
53
+ * Supported runtimes
54
+ */
55
+ compatibleRuntimes: [
56
+ Runtime.NODEJS_22_X,
57
+ Runtime.NODEJS_24_X,
58
+ Runtime.NODEJS_LATEST
59
+ ]
60
+ });
61
+ }
62
+ new CfnOutput(this, "LambdaLayerArn", {
63
+ value: props.options?.fromExistingLayerArn || props.options?.fromExistingLayerAttribute ? this.existingLayer.layerVersionArn : this.layer.layerVersionArn
64
+ });
65
+ }
66
+ };
67
+
68
+ export { BaseLambdaLayerConstruct };
69
+ //# sourceMappingURL=lambda-layer-construct.js.map
70
+ //# sourceMappingURL=lambda-layer-construct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/aws/cdk/constructs/lambda-layer-construct.ts"],"names":[],"mappings":";;;;;;AA0CO,IAAM,wBAAA,GAAN,cAAuC,SAAA,CAAU;AAAA,EA1CxD;AA0CwD,IAAA,MAAA,CAAA,IAAA,EAAA,0BAAA,CAAA;AAAA;AAAA;AAAA,EAE9C,KAAA;AAAA;AAAA,EAGA,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,WAAA,CAAY,KAAA,EAAkB,EAAA,EAAY,KAAA,EAAoC;AAC7E,IAAA,KAAA,CAAM,OAAO,EAAE,CAAA;AAKf,IAAA,IAAI,KAAA,EAAO,SAAS,oBAAA,EAAsB;AACzC,MAAA,IAAA,CAAK,gBAAgB,YAAA,CAAa,mBAAA;AAAA,QACjC,IAAA;AAAA,QACA,GAAG,EAAE,CAAA,IAAA,CAAA;AAAA,QACL,OAAO,OAAA,EAAS;AAAA,OACjB;AAAA,IAKD,CAAA,MAAA,IAAW,KAAA,EAAO,OAAA,EAAS,0BAAA,EAA4B;AACtD,MAAA,IAAA,CAAK,gBAAgB,YAAA,CAAa,0BAAA;AAAA,QACjC,IAAA;AAAA,QACA,GAAG,EAAE,CAAA,UAAA,CAAA;AAAA,QACL,OAAO,OAAA,EAAS;AAAA,OACjB;AAAA,IAKD,CAAA,MAAO;AACN,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,YAAA,CAAa,IAAA,EAAM,EAAA,EAAI;AAAA,QACvC,GAAG,MAAM,OAAA,EAAS,YAAA;AAAA;AAAA;AAAA;AAAA,QAKlB,MACC,KAAA,EAAO,OAAA,EAAS,cAAc,IAAA,IAC3B,IAAA,CAAK,UAAU,cAAc,CAAA;AAAA;AAAA;AAAA;AAAA,QAKjC,WAAA,EACC,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,WAAA,IAC3B,4EAAA;AAAA;AAAA;AAAA;AAAA,QAKJ,uBAAA,EAAyB;AAAA,UACxB,YAAA,CAAa,MAAA;AAAA,UACb,YAAA,CAAa;AAAA,SACd;AAAA;AAAA;AAAA;AAAA,QAKA,kBAAA,EAAoB;AAAA,UACnB,OAAA,CAAQ,WAAA;AAAA,UACR,OAAA,CAAQ,WAAA;AAAA,UACR,OAAA,CAAQ;AAAA;AACT,OACqB,CAAA;AAAA,IACvB;AAMA,IAAA,IAAI,SAAA,CAAU,MAAM,gBAAA,EAAkB;AAAA,MACrC,KAAA,EACE,KAAA,CAAM,OAAA,EAAS,oBAAA,IAAwB,KAAA,CAAM,OAAA,EAAS,0BAAA,GACpD,IAAA,CAAK,aAAA,CAAc,eAAA,GACnB,IAAA,CAAK,KAAA,CAAM;AAAA,KACf,CAAA;AAAA,EACF;AACD","file":"lambda-layer-construct.js","sourcesContent":["import { Construct } from 'constructs';\nimport { CfnOutput } from 'aws-cdk-lib';\nimport { Architecture, Code, ILayerVersion, LayerVersion, LayerVersionProps, Runtime } from 'aws-cdk-lib/aws-lambda';\n\nimport { IBaseCdkConstructProps } from '../../types';\n\n/**\n * Props for BaseLambdaLayerConstruct\n *\n * Provides configuration for:\n * - Creating a new Lambda Layer\n * - Importing an existing layer by ARN or attributes\n */\ninterface ILambdaLayerConstructProps extends Omit<IBaseCdkConstructProps<{\n\t/**\n\t * Configuration for creating a new Lambda layer\n\t *\n\t * Note:\n\t * - `layerVersionName` is required\n\t * - `compatibleArchitectures` is managed internally\n\t */\n\treadonly layerOptions?: Partial<Omit<LayerVersionProps, 'layerVersionName' | 'compatibleArchitectures'>>\n\t& Required<Pick<LayerVersionProps, 'layerVersionName'>>;\n\n\t/** Import an existing layer by ARN */\n\treadonly fromExistingLayerArn?: string;\n\n\t/** Import an existing layer using attributes */\n\treadonly fromExistingLayerAttribute?: {\n\t\treadonly layerVersionArn: string;\n\t\treadonly compatibleRuntimes?: Runtime[];\n\t};\n}>, 'appName' | 'stage' | 'stackName'> { }\n\n/**\n * CDK construct for Lambda Layer\n *\n * Responsibilities:\n * - Creates a new Lambda layer or imports an existing one\n * - Applies default runtime and architecture compatibility\n * - Exposes the layer ARN as a CloudFormation output\n */\nexport class BaseLambdaLayerConstruct extends Construct {\n\t/** Newly created Lambda Layer (null if importing existing layer) */\n\treadonly layer: LayerVersion;\n\n\t/** Imported Lambda Layer reference (null if creating new layer) */\n\treadonly existingLayer: ILayerVersion;\n\n\t/**\n\t * @param scope Parent construct\n\t * @param id Unique construct identifier\n\t * @param props Configuration for layer creation or import\n\t */\n\tconstructor(scope: Construct, id: string, props?: ILambdaLayerConstructProps) {\n\t\tsuper(scope, id);\n\n\t\t/**\n\t\t * Import layer by ARN\n\t\t */\n\t\tif (props?.options?.fromExistingLayerArn) {\n\t\t\tthis.existingLayer = LayerVersion.fromLayerVersionArn(\n\t\t\t\tthis,\n\t\t\t\t`${id}-Arn`,\n\t\t\t\tprops?.options?.fromExistingLayerArn\n\t\t\t);\n\n\t\t\t/**\n\t\t\t * Import layer using attributes\n\t\t\t */\n\t\t} else if (props?.options?.fromExistingLayerAttribute) {\n\t\t\tthis.existingLayer = LayerVersion.fromLayerVersionAttributes(\n\t\t\t\tthis,\n\t\t\t\t`${id}-Attribute`,\n\t\t\t\tprops?.options?.fromExistingLayerAttribute\n\t\t\t);\n\n\t\t\t/**\n\t\t\t * Create new Lambda layer\n\t\t\t */\n\t\t} else {\n\t\t\tthis.layer = new LayerVersion(this, id, {\n\t\t\t\t...props.options?.layerOptions,\n\n\t\t\t\t/**\n\t\t\t\t * Default layer code asset\n\t\t\t\t */\n\t\t\t\tcode:\n\t\t\t\t\tprops?.options?.layerOptions?.code\n\t\t\t\t\t|| Code.fromAsset('./dist-layer'),\n\n\t\t\t\t/**\n\t\t\t\t * Layer description\n\t\t\t\t */\n\t\t\t\tdescription:\n\t\t\t\t\tprops?.options?.layerOptions?.description\n\t\t\t\t\t|| 'Lambda Layer written in NodeJS, NestJS, NodeJS-express, serverless-express',\n\n\t\t\t\t/**\n\t\t\t\t * Supported CPU architectures\n\t\t\t\t */\n\t\t\t\tcompatibleArchitectures: [\n\t\t\t\t\tArchitecture.ARM_64,\n\t\t\t\t\tArchitecture.X86_64\n\t\t\t\t],\n\n\t\t\t\t/**\n\t\t\t\t * Supported runtimes\n\t\t\t\t */\n\t\t\t\tcompatibleRuntimes: [\n\t\t\t\t\tRuntime.NODEJS_22_X,\n\t\t\t\t\tRuntime.NODEJS_24_X,\n\t\t\t\t\tRuntime.NODEJS_LATEST\n\t\t\t\t]\n\t\t\t} as LayerVersionProps);\n\t\t}\n\n\t\t/**\n\t\t * CloudFormation output exposing the layer ARN\n\t\t * Resolves to either created or imported layer\n\t\t */\n\t\tnew CfnOutput(this, 'LambdaLayerArn', {\n\t\t\tvalue:\n\t\t\t\t(props.options?.fromExistingLayerArn || props.options?.fromExistingLayerAttribute)\n\t\t\t\t\t? this.existingLayer.layerVersionArn\n\t\t\t\t\t: this.layer.layerVersionArn\n\t\t});\n\t}\n}"]}
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ var constructs = require('constructs');
4
+ var awsCdkLib = require('aws-cdk-lib');
5
+ var awsIam = require('aws-cdk-lib/aws-iam');
6
+
7
+ var __defProp = Object.defineProperty;
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
+ var BaseRolePolicyConstruct = class extends constructs.Construct {
10
+ static {
11
+ __name(this, "BaseRolePolicyConstruct");
12
+ }
13
+ /** The created IAM Role instance */
14
+ role;
15
+ /**
16
+ * @param scope Parent construct
17
+ * @param id Unique construct identifier
18
+ * @param props Configuration for role and policies
19
+ */
20
+ constructor(scope, id, props) {
21
+ super(scope, id);
22
+ this.role = new awsIam.Role(this, id, {
23
+ ...props.options?.roleOptions,
24
+ /**
25
+ * Managed policies attached to the role
26
+ * Defaults to AWSLambdaBasicExecutionRole if not provided
27
+ */
28
+ managedPolicies: props.options?.roleOptions?.managedPolicies ? props.options.roleOptions.managedPolicies : [
29
+ awsIam.ManagedPolicy.fromAwsManagedPolicyName(
30
+ "service-role/AWSLambdaBasicExecutionRole"
31
+ )
32
+ ]
33
+ });
34
+ if (props?.policies?.length) {
35
+ props.policies.forEach((policy) => {
36
+ this.role.addToPolicy(
37
+ /**
38
+ * Inline policy statement
39
+ */
40
+ new awsIam.PolicyStatement(policy)
41
+ );
42
+ });
43
+ }
44
+ this.role.applyRemovalPolicy(awsCdkLib.RemovalPolicy.DESTROY);
45
+ new awsCdkLib.CfnOutput(this, "RolePolicyArn", {
46
+ value: this.role.roleArn
47
+ });
48
+ }
49
+ };
50
+
51
+ exports.BaseRolePolicyConstruct = BaseRolePolicyConstruct;
52
+ //# sourceMappingURL=role-policy-construct.cjs.map
53
+ //# sourceMappingURL=role-policy-construct.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/aws/cdk/constructs/role-policy-construct.ts"],"names":["Construct","Role","ManagedPolicy","PolicyStatement","RemovalPolicy","CfnOutput"],"mappings":";;;;;;;;AAkCO,IAAM,uBAAA,GAAN,cAAsCA,oBAAA,CAAU;AAAA,EAlCvD;AAkCuD,IAAA,MAAA,CAAA,IAAA,EAAA,yBAAA,CAAA;AAAA;AAAA;AAAA,EAE7C,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,WAAA,CAAY,KAAA,EAAkB,EAAA,EAAY,KAAA,EAAgC;AACzE,IAAA,KAAA,CAAM,OAAO,EAAE,CAAA;AAEf,IAAA,IAAA,CAAK,IAAA,GAAO,IAAIC,WAAA,CAAK,IAAA,EAAM,EAAA,EAAI;AAAA,MAC9B,GAAG,MAAM,OAAA,EAAS,WAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMlB,eAAA,EACC,MAAM,OAAA,EAAS,WAAA,EAAa,kBACzB,KAAA,CAAM,OAAA,CAAQ,YAAY,eAAA,GAC1B;AAAA,QACDC,oBAAA,CAAc,wBAAA;AAAA,UACb;AAAA;AACD;AACD,KACF,CAAA;AAKD,IAAA,IAAI,KAAA,EAAO,UAAU,MAAA,EAAQ;AAC5B,MAAA,KAAA,CAAM,QAAA,CAAS,OAAA,CAAQ,CAAC,MAAA,KAAW;AAClC,QAAA,IAAA,CAAK,IAAA,CAAK,WAAA;AAAA;AAAA;AAAA;AAAA,UAIT,IAAIC,uBAAgB,MAAM;AAAA,SAC3B;AAAA,MACD,CAAC,CAAA;AAAA,IACF;AAKA,IAAA,IAAA,CAAK,IAAA,CAAK,kBAAA,CAAmBC,uBAAA,CAAc,OAAO,CAAA;AAKlD,IAAA,IAAIC,mBAAA,CAAU,MAAM,eAAA,EAAiB;AAAA,MACpC,KAAA,EAAO,KAAK,IAAA,CAAK;AAAA,KACjB,CAAA;AAAA,EACF;AACD","file":"role-policy-construct.cjs","sourcesContent":["import { Construct } from 'constructs';\nimport { CfnOutput, RemovalPolicy } from 'aws-cdk-lib';\nimport { ManagedPolicy, PolicyStatement, PolicyStatementProps, Role, RoleProps } from 'aws-cdk-lib/aws-iam';\n\nimport { IBaseCdkConstructProps } from '../../types';\n\n/**\n * Props for BaseRolePolicyConstruct\n *\n * Provides configuration for:\n * - IAM role creation\n * - Inline policy statements\n */\ninterface IDynamoDBConstructProps extends Omit<IBaseCdkConstructProps<{\n\t/** IAM Role configuration options */\n\treadonly roleOptions: RoleProps\n}>, 'appName' | 'stage' | 'stackName'> {\n\t/**\n\t * Additional inline policies to attach to the role\n\t *\n\t * Each entry is converted into a PolicyStatement\n\t */\n\treadonly policies?: PolicyStatementProps[];\n}\n\n/**\n * CDK construct for IAM Role with policies\n *\n * Responsibilities:\n * - Creates an IAM role with configurable options\n * - Applies a default AWS managed policy if none is provided\n * - Attaches optional inline policy statements\n * - Exposes the role ARN as a CloudFormation output\n */\nexport class BaseRolePolicyConstruct extends Construct {\n\t/** The created IAM Role instance */\n\treadonly role: Role;\n\n\t/**\n\t * @param scope Parent construct\n\t * @param id Unique construct identifier\n\t * @param props Configuration for role and policies\n\t */\n\tconstructor(scope: Construct, id: string, props: IDynamoDBConstructProps) {\n\t\tsuper(scope, id);\n\n\t\tthis.role = new Role(this, id, {\n\t\t\t...props.options?.roleOptions,\n\n\t\t\t/**\n\t\t\t * Managed policies attached to the role\n\t\t\t * Defaults to AWSLambdaBasicExecutionRole if not provided\n\t\t\t */\n\t\t\tmanagedPolicies:\n\t\t\t\tprops.options?.roleOptions?.managedPolicies\n\t\t\t\t\t? props.options.roleOptions.managedPolicies\n\t\t\t\t\t: [\n\t\t\t\t\t\tManagedPolicy.fromAwsManagedPolicyName(\n\t\t\t\t\t\t\t'service-role/AWSLambdaBasicExecutionRole'\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t});\n\n\t\t/**\n\t\t * Attach inline policy statements to the role\n\t\t */\n\t\tif (props?.policies?.length) {\n\t\t\tprops.policies.forEach((policy) => {\n\t\t\t\tthis.role.addToPolicy(\n\t\t\t\t\t/**\n\t\t\t\t\t * Inline policy statement\n\t\t\t\t\t */\n\t\t\t\t\tnew PolicyStatement(policy)\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Apply removal policy (useful for non-production environments)\n\t\t */\n\t\tthis.role.applyRemovalPolicy(RemovalPolicy.DESTROY);\n\n\t\t/**\n\t\t * CloudFormation output exposing the role ARN\n\t\t */\n\t\tnew CfnOutput(this, 'RolePolicyArn', {\n\t\t\tvalue: this.role.roleArn\n\t\t});\n\t}\n}"]}
@@ -0,0 +1,44 @@
1
+ import { Construct } from 'constructs';
2
+ import { Role, RoleProps, PolicyStatementProps } from 'aws-cdk-lib/aws-iam';
3
+ import { IBaseCdkConstructProps } from '../../types/index.cjs';
4
+ import '@incloodsolutions/toolkit';
5
+
6
+ /**
7
+ * Props for BaseRolePolicyConstruct
8
+ *
9
+ * Provides configuration for:
10
+ * - IAM role creation
11
+ * - Inline policy statements
12
+ */
13
+ interface IDynamoDBConstructProps extends Omit<IBaseCdkConstructProps<{
14
+ /** IAM Role configuration options */
15
+ readonly roleOptions: RoleProps;
16
+ }>, 'appName' | 'stage' | 'stackName'> {
17
+ /**
18
+ * Additional inline policies to attach to the role
19
+ *
20
+ * Each entry is converted into a PolicyStatement
21
+ */
22
+ readonly policies?: PolicyStatementProps[];
23
+ }
24
+ /**
25
+ * CDK construct for IAM Role with policies
26
+ *
27
+ * Responsibilities:
28
+ * - Creates an IAM role with configurable options
29
+ * - Applies a default AWS managed policy if none is provided
30
+ * - Attaches optional inline policy statements
31
+ * - Exposes the role ARN as a CloudFormation output
32
+ */
33
+ declare class BaseRolePolicyConstruct extends Construct {
34
+ /** The created IAM Role instance */
35
+ readonly role: Role;
36
+ /**
37
+ * @param scope Parent construct
38
+ * @param id Unique construct identifier
39
+ * @param props Configuration for role and policies
40
+ */
41
+ constructor(scope: Construct, id: string, props: IDynamoDBConstructProps);
42
+ }
43
+
44
+ export { BaseRolePolicyConstruct };