@sylvesterllc/aws-constructs 1.1.25 → 1.1.27
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 +112 -23
- package/dist/resources/lambda/create-basic-lambda.js +112 -23
- package/package.json +1 -1
- package/src/config/microServiceConfig.ts +1 -1
- package/src/resources/lambda/create-basic-lambda-helper.ts +152 -26
- package/src/resources/lambda/create-basic-lambda.ts +153 -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,79 @@ 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
|
+
const candidates = [];
|
|
68
|
+
if (projectRoot) {
|
|
69
|
+
candidates.push(path.resolve(projectRoot, inputPath));
|
|
70
|
+
}
|
|
71
|
+
candidates.push(path.resolve(process.cwd(), inputPath));
|
|
72
|
+
if (projectRoot) {
|
|
73
|
+
for (const candidate of candidates) {
|
|
74
|
+
if (isSubPath(projectRoot, candidate)) {
|
|
75
|
+
return candidate;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return candidates[candidates.length - 1];
|
|
80
|
+
};
|
|
10
81
|
const createBasicLambda = (scope, props) => {
|
|
11
82
|
const lambdaProps = createBasicLambdaProps(props);
|
|
12
83
|
let lambdaFunction = new aws_lambda_nodejs_1.NodejsFunction(scope, `${props.appPrefix || ""}${props.functionName}`, lambdaProps);
|
|
@@ -16,26 +87,44 @@ const createBasicLambda = (scope, props) => {
|
|
|
16
87
|
};
|
|
17
88
|
exports.createBasicLambda = createBasicLambda;
|
|
18
89
|
const createBasicLambdaProps = (props) => {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
90
|
+
const resolvedProjectRoot = resolveProjectRoot(props.projectRoot);
|
|
91
|
+
const defaultRelativeEntry = path.join("resources", "lambdas", props.functionName, "main.mts");
|
|
92
|
+
const entryPath = props.codePath ?? defaultRelativeEntry;
|
|
93
|
+
const resolvedEntry = resolvePath(entryPath, resolvedProjectRoot);
|
|
94
|
+
const cwd = path.resolve(process.cwd());
|
|
95
|
+
const entryDir = path.dirname(resolvedEntry);
|
|
96
|
+
let effectiveProjectRoot = resolvedProjectRoot ?? cwd;
|
|
97
|
+
if (!isSubPath(effectiveProjectRoot, resolvedEntry)) {
|
|
98
|
+
const ancestor = findCommonAncestor([effectiveProjectRoot, entryDir]);
|
|
99
|
+
if (!ancestor) {
|
|
100
|
+
throw new Error(`Unable to determine a projectRoot that contains both ${effectiveProjectRoot} and ${resolvedEntry}.`);
|
|
101
|
+
}
|
|
102
|
+
effectiveProjectRoot = ancestor;
|
|
26
103
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
resolvedEntry = path.resolve(process.cwd(), props.projectRoot, `resources/lambdas/${props.functionName}/main.mts`);
|
|
104
|
+
if (!isSubPath(effectiveProjectRoot, resolvedEntry)) {
|
|
105
|
+
throw new Error(`Resolved lambda entry ${resolvedEntry} must be located within projectRoot ${effectiveProjectRoot}.`);
|
|
30
106
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
107
|
+
let resolvedDepsLockFilePath = props.depsLockFilePath
|
|
108
|
+
? resolvePath(props.depsLockFilePath, resolvedProjectRoot)
|
|
109
|
+
: undefined;
|
|
110
|
+
if (!resolvedDepsLockFilePath) {
|
|
111
|
+
const potentialLockFiles = [
|
|
112
|
+
findNearestLockFile(entryDir),
|
|
113
|
+
findNearestLockFile(cwd),
|
|
114
|
+
effectiveProjectRoot !== cwd ? findNearestLockFile(effectiveProjectRoot) : undefined,
|
|
115
|
+
];
|
|
116
|
+
for (const lockFile of potentialLockFiles) {
|
|
117
|
+
if (lockFile && isSubPath(effectiveProjectRoot, lockFile)) {
|
|
118
|
+
resolvedDepsLockFilePath = lockFile;
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
34
122
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
123
|
+
if (resolvedDepsLockFilePath &&
|
|
124
|
+
!isSubPath(effectiveProjectRoot, resolvedDepsLockFilePath)) {
|
|
125
|
+
throw new Error(`Resolved depsLockFilePath ${resolvedDepsLockFilePath} must be located within projectRoot ${effectiveProjectRoot}.`);
|
|
38
126
|
}
|
|
127
|
+
const environmentVars = props.envs ?? {};
|
|
39
128
|
const lambdaProp = {
|
|
40
129
|
entry: resolvedEntry,
|
|
41
130
|
functionName: `${props.appPrefix ? `${props.appPrefix}-` : ""}${props.functionName}`,
|
|
@@ -45,7 +134,7 @@ const createBasicLambdaProps = (props) => {
|
|
|
45
134
|
timeout: aws_cdk_lib_1.Duration.minutes(props.timeoutInMinutes ? props.timeoutInMinutes : 1),
|
|
46
135
|
memorySize: props.memory,
|
|
47
136
|
environment: {
|
|
48
|
-
...
|
|
137
|
+
...environmentVars,
|
|
49
138
|
},
|
|
50
139
|
bundling: {
|
|
51
140
|
minify: true,
|
|
@@ -53,15 +142,15 @@ const createBasicLambdaProps = (props) => {
|
|
|
53
142
|
sourceMap: true,
|
|
54
143
|
sourceMapMode: aws_lambda_nodejs_1.SourceMapMode.EXTERNAL,
|
|
55
144
|
environment: {
|
|
56
|
-
...
|
|
145
|
+
...environmentVars,
|
|
57
146
|
},
|
|
58
|
-
...(props.projectRoot && { projectRoot: props.projectRoot }),
|
|
59
|
-
...(props.depsLockFilePath && {
|
|
60
|
-
depsLockFilePath: props.depsLockFilePath,
|
|
61
|
-
}),
|
|
62
147
|
},
|
|
63
148
|
role: props.role,
|
|
64
149
|
layers: undefined,
|
|
150
|
+
...(effectiveProjectRoot && { projectRoot: effectiveProjectRoot }),
|
|
151
|
+
...(resolvedDepsLockFilePath && {
|
|
152
|
+
depsLockFilePath: resolvedDepsLockFilePath,
|
|
153
|
+
}),
|
|
65
154
|
};
|
|
66
155
|
return lambdaProp;
|
|
67
156
|
};
|
|
@@ -81,4 +170,4 @@ const addLambdaLayers = (scope, lambda, layerArns) => {
|
|
|
81
170
|
});
|
|
82
171
|
}
|
|
83
172
|
};
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWJhc2ljLWxhbWJkYS1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVzb3VyY2VzL2xhbWJkYS9jcmVhdGUtYmFzaWMtbGFtYmRhLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBdUM7QUFFdkMsdURBQStEO0FBQy9ELHFFQUl1QztBQUN2QyxtREFBcUQ7QUFDckQsNkJBQThCO0FBRzlCLDJEQUFpRDtBQUUxQyxNQUFNLGlCQUFpQixHQUFHLENBQy9CLEtBQWdCLEVBQ2hCLEtBQWtCLEVBQ0YsRUFBRTtJQUNsQixNQUFNLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVsRCxJQUFJLGNBQWMsR0FBRyxJQUFJLGtDQUFjLENBQ3JDLEtBQUssRUFDTCxHQUFHLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFDL0MsV0FBVyxDQUNaLENBQUM7SUFFRix5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRXpFLGVBQWUsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUU3RCxPQUFPLGNBQWMsQ0FBQztBQUN4QixDQUFDLENBQUM7QUFqQlcsUUFBQSxpQkFBaUIscUJBaUI1QjtBQUVGLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxLQUFrQixFQUF1QixFQUFFO0lBQ3pFLElBQUksYUFBcUIsQ0FBQztJQUUxQixJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN0RCxhQUFhLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUNqQyxDQUFDO1NBQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxXQUFX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QixTQUFvQixFQUNwQixFQUFFO0lBQ0YsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0QyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBVyxFQUFFLEdBQVcsRUFBRSxFQUFFO1lBQzdDLE1BQU0sS0FBSyxHQUFHLHlCQUFZLENBQUMsbUJBQW1CLENBQzVDLEtBQUssRUFDTCxnQkFBZ0IsR0FBRyxFQUFFLEVBQ3JCLEdBQUcsQ0FDSixDQUFDO1lBRUYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcclxuaW1wb3J0IHsgTGF5ZXJWZXJzaW9uLCBSdW50aW1lIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcclxuaW1wb3J0IHtcclxuICBOb2RlanNGdW5jdGlvbixcclxuICBOb2RlanNGdW5jdGlvblByb3BzLFxyXG4gIFNvdXJjZU1hcE1vZGUsXHJcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCI7XHJcbmltcG9ydCB7IFJldGVudGlvbkRheXMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcclxuaW1wb3J0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuaW1wb3J0IHsgTGFtYmRhUHJvcHMgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9sYW1iZGFcIjtcclxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcclxuaW1wb3J0IHsgVGFibGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiXCI7XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlQmFzaWNMYW1iZGEgPSAoXHJcbiAgc2NvcGU6IENvbnN0cnVjdCxcclxuICBwcm9wczogTGFtYmRhUHJvcHNcclxuKTogTm9kZWpzRnVuY3Rpb24gPT4ge1xyXG4gIGNvbnN0IGxhbWJkYVByb3BzID0gY3JlYXRlQmFzaWNMYW1iZGFQcm9wcyhwcm9wcyk7XHJcblxyXG4gIGxldCBsYW1iZGFGdW5jdGlvbiA9IG5ldyBOb2RlanNGdW5jdGlvbihcclxuICAgIHNjb3BlLFxyXG4gICAgYCR7cHJvcHMuYXBwUHJlZml4IHx8IFwiXCJ9JHtwcm9wcy5mdW5jdGlvbk5hbWV9YCxcclxuICAgIGxhbWJkYVByb3BzXHJcbiAgKTtcclxuXHJcbiAgZ3JhbnRBY2Nlc3NUb0R5bmFtb1RhYmxlcyhzY29wZSwgbGFtYmRhRnVuY3Rpb24sIHByb3BzLmR5bmFtb1RhYmxlTmFtZXMpO1xyXG5cclxuICBhZGRMYW1iZGFMYXllcnMoc2NvcGUsIGxhbWJkYUZ1bmN0aW9uLCBwcm9wcy5sYW1iZGFMYXllckFybik7XHJcblxyXG4gIHJldHVybiBsYW1iZGFGdW5jdGlvbjtcclxufTtcclxuXHJcbmNvbnN0IGNyZWF0ZUJhc2ljTGFtYmRhUHJvcHMgPSAocHJvcHM6IExhbWJkYVByb3BzKTogTm9kZWpzRnVuY3Rpb25Qcm9wcyA9PiB7XHJcbiAgbGV0IHJlc29sdmVkRW50cnk6IHN0cmluZztcclxuXHJcbiAgaWYgKHByb3BzLmNvZGVQYXRoICYmIHBhdGguaXNBYnNvbHV0ZShwcm9wcy5jb2RlUGF0aCkpIHtcclxuICAgIHJlc29sdmVkRW50cnkgPSBwcm9wcy5jb2RlUGF0aDtcclxuICB9IGVsc2UgaWYgKHByb3BzLmNvZGVQYXRoICYmIHByb3BzLnByb2plY3RSb290KSB7XHJcbiAgICAvLyBjb2RlUGF0aCBpcyByZWxhdGl2ZSwgcmVzb2x2ZSBmcm9tIGN1cnJlbnQgZGlyZWN0b3J5ICsgcHJvamVjdFJvb3RcclxuICAgIHJlc29sdmVkRW50cnkgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcHJvcHMuY29kZVBhdGgpO1xyXG4gIH0gZWxzZSBpZiAocHJvcHMucHJvamVjdFJvb3QpIHtcclxuICAgIC8vIE5vIGNvZGVQYXRoLCB1c2UgZGVmYXVsdCBwYXRoIHdpdGggcHJvamVjdFJvb3RcclxuICAgIHJlc29sdmVkRW50cnkgPSBwYXRoLnJlc29sdmUoXHJcbiAgICAgIHByb2Nlc3MuY3dkKCksXHJcbiAgICAgIHByb3BzLnByb2plY3RSb290LFxyXG4gICAgICBgcmVzb3VyY2VzL2xhbWJkYXMvJHtwcm9wcy5mdW5jdGlvbk5hbWV9L21haW4ubXRzYFxyXG4gICAgKTtcclxuICB9IGVsc2UgaWYgKHByb3BzLmNvZGVQYXRoKSB7XHJcbiAgICAvLyBjb2RlUGF0aCB3aXRob3V0IHByb2plY3RSb290XHJcbiAgICByZXNvbHZlZEVudHJ5ID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHByb3BzLmNvZGVQYXRoKTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gRGVmYXVsdCBwYXRoIHdpdGhvdXQgcHJvamVjdFJvb3RcclxuICAgIHJlc29sdmVkRW50cnkgPSBwYXRoLmpvaW4oXHJcbiAgICAgIGAuL3Jlc291cmNlcy9sYW1iZGFzLyR7cHJvcHMuZnVuY3Rpb25OYW1lfS9tYWluLm10c2BcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBsYW1iZGFQcm9wOiBOb2RlanNGdW5jdGlvblByb3BzID0ge1xyXG4gICAgZW50cnk6IHJlc29sdmVkRW50cnksXHJcbiAgICBmdW5jdGlvbk5hbWU6IGAke3Byb3BzLmFwcFByZWZpeCA/IGAke3Byb3BzLmFwcFByZWZpeH0tYCA6IFwiXCJ9JHtcclxuICAgICAgcHJvcHMuZnVuY3Rpb25OYW1lXHJcbiAgICB9YCxcclxuICAgIGhhbmRsZXI6IFwibWFpbi50c1wiLFxyXG4gICAgbG9nUmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcclxuICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTX0xBVEVTVCxcclxuICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoXHJcbiAgICAgIHByb3BzLnRpbWVvdXRJbk1pbnV0ZXMgPyBwcm9wcy50aW1lb3V0SW5NaW51dGVzIDogMVxyXG4gICAgKSxcclxuICAgIG1lbW9yeVNpemU6IHByb3BzLm1lbW9yeSxcclxuICAgIGVudmlyb25tZW50OiB7XHJcbiAgICAgIC4uLnByb3BzLmVudnMsXHJcbiAgICB9LFxyXG4gICAgYnVuZGxpbmc6IHtcclxuICAgICAgbWluaWZ5OiB0cnVlLFxyXG4gICAgICB0YXJnZXQ6IGBlc25leHRgLFxyXG4gICAgICBzb3VyY2VNYXA6IHRydWUsXHJcbiAgICAgIHNvdXJjZU1hcE1vZGU6IFNvdXJjZU1hcE1vZGUuRVhURVJOQUwsXHJcbiAgICAgIGVudmlyb25tZW50OiB7XHJcbiAgICAgICAgLi4ucHJvcHMuZW52cyxcclxuICAgICAgfSxcclxuICAgICAgLi4uKHByb3BzLnByb2plY3RSb290ICYmIHsgcHJvamVjdFJvb3Q6IHByb3BzLnByb2plY3RSb290IH0pLFxyXG4gICAgICAuLi4ocHJvcHMuZGVwc0xvY2tGaWxlUGF0aCAmJiB7XHJcbiAgICAgICAgZGVwc0xvY2tGaWxlUGF0aDogcHJvcHMuZGVwc0xvY2tGaWxlUGF0aCxcclxuICAgICAgfSksXHJcbiAgICB9LFxyXG4gICAgcm9sZTogcHJvcHMucm9sZSxcclxuICAgIGxheWVyczogdW5kZWZpbmVkLFxyXG4gIH07XHJcblxyXG4gIHJldHVybiBsYW1iZGFQcm9wO1xyXG59O1xyXG5cclxuY29uc3QgZ3JhbnRBY2Nlc3NUb0R5bmFtb1RhYmxlcyA9IChcclxuICBzY29wZTogQ29uc3RydWN0LFxyXG4gIGxhbWJkYTogTm9kZWpzRnVuY3Rpb24sXHJcbiAgdGFibGVOYW1lcz86IHN0cmluZ1tdXHJcbikgPT4ge1xyXG4gIGlmICh0YWJsZU5hbWVzICYmIHRhYmxlTmFtZXMubGVuZ3RoID4gMCkge1xyXG4gICAgdGFibGVOYW1lcy5mb3JFYWNoKCh0YWJsZU5hbWUpID0+IHtcclxuICAgICAgY29uc3QgdGFibGUgPSBUYWJsZS5mcm9tVGFibGVOYW1lKHNjb3BlLCBgJHt0YWJsZU5hbWV9LXRhYmxlYCwgdGFibGVOYW1lKTtcclxuXHJcbiAgICAgIHRhYmxlLmdyYW50UmVhZFdyaXRlRGF0YShsYW1iZGEpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgYWRkTGFtYmRhTGF5ZXJzID0gKFxyXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXHJcbiAgbGFtYmRhOiBOb2RlanNGdW5jdGlvbixcclxuICBsYXllckFybnM/OiBzdHJpbmdbXVxyXG4pID0+IHtcclxuICBpZiAobGF5ZXJBcm5zICYmIGxheWVyQXJucy5sZW5ndGggPiAwKSB7XHJcbiAgICBsYXllckFybnMuZm9yRWFjaCgoYXJuOiBzdHJpbmcsIGlkeDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxheWVyID0gTGF5ZXJWZXJzaW9uLmZyb21MYXllclZlcnNpb25Bcm4oXHJcbiAgICAgICAgc2NvcGUsXHJcbiAgICAgICAgYGNvbW1vbi1sYXllci0ke2lkeH1gLFxyXG4gICAgICAgIGFyblxyXG4gICAgICApO1xyXG5cclxuICAgICAgbGFtYmRhLmFkZExheWVycyhsYXllcik7XHJcbiAgICB9KTtcclxuICB9XHJcbn07XHJcbiJdfQ==
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWJhc2ljLWxhbWJkYS1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVzb3VyY2VzL2xhbWJkYS9jcmVhdGUtYmFzaWMtbGFtYmRhLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBdUM7QUFFdkMsdURBQStEO0FBQy9ELHFFQUl1QztBQUN2QyxtREFBcUQ7QUFDckQseUJBQTBCO0FBQzFCLDZCQUE4QjtBQUc5QiwyREFBaUQ7QUFFakQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFZLEVBQUUsTUFBYyxFQUFXLEVBQUU7SUFDMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN6RSxPQUFPLFFBQVEsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDdkYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxlQUFlLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUU3RSxNQUFNLGtCQUFrQixHQUFHLENBQUMsV0FBb0IsRUFBc0IsRUFBRTtJQUN0RSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7UUFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMv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LENBQUMsR0FBVyxFQUFFLEdBQVcsRUFBRSxFQUFFO1lBQzdDLE1BQU0sS0FBSyxHQUFHLHlCQUFZLENBQUMsbUJBQW1CLENBQzVDLEtBQUssRUFDTCxnQkFBZ0IsR0FBRyxFQUFFLEVBQ3JCLEdBQUcsQ0FDSixDQUFDO1lBRUYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcclxuaW1wb3J0IHsgTGF5ZXJWZXJzaW9uLCBSdW50aW1lIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcclxuaW1wb3J0IHtcclxuICBOb2RlanNGdW5jdGlvbixcclxuICBOb2RlanNGdW5jdGlvblByb3BzLFxyXG4gIFNvdXJjZU1hcE1vZGUsXHJcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCI7XHJcbmltcG9ydCB7IFJldGVudGlvbkRheXMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcclxuaW1wb3J0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG5pbXBvcnQgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5pbXBvcnQgeyBMYW1iZGFQcm9wcyB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2xhbWJkYVwiO1xyXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xyXG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcclxuXHJcbmNvbnN0IGlzU3ViUGF0aCA9IChyb290OiBzdHJpbmcsIHRhcmdldDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgY29uc3QgcmVsYXRpdmUgPSBwYXRoLnJlbGF0aXZlKHBhdGgucmVzb2x2ZShyb290KSwgcGF0aC5yZXNvbHZlKHRhcmdldCkpO1xyXG4gIHJldHVybiByZWxhdGl2ZSA9PT0gXCJcIiB8fCAoIXJlbGF0aXZlLnN0YXJ0c1dpdGgoXCIuLlwiKSAmJiAhcGF0aC5pc0Fic29sdXRlKHJlbGF0aXZlKSk7XHJcbn07XHJcblxyXG5jb25zdCBMT0NLX0ZJTEVfTkFNRVMgPSBbXCJwbnBtLWxvY2sueWFtbFwiLCBcInlhcm4ubG9ja1wiLCBcInBhY2thZ2UtbG9jay5qc29uXCJdO1xyXG5cclxuY29uc3QgcmVzb2x2ZVByb2plY3RSb290ID0gKHByb2plY3RSb290Pzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcclxuICBpZiAoIXByb2plY3RSb290KSB7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBhdGguaXNBYnNvbHV0ZShwcm9qZWN0Um9vdClcclxuICAgID8gcGF0aC5yZXNvbHZlKHByb2plY3RSb290KVxyXG4gICAgOiBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcHJvamVjdFJvb3QpO1xyXG59O1xyXG5cclxuY29uc3QgZmluZE5lYXJlc3RMb2NrRmlsZSA9IChzdGFydERpcjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcclxuICBsZXQgY3VycmVudCA9IHBhdGgucmVzb2x2ZShzdGFydERpcik7XHJcbiAgY29uc3QgeyByb290IH0gPSBwYXRoLnBhcnNlKGN1cnJlbnQpO1xyXG5cclxuICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgTE9DS19GSUxFX05BTUVTKSB7XHJcbiAgICAgIGNvbnN0IHJlc29sdmVkQ2FuZGlkYXRlID0gcGF0aC5qb2luKGN1cnJlbnQsIGNhbmRpZGF0ZSk7XHJcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKHJlc29sdmVkQ2FuZGlkYXRlKSAmJiBmcy5zdGF0U3luYyhyZXNvbHZlZENhbmRpZGF0ZSkuaXNGaWxlKCkpIHtcclxuICAgICAgICByZXR1cm4gcmVzb2x2ZWRDYW5kaWRhdGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY3VycmVudCA9PT0gcm9vdCkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGN1cnJlbnQgPSBwYXRoLmRpcm5hbWUoY3VycmVudCk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgZmluZENvbW1vbkFuY2VzdG9yID0gKHBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgaWYgKHBhdGhzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGxldCBhbmNlc3RvciA9IHBhdGgucmVzb2x2ZShwYXRoc1swXSk7XHJcblxyXG4gIGZvciAoY29uc3QgY3VycmVudFBhdGggb2YgcGF0aHMuc2xpY2UoMSkpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IHBhdGgucmVzb2x2ZShjdXJyZW50UGF0aCk7XHJcbiAgICBjb25zdCBhbmNlc3RvclJvb3QgPSBwYXRoLnBhcnNlKGFuY2VzdG9yKS5yb290O1xyXG5cclxuICAgIGlmIChwYXRoLnBhcnNlKGFuY2VzdG9yKS5yb290LnRvTG93ZXJDYXNlKCkgIT09IHBhdGgucGFyc2UodGFyZ2V0KS5yb290LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY2FuZGlkYXRlID0gYW5jZXN0b3I7XHJcbiAgICB3aGlsZSAoIWlzU3ViUGF0aChjYW5kaWRhdGUsIHRhcmdldCkpIHtcclxuICAgICAgaWYgKGNhbmRpZGF0ZSA9PT0gYW5jZXN0b3JSb290KSB7XHJcbiAgICAgICAgY2FuZGlkYXRlID0gYW5jZXN0b3JSb290O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhbmRpZGF0ZSA9IHBhdGguZGlybmFtZShjYW5kaWRhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFuY2VzdG9yID0gY2FuZGlkYXRlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFuY2VzdG9yO1xyXG59O1xyXG5cclxuY29uc3QgcmVzb2x2ZVBhdGggPSAoaW5wdXRQYXRoOiBzdHJpbmcsIHByb2plY3RSb290Pzogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBpZiAocGF0aC5pc0Fic29sdXRlKGlucHV0UGF0aCkpIHtcclxuICAgIHJldHVybiBwYXRoLnJlc29sdmUoaW5wdXRQYXRoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGNhbmRpZGF0ZXM6IHN0cmluZ1tdID0gW107XHJcbiAgaWYgKHByb2plY3RSb290KSB7XHJcbiAgICBjYW5kaWRhdGVzLnB1c2gocGF0aC5yZXNvbHZlKHByb2plY3RSb290LCBpbnB1dFBhdGgpKTtcclxuICB9XHJcbiAgY2FuZGlkYXRlcy5wdXNoKHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBpbnB1dFBhdGgpKTtcclxuXHJcbiAgaWYgKHByb2plY3RSb290KSB7XHJcbiAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7XHJcbiAgICAgIGlmIChpc1N1YlBhdGgocHJvamVjdFJvb3QsIGNhbmRpZGF0ZSkpIHtcclxuICAgICAgICByZXR1cm4gY2FuZGlkYXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY2FuZGlkYXRlc1tjYW5kaWRhdGVzLmxlbmd0aCAtIDFdO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUJhc2ljTGFtYmRhID0gKFxyXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXHJcbiAgcHJvcHM6IExhbWJkYVByb3BzXHJcbik6IE5vZGVqc0Z1bmN0aW9uID0+IHtcclxuICBjb25zdCBsYW1iZGFQcm9wcyA9IGNyZWF0ZUJhc2ljTGFtYmRhUHJvcHMocHJvcHMpO1xyXG5cclxuICBsZXQgbGFtYmRhRnVuY3Rpb24gPSBuZXcgTm9kZWpzRnVuY3Rpb24oXHJcbiAgICBzY29wZSxcclxuICAgIGAke3Byb3BzLmFwcFByZWZpeCB8fCBcIlwifSR7cHJvcHMuZnVuY3Rpb25OYW1lfWAsXHJcbiAgICBsYW1iZGFQcm9wc1xyXG4gICk7XHJcblxyXG4gIGdyYW50QWNjZXNzVG9EeW5hbW9UYWJsZXMoc2NvcGUsIGxhbWJkYUZ1bmN0aW9uLCBwcm9wcy5keW5hbW9UYWJsZU5hbWVzKTtcclxuXHJcbiAgYWRkTGFtYmRhTGF5ZXJzKHNjb3BlLCBsYW1iZGFGdW5jdGlvbiwgcHJvcHMubGFtYmRhTGF5ZXJBcm4pO1xyXG5cclxuICByZXR1cm4gbGFtYmRhRnVuY3Rpb247XHJcbn07XHJcblxyXG5jb25zdCBjcmVhdGVCYXNpY0xhbWJkYVByb3BzID0gKHByb3BzOiBMYW1iZGFQcm9wcyk6IE5vZGVqc0Z1bmN0aW9uUHJvcHMgPT4ge1xyXG4gIGNvbnN0IHJlc29sdmVkUHJvamVjdFJvb3QgPSByZXNvbHZlUHJvamVjdFJvb3QocHJvcHMucHJvamVjdFJvb3QpO1xyXG4gIGNvbnN0IGRlZmF1bHRSZWxhdGl2ZUVudHJ5ID0gcGF0aC5qb2luKFxyXG4gICAgXCJyZXNvdXJjZXNcIixcclxuICAgIFwibGFtYmRhc1wiLFxyXG4gICAgcHJvcHMuZnVuY3Rpb25OYW1lLFxyXG4gICAgXCJtYWluLm10c1wiXHJcbiAgKTtcclxuICBjb25zdCBlbnRyeVBhdGggPSBwcm9wcy5jb2RlUGF0aCA/PyBkZWZhdWx0UmVsYXRpdmVFbnRyeTtcclxuICBjb25zdCByZXNvbHZlZEVudHJ5ID0gcmVzb2x2ZVBhdGgoZW50cnlQYXRoLCByZXNvbHZlZFByb2plY3RSb290KTtcclxuXHJcbiAgY29uc3QgY3dkID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCkpO1xyXG4gIGNvbnN0IGVudHJ5RGlyID0gcGF0aC5kaXJuYW1lKHJlc29sdmVkRW50cnkpO1xyXG5cclxuICBsZXQgZWZmZWN0aXZlUHJvamVjdFJvb3QgPSByZXNvbHZlZFByb2plY3RSb290ID8/IGN3ZDtcclxuICBpZiAoIWlzU3ViUGF0aChlZmZlY3RpdmVQcm9qZWN0Um9vdCwgcmVzb2x2ZWRFbnRyeSkpIHtcclxuICAgIGNvbnN0IGFuY2VzdG9yID0gZmluZENvbW1vbkFuY2VzdG9yKFtlZmZlY3RpdmVQcm9qZWN0Um9vdCwgZW50cnlEaXJdKTtcclxuICAgIGlmICghYW5jZXN0b3IpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBVbmFibGUgdG8gZGV0ZXJtaW5lIGEgcHJvamVjdFJvb3QgdGhhdCBjb250YWlucyBib3RoICR7ZWZmZWN0aXZlUHJvamVjdFJvb3R9IGFuZCAke3Jlc29sdmVkRW50cnl9LmBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGVmZmVjdGl2ZVByb2plY3RSb290ID0gYW5jZXN0b3I7XHJcbiAgfVxyXG5cclxuICBpZiAoIWlzU3ViUGF0aChlZmZlY3RpdmVQcm9qZWN0Um9vdCwgcmVzb2x2ZWRFbnRyeSkpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgYFJlc29sdmVkIGxhbWJkYSBlbnRyeSAke3Jlc29sdmVkRW50cnl9IG11c3QgYmUgbG9jYXRlZCB3aXRoaW4gcHJvamVjdFJvb3QgJHtlZmZlY3RpdmVQcm9qZWN0Um9vdH0uYFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGxldCByZXNvbHZlZERlcHNMb2NrRmlsZVBhdGggPSBwcm9wcy5kZXBzTG9ja0ZpbGVQYXRoXHJcbiAgICA/IHJlc29sdmVQYXRoKHByb3BzLmRlcHNMb2NrRmlsZVBhdGgsIHJlc29sdmVkUHJvamVjdFJvb3QpXHJcbiAgICA6IHVuZGVmaW5lZDtcclxuXHJcbiAgaWYgKCFyZXNvbHZlZERlcHNMb2NrRmlsZVBhdGgpIHtcclxuICAgIGNvbnN0IHBvdGVudGlhbExvY2tGaWxlcyA9IFtcclxuICAgICAgZmluZE5lYXJlc3RMb2NrRmlsZShlbnRyeURpciksXHJcbiAgICAgIGZpbmROZWFyZXN0TG9ja0ZpbGUoY3dkKSxcclxuICAgICAgZWZmZWN0aXZlUHJvamVjdFJvb3QgIT09IGN3ZCA/IGZpbmROZWFyZXN0TG9ja0ZpbGUoZWZmZWN0aXZlUHJvamVjdFJvb3QpIDogdW5kZWZpbmVkLFxyXG4gICAgXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGxvY2tGaWxlIG9mIHBvdGVudGlhbExvY2tGaWxlcykge1xyXG4gICAgICBpZiAobG9ja0ZpbGUgJiYgaXNTdWJQYXRoKGVmZmVjdGl2ZVByb2plY3RSb290LCBsb2NrRmlsZSkpIHtcclxuICAgICAgICByZXNvbHZlZERlcHNMb2NrRmlsZVBhdGggPSBsb2NrRmlsZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKFxyXG4gICAgcmVzb2x2ZWREZXBzTG9ja0ZpbGVQYXRoICYmXHJcbiAgICAhaXNTdWJQYXRoKGVmZmVjdGl2ZVByb2plY3RSb290LCByZXNvbHZlZERlcHNMb2NrRmlsZVBhdGgpXHJcbiAgKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgIGBSZXNvbHZlZCBkZXBzTG9ja0ZpbGVQYXRoICR7cmVzb2x2ZWREZXBzTG9ja0ZpbGVQYXRofSBtdXN0IGJlIGxvY2F0ZWQgd2l0aGluIHByb2plY3RSb290ICR7ZWZmZWN0aXZlUHJvamVjdFJvb3R9LmBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBlbnZpcm9ubWVudFZhcnMgPSBwcm9wcy5lbnZzID8/IHt9O1xyXG5cclxuICBjb25zdCBsYW1iZGFQcm9wOiBOb2RlanNGdW5jdGlvblByb3BzID0ge1xyXG4gICAgZW50cnk6IHJlc29sdmVkRW50cnksXHJcbiAgICBmdW5jdGlvbk5hbWU6IGAke3Byb3BzLmFwcFByZWZpeCA/IGAke3Byb3BzLmFwcFByZWZpeH0tYCA6IFwiXCJ9JHtcclxuICAgICAgcHJvcHMuZnVuY3Rpb25OYW1lXHJcbiAgICB9YCxcclxuICAgIGhhbmRsZXI6IFwibWFpbi50c1wiLFxyXG4gICAgbG9nUmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcclxuICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTX0xBVEVTVCxcclxuICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoXHJcbiAgICAgIHByb3BzLnRpbWVvdXRJbk1pbnV0ZXMgPyBwcm9wcy50aW1lb3V0SW5NaW51dGVzIDogMVxyXG4gICAgKSxcclxuICAgIG1lbW9yeVNpemU6IHByb3BzLm1lbW9yeSxcclxuICAgIGVudmlyb25tZW50OiB7XHJcbiAgICAgIC4uLmVudmlyb25tZW50VmFycyxcclxuICAgIH0sXHJcbiAgICBidW5kbGluZzoge1xyXG4gICAgICBtaW5pZnk6IHRydWUsXHJcbiAgICAgIHRhcmdldDogYGVzbmV4dGAsXHJcbiAgICAgIHNvdXJjZU1hcDogdHJ1ZSxcclxuICAgICAgc291cmNlTWFwTW9kZTogU291cmNlTWFwTW9kZS5FWFRFUk5BTCxcclxuICAgICAgZW52aXJvbm1lbnQ6IHtcclxuICAgICAgICAuLi5lbnZpcm9ubWVudFZhcnMsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgcm9sZTogcHJvcHMucm9sZSxcclxuICAgIGxheWVyczogdW5kZWZpbmVkLFxyXG4gICAgLi4uKGVmZmVjdGl2ZVByb2plY3RSb290ICYmIHsgcHJvamVjdFJvb3Q6IGVmZmVjdGl2ZVByb2plY3RSb290IH0pLFxyXG4gICAgLi4uKHJlc29sdmVkRGVwc0xvY2tGaWxlUGF0aCAmJiB7XHJcbiAgICAgIGRlcHNMb2NrRmlsZVBhdGg6IHJlc29sdmVkRGVwc0xvY2tGaWxlUGF0aCxcclxuICAgIH0pLFxyXG4gIH07XHJcblxyXG4gIHJldHVybiBsYW1iZGFQcm9wO1xyXG59O1xyXG5cclxuY29uc3QgZ3JhbnRBY2Nlc3NUb0R5bmFtb1RhYmxlcyA9IChcclxuICBzY29wZTogQ29uc3RydWN0LFxyXG4gIGxhbWJkYTogTm9kZWpzRnVuY3Rpb24sXHJcbiAgdGFibGVOYW1lcz86IHN0cmluZ1tdXHJcbikgPT4ge1xyXG4gIGlmICh0YWJsZU5hbWVzICYmIHRhYmxlTmFtZXMubGVuZ3RoID4gMCkge1xyXG4gICAgdGFibGVOYW1lcy5mb3JFYWNoKCh0YWJsZU5hbWUpID0+IHtcclxuICAgICAgY29uc3QgdGFibGUgPSBUYWJsZS5mcm9tVGFibGVOYW1lKHNjb3BlLCBgJHt0YWJsZU5hbWV9LXRhYmxlYCwgdGFibGVOYW1lKTtcclxuXHJcbiAgICAgIHRhYmxlLmdyYW50UmVhZFdyaXRlRGF0YShsYW1iZGEpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgYWRkTGFtYmRhTGF5ZXJzID0gKFxyXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXHJcbiAgbGFtYmRhOiBOb2RlanNGdW5jdGlvbixcclxuICBsYXllckFybnM/OiBzdHJpbmdbXVxyXG4pID0+IHtcclxuICBpZiAobGF5ZXJBcm5zICYmIGxheWVyQXJucy5sZW5ndGggPiAwKSB7XHJcbiAgICBsYXllckFybnMuZm9yRWFjaCgoYXJuOiBzdHJpbmcsIGlkeDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxheWVyID0gTGF5ZXJWZXJzaW9uLmZyb21MYXllclZlcnNpb25Bcm4oXHJcbiAgICAgICAgc2NvcGUsXHJcbiAgICAgICAgYGNvbW1vbi1sYXllci0ke2lkeH1gLFxyXG4gICAgICAgIGFyblxyXG4gICAgICApO1xyXG5cclxuICAgICAgbGFtYmRhLmFkZExheWVycyhsYXllcik7XHJcbiAgICB9KTtcclxuICB9XHJcbn07XHJcbiJdfQ==
|
|
@@ -6,11 +6,82 @@ 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
|
+
const candidates = [];
|
|
72
|
+
if (projectRoot) {
|
|
73
|
+
candidates.push(path.resolve(projectRoot, inputPath));
|
|
74
|
+
}
|
|
75
|
+
candidates.push(path.resolve(process.cwd(), inputPath));
|
|
76
|
+
if (projectRoot) {
|
|
77
|
+
for (const candidate of candidates) {
|
|
78
|
+
if (isSubPath(projectRoot, candidate)) {
|
|
79
|
+
return candidate;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return candidates[candidates.length - 1];
|
|
84
|
+
};
|
|
14
85
|
const createBasicLambdaTimerJob = (scope, props) => {
|
|
15
86
|
const lambdaProps = createBasicLambdaProps(props);
|
|
16
87
|
let lambdaFunction = new aws_lambda_nodejs_1.NodejsFunction(scope, `${props.appPrefix}${props.functionName}`, lambdaProps);
|
|
@@ -23,26 +94,44 @@ const createBasicLambdaTimerJob = (scope, props) => {
|
|
|
23
94
|
};
|
|
24
95
|
exports.createBasicLambdaTimerJob = createBasicLambdaTimerJob;
|
|
25
96
|
const createBasicLambdaProps = (props) => {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
97
|
+
const resolvedProjectRoot = resolveProjectRoot(props.projectRoot);
|
|
98
|
+
const defaultRelativeEntry = path.join("resources", "lambdas", "timer-jobs", props.functionName, "main.mts");
|
|
99
|
+
const entryPath = props.codePath ?? defaultRelativeEntry;
|
|
100
|
+
const resolvedEntry = resolvePath(entryPath, resolvedProjectRoot);
|
|
101
|
+
const cwd = path.resolve(process.cwd());
|
|
102
|
+
const entryDir = path.dirname(resolvedEntry);
|
|
103
|
+
let effectiveProjectRoot = resolvedProjectRoot ?? cwd;
|
|
104
|
+
if (!isSubPath(effectiveProjectRoot, resolvedEntry)) {
|
|
105
|
+
const ancestor = findCommonAncestor([effectiveProjectRoot, entryDir]);
|
|
106
|
+
if (!ancestor) {
|
|
107
|
+
throw new Error(`Unable to determine a projectRoot that contains both ${effectiveProjectRoot} and ${resolvedEntry}.`);
|
|
108
|
+
}
|
|
109
|
+
effectiveProjectRoot = ancestor;
|
|
33
110
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
resolvedEntry = path.resolve(process.cwd(), props.projectRoot, `resources/lambdas/timer-jobs/${props.functionName}/main.mts`);
|
|
111
|
+
if (!isSubPath(effectiveProjectRoot, resolvedEntry)) {
|
|
112
|
+
throw new Error(`Resolved lambda entry ${resolvedEntry} must be located within projectRoot ${effectiveProjectRoot}.`);
|
|
37
113
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
114
|
+
let resolvedDepsLockFilePath = props.depsLockFilePath
|
|
115
|
+
? resolvePath(props.depsLockFilePath, resolvedProjectRoot)
|
|
116
|
+
: undefined;
|
|
117
|
+
if (!resolvedDepsLockFilePath) {
|
|
118
|
+
const potentialLockFiles = [
|
|
119
|
+
findNearestLockFile(entryDir),
|
|
120
|
+
findNearestLockFile(cwd),
|
|
121
|
+
effectiveProjectRoot !== cwd ? findNearestLockFile(effectiveProjectRoot) : undefined,
|
|
122
|
+
];
|
|
123
|
+
for (const lockFile of potentialLockFiles) {
|
|
124
|
+
if (lockFile && isSubPath(effectiveProjectRoot, lockFile)) {
|
|
125
|
+
resolvedDepsLockFilePath = lockFile;
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
41
129
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
130
|
+
if (resolvedDepsLockFilePath &&
|
|
131
|
+
!isSubPath(effectiveProjectRoot, resolvedDepsLockFilePath)) {
|
|
132
|
+
throw new Error(`Resolved depsLockFilePath ${resolvedDepsLockFilePath} must be located within projectRoot ${effectiveProjectRoot}.`);
|
|
45
133
|
}
|
|
134
|
+
const environmentVars = props.envs ?? {};
|
|
46
135
|
const lambdaProp = {
|
|
47
136
|
entry: resolvedEntry,
|
|
48
137
|
functionName: `${props.appPrefix ? `${props.appPrefix}-` : ""}${props.functionName}`,
|
|
@@ -52,7 +141,7 @@ const createBasicLambdaProps = (props) => {
|
|
|
52
141
|
timeout: aws_cdk_lib_1.Duration.minutes(props.timeoutInMinutes ? props.timeoutInMinutes : 1),
|
|
53
142
|
memorySize: props.memory,
|
|
54
143
|
environment: {
|
|
55
|
-
...
|
|
144
|
+
...environmentVars,
|
|
56
145
|
},
|
|
57
146
|
bundling: {
|
|
58
147
|
minify: true,
|
|
@@ -60,15 +149,15 @@ const createBasicLambdaProps = (props) => {
|
|
|
60
149
|
sourceMap: true,
|
|
61
150
|
sourceMapMode: aws_lambda_nodejs_1.SourceMapMode.EXTERNAL,
|
|
62
151
|
environment: {
|
|
63
|
-
...
|
|
152
|
+
...environmentVars,
|
|
64
153
|
},
|
|
65
|
-
...(props.projectRoot && { projectRoot: props.projectRoot }),
|
|
66
|
-
...(props.depsLockFilePath && {
|
|
67
|
-
depsLockFilePath: props.depsLockFilePath,
|
|
68
|
-
}),
|
|
69
154
|
},
|
|
70
155
|
role: props.role,
|
|
71
156
|
layers: undefined,
|
|
157
|
+
...(effectiveProjectRoot && { projectRoot: effectiveProjectRoot }),
|
|
158
|
+
...(resolvedDepsLockFilePath && {
|
|
159
|
+
depsLockFilePath: resolvedDepsLockFilePath,
|
|
160
|
+
}),
|
|
72
161
|
};
|
|
73
162
|
return lambdaProp;
|
|
74
163
|
};
|
|
@@ -99,4 +188,4 @@ const addLambdaLayers = (scope, lambda, layerArns) => {
|
|
|
99
188
|
});
|
|
100
189
|
}
|
|
101
190
|
};
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWJhc2ljLWxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXNvdXJjZXMvbGFtYmRhL2NyZWF0ZS1iYXNpYy1sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVDO0FBQ3ZDLGlEQUF1RDtBQUN2RCx1REFBK0Q7QUFDL0QscUVBSXVDO0FBQ3ZDLG1EQUFxRDtBQUNyRCw2QkFBOEI7QUFHOUIscUdBQW9GO0FBQ3BGLHVEQUFxRTtBQUNyRSx1RUFBZ0U7QUFDaEUsMkRBQWlEO0FBRTFDLE1BQU0seUJBQXlCLEdBQUcsQ0FDdkMsS0FBZ0IsRUFDaEIsS0FBb0IsRUFDSixFQUFFO0lBQ2xCLE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWxELElBQUksY0FBYyxHQUFHLElBQUksa0NBQWMsQ0FDckMsS0FBSyxFQUNMLEdBQUcsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLEVBQ3pDLFdBQVcsQ0FDWixDQUFDO0lBRUYsb0NBQW9DLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFckQsTUFBTSxTQUFTLEdBQUcsd0JBQXdCLENBQ3hDLEtBQUssRUFDTCxjQUFjLEVBQ2QsS0FBSyxDQUFDLFdBQVcsQ0FDbEIsQ0FBQztJQUVGLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxtQ0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFFeEQseUJBQXlCLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUV6RSxlQUFlLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFN0QsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBM0JXLFFBQUEseUJBQXlCLDZCQTJCcEM7QUFFRixNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBb0IsRUFB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QUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xyXG5pbXBvcnQgeyBMYXllclZlcnNpb24sIFJ1bnRpbWUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xyXG5pbXBvcnQge1xyXG4gIE5vZGVqc0Z1bmN0aW9uLFxyXG4gIE5vZGVqc0Z1bmN0aW9uUHJvcHMsXHJcbiAgU291cmNlTWFwTW9kZSxcclxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanNcIjtcclxuaW1wb3J0IHsgUmV0ZW50aW9uRGF5cyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xyXG5pbXBvcnQgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5pbXBvcnQgeyBUaW1lckpvYlByb3BzIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvdGltZXItam9iXCI7XHJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XHJcbmltcG9ydCB7IFNFUlZJQ0VfUFJJTkNJUEFMIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy9hd3Mtc2VydmljZS1wcmluY2lwYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IENyb25PcHRpb25zLCBSdWxlLCBTY2hlZHVsZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZXZlbnRzXCI7XHJcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0c1wiO1xyXG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVCYXNpY0xhbWJkYVRpbWVySm9iID0gKFxyXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXHJcbiAgcHJvcHM6IFRpbWVySm9iUHJvcHNcclxuKTogTm9kZWpzRnVuY3Rpb24gPT4ge1xyXG4gIGNvbnN0IGxhbWJkYVByb3BzID0gY3JlYXRlQmFzaWNMYW1iZGFQcm9wcyhwcm9wcyk7XHJcblxyXG4gIGxldCBsYW1iZGFGdW5jdGlvbiA9IG5ldyBOb2RlanNGdW5jdGlvbihcclxuICAgIHNjb3BlLFxyXG4gICAgYCR7cHJvcHMuYXBwUHJlZml4fSR7cHJvcHMuZnVuY3Rpb25OYW1lfWAsXHJcbiAgICBsYW1iZGFQcm9wc1xyXG4gICk7XHJcblxyXG4gIGFkZEludm9rZVBlcm1pc3Npb25Ub0xhbWJkYUZvckV2ZW50cyhsYW1iZGFGdW5jdGlvbik7XHJcblxyXG4gIGNvbnN0IGV2ZW50UnVsZSA9IGNyZWF0ZUV2ZW50UnVsZUZvckxhbWJkYShcclxuICAgIHNjb3BlLFxyXG4gICAgbGFtYmRhRnVuY3Rpb24sXHJcbiAgICBwcm9wcy5jcm9uT3B0aW9uc1xyXG4gICk7XHJcblxyXG4gIGV2ZW50UnVsZS5hZGRUYXJnZXQobmV3IExhbWJkYUZ1bmN0aW9uKGxhbWJkYUZ1bmN0aW9uKSk7XHJcblxyXG4gIGdyYW50QWNjZXNzVG9EeW5hbW9UYWJsZXMoc2NvcGUsIGxhbWJkYUZ1bmN0aW9uLCBwcm9wcy5keW5hbW9UYWJsZU5hbWVzKTtcclxuXHJcbiAgYWRkTGFtYmRhTGF5ZXJzKHNjb3BlLCBsYW1iZGFGdW5jdGlvbiwgcHJvcHMubGFtYmRhTGF5ZXJBcm4pO1xyXG5cclxuICByZXR1cm4gbGFtYmRhRnVuY3Rpb247XHJcbn07XHJcblxyXG5jb25zdCBjcmVhdGVCYXNpY0xhbWJkYVByb3BzID0gKHByb3BzOiBUaW1lckpvYlByb3BzKTogTm9kZWpzRnVuY3Rpb25Qcm9wcyA9PiB7XHJcbiAgbGV0IHJlc29sdmVkRW50cnk6IHN0cmluZztcclxuXHJcbiAgaWYgKHByb3BzLmNvZGVQYXRoICYmIHBhdGguaXNBYnNvbHV0ZShwcm9wcy5jb2RlUGF0aCkpIHtcclxuICAgIHJlc29sdmVkRW50cnkgPSBwcm9wcy5jb2RlUGF0aDtcclxuICB9IGVsc2UgaWYgKHByb3BzLmNvZGVQYXRoICYmIHByb3BzLnByb2plY3RSb290KSB7XHJcbiAgICAvLyBjb2RlUGF0aCBpcyByZWxhdGl2ZSwgcmVzb2x2ZSBmcm9tIGN1cnJlbnQgZGlyZWN0b3J5ICsgcHJvamVjdFJvb3RcclxuICAgIHJlc29sdmVkRW50cnkgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcHJvcHMuY29kZVBhdGgpO1xyXG4gIH0gZWxzZSBpZiAocHJvcHMucHJvamVjdFJvb3QpIHtcclxuICAgIC8vIE5vIGNvZGVQYXRoLCB1c2UgZGVmYXVsdCBwYXRoIHdpdGggcHJvamVjdFJvb3RcclxuICAgIHJlc29sdmVkRW50cnkgPSBwYXRoLnJlc29sdmUoXHJcbiAgICAgIHByb2Nlc3MuY3dkKCksXHJcbiAgICAgIHByb3BzLnByb2plY3RSb290LFxyXG4gICAgICBgcmVzb3VyY2VzL2xhbWJkYXMvdGltZXItam9icy8ke3Byb3BzLmZ1bmN0aW9uTmFtZX0vbWFpbi5tdHNgXHJcbiAgICApO1xyXG4gIH0gZWxzZSBpZiAocHJvcHMuY29kZVBhdGgpIHtcclxuICAgIC8vIGNvZGVQYXRoIHdpdGhvdXQgcHJvamVjdFJvb3RcclxuICAgIHJlc29sdmVkRW50cnkgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcHJvcHMuY29kZVBhdGgpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBEZWZhdWx0IHBhdGggd2l0aG91dCBwcm9qZWN0Um9vdFxyXG4gICAgcmVzb2x2ZWRFbnRyeSA9IHBhdGguam9pbihcclxuICAgICAgYC4vcmVzb3VyY2VzL2xhbWJkYXMvdGltZXItam9icy8ke3Byb3BzLmZ1bmN0aW9uTmFtZX0vbWFpbi5tdHNgXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgbGFtYmRhUHJvcDogTm9kZWpzRnVuY3Rpb25Qcm9wcyA9IHtcclxuICAgIGVudHJ5OiByZXNvbHZlZEVudHJ5LFxyXG4gICAgZnVuY3Rpb25OYW1lOiBgJHtwcm9wcy5hcHBQcmVmaXggPyBgJHtwcm9wcy5hcHBQcmVmaXh9LWAgOiBcIlwifSR7XHJcbiAgICAgIHByb3BzLmZ1bmN0aW9uTmFtZVxyXG4gICAgfWAsXHJcbiAgICBoYW5kbGVyOiBcIm1haW4udHNcIixcclxuICAgIGxvZ1JldGVudGlvbjogUmV0ZW50aW9uRGF5cy5UV09fV0VFS1MsXHJcbiAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU19MQVRFU1QsXHJcbiAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKFxyXG4gICAgICBwcm9wcy50aW1lb3V0SW5NaW51dGVzID8gcHJvcHMudGltZW91dEluTWludXRlcyA6IDFcclxuICAgICksXHJcbiAgICBtZW1vcnlTaXplOiBwcm9wcy5tZW1vcnksXHJcbiAgICBlbnZpcm9ubWVudDoge1xyXG4gICAgICAuLi5wcm9wcy5lbnZzLFxyXG4gICAgfSxcclxuICAgIGJ1bmRsaW5nOiB7XHJcbiAgICAgIG1pbmlmeTogdHJ1ZSxcclxuICAgICAgdGFyZ2V0OiBgZXNuZXh0YCxcclxuICAgICAgc291cmNlTWFwOiB0cnVlLFxyXG4gICAgICBzb3VyY2VNYXBNb2RlOiBTb3VyY2VNYXBNb2RlLkVYVEVSTkFMLFxyXG4gICAgICBlbnZpcm9ubWVudDoge1xyXG4gICAgICAgIC4uLnByb3BzLmVudnMsXHJcbiAgICAgIH0sXHJcbiAgICAgIC4uLihwcm9wcy5wcm9qZWN0Um9vdCAmJiB7IHByb2plY3RSb290OiBwcm9wcy5wcm9qZWN0Um9vdCB9KSxcclxuICAgICAgLi4uKHByb3BzLmRlcHNMb2NrRmlsZVBhdGggJiYge1xyXG4gICAgICAgIGRlcHNMb2NrRmlsZVBhdGg6IHByb3BzLmRlcHNMb2NrRmlsZVBhdGgsXHJcbiAgICAgIH0pLFxyXG4gICAgfSxcclxuICAgIHJvbGU6IHByb3BzLnJvbGUsXHJcbiAgICBsYXllcnM6IHVuZGVmaW5lZCxcclxuICB9O1xyXG5cclxuICByZXR1cm4gbGFtYmRhUHJvcDtcclxufTtcclxuXHJcbmNvbnN0IGFkZEludm9rZVBlcm1pc3Npb25Ub0xhbWJkYUZvckV2ZW50cyA9IChsYW1iZGE6IE5vZGVqc0Z1bmN0aW9uKSA9PiB7XHJcbiAgbGFtYmRhLmFkZFBlcm1pc3Npb24oYEludm9rZVBlcm1pc3Npb24tJHtsYW1iZGEuZnVuY3Rpb25OYW1lfWAsIHtcclxuICAgIHByaW5jaXBhbDogbmV3IFNlcnZpY2VQcmluY2lwYWwoU0VSVklDRV9QUklOQ0lQQUwuRVZFTlRTKSxcclxuICB9KTtcclxufTtcclxuXHJcbmNvbnN0IGNyZWF0ZUV2ZW50UnVsZUZvckxhbWJkYSA9IChcclxuICBzY29wZTogQ29uc3RydWN0LFxyXG4gIGxhbWJkYTogTm9kZWpzRnVuY3Rpb24sXHJcbiAgb3B0aW9uczogQ3Jvbk9wdGlvbnNcclxuKSA9PiB7XHJcbiAgY29uc3QgZXZlbnRSdWxlID0gbmV3IFJ1bGUoXHJcbiAgICBzY29wZSxcclxuICAgIGBzY2hlZHVsZVJ1bGUtJHtsYW1iZGE/Lm5vZGUuaWQgfHwgXCIwMTBcIn1gLFxyXG4gICAge1xyXG4gICAgICBzY2hlZHVsZTogU2NoZWR1bGUuY3JvbihvcHRpb25zKSxcclxuICAgIH1cclxuICApO1xyXG5cclxuICByZXR1cm4gZXZlbnRSdWxlO1xyXG59O1xyXG5cclxuY29uc3QgZ3JhbnRBY2Nlc3NUb0R5bmFtb1RhYmxlcyA9IChcclxuICBzY29wZTogQ29uc3RydWN0LFxyXG4gIGxhbWJkYTogTm9kZWpzRnVuY3Rpb24sXHJcbiAgdGFibGVOYW1lcz86IHN0cmluZ1tdXHJcbikgPT4ge1xyXG4gIGlmICh0YWJsZU5hbWVzICYmIHRhYmxlTmFtZXMubGVuZ3RoID4gMCkge1xyXG4gICAgdGFibGVOYW1lcy5mb3JFYWNoKCh0YWJsZU5hbWUpID0+IHtcclxuICAgICAgY29uc3QgdGFibGUgPSBUYWJsZS5mcm9tVGFibGVOYW1lKHNjb3BlLCBgJHt0YWJsZU5hbWV9LXRhYmxlYCwgdGFibGVOYW1lKTtcclxuXHJcbiAgICAgIHRhYmxlLmdyYW50UmVhZFdyaXRlRGF0YShsYW1iZGEpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgYWRkTGFtYmRhTGF5ZXJzID0gKFxyXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXHJcbiAgbGFtYmRhOiBOb2RlanNGdW5jdGlvbixcclxuICBsYXllckFybnM/OiBzdHJpbmdbXVxyXG4pID0+IHtcclxuICBpZiAobGF5ZXJBcm5zICYmIGxheWVyQXJucy5sZW5ndGggPiAwKSB7XHJcbiAgICBsYXllckFybnMuZm9yRWFjaCgoYXJuOiBzdHJpbmcsIGlkeDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxheWVyID0gTGF5ZXJWZXJzaW9uLmZyb21MYXllclZlcnNpb25Bcm4oXHJcbiAgICAgICAgc2NvcGUsXHJcbiAgICAgICAgYGNvbW1vbi1sYXllci0ke2lkeH1gLFxyXG4gICAgICAgIGFyblxyXG4gICAgICApO1xyXG5cclxuICAgICAgbGFtYmRhLmFkZExheWVycyhsYXllcik7XHJcbiAgICB9KTtcclxuICB9XHJcbn07XHJcbiJdfQ==
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWJhc2ljLWxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXNvdXJjZXMvbGFtYmRhL2NyZWF0ZS1iYXNpYy1sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVDO0FBQ3ZDLGlEQUF1RDtBQUN2RCx1REFBK0Q7QUFDL0QscUVBSXVDO0FBQ3ZDLG1EQUFxRDtBQUNyRCx5QkFBMEI7QUFDMUIsNkJBQThCO0FBRzlCLHFHQUFvRjtBQUNwRix1REFBcUU7QUFDckUsdUVBQWdFO0FBQ2hFLDJEQUFpRDtBQUVqRCxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQVksRUFBRSxNQUFjLEVBQVcsRUFBRTtJQUMxRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE9BQU8sUUFBUSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN2RixDQUFDLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBRyxDQUFDLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBRTdFLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxXQUFvQixFQUFzQixFQUFFO0lBQ3RFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxD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cnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcclxuaW1wb3J0IHsgTGF5ZXJWZXJzaW9uLCBSdW50aW1lIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcclxuaW1wb3J0IHtcclxuICBOb2RlanNGdW5jdGlvbixcclxuICBOb2RlanNGdW5jdGlvblByb3BzLFxyXG4gIFNvdXJjZU1hcE1vZGUsXHJcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCI7XHJcbmltcG9ydCB7IFJldGVudGlvbkRheXMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcclxuaW1wb3J0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG5pbXBvcnQgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5pbXBvcnQgeyBUaW1lckpvYlByb3BzIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvdGltZXItam9iXCI7XHJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XHJcbmltcG9ydCB7IFNFUlZJQ0VfUFJJTkNJUEFMIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy9hd3Mtc2VydmljZS1wcmluY2lwYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IENyb25PcHRpb25zLCBSdWxlLCBTY2hlZHVsZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZXZlbnRzXCI7XHJcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0c1wiO1xyXG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcclxuXHJcbmNvbnN0IGlzU3ViUGF0aCA9IChyb290OiBzdHJpbmcsIHRhcmdldDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgY29uc3QgcmVsYXRpdmUgPSBwYXRoLnJlbGF0aXZlKHBhdGgucmVzb2x2ZShyb290KSwgcGF0aC5yZXNvbHZlKHRhcmdldCkpO1xyXG4gIHJldHVybiByZWxhdGl2ZSA9PT0gXCJcIiB8fCAoIXJlbGF0aXZlLnN0YXJ0c1dpdGgoXCIuLlwiKSAmJiAhcGF0aC5pc0Fic29sdXRlKHJlbGF0aXZlKSk7XHJcbn07XHJcblxyXG5jb25zdCBMT0NLX0ZJTEVfTkFNRVMgPSBbXCJwbnBtLWxvY2sueWFtbFwiLCBcInlhcm4ubG9ja1wiLCBcInBhY2thZ2UtbG9jay5qc29uXCJdO1xyXG5cclxuY29uc3QgcmVzb2x2ZVByb2plY3RSb290ID0gKHByb2plY3RSb290Pzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcclxuICBpZiAoIXByb2plY3RSb290KSB7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBhdGguaXNBYnNvbHV0ZShwcm9qZWN0Um9vdClcclxuICAgID8gcGF0aC5yZXNvbHZlKHByb2plY3RSb290KVxyXG4gICAgOiBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcHJvamVjdFJvb3QpO1xyXG59O1xyXG5cclxuY29uc3QgZmluZE5lYXJlc3RMb2NrRmlsZSA9IChzdGFydERpcjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcclxuICBsZXQgY3VycmVudCA9IHBhdGgucmVzb2x2ZShzdGFydERpcik7XHJcbiAgY29uc3QgeyByb290IH0gPSBwYXRoLnBhcnNlKGN1cnJlbnQpO1xyXG5cclxuICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgTE9DS19GSUxFX05BTUVTKSB7XHJcbiAgICAgIGNvbnN0IHJlc29sdmVkQ2FuZGlkYXRlID0gcGF0aC5qb2luKGN1cnJlbnQsIGNhbmRpZGF0ZSk7XHJcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKHJlc29sdmVkQ2FuZGlkYXRlKSAmJiBmcy5zdGF0U3luYyhyZXNvbHZlZENhbmRpZGF0ZSkuaXNGaWxlKCkpIHtcclxuICAgICAgICByZXR1cm4gcmVzb2x2ZWRDYW5kaWRhdGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY3VycmVudCA9PT0gcm9vdCkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGN1cnJlbnQgPSBwYXRoLmRpcm5hbWUoY3VycmVudCk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgZmluZENvbW1vbkFuY2VzdG9yID0gKHBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgaWYgKHBhdGhzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGxldCBhbmNlc3RvciA9IHBhdGgucmVzb2x2ZShwYXRoc1swXSk7XHJcblxyXG4gIGZvciAoY29uc3QgY3VycmVudFBhdGggb2YgcGF0aHMuc2xpY2UoMSkpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IHBhdGgucmVzb2x2ZShjdXJyZW50UGF0aCk7XHJcbiAgICBjb25zdCBhbmNlc3RvclJvb3QgPSBwYXRoLnBhcnNlKGFuY2VzdG9yKS5yb290O1xyXG5cclxuICAgIGlmIChwYXRoLnBhcnNlKGFuY2VzdG9yKS5yb290LnRvTG93ZXJDYXNlKCkgIT09IHBhdGgucGFyc2UodGFyZ2V0KS5yb290LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY2FuZGlkYXRlID0gYW5jZXN0b3I7XHJcbiAgICB3aGlsZSAoIWlzU3ViUGF0aChjYW5kaWRhdGUsIHRhcmdldCkpIHtcclxuICAgICAgaWYgKGNhbmRpZGF0ZSA9PT0gYW5jZXN0b3JSb290KSB7XHJcbiAgICAgICAgY2FuZGlkYXRlID0gYW5jZXN0b3JSb290O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhbmRpZGF0ZSA9IHBhdGguZGlybmFtZShjYW5kaWRhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFuY2VzdG9yID0gY2FuZGlkYXRlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFuY2VzdG9yO1xyXG59O1xyXG5cclxuY29uc3QgcmVzb2x2ZVBhdGggPSAoaW5wdXRQYXRoOiBzdHJpbmcsIHByb2plY3RSb290Pzogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBpZiAocGF0aC5pc0Fic29sdXRlKGlucHV0UGF0aCkpIHtcclxuICAgIHJldHVybiBwYXRoLnJlc29sdmUoaW5wdXRQYXRoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGNhbmRpZGF0ZXM6IHN0cmluZ1tdID0gW107XHJcbiAgaWYgKHByb2plY3RSb290KSB7XHJcbiAgICBjYW5kaWRhdGVzLnB1c2gocGF0aC5yZXNvbHZlKHByb2plY3RSb290LCBpbnB1dFBhdGgpKTtcclxuICB9XHJcbiAgY2FuZGlkYXRlcy5wdXNoKHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBpbnB1dFBhdGgpKTtcclxuXHJcbiAgaWYgKHByb2plY3RSb290KSB7XHJcbiAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7XHJcbiAgICAgIGlmIChpc1N1YlBhdGgocHJvamVjdFJvb3QsIGNhbmRpZGF0ZSkpIHtcclxuICAgICAgICByZXR1cm4gY2FuZGlkYXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY2FuZGlkYXRlc1tjYW5kaWRhdGVzLmxlbmd0aCAtIDFdO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUJhc2ljTGFtYmRhVGltZXJKb2IgPSAoXHJcbiAgc2NvcGU6IENvbnN0cnVjdCxcclxuICBwcm9wczogVGltZXJKb2JQcm9wc1xyXG4pOiBOb2RlanNGdW5jdGlvbiA9PiB7XHJcbiAgY29uc3QgbGFtYmRhUHJvcHMgPSBjcmVhdGVCYXNpY0xhbWJkYVByb3BzKHByb3BzKTtcclxuXHJcbiAgbGV0IGxhbWJkYUZ1bmN0aW9uID0gbmV3IE5vZGVqc0Z1bmN0aW9uKFxyXG4gICAgc2NvcGUsXHJcbiAgICBgJHtwcm9wcy5hcHBQcmVmaXh9JHtwcm9wcy5mdW5jdGlvbk5hbWV9YCxcclxuICAgIGxhbWJkYVByb3BzXHJcbiAgKTtcclxuXHJcbiAgYWRkSW52b2tlUGVybWlzc2lvblRvTGFtYmRhRm9yRXZlbnRzKGxhbWJkYUZ1bmN0aW9uKTtcclxuXHJcbiAgY29uc3QgZXZlbnRSdWxlID0gY3JlYXRlRXZlbnRSdWxlRm9yTGFtYmRhKFxyXG4gICAgc2NvcGUsXHJcbiAgICBsYW1iZGFGdW5jdGlvbixcclxuICAgIHByb3BzLmNyb25PcHRpb25zXHJcbiAgKTtcclxuXHJcbiAgZXZlbnRSdWxlLmFkZFRhcmdldChuZXcgTGFtYmRhRnVuY3Rpb24obGFtYmRhRnVuY3Rpb24pKTtcclxuXHJcbiAgZ3JhbnRBY2Nlc3NUb0R5bmFtb1RhYmxlcyhzY29wZSwgbGFtYmRhRnVuY3Rpb24sIHByb3BzLmR5bmFtb1RhYmxlTmFtZXMpO1xyXG5cclxuICBhZGRMYW1iZGFMYXllcnMoc2NvcGUsIGxhbWJkYUZ1bmN0aW9uLCBwcm9wcy5sYW1iZGFMYXllckFybik7XHJcblxyXG4gIHJldHVybiBsYW1iZGFGdW5jdGlvbjtcclxufTtcclxuXHJcbmNvbnN0IGNyZWF0ZUJhc2ljTGFtYmRhUHJvcHMgPSAocHJvcHM6IFRpbWVySm9iUHJvcHMpOiBOb2RlanNGdW5jdGlvblByb3BzID0+IHtcclxuICBjb25zdCByZXNvbHZlZFByb2plY3RSb290ID0gcmVzb2x2ZVByb2plY3RSb290KHByb3BzLnByb2plY3RSb290KTtcclxuICBjb25zdCBkZWZhdWx0UmVsYXRpdmVFbnRyeSA9IHBhdGguam9pbihcclxuICAgIFwicmVzb3VyY2VzXCIsXHJcbiAgICBcImxhbWJkYXNcIixcclxuICAgIFwidGltZXItam9ic1wiLFxyXG4gICAgcHJvcHMuZnVuY3Rpb25OYW1lLFxyXG4gICAgXCJtYWluLm10c1wiXHJcbiAgKTtcclxuICBjb25zdCBlbnRyeVBhdGggPSBwcm9wcy5jb2RlUGF0aCA/PyBkZWZhdWx0UmVsYXRpdmVFbnRyeTtcclxuICBjb25zdCByZXNvbHZlZEVudHJ5ID0gcmVzb2x2ZVBhdGgoZW50cnlQYXRoLCByZXNvbHZlZFByb2plY3RSb290KTtcclxuXHJcbiAgY29uc3QgY3dkID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCkpO1xyXG4gIGNvbnN0IGVudHJ5RGlyID0gcGF0aC5kaXJuYW1lKHJlc29sdmVkRW50cnkpO1xyXG5cclxuICBsZXQgZWZmZWN0aXZlUHJvamVjdFJvb3QgPSByZXNvbHZlZFByb2plY3RSb290ID8/IGN3ZDtcclxuICBpZiAoIWlzU3ViUGF0aChlZmZlY3RpdmVQcm9qZWN0Um9vdCwgcmVzb2x2ZWRFbnRyeSkpIHtcclxuICAgIGNvbnN0IGFuY2VzdG9yID0gZmluZENvbW1vbkFuY2VzdG9yKFtlZmZlY3RpdmVQcm9qZWN0Um9vdCwgZW50cnlEaXJdKTtcclxuICAgIGlmICghYW5jZXN0b3IpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBVbmFibGUgdG8gZGV0ZXJtaW5lIGEgcHJvamVjdFJvb3QgdGhhdCBjb250YWlucyBib3RoICR7ZWZmZWN0aXZlUHJvamVjdFJvb3R9IGFuZCAke3Jlc29sdmVkRW50cnl9LmBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGVmZmVjdGl2ZVByb2plY3RSb290ID0gYW5jZXN0b3I7XHJcbiAgfVxyXG5cclxuICBpZiAoIWlzU3ViUGF0aChlZmZlY3RpdmVQcm9qZWN0Um9vdCwgcmVzb2x2ZWRFbnRyeSkpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgYFJlc29sdmVkIGxhbWJkYSBlbnRyeSAke3Jlc29sdmVkRW50cnl9IG11c3QgYmUgbG9jYXRlZCB3aXRoaW4gcHJvamVjdFJvb3QgJHtlZmZlY3RpdmVQcm9qZWN0Um9vdH0uYFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGxldCByZXNvbHZlZERlcHNMb2NrRmlsZVBhdGggPSBwcm9wcy5kZXBzTG9ja0ZpbGVQYXRoXHJcbiAgICA/IHJlc29sdmVQYXRoKHByb3BzLmRlcHNMb2NrRmlsZVBhdGgsIHJlc29sdmVkUHJvamVjdFJvb3QpXHJcbiAgICA6IHVuZGVmaW5lZDtcclxuXHJcbiAgaWYgKCFyZXNvbHZlZERlcHNMb2NrRmlsZVBhdGgpIHtcclxuICAgIGNvbnN0IHBvdGVudGlhbExvY2tGaWxlcyA9IFtcclxuICAgICAgZmluZE5lYXJlc3RMb2NrRmlsZShlbnRyeURpciksXHJcbiAgICAgIGZpbmROZWFyZXN0TG9ja0ZpbGUoY3dkKSxcclxuICAgICAgZWZmZWN0aXZlUHJvamVjdFJvb3QgIT09IGN3ZCA/IGZpbmROZWFyZXN0TG9ja0ZpbGUoZWZmZWN0aXZlUHJvamVjdFJvb3QpIDogdW5kZWZpbmVkLFxyXG4gICAgXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGxvY2tGaWxlIG9mIHBvdGVudGlhbExvY2tGaWxlcykge1xyXG4gICAgICBpZiAobG9ja0ZpbGUgJiYgaXNTdWJQYXRoKGVmZmVjdGl2ZVByb2plY3RSb290LCBsb2NrRmlsZSkpIHtcclxuICAgICAgICByZXNvbHZlZERlcHNMb2NrRmlsZVBhdGggPSBsb2NrRmlsZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKFxyXG4gICAgcmVzb2x2ZWREZXBzTG9ja0ZpbGVQYXRoICYmXHJcbiAgICAhaXNTdWJQYXRoKGVmZmVjdGl2ZVByb2plY3RSb290LCByZXNvbHZlZERlcHNMb2NrRmlsZVBhdGgpXHJcbiAgKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgIGBSZXNvbHZlZCBkZXBzTG9ja0ZpbGVQYXRoICR7cmVzb2x2ZWREZXBzTG9ja0ZpbGVQYXRofSBtdXN0IGJlIGxvY2F0ZWQgd2l0aGluIHByb2plY3RSb290ICR7ZWZmZWN0aXZlUHJvamVjdFJvb3R9LmBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBlbnZpcm9ubWVudFZhcnMgPSBwcm9wcy5lbnZzID8/IHt9O1xyXG5cclxuICBjb25zdCBsYW1iZGFQcm9wOiBOb2RlanNGdW5jdGlvblByb3BzID0ge1xyXG4gICAgZW50cnk6IHJlc29sdmVkRW50cnksXHJcbiAgICBmdW5jdGlvbk5hbWU6IGAke3Byb3BzLmFwcFByZWZpeCA/IGAke3Byb3BzLmFwcFByZWZpeH0tYCA6IFwiXCJ9JHtcclxuICAgICAgcHJvcHMuZnVuY3Rpb25OYW1lXHJcbiAgICB9YCxcclxuICAgIGhhbmRsZXI6IFwibWFpbi50c1wiLFxyXG4gICAgbG9nUmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcclxuICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTX0xBVEVTVCxcclxuICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoXHJcbiAgICAgIHByb3BzLnRpbWVvdXRJbk1pbnV0ZXMgPyBwcm9wcy50aW1lb3V0SW5NaW51dGVzIDogMVxyXG4gICAgKSxcclxuICAgIG1lbW9yeVNpemU6IHByb3BzLm1lbW9yeSxcclxuICAgIGVudmlyb25tZW50OiB7XHJcbiAgICAgIC4uLmVudmlyb25tZW50VmFycyxcclxuICAgIH0sXHJcbiAgICBidW5kbGluZzoge1xyXG4gICAgICBtaW5pZnk6IHRydWUsXHJcbiAgICAgIHRhcmdldDogYGVzbmV4dGAsXHJcbiAgICAgIHNvdXJjZU1hcDogdHJ1ZSxcclxuICAgICAgc291cmNlTWFwTW9kZTogU291cmNlTWFwTW9kZS5FWFRFUk5BTCxcclxuICAgICAgZW52aXJvbm1lbnQ6IHtcclxuICAgICAgICAuLi5lbnZpcm9ubWVudFZhcnMsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgcm9sZTogcHJvcHMucm9sZSxcclxuICAgIGxheWVyczogdW5kZWZpbmVkLFxyXG4gICAgLi4uKGVmZmVjdGl2ZVByb2plY3RSb290ICYmIHsgcHJvamVjdFJvb3Q6IGVmZmVjdGl2ZVByb2plY3RSb290IH0pLFxyXG4gICAgLi4uKHJlc29sdmVkRGVwc0xvY2tGaWxlUGF0aCAmJiB7XHJcbiAgICAgIGRlcHNMb2NrRmlsZVBhdGg6IHJlc29sdmVkRGVwc0xvY2tGaWxlUGF0aCxcclxuICAgIH0pLFxyXG4gIH07XHJcblxyXG4gIHJldHVybiBsYW1iZGFQcm9wO1xyXG59O1xyXG5cclxuY29uc3QgYWRkSW52b2tlUGVybWlzc2lvblRvTGFtYmRhRm9yRXZlbnRzID0gKGxhbWJkYTogTm9kZWpzRnVuY3Rpb24pID0+IHtcclxuICBsYW1iZGEuYWRkUGVybWlzc2lvbihgSW52b2tlUGVybWlzc2lvbi0ke2xhbWJkYS5mdW5jdGlvbk5hbWV9YCwge1xyXG4gICAgcHJpbmNpcGFsOiBuZXcgU2VydmljZVByaW5jaXBhbChTRVJWSUNFX1BSSU5DSVBBTC5FVkVOVFMpLFxyXG4gIH0pO1xyXG59O1xyXG5cclxuY29uc3QgY3JlYXRlRXZlbnRSdWxlRm9yTGFtYmRhID0gKFxyXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXHJcbiAgbGFtYmRhOiBOb2RlanNGdW5jdGlvbixcclxuICBvcHRpb25zOiBDcm9uT3B0aW9uc1xyXG4pID0+IHtcclxuICBjb25zdCBldmVudFJ1bGUgPSBuZXcgUnVsZShcclxuICAgIHNjb3BlLFxyXG4gICAgYHNjaGVkdWxlUnVsZS0ke2xhbWJkYT8ubm9kZS5pZCB8fCBcIjAxMFwifWAsXHJcbiAgICB7XHJcbiAgICAgIHNjaGVkdWxlOiBTY2hlZHVsZS5jcm9uKG9wdGlvbnMpLFxyXG4gICAgfVxyXG4gICk7XHJcblxyXG4gIHJldHVybiBldmVudFJ1bGU7XHJcbn07XHJcblxyXG5jb25zdCBncmFudEFjY2Vzc1RvRHluYW1vVGFibGVzID0gKFxyXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXHJcbiAgbGFtYmRhOiBOb2RlanNGdW5jdGlvbixcclxuICB0YWJsZU5hbWVzPzogc3RyaW5nW11cclxuKSA9PiB7XHJcbiAgaWYgKHRhYmxlTmFtZXMgJiYgdGFibGVOYW1lcy5sZW5ndGggPiAwKSB7XHJcbiAgICB0YWJsZU5hbWVzLmZvckVhY2goKHRhYmxlTmFtZSkgPT4ge1xyXG4gICAgICBjb25zdCB0YWJsZSA9IFRhYmxlLmZyb21UYWJsZU5hbWUoc2NvcGUsIGAke3RhYmxlTmFtZX0tdGFibGVgLCB0YWJsZU5hbWUpO1xyXG5cclxuICAgICAgdGFibGUuZ3JhbnRSZWFkV3JpdGVEYXRhKGxhbWJkYSk7XHJcbiAgICB9KTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBhZGRMYW1iZGFMYXllcnMgPSAoXHJcbiAgc2NvcGU6IENvbnN0cnVjdCxcclxuICBsYW1iZGE6IE5vZGVqc0Z1bmN0aW9uLFxyXG4gIGxheWVyQXJucz86IHN0cmluZ1tdXHJcbikgPT4ge1xyXG4gIGlmIChsYXllckFybnMgJiYgbGF5ZXJBcm5zLmxlbmd0aCA+IDApIHtcclxuICAgIGxheWVyQXJucy5mb3JFYWNoKChhcm46IHN0cmluZywgaWR4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgbGF5ZXIgPSBMYXllclZlcnNpb24uZnJvbUxheWVyVmVyc2lvbkFybihcclxuICAgICAgICBzY29wZSxcclxuICAgICAgICBgY29tbW9uLWxheWVyLSR7aWR4fWAsXHJcbiAgICAgICAgYXJuXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBsYW1iZGEuYWRkTGF5ZXJzKGxheWVyKTtcclxuICAgIH0pO1xyXG4gIH1cclxufTtcclxuIl19
|
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,101 @@ 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
|
+
const candidates: string[] = [];
|
|
89
|
+
if (projectRoot) {
|
|
90
|
+
candidates.push(path.resolve(projectRoot, inputPath));
|
|
91
|
+
}
|
|
92
|
+
candidates.push(path.resolve(process.cwd(), inputPath));
|
|
93
|
+
|
|
94
|
+
if (projectRoot) {
|
|
95
|
+
for (const candidate of candidates) {
|
|
96
|
+
if (isSubPath(projectRoot, candidate)) {
|
|
97
|
+
return candidate;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return candidates[candidates.length - 1];
|
|
103
|
+
};
|
|
104
|
+
|
|
15
105
|
export const createBasicLambda = (
|
|
16
106
|
scope: Construct,
|
|
17
107
|
props: LambdaProps
|
|
@@ -32,30 +122,66 @@ export const createBasicLambda = (
|
|
|
32
122
|
};
|
|
33
123
|
|
|
34
124
|
const createBasicLambdaProps = (props: LambdaProps): NodejsFunctionProps => {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
125
|
+
const resolvedProjectRoot = resolveProjectRoot(props.projectRoot);
|
|
126
|
+
const defaultRelativeEntry = path.join(
|
|
127
|
+
"resources",
|
|
128
|
+
"lambdas",
|
|
129
|
+
props.functionName,
|
|
130
|
+
"main.mts"
|
|
131
|
+
);
|
|
132
|
+
const entryPath = props.codePath ?? defaultRelativeEntry;
|
|
133
|
+
const resolvedEntry = resolvePath(entryPath, resolvedProjectRoot);
|
|
134
|
+
|
|
135
|
+
const cwd = path.resolve(process.cwd());
|
|
136
|
+
const entryDir = path.dirname(resolvedEntry);
|
|
137
|
+
|
|
138
|
+
let effectiveProjectRoot = resolvedProjectRoot ?? cwd;
|
|
139
|
+
if (!isSubPath(effectiveProjectRoot, resolvedEntry)) {
|
|
140
|
+
const ancestor = findCommonAncestor([effectiveProjectRoot, entryDir]);
|
|
141
|
+
if (!ancestor) {
|
|
142
|
+
throw new Error(
|
|
143
|
+
`Unable to determine a projectRoot that contains both ${effectiveProjectRoot} and ${resolvedEntry}.`
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
effectiveProjectRoot = ancestor;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (!isSubPath(effectiveProjectRoot, resolvedEntry)) {
|
|
150
|
+
throw new Error(
|
|
151
|
+
`Resolved lambda entry ${resolvedEntry} must be located within projectRoot ${effectiveProjectRoot}.`
|
|
48
152
|
);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
let resolvedDepsLockFilePath = props.depsLockFilePath
|
|
156
|
+
? resolvePath(props.depsLockFilePath, resolvedProjectRoot)
|
|
157
|
+
: undefined;
|
|
158
|
+
|
|
159
|
+
if (!resolvedDepsLockFilePath) {
|
|
160
|
+
const potentialLockFiles = [
|
|
161
|
+
findNearestLockFile(entryDir),
|
|
162
|
+
findNearestLockFile(cwd),
|
|
163
|
+
effectiveProjectRoot !== cwd ? findNearestLockFile(effectiveProjectRoot) : undefined,
|
|
164
|
+
];
|
|
165
|
+
|
|
166
|
+
for (const lockFile of potentialLockFiles) {
|
|
167
|
+
if (lockFile && isSubPath(effectiveProjectRoot, lockFile)) {
|
|
168
|
+
resolvedDepsLockFilePath = lockFile;
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (
|
|
175
|
+
resolvedDepsLockFilePath &&
|
|
176
|
+
!isSubPath(effectiveProjectRoot, resolvedDepsLockFilePath)
|
|
177
|
+
) {
|
|
178
|
+
throw new Error(
|
|
179
|
+
`Resolved depsLockFilePath ${resolvedDepsLockFilePath} must be located within projectRoot ${effectiveProjectRoot}.`
|
|
56
180
|
);
|
|
57
181
|
}
|
|
58
182
|
|
|
183
|
+
const environmentVars = props.envs ?? {};
|
|
184
|
+
|
|
59
185
|
const lambdaProp: NodejsFunctionProps = {
|
|
60
186
|
entry: resolvedEntry,
|
|
61
187
|
functionName: `${props.appPrefix ? `${props.appPrefix}-` : ""}${
|
|
@@ -69,7 +195,7 @@ const createBasicLambdaProps = (props: LambdaProps): NodejsFunctionProps => {
|
|
|
69
195
|
),
|
|
70
196
|
memorySize: props.memory,
|
|
71
197
|
environment: {
|
|
72
|
-
...
|
|
198
|
+
...environmentVars,
|
|
73
199
|
},
|
|
74
200
|
bundling: {
|
|
75
201
|
minify: true,
|
|
@@ -77,15 +203,15 @@ const createBasicLambdaProps = (props: LambdaProps): NodejsFunctionProps => {
|
|
|
77
203
|
sourceMap: true,
|
|
78
204
|
sourceMapMode: SourceMapMode.EXTERNAL,
|
|
79
205
|
environment: {
|
|
80
|
-
...
|
|
206
|
+
...environmentVars,
|
|
81
207
|
},
|
|
82
|
-
...(props.projectRoot && { projectRoot: props.projectRoot }),
|
|
83
|
-
...(props.depsLockFilePath && {
|
|
84
|
-
depsLockFilePath: props.depsLockFilePath,
|
|
85
|
-
}),
|
|
86
208
|
},
|
|
87
209
|
role: props.role,
|
|
88
210
|
layers: undefined,
|
|
211
|
+
...(effectiveProjectRoot && { projectRoot: effectiveProjectRoot }),
|
|
212
|
+
...(resolvedDepsLockFilePath && {
|
|
213
|
+
depsLockFilePath: resolvedDepsLockFilePath,
|
|
214
|
+
}),
|
|
89
215
|
};
|
|
90
216
|
|
|
91
217
|
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,95 @@ 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
|
+
const candidates: string[] = [];
|
|
92
|
+
if (projectRoot) {
|
|
93
|
+
candidates.push(path.resolve(projectRoot, inputPath));
|
|
94
|
+
}
|
|
95
|
+
candidates.push(path.resolve(process.cwd(), inputPath));
|
|
96
|
+
|
|
97
|
+
if (projectRoot) {
|
|
98
|
+
for (const candidate of candidates) {
|
|
99
|
+
if (isSubPath(projectRoot, candidate)) {
|
|
100
|
+
return candidate;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return candidates[candidates.length - 1];
|
|
106
|
+
};
|
|
107
|
+
|
|
18
108
|
export const createBasicLambdaTimerJob = (
|
|
19
109
|
scope: Construct,
|
|
20
110
|
props: TimerJobProps
|
|
@@ -45,30 +135,67 @@ export const createBasicLambdaTimerJob = (
|
|
|
45
135
|
};
|
|
46
136
|
|
|
47
137
|
const createBasicLambdaProps = (props: TimerJobProps): NodejsFunctionProps => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
138
|
+
const resolvedProjectRoot = resolveProjectRoot(props.projectRoot);
|
|
139
|
+
const defaultRelativeEntry = path.join(
|
|
140
|
+
"resources",
|
|
141
|
+
"lambdas",
|
|
142
|
+
"timer-jobs",
|
|
143
|
+
props.functionName,
|
|
144
|
+
"main.mts"
|
|
145
|
+
);
|
|
146
|
+
const entryPath = props.codePath ?? defaultRelativeEntry;
|
|
147
|
+
const resolvedEntry = resolvePath(entryPath, resolvedProjectRoot);
|
|
148
|
+
|
|
149
|
+
const cwd = path.resolve(process.cwd());
|
|
150
|
+
const entryDir = path.dirname(resolvedEntry);
|
|
151
|
+
|
|
152
|
+
let effectiveProjectRoot = resolvedProjectRoot ?? cwd;
|
|
153
|
+
if (!isSubPath(effectiveProjectRoot, resolvedEntry)) {
|
|
154
|
+
const ancestor = findCommonAncestor([effectiveProjectRoot, entryDir]);
|
|
155
|
+
if (!ancestor) {
|
|
156
|
+
throw new Error(
|
|
157
|
+
`Unable to determine a projectRoot that contains both ${effectiveProjectRoot} and ${resolvedEntry}.`
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
effectiveProjectRoot = ancestor;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (!isSubPath(effectiveProjectRoot, resolvedEntry)) {
|
|
164
|
+
throw new Error(
|
|
165
|
+
`Resolved lambda entry ${resolvedEntry} must be located within projectRoot ${effectiveProjectRoot}.`
|
|
61
166
|
);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
let resolvedDepsLockFilePath = props.depsLockFilePath
|
|
170
|
+
? resolvePath(props.depsLockFilePath, resolvedProjectRoot)
|
|
171
|
+
: undefined;
|
|
172
|
+
|
|
173
|
+
if (!resolvedDepsLockFilePath) {
|
|
174
|
+
const potentialLockFiles = [
|
|
175
|
+
findNearestLockFile(entryDir),
|
|
176
|
+
findNearestLockFile(cwd),
|
|
177
|
+
effectiveProjectRoot !== cwd ? findNearestLockFile(effectiveProjectRoot) : undefined,
|
|
178
|
+
];
|
|
179
|
+
|
|
180
|
+
for (const lockFile of potentialLockFiles) {
|
|
181
|
+
if (lockFile && isSubPath(effectiveProjectRoot, lockFile)) {
|
|
182
|
+
resolvedDepsLockFilePath = lockFile;
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (
|
|
189
|
+
resolvedDepsLockFilePath &&
|
|
190
|
+
!isSubPath(effectiveProjectRoot, resolvedDepsLockFilePath)
|
|
191
|
+
) {
|
|
192
|
+
throw new Error(
|
|
193
|
+
`Resolved depsLockFilePath ${resolvedDepsLockFilePath} must be located within projectRoot ${effectiveProjectRoot}.`
|
|
69
194
|
);
|
|
70
195
|
}
|
|
71
196
|
|
|
197
|
+
const environmentVars = props.envs ?? {};
|
|
198
|
+
|
|
72
199
|
const lambdaProp: NodejsFunctionProps = {
|
|
73
200
|
entry: resolvedEntry,
|
|
74
201
|
functionName: `${props.appPrefix ? `${props.appPrefix}-` : ""}${
|
|
@@ -82,7 +209,7 @@ const createBasicLambdaProps = (props: TimerJobProps): NodejsFunctionProps => {
|
|
|
82
209
|
),
|
|
83
210
|
memorySize: props.memory,
|
|
84
211
|
environment: {
|
|
85
|
-
...
|
|
212
|
+
...environmentVars,
|
|
86
213
|
},
|
|
87
214
|
bundling: {
|
|
88
215
|
minify: true,
|
|
@@ -90,15 +217,15 @@ const createBasicLambdaProps = (props: TimerJobProps): NodejsFunctionProps => {
|
|
|
90
217
|
sourceMap: true,
|
|
91
218
|
sourceMapMode: SourceMapMode.EXTERNAL,
|
|
92
219
|
environment: {
|
|
93
|
-
...
|
|
220
|
+
...environmentVars,
|
|
94
221
|
},
|
|
95
|
-
...(props.projectRoot && { projectRoot: props.projectRoot }),
|
|
96
|
-
...(props.depsLockFilePath && {
|
|
97
|
-
depsLockFilePath: props.depsLockFilePath,
|
|
98
|
-
}),
|
|
99
222
|
},
|
|
100
223
|
role: props.role,
|
|
101
224
|
layers: undefined,
|
|
225
|
+
...(effectiveProjectRoot && { projectRoot: effectiveProjectRoot }),
|
|
226
|
+
...(resolvedDepsLockFilePath && {
|
|
227
|
+
depsLockFilePath: resolvedDepsLockFilePath,
|
|
228
|
+
}),
|
|
102
229
|
};
|
|
103
230
|
|
|
104
231
|
return lambdaProp;
|