@sylvesterllc/aws-constructs 1.1.25 → 1.1.26
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/dist/config/microServiceConfig.js +2 -2
- package/dist/resources/lambda/create-basic-lambda-helper.js +106 -23
- package/dist/resources/lambda/create-basic-lambda.js +106 -23
- package/package.json +1 -1
- package/src/config/microServiceConfig.ts +1 -1
- package/src/resources/lambda/create-basic-lambda-helper.ts +145 -26
- package/src/resources/lambda/create-basic-lambda.ts +146 -26
|
@@ -9,7 +9,7 @@ exports.config = {
|
|
|
9
9
|
name: `${process.env.APP_NAME}`,
|
|
10
10
|
accountNumber: process.env.CDK_DEFAULT_ACCOUNT || "",
|
|
11
11
|
region: process.env.CDK_DEFAULT_REGION || "us-east-1",
|
|
12
|
-
stackRuntime: aws_lambda_1.Runtime.
|
|
12
|
+
stackRuntime: aws_lambda_1.Runtime.NODEJS_LATEST,
|
|
13
13
|
},
|
|
14
14
|
API: {
|
|
15
15
|
Name: `${process.env.APP_NAME}-auth-api`,
|
|
@@ -79,4 +79,4 @@ exports.config = {
|
|
|
79
79
|
FQDN: ''
|
|
80
80
|
}
|
|
81
81
|
};
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9TZXJ2aWNlQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9taWNyb1NlcnZpY2VDb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQXNGO0FBQ3RGLHVEQUFpRDtBQUNqRCwyQ0FBd0M7QUFHM0IsUUFBQSxNQUFNLEdBQWU7SUFDOUIsT0FBTyxFQUFFO1FBQ0wsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUU7UUFDL0IsYUFBYSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLElBQUksRUFBRTtRQUNwRCxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsSUFBSSxXQUFXO1FBQ3JELFlBQVksRUFBRSxvQkFBTyxDQUFDLGFBQWE7S0FDdEM7SUFDRCxHQUFHLEVBQUU7UUFDRCxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsV0FBVztRQUN4QyxXQUFXLEVBQUUsb0JBQW9CO1FBQ2pDLFlBQVksRUFBRSxlQUFlO0tBQ2hDO0lBQ0QsU0FBUyxFQUFFO1FBQ1AsTUFBTSxFQUFFO1lBQ0o7Z0JBQ0ksSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsUUFBUSxFQUFFLDBDQUEwQztnQkFDcEQsT0FBTyxFQUFFLE1BQU07Z0JBQ2YsVUFBVSxFQUFFO29CQUNSLEtBQUssRUFBRSx5QkFBeUI7b0JBQ2hDLE1BQU0sRUFBRSxNQUFNO2lCQUNqQjthQUVKO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsUUFBUSxFQUFFLDJDQUEyQztnQkFDckQsT0FBTyxFQUFFLE1BQU07Z0JBQ2YsVUFBVSxFQUFFO29CQUNSLEtBQUssRUFBRSwwQkFBMEI7b0JBQ2pDLE1BQU0sRUFBRSxNQUFNO29CQUNkLE9BQU8sRUFBRSxDQUFDO2lCQUNiO2FBQ0o7U0FDSjtRQUVELE1BQU0sRUFBRTtZQUNKLE1BQU0sRUFBRTtnQkFDSjtvQkFDSSxTQUFTLEVBQUUsR0FBRyxxQkFBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFO29CQUNqRSxVQUFVLEVBQUU7d0JBQ1IsSUFBSSxFQUFFLElBQUk7d0JBQ1YsSUFBSSxFQUFFLDRCQUFhLENBQUMsTUFBTTtxQkFDN0I7b0JBQ0QsV0FBVyxFQUFFLDBCQUFXLENBQUMsZUFBZTtvQkFDeEMsT0FBTyxFQUFFO3dCQUNMOzRCQUNJLFNBQVMsRUFBRSxxQkFBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJOzRCQUNsRixZQUFZLEVBQUU7Z0NBQ1YsSUFBSSxFQUFFLFdBQVc7Z0NBQ2pCLElBQUksRUFBRSw0QkFBYSxDQUFDLE1BQU07NkJBQzdCOzRCQUNELGNBQWMsRUFBRSw2QkFBYyxDQUFDLEdBQUc7eUJBQ3JDO3dCQUNEOzRCQUNJLFNBQVMsRUFBRSxxQkFBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJOzRCQUM3RSxZQUFZLEVBQUU7Z0NBQ1YsSUFBSSxFQUFFLFVBQVU7Z0NBQ2hCLElBQUksRUFBRSw0QkFBYSxDQUFDLE1BQU07NkJBQzdCOzRCQUNELGNBQWMsRUFBRSw2QkFBYyxDQUFDLEdBQUc7eUJBQ3JDO3FCQUNKO2lCQUNKO2FBQ0o7U0FDSjtLQUVKO0lBQ0QsR0FBRyxFQUFFO1FBQ0QsUUFBUSxFQUFFLEVBQUU7UUFDWixNQUFNLEVBQUUsRUFBRTtRQUNWLHFCQUFxQixFQUFFLFVBQVU7UUFDakMscUJBQXFCLEVBQUUsVUFBVTtRQUNqQyxTQUFTLEVBQUUsSUFBSTtRQUNmLFFBQVEsRUFBRSxFQUFFO1FBQ1osSUFBSSxFQUFFLEVBQUU7S0FFWDtDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdHRyaWJ1dGVUeXBlLCBCaWxsaW5nTW9kZSwgUHJvamVjdGlvblR5cGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiXCI7XHJcbmltcG9ydCB7IFJ1bnRpbWUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xyXG5pbXBvcnQgeyBDT05TVEFOVFMgfSBmcm9tIFwiLi9Db25zdGFudHNcIjtcclxuaW1wb3J0IHsgSUFwcENvbmZpZyB9IGZyb20gXCIuL2N1c3RvbUNvbmZpZ3MvSUFwcENvbmZpZ1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IGNvbmZpZzogSUFwcENvbmZpZyA9IHtcclxuICAgIEdMT0JBTFM6IHtcclxuICAgICAgICBuYW1lOiBgJHtwcm9jZXNzLmVudi5BUFBfTkFNRX1gLFxyXG4gICAgICAgIGFjY291bnROdW1iZXI6IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX0FDQ09VTlQgfHwgXCJcIixcclxuICAgICAgICByZWdpb246IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX1JFR0lPTiB8fCBcInVzLWVhc3QtMVwiLFxyXG4gICAgICAgIHN0YWNrUnVudGltZTogUnVudGltZS5OT0RFSlNfTEFURVNULFxyXG4gICAgfSxcclxuICAgIEFQSToge1xyXG4gICAgICAgIE5hbWU6IGAke3Byb2Nlc3MuZW52LkFQUF9OQU1FfS1hdXRoLWFwaWAsXHJcbiAgICAgICAgRGVzY3JpcHRpb246ICdUaGlzIGlzIG15IG5ldyBBUEknLFxyXG4gICAgICAgIERvbWFpblByZWZpeDogJ215LWN1c3RvbS1hcGknXHJcbiAgICB9LFxyXG4gICAgUkVTT1VSQ0VTOiB7XHJcbiAgICAgICAgTEFNQkRBOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGBjcmVhdGUtYWNjb3VudGAsXHJcbiAgICAgICAgICAgICAgICBjb2RlUGF0aDogJy4vbGFtYmRhLWZ1bmN0aW9ucy9hdXRoL2NyZWF0ZUFjY291bnQudHMnLFxyXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogJ21haW4nLFxyXG4gICAgICAgICAgICAgICAgYXBpR2F0ZXdheToge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdXRlOiAnL2FjY291bnQvY3JlYXRlLWFjY291bnQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnLCAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogYGNoYW5nZS1wYXNzd29yZGAsXHJcbiAgICAgICAgICAgICAgICBjb2RlUGF0aDogJy4vbGFtYmRhLWZ1bmN0aW9ucy9hdXRoL2NoYW5nZVBhc3N3b3JkLnRzJyxcclxuICAgICAgICAgICAgICAgIGhhbmRsZXI6ICdtYWluJyxcclxuICAgICAgICAgICAgICAgIGFwaUdhdGV3YXk6IHtcclxuICAgICAgICAgICAgICAgICAgICByb3V0ZTogJy9hY2NvdW50L2NoYW5nZS1wYXNzd29yZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAncG9zdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogMlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgXHJcbiAgICAgICAgRFlOQU1POiB7XHJcbiAgICAgICAgICAgIFRBQkxFUzogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlTmFtZTogYCR7Q09OU1RBTlRTLkRZTkFNT0RCLlRBQkxFUy5BVVRIX0hJU1RPUllfVEFCTEUubmFtZX1gLFxyXG4gICAgICAgICAgICAgICAgICAgIHByaW1hcnlLZXk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2lkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogQXR0cmlidXRlVHlwZS5TVFJJTkcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBiaWxsaW5nTW9kZTogQmlsbGluZ01vZGUuUEFZX1BFUl9SRVFVRVNULFxyXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ZXM6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhOYW1lOiBDT05TVEFOVFMuRFlOQU1PREIuVEFCTEVTLkFVVEhfSElTVE9SWV9UQUJMRS5pbmRleGVzLkF1dGhIaXN0b3J5VFMubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbktleToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdjcmVhdGVkVFMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEF0dHJpYnV0ZVR5cGUuTlVNQkVSXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdGlvblR5cGU6IFByb2plY3Rpb25UeXBlLkFMTFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleE5hbWU6IENPTlNUQU5UUy5EWU5BTU9EQi5UQUJMRVMuQVVUSF9ISVNUT1JZX1RBQkxFLmluZGV4ZXMuVXNlcm5hbWUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbktleToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd1c2VybmFtZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogQXR0cmlidXRlVHlwZS5TVFJJTkdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0aW9uVHlwZTogUHJvamVjdGlvblR5cGUuQUxMXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICB9LFxyXG5cclxuICAgIH0sXHJcbiAgICBETlM6IHtcclxuICAgICAgICBab25lTmFtZTogJycsXHJcbiAgICAgICAgWm9uZUlkOiAnJyxcclxuICAgICAgICBab25lTmFtZVdpdGhvdXRQZXJpb2Q6ICdub3QtdXNlZCcsXHJcbiAgICAgICAgWm9uZU5hbWVXaXRob3V0U3VmZml4OiAnbm90LXVzZWQnLFxyXG4gICAgICAgIFpvbmVFeGlzdDogdHJ1ZSxcclxuICAgICAgICBIb3N0TmFtZTogJycsXHJcbiAgICAgICAgRlFETjogJydcclxuXHJcbiAgICB9XHJcbn07ICJdfQ==
|
|
@@ -5,8 +5,73 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
|
5
5
|
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
6
6
|
const aws_lambda_nodejs_1 = require("aws-cdk-lib/aws-lambda-nodejs");
|
|
7
7
|
const aws_logs_1 = require("aws-cdk-lib/aws-logs");
|
|
8
|
+
const fs = require("fs");
|
|
8
9
|
const path = require("path");
|
|
9
10
|
const aws_dynamodb_1 = require("aws-cdk-lib/aws-dynamodb");
|
|
11
|
+
const isSubPath = (root, target) => {
|
|
12
|
+
const relative = path.relative(path.resolve(root), path.resolve(target));
|
|
13
|
+
return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
|
|
14
|
+
};
|
|
15
|
+
const LOCK_FILE_NAMES = ["pnpm-lock.yaml", "yarn.lock", "package-lock.json"];
|
|
16
|
+
const resolveProjectRoot = (projectRoot) => {
|
|
17
|
+
if (!projectRoot) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
return path.isAbsolute(projectRoot)
|
|
21
|
+
? path.resolve(projectRoot)
|
|
22
|
+
: path.resolve(process.cwd(), projectRoot);
|
|
23
|
+
};
|
|
24
|
+
const findNearestLockFile = (startDir) => {
|
|
25
|
+
let current = path.resolve(startDir);
|
|
26
|
+
const { root } = path.parse(current);
|
|
27
|
+
while (true) {
|
|
28
|
+
for (const candidate of LOCK_FILE_NAMES) {
|
|
29
|
+
const resolvedCandidate = path.join(current, candidate);
|
|
30
|
+
if (fs.existsSync(resolvedCandidate) && fs.statSync(resolvedCandidate).isFile()) {
|
|
31
|
+
return resolvedCandidate;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (current === root) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
current = path.dirname(current);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const findCommonAncestor = (paths) => {
|
|
41
|
+
if (paths.length === 0) {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
let ancestor = path.resolve(paths[0]);
|
|
45
|
+
for (const currentPath of paths.slice(1)) {
|
|
46
|
+
const target = path.resolve(currentPath);
|
|
47
|
+
const ancestorRoot = path.parse(ancestor).root;
|
|
48
|
+
if (path.parse(ancestor).root.toLowerCase() !== path.parse(target).root.toLowerCase()) {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
let candidate = ancestor;
|
|
52
|
+
while (!isSubPath(candidate, target)) {
|
|
53
|
+
if (candidate === ancestorRoot) {
|
|
54
|
+
candidate = ancestorRoot;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
candidate = path.dirname(candidate);
|
|
58
|
+
}
|
|
59
|
+
ancestor = candidate;
|
|
60
|
+
}
|
|
61
|
+
return ancestor;
|
|
62
|
+
};
|
|
63
|
+
const resolvePath = (inputPath, projectRoot) => {
|
|
64
|
+
if (path.isAbsolute(inputPath)) {
|
|
65
|
+
return path.resolve(inputPath);
|
|
66
|
+
}
|
|
67
|
+
if (projectRoot) {
|
|
68
|
+
const candidateFromProjectRoot = path.resolve(projectRoot, inputPath);
|
|
69
|
+
if (isSubPath(projectRoot, candidateFromProjectRoot)) {
|
|
70
|
+
return candidateFromProjectRoot;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return path.resolve(process.cwd(), inputPath);
|
|
74
|
+
};
|
|
10
75
|
const createBasicLambda = (scope, props) => {
|
|
11
76
|
const lambdaProps = createBasicLambdaProps(props);
|
|
12
77
|
let lambdaFunction = new aws_lambda_nodejs_1.NodejsFunction(scope, `${props.appPrefix || ""}${props.functionName}`, lambdaProps);
|
|
@@ -16,26 +81,44 @@ const createBasicLambda = (scope, props) => {
|
|
|
16
81
|
};
|
|
17
82
|
exports.createBasicLambda = createBasicLambda;
|
|
18
83
|
const createBasicLambdaProps = (props) => {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
84
|
+
const resolvedProjectRoot = resolveProjectRoot(props.projectRoot);
|
|
85
|
+
const defaultRelativeEntry = path.join("resources", "lambdas", props.functionName, "main.mts");
|
|
86
|
+
const entryPath = props.codePath ?? defaultRelativeEntry;
|
|
87
|
+
const resolvedEntry = resolvePath(entryPath, resolvedProjectRoot);
|
|
88
|
+
const cwd = path.resolve(process.cwd());
|
|
89
|
+
const entryDir = path.dirname(resolvedEntry);
|
|
90
|
+
let effectiveProjectRoot = resolvedProjectRoot ?? cwd;
|
|
91
|
+
if (!isSubPath(effectiveProjectRoot, resolvedEntry)) {
|
|
92
|
+
const ancestor = findCommonAncestor([effectiveProjectRoot, entryDir]);
|
|
93
|
+
if (!ancestor) {
|
|
94
|
+
throw new Error(`Unable to determine a projectRoot that contains both ${effectiveProjectRoot} and ${resolvedEntry}.`);
|
|
95
|
+
}
|
|
96
|
+
effectiveProjectRoot = ancestor;
|
|
26
97
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
resolvedEntry = path.resolve(process.cwd(), props.projectRoot, `resources/lambdas/${props.functionName}/main.mts`);
|
|
98
|
+
if (!isSubPath(effectiveProjectRoot, resolvedEntry)) {
|
|
99
|
+
throw new Error(`Resolved lambda entry ${resolvedEntry} must be located within projectRoot ${effectiveProjectRoot}.`);
|
|
30
100
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
101
|
+
let resolvedDepsLockFilePath = props.depsLockFilePath
|
|
102
|
+
? resolvePath(props.depsLockFilePath, resolvedProjectRoot)
|
|
103
|
+
: undefined;
|
|
104
|
+
if (!resolvedDepsLockFilePath) {
|
|
105
|
+
const potentialLockFiles = [
|
|
106
|
+
findNearestLockFile(entryDir),
|
|
107
|
+
findNearestLockFile(cwd),
|
|
108
|
+
effectiveProjectRoot !== cwd ? findNearestLockFile(effectiveProjectRoot) : undefined,
|
|
109
|
+
];
|
|
110
|
+
for (const lockFile of potentialLockFiles) {
|
|
111
|
+
if (lockFile && isSubPath(effectiveProjectRoot, lockFile)) {
|
|
112
|
+
resolvedDepsLockFilePath = lockFile;
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
34
116
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
117
|
+
if (resolvedDepsLockFilePath &&
|
|
118
|
+
!isSubPath(effectiveProjectRoot, resolvedDepsLockFilePath)) {
|
|
119
|
+
throw new Error(`Resolved depsLockFilePath ${resolvedDepsLockFilePath} must be located within projectRoot ${effectiveProjectRoot}.`);
|
|
38
120
|
}
|
|
121
|
+
const environmentVars = props.envs ?? {};
|
|
39
122
|
const lambdaProp = {
|
|
40
123
|
entry: resolvedEntry,
|
|
41
124
|
functionName: `${props.appPrefix ? `${props.appPrefix}-` : ""}${props.functionName}`,
|
|
@@ -45,7 +128,7 @@ const createBasicLambdaProps = (props) => {
|
|
|
45
128
|
timeout: aws_cdk_lib_1.Duration.minutes(props.timeoutInMinutes ? props.timeoutInMinutes : 1),
|
|
46
129
|
memorySize: props.memory,
|
|
47
130
|
environment: {
|
|
48
|
-
...
|
|
131
|
+
...environmentVars,
|
|
49
132
|
},
|
|
50
133
|
bundling: {
|
|
51
134
|
minify: true,
|
|
@@ -53,15 +136,15 @@ const createBasicLambdaProps = (props) => {
|
|
|
53
136
|
sourceMap: true,
|
|
54
137
|
sourceMapMode: aws_lambda_nodejs_1.SourceMapMode.EXTERNAL,
|
|
55
138
|
environment: {
|
|
56
|
-
...
|
|
139
|
+
...environmentVars,
|
|
57
140
|
},
|
|
58
|
-
...(props.projectRoot && { projectRoot: props.projectRoot }),
|
|
59
|
-
...(props.depsLockFilePath && {
|
|
60
|
-
depsLockFilePath: props.depsLockFilePath,
|
|
61
|
-
}),
|
|
62
141
|
},
|
|
63
142
|
role: props.role,
|
|
64
143
|
layers: undefined,
|
|
144
|
+
...(effectiveProjectRoot && { projectRoot: effectiveProjectRoot }),
|
|
145
|
+
...(resolvedDepsLockFilePath && {
|
|
146
|
+
depsLockFilePath: resolvedDepsLockFilePath,
|
|
147
|
+
}),
|
|
65
148
|
};
|
|
66
149
|
return lambdaProp;
|
|
67
150
|
};
|
|
@@ -81,4 +164,4 @@ const addLambdaLayers = (scope, lambda, layerArns) => {
|
|
|
81
164
|
});
|
|
82
165
|
}
|
|
83
166
|
};
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWJhc2ljLWxhbWJkYS1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVzb3VyY2VzL2xhbWJkYS9jcmVhdGUtYmFzaWMtbGFtYmRhLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBdUM7QUFFdkMsdURBQStEO0FBQy9ELHFFQUl1QztBQUN2QyxtREFBcUQ7QUFDckQsNkJBQThCO0FBRzlCLDJEQUFpRDtBQUUxQyxNQUFNLGlCQUFpQixHQUFHLENBQy9CLEtBQWdCLEVBQ2hCLEtBQWtCLEVBQ0YsRUFBRTtJQUNsQixNQUFNLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVsRCxJQUFJLGNBQWMsR0FBRyxJQUFJLGtDQUFjLENBQ3JDLEtBQUssRUFDTCxHQUFHLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFDL0MsV0FBVyxDQUNaLENBQUM7SUFFRix5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRXpFLGVBQWUsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUU3RCxPQUFPLGNBQWMsQ0FBQztBQUN4QixDQUFDLENBQUM7QUFqQlcsUUFBQSxpQkFBaUIscUJBaUI1QjtBQUVGLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxLQUFrQixFQUF1QixFQUFFO0lBQ3pFLElBQUksYUFBcUIsQ0FBQztJQUUxQixJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN0RCxhQUFhLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUNqQyxDQUFDO1NBQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxXQUFX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QixTQUFvQixFQUNwQixFQUFFO0lBQ0YsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0QyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBVyxFQUFFLEdBQVcsRUFBRSxFQUFFO1lBQzdDLE1BQU0sS0FBSyxHQUFHLHlCQUFZLENBQUMsbUJBQW1CLENBQzVDLEtBQUssRUFDTCxnQkFBZ0IsR0FBRyxFQUFFLEVBQ3JCLEdBQUcsQ0FDSixDQUFDO1lBRUYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcclxuaW1wb3J0IHsgTGF5ZXJWZXJzaW9uLCBSdW50aW1lIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcclxuaW1wb3J0IHtcclxuICBOb2RlanNGdW5jdGlvbixcclxuICBOb2RlanNGdW5jdGlvblByb3BzLFxyXG4gIFNvdXJjZU1hcE1vZGUsXHJcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCI7XHJcbmltcG9ydCB7IFJldGVudGlvbkRheXMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcclxuaW1wb3J0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuaW1wb3J0IHsgTGFtYmRhUHJvcHMgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9sYW1iZGFcIjtcclxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcclxuaW1wb3J0IHsgVGFibGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiXCI7XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlQmFzaWNMYW1iZGEgPSAoXHJcbiAgc2NvcGU6IENvbnN0cnVjdCxcclxuICBwcm9wczogTGFtYmRhUHJvcHNcclxuKTogTm9kZWpzRnVuY3Rpb24gPT4ge1xyXG4gIGNvbnN0IGxhbWJkYVByb3BzID0gY3JlYXRlQmFzaWNMYW1iZGFQcm9wcyhwcm9wcyk7XHJcblxyXG4gIGxldCBsYW1iZGFGdW5jdGlvbiA9IG5ldyBOb2RlanNGdW5jdGlvbihcclxuICAgIHNjb3BlLFxyXG4gICAgYCR7cHJvcHMuYXBwUHJlZml4IHx8IFwiXCJ9JHtwcm9wcy5mdW5jdGlvbk5hbWV9YCxcclxuICAgIGxhbWJkYVByb3BzXHJcbiAgKTtcclxuXHJcbiAgZ3JhbnRBY2Nlc3NUb0R5bmFtb1RhYmxlcyhzY29wZSwgbGFtYmRhRnVuY3Rpb24sIHByb3BzLmR5bmFtb1RhYmxlTmFtZXMpO1xyXG5cclxuICBhZGRMYW1iZGFMYXllcnMoc2NvcGUsIGxhbWJkYUZ1bmN0aW9uLCBwcm9wcy5sYW1iZGFMYXllckFybik7XHJcblxyXG4gIHJldHVybiBsYW1iZGFGdW5jdGlvbjtcclxufTtcclxuXHJcbmNvbnN0IGNyZWF0ZUJhc2ljTGFtYmRhUHJvcHMgPSAocHJvcHM6IExhbWJkYVByb3BzKTogTm9kZWpzRnVuY3Rpb25Qcm9wcyA9PiB7XHJcbiAgbGV0IHJlc29sdmVkRW50cnk6IHN0cmluZztcclxuXHJcbiAgaWYgKHByb3BzLmNvZGVQYXRoICYmIHBhdGguaXNBYnNvbHV0ZShwcm9wcy5jb2RlUGF0aCkpIHtcclxuICAgIHJlc29sdmVkRW50cnkgPSBwcm9wcy5jb2RlUGF0aDtcclxuICB9IGVsc2UgaWYgKHByb3BzLmNvZGVQYXRoICYmIHByb3BzLnByb2plY3RSb290KSB7XHJcbiAgICAvLyBjb2RlUGF0aCBpcyByZWxhdGl2ZSwgcmVzb2x2ZSBmcm9tIGN1cnJlbnQgZGlyZWN0b3J5ICsgcHJvamVjdFJvb3RcclxuICAgIHJlc29sdmVkRW50cnkgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcHJvcHMuY29kZVBhdGgpO1xyXG4gIH0gZWxzZSBpZiAocHJvcHMucHJvamVjdFJvb3QpIHtcclxuICAgIC8vIE5vIGNvZGVQYXRoLCB1c2UgZGVmYXVsdCBwYXRoIHdpdGggcHJvamVjdFJvb3RcclxuICAgIHJlc29sdmVkRW50cnkgPSBwYXRoLnJlc29sdmUoXHJcbiAgICAgIHByb2Nlc3MuY3dkKCksXHJcbiAgICAgIHByb3BzLnByb2plY3RSb290LFxyXG4gICAgICBgcmVzb3VyY2VzL2xhbWJkYXMvJHtwcm9wcy5mdW5jdGlvbk5hbWV9L21haW4ubXRzYFxyXG4gICAgKTtcclxuICB9IGVsc2UgaWYgKHByb3BzLmNvZGVQYXRoKSB7XHJcbiAgICAvLyBjb2RlUGF0aCB3aXRob3V0IHByb2plY3RSb290XHJcbiAgICByZXNvbHZlZEVudHJ5ID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHByb3BzLmNvZGVQYXRoKTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gRGVmYXVsdCBwYXRoIHdpdGhvdXQgcHJvamVjdFJvb3RcclxuICAgIHJlc29sdmVkRW50cnkgPSBwYXRoLmpvaW4oXHJcbiAgICAgIGAuL3Jlc291cmNlcy9sYW1iZGFzLyR7cHJvcHMuZnVuY3Rpb25OYW1lfS9tYWluLm10c2BcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBsYW1iZGFQcm9wOiBOb2RlanNGdW5jdGlvblByb3BzID0ge1xyXG4gICAgZW50cnk6IHJlc29sdmVkRW50cnksXHJcbiAgICBmdW5jdGlvbk5hbWU6IGAke3Byb3BzLmFwcFByZWZpeCA/IGAke3Byb3BzLmFwcFByZWZpeH0tYCA6IFwiXCJ9JHtcclxuICAgICAgcHJvcHMuZnVuY3Rpb25OYW1lXHJcbiAgICB9YCxcclxuICAgIGhhbmRsZXI6IFwibWFpbi50c1wiLFxyXG4gICAgbG9nUmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcclxuICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTX0xBVEVTVCxcclxuICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoXHJcbiAgICAgIHByb3BzLnRpbWVvdXRJbk1pbnV0ZXMgPyBwcm9wcy50aW1lb3V0SW5NaW51dGVzIDogMVxyXG4gICAgKSxcclxuICAgIG1lbW9yeVNpemU6IHByb3BzLm1lbW9yeSxcclxuICAgIGVudmlyb25tZW50OiB7XHJcbiAgICAgIC4uLnByb3BzLmVudnMsXHJcbiAgICB9LFxyXG4gICAgYnVuZGxpbmc6IHtcclxuICAgICAgbWluaWZ5OiB0cnVlLFxyXG4gICAgICB0YXJnZXQ6IGBlc25leHRgLFxyXG4gICAgICBzb3VyY2VNYXA6IHRydWUsXHJcbiAgICAgIHNvdXJjZU1hcE1vZGU6IFNvdXJjZU1hcE1vZGUuRVhURVJOQUwsXHJcbiAgICAgIGVudmlyb25tZW50OiB7XHJcbiAgICAgICAgLi4ucHJvcHMuZW52cyxcclxuICAgICAgfSxcclxuICAgICAgLi4uKHByb3BzLnByb2plY3RSb290ICYmIHsgcHJvamVjdFJvb3Q6IHByb3BzLnByb2plY3RSb290IH0pLFxyXG4gICAgICAuLi4ocHJvcHMuZGVwc0xvY2tGaWxlUGF0aCAmJiB7XHJcbiAgICAgICAgZGVwc0xvY2tGaWxlUGF0aDogcHJvcHMuZGVwc0xvY2tGaWxlUGF0aCxcclxuICAgICAgfSksXHJcbiAgICB9LFxyXG4gICAgcm9sZTogcHJvcHMucm9sZSxcclxuICAgIGxheWVyczogdW5kZWZpbmVkLFxyXG4gIH07XHJcblxyXG4gIHJldHVybiBsYW1iZGFQcm9wO1xyXG59O1xyXG5cclxuY29uc3QgZ3JhbnRBY2Nlc3NUb0R5bmFtb1RhYmxlcyA9IChcclxuICBzY29wZTogQ29uc3RydWN0LFxyXG4gIGxhbWJkYTogTm9kZWpzRnVuY3Rpb24sXHJcbiAgdGFibGVOYW1lcz86IHN0cmluZ1tdXHJcbikgPT4ge1xyXG4gIGlmICh0YWJsZU5hbWVzICYmIHRhYmxlTmFtZXMubGVuZ3RoID4gMCkge1xyXG4gICAgdGFibGVOYW1lcy5mb3JFYWNoKCh0YWJsZU5hbWUpID0+IHtcclxuICAgICAgY29uc3QgdGFibGUgPSBUYWJsZS5mcm9tVGFibGVOYW1lKHNjb3BlLCBgJHt0YWJsZU5hbWV9LXRhYmxlYCwgdGFibGVOYW1lKTtcclxuXHJcbiAgICAgIHRhYmxlLmdyYW50UmVhZFdyaXRlRGF0YShsYW1iZGEpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgYWRkTGFtYmRhTGF5ZXJzID0gKFxyXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXHJcbiAgbGFtYmRhOiBOb2RlanNGdW5jdGlvbixcclxuICBsYXllckFybnM/OiBzdHJpbmdbXVxyXG4pID0+IHtcclxuICBpZiAobGF5ZXJBcm5zICYmIGxheWVyQXJucy5sZW5ndGggPiAwKSB7XHJcbiAgICBsYXllckFybnMuZm9yRWFjaCgoYXJuOiBzdHJpbmcsIGlkeDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxheWVyID0gTGF5ZXJWZXJzaW9uLmZyb21MYXllclZlcnNpb25Bcm4oXHJcbiAgICAgICAgc2NvcGUsXHJcbiAgICAgICAgYGNvbW1vbi1sYXllci0ke2lkeH1gLFxyXG4gICAgICAgIGFyblxyXG4gICAgICApO1xyXG5cclxuICAgICAgbGFtYmRhLmFkZExheWVycyhsYXllcik7XHJcbiAgICB9KTtcclxuICB9XHJcbn07XHJcbiJdfQ==
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWJhc2ljLWxhbWJkYS1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVzb3VyY2VzL2xhbWJkYS9jcmVhdGUtYmFzaWMtbGFtYmRhLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBdUM7QUFFdkMsdURBQStEO0FBQy9ELHFFQUl1QztBQUN2QyxtREFBcUQ7QUFDckQseUJBQTBCO0FBQzFCLDZCQUE4QjtBQUc5QiwyREFBaUQ7QUFFakQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFZLEVBQUUsTUFBYyxFQUFXLEVBQUU7SUFDMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN6RSxPQUFPLFFBQVEsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDdkYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxlQUFlLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUU3RSxNQUFNLGtCQUFrQixHQUFHLENBQUMsV0FBb0IsRUFBc0IsRUFBRTtJQUN0RSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7UUFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMv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LENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xyXG5pbXBvcnQgeyBMYXllclZlcnNpb24sIFJ1bnRpbWUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xyXG5pbXBvcnQge1xyXG4gIE5vZGVqc0Z1bmN0aW9uLFxyXG4gIE5vZGVqc0Z1bmN0aW9uUHJvcHMsXHJcbiAgU291cmNlTWFwTW9kZSxcclxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanNcIjtcclxuaW1wb3J0IHsgUmV0ZW50aW9uRGF5cyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xyXG5pbXBvcnQgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbmltcG9ydCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbmltcG9ydCB7IExhbWJkYVByb3BzIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvbGFtYmRhXCI7XHJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XHJcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1keW5hbW9kYlwiO1xyXG5cclxuY29uc3QgaXNTdWJQYXRoID0gKHJvb3Q6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICBjb25zdCByZWxhdGl2ZSA9IHBhdGgucmVsYXRpdmUocGF0aC5yZXNvbHZlKHJvb3QpLCBwYXRoLnJlc29sdmUodGFyZ2V0KSk7XHJcbiAgcmV0dXJuIHJlbGF0aXZlID09PSBcIlwiIHx8ICghcmVsYXRpdmUuc3RhcnRzV2l0aChcIi4uXCIpICYmICFwYXRoLmlzQWJzb2x1dGUocmVsYXRpdmUpKTtcclxufTtcclxuXHJcbmNvbnN0IExPQ0tfRklMRV9OQU1FUyA9IFtcInBucG0tbG9jay55YW1sXCIsIFwieWFybi5sb2NrXCIsIFwicGFja2FnZS1sb2NrLmpzb25cIl07XHJcblxyXG5jb25zdCByZXNvbHZlUHJvamVjdFJvb3QgPSAocHJvamVjdFJvb3Q/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xyXG4gIGlmICghcHJvamVjdFJvb3QpIHtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcGF0aC5pc0Fic29sdXRlKHByb2plY3RSb290KVxyXG4gICAgPyBwYXRoLnJlc29sdmUocHJvamVjdFJvb3QpXHJcbiAgICA6IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBwcm9qZWN0Um9vdCk7XHJcbn07XHJcblxyXG5jb25zdCBmaW5kTmVhcmVzdExvY2tGaWxlID0gKHN0YXJ0RGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xyXG4gIGxldCBjdXJyZW50ID0gcGF0aC5yZXNvbHZlKHN0YXJ0RGlyKTtcclxuICBjb25zdCB7IHJvb3QgfSA9IHBhdGgucGFyc2UoY3VycmVudCk7XHJcblxyXG4gIHdoaWxlICh0cnVlKSB7XHJcbiAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBMT0NLX0ZJTEVfTkFNRVMpIHtcclxuICAgICAgY29uc3QgcmVzb2x2ZWRDYW5kaWRhdGUgPSBwYXRoLmpvaW4oY3VycmVudCwgY2FuZGlkYXRlKTtcclxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocmVzb2x2ZWRDYW5kaWRhdGUpICYmIGZzLnN0YXRTeW5jKHJlc29sdmVkQ2FuZGlkYXRlKS5pc0ZpbGUoKSkge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlZENhbmRpZGF0ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXJyZW50ID09PSByb290KSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgY3VycmVudCA9IHBhdGguZGlybmFtZShjdXJyZW50KTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBmaW5kQ29tbW9uQW5jZXN0b3IgPSAocGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcclxuICBpZiAocGF0aHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgbGV0IGFuY2VzdG9yID0gcGF0aC5yZXNvbHZlKHBhdGhzWzBdKTtcclxuXHJcbiAgZm9yIChjb25zdCBjdXJyZW50UGF0aCBvZiBwYXRocy5zbGljZSgxKSkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gcGF0aC5yZXNvbHZlKGN1cnJlbnRQYXRoKTtcclxuICAgIGNvbnN0IGFuY2VzdG9yUm9vdCA9IHBhdGgucGFyc2UoYW5jZXN0b3IpLnJvb3Q7XHJcblxyXG4gICAgaWYgKHBhdGgucGFyc2UoYW5jZXN0b3IpLnJvb3QudG9Mb3dlckNhc2UoKSAhPT0gcGF0aC5wYXJzZSh0YXJnZXQpLnJvb3QudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjYW5kaWRhdGUgPSBhbmNlc3RvcjtcclxuICAgIHdoaWxlICghaXNTdWJQYXRoKGNhbmRpZGF0ZSwgdGFyZ2V0KSkge1xyXG4gICAgICBpZiAoY2FuZGlkYXRlID09PSBhbmNlc3RvclJvb3QpIHtcclxuICAgICAgICBjYW5kaWRhdGUgPSBhbmNlc3RvclJvb3Q7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FuZGlkYXRlID0gcGF0aC5kaXJuYW1lKGNhbmRpZGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYW5jZXN0b3IgPSBjYW5kaWRhdGU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gYW5jZXN0b3I7XHJcbn07XHJcblxyXG5jb25zdCByZXNvbHZlUGF0aCA9IChpbnB1dFBhdGg6IHN0cmluZywgcHJvamVjdFJvb3Q/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGlmIChwYXRoLmlzQWJzb2x1dGUoaW5wdXRQYXRoKSkge1xyXG4gICAgcmV0dXJuIHBhdGgucmVzb2x2ZShpbnB1dFBhdGgpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHByb2plY3RSb290KSB7XHJcbiAgICBjb25zdCBjYW5kaWRhdGVGcm9tUHJvamVjdFJvb3QgPSBwYXRoLnJlc29sdmUocHJvamVjdFJvb3QsIGlucHV0UGF0aCk7XHJcbiAgICBpZiAoaXNTdWJQYXRoKHByb2plY3RSb290LCBjYW5kaWRhdGVGcm9tUHJvamVjdFJvb3QpKSB7XHJcbiAgICAgIHJldHVybiBjYW5kaWRhdGVGcm9tUHJvamVjdFJvb3Q7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIGlucHV0UGF0aCk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlQmFzaWNMYW1iZGEgPSAoXHJcbiAgc2NvcGU6IENvbnN0cnVjdCxcclxuICBwcm9wczogTGFtYmRhUHJvcHNcclxuKTogTm9kZWpzRnVuY3Rpb24gPT4ge1xyXG4gIGNvbnN0IGxhbWJkYVByb3BzID0gY3JlYXRlQmFzaWNMYW1iZGFQcm9wcyhwcm9wcyk7XHJcblxyXG4gIGxldCBsYW1iZGFGdW5jdGlvbiA9IG5ldyBOb2RlanNGdW5jdGlvbihcclxuICAgIHNjb3BlLFxyXG4gICAgYCR7cHJvcHMuYXBwUHJlZml4IHx8IFwiXCJ9JHtwcm9wcy5mdW5jdGlvbk5hbWV9YCxcclxuICAgIGxhbWJkYVByb3BzXHJcbiAgKTtcclxuXHJcbiAgZ3JhbnRBY2Nlc3NUb0R5bmFtb1RhYmxlcyhzY29wZSwgbGFtYmRhRnVuY3Rpb24sIHByb3BzLmR5bmFtb1RhYmxlTmFtZXMpO1xyXG5cclxuICBhZGRMYW1iZGFMYXllcnMoc2NvcGUsIGxhbWJkYUZ1bmN0aW9uLCBwcm9wcy5sYW1iZGFMYXllckFybik7XHJcblxyXG4gIHJldHVybiBsYW1iZGFGdW5jdGlvbjtcclxufTtcclxuXHJcbmNvbnN0IGNyZWF0ZUJhc2ljTGFtYmRhUHJvcHMgPSAocHJvcHM6IExhbWJkYVByb3BzKTogTm9kZWpzRnVuY3Rpb25Qcm9wcyA9PiB7XHJcbiAgY29uc3QgcmVzb2x2ZWRQcm9qZWN0Um9vdCA9IHJlc29sdmVQcm9qZWN0Um9vdChwcm9wcy5wcm9qZWN0Um9vdCk7XHJcbiAgY29uc3QgZGVmYXVsdFJlbGF0aXZlRW50cnkgPSBwYXRoLmpvaW4oXHJcbiAgICBcInJlc291cmNlc1wiLFxyXG4gICAgXCJsYW1iZGFzXCIsXHJcbiAgICBwcm9wcy5mdW5jdGlvbk5hbWUsXHJcbiAgICBcIm1haW4ubXRzXCJcclxuICApO1xyXG4gIGNvbnN0IGVudHJ5UGF0aCA9IHByb3BzLmNvZGVQYXRoID8/IGRlZmF1bHRSZWxhdGl2ZUVudHJ5O1xyXG4gIGNvbnN0IHJlc29sdmVkRW50cnkgPSByZXNvbHZlUGF0aChlbnRyeVBhdGgsIHJlc29sdmVkUHJvamVjdFJvb3QpO1xyXG5cclxuICBjb25zdCBjd2QgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSk7XHJcbiAgY29uc3QgZW50cnlEaXIgPSBwYXRoLmRpcm5hbWUocmVzb2x2ZWRFbnRyeSk7XHJcblxyXG4gIGxldCBlZmZlY3RpdmVQcm9qZWN0Um9vdCA9IHJlc29sdmVkUHJvamVjdFJvb3QgPz8gY3dkO1xyXG4gIGlmICghaXNTdWJQYXRoKGVmZmVjdGl2ZVByb2plY3RSb290LCByZXNvbHZlZEVudHJ5KSkge1xyXG4gICAgY29uc3QgYW5jZXN0b3IgPSBmaW5kQ29tbW9uQW5jZXN0b3IoW2VmZmVjdGl2ZVByb2plY3RSb290LCBlbnRyeURpcl0pO1xyXG4gICAgaWYgKCFhbmNlc3Rvcikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYFVuYWJsZSB0byBkZXRlcm1pbmUgYSBwcm9qZWN0Um9vdCB0aGF0IGNvbnRhaW5zIGJvdGggJHtlZmZlY3RpdmVQcm9qZWN0Um9vdH0gYW5kICR7cmVzb2x2ZWRFbnRyeX0uYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgZWZmZWN0aXZlUHJvamVjdFJvb3QgPSBhbmNlc3RvcjtcclxuICB9XHJcblxyXG4gIGlmICghaXNTdWJQYXRoKGVmZmVjdGl2ZVByb2plY3RSb290LCByZXNvbHZlZEVudHJ5KSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICBgUmVzb2x2ZWQgbGFtYmRhIGVudHJ5ICR7cmVzb2x2ZWRFbnRyeX0gbXVzdCBiZSBsb2NhdGVkIHdpdGhpbiBwcm9qZWN0Um9vdCAke2VmZmVjdGl2ZVByb2plY3RSb290fS5gXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbGV0IHJlc29sdmVkRGVwc0xvY2tGaWxlUGF0aCA9IHByb3BzLmRlcHNMb2NrRmlsZVBhdGhcclxuICAgID8gcmVzb2x2ZVBhdGgocHJvcHMuZGVwc0xvY2tGaWxlUGF0aCwgcmVzb2x2ZWRQcm9qZWN0Um9vdClcclxuICAgIDogdW5kZWZpbmVkO1xyXG5cclxuICBpZiAoIXJlc29sdmVkRGVwc0xvY2tGaWxlUGF0aCkge1xyXG4gICAgY29uc3QgcG90ZW50aWFsTG9ja0ZpbGVzID0gW1xyXG4gICAgICBmaW5kTmVhcmVzdExvY2tGaWxlKGVudHJ5RGlyKSxcclxuICAgICAgZmluZE5lYXJlc3RMb2NrRmlsZShjd2QpLFxyXG4gICAgICBlZmZlY3RpdmVQcm9qZWN0Um9vdCAhPT0gY3dkID8gZmluZE5lYXJlc3RMb2NrRmlsZShlZmZlY3RpdmVQcm9qZWN0Um9vdCkgOiB1bmRlZmluZWQsXHJcbiAgICBdO1xyXG5cclxuICAgIGZvciAoY29uc3QgbG9ja0ZpbGUgb2YgcG90ZW50aWFsTG9ja0ZpbGVzKSB7XHJcbiAgICAgIGlmIChsb2NrRmlsZSAmJiBpc1N1YlBhdGgoZWZmZWN0aXZlUHJvamVjdFJvb3QsIGxvY2tGaWxlKSkge1xyXG4gICAgICAgIHJlc29sdmVkRGVwc0xvY2tGaWxlUGF0aCA9IGxvY2tGaWxlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAoXHJcbiAgICByZXNvbHZlZERlcHNMb2NrRmlsZVBhdGggJiZcclxuICAgICFpc1N1YlBhdGgoZWZmZWN0aXZlUHJvamVjdFJvb3QsIHJlc29sdmVkRGVwc0xvY2tGaWxlUGF0aClcclxuICApIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgYFJlc29sdmVkIGRlcHNMb2NrRmlsZVBhdGggJHtyZXNvbHZlZERlcHNMb2NrRmlsZVBhdGh9IG11c3QgYmUgbG9jYXRlZCB3aXRoaW4gcHJvamVjdFJvb3QgJHtlZmZlY3RpdmVQcm9qZWN0Um9vdH0uYFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGVudmlyb25tZW50VmFycyA9IHByb3BzLmVudnMgPz8ge307XHJcblxyXG4gIGNvbnN0IGxhbWJkYVByb3A6IE5vZGVqc0Z1bmN0aW9uUHJvcHMgPSB7XHJcbiAgICBlbnRyeTogcmVzb2x2ZWRFbnRyeSxcclxuICAgIGZ1bmN0aW9uTmFtZTogYCR7cHJvcHMuYXBwUHJlZml4ID8gYCR7cHJvcHMuYXBwUHJlZml4fS1gIDogXCJcIn0ke1xyXG4gICAgICBwcm9wcy5mdW5jdGlvbk5hbWVcclxuICAgIH1gLFxyXG4gICAgaGFuZGxlcjogXCJtYWluLnRzXCIsXHJcbiAgICBsb2dSZXRlbnRpb246IFJldGVudGlvbkRheXMuVFdPX1dFRUtTLFxyXG4gICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfTEFURVNULFxyXG4gICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcyhcclxuICAgICAgcHJvcHMudGltZW91dEluTWludXRlcyA/IHByb3BzLnRpbWVvdXRJbk1pbnV0ZXMgOiAxXHJcbiAgICApLFxyXG4gICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5LFxyXG4gICAgZW52aXJvbm1lbnQ6IHtcclxuICAgICAgLi4uZW52aXJvbm1lbnRWYXJzLFxyXG4gICAgfSxcclxuICAgIGJ1bmRsaW5nOiB7XHJcbiAgICAgIG1pbmlmeTogdHJ1ZSxcclxuICAgICAgdGFyZ2V0OiBgZXNuZXh0YCxcclxuICAgICAgc291cmNlTWFwOiB0cnVlLFxyXG4gICAgICBzb3VyY2VNYXBNb2RlOiBTb3VyY2VNYXBNb2RlLkVYVEVSTkFMLFxyXG4gICAgICBlbnZpcm9ubWVudDoge1xyXG4gICAgICAgIC4uLmVudmlyb25tZW50VmFycyxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICByb2xlOiBwcm9wcy5yb2xlLFxyXG4gICAgbGF5ZXJzOiB1bmRlZmluZWQsXHJcbiAgICAuLi4oZWZmZWN0aXZlUHJvamVjdFJvb3QgJiYgeyBwcm9qZWN0Um9vdDogZWZmZWN0aXZlUHJvamVjdFJvb3QgfSksXHJcbiAgICAuLi4ocmVzb2x2ZWREZXBzTG9ja0ZpbGVQYXRoICYmIHtcclxuICAgICAgZGVwc0xvY2tGaWxlUGF0aDogcmVzb2x2ZWREZXBzTG9ja0ZpbGVQYXRoLFxyXG4gICAgfSksXHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIGxhbWJkYVByb3A7XHJcbn07XHJcblxyXG5jb25zdCBncmFudEFjY2Vzc1RvRHluYW1vVGFibGVzID0gKFxyXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXHJcbiAgbGFtYmRhOiBOb2RlanNGdW5jdGlvbixcclxuICB0YWJsZU5hbWVzPzogc3RyaW5nW11cclxuKSA9PiB7XHJcbiAgaWYgKHRhYmxlTmFtZXMgJiYgdGFibGVOYW1lcy5sZW5ndGggPiAwKSB7XHJcbiAgICB0YWJsZU5hbWVzLmZvckVhY2goKHRhYmxlTmFtZSkgPT4ge1xyXG4gICAgICBjb25zdCB0YWJsZSA9IFRhYmxlLmZyb21UYWJsZU5hbWUoc2NvcGUsIGAke3RhYmxlTmFtZX0tdGFibGVgLCB0YWJsZU5hbWUpO1xyXG5cclxuICAgICAgdGFibGUuZ3JhbnRSZWFkV3JpdGVEYXRhKGxhbWJkYSk7XHJcbiAgICB9KTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBhZGRMYW1iZGFMYXllcnMgPSAoXHJcbiAgc2NvcGU6IENvbnN0cnVjdCxcclxuICBsYW1iZGE6IE5vZGVqc0Z1bmN0aW9uLFxyXG4gIGxheWVyQXJucz86IHN0cmluZ1tdXHJcbikgPT4ge1xyXG4gIGlmIChsYXllckFybnMgJiYgbGF5ZXJBcm5zLmxlbmd0aCA+IDApIHtcclxuICAgIGxheWVyQXJucy5mb3JFYWNoKChhcm46IHN0cmluZywgaWR4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgbGF5ZXIgPSBMYXllclZlcnNpb24uZnJvbUxheWVyVmVyc2lvbkFybihcclxuICAgICAgICBzY29wZSxcclxuICAgICAgICBgY29tbW9uLWxheWVyLSR7aWR4fWAsXHJcbiAgICAgICAgYXJuXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBsYW1iZGEuYWRkTGF5ZXJzKGxheWVyKTtcclxuICAgIH0pO1xyXG4gIH1cclxufTtcclxuIl19
|
|
@@ -6,11 +6,76 @@ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
|
6
6
|
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
7
7
|
const aws_lambda_nodejs_1 = require("aws-cdk-lib/aws-lambda-nodejs");
|
|
8
8
|
const aws_logs_1 = require("aws-cdk-lib/aws-logs");
|
|
9
|
+
const fs = require("fs");
|
|
9
10
|
const path = require("path");
|
|
10
11
|
const aws_service_principal_constants_1 = require("../../constants/aws-service-principal-constants");
|
|
11
12
|
const aws_events_1 = require("aws-cdk-lib/aws-events");
|
|
12
13
|
const aws_events_targets_1 = require("aws-cdk-lib/aws-events-targets");
|
|
13
14
|
const aws_dynamodb_1 = require("aws-cdk-lib/aws-dynamodb");
|
|
15
|
+
const isSubPath = (root, target) => {
|
|
16
|
+
const relative = path.relative(path.resolve(root), path.resolve(target));
|
|
17
|
+
return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
|
|
18
|
+
};
|
|
19
|
+
const LOCK_FILE_NAMES = ["pnpm-lock.yaml", "yarn.lock", "package-lock.json"];
|
|
20
|
+
const resolveProjectRoot = (projectRoot) => {
|
|
21
|
+
if (!projectRoot) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
return path.isAbsolute(projectRoot)
|
|
25
|
+
? path.resolve(projectRoot)
|
|
26
|
+
: path.resolve(process.cwd(), projectRoot);
|
|
27
|
+
};
|
|
28
|
+
const findNearestLockFile = (startDir) => {
|
|
29
|
+
let current = path.resolve(startDir);
|
|
30
|
+
const { root } = path.parse(current);
|
|
31
|
+
while (true) {
|
|
32
|
+
for (const candidate of LOCK_FILE_NAMES) {
|
|
33
|
+
const resolvedCandidate = path.join(current, candidate);
|
|
34
|
+
if (fs.existsSync(resolvedCandidate) && fs.statSync(resolvedCandidate).isFile()) {
|
|
35
|
+
return resolvedCandidate;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (current === root) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
current = path.dirname(current);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const findCommonAncestor = (paths) => {
|
|
45
|
+
if (paths.length === 0) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
let ancestor = path.resolve(paths[0]);
|
|
49
|
+
for (const currentPath of paths.slice(1)) {
|
|
50
|
+
const target = path.resolve(currentPath);
|
|
51
|
+
const ancestorRoot = path.parse(ancestor).root;
|
|
52
|
+
if (path.parse(ancestor).root.toLowerCase() !== path.parse(target).root.toLowerCase()) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
let candidate = ancestor;
|
|
56
|
+
while (!isSubPath(candidate, target)) {
|
|
57
|
+
if (candidate === ancestorRoot) {
|
|
58
|
+
candidate = ancestorRoot;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
candidate = path.dirname(candidate);
|
|
62
|
+
}
|
|
63
|
+
ancestor = candidate;
|
|
64
|
+
}
|
|
65
|
+
return ancestor;
|
|
66
|
+
};
|
|
67
|
+
const resolvePath = (inputPath, projectRoot) => {
|
|
68
|
+
if (path.isAbsolute(inputPath)) {
|
|
69
|
+
return path.resolve(inputPath);
|
|
70
|
+
}
|
|
71
|
+
if (projectRoot) {
|
|
72
|
+
const candidateFromProjectRoot = path.resolve(projectRoot, inputPath);
|
|
73
|
+
if (isSubPath(projectRoot, candidateFromProjectRoot)) {
|
|
74
|
+
return candidateFromProjectRoot;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return path.resolve(process.cwd(), inputPath);
|
|
78
|
+
};
|
|
14
79
|
const createBasicLambdaTimerJob = (scope, props) => {
|
|
15
80
|
const lambdaProps = createBasicLambdaProps(props);
|
|
16
81
|
let lambdaFunction = new aws_lambda_nodejs_1.NodejsFunction(scope, `${props.appPrefix}${props.functionName}`, lambdaProps);
|
|
@@ -23,26 +88,44 @@ const createBasicLambdaTimerJob = (scope, props) => {
|
|
|
23
88
|
};
|
|
24
89
|
exports.createBasicLambdaTimerJob = createBasicLambdaTimerJob;
|
|
25
90
|
const createBasicLambdaProps = (props) => {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
91
|
+
const resolvedProjectRoot = resolveProjectRoot(props.projectRoot);
|
|
92
|
+
const defaultRelativeEntry = path.join("resources", "lambdas", "timer-jobs", props.functionName, "main.mts");
|
|
93
|
+
const entryPath = props.codePath ?? defaultRelativeEntry;
|
|
94
|
+
const resolvedEntry = resolvePath(entryPath, resolvedProjectRoot);
|
|
95
|
+
const cwd = path.resolve(process.cwd());
|
|
96
|
+
const entryDir = path.dirname(resolvedEntry);
|
|
97
|
+
let effectiveProjectRoot = resolvedProjectRoot ?? cwd;
|
|
98
|
+
if (!isSubPath(effectiveProjectRoot, resolvedEntry)) {
|
|
99
|
+
const ancestor = findCommonAncestor([effectiveProjectRoot, entryDir]);
|
|
100
|
+
if (!ancestor) {
|
|
101
|
+
throw new Error(`Unable to determine a projectRoot that contains both ${effectiveProjectRoot} and ${resolvedEntry}.`);
|
|
102
|
+
}
|
|
103
|
+
effectiveProjectRoot = ancestor;
|
|
33
104
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
resolvedEntry = path.resolve(process.cwd(), props.projectRoot, `resources/lambdas/timer-jobs/${props.functionName}/main.mts`);
|
|
105
|
+
if (!isSubPath(effectiveProjectRoot, resolvedEntry)) {
|
|
106
|
+
throw new Error(`Resolved lambda entry ${resolvedEntry} must be located within projectRoot ${effectiveProjectRoot}.`);
|
|
37
107
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
108
|
+
let resolvedDepsLockFilePath = props.depsLockFilePath
|
|
109
|
+
? resolvePath(props.depsLockFilePath, resolvedProjectRoot)
|
|
110
|
+
: undefined;
|
|
111
|
+
if (!resolvedDepsLockFilePath) {
|
|
112
|
+
const potentialLockFiles = [
|
|
113
|
+
findNearestLockFile(entryDir),
|
|
114
|
+
findNearestLockFile(cwd),
|
|
115
|
+
effectiveProjectRoot !== cwd ? findNearestLockFile(effectiveProjectRoot) : undefined,
|
|
116
|
+
];
|
|
117
|
+
for (const lockFile of potentialLockFiles) {
|
|
118
|
+
if (lockFile && isSubPath(effectiveProjectRoot, lockFile)) {
|
|
119
|
+
resolvedDepsLockFilePath = lockFile;
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
41
123
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
124
|
+
if (resolvedDepsLockFilePath &&
|
|
125
|
+
!isSubPath(effectiveProjectRoot, resolvedDepsLockFilePath)) {
|
|
126
|
+
throw new Error(`Resolved depsLockFilePath ${resolvedDepsLockFilePath} must be located within projectRoot ${effectiveProjectRoot}.`);
|
|
45
127
|
}
|
|
128
|
+
const environmentVars = props.envs ?? {};
|
|
46
129
|
const lambdaProp = {
|
|
47
130
|
entry: resolvedEntry,
|
|
48
131
|
functionName: `${props.appPrefix ? `${props.appPrefix}-` : ""}${props.functionName}`,
|
|
@@ -52,7 +135,7 @@ const createBasicLambdaProps = (props) => {
|
|
|
52
135
|
timeout: aws_cdk_lib_1.Duration.minutes(props.timeoutInMinutes ? props.timeoutInMinutes : 1),
|
|
53
136
|
memorySize: props.memory,
|
|
54
137
|
environment: {
|
|
55
|
-
...
|
|
138
|
+
...environmentVars,
|
|
56
139
|
},
|
|
57
140
|
bundling: {
|
|
58
141
|
minify: true,
|
|
@@ -60,15 +143,15 @@ const createBasicLambdaProps = (props) => {
|
|
|
60
143
|
sourceMap: true,
|
|
61
144
|
sourceMapMode: aws_lambda_nodejs_1.SourceMapMode.EXTERNAL,
|
|
62
145
|
environment: {
|
|
63
|
-
...
|
|
146
|
+
...environmentVars,
|
|
64
147
|
},
|
|
65
|
-
...(props.projectRoot && { projectRoot: props.projectRoot }),
|
|
66
|
-
...(props.depsLockFilePath && {
|
|
67
|
-
depsLockFilePath: props.depsLockFilePath,
|
|
68
|
-
}),
|
|
69
148
|
},
|
|
70
149
|
role: props.role,
|
|
71
150
|
layers: undefined,
|
|
151
|
+
...(effectiveProjectRoot && { projectRoot: effectiveProjectRoot }),
|
|
152
|
+
...(resolvedDepsLockFilePath && {
|
|
153
|
+
depsLockFilePath: resolvedDepsLockFilePath,
|
|
154
|
+
}),
|
|
72
155
|
};
|
|
73
156
|
return lambdaProp;
|
|
74
157
|
};
|
|
@@ -99,4 +182,4 @@ const addLambdaLayers = (scope, lambda, layerArns) => {
|
|
|
99
182
|
});
|
|
100
183
|
}
|
|
101
184
|
};
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWJhc2ljLWxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXNvdXJjZXMvbGFtYmRhL2NyZWF0ZS1iYXNpYy1sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVDO0FBQ3ZDLGlEQUF1RDtBQUN2RCx1REFBK0Q7QUFDL0QscUVBSXVDO0FBQ3ZDLG1EQUFxRDtBQUNyRCw2QkFBOEI7QUFHOUIscUdBQW9GO0FBQ3BGLHVEQUFxRTtBQUNyRSx1RUFBZ0U7QUFDaEUsMkRBQWlEO0FBRTFDLE1BQU0seUJBQXlCLEdBQUcsQ0FDdkMsS0FBZ0IsRUFDaEIsS0FBb0IsRUFDSixFQUFFO0lBQ2xCLE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWxELElBQUksY0FBYyxHQUFHLElBQUksa0NBQWMsQ0FDckMsS0FBSyxFQUNMLEdBQUcsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLEVBQ3pDLFdBQVcsQ0FDWixDQUFDO0lBRUYsb0NBQW9DLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFckQsTUFBTSxTQUFTLEdBQUcsd0JBQXdCLENBQ3hDLEtBQUssRUFDTCxjQUFjLEVBQ2QsS0FBSyxDQUFDLFdBQVcsQ0FDbEIsQ0FBQztJQUVGLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxtQ0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFFeEQseUJBQXlCLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUV6RSxlQUFlLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFN0QsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBM0JXLFFBQUEseUJBQXlCLDZCQTJCcEM7QUFFRixNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBb0IsRUFB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QUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xyXG5pbXBvcnQgeyBMYXllclZlcnNpb24sIFJ1bnRpbWUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xyXG5pbXBvcnQge1xyXG4gIE5vZGVqc0Z1bmN0aW9uLFxyXG4gIE5vZGVqc0Z1bmN0aW9uUHJvcHMsXHJcbiAgU291cmNlTWFwTW9kZSxcclxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanNcIjtcclxuaW1wb3J0IHsgUmV0ZW50aW9uRGF5cyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xyXG5pbXBvcnQgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5pbXBvcnQgeyBUaW1lckpvYlByb3BzIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvdGltZXItam9iXCI7XHJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XHJcbmltcG9ydCB7IFNFUlZJQ0VfUFJJTkNJUEFMIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy9hd3Mtc2VydmljZS1wcmluY2lwYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IENyb25PcHRpb25zLCBSdWxlLCBTY2hlZHVsZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZXZlbnRzXCI7XHJcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0c1wiO1xyXG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVCYXNpY0xhbWJkYVRpbWVySm9iID0gKFxyXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXHJcbiAgcHJvcHM6IFRpbWVySm9iUHJvcHNcclxuKTogTm9kZWpzRnVuY3Rpb24gPT4ge1xyXG4gIGNvbnN0IGxhbWJkYVByb3BzID0gY3JlYXRlQmFzaWNMYW1iZGFQcm9wcyhwcm9wcyk7XHJcblxyXG4gIGxldCBsYW1iZGFGdW5jdGlvbiA9IG5ldyBOb2RlanNGdW5jdGlvbihcclxuICAgIHNjb3BlLFxyXG4gICAgYCR7cHJvcHMuYXBwUHJlZml4fSR7cHJvcHMuZnVuY3Rpb25OYW1lfWAsXHJcbiAgICBsYW1iZGFQcm9wc1xyXG4gICk7XHJcblxyXG4gIGFkZEludm9rZVBlcm1pc3Npb25Ub0xhbWJkYUZvckV2ZW50cyhsYW1iZGFGdW5jdGlvbik7XHJcblxyXG4gIGNvbnN0IGV2ZW50UnVsZSA9IGNyZWF0ZUV2ZW50UnVsZUZvckxhbWJkYShcclxuICAgIHNjb3BlLFxyXG4gICAgbGFtYmRhRnVuY3Rpb24sXHJcbiAgICBwcm9wcy5jcm9uT3B0aW9uc1xyXG4gICk7XHJcblxyXG4gIGV2ZW50UnVsZS5hZGRUYXJnZXQobmV3IExhbWJkYUZ1bmN0aW9uKGxhbWJkYUZ1bmN0aW9uKSk7XHJcblxyXG4gIGdyYW50QWNjZXNzVG9EeW5hbW9UYWJsZXMoc2NvcGUsIGxhbWJkYUZ1bmN0aW9uLCBwcm9wcy5keW5hbW9UYWJsZU5hbWVzKTtcclxuXHJcbiAgYWRkTGFtYmRhTGF5ZXJzKHNjb3BlLCBsYW1iZGFGdW5jdGlvbiwgcHJvcHMubGFtYmRhTGF5ZXJBcm4pO1xyXG5cclxuICByZXR1cm4gbGFtYmRhRnVuY3Rpb247XHJcbn07XHJcblxyXG5jb25zdCBjcmVhdGVCYXNpY0xhbWJkYVByb3BzID0gKHByb3BzOiBUaW1lckpvYlByb3BzKTogTm9kZWpzRnVuY3Rpb25Qcm9wcyA9PiB7XHJcbiAgbGV0IHJlc29sdmVkRW50cnk6IHN0cmluZztcclxuXHJcbiAgaWYgKHByb3BzLmNvZGVQYXRoICYmIHBhdGguaXNBYnNvbHV0ZShwcm9wcy5jb2RlUGF0aCkpIHtcclxuICAgIHJlc29sdmVkRW50cnkgPSBwcm9wcy5jb2RlUGF0aDtcclxuICB9IGVsc2UgaWYgKHByb3BzLmNvZGVQYXRoICYmIHByb3BzLnByb2plY3RSb290KSB7XHJcbiAgICAvLyBjb2RlUGF0aCBpcyByZWxhdGl2ZSwgcmVzb2x2ZSBmcm9tIGN1cnJlbnQgZGlyZWN0b3J5ICsgcHJvamVjdFJvb3RcclxuICAgIHJlc29sdmVkRW50cnkgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcHJvcHMuY29kZVBhdGgpO1xyXG4gIH0gZWxzZSBpZiAocHJvcHMucHJvamVjdFJvb3QpIHtcclxuICAgIC8vIE5vIGNvZGVQYXRoLCB1c2UgZGVmYXVsdCBwYXRoIHdpdGggcHJvamVjdFJvb3RcclxuICAgIHJlc29sdmVkRW50cnkgPSBwYXRoLnJlc29sdmUoXHJcbiAgICAgIHByb2Nlc3MuY3dkKCksXHJcbiAgICAgIHByb3BzLnByb2plY3RSb290LFxyXG4gICAgICBgcmVzb3VyY2VzL2xhbWJkYXMvdGltZXItam9icy8ke3Byb3BzLmZ1bmN0aW9uTmFtZX0vbWFpbi5tdHNgXHJcbiAgICApO1xyXG4gIH0gZWxzZSBpZiAocHJvcHMuY29kZVBhdGgpIHtcclxuICAgIC8vIGNvZGVQYXRoIHdpdGhvdXQgcHJvamVjdFJvb3RcclxuICAgIHJlc29sdmVkRW50cnkgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcHJvcHMuY29kZVBhdGgpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBEZWZhdWx0IHBhdGggd2l0aG91dCBwcm9qZWN0Um9vdFxyXG4gICAgcmVzb2x2ZWRFbnRyeSA9IHBhdGguam9pbihcclxuICAgICAgYC4vcmVzb3VyY2VzL2xhbWJkYXMvdGltZXItam9icy8ke3Byb3BzLmZ1bmN0aW9uTmFtZX0vbWFpbi5tdHNgXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgbGFtYmRhUHJvcDogTm9kZWpzRnVuY3Rpb25Qcm9wcyA9IHtcclxuICAgIGVudHJ5OiByZXNvbHZlZEVudHJ5LFxyXG4gICAgZnVuY3Rpb25OYW1lOiBgJHtwcm9wcy5hcHBQcmVmaXggPyBgJHtwcm9wcy5hcHBQcmVmaXh9LWAgOiBcIlwifSR7XHJcbiAgICAgIHByb3BzLmZ1bmN0aW9uTmFtZVxyXG4gICAgfWAsXHJcbiAgICBoYW5kbGVyOiBcIm1haW4udHNcIixcclxuICAgIGxvZ1JldGVudGlvbjogUmV0ZW50aW9uRGF5cy5UV09fV0VFS1MsXHJcbiAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU19MQVRFU1QsXHJcbiAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKFxyXG4gICAgICBwcm9wcy50aW1lb3V0SW5NaW51dGVzID8gcHJvcHMudGltZW91dEluTWludXRlcyA6IDFcclxuICAgICksXHJcbiAgICBtZW1vcnlTaXplOiBwcm9wcy5tZW1vcnksXHJcbiAgICBlbnZpcm9ubWVudDoge1xyXG4gICAgICAuLi5wcm9wcy5lbnZzLFxyXG4gICAgfSxcclxuICAgIGJ1bmRsaW5nOiB7XHJcbiAgICAgIG1pbmlmeTogdHJ1ZSxcclxuICAgICAgdGFyZ2V0OiBgZXNuZXh0YCxcclxuICAgICAgc291cmNlTWFwOiB0cnVlLFxyXG4gICAgICBzb3VyY2VNYXBNb2RlOiBTb3VyY2VNYXBNb2RlLkVYVEVSTkFMLFxyXG4gICAgICBlbnZpcm9ubWVudDoge1xyXG4gICAgICAgIC4uLnByb3BzLmVudnMsXHJcbiAgICAgIH0sXHJcbiAgICAgIC4uLihwcm9wcy5wcm9qZWN0Um9vdCAmJiB7IHByb2plY3RSb290OiBwcm9wcy5wcm9qZWN0Um9vdCB9KSxcclxuICAgICAgLi4uKHByb3BzLmRlcHNMb2NrRmlsZVBhdGggJiYge1xyXG4gICAgICAgIGRlcHNMb2NrRmlsZVBhdGg6IHByb3BzLmRlcHNMb2NrRmlsZVBhdGgsXHJcbiAgICAgIH0pLFxyXG4gICAgfSxcclxuICAgIHJvbGU6IHByb3BzLnJvbGUsXHJcbiAgICBsYXllcnM6IHVuZGVmaW5lZCxcclxuICB9O1xyXG5cclxuICByZXR1cm4gbGFtYmRhUHJvcDtcclxufTtcclxuXHJcbmNvbnN0IGFkZEludm9rZVBlcm1pc3Npb25Ub0xhbWJkYUZvckV2ZW50cyA9IChsYW1iZGE6IE5vZGVqc0Z1bmN0aW9uKSA9PiB7XHJcbiAgbGFtYmRhLmFkZFBlcm1pc3Npb24oYEludm9rZVBlcm1pc3Npb24tJHtsYW1iZGEuZnVuY3Rpb25OYW1lfWAsIHtcclxuICAgIHByaW5jaXBhbDogbmV3IFNlcnZpY2VQcmluY2lwYWwoU0VSVklDRV9QUklOQ0lQQUwuRVZFTlRTKSxcclxuICB9KTtcclxufTtcclxuXHJcbmNvbnN0IGNyZWF0ZUV2ZW50UnVsZUZvckxhbWJkYSA9IChcclxuICBzY29wZTogQ29uc3RydWN0LFxyXG4gIGxhbWJkYTogTm9kZWpzRnVuY3Rpb24sXHJcbiAgb3B0aW9uczogQ3Jvbk9wdGlvbnNcclxuKSA9PiB7XHJcbiAgY29uc3QgZXZlbnRSdWxlID0gbmV3IFJ1bGUoXHJcbiAgICBzY29wZSxcclxuICAgIGBzY2hlZHVsZVJ1bGUtJHtsYW1iZGE/Lm5vZGUuaWQgfHwgXCIwMTBcIn1gLFxyXG4gICAge1xyXG4gICAgICBzY2hlZHVsZTogU2NoZWR1bGUuY3JvbihvcHRpb25zKSxcclxuICAgIH1cclxuICApO1xyXG5cclxuICByZXR1cm4gZXZlbnRSdWxlO1xyXG59O1xyXG5cclxuY29uc3QgZ3JhbnRBY2Nlc3NUb0R5bmFtb1RhYmxlcyA9IChcclxuICBzY29wZTogQ29uc3RydWN0LFxyXG4gIGxhbWJkYTogTm9kZWpzRnVuY3Rpb24sXHJcbiAgdGFibGVOYW1lcz86IHN0cmluZ1tdXHJcbikgPT4ge1xyXG4gIGlmICh0YWJsZU5hbWVzICYmIHRhYmxlTmFtZXMubGVuZ3RoID4gMCkge1xyXG4gICAgdGFibGVOYW1lcy5mb3JFYWNoKCh0YWJsZU5hbWUpID0+IHtcclxuICAgICAgY29uc3QgdGFibGUgPSBUYWJsZS5mcm9tVGFibGVOYW1lKHNjb3BlLCBgJHt0YWJsZU5hbWV9LXRhYmxlYCwgdGFibGVOYW1lKTtcclxuXHJcbiAgICAgIHRhYmxlLmdyYW50UmVhZFdyaXRlRGF0YShsYW1iZGEpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgYWRkTGFtYmRhTGF5ZXJzID0gKFxyXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXHJcbiAgbGFtYmRhOiBOb2RlanNGdW5jdGlvbixcclxuICBsYXllckFybnM/OiBzdHJpbmdbXVxyXG4pID0+IHtcclxuICBpZiAobGF5ZXJBcm5zICYmIGxheWVyQXJucy5sZW5ndGggPiAwKSB7XHJcbiAgICBsYXllckFybnMuZm9yRWFjaCgoYXJuOiBzdHJpbmcsIGlkeDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxheWVyID0gTGF5ZXJWZXJzaW9uLmZyb21MYXllclZlcnNpb25Bcm4oXHJcbiAgICAgICAgc2NvcGUsXHJcbiAgICAgICAgYGNvbW1vbi1sYXllci0ke2lkeH1gLFxyXG4gICAgICAgIGFyblxyXG4gICAgICApO1xyXG5cclxuICAgICAgbGFtYmRhLmFkZExheWVycyhsYXllcik7XHJcbiAgICB9KTtcclxuICB9XHJcbn07XHJcbiJdfQ==
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWJhc2ljLWxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXNvdXJjZXMvbGFtYmRhL2NyZWF0ZS1iYXNpYy1sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVDO0FBQ3ZDLGlEQUF1RDtBQUN2RCx1REFBK0Q7QUFDL0QscUVBSXVDO0FBQ3ZDLG1EQUFxRDtBQUNyRCx5QkFBMEI7QUFDMUIsNkJBQThCO0FBRzlCLHFHQUFvRjtBQUNwRix1REFBcUU7QUFDckUsdUVBQWdFO0FBQ2hFLDJEQUFpRDtBQUVqRCxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQVksRUFBRSxNQUFjLEVBQVcsRUFBRTtJQUMxRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE9BQU8sUUFBUSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN2RixDQUFDLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBRyxDQUFDLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBRTdFLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxXQUFvQixFQUFzQixFQUFFO0lBQ3RFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxD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QyxLQUFnQixFQUNoQixNQUFzQixFQUN0QixVQUFxQixFQUNyQixFQUFFO0lBQ0YsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxLQUFLLEdBQUcsb0JBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsU0FBUyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFMUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sZUFBZSxHQUFHLENBQ3RCLEtBQWdCLEVBQ2hCLE1BQXNCLEVBQ3RCLFNBQW9CLEVBQ3BCLEVBQUU7SUFDRixJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFXLEVBQUUsR0FBVyxFQUFFLEVBQUU7WUFDN0MsTUFBTSxLQUFLLEdBQUcseUJBQVksQ0FBQyxtQkFBbUIsQ0FDNUMsS0FBSyxFQUNMLGdCQUFnQixHQUFHLEVBQUUsRUFDckIsR0FBRyxDQUNKLENBQUM7WUFFRixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xyXG5pbXBvcnQgeyBMYXllclZlcnNpb24sIFJ1bnRpbWUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xyXG5pbXBvcnQge1xyXG4gIE5vZGVqc0Z1bmN0aW9uLFxyXG4gIE5vZGVqc0Z1bmN0aW9uUHJvcHMsXHJcbiAgU291cmNlTWFwTW9kZSxcclxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanNcIjtcclxuaW1wb3J0IHsgUmV0ZW50aW9uRGF5cyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xyXG5pbXBvcnQgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbmltcG9ydCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbmltcG9ydCB7IFRpbWVySm9iUHJvcHMgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy90aW1lci1qb2JcIjtcclxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcclxuaW1wb3J0IHsgU0VSVklDRV9QUklOQ0lQQUwgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL2F3cy1zZXJ2aWNlLXByaW5jaXBhbC1jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgQ3Jvbk9wdGlvbnMsIFJ1bGUsIFNjaGVkdWxlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIjtcclxuaW1wb3J0IHsgTGFtYmRhRnVuY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzXCI7XHJcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1keW5hbW9kYlwiO1xyXG5cclxuY29uc3QgaXNTdWJQYXRoID0gKHJvb3Q6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICBjb25zdCByZWxhdGl2ZSA9IHBhdGgucmVsYXRpdmUocGF0aC5yZXNvbHZlKHJvb3QpLCBwYXRoLnJlc29sdmUodGFyZ2V0KSk7XHJcbiAgcmV0dXJuIHJlbGF0aXZlID09PSBcIlwiIHx8ICghcmVsYXRpdmUuc3RhcnRzV2l0aChcIi4uXCIpICYmICFwYXRoLmlzQWJzb2x1dGUocmVsYXRpdmUpKTtcclxufTtcclxuXHJcbmNvbnN0IExPQ0tfRklMRV9OQU1FUyA9IFtcInBucG0tbG9jay55YW1sXCIsIFwieWFybi5sb2NrXCIsIFwicGFja2FnZS1sb2NrLmpzb25cIl07XHJcblxyXG5jb25zdCByZXNvbHZlUHJvamVjdFJvb3QgPSAocHJvamVjdFJvb3Q/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xyXG4gIGlmICghcHJvamVjdFJvb3QpIHtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcGF0aC5pc0Fic29sdXRlKHByb2plY3RSb290KVxyXG4gICAgPyBwYXRoLnJlc29sdmUocHJvamVjdFJvb3QpXHJcbiAgICA6IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBwcm9qZWN0Um9vdCk7XHJcbn07XHJcblxyXG5jb25zdCBmaW5kTmVhcmVzdExvY2tGaWxlID0gKHN0YXJ0RGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xyXG4gIGxldCBjdXJyZW50ID0gcGF0aC5yZXNvbHZlKHN0YXJ0RGlyKTtcclxuICBjb25zdCB7IHJvb3QgfSA9IHBhdGgucGFyc2UoY3VycmVudCk7XHJcblxyXG4gIHdoaWxlICh0cnVlKSB7XHJcbiAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBMT0NLX0ZJTEVfTkFNRVMpIHtcclxuICAgICAgY29uc3QgcmVzb2x2ZWRDYW5kaWRhdGUgPSBwYXRoLmpvaW4oY3VycmVudCwgY2FuZGlkYXRlKTtcclxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocmVzb2x2ZWRDYW5kaWRhdGUpICYmIGZzLnN0YXRTeW5jKHJlc29sdmVkQ2FuZGlkYXRlKS5pc0ZpbGUoKSkge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlZENhbmRpZGF0ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXJyZW50ID09PSByb290KSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgY3VycmVudCA9IHBhdGguZGlybmFtZShjdXJyZW50KTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBmaW5kQ29tbW9uQW5jZXN0b3IgPSAocGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcclxuICBpZiAocGF0aHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgbGV0IGFuY2VzdG9yID0gcGF0aC5yZXNvbHZlKHBhdGhzWzBdKTtcclxuXHJcbiAgZm9yIChjb25zdCBjdXJyZW50UGF0aCBvZiBwYXRocy5zbGljZSgxKSkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gcGF0aC5yZXNvbHZlKGN1cnJlbnRQYXRoKTtcclxuICAgIGNvbnN0IGFuY2VzdG9yUm9vdCA9IHBhdGgucGFyc2UoYW5jZXN0b3IpLnJvb3Q7XHJcblxyXG4gICAgaWYgKHBhdGgucGFyc2UoYW5jZXN0b3IpLnJvb3QudG9Mb3dlckNhc2UoKSAhPT0gcGF0aC5wYXJzZSh0YXJnZXQpLnJvb3QudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjYW5kaWRhdGUgPSBhbmNlc3RvcjtcclxuICAgIHdoaWxlICghaXNTdWJQYXRoKGNhbmRpZGF0ZSwgdGFyZ2V0KSkge1xyXG4gICAgICBpZiAoY2FuZGlkYXRlID09PSBhbmNlc3RvclJvb3QpIHtcclxuICAgICAgICBjYW5kaWRhdGUgPSBhbmNlc3RvclJvb3Q7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FuZGlkYXRlID0gcGF0aC5kaXJuYW1lKGNhbmRpZGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYW5jZXN0b3IgPSBjYW5kaWRhdGU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gYW5jZXN0b3I7XHJcbn07XHJcblxyXG5jb25zdCByZXNvbHZlUGF0aCA9IChpbnB1dFBhdGg6IHN0cmluZywgcHJvamVjdFJvb3Q/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGlmIChwYXRoLmlzQWJzb2x1dGUoaW5wdXRQYXRoKSkge1xyXG4gICAgcmV0dXJuIHBhdGgucmVzb2x2ZShpbnB1dFBhdGgpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHByb2plY3RSb290KSB7XHJcbiAgICBjb25zdCBjYW5kaWRhdGVGcm9tUHJvamVjdFJvb3QgPSBwYXRoLnJlc29sdmUocHJvamVjdFJvb3QsIGlucHV0UGF0aCk7XHJcbiAgICBpZiAoaXNTdWJQYXRoKHByb2plY3RSb290LCBjYW5kaWRhdGVGcm9tUHJvamVjdFJvb3QpKSB7XHJcbiAgICAgIHJldHVybiBjYW5kaWRhdGVGcm9tUHJvamVjdFJvb3Q7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIGlucHV0UGF0aCk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlQmFzaWNMYW1iZGFUaW1lckpvYiA9IChcclxuICBzY29wZTogQ29uc3RydWN0LFxyXG4gIHByb3BzOiBUaW1lckpvYlByb3BzXHJcbik6IE5vZGVqc0Z1bmN0aW9uID0+IHtcclxuICBjb25zdCBsYW1iZGFQcm9wcyA9IGNyZWF0ZUJhc2ljTGFtYmRhUHJvcHMocHJvcHMpO1xyXG5cclxuICBsZXQgbGFtYmRhRnVuY3Rpb24gPSBuZXcgTm9kZWpzRnVuY3Rpb24oXHJcbiAgICBzY29wZSxcclxuICAgIGAke3Byb3BzLmFwcFByZWZpeH0ke3Byb3BzLmZ1bmN0aW9uTmFtZX1gLFxyXG4gICAgbGFtYmRhUHJvcHNcclxuICApO1xyXG5cclxuICBhZGRJbnZva2VQZXJtaXNzaW9uVG9MYW1iZGFGb3JFdmVudHMobGFtYmRhRnVuY3Rpb24pO1xyXG5cclxuICBjb25zdCBldmVudFJ1bGUgPSBjcmVhdGVFdmVudFJ1bGVGb3JMYW1iZGEoXHJcbiAgICBzY29wZSxcclxuICAgIGxhbWJkYUZ1bmN0aW9uLFxyXG4gICAgcHJvcHMuY3Jvbk9wdGlvbnNcclxuICApO1xyXG5cclxuICBldmVudFJ1bGUuYWRkVGFyZ2V0KG5ldyBMYW1iZGFGdW5jdGlvbihsYW1iZGFGdW5jdGlvbikpO1xyXG5cclxuICBncmFudEFjY2Vzc1RvRHluYW1vVGFibGVzKHNjb3BlLCBsYW1iZGFGdW5jdGlvbiwgcHJvcHMuZHluYW1vVGFibGVOYW1lcyk7XHJcblxyXG4gIGFkZExhbWJkYUxheWVycyhzY29wZSwgbGFtYmRhRnVuY3Rpb24sIHByb3BzLmxhbWJkYUxheWVyQXJuKTtcclxuXHJcbiAgcmV0dXJuIGxhbWJkYUZ1bmN0aW9uO1xyXG59O1xyXG5cclxuY29uc3QgY3JlYXRlQmFzaWNMYW1iZGFQcm9wcyA9IChwcm9wczogVGltZXJKb2JQcm9wcyk6IE5vZGVqc0Z1bmN0aW9uUHJvcHMgPT4ge1xyXG4gIGNvbnN0IHJlc29sdmVkUHJvamVjdFJvb3QgPSByZXNvbHZlUHJvamVjdFJvb3QocHJvcHMucHJvamVjdFJvb3QpO1xyXG4gIGNvbnN0IGRlZmF1bHRSZWxhdGl2ZUVudHJ5ID0gcGF0aC5qb2luKFxyXG4gICAgXCJyZXNvdXJjZXNcIixcclxuICAgIFwibGFtYmRhc1wiLFxyXG4gICAgXCJ0aW1lci1qb2JzXCIsXHJcbiAgICBwcm9wcy5mdW5jdGlvbk5hbWUsXHJcbiAgICBcIm1haW4ubXRzXCJcclxuICApO1xyXG4gIGNvbnN0IGVudHJ5UGF0aCA9IHByb3BzLmNvZGVQYXRoID8/IGRlZmF1bHRSZWxhdGl2ZUVudHJ5O1xyXG4gIGNvbnN0IHJlc29sdmVkRW50cnkgPSByZXNvbHZlUGF0aChlbnRyeVBhdGgsIHJlc29sdmVkUHJvamVjdFJvb3QpO1xyXG5cclxuICBjb25zdCBjd2QgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSk7XHJcbiAgY29uc3QgZW50cnlEaXIgPSBwYXRoLmRpcm5hbWUocmVzb2x2ZWRFbnRyeSk7XHJcblxyXG4gIGxldCBlZmZlY3RpdmVQcm9qZWN0Um9vdCA9IHJlc29sdmVkUHJvamVjdFJvb3QgPz8gY3dkO1xyXG4gIGlmICghaXNTdWJQYXRoKGVmZmVjdGl2ZVByb2plY3RSb290LCByZXNvbHZlZEVudHJ5KSkge1xyXG4gICAgY29uc3QgYW5jZXN0b3IgPSBmaW5kQ29tbW9uQW5jZXN0b3IoW2VmZmVjdGl2ZVByb2plY3RSb290LCBlbnRyeURpcl0pO1xyXG4gICAgaWYgKCFhbmNlc3Rvcikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYFVuYWJsZSB0byBkZXRlcm1pbmUgYSBwcm9qZWN0Um9vdCB0aGF0IGNvbnRhaW5zIGJvdGggJHtlZmZlY3RpdmVQcm9qZWN0Um9vdH0gYW5kICR7cmVzb2x2ZWRFbnRyeX0uYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgZWZmZWN0aXZlUHJvamVjdFJvb3QgPSBhbmNlc3RvcjtcclxuICB9XHJcblxyXG4gIGlmICghaXNTdWJQYXRoKGVmZmVjdGl2ZVByb2plY3RSb290LCByZXNvbHZlZEVudHJ5KSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICBgUmVzb2x2ZWQgbGFtYmRhIGVudHJ5ICR7cmVzb2x2ZWRFbnRyeX0gbXVzdCBiZSBsb2NhdGVkIHdpdGhpbiBwcm9qZWN0Um9vdCAke2VmZmVjdGl2ZVByb2plY3RSb290fS5gXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbGV0IHJlc29sdmVkRGVwc0xvY2tGaWxlUGF0aCA9IHByb3BzLmRlcHNMb2NrRmlsZVBhdGhcclxuICAgID8gcmVzb2x2ZVBhdGgocHJvcHMuZGVwc0xvY2tGaWxlUGF0aCwgcmVzb2x2ZWRQcm9qZWN0Um9vdClcclxuICAgIDogdW5kZWZpbmVkO1xyXG5cclxuICBpZiAoIXJlc29sdmVkRGVwc0xvY2tGaWxlUGF0aCkge1xyXG4gICAgY29uc3QgcG90ZW50aWFsTG9ja0ZpbGVzID0gW1xyXG4gICAgICBmaW5kTmVhcmVzdExvY2tGaWxlKGVudHJ5RGlyKSxcclxuICAgICAgZmluZE5lYXJlc3RMb2NrRmlsZShjd2QpLFxyXG4gICAgICBlZmZlY3RpdmVQcm9qZWN0Um9vdCAhPT0gY3dkID8gZmluZE5lYXJlc3RMb2NrRmlsZShlZmZlY3RpdmVQcm9qZWN0Um9vdCkgOiB1bmRlZmluZWQsXHJcbiAgICBdO1xyXG5cclxuICAgIGZvciAoY29uc3QgbG9ja0ZpbGUgb2YgcG90ZW50aWFsTG9ja0ZpbGVzKSB7XHJcbiAgICAgIGlmIChsb2NrRmlsZSAmJiBpc1N1YlBhdGgoZWZmZWN0aXZlUHJvamVjdFJvb3QsIGxvY2tGaWxlKSkge1xyXG4gICAgICAgIHJlc29sdmVkRGVwc0xvY2tGaWxlUGF0aCA9IGxvY2tGaWxlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAoXHJcbiAgICByZXNvbHZlZERlcHNMb2NrRmlsZVBhdGggJiZcclxuICAgICFpc1N1YlBhdGgoZWZmZWN0aXZlUHJvamVjdFJvb3QsIHJlc29sdmVkRGVwc0xvY2tGaWxlUGF0aClcclxuICApIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgYFJlc29sdmVkIGRlcHNMb2NrRmlsZVBhdGggJHtyZXNvbHZlZERlcHNMb2NrRmlsZVBhdGh9IG11c3QgYmUgbG9jYXRlZCB3aXRoaW4gcHJvamVjdFJvb3QgJHtlZmZlY3RpdmVQcm9qZWN0Um9vdH0uYFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGVudmlyb25tZW50VmFycyA9IHByb3BzLmVudnMgPz8ge307XHJcblxyXG4gIGNvbnN0IGxhbWJkYVByb3A6IE5vZGVqc0Z1bmN0aW9uUHJvcHMgPSB7XHJcbiAgICBlbnRyeTogcmVzb2x2ZWRFbnRyeSxcclxuICAgIGZ1bmN0aW9uTmFtZTogYCR7cHJvcHMuYXBwUHJlZml4ID8gYCR7cHJvcHMuYXBwUHJlZml4fS1gIDogXCJcIn0ke1xyXG4gICAgICBwcm9wcy5mdW5jdGlvbk5hbWVcclxuICAgIH1gLFxyXG4gICAgaGFuZGxlcjogXCJtYWluLnRzXCIsXHJcbiAgICBsb2dSZXRlbnRpb246IFJldGVudGlvbkRheXMuVFdPX1dFRUtTLFxyXG4gICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfTEFURVNULFxyXG4gICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcyhcclxuICAgICAgcHJvcHMudGltZW91dEluTWludXRlcyA/IHByb3BzLnRpbWVvdXRJbk1pbnV0ZXMgOiAxXHJcbiAgICApLFxyXG4gICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5LFxyXG4gICAgZW52aXJvbm1lbnQ6IHtcclxuICAgICAgLi4uZW52aXJvbm1lbnRWYXJzLFxyXG4gICAgfSxcclxuICAgIGJ1bmRsaW5nOiB7XHJcbiAgICAgIG1pbmlmeTogdHJ1ZSxcclxuICAgICAgdGFyZ2V0OiBgZXNuZXh0YCxcclxuICAgICAgc291cmNlTWFwOiB0cnVlLFxyXG4gICAgICBzb3VyY2VNYXBNb2RlOiBTb3VyY2VNYXBNb2RlLkVYVEVSTkFMLFxyXG4gICAgICBlbnZpcm9ubWVudDoge1xyXG4gICAgICAgIC4uLmVudmlyb25tZW50VmFycyxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICByb2xlOiBwcm9wcy5yb2xlLFxyXG4gICAgbGF5ZXJzOiB1bmRlZmluZWQsXHJcbiAgICAuLi4oZWZmZWN0aXZlUHJvamVjdFJvb3QgJiYgeyBwcm9qZWN0Um9vdDogZWZmZWN0aXZlUHJvamVjdFJvb3QgfSksXHJcbiAgICAuLi4ocmVzb2x2ZWREZXBzTG9ja0ZpbGVQYXRoICYmIHtcclxuICAgICAgZGVwc0xvY2tGaWxlUGF0aDogcmVzb2x2ZWREZXBzTG9ja0ZpbGVQYXRoLFxyXG4gICAgfSksXHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIGxhbWJkYVByb3A7XHJcbn07XHJcblxyXG5jb25zdCBhZGRJbnZva2VQZXJtaXNzaW9uVG9MYW1iZGFGb3JFdmVudHMgPSAobGFtYmRhOiBOb2RlanNGdW5jdGlvbikgPT4ge1xyXG4gIGxhbWJkYS5hZGRQZXJtaXNzaW9uKGBJbnZva2VQZXJtaXNzaW9uLSR7bGFtYmRhLmZ1bmN0aW9uTmFtZX1gLCB7XHJcbiAgICBwcmluY2lwYWw6IG5ldyBTZXJ2aWNlUHJpbmNpcGFsKFNFUlZJQ0VfUFJJTkNJUEFMLkVWRU5UUyksXHJcbiAgfSk7XHJcbn07XHJcblxyXG5jb25zdCBjcmVhdGVFdmVudFJ1bGVGb3JMYW1iZGEgPSAoXHJcbiAgc2NvcGU6IENvbnN0cnVjdCxcclxuICBsYW1iZGE6IE5vZGVqc0Z1bmN0aW9uLFxyXG4gIG9wdGlvbnM6IENyb25PcHRpb25zXHJcbikgPT4ge1xyXG4gIGNvbnN0IGV2ZW50UnVsZSA9IG5ldyBSdWxlKFxyXG4gICAgc2NvcGUsXHJcbiAgICBgc2NoZWR1bGVSdWxlLSR7bGFtYmRhPy5ub2RlLmlkIHx8IFwiMDEwXCJ9YCxcclxuICAgIHtcclxuICAgICAgc2NoZWR1bGU6IFNjaGVkdWxlLmNyb24ob3B0aW9ucyksXHJcbiAgICB9XHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIGV2ZW50UnVsZTtcclxufTtcclxuXHJcbmNvbnN0IGdyYW50QWNjZXNzVG9EeW5hbW9UYWJsZXMgPSAoXHJcbiAgc2NvcGU6IENvbnN0cnVjdCxcclxuICBsYW1iZGE6IE5vZGVqc0Z1bmN0aW9uLFxyXG4gIHRhYmxlTmFtZXM/OiBzdHJpbmdbXVxyXG4pID0+IHtcclxuICBpZiAodGFibGVOYW1lcyAmJiB0YWJsZU5hbWVzLmxlbmd0aCA+IDApIHtcclxuICAgIHRhYmxlTmFtZXMuZm9yRWFjaCgodGFibGVOYW1lKSA9PiB7XHJcbiAgICAgIGNvbnN0IHRhYmxlID0gVGFibGUuZnJvbVRhYmxlTmFtZShzY29wZSwgYCR7dGFibGVOYW1lfS10YWJsZWAsIHRhYmxlTmFtZSk7XHJcblxyXG4gICAgICB0YWJsZS5ncmFudFJlYWRXcml0ZURhdGEobGFtYmRhKTtcclxuICAgIH0pO1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGFkZExhbWJkYUxheWVycyA9IChcclxuICBzY29wZTogQ29uc3RydWN0LFxyXG4gIGxhbWJkYTogTm9kZWpzRnVuY3Rpb24sXHJcbiAgbGF5ZXJBcm5zPzogc3RyaW5nW11cclxuKSA9PiB7XHJcbiAgaWYgKGxheWVyQXJucyAmJiBsYXllckFybnMubGVuZ3RoID4gMCkge1xyXG4gICAgbGF5ZXJBcm5zLmZvckVhY2goKGFybjogc3RyaW5nLCBpZHg6IG51bWJlcikgPT4ge1xyXG4gICAgICBjb25zdCBsYXllciA9IExheWVyVmVyc2lvbi5mcm9tTGF5ZXJWZXJzaW9uQXJuKFxyXG4gICAgICAgIHNjb3BlLFxyXG4gICAgICAgIGBjb21tb24tbGF5ZXItJHtpZHh9YCxcclxuICAgICAgICBhcm5cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGxhbWJkYS5hZGRMYXllcnMobGF5ZXIpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG4iXX0=
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@ export const config: IAppConfig = {
|
|
|
8
8
|
name: `${process.env.APP_NAME}`,
|
|
9
9
|
accountNumber: process.env.CDK_DEFAULT_ACCOUNT || "",
|
|
10
10
|
region: process.env.CDK_DEFAULT_REGION || "us-east-1",
|
|
11
|
-
stackRuntime: Runtime.
|
|
11
|
+
stackRuntime: Runtime.NODEJS_LATEST,
|
|
12
12
|
},
|
|
13
13
|
API: {
|
|
14
14
|
Name: `${process.env.APP_NAME}-auth-api`,
|
|
@@ -7,11 +7,94 @@ import {
|
|
|
7
7
|
SourceMapMode,
|
|
8
8
|
} from "aws-cdk-lib/aws-lambda-nodejs";
|
|
9
9
|
import { RetentionDays } from "aws-cdk-lib/aws-logs";
|
|
10
|
+
import fs = require("fs");
|
|
10
11
|
import path = require("path");
|
|
11
12
|
import { LambdaProps } from "../../interfaces/lambda";
|
|
12
13
|
import { Construct } from "constructs";
|
|
13
14
|
import { Table } from "aws-cdk-lib/aws-dynamodb";
|
|
14
15
|
|
|
16
|
+
const isSubPath = (root: string, target: string): boolean => {
|
|
17
|
+
const relative = path.relative(path.resolve(root), path.resolve(target));
|
|
18
|
+
return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const LOCK_FILE_NAMES = ["pnpm-lock.yaml", "yarn.lock", "package-lock.json"];
|
|
22
|
+
|
|
23
|
+
const resolveProjectRoot = (projectRoot?: string): string | undefined => {
|
|
24
|
+
if (!projectRoot) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return path.isAbsolute(projectRoot)
|
|
29
|
+
? path.resolve(projectRoot)
|
|
30
|
+
: path.resolve(process.cwd(), projectRoot);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const findNearestLockFile = (startDir: string): string | undefined => {
|
|
34
|
+
let current = path.resolve(startDir);
|
|
35
|
+
const { root } = path.parse(current);
|
|
36
|
+
|
|
37
|
+
while (true) {
|
|
38
|
+
for (const candidate of LOCK_FILE_NAMES) {
|
|
39
|
+
const resolvedCandidate = path.join(current, candidate);
|
|
40
|
+
if (fs.existsSync(resolvedCandidate) && fs.statSync(resolvedCandidate).isFile()) {
|
|
41
|
+
return resolvedCandidate;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (current === root) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
current = path.dirname(current);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const findCommonAncestor = (paths: string[]): string | undefined => {
|
|
54
|
+
if (paths.length === 0) {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
let ancestor = path.resolve(paths[0]);
|
|
59
|
+
|
|
60
|
+
for (const currentPath of paths.slice(1)) {
|
|
61
|
+
const target = path.resolve(currentPath);
|
|
62
|
+
const ancestorRoot = path.parse(ancestor).root;
|
|
63
|
+
|
|
64
|
+
if (path.parse(ancestor).root.toLowerCase() !== path.parse(target).root.toLowerCase()) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
let candidate = ancestor;
|
|
69
|
+
while (!isSubPath(candidate, target)) {
|
|
70
|
+
if (candidate === ancestorRoot) {
|
|
71
|
+
candidate = ancestorRoot;
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
candidate = path.dirname(candidate);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
ancestor = candidate;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return ancestor;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
const resolvePath = (inputPath: string, projectRoot?: string): string => {
|
|
84
|
+
if (path.isAbsolute(inputPath)) {
|
|
85
|
+
return path.resolve(inputPath);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (projectRoot) {
|
|
89
|
+
const candidateFromProjectRoot = path.resolve(projectRoot, inputPath);
|
|
90
|
+
if (isSubPath(projectRoot, candidateFromProjectRoot)) {
|
|
91
|
+
return candidateFromProjectRoot;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return path.resolve(process.cwd(), inputPath);
|
|
96
|
+
};
|
|
97
|
+
|
|
15
98
|
export const createBasicLambda = (
|
|
16
99
|
scope: Construct,
|
|
17
100
|
props: LambdaProps
|
|
@@ -32,30 +115,66 @@ export const createBasicLambda = (
|
|
|
32
115
|
};
|
|
33
116
|
|
|
34
117
|
const createBasicLambdaProps = (props: LambdaProps): NodejsFunctionProps => {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
118
|
+
const resolvedProjectRoot = resolveProjectRoot(props.projectRoot);
|
|
119
|
+
const defaultRelativeEntry = path.join(
|
|
120
|
+
"resources",
|
|
121
|
+
"lambdas",
|
|
122
|
+
props.functionName,
|
|
123
|
+
"main.mts"
|
|
124
|
+
);
|
|
125
|
+
const entryPath = props.codePath ?? defaultRelativeEntry;
|
|
126
|
+
const resolvedEntry = resolvePath(entryPath, resolvedProjectRoot);
|
|
127
|
+
|
|
128
|
+
const cwd = path.resolve(process.cwd());
|
|
129
|
+
const entryDir = path.dirname(resolvedEntry);
|
|
130
|
+
|
|
131
|
+
let effectiveProjectRoot = resolvedProjectRoot ?? cwd;
|
|
132
|
+
if (!isSubPath(effectiveProjectRoot, resolvedEntry)) {
|
|
133
|
+
const ancestor = findCommonAncestor([effectiveProjectRoot, entryDir]);
|
|
134
|
+
if (!ancestor) {
|
|
135
|
+
throw new Error(
|
|
136
|
+
`Unable to determine a projectRoot that contains both ${effectiveProjectRoot} and ${resolvedEntry}.`
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
effectiveProjectRoot = ancestor;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (!isSubPath(effectiveProjectRoot, resolvedEntry)) {
|
|
143
|
+
throw new Error(
|
|
144
|
+
`Resolved lambda entry ${resolvedEntry} must be located within projectRoot ${effectiveProjectRoot}.`
|
|
48
145
|
);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
let resolvedDepsLockFilePath = props.depsLockFilePath
|
|
149
|
+
? resolvePath(props.depsLockFilePath, resolvedProjectRoot)
|
|
150
|
+
: undefined;
|
|
151
|
+
|
|
152
|
+
if (!resolvedDepsLockFilePath) {
|
|
153
|
+
const potentialLockFiles = [
|
|
154
|
+
findNearestLockFile(entryDir),
|
|
155
|
+
findNearestLockFile(cwd),
|
|
156
|
+
effectiveProjectRoot !== cwd ? findNearestLockFile(effectiveProjectRoot) : undefined,
|
|
157
|
+
];
|
|
158
|
+
|
|
159
|
+
for (const lockFile of potentialLockFiles) {
|
|
160
|
+
if (lockFile && isSubPath(effectiveProjectRoot, lockFile)) {
|
|
161
|
+
resolvedDepsLockFilePath = lockFile;
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (
|
|
168
|
+
resolvedDepsLockFilePath &&
|
|
169
|
+
!isSubPath(effectiveProjectRoot, resolvedDepsLockFilePath)
|
|
170
|
+
) {
|
|
171
|
+
throw new Error(
|
|
172
|
+
`Resolved depsLockFilePath ${resolvedDepsLockFilePath} must be located within projectRoot ${effectiveProjectRoot}.`
|
|
56
173
|
);
|
|
57
174
|
}
|
|
58
175
|
|
|
176
|
+
const environmentVars = props.envs ?? {};
|
|
177
|
+
|
|
59
178
|
const lambdaProp: NodejsFunctionProps = {
|
|
60
179
|
entry: resolvedEntry,
|
|
61
180
|
functionName: `${props.appPrefix ? `${props.appPrefix}-` : ""}${
|
|
@@ -69,7 +188,7 @@ const createBasicLambdaProps = (props: LambdaProps): NodejsFunctionProps => {
|
|
|
69
188
|
),
|
|
70
189
|
memorySize: props.memory,
|
|
71
190
|
environment: {
|
|
72
|
-
...
|
|
191
|
+
...environmentVars,
|
|
73
192
|
},
|
|
74
193
|
bundling: {
|
|
75
194
|
minify: true,
|
|
@@ -77,15 +196,15 @@ const createBasicLambdaProps = (props: LambdaProps): NodejsFunctionProps => {
|
|
|
77
196
|
sourceMap: true,
|
|
78
197
|
sourceMapMode: SourceMapMode.EXTERNAL,
|
|
79
198
|
environment: {
|
|
80
|
-
...
|
|
199
|
+
...environmentVars,
|
|
81
200
|
},
|
|
82
|
-
...(props.projectRoot && { projectRoot: props.projectRoot }),
|
|
83
|
-
...(props.depsLockFilePath && {
|
|
84
|
-
depsLockFilePath: props.depsLockFilePath,
|
|
85
|
-
}),
|
|
86
201
|
},
|
|
87
202
|
role: props.role,
|
|
88
203
|
layers: undefined,
|
|
204
|
+
...(effectiveProjectRoot && { projectRoot: effectiveProjectRoot }),
|
|
205
|
+
...(resolvedDepsLockFilePath && {
|
|
206
|
+
depsLockFilePath: resolvedDepsLockFilePath,
|
|
207
|
+
}),
|
|
89
208
|
};
|
|
90
209
|
|
|
91
210
|
return lambdaProp;
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
SourceMapMode,
|
|
8
8
|
} from "aws-cdk-lib/aws-lambda-nodejs";
|
|
9
9
|
import { RetentionDays } from "aws-cdk-lib/aws-logs";
|
|
10
|
+
import fs = require("fs");
|
|
10
11
|
import path = require("path");
|
|
11
12
|
import { TimerJobProps } from "../../interfaces/timer-job";
|
|
12
13
|
import { Construct } from "constructs";
|
|
@@ -15,6 +16,88 @@ import { CronOptions, Rule, Schedule } from "aws-cdk-lib/aws-events";
|
|
|
15
16
|
import { LambdaFunction } from "aws-cdk-lib/aws-events-targets";
|
|
16
17
|
import { Table } from "aws-cdk-lib/aws-dynamodb";
|
|
17
18
|
|
|
19
|
+
const isSubPath = (root: string, target: string): boolean => {
|
|
20
|
+
const relative = path.relative(path.resolve(root), path.resolve(target));
|
|
21
|
+
return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const LOCK_FILE_NAMES = ["pnpm-lock.yaml", "yarn.lock", "package-lock.json"];
|
|
25
|
+
|
|
26
|
+
const resolveProjectRoot = (projectRoot?: string): string | undefined => {
|
|
27
|
+
if (!projectRoot) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return path.isAbsolute(projectRoot)
|
|
32
|
+
? path.resolve(projectRoot)
|
|
33
|
+
: path.resolve(process.cwd(), projectRoot);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const findNearestLockFile = (startDir: string): string | undefined => {
|
|
37
|
+
let current = path.resolve(startDir);
|
|
38
|
+
const { root } = path.parse(current);
|
|
39
|
+
|
|
40
|
+
while (true) {
|
|
41
|
+
for (const candidate of LOCK_FILE_NAMES) {
|
|
42
|
+
const resolvedCandidate = path.join(current, candidate);
|
|
43
|
+
if (fs.existsSync(resolvedCandidate) && fs.statSync(resolvedCandidate).isFile()) {
|
|
44
|
+
return resolvedCandidate;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (current === root) {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
current = path.dirname(current);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const findCommonAncestor = (paths: string[]): string | undefined => {
|
|
57
|
+
if (paths.length === 0) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
let ancestor = path.resolve(paths[0]);
|
|
62
|
+
|
|
63
|
+
for (const currentPath of paths.slice(1)) {
|
|
64
|
+
const target = path.resolve(currentPath);
|
|
65
|
+
const ancestorRoot = path.parse(ancestor).root;
|
|
66
|
+
|
|
67
|
+
if (path.parse(ancestor).root.toLowerCase() !== path.parse(target).root.toLowerCase()) {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
let candidate = ancestor;
|
|
72
|
+
while (!isSubPath(candidate, target)) {
|
|
73
|
+
if (candidate === ancestorRoot) {
|
|
74
|
+
candidate = ancestorRoot;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
candidate = path.dirname(candidate);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
ancestor = candidate;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return ancestor;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const resolvePath = (inputPath: string, projectRoot?: string): string => {
|
|
87
|
+
if (path.isAbsolute(inputPath)) {
|
|
88
|
+
return path.resolve(inputPath);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (projectRoot) {
|
|
92
|
+
const candidateFromProjectRoot = path.resolve(projectRoot, inputPath);
|
|
93
|
+
if (isSubPath(projectRoot, candidateFromProjectRoot)) {
|
|
94
|
+
return candidateFromProjectRoot;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return path.resolve(process.cwd(), inputPath);
|
|
99
|
+
};
|
|
100
|
+
|
|
18
101
|
export const createBasicLambdaTimerJob = (
|
|
19
102
|
scope: Construct,
|
|
20
103
|
props: TimerJobProps
|
|
@@ -45,30 +128,67 @@ export const createBasicLambdaTimerJob = (
|
|
|
45
128
|
};
|
|
46
129
|
|
|
47
130
|
const createBasicLambdaProps = (props: TimerJobProps): NodejsFunctionProps => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
131
|
+
const resolvedProjectRoot = resolveProjectRoot(props.projectRoot);
|
|
132
|
+
const defaultRelativeEntry = path.join(
|
|
133
|
+
"resources",
|
|
134
|
+
"lambdas",
|
|
135
|
+
"timer-jobs",
|
|
136
|
+
props.functionName,
|
|
137
|
+
"main.mts"
|
|
138
|
+
);
|
|
139
|
+
const entryPath = props.codePath ?? defaultRelativeEntry;
|
|
140
|
+
const resolvedEntry = resolvePath(entryPath, resolvedProjectRoot);
|
|
141
|
+
|
|
142
|
+
const cwd = path.resolve(process.cwd());
|
|
143
|
+
const entryDir = path.dirname(resolvedEntry);
|
|
144
|
+
|
|
145
|
+
let effectiveProjectRoot = resolvedProjectRoot ?? cwd;
|
|
146
|
+
if (!isSubPath(effectiveProjectRoot, resolvedEntry)) {
|
|
147
|
+
const ancestor = findCommonAncestor([effectiveProjectRoot, entryDir]);
|
|
148
|
+
if (!ancestor) {
|
|
149
|
+
throw new Error(
|
|
150
|
+
`Unable to determine a projectRoot that contains both ${effectiveProjectRoot} and ${resolvedEntry}.`
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
effectiveProjectRoot = ancestor;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (!isSubPath(effectiveProjectRoot, resolvedEntry)) {
|
|
157
|
+
throw new Error(
|
|
158
|
+
`Resolved lambda entry ${resolvedEntry} must be located within projectRoot ${effectiveProjectRoot}.`
|
|
61
159
|
);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
let resolvedDepsLockFilePath = props.depsLockFilePath
|
|
163
|
+
? resolvePath(props.depsLockFilePath, resolvedProjectRoot)
|
|
164
|
+
: undefined;
|
|
165
|
+
|
|
166
|
+
if (!resolvedDepsLockFilePath) {
|
|
167
|
+
const potentialLockFiles = [
|
|
168
|
+
findNearestLockFile(entryDir),
|
|
169
|
+
findNearestLockFile(cwd),
|
|
170
|
+
effectiveProjectRoot !== cwd ? findNearestLockFile(effectiveProjectRoot) : undefined,
|
|
171
|
+
];
|
|
172
|
+
|
|
173
|
+
for (const lockFile of potentialLockFiles) {
|
|
174
|
+
if (lockFile && isSubPath(effectiveProjectRoot, lockFile)) {
|
|
175
|
+
resolvedDepsLockFilePath = lockFile;
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (
|
|
182
|
+
resolvedDepsLockFilePath &&
|
|
183
|
+
!isSubPath(effectiveProjectRoot, resolvedDepsLockFilePath)
|
|
184
|
+
) {
|
|
185
|
+
throw new Error(
|
|
186
|
+
`Resolved depsLockFilePath ${resolvedDepsLockFilePath} must be located within projectRoot ${effectiveProjectRoot}.`
|
|
69
187
|
);
|
|
70
188
|
}
|
|
71
189
|
|
|
190
|
+
const environmentVars = props.envs ?? {};
|
|
191
|
+
|
|
72
192
|
const lambdaProp: NodejsFunctionProps = {
|
|
73
193
|
entry: resolvedEntry,
|
|
74
194
|
functionName: `${props.appPrefix ? `${props.appPrefix}-` : ""}${
|
|
@@ -82,7 +202,7 @@ const createBasicLambdaProps = (props: TimerJobProps): NodejsFunctionProps => {
|
|
|
82
202
|
),
|
|
83
203
|
memorySize: props.memory,
|
|
84
204
|
environment: {
|
|
85
|
-
...
|
|
205
|
+
...environmentVars,
|
|
86
206
|
},
|
|
87
207
|
bundling: {
|
|
88
208
|
minify: true,
|
|
@@ -90,15 +210,15 @@ const createBasicLambdaProps = (props: TimerJobProps): NodejsFunctionProps => {
|
|
|
90
210
|
sourceMap: true,
|
|
91
211
|
sourceMapMode: SourceMapMode.EXTERNAL,
|
|
92
212
|
environment: {
|
|
93
|
-
...
|
|
213
|
+
...environmentVars,
|
|
94
214
|
},
|
|
95
|
-
...(props.projectRoot && { projectRoot: props.projectRoot }),
|
|
96
|
-
...(props.depsLockFilePath && {
|
|
97
|
-
depsLockFilePath: props.depsLockFilePath,
|
|
98
|
-
}),
|
|
99
215
|
},
|
|
100
216
|
role: props.role,
|
|
101
217
|
layers: undefined,
|
|
218
|
+
...(effectiveProjectRoot && { projectRoot: effectiveProjectRoot }),
|
|
219
|
+
...(resolvedDepsLockFilePath && {
|
|
220
|
+
depsLockFilePath: resolvedDepsLockFilePath,
|
|
221
|
+
}),
|
|
102
222
|
};
|
|
103
223
|
|
|
104
224
|
return lambdaProp;
|