Skip to content
Merged
4 changes: 4 additions & 0 deletions types/aws-lambda/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,10 @@
{
"name": "Luciano Manerich Junior",
"githubUsername": "lmanerich"
},
{
"name": "Luciano M. Taranto",
"githubUsername": "LucianoTaranto"
}
]
}
117 changes: 114 additions & 3 deletions types/aws-lambda/test/cdk-custom-resource-tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,33 @@ import {
CdkCustomResourceIsCompleteHandler,
CdkCustomResourceIsCompleteResponse,
CdkCustomResourceResponse,
CloudFormationCustomResourceResourcePropertiesCommon,
} from "aws-lambda";

const onEventHandler: CdkCustomResourceHandler = async (event, context) => {
interface CustomResourceProperties extends CloudFormationCustomResourceResourcePropertiesCommon {
customSwitch: boolean;
}

interface CustomOnEventData {
customOutputString: string;
}

interface CustomIsCompleteData {
completedWithoutWarnings: boolean;
}

const defaultOnEventHandler: CdkCustomResourceHandler = async (event, context) => {
switch (event.RequestType) {
case "Create":
str = event.LogicalResourceId;
str = event.RequestId;
anyObj = event.ResourceProperties;
strOrUndefined = event.ResourceProperties.ServiceTimeout;
str = event.ResourceProperties.ServiceToken;
str = event.ResourceType;
str = event.ServiceToken;
// Should have custom comment to not use:
str = event.ResponseURL;
str = event.ServiceToken;
str = event.StackId;

// @ts-expect-error
Expand Down Expand Up @@ -51,12 +65,13 @@ const onEventHandler: CdkCustomResourceHandler = async (event, context) => {
return validEmptyResponse;
};

const onIsCompleteHandler: CdkCustomResourceIsCompleteHandler = async (event, context) => {
const defaultIsCompleteHandler: CdkCustomResourceIsCompleteHandler = async (event, context) => {
switch (event.RequestType) {
case "Create":
str = event.LogicalResourceId;
str = event.RequestId;
anyObj = event.ResourceProperties;
strOrUndefined = event.ResourceProperties.ServiceTimeout;
str = event.ResourceProperties.ServiceToken;
str = event.ResourceType;
// Should have custom comment to not use:
Expand Down Expand Up @@ -92,3 +107,99 @@ const onIsCompleteHandler: CdkCustomResourceIsCompleteHandler = async (event, co

return responseComplete;
};

const customOnEventHandler: CdkCustomResourceHandler<CustomResourceProperties, CustomOnEventData> = async (
event,
context,
) => {
switch (event.RequestType) {
case "Create":
str = event.LogicalResourceId;
str = event.RequestId;
anyObj = event.ResourceProperties;
strOrUndefined = event.ResourceProperties.ServiceTimeout;
str = event.ResourceProperties.ServiceToken;
bool = event.ResourceProperties.customSwitch;
str = event.ResourceType;
// Should have custom comment to not use:
str = event.ResponseURL;
str = event.ServiceToken;
str = event.StackId;

// @ts-expect-error
anyObj = event.OldResourceProperties;
// @ts-expect-error
str = event.PhysicalResourceId;
break;
case "Update":
anyObj = event.OldResourceProperties;
str = event.PhysicalResourceId;
break;
case "Delete":
str = event.PhysicalResourceId;
break;
}

const response: CdkCustomResourceResponse<CustomOnEventData> = {
PhysicalResourceId: str,
Data: {
customOutputString: str,
},
otherProperties: anyObj,
};

const invalidResponse: CdkCustomResourceResponse<CustomOnEventData> = {
// @ts-expect-error
PhysicalResourceId: num,
// @ts-expect-error
Data: str,
};

const validEmptyResponse: CdkCustomResourceResponse<CustomOnEventData> = {};
return validEmptyResponse;
};

const customIsCompleteHandler: CdkCustomResourceIsCompleteHandler<CustomResourceProperties, CustomIsCompleteData> =
async (event, context) => {
switch (event.RequestType) {
case "Create":
str = event.LogicalResourceId;
str = event.RequestId;
anyObj = event.ResourceProperties;
strOrUndefined = event.ResourceProperties.ServiceTimeout;
str = event.ResourceProperties.ServiceToken;
bool = event.ResourceProperties.customSwitch;
str = event.ResourceType;
// Should have custom comment to not use:
str = event.ResponseURL;
str = event.ServiceToken;
str = event.StackId;
break;
case "Update":
anyObj = event.OldResourceProperties;
str = event.PhysicalResourceId;
break;
case "Delete":
str = event.PhysicalResourceId;
break;
}

const responseComplete: CdkCustomResourceIsCompleteResponse<CustomIsCompleteData> = {
IsComplete: true,
Data: {
completedWithoutWarnings: true,
},
// @ts-expect-error
otherProperties: anyObj,
};

const responseWaiting: CdkCustomResourceIsCompleteResponse<CustomIsCompleteData> = {
IsComplete: false,
// @ts-expect-error
Data: {
stringKey: str,
},
};

return responseComplete;
};
180 changes: 179 additions & 1 deletion types/aws-lambda/test/cloudformation-tests.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,24 @@
import {
CloudFormationCustomResourceFailedResponse,
CloudFormationCustomResourceHandler,
CloudFormationCustomResourceResourcePropertiesCommon,
CloudFormationCustomResourceResponse,
CloudFormationCustomResourceSuccessResponse,
} from "aws-lambda";

const handler: CloudFormationCustomResourceHandler = async (event, context, callback) => {
interface CustomResourceProperties extends CloudFormationCustomResourceResourcePropertiesCommon {
customSwitch: boolean;
}

interface CustomOldResourceProperties extends CloudFormationCustomResourceResourcePropertiesCommon {
customNumber: number;
}

interface CustomData {
customOutputString: string;
}

const defaultHandler: CloudFormationCustomResourceHandler = async (event, context, callback) => {
switch (event.RequestType) {
case "Create":
str = event.LogicalResourceId;
Expand Down Expand Up @@ -73,3 +86,168 @@ const handler: CloudFormationCustomResourceHandler = async (event, context, call
callback();
callback(new Error());
};

const customHandler: CloudFormationCustomResourceHandler<CustomResourceProperties> = async (
event,
context,
callback,
) => {
switch (event.RequestType) {
case "Create":
str = event.LogicalResourceId;
str = event.RequestId;
anyObj = event.ResourceProperties;
strOrUndefined = event.ResourceProperties.ServiceTimeout;
str = event.ResourceProperties.ServiceToken;
bool = event.ResourceProperties.customSwitch;
str = event.ResourceType;
str = event.ResponseURL;
str = event.ServiceToken;
str = event.StackId;
break;
case "Update":
anyObj = event.OldResourceProperties;
strOrUndefined = event.OldResourceProperties.ServiceTimeout;
str = event.OldResourceProperties.ServiceToken;
bool = event.OldResourceProperties.customSwitch;
break;
case "Delete":
str = event.PhysicalResourceId;
break;
}

let response: CloudFormationCustomResourceResponse<CustomData>;
response = {
Data: {
customOutputString: str,
},
LogicalResourceId: str,
PhysicalResourceId: str,
Reason: strOrUndefined,
RequestId: str,
StackId: str,
Status: "SUCCESS",
NoEcho: boolOrUndefined,
};

let successResponse: CloudFormationCustomResourceSuccessResponse<CustomData>;
let failedResponse: CloudFormationCustomResourceFailedResponse<CustomData>;
successResponse = {
LogicalResourceId: str,
PhysicalResourceId: str,
RequestId: str,
StackId: str,
Status: "SUCCESS",
};
successResponse = {
Data: {
customOutputString: str,
},
LogicalResourceId: str,
PhysicalResourceId: str,
Reason: strOrUndefined,
RequestId: str,
StackId: str,
Status: "SUCCESS",
NoEcho: boolOrUndefined,
};
failedResponse = {
Data: {
customOutputString: str,
},
LogicalResourceId: str,
PhysicalResourceId: str,
Reason: str,
RequestId: str,
StackId: str,
Status: "FAILED",
};
response = successResponse;
response = failedResponse;

callback();
callback(new Error());
};

const customChangedHandler: CloudFormationCustomResourceHandler<CustomResourceProperties, CustomOldResourceProperties> =
async (
event,
context,
callback,
) => {
switch (event.RequestType) {
case "Create":
str = event.LogicalResourceId;
str = event.RequestId;
anyObj = event.ResourceProperties;
strOrUndefined = event.ResourceProperties.ServiceTimeout;
str = event.ResourceProperties.ServiceToken;
bool = event.ResourceProperties.customSwitch;
str = event.ResourceType;
str = event.ResponseURL;
str = event.ServiceToken;
str = event.StackId;
break;
case "Update":
anyObj = event.OldResourceProperties;
strOrUndefined = event.OldResourceProperties.ServiceTimeout;
str = event.OldResourceProperties.ServiceToken;
num = event.OldResourceProperties.customNumber;
break;
case "Delete":
str = event.PhysicalResourceId;
break;
}

let response: CloudFormationCustomResourceResponse<CustomData>;
response = {
Data: {
customOutputString: str,
},
LogicalResourceId: str,
PhysicalResourceId: str,
Reason: strOrUndefined,
RequestId: str,
StackId: str,
Status: "SUCCESS",
NoEcho: boolOrUndefined,
};

let successResponse: CloudFormationCustomResourceSuccessResponse<CustomData>;
let failedResponse: CloudFormationCustomResourceFailedResponse<CustomData>;
successResponse = {
LogicalResourceId: str,
PhysicalResourceId: str,
RequestId: str,
StackId: str,
Status: "SUCCESS",
};
successResponse = {
Data: {
customOutputString: str,
},
LogicalResourceId: str,
PhysicalResourceId: str,
Reason: strOrUndefined,
RequestId: str,
StackId: str,
Status: "SUCCESS",
NoEcho: boolOrUndefined,
};
failedResponse = {
Data: {
customOutputString: str,
},
LogicalResourceId: str,
PhysicalResourceId: str,
Reason: str,
RequestId: str,
StackId: str,
Status: "FAILED",
};
response = successResponse;
response = failedResponse;

callback();
callback(new Error());
};
Loading