diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/asset.4a61519d8f4df8206cfaff4e519462aa81beab9213c3642a1353cd679c697638/index.js b/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/asset.4a61519d8f4df8206cfaff4e519462aa81beab9213c3642a1353cd679c697638/index.js deleted file mode 100644 index 1db1e321f0ad3..0000000000000 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/asset.4a61519d8f4df8206cfaff4e519462aa81beab9213c3642a1353cd679c697638/index.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.handler = void 0; -function escapeRegex(x) { - return x.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); -} -async function handler(event) { - console.log('Event: %j', { ...event, ResponseURL: '...' }); - const expression = Object.entries(event.expressionAttributeValues) - .reduce((exp, [k, v]) => exp.replace(new RegExp(escapeRegex(k), 'g'), JSON.stringify(v)), event.expression); - console.log(`Expression: ${expression}`); - return eval(expression); -} -exports.handler = handler; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSxTQUFTLFdBQVcsQ0FBQyxDQUFTO0lBQzVCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRU0sS0FBSyxVQUFVLE9BQU8sQ0FBQyxLQUFZO0lBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFM0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUM7U0FDL0QsTUFBTSxDQUNMLENBQUMsR0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3hGLEtBQUssQ0FBQyxVQUFVLENBQ2pCLENBQUM7SUFDSixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUV6QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBWEQsMEJBV0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4uL2V2YWx1YXRlLWV4cHJlc3Npb24nO1xuXG5mdW5jdGlvbiBlc2NhcGVSZWdleCh4OiBzdHJpbmcpIHtcbiAgcmV0dXJuIHgucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50OiBFdmVudCk6IFByb21pc2U8YW55PiB7XG4gIGNvbnNvbGUubG9nKCdFdmVudDogJWonLCB7IC4uLmV2ZW50LCBSZXNwb25zZVVSTDogJy4uLicgfSk7XG5cbiAgY29uc3QgZXhwcmVzc2lvbiA9IE9iamVjdC5lbnRyaWVzKGV2ZW50LmV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXMpXG4gICAgLnJlZHVjZShcbiAgICAgIChleHA6IHN0cmluZywgW2ssIHZdKSA9PiBleHAucmVwbGFjZShuZXcgUmVnRXhwKGVzY2FwZVJlZ2V4KGspLCAnZycpLCBKU09OLnN0cmluZ2lmeSh2KSksXG4gICAgICBldmVudC5leHByZXNzaW9uLFxuICAgICk7XG4gIGNvbnNvbGUubG9nKGBFeHByZXNzaW9uOiAke2V4cHJlc3Npb259YCk7XG5cbiAgcmV0dXJuIGV2YWwoZXhwcmVzc2lvbik7XG59XG4iXX0= \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/asset.b8cec122f25692e8b194663d25a2ee5e0b65e55df966120791d6a3ddc08fc136/index.js b/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/asset.b8cec122f25692e8b194663d25a2ee5e0b65e55df966120791d6a3ddc08fc136/index.js new file mode 100644 index 0000000000000..d3d578f964997 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/asset.b8cec122f25692e8b194663d25a2ee5e0b65e55df966120791d6a3ddc08fc136/index.js @@ -0,0 +1 @@ +"use strict";var o=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var c=(e,n)=>{for(var s in n)o(e,s,{get:n[s],enumerable:!0})},l=(e,n,s,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of a(n))!p.call(e,r)&&r!==s&&o(e,r,{get:()=>n[r],enumerable:!(t=i(n,r))||t.enumerable});return e};var g=e=>l(o({},"__esModule",{value:!0}),e);var y={};c(y,{handler:()=>u});module.exports=g(y);function x(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}async function u(e){console.log("Event: %j",{...e,ResponseURL:"..."});let n=Object.entries(e.expressionAttributeValues).reduce((s,[t,r])=>s.replace(new RegExp(x(t),"g"),JSON.stringify(r)),e.expression);return console.log(`Expression: ${n}`),[eval][0](n)}0&&(module.exports={handler}); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/cdk-sfn-evaluate-expression-integ.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/cdk-sfn-evaluate-expression-integ.assets.json index 77902a05e464b..03aa8a7fbd808 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/cdk-sfn-evaluate-expression-integ.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/cdk-sfn-evaluate-expression-integ.assets.json @@ -1,20 +1,20 @@ { "version": "34.0.0", "files": { - "4a61519d8f4df8206cfaff4e519462aa81beab9213c3642a1353cd679c697638": { + "b8cec122f25692e8b194663d25a2ee5e0b65e55df966120791d6a3ddc08fc136": { "source": { - "path": "asset.4a61519d8f4df8206cfaff4e519462aa81beab9213c3642a1353cd679c697638", + "path": "asset.b8cec122f25692e8b194663d25a2ee5e0b65e55df966120791d6a3ddc08fc136", "packaging": "zip" }, "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "4a61519d8f4df8206cfaff4e519462aa81beab9213c3642a1353cd679c697638.zip", + "objectKey": "b8cec122f25692e8b194663d25a2ee5e0b65e55df966120791d6a3ddc08fc136.zip", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, - "d24ed75590ea1d851d0277014bfd57dc27a97ee06a2c62231c84d1227b3ef42a": { + "3defd0dcacbdfd76991b677ef909cf98e4904ceef0cdb515bcfcd240bab96d3d": { "source": { "path": "cdk-sfn-evaluate-expression-integ.template.json", "packaging": "file" @@ -22,7 +22,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "d24ed75590ea1d851d0277014bfd57dc27a97ee06a2c62231c84d1227b3ef42a.json", + "objectKey": "3defd0dcacbdfd76991b677ef909cf98e4904ceef0cdb515bcfcd240bab96d3d.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/cdk-sfn-evaluate-expression-integ.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/cdk-sfn-evaluate-expression-integ.template.json index 09c282ddf4f8a..1a9060f025bdc 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/cdk-sfn-evaluate-expression-integ.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/cdk-sfn-evaluate-expression-integ.template.json @@ -38,7 +38,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "4a61519d8f4df8206cfaff4e519462aa81beab9213c3642a1353cd679c697638.zip" + "S3Key": "b8cec122f25692e8b194663d25a2ee5e0b65e55df966120791d6a3ddc08fc136.zip" }, "Handler": "index.handler", "Role": { @@ -91,7 +91,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "4a61519d8f4df8206cfaff4e519462aa81beab9213c3642a1353cd679c697638.zip" + "S3Key": "b8cec122f25692e8b194663d25a2ee5e0b65e55df966120791d6a3ddc08fc136.zip" }, "Handler": "index.handler", "Role": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/manifest.json index 89c150c26b708..b0e4167ce4bdb 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/manifest.json @@ -14,10 +14,11 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "cdk-sfn-evaluate-expression-integ.template.json", + "terminationProtection": false, "validateOnSynth": false, "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/d24ed75590ea1d851d0277014bfd57dc27a97ee06a2c62231c84d1227b3ef42a.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/3defd0dcacbdfd76991b677ef909cf98e4904ceef0cdb515bcfcd240bab96d3d.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -92,24 +93,6 @@ "type": "aws:cdk:logicalId", "data": "CheckBootstrapVersion" } - ], - "Eval2a430b68eb4b40269232ee39b71c1db8ServiceRole2388DF3C": [ - { - "type": "aws:cdk:logicalId", - "data": "Eval2a430b68eb4b40269232ee39b71c1db8ServiceRole2388DF3C", - "trace": [ - "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" - ] - } - ], - "Eval2a430b68eb4b40269232ee39b71c1db8D6CA9948": [ - { - "type": "aws:cdk:logicalId", - "data": "Eval2a430b68eb4b40269232ee39b71c1db8D6CA9948", - "trace": [ - "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" - ] - } ] }, "displayName": "cdk-sfn-evaluate-expression-integ" @@ -127,6 +110,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "EvaluateExpressionIntegDefaultTestDeployAssert03097648.template.json", + "terminationProtection": false, "validateOnSynth": false, "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/tree.json index df29087d8d88e..165fb7d63a143 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-stepfunctions-tasks/test/integ.evaluate-expression.js.snapshot/tree.json @@ -123,7 +123,7 @@ "s3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "s3Key": "4a61519d8f4df8206cfaff4e519462aa81beab9213c3642a1353cd679c697638.zip" + "s3Key": "b8cec122f25692e8b194663d25a2ee5e0b65e55df966120791d6a3ddc08fc136.zip" }, "handler": "index.handler", "role": { @@ -261,7 +261,7 @@ "s3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "s3Key": "4a61519d8f4df8206cfaff4e519462aa81beab9213c3642a1353cd679c697638.zip" + "s3Key": "b8cec122f25692e8b194663d25a2ee5e0b65e55df966120791d6a3ddc08fc136.zip" }, "handler": "index.handler", "role": { diff --git a/packages/aws-cdk-lib/aws-stepfunctions-tasks/lib/eval-nodejs-handler/index.ts b/packages/@aws-cdk/custom-resource-handlers/lib/aws-stepfunctions-tasks/eval-nodejs-handler/index.ts similarity index 56% rename from packages/aws-cdk-lib/aws-stepfunctions-tasks/lib/eval-nodejs-handler/index.ts rename to packages/@aws-cdk/custom-resource-handlers/lib/aws-stepfunctions-tasks/eval-nodejs-handler/index.ts index a6709a2a580c8..a84a98b9f244d 100644 --- a/packages/aws-cdk-lib/aws-stepfunctions-tasks/lib/eval-nodejs-handler/index.ts +++ b/packages/@aws-cdk/custom-resource-handlers/lib/aws-stepfunctions-tasks/eval-nodejs-handler/index.ts @@ -1,5 +1,21 @@ /* eslint-disable no-console */ -import { Event } from '../evaluate-expression'; + +/** + * The event received by the Lambda function + * + * @internal + */ +export interface Event { + /** + * The expression to evaluate + */ + readonly expression: string; + + /** + * The expression attribute values + */ + readonly expressionAttributeValues: { [key: string]: any }; +} function escapeRegex(x: string) { return x.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); @@ -15,5 +31,6 @@ export async function handler(event: Event): Promise { ); console.log(`Expression: ${expression}`); - return eval(expression); + // direct eval with bundler is not recommended - using indirect eval + return [eval][0](expression); } diff --git a/packages/aws-cdk-lib/aws-stepfunctions-tasks/test/eval-nodejs-handler.test.ts b/packages/@aws-cdk/custom-resource-handlers/test/aws-stepfunctions-tasks/eval-nodejs-handler.test.ts similarity index 94% rename from packages/aws-cdk-lib/aws-stepfunctions-tasks/test/eval-nodejs-handler.test.ts rename to packages/@aws-cdk/custom-resource-handlers/test/aws-stepfunctions-tasks/eval-nodejs-handler.test.ts index 8254e6e2f482d..411ba0b2303cc 100644 --- a/packages/aws-cdk-lib/aws-stepfunctions-tasks/test/eval-nodejs-handler.test.ts +++ b/packages/@aws-cdk/custom-resource-handlers/test/aws-stepfunctions-tasks/eval-nodejs-handler.test.ts @@ -1,5 +1,4 @@ -import { Event } from '../lib'; -import { handler } from '../lib/eval-nodejs-handler'; +import { handler, Event } from '../../lib/aws-stepfunctions-tasks/eval-nodejs-handler'; beforeAll(() => { jest.spyOn(console, 'log').mockImplementation(); diff --git a/packages/aws-cdk-lib/aws-stepfunctions-tasks/lib/eval-nodejs-handler/.is_custom_resource b/packages/aws-cdk-lib/aws-stepfunctions-tasks/lib/eval-nodejs-handler/.is_custom_resource deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/aws-cdk-lib/aws-stepfunctions-tasks/lib/evaluate-expression.ts b/packages/aws-cdk-lib/aws-stepfunctions-tasks/lib/evaluate-expression.ts index 79546f2fd2973..ea3d55d711454 100644 --- a/packages/aws-cdk-lib/aws-stepfunctions-tasks/lib/evaluate-expression.ts +++ b/packages/aws-cdk-lib/aws-stepfunctions-tasks/lib/evaluate-expression.ts @@ -27,6 +27,8 @@ export interface EvaluateExpressionProps extends sfn.TaskStateBaseProps { /** * The event received by the Lambda function * + * Shared definition with packages/@aws-cdk/custom-resource-handlers/lib/custom-resources/aws-stepfunctions-tasks/index.ts + * * @internal */ export interface Event { @@ -119,7 +121,7 @@ function createEvalFn(runtime: lambda.Runtime | undefined, scope: Construct) { uuid, handler: 'index.handler', lambdaPurpose, - code: lambda.Code.fromAsset(path.join(__dirname, 'eval-nodejs-handler'), { + code: lambda.Code.fromAsset(path.join(__dirname, '..', '..', 'custom-resource-handlers', 'dist', 'aws-stepfunctions-tasks', 'eval-nodejs-handler'), { exclude: ['*.ts'], }), });