@nikovirtala/projen-bundle-lambda-function-code 0.0.5 → 0.0.6
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/.projenrc.ts +1 -2
- package/lib/index.d.ts +12 -15
- package/lib/index.js +16 -20
- package/lib/internal.d.ts +8 -0
- package/lib/internal.js +16 -0
- package/lib/lambda-function.d.ts +166 -0
- package/lib/lambda-function.js +199 -0
- package/package.json +2 -6
package/.projenrc.ts
CHANGED
|
@@ -3,12 +3,11 @@ import { NpmAccess } from "projen/lib/javascript";
|
|
|
3
3
|
const project = new typescript.TypeScriptProject({
|
|
4
4
|
copyrightOwner: "Niko Virtala",
|
|
5
5
|
defaultReleaseBranch: "main",
|
|
6
|
-
deps: ["
|
|
6
|
+
deps: ["case", "projen"],
|
|
7
7
|
jest: false,
|
|
8
8
|
license: "MIT",
|
|
9
9
|
name: "@nikovirtala/projen-bundle-lambda-function-code",
|
|
10
10
|
npmAccess: NpmAccess.PUBLIC,
|
|
11
|
-
peerDeps: ["aws-cdk-lib@^2.51.0"],
|
|
12
11
|
prettier: true,
|
|
13
12
|
projenrcTs: true,
|
|
14
13
|
releaseToNpm: true,
|
package/lib/index.d.ts
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { Component, Project, awscdk, cdk } from "projen";
|
|
2
|
-
|
|
3
|
-
* Suffix for AWS Lambda handlers.
|
|
4
|
-
*/
|
|
5
|
-
export declare const TYPESCRIPT_LAMBDA_EXT = ".lambda.ts";
|
|
2
|
+
import { LambdaFunctionCommonOptions } from "./lambda-function";
|
|
6
3
|
/**
|
|
7
4
|
* Common options for auto discovering project subcomponents.
|
|
8
5
|
*/
|
|
9
|
-
export interface
|
|
6
|
+
export interface AutoDiscoverCommonOptions {
|
|
10
7
|
/**
|
|
11
8
|
* Path to the tsconfig file to use for integration tests.
|
|
12
9
|
*/
|
|
@@ -17,9 +14,9 @@ export interface FunctionCodeBundlerCommonOptions {
|
|
|
17
14
|
readonly cdkDeps: awscdk.AwsCdkDeps;
|
|
18
15
|
}
|
|
19
16
|
/**
|
|
20
|
-
* Options for `
|
|
17
|
+
* Options for `LambdaAutoDiscover`
|
|
21
18
|
*/
|
|
22
|
-
export interface
|
|
19
|
+
export interface LambdaAutoDiscoverOptions extends AutoDiscoverCommonOptions {
|
|
23
20
|
/**
|
|
24
21
|
* Project source tree (relative to project output directory).
|
|
25
22
|
*/
|
|
@@ -27,29 +24,29 @@ export interface LambdaFunctionCodeBundlerOptions extends FunctionCodeBundlerCom
|
|
|
27
24
|
/**
|
|
28
25
|
* Options for AWS Lambda functions.
|
|
29
26
|
*/
|
|
30
|
-
readonly lambdaOptions?:
|
|
27
|
+
readonly lambdaOptions?: LambdaFunctionCommonOptions;
|
|
31
28
|
}
|
|
32
29
|
/**
|
|
33
30
|
* Creates lambdas from entry points discovered in the project's source tree.
|
|
34
31
|
*/
|
|
35
|
-
export declare class
|
|
36
|
-
constructor(project: Project, options:
|
|
32
|
+
export declare class LambdaAutoDiscover extends cdk.AutoDiscoverBase {
|
|
33
|
+
constructor(project: Project, options: LambdaAutoDiscoverOptions);
|
|
37
34
|
}
|
|
38
35
|
/**
|
|
39
|
-
* Options for `
|
|
36
|
+
* Options for `AutoDiscover`
|
|
40
37
|
*/
|
|
41
|
-
export interface
|
|
38
|
+
export interface AutoDiscoverOptions extends LambdaAutoDiscoverOptions {
|
|
42
39
|
/**
|
|
43
40
|
* Auto-discover lambda functions.
|
|
44
41
|
*
|
|
45
42
|
* @default true
|
|
46
43
|
*/
|
|
47
|
-
readonly
|
|
44
|
+
readonly lambdaAutoDiscover?: boolean;
|
|
48
45
|
}
|
|
49
46
|
/**
|
|
50
47
|
* Discovers and creates integration tests and lambdas from code in the
|
|
51
48
|
* project's source and test trees.
|
|
52
49
|
*/
|
|
53
|
-
export declare class
|
|
54
|
-
constructor(project: Project, options:
|
|
50
|
+
export declare class AutoDiscover extends Component {
|
|
51
|
+
constructor(project: Project, options: AutoDiscoverOptions);
|
|
55
52
|
}
|
package/lib/index.js
CHANGED
|
@@ -1,42 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const cdk_esbuild_1 = require("@mrgrain/cdk-esbuild");
|
|
3
|
+
exports.AutoDiscover = exports.LambdaAutoDiscover = void 0;
|
|
5
4
|
const projen_1 = require("projen");
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
*/
|
|
9
|
-
exports.TYPESCRIPT_LAMBDA_EXT = ".lambda.ts";
|
|
5
|
+
const internal_1 = require("./internal");
|
|
6
|
+
const lambda_function_1 = require("./lambda-function");
|
|
10
7
|
/**
|
|
11
8
|
* Creates lambdas from entry points discovered in the project's source tree.
|
|
12
9
|
*/
|
|
13
|
-
class
|
|
10
|
+
class LambdaAutoDiscover extends projen_1.cdk.AutoDiscoverBase {
|
|
14
11
|
constructor(project, options) {
|
|
15
12
|
super(project, {
|
|
16
13
|
projectdir: options.srcdir,
|
|
17
|
-
extension:
|
|
14
|
+
extension: internal_1.TYPESCRIPT_LAMBDA_EXT,
|
|
18
15
|
});
|
|
19
16
|
for (const entrypoint of this.entrypoints) {
|
|
20
|
-
new
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}); */
|
|
17
|
+
new lambda_function_1.LambdaFunction(this.project, {
|
|
18
|
+
entrypoint,
|
|
19
|
+
cdkDeps: options.cdkDeps,
|
|
20
|
+
...options.lambdaOptions,
|
|
21
|
+
});
|
|
26
22
|
}
|
|
27
23
|
}
|
|
28
24
|
}
|
|
29
|
-
exports.
|
|
25
|
+
exports.LambdaAutoDiscover = LambdaAutoDiscover;
|
|
30
26
|
/**
|
|
31
27
|
* Discovers and creates integration tests and lambdas from code in the
|
|
32
28
|
* project's source and test trees.
|
|
33
29
|
*/
|
|
34
|
-
class
|
|
30
|
+
class AutoDiscover extends projen_1.Component {
|
|
35
31
|
constructor(project, options) {
|
|
36
32
|
var _a;
|
|
37
33
|
super(project);
|
|
38
|
-
if ((_a = options.
|
|
39
|
-
new
|
|
34
|
+
if ((_a = options.lambdaAutoDiscover) !== null && _a !== void 0 ? _a : true) {
|
|
35
|
+
new LambdaAutoDiscover(this.project, {
|
|
40
36
|
cdkDeps: options.cdkDeps,
|
|
41
37
|
tsconfigPath: options.tsconfigPath,
|
|
42
38
|
srcdir: options.srcdir,
|
|
@@ -45,5 +41,5 @@ class FunctionCodeBundler extends projen_1.Component {
|
|
|
45
41
|
}
|
|
46
42
|
}
|
|
47
43
|
}
|
|
48
|
-
exports.
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
exports.AutoDiscover = AutoDiscover;
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQXlEO0FBQ3pELHlDQUFtRDtBQUNuRCx1REFBZ0Y7QUFnQ2hGOztHQUVHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxZQUFHLENBQUMsZ0JBQWdCO0lBQzFELFlBQVksT0FBZ0IsRUFBRSxPQUFrQztRQUM5RCxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ2IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQzFCLFNBQVMsRUFBRSxnQ0FBcUI7U0FDakMsQ0FBQyxDQUFDO1FBRUgsS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDMUMsSUFBSSxnQ0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQy9CLFVBQVU7Z0JBQ1YsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO2dCQUN4QixHQUFHLE9BQU8sQ0FBQyxhQUFhO2FBQ3pCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFmRCxnREFlQztBQWNEOzs7R0FHRztBQUNILE1BQWEsWUFBYSxTQUFRLGtCQUFTO0lBQ3pDLFlBQVksT0FBZ0IsRUFBRSxPQUE0Qjs7UUFDeEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWYsSUFBSSxNQUFBLE9BQU8sQ0FBQyxrQkFBa0IsbUNBQUksSUFBSSxFQUFFLENBQUM7WUFDdkMsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNuQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87Z0JBQ3hCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtnQkFDbEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO2dCQUN0QixhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWE7YUFDckMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7Q0FDRjtBQWJELG9DQWFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9qZWN0LCBhd3NjZGssIGNkayB9IGZyb20gXCJwcm9qZW5cIjtcbmltcG9ydCB7IFRZUEVTQ1JJUFRfTEFNQkRBX0VYVCB9IGZyb20gXCIuL2ludGVybmFsXCI7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiwgTGFtYmRhRnVuY3Rpb25Db21tb25PcHRpb25zIH0gZnJvbSBcIi4vbGFtYmRhLWZ1bmN0aW9uXCI7XG5cbi8qKlxuICogQ29tbW9uIG9wdGlvbnMgZm9yIGF1dG8gZGlzY292ZXJpbmcgcHJvamVjdCBzdWJjb21wb25lbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9EaXNjb3ZlckNvbW1vbk9wdGlvbnMge1xuICAvKipcbiAgICogUGF0aCB0byB0aGUgdHNjb25maWcgZmlsZSB0byB1c2UgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgdHNjb25maWdQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFXUyBDREsgZGVwZW5kZW5jeSBtYW5hZ2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgY2RrRGVwczogYXdzY2RrLkF3c0Nka0RlcHM7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYExhbWJkYUF1dG9EaXNjb3ZlcmBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFBdXRvRGlzY292ZXJPcHRpb25zIGV4dGVuZHMgQXV0b0Rpc2NvdmVyQ29tbW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQcm9qZWN0IHNvdXJjZSB0cmVlIChyZWxhdGl2ZSB0byBwcm9qZWN0IG91dHB1dCBkaXJlY3RvcnkpLlxuICAgKi9cbiAgcmVhZG9ubHkgc3JjZGlyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIEFXUyBMYW1iZGEgZnVuY3Rpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhT3B0aW9ucz86IExhbWJkYUZ1bmN0aW9uQ29tbW9uT3B0aW9ucztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGxhbWJkYXMgZnJvbSBlbnRyeSBwb2ludHMgZGlzY292ZXJlZCBpbiB0aGUgcHJvamVjdCdzIHNvdXJjZSB0cmVlLlxuICovXG5leHBvcnQgY2xhc3MgTGFtYmRhQXV0b0Rpc2NvdmVyIGV4dGVuZHMgY2RrLkF1dG9EaXNjb3ZlckJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBMYW1iZGFBdXRvRGlzY292ZXJPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCwge1xuICAgICAgcHJvamVjdGRpcjogb3B0aW9ucy5zcmNkaXIsXG4gICAgICBleHRlbnNpb246IFRZUEVTQ1JJUFRfTEFNQkRBX0VYVCxcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3QgZW50cnlwb2ludCBvZiB0aGlzLmVudHJ5cG9pbnRzKSB7XG4gICAgICBuZXcgTGFtYmRhRnVuY3Rpb24odGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIGVudHJ5cG9pbnQsXG4gICAgICAgIGNka0RlcHM6IG9wdGlvbnMuY2RrRGVwcyxcbiAgICAgICAgLi4ub3B0aW9ucy5sYW1iZGFPcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYEF1dG9EaXNjb3ZlcmBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvRGlzY292ZXJPcHRpb25zIGV4dGVuZHMgTGFtYmRhQXV0b0Rpc2NvdmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBdXRvLWRpc2NvdmVyIGxhbWJkYSBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGxhbWJkYUF1dG9EaXNjb3Zlcj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGlzY292ZXJzIGFuZCBjcmVhdGVzIGludGVncmF0aW9uIHRlc3RzIGFuZCBsYW1iZGFzIGZyb20gY29kZSBpbiB0aGVcbiAqIHByb2plY3QncyBzb3VyY2UgYW5kIHRlc3QgdHJlZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBdXRvRGlzY292ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBBdXRvRGlzY292ZXJPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICBpZiAob3B0aW9ucy5sYW1iZGFBdXRvRGlzY292ZXIgPz8gdHJ1ZSkge1xuICAgICAgbmV3IExhbWJkYUF1dG9EaXNjb3Zlcih0aGlzLnByb2plY3QsIHtcbiAgICAgICAgY2RrRGVwczogb3B0aW9ucy5jZGtEZXBzLFxuICAgICAgICB0c2NvbmZpZ1BhdGg6IG9wdGlvbnMudHNjb25maWdQYXRoLFxuICAgICAgICBzcmNkaXI6IG9wdGlvbnMuc3JjZGlyLFxuICAgICAgICBsYW1iZGFPcHRpb25zOiBvcHRpb25zLmxhbWJkYU9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
package/lib/internal.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertToPosixPath = exports.TYPESCRIPT_LAMBDA_EXT = void 0;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
/**
|
|
6
|
+
* Suffix for AWS Lambda handlers.
|
|
7
|
+
*/
|
|
8
|
+
exports.TYPESCRIPT_LAMBDA_EXT = ".lambda.ts";
|
|
9
|
+
/**
|
|
10
|
+
* Converts the given path string to posix if it wasn't already.
|
|
11
|
+
*/
|
|
12
|
+
function convertToPosixPath(p) {
|
|
13
|
+
return p.split(path_1.sep).join(path_1.posix.sep);
|
|
14
|
+
}
|
|
15
|
+
exports.convertToPosixPath = convertToPosixPath;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW50ZXJuYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQWtDO0FBRWxDOztHQUVHO0FBQ1UsUUFBQSxxQkFBcUIsR0FBRyxZQUFZLENBQUM7QUFFbEQ7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxDQUFTO0lBQzFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFGRCxnREFFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNlcCwgcG9zaXggfSBmcm9tIFwicGF0aFwiO1xuXG4vKipcbiAqIFN1ZmZpeCBmb3IgQVdTIExhbWJkYSBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IFRZUEVTQ1JJUFRfTEFNQkRBX0VYVCA9IFwiLmxhbWJkYS50c1wiO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBnaXZlbiBwYXRoIHN0cmluZyB0byBwb3NpeCBpZiBpdCB3YXNuJ3QgYWxyZWFkeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb1Bvc2l4UGF0aChwOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHAuc3BsaXQoc2VwKS5qb2luKHBvc2l4LnNlcCk7XG59XG4iXX0=
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { Component, Project, awscdk, javascript } from "projen";
|
|
2
|
+
/**
|
|
3
|
+
* Common options for `LambdaFunction`. Applies to all functions in
|
|
4
|
+
* auto-discovery.
|
|
5
|
+
*/
|
|
6
|
+
export interface LambdaFunctionCommonOptions {
|
|
7
|
+
/**
|
|
8
|
+
* The node.js version to target.
|
|
9
|
+
*
|
|
10
|
+
* @default Runtime.NODEJS_18_X
|
|
11
|
+
*/
|
|
12
|
+
readonly runtime?: LambdaRuntime;
|
|
13
|
+
/**
|
|
14
|
+
* Bundling options for this AWS Lambda function.
|
|
15
|
+
*
|
|
16
|
+
* If not specified the default bundling options specified for the project
|
|
17
|
+
* `Bundler` instance will be used.
|
|
18
|
+
*
|
|
19
|
+
* @default - defaults
|
|
20
|
+
*/
|
|
21
|
+
readonly bundlingOptions?: javascript.BundlingOptions;
|
|
22
|
+
/**
|
|
23
|
+
* Whether to automatically reuse TCP connections when working with the AWS
|
|
24
|
+
* SDK for JavaScript.
|
|
25
|
+
*
|
|
26
|
+
* This sets the `AWS_NODEJS_CONNECTION_REUSE_ENABLED` environment variable
|
|
27
|
+
* to `1`.
|
|
28
|
+
*
|
|
29
|
+
* Not applicable when `edgeLambda` is set to `true` because environment
|
|
30
|
+
* variables are not supported in Lambda@Edge.
|
|
31
|
+
*
|
|
32
|
+
* @see https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-reusing-connections.html
|
|
33
|
+
*
|
|
34
|
+
* @default true
|
|
35
|
+
*/
|
|
36
|
+
readonly awsSdkConnectionReuse?: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Options for `Function`.
|
|
40
|
+
*/
|
|
41
|
+
export interface LambdaFunctionOptions extends LambdaFunctionCommonOptions {
|
|
42
|
+
/**
|
|
43
|
+
* A path from the project root directory to a TypeScript file which contains
|
|
44
|
+
* the AWS Lambda handler entrypoint (exports a `handler` function).
|
|
45
|
+
*
|
|
46
|
+
* This is relative to the root directory of the project.
|
|
47
|
+
*
|
|
48
|
+
* @example "src/subdir/foo.lambda.ts"
|
|
49
|
+
*/
|
|
50
|
+
readonly entrypoint: string;
|
|
51
|
+
/**
|
|
52
|
+
* The name of the generated TypeScript source file. This file should also be
|
|
53
|
+
* under the source tree.
|
|
54
|
+
*
|
|
55
|
+
* @default - The name of the entrypoint file, with the `-function.ts` suffix
|
|
56
|
+
* instead of `.lambda.ts`.
|
|
57
|
+
*/
|
|
58
|
+
readonly constructFile?: string;
|
|
59
|
+
/**
|
|
60
|
+
* The name of the generated `lambda.Function` subclass.
|
|
61
|
+
*
|
|
62
|
+
* @default - A pascal cased version of the name of the entrypoint file, with
|
|
63
|
+
* the extension `Function` (e.g. `ResizeImageFunction`).
|
|
64
|
+
*/
|
|
65
|
+
readonly constructName?: string;
|
|
66
|
+
/**
|
|
67
|
+
* AWS CDK dependency manager.
|
|
68
|
+
*/
|
|
69
|
+
readonly cdkDeps: awscdk.AwsCdkDeps;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Generates a pre-bundled AWS Lambda function construct from handler code.
|
|
73
|
+
*
|
|
74
|
+
* To use this, create an AWS Lambda handler file under your source tree with
|
|
75
|
+
* the `.lambda.ts` extension and add a `LambdaFunction` component to your
|
|
76
|
+
* typescript project pointing to this entrypoint.
|
|
77
|
+
*
|
|
78
|
+
* This will add a task to your "compile" step which will use `esbuild` to
|
|
79
|
+
* bundle the handler code into the build directory. It will also generate a
|
|
80
|
+
* file `src/foo-function.ts` with a custom AWS construct called `FooFunction`
|
|
81
|
+
* which extends `@aws-cdk/aws-lambda.Function` which is bound to the bundled
|
|
82
|
+
* handle through an asset.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
*
|
|
86
|
+
* new LambdaFunction(myProject, {
|
|
87
|
+
* srcdir: myProject.srcdir,
|
|
88
|
+
* entrypoint: 'src/foo.lambda.ts',
|
|
89
|
+
* });
|
|
90
|
+
*/
|
|
91
|
+
export declare class LambdaFunction extends Component {
|
|
92
|
+
/**
|
|
93
|
+
* Defines a pre-bundled AWS Lambda function construct from handler code.
|
|
94
|
+
*
|
|
95
|
+
* @param project The project to use
|
|
96
|
+
* @param options Options
|
|
97
|
+
*/
|
|
98
|
+
constructor(project: Project, options: LambdaFunctionOptions);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Options for the AWS Lambda function runtime
|
|
102
|
+
*/
|
|
103
|
+
export interface LambdaRuntimeOptions {
|
|
104
|
+
/**
|
|
105
|
+
* Packages that are considered externals by default when bundling
|
|
106
|
+
*
|
|
107
|
+
* @default ['@aws-sdk/*']
|
|
108
|
+
*/
|
|
109
|
+
readonly defaultExternals?: string[];
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The runtime for the AWS Lambda function.
|
|
113
|
+
*/
|
|
114
|
+
export declare class LambdaRuntime {
|
|
115
|
+
/**
|
|
116
|
+
* The Node.js runtime to use
|
|
117
|
+
*/
|
|
118
|
+
readonly functionRuntime: string;
|
|
119
|
+
/**
|
|
120
|
+
* The esbuild setting to use.
|
|
121
|
+
*/
|
|
122
|
+
readonly esbuildTarget: string;
|
|
123
|
+
/**
|
|
124
|
+
* Node.js 10.x
|
|
125
|
+
* @deprecated NodeJS10 has been deprecated on February 14, 2022
|
|
126
|
+
*/
|
|
127
|
+
static readonly NODEJS_10_X: LambdaRuntime;
|
|
128
|
+
/**
|
|
129
|
+
* Node.js 12.x
|
|
130
|
+
* @deprecated NodeJS12 has been deprecated on April 30, 2023
|
|
131
|
+
*/
|
|
132
|
+
static readonly NODEJS_12_X: LambdaRuntime;
|
|
133
|
+
/**
|
|
134
|
+
* Node.js 14.x
|
|
135
|
+
* @deprecated NodeJS14 will be deprecated on November 27, 2023
|
|
136
|
+
*/
|
|
137
|
+
static readonly NODEJS_14_X: LambdaRuntime;
|
|
138
|
+
/**
|
|
139
|
+
* Node.js 16.x
|
|
140
|
+
* @deprecated NodeJS16 will be deprecated on March 11, 2024
|
|
141
|
+
*/
|
|
142
|
+
static readonly NODEJS_16_X: LambdaRuntime;
|
|
143
|
+
/**
|
|
144
|
+
* Node.js 18.x
|
|
145
|
+
*/
|
|
146
|
+
static readonly NODEJS_18_X: LambdaRuntime;
|
|
147
|
+
/**
|
|
148
|
+
* Node.js 20.x
|
|
149
|
+
*/
|
|
150
|
+
static readonly NODEJS_20_X: LambdaRuntime;
|
|
151
|
+
readonly esbuildPlatform = "node";
|
|
152
|
+
readonly defaultExternals: string[];
|
|
153
|
+
constructor(
|
|
154
|
+
/**
|
|
155
|
+
* The Node.js runtime to use
|
|
156
|
+
*/
|
|
157
|
+
functionRuntime: string,
|
|
158
|
+
/**
|
|
159
|
+
* The esbuild setting to use.
|
|
160
|
+
*/
|
|
161
|
+
esbuildTarget: string,
|
|
162
|
+
/**
|
|
163
|
+
* Options for this runtime.
|
|
164
|
+
*/
|
|
165
|
+
options?: LambdaRuntimeOptions);
|
|
166
|
+
}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.LambdaRuntime = exports.LambdaFunction = void 0;
|
|
27
|
+
const path = __importStar(require("path"));
|
|
28
|
+
const case_1 = require("case");
|
|
29
|
+
const projen_1 = require("projen");
|
|
30
|
+
const internal_1 = require("./internal");
|
|
31
|
+
/**
|
|
32
|
+
* Generates a pre-bundled AWS Lambda function construct from handler code.
|
|
33
|
+
*
|
|
34
|
+
* To use this, create an AWS Lambda handler file under your source tree with
|
|
35
|
+
* the `.lambda.ts` extension and add a `LambdaFunction` component to your
|
|
36
|
+
* typescript project pointing to this entrypoint.
|
|
37
|
+
*
|
|
38
|
+
* This will add a task to your "compile" step which will use `esbuild` to
|
|
39
|
+
* bundle the handler code into the build directory. It will also generate a
|
|
40
|
+
* file `src/foo-function.ts` with a custom AWS construct called `FooFunction`
|
|
41
|
+
* which extends `@aws-cdk/aws-lambda.Function` which is bound to the bundled
|
|
42
|
+
* handle through an asset.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
*
|
|
46
|
+
* new LambdaFunction(myProject, {
|
|
47
|
+
* srcdir: myProject.srcdir,
|
|
48
|
+
* entrypoint: 'src/foo.lambda.ts',
|
|
49
|
+
* });
|
|
50
|
+
*/
|
|
51
|
+
class LambdaFunction extends projen_1.Component {
|
|
52
|
+
/**
|
|
53
|
+
* Defines a pre-bundled AWS Lambda function construct from handler code.
|
|
54
|
+
*
|
|
55
|
+
* @param project The project to use
|
|
56
|
+
* @param options Options
|
|
57
|
+
*/
|
|
58
|
+
constructor(project, options) {
|
|
59
|
+
var _a, _b, _c, _d, _e;
|
|
60
|
+
super(project);
|
|
61
|
+
const cdkDeps = options.cdkDeps;
|
|
62
|
+
const bundler = projen_1.javascript.Bundler.of(project);
|
|
63
|
+
if (!bundler) {
|
|
64
|
+
throw new Error("No bundler found. Please add a Bundler component to your project.");
|
|
65
|
+
}
|
|
66
|
+
const runtime = (_a = options.runtime) !== null && _a !== void 0 ? _a : LambdaRuntime.NODEJS_18_X;
|
|
67
|
+
// allow Lambda handler code to import dev-deps since they are only needed
|
|
68
|
+
// during bundling
|
|
69
|
+
const eslint = projen_1.javascript.Eslint.of(project);
|
|
70
|
+
eslint === null || eslint === void 0 ? void 0 : eslint.allowDevDeps(options.entrypoint);
|
|
71
|
+
const entrypoint = options.entrypoint;
|
|
72
|
+
if (!entrypoint.endsWith(internal_1.TYPESCRIPT_LAMBDA_EXT)) {
|
|
73
|
+
throw new Error(`${entrypoint} must have a ${internal_1.TYPESCRIPT_LAMBDA_EXT} extension`);
|
|
74
|
+
}
|
|
75
|
+
const basePath = path.posix.join(path.dirname(entrypoint), path.basename(entrypoint, internal_1.TYPESCRIPT_LAMBDA_EXT));
|
|
76
|
+
const constructFile = (_b = options.constructFile) !== null && _b !== void 0 ? _b : `${basePath}-function.ts`;
|
|
77
|
+
if (path.extname(constructFile) !== ".ts") {
|
|
78
|
+
throw new Error(`Construct file name "${constructFile}" must have a .ts extension`);
|
|
79
|
+
}
|
|
80
|
+
// type names
|
|
81
|
+
const constructName = (_c = options.constructName) !== null && _c !== void 0 ? _c : (0, case_1.pascal)(path.basename(basePath)) + "Function";
|
|
82
|
+
const propsType = `${constructName}Props`;
|
|
83
|
+
const bundle = bundler.addBundle(entrypoint, {
|
|
84
|
+
target: runtime.esbuildTarget,
|
|
85
|
+
platform: runtime.esbuildPlatform,
|
|
86
|
+
externals: runtime.defaultExternals,
|
|
87
|
+
...options.bundlingOptions,
|
|
88
|
+
tsconfigPath: (_d = project === null || project === void 0 ? void 0 : project.tsconfigDev) === null || _d === void 0 ? void 0 : _d.fileName,
|
|
89
|
+
});
|
|
90
|
+
// calculate the relative path between the directory containing the
|
|
91
|
+
// generated construct source file to the directory containing the bundle
|
|
92
|
+
// index.js by resolving them as absolute paths first.
|
|
93
|
+
// e.g:
|
|
94
|
+
// - outfileAbs => `/project-outdir/assets/foo/bar/baz/foo-function/index.js`
|
|
95
|
+
// - constructAbs => `/project-outdir/src/foo/bar/baz/foo-function.ts`
|
|
96
|
+
const outfileAbs = path.join(project.outdir, bundle.outfile);
|
|
97
|
+
const constructAbs = path.join(project.outdir, constructFile);
|
|
98
|
+
const relativeOutfile = path.relative(path.dirname(constructAbs), path.dirname(outfileAbs));
|
|
99
|
+
const src = new projen_1.SourceCode(project, constructFile);
|
|
100
|
+
if (src.marker) {
|
|
101
|
+
src.line(`// ${src.marker}`);
|
|
102
|
+
}
|
|
103
|
+
src.line("import * as path from 'path';");
|
|
104
|
+
if (cdkDeps.cdkMajorVersion === 1) {
|
|
105
|
+
src.line("import * as lambda from '@aws-cdk/aws-lambda';");
|
|
106
|
+
src.line("import { Construct } from '@aws-cdk/core';");
|
|
107
|
+
cdkDeps.addV1Dependencies("@aws-cdk/aws-lambda");
|
|
108
|
+
cdkDeps.addV1Dependencies("@aws-cdk/core");
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
src.line("import * as lambda from 'aws-cdk-lib/aws-lambda';");
|
|
112
|
+
src.line("import { Construct } from 'constructs';");
|
|
113
|
+
}
|
|
114
|
+
src.line();
|
|
115
|
+
src.line("/**");
|
|
116
|
+
src.line(` * Props for ${constructName}`);
|
|
117
|
+
src.line(" */");
|
|
118
|
+
src.open(`export interface ${propsType} extends lambda.FunctionOptions {`);
|
|
119
|
+
src.close("}");
|
|
120
|
+
src.line();
|
|
121
|
+
src.line("/**");
|
|
122
|
+
src.line(` * An AWS Lambda function which executes ${(0, internal_1.convertToPosixPath)(basePath)}.`);
|
|
123
|
+
src.line(" */");
|
|
124
|
+
src.open(`export class ${constructName} extends lambda.Function {`);
|
|
125
|
+
src.open(`constructor(scope: Construct, id: string, props?: ${propsType}) {`);
|
|
126
|
+
src.open("super(scope, id, {");
|
|
127
|
+
src.line(`description: '${(0, internal_1.convertToPosixPath)(entrypoint)}',`);
|
|
128
|
+
src.line("...props,");
|
|
129
|
+
src.line(`runtime: new lambda.Runtime('${runtime.functionRuntime}', lambda.RuntimeFamily.NODEJS),`);
|
|
130
|
+
src.line("handler: 'index.handler',");
|
|
131
|
+
src.line(`code: lambda.Code.fromAsset(path.join(__dirname, '${(0, internal_1.convertToPosixPath)(relativeOutfile)}')),`);
|
|
132
|
+
src.close("});");
|
|
133
|
+
if ((_e = options.awsSdkConnectionReuse) !== null && _e !== void 0 ? _e : true) {
|
|
134
|
+
src.line("this.addEnvironment('AWS_NODEJS_CONNECTION_REUSE_ENABLED', '1', { removeInEdge: true });");
|
|
135
|
+
}
|
|
136
|
+
src.close("}");
|
|
137
|
+
src.close("}");
|
|
138
|
+
this.project.logger.verbose(`${basePath}: construct "${constructName}" generated under "${constructFile}"`);
|
|
139
|
+
this.project.logger.verbose(`${basePath}: bundle task "${bundle.bundleTask.name}"`);
|
|
140
|
+
if (bundle.watchTask) {
|
|
141
|
+
this.project.logger.verbose(`${basePath}: bundle watch task "${bundle.watchTask.name}"`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
exports.LambdaFunction = LambdaFunction;
|
|
146
|
+
/**
|
|
147
|
+
* The runtime for the AWS Lambda function.
|
|
148
|
+
*/
|
|
149
|
+
class LambdaRuntime {
|
|
150
|
+
constructor(
|
|
151
|
+
/**
|
|
152
|
+
* The Node.js runtime to use
|
|
153
|
+
*/
|
|
154
|
+
functionRuntime,
|
|
155
|
+
/**
|
|
156
|
+
* The esbuild setting to use.
|
|
157
|
+
*/
|
|
158
|
+
esbuildTarget,
|
|
159
|
+
/**
|
|
160
|
+
* Options for this runtime.
|
|
161
|
+
*/
|
|
162
|
+
options) {
|
|
163
|
+
var _a;
|
|
164
|
+
this.functionRuntime = functionRuntime;
|
|
165
|
+
this.esbuildTarget = esbuildTarget;
|
|
166
|
+
this.esbuildPlatform = "node";
|
|
167
|
+
this.defaultExternals = (_a = options === null || options === void 0 ? void 0 : options.defaultExternals) !== null && _a !== void 0 ? _a : ["@aws-sdk/*"];
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
exports.LambdaRuntime = LambdaRuntime;
|
|
171
|
+
/**
|
|
172
|
+
* Node.js 10.x
|
|
173
|
+
* @deprecated NodeJS10 has been deprecated on February 14, 2022
|
|
174
|
+
*/
|
|
175
|
+
LambdaRuntime.NODEJS_10_X = new LambdaRuntime("nodejs10.x", "node10", { defaultExternals: ["aws-sdk"] });
|
|
176
|
+
/**
|
|
177
|
+
* Node.js 12.x
|
|
178
|
+
* @deprecated NodeJS12 has been deprecated on April 30, 2023
|
|
179
|
+
*/
|
|
180
|
+
LambdaRuntime.NODEJS_12_X = new LambdaRuntime("nodejs12.x", "node12", { defaultExternals: ["aws-sdk"] });
|
|
181
|
+
/**
|
|
182
|
+
* Node.js 14.x
|
|
183
|
+
* @deprecated NodeJS14 will be deprecated on November 27, 2023
|
|
184
|
+
*/
|
|
185
|
+
LambdaRuntime.NODEJS_14_X = new LambdaRuntime("nodejs14.x", "node14", { defaultExternals: ["aws-sdk"] });
|
|
186
|
+
/**
|
|
187
|
+
* Node.js 16.x
|
|
188
|
+
* @deprecated NodeJS16 will be deprecated on March 11, 2024
|
|
189
|
+
*/
|
|
190
|
+
LambdaRuntime.NODEJS_16_X = new LambdaRuntime("nodejs16.x", "node16", { defaultExternals: ["aws-sdk"] });
|
|
191
|
+
/**
|
|
192
|
+
* Node.js 18.x
|
|
193
|
+
*/
|
|
194
|
+
LambdaRuntime.NODEJS_18_X = new LambdaRuntime("nodejs18.x", "node18");
|
|
195
|
+
/**
|
|
196
|
+
* Node.js 20.x
|
|
197
|
+
*/
|
|
198
|
+
LambdaRuntime.NODEJS_20_X = new LambdaRuntime("nodejs20.x", "node20");
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xhbWJkYS1mdW5jdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE2QjtBQUM3QiwrQkFBOEI7QUFDOUIsbUNBT2dCO0FBQ2hCLHlDQUF1RTtBQThFdkU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFhLGNBQWUsU0FBUSxrQkFBUztJQUMzQzs7Ozs7T0FLRztJQUNILFlBQVksT0FBZ0IsRUFBRSxPQUE4Qjs7UUFDMUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWYsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNoQyxNQUFNLE9BQU8sR0FBRyxtQkFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FDYixtRUFBbUUsQ0FDcEUsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFBLE9BQU8sQ0FBQyxPQUFPLG1DQUFJLGFBQWEsQ0FBQyxXQUFXLENBQUM7UUFFN0QsMEVBQTBFO1FBQzFFLGtCQUFrQjtRQUNsQixNQUFNLE1BQU0sR0FBRyxtQkFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFekMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUV0QyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxnQ0FBcUIsQ0FBQyxFQUFFLENBQUM7WUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FDYixHQUFHLFVBQVUsZ0JBQWdCLGdDQUFxQixZ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QUFKaUMsQ0FJaEM7QUFFRjs7O0dBR0c7QUFDb0IseUJBQVcsR0FBRyxJQUFJLGFBQWEsQ0FDcEQsWUFBWSxFQUNaLFFBQVEsRUFDUixFQUFFLGdCQUFnQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FDbEMsQUFKaUMsQ0FJaEM7QUFFRjs7O0dBR0c7QUFDb0IseUJBQVcsR0FBRyxJQUFJLGFBQWEsQ0FDcEQsWUFBWSxFQUNaLFFBQVEsRUFDUixFQUFFLGdCQUFnQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FDbEMsQUFKaUMsQ0FJaEM7QUFFRjs7O0dBR0c7QUFDb0IseUJBQVcsR0FBRyxJQUFJLGFBQWEsQ0FDcEQsWUFBWSxFQUNaLFFBQVEsRUFDUixFQUFFLGdCQUFnQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FDbEMsQUFKaUMsQ0FJaEM7QUFFRjs7R0FFRztBQUNvQix5QkFBVyxHQUFHLElBQUksYUFBYSxDQUNwRCxZQUFZLEVBQ1osUUFBUSxDQUNULEFBSGlDLENBR2hDO0FBRUY7O0dBRUc7QUFDb0IseUJBQVcsR0FBRyxJQUFJLGFBQWEsQ0FDcEQsWUFBWSxFQUNaLFFBQVEsQ0FDVCxBQUhpQyxDQUdoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHBhc2NhbCB9IGZyb20gXCJjYXNlXCI7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIFByb2plY3QsXG4gIFNvdXJjZUNvZGUsXG4gIGF3c2NkayxcbiAgamF2YXNjcmlwdCxcbiAgdHlwZXNjcmlwdCxcbn0gZnJvbSBcInByb2plblwiO1xuaW1wb3J0IHsgY29udmVydFRvUG9zaXhQYXRoLCBUWVBFU0NSSVBUX0xBTUJEQV9FWFQgfSBmcm9tIFwiLi9pbnRlcm5hbFwiO1xuXG4vKipcbiAqIENvbW1vbiBvcHRpb25zIGZvciBgTGFtYmRhRnVuY3Rpb25gLiBBcHBsaWVzIHRvIGFsbCBmdW5jdGlvbnMgaW5cbiAqIGF1dG8tZGlzY292ZXJ5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUZ1bmN0aW9uQ29tbW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbm9kZS5qcyB2ZXJzaW9uIHRvIHRhcmdldC5cbiAgICpcbiAgICogQGRlZmF1bHQgUnVudGltZS5OT0RFSlNfMThfWFxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZT86IExhbWJkYVJ1bnRpbWU7XG5cbiAgLyoqXG4gICAqIEJ1bmRsaW5nIG9wdGlvbnMgZm9yIHRoaXMgQVdTIExhbWJkYSBmdW5jdGlvbi5cbiAgICpcbiAgICogSWYgbm90IHNwZWNpZmllZCB0aGUgZGVmYXVsdCBidW5kbGluZyBvcHRpb25zIHNwZWNpZmllZCBmb3IgdGhlIHByb2plY3RcbiAgICogYEJ1bmRsZXJgIGluc3RhbmNlIHdpbGwgYmUgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0c1xuICAgKi9cbiAgcmVhZG9ubHkgYnVuZGxpbmdPcHRpb25zPzogamF2YXNjcmlwdC5CdW5kbGluZ09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSByZXVzZSBUQ1AgY29ubmVjdGlvbnMgd2hlbiB3b3JraW5nIHdpdGggdGhlIEFXU1xuICAgKiBTREsgZm9yIEphdmFTY3JpcHQuXG4gICAqXG4gICAqIFRoaXMgc2V0cyB0aGUgYEFXU19OT0RFSlNfQ09OTkVDVElPTl9SRVVTRV9FTkFCTEVEYCBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICAgKiB0byBgMWAuXG4gICAqXG4gICAqIE5vdCBhcHBsaWNhYmxlIHdoZW4gYGVkZ2VMYW1iZGFgIGlzIHNldCB0byBgdHJ1ZWAgYmVjYXVzZSBlbnZpcm9ubWVudFxuICAgKiB2YXJpYWJsZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTGFtYmRhQEVkZ2UuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nkay1mb3ItamF2YXNjcmlwdC92Mi9kZXZlbG9wZXItZ3VpZGUvbm9kZS1yZXVzaW5nLWNvbm5lY3Rpb25zLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYXdzU2RrQ29ubmVjdGlvblJldXNlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgRnVuY3Rpb25gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUZ1bmN0aW9uT3B0aW9ucyBleHRlbmRzIExhbWJkYUZ1bmN0aW9uQ29tbW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIHBhdGggZnJvbSB0aGUgcHJvamVjdCByb290IGRpcmVjdG9yeSB0byBhIFR5cGVTY3JpcHQgZmlsZSB3aGljaCBjb250YWluc1xuICAgKiB0aGUgQVdTIExhbWJkYSBoYW5kbGVyIGVudHJ5cG9pbnQgKGV4cG9ydHMgYSBgaGFuZGxlcmAgZnVuY3Rpb24pLlxuICAgKlxuICAgKiBUaGlzIGlzIHJlbGF0aXZlIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdC5cbiAgICpcbiAgICogQGV4YW1wbGUgXCJzcmMvc3ViZGlyL2Zvby5sYW1iZGEudHNcIlxuICAgKi9cbiAgcmVhZG9ubHkgZW50cnlwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIFR5cGVTY3JpcHQgc291cmNlIGZpbGUuIFRoaXMgZmlsZSBzaG91bGQgYWxzbyBiZVxuICAgKiB1bmRlciB0aGUgc291cmNlIHRyZWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIG5hbWUgb2YgdGhlIGVudHJ5cG9pbnQgZmlsZSwgd2l0aCB0aGUgYC1mdW5jdGlvbi50c2Agc3VmZml4XG4gICAqIGluc3RlYWQgb2YgYC5sYW1iZGEudHNgLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uc3RydWN0RmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdlbmVyYXRlZCBgbGFtYmRhLkZ1bmN0aW9uYCBzdWJjbGFzcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBIHBhc2NhbCBjYXNlZCB2ZXJzaW9uIG9mIHRoZSBuYW1lIG9mIHRoZSBlbnRyeXBvaW50IGZpbGUsIHdpdGhcbiAgICogdGhlIGV4dGVuc2lvbiBgRnVuY3Rpb25gIChlLmcuIGBSZXNpemVJbWFnZUZ1bmN0aW9uYCkuXG4gICAqL1xuICByZWFkb25seSBjb25zdHJ1Y3ROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBV1MgQ0RLIGRlcGVuZGVuY3kgbWFuYWdlci5cbiAgICovXG4gIHJlYWRvbmx5IGNka0RlcHM6IGF3c2Nkay5Bd3NDZGtEZXBzO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHByZS1idW5kbGVkIEFXUyBMYW1iZGEgZnVuY3Rpb24gY29uc3RydWN0IGZyb20gaGFuZGxlciBjb2RlLlxuICpcbiAqIFRvIHVzZSB0aGlzLCBjcmVhdGUgYW4gQVdTIExhbWJkYSBoYW5kbGVyIGZpbGUgdW5kZXIgeW91ciBzb3VyY2UgdHJlZSB3aXRoXG4gKiB0aGUgYC5sYW1iZGEudHNgIGV4dGVuc2lvbiBhbmQgYWRkIGEgYExhbWJkYUZ1bmN0aW9uYCBjb21wb25lbnQgdG8geW91clxuICogdHlwZXNjcmlwdCBwcm9qZWN0IHBvaW50aW5nIHRvIHRoaXMgZW50cnlwb2ludC5cbiAqXG4gKiBUaGlzIHdpbGwgYWRkIGEgdGFzayB0byB5b3VyIFwiY29tcGlsZVwiIHN0ZXAgd2hpY2ggd2lsbCB1c2UgYGVzYnVpbGRgIHRvXG4gKiBidW5kbGUgdGhlIGhhbmRsZXIgY29kZSBpbnRvIHRoZSBidWlsZCBkaXJlY3RvcnkuIEl0IHdpbGwgYWxzbyBnZW5lcmF0ZSBhXG4gKiBmaWxlIGBzcmMvZm9vLWZ1bmN0aW9uLnRzYCB3aXRoIGEgY3VzdG9tIEFXUyBjb25zdHJ1Y3QgY2FsbGVkIGBGb29GdW5jdGlvbmBcbiAqIHdoaWNoIGV4dGVuZHMgYEBhd3MtY2RrL2F3cy1sYW1iZGEuRnVuY3Rpb25gIHdoaWNoIGlzIGJvdW5kIHRvIHRoZSBidW5kbGVkXG4gKiBoYW5kbGUgdGhyb3VnaCBhbiBhc3NldC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIG5ldyBMYW1iZGFGdW5jdGlvbihteVByb2plY3QsIHtcbiAqICAgc3JjZGlyOiBteVByb2plY3Quc3JjZGlyLFxuICogICBlbnRyeXBvaW50OiAnc3JjL2Zvby5sYW1iZGEudHMnLFxuICogfSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBMYW1iZGFGdW5jdGlvbiBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgcHJlLWJ1bmRsZWQgQVdTIExhbWJkYSBmdW5jdGlvbiBjb25zdHJ1Y3QgZnJvbSBoYW5kbGVyIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0IHRvIHVzZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBMYW1iZGFGdW5jdGlvbk9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIGNvbnN0IGNka0RlcHMgPSBvcHRpb25zLmNka0RlcHM7XG4gICAgY29uc3QgYnVuZGxlciA9IGphdmFzY3JpcHQuQnVuZGxlci5vZihwcm9qZWN0KTtcbiAgICBpZiAoIWJ1bmRsZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJObyBidW5kbGVyIGZvdW5kLiBQbGVhc2UgYWRkIGEgQnVuZGxlciBjb21wb25lbnQgdG8geW91ciBwcm9qZWN0LlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBydW50aW1lID0gb3B0aW9ucy5ydW50aW1lID8/IExhbWJkYVJ1bnRpbWUuTk9ERUpTXzE4X1g7XG5cbiAgICAvLyBhbGxvdyBMYW1iZGEgaGFuZGxlciBjb2RlIHRvIGltcG9ydCBkZXYtZGVwcyBzaW5jZSB0aGV5IGFyZSBvbmx5IG5lZWRlZFxuICAgIC8vIGR1cmluZyBidW5kbGluZ1xuICAgIGNvbnN0IGVzbGludCA9IGphdmFzY3JpcHQuRXNsaW50Lm9mKHByb2plY3QpO1xuICAgIGVzbGludD8uYWxsb3dEZXZEZXBzKG9wdGlvbnMuZW50cnlwb2ludCk7XG5cbiAgICBjb25zdCBlbnRyeXBvaW50ID0gb3B0aW9ucy5lbnRyeXBvaW50O1xuXG4gICAgaWYgKCFlbnRyeXBvaW50LmVuZHNXaXRoKFRZUEVTQ1JJUFRfTEFNQkRBX0VYVCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7ZW50cnlwb2ludH0gbXVzdCBoYXZlIGEgJHtUWVBFU0NSSVBUX0xBTUJEQV9FWFR9IGV4dGVuc2lvbmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2VQYXRoID0gcGF0aC5wb3NpeC5qb2luKFxuICAgICAgcGF0aC5kaXJuYW1lKGVudHJ5cG9pbnQpLFxuICAgICAgcGF0aC5iYXNlbmFtZShlbnRyeXBvaW50LCBUWVBFU0NSSVBUX0xBTUJEQV9FWFQpLFxuICAgICk7XG4gICAgY29uc3QgY29uc3RydWN0RmlsZSA9IG9wdGlvbnMuY29uc3RydWN0RmlsZSA/PyBgJHtiYXNlUGF0aH0tZnVuY3Rpb24udHNgO1xuXG4gICAgaWYgKHBhdGguZXh0bmFtZShjb25zdHJ1Y3RGaWxlKSAhPT0gXCIudHNcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ29uc3RydWN0IGZpbGUgbmFtZSBcIiR7Y29uc3RydWN0RmlsZX1cIiBtdXN0IGhhdmUgYSAudHMgZXh0ZW5zaW9uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gdHlwZSBuYW1lc1xuICAgIGNvbnN0IGNvbnN0cnVjdE5hbWUgPVxuICAgICAgb3B0aW9ucy5jb25zdHJ1Y3ROYW1lID8/IHBhc2NhbChwYXRoLmJhc2VuYW1lKGJhc2VQYXRoKSkgKyBcIkZ1bmN0aW9uXCI7XG4gICAgY29uc3QgcHJvcHNUeXBlID0gYCR7Y29uc3RydWN0TmFtZX1Qcm9wc2A7XG5cbiAgICBjb25zdCBidW5kbGUgPSBidW5kbGVyLmFkZEJ1bmRsZShlbnRyeXBvaW50LCB7XG4gICAgICB0YXJnZXQ6IHJ1bnRpbWUuZXNidWlsZFRhcmdldCxcbiAgICAgIHBsYXRmb3JtOiBydW50aW1lLmVzYnVpbGRQbGF0Zm9ybSxcbiAgICAgIGV4dGVybmFsczogcnVudGltZS5kZWZhdWx0RXh0ZXJuYWxzLFxuICAgICAgLi4ub3B0aW9ucy5idW5kbGluZ09wdGlvbnMsXG4gICAgICB0c2NvbmZpZ1BhdGg6IChwcm9qZWN0IGFzIHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3QpPy50c2NvbmZpZ0RldlxuICAgICAgICA/LmZpbGVOYW1lLFxuICAgIH0pO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRoZSByZWxhdGl2ZSBwYXRoIGJldHdlZW4gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZVxuICAgIC8vIGdlbmVyYXRlZCBjb25zdHJ1Y3Qgc291cmNlIGZpbGUgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBidW5kbGVcbiAgICAvLyBpbmRleC5qcyBieSByZXNvbHZpbmcgdGhlbSBhcyBhYnNvbHV0ZSBwYXRocyBmaXJzdC5cbiAgICAvLyBlLmc6XG4gICAgLy8gIC0gb3V0ZmlsZUFicyA9PiBgL3Byb2plY3Qtb3V0ZGlyL2Fzc2V0cy9mb28vYmFyL2Jhei9mb28tZnVuY3Rpb24vaW5kZXguanNgXG4gICAgLy8gIC0gY29uc3RydWN0QWJzID0+IGAvcHJvamVjdC1vdXRkaXIvc3JjL2Zvby9iYXIvYmF6L2Zvby1mdW5jdGlvbi50c2BcbiAgICBjb25zdCBvdXRmaWxlQWJzID0gcGF0aC5qb2luKHByb2plY3Qub3V0ZGlyLCBidW5kbGUub3V0ZmlsZSk7XG4gICAgY29uc3QgY29uc3RydWN0QWJzID0gcGF0aC5qb2luKHByb2plY3Qub3V0ZGlyLCBjb25zdHJ1Y3RGaWxlKTtcbiAgICBjb25zdCByZWxhdGl2ZU91dGZpbGUgPSBwYXRoLnJlbGF0aXZlKFxuICAgICAgcGF0aC5kaXJuYW1lKGNvbnN0cnVjdEFicyksXG4gICAgICBwYXRoLmRpcm5hbWUob3V0ZmlsZUFicyksXG4gICAgKTtcblxuICAgIGNvbnN0IHNyYyA9IG5ldyBTb3VyY2VDb2RlKHByb2plY3QsIGNvbnN0cnVjdEZpbGUpO1xuICAgIGlmIChzcmMubWFya2VyKSB7XG4gICAgICBzcmMubGluZShgLy8gJHtzcmMubWFya2VyfWApO1xuICAgIH1cbiAgICBzcmMubGluZShcImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XCIpO1xuXG4gICAgaWYgKGNka0RlcHMuY2RrTWFqb3JWZXJzaW9uID09PSAxKSB7XG4gICAgICBzcmMubGluZShcImltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdAYXdzLWNkay9hd3MtbGFtYmRhJztcIik7XG4gICAgICBzcmMubGluZShcImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ0Bhd3MtY2RrL2NvcmUnO1wiKTtcbiAgICAgIGNka0RlcHMuYWRkVjFEZXBlbmRlbmNpZXMoXCJAYXdzLWNkay9hd3MtbGFtYmRhXCIpO1xuICAgICAgY2RrRGVwcy5hZGRWMURlcGVuZGVuY2llcyhcIkBhd3MtY2RrL2NvcmVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNyYy5saW5lKFwiaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1wiKTtcbiAgICAgIHNyYy5saW5lKFwiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XCIpO1xuICAgIH1cblxuICAgIHNyYy5saW5lKCk7XG4gICAgc3JjLmxpbmUoXCIvKipcIik7XG4gICAgc3JjLmxpbmUoYCAqIFByb3BzIGZvciAke2NvbnN0cnVjdE5hbWV9YCk7XG4gICAgc3JjLmxpbmUoXCIgKi9cIik7XG4gICAgc3JjLm9wZW4oYGV4cG9ydCBpbnRlcmZhY2UgJHtwcm9wc1R5cGV9IGV4dGVuZHMgbGFtYmRhLkZ1bmN0aW9uT3B0aW9ucyB7YCk7XG4gICAgc3JjLmNsb3NlKFwifVwiKTtcbiAgICBzcmMubGluZSgpO1xuICAgIHNyYy5saW5lKFwiLyoqXCIpO1xuICAgIHNyYy5saW5lKFxuICAgICAgYCAqIEFuIEFXUyBMYW1iZGEgZnVuY3Rpb24gd2hpY2ggZXhlY3V0ZXMgJHtjb252ZXJ0VG9Qb3NpeFBhdGgoXG4gICAgICAgIGJhc2VQYXRoLFxuICAgICAgKX0uYCxcbiAgICApO1xuICAgIHNyYy5saW5lKFwiICovXCIpO1xuICAgIHNyYy5vcGVuKGBleHBvcnQgY2xhc3MgJHtjb25zdHJ1Y3ROYW1lfSBleHRlbmRzIGxhbWJkYS5GdW5jdGlvbiB7YCk7XG5cbiAgICBzcmMub3BlbihcbiAgICAgIGBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86ICR7cHJvcHNUeXBlfSkge2AsXG4gICAgKTtcbiAgICBzcmMub3BlbihcInN1cGVyKHNjb3BlLCBpZCwge1wiKTtcbiAgICBzcmMubGluZShgZGVzY3JpcHRpb246ICcke2NvbnZlcnRUb1Bvc2l4UGF0aChlbnRyeXBvaW50KX0nLGApO1xuICAgIHNyYy5saW5lKFwiLi4ucHJvcHMsXCIpO1xuICAgIHNyYy5saW5lKFxuICAgICAgYHJ1bnRpbWU6IG5ldyBsYW1iZGEuUnVudGltZSgnJHtydW50aW1lLmZ1bmN0aW9uUnVudGltZX0nLCBsYW1iZGEuUnVudGltZUZhbWlseS5OT0RFSlMpLGAsXG4gICAgKTtcbiAgICBzcmMubGluZShcImhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcIik7XG4gICAgc3JjLmxpbmUoXG4gICAgICBgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcke2NvbnZlcnRUb1Bvc2l4UGF0aChcbiAgICAgICAgcmVsYXRpdmVPdXRmaWxlLFxuICAgICAgKX0nKSksYCxcbiAgICApO1xuICAgIHNyYy5jbG9zZShcIn0pO1wiKTtcbiAgICBpZiAob3B0aW9ucy5hd3NTZGtDb25uZWN0aW9uUmV1c2UgPz8gdHJ1ZSkge1xuICAgICAgc3JjLmxpbmUoXG4gICAgICAgIFwidGhpcy5hZGRFbnZpcm9ubWVudCgnQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQnLCAnMScsIHsgcmVtb3ZlSW5FZGdlOiB0cnVlIH0pO1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgc3JjLmNsb3NlKFwifVwiKTtcbiAgICBzcmMuY2xvc2UoXCJ9XCIpO1xuXG4gICAgdGhpcy5wcm9qZWN0LmxvZ2dlci52ZXJib3NlKFxuICAgICAgYCR7YmFzZVBhdGh9OiBjb25zdHJ1Y3QgXCIke2NvbnN0cnVjdE5hbWV9XCIgZ2VuZXJhdGVkIHVuZGVyIFwiJHtjb25zdHJ1Y3RGaWxlfVwiYCxcbiAgICApO1xuICAgIHRoaXMucHJvamVjdC5sb2dnZXIudmVyYm9zZShcbiAgICAgIGAke2Jhc2VQYXRofTogYnVuZGxlIHRhc2sgXCIke2J1bmRsZS5idW5kbGVUYXNrLm5hbWV9XCJgLFxuICAgICk7XG4gICAgaWYgKGJ1bmRsZS53YXRjaFRhc2spIHtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIudmVyYm9zZShcbiAgICAgICAgYCR7YmFzZVBhdGh9OiBidW5kbGUgd2F0Y2ggdGFzayBcIiR7YnVuZGxlLndhdGNoVGFzay5uYW1lfVwiYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIEFXUyBMYW1iZGEgZnVuY3Rpb24gcnVudGltZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVJ1bnRpbWVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFBhY2thZ2VzIHRoYXQgYXJlIGNvbnNpZGVyZWQgZXh0ZXJuYWxzIGJ5IGRlZmF1bHQgd2hlbiBidW5kbGluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCBbJ0Bhd3Mtc2RrLyonXVxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEV4dGVybmFscz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBydW50aW1lIGZvciB0aGUgQVdTIExhbWJkYSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIExhbWJkYVJ1bnRpbWUge1xuICAvKipcbiAgICogTm9kZS5qcyAxMC54XG4gICAqIEBkZXByZWNhdGVkIE5vZGVKUzEwIGhhcyBiZWVuIGRlcHJlY2F0ZWQgb24gRmVicnVhcnkgMTQsIDIwMjJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTXzEwX1ggPSBuZXcgTGFtYmRhUnVudGltZShcbiAgICBcIm5vZGVqczEwLnhcIixcbiAgICBcIm5vZGUxMFwiLFxuICAgIHsgZGVmYXVsdEV4dGVybmFsczogW1wiYXdzLXNka1wiXSB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBOb2RlLmpzIDEyLnhcbiAgICogQGRlcHJlY2F0ZWQgTm9kZUpTMTIgaGFzIGJlZW4gZGVwcmVjYXRlZCBvbiBBcHJpbCAzMCwgMjAyM1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMTJfWCA9IG5ldyBMYW1iZGFSdW50aW1lKFxuICAgIFwibm9kZWpzMTIueFwiLFxuICAgIFwibm9kZTEyXCIsXG4gICAgeyBkZWZhdWx0RXh0ZXJuYWxzOiBbXCJhd3Mtc2RrXCJdIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIE5vZGUuanMgMTQueFxuICAgKiBAZGVwcmVjYXRlZCBOb2RlSlMxNCB3aWxsIGJlIGRlcHJlY2F0ZWQgb24gTm92ZW1iZXIgMjcsIDIwMjNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTXzE0X1ggPSBuZXcgTGFtYmRhUnVudGltZShcbiAgICBcIm5vZGVqczE0LnhcIixcbiAgICBcIm5vZGUxNFwiLFxuICAgIHsgZGVmYXVsdEV4dGVybmFsczogW1wiYXdzLXNka1wiXSB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBOb2RlLmpzIDE2LnhcbiAgICogQGRlcHJlY2F0ZWQgTm9kZUpTMTYgd2lsbCBiZSBkZXByZWNhdGVkIG9uIE1hcmNoIDExLCAyMDI0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18xNl9YID0gbmV3IExhbWJkYVJ1bnRpbWUoXG4gICAgXCJub2RlanMxNi54XCIsXG4gICAgXCJub2RlMTZcIixcbiAgICB7IGRlZmF1bHRFeHRlcm5hbHM6IFtcImF3cy1zZGtcIl0gfSxcbiAgKTtcblxuICAvKipcbiAgICogTm9kZS5qcyAxOC54XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18xOF9YID0gbmV3IExhbWJkYVJ1bnRpbWUoXG4gICAgXCJub2RlanMxOC54XCIsXG4gICAgXCJub2RlMThcIixcbiAgKTtcblxuICAvKipcbiAgICogTm9kZS5qcyAyMC54XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18yMF9YID0gbmV3IExhbWJkYVJ1bnRpbWUoXG4gICAgXCJub2RlanMyMC54XCIsXG4gICAgXCJub2RlMjBcIixcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZXNidWlsZFBsYXRmb3JtID0gXCJub2RlXCI7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRFeHRlcm5hbHM6IHN0cmluZ1tdO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiBUaGUgTm9kZS5qcyBydW50aW1lIHRvIHVzZVxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBmdW5jdGlvblJ1bnRpbWU6IHN0cmluZyxcblxuICAgIC8qKlxuICAgICAqIFRoZSBlc2J1aWxkIHNldHRpbmcgdG8gdXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBlc2J1aWxkVGFyZ2V0OiBzdHJpbmcsXG5cbiAgICAvKipcbiAgICAgKiBPcHRpb25zIGZvciB0aGlzIHJ1bnRpbWUuXG4gICAgICovXG4gICAgb3B0aW9ucz86IExhbWJkYVJ1bnRpbWVPcHRpb25zLFxuICApIHtcbiAgICB0aGlzLmRlZmF1bHRFeHRlcm5hbHMgPSBvcHRpb25zPy5kZWZhdWx0RXh0ZXJuYWxzID8/IFtcIkBhd3Mtc2RrLypcIl07XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -23,7 +23,6 @@
|
|
|
23
23
|
"@types/node": "^18",
|
|
24
24
|
"@typescript-eslint/eslint-plugin": "^6",
|
|
25
25
|
"@typescript-eslint/parser": "^6",
|
|
26
|
-
"aws-cdk-lib": "2.51.0",
|
|
27
26
|
"constructs": "^10.0.0",
|
|
28
27
|
"eslint": "^8",
|
|
29
28
|
"eslint-config-prettier": "^9.0.0",
|
|
@@ -37,11 +36,8 @@
|
|
|
37
36
|
"ts-node": "^10.9.1",
|
|
38
37
|
"typescript": "^5.3.2"
|
|
39
38
|
},
|
|
40
|
-
"peerDependencies": {
|
|
41
|
-
"aws-cdk-lib": "^2.51.0"
|
|
42
|
-
},
|
|
43
39
|
"dependencies": {
|
|
44
|
-
"
|
|
40
|
+
"case": "^1.6.3",
|
|
45
41
|
"projen": "^0.77.1"
|
|
46
42
|
},
|
|
47
43
|
"main": "lib/index.js",
|
|
@@ -49,7 +45,7 @@
|
|
|
49
45
|
"publishConfig": {
|
|
50
46
|
"access": "public"
|
|
51
47
|
},
|
|
52
|
-
"version": "0.0.
|
|
48
|
+
"version": "0.0.6",
|
|
53
49
|
"types": "lib/index.d.ts",
|
|
54
50
|
"//": "~~ Generated by projen. To modify, edit .projenrc.ts and run \"npx projen\"."
|
|
55
51
|
}
|