@inizioevoke/evosynth 1.6.0

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.
Files changed (71) hide show
  1. package/.editorconfig +12 -0
  2. package/dist/constructs/certificatemanager.d.ts +12 -0
  3. package/dist/constructs/certificatemanager.js +19 -0
  4. package/dist/constructs/cloudfront.d.ts +55 -0
  5. package/dist/constructs/cloudfront.js +84 -0
  6. package/dist/constructs/codebuild.d.ts +31 -0
  7. package/dist/constructs/codebuild.js +95 -0
  8. package/dist/constructs/codepipeline.d.ts +30 -0
  9. package/dist/constructs/codepipeline.js +63 -0
  10. package/dist/constructs/route53.d.ts +14 -0
  11. package/dist/constructs/route53.js +24 -0
  12. package/dist/constructs/s3.d.ts +11 -0
  13. package/dist/constructs/s3.js +17 -0
  14. package/dist/constructs/ssm.d.ts +9 -0
  15. package/dist/constructs/ssm.js +17 -0
  16. package/dist/constructs/waf.d.ts +21 -0
  17. package/dist/constructs/waf.js +89 -0
  18. package/dist/index.d.ts +10 -0
  19. package/dist/index.js +26 -0
  20. package/dist/lib/const.d.ts +1 -0
  21. package/dist/lib/const.js +2 -0
  22. package/dist/lib/csv-redirects.d.ts +3 -0
  23. package/dist/lib/csv-redirects.js +124 -0
  24. package/dist/lib/tags.d.ts +19 -0
  25. package/dist/lib/tags.js +47 -0
  26. package/dist/lib/types.d.ts +14 -0
  27. package/dist/lib/types.js +2 -0
  28. package/dist/lib/utils.d.ts +2 -0
  29. package/dist/lib/utils.js +7 -0
  30. package/dist/lib/version.d.ts +1 -0
  31. package/dist/lib/version.js +5 -0
  32. package/dist/stacks/web-static-serverless/codepipeline-stack.d.ts +17 -0
  33. package/dist/stacks/web-static-serverless/codepipeline-stack.js +28 -0
  34. package/dist/stacks/web-static-serverless/web-global-stack.d.ts +43 -0
  35. package/dist/stacks/web-static-serverless/web-global-stack.js +142 -0
  36. package/dist/stages/str8r-clm-stage.d.ts +17 -0
  37. package/dist/stages/str8r-clm-stage.js +41 -0
  38. package/dist/stages/web-static-serverless-stage.d.ts +19 -0
  39. package/dist/stages/web-static-serverless-stage.js +51 -0
  40. package/dist/templates/cffn-default-doc-basic-auth.js +155 -0
  41. package/dist/templates/cffn-default-doc.js +132 -0
  42. package/inizioevoke-evosynth.code-workspace +8 -0
  43. package/package.json +24 -0
  44. package/readme.md +114 -0
  45. package/samples/app.ts +103 -0
  46. package/samples/codebuild/buildspec.yml +24 -0
  47. package/samples/config/redirects.csv +6 -0
  48. package/src/constructs/certificatemanager.ts +28 -0
  49. package/src/constructs/cloudfront.ts +148 -0
  50. package/src/constructs/codebuild.ts +124 -0
  51. package/src/constructs/codepipeline.ts +93 -0
  52. package/src/constructs/route53.ts +34 -0
  53. package/src/constructs/s3.ts +25 -0
  54. package/src/constructs/ssm.ts +24 -0
  55. package/src/constructs/waf.ts +118 -0
  56. package/src/index.ts +35 -0
  57. package/src/lib/const.ts +1 -0
  58. package/src/lib/csv-redirects.ts +139 -0
  59. package/src/lib/tags.ts +55 -0
  60. package/src/lib/types.ts +17 -0
  61. package/src/lib/utils.ts +7 -0
  62. package/src/lib/version.ts +6 -0
  63. package/src/stacks/web-static-serverless/codepipeline-stack.ts +42 -0
  64. package/src/stacks/web-static-serverless/web-global-stack.ts +184 -0
  65. package/src/stages/str8r-clm-stage.ts +57 -0
  66. package/src/stages/web-static-serverless-stage.ts +69 -0
  67. package/src/templates/cffn-default-doc-basic-auth.js +155 -0
  68. package/src/templates/cffn-default-doc.js +132 -0
  69. package/tasks/clean.js +7 -0
  70. package/tasks/copy-templates.js +13 -0
  71. package/tsconfig.json +32 -0
package/.editorconfig ADDED
@@ -0,0 +1,12 @@
1
+ # EditorConfig is awesome: https://EditorConfig.org
2
+
3
+ # top-most EditorConfig file
4
+ root = true
5
+
6
+ [*]
7
+ indent_style = space
8
+ indent_size = 2
9
+ end_of_line = lf
10
+ charset = utf-8
11
+ trim_trailing_whitespace = false
12
+ insert_final_newline = false
@@ -0,0 +1,12 @@
1
+ import { Construct } from 'constructs';
2
+ import { Certificate } from "aws-cdk-lib/aws-certificatemanager";
3
+ import { IHostedZone } from "aws-cdk-lib/aws-route53";
4
+ import { ResourceProps } from "../lib/types.js";
5
+ export interface SSLCertificateProps extends ResourceProps {
6
+ hostedZone: IHostedZone;
7
+ domainName: string;
8
+ }
9
+ export declare class SSLCertificate extends Construct {
10
+ readonly certificate: Certificate;
11
+ constructor(scope: Construct, id: string, props: SSLCertificateProps);
12
+ }
@@ -0,0 +1,19 @@
1
+ import { RemovalPolicy } from "aws-cdk-lib";
2
+ import { Construct } from 'constructs';
3
+ import { Certificate, CertificateValidation } from "aws-cdk-lib/aws-certificatemanager";
4
+ import { tagResource } from "../lib/tags.js";
5
+ export class SSLCertificate extends Construct {
6
+ certificate;
7
+ constructor(scope, id, props) {
8
+ super(scope, id);
9
+ this.certificate = new Certificate(this, `Certificate-${props.domainName}`, {
10
+ domainName: props.domainName,
11
+ validation: CertificateValidation.fromDns(props.hostedZone),
12
+ });
13
+ tagResource(this.certificate, props.tags);
14
+ if (typeof props.destroy == 'boolean') {
15
+ this.certificate.applyRemovalPolicy(props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN);
16
+ }
17
+ }
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydGlmaWNhdGVtYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvY2VydGlmaWNhdGVtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFeEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUTdDLE1BQU0sT0FBTyxjQUFlLFNBQVEsU0FBUztJQUMzQixXQUFXLENBQWM7SUFFekMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLGVBQWUsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQzFFLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixVQUFVLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7U0FDNUQsQ0FBQyxDQUFDO1FBQ0gsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLElBQUksT0FBTyxLQUFLLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BHLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IENlcnRpZmljYXRlLCBDZXJ0aWZpY2F0ZVZhbGlkYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuaW1wb3J0IHsgSUhvc3RlZFpvbmUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCB7IHRhZ1Jlc291cmNlIH0gZnJvbSBcIi4uL2xpYi90YWdzLnRzXCI7XG5pbXBvcnQgeyBSZXNvdXJjZVByb3BzIH0gZnJvbSBcIi4uL2xpYi90eXBlcy5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNTTENlcnRpZmljYXRlUHJvcHMgZXh0ZW5kcyBSZXNvdXJjZVByb3BzIHtcbiAgaG9zdGVkWm9uZTogSUhvc3RlZFpvbmU7XG4gIGRvbWFpbk5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFNTTENlcnRpZmljYXRlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGNlcnRpZmljYXRlOiBDZXJ0aWZpY2F0ZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU1NMQ2VydGlmaWNhdGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmNlcnRpZmljYXRlID0gbmV3IENlcnRpZmljYXRlKHRoaXMsIGBDZXJ0aWZpY2F0ZS0ke3Byb3BzLmRvbWFpbk5hbWV9YCwge1xuICAgICAgZG9tYWluTmFtZTogcHJvcHMuZG9tYWluTmFtZSxcbiAgICAgIHZhbGlkYXRpb246IENlcnRpZmljYXRlVmFsaWRhdGlvbi5mcm9tRG5zKHByb3BzLmhvc3RlZFpvbmUpLFxuICAgIH0pO1xuICAgIHRhZ1Jlc291cmNlKHRoaXMuY2VydGlmaWNhdGUsIHByb3BzLnRhZ3MpO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZGVzdHJveSA9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRoaXMuY2VydGlmaWNhdGUuYXBwbHlSZW1vdmFsUG9saWN5KHByb3BzLmRlc3Ryb3kgPyBSZW1vdmFsUG9saWN5LkRFU1RST1kgOiBSZW1vdmFsUG9saWN5LlJFVEFJTik7XG4gICAgfVxuICB9XG59Il19
@@ -0,0 +1,55 @@
1
+ import { Construct } from 'constructs';
2
+ import { ICertificate } from 'aws-cdk-lib/aws-certificatemanager';
3
+ import { BehaviorOptions, Distribution, Function } from 'aws-cdk-lib/aws-cloudfront';
4
+ import type { ResourceProps } from '../lib/types.js';
5
+ export interface CloudFrontDistributionProps extends ResourceProps {
6
+ domainName: string;
7
+ description?: string;
8
+ defaultBehavior: BehaviorOptions;
9
+ additionalBehaviors?: Record<string, BehaviorOptions>;
10
+ priceClass?: 'PRICE_CLASS_ALL' | 'PRICE_CLASS_100' | 'PRICE_CLASS_200' | 'NOT_PROD' | 'PROD';
11
+ certificate: ICertificate;
12
+ webAclId?: string;
13
+ }
14
+ export declare class CloudFrontDistribution extends Construct {
15
+ readonly distribution: Distribution;
16
+ constructor(scope: Construct, id: string, props: CloudFrontDistributionProps);
17
+ }
18
+ export type HttpRedirectCode = 301 | 302 | 303 | 307 | 308;
19
+ export type CloudFrontFunctionRedirectPaths = Record<string, string | [string, HttpRedirectCode]>;
20
+ export interface CloudFrontFunctionRedirects {
21
+ trailingSlash?: boolean;
22
+ defaultDocument?: string;
23
+ redirectDefaultDocument?: boolean;
24
+ paths?: CloudFrontFunctionRedirectPaths;
25
+ pathsCsvFile?: string;
26
+ }
27
+ export interface ViewerRequestResponseFunctionProps extends ResourceProps {
28
+ functionName?: string;
29
+ defaultDocument?: string;
30
+ redirects?: CloudFrontFunctionRedirects;
31
+ redirectsCsvPath?: string;
32
+ credentials?: string;
33
+ code: string;
34
+ }
35
+ export interface DefaultDocFunctionProps extends ResourceProps, Pick<ViewerRequestResponseFunctionProps, 'functionName' | 'defaultDocument' | 'redirects' | 'redirectsCsvPath'> {
36
+ functionName?: string;
37
+ defaultDocument?: string;
38
+ redirects?: CloudFrontFunctionRedirects;
39
+ redirectsCsvPath?: string;
40
+ }
41
+ export interface BasicAuthDefaultDocFunctionProps extends DefaultDocFunctionProps {
42
+ credentials: string;
43
+ }
44
+ export interface CloudFrontFunctionProps extends ResourceProps {
45
+ code: string;
46
+ functionName?: string;
47
+ runtime?: 'JS_1_0' | 'JS_2_0';
48
+ }
49
+ export declare class CloudFrontFunction extends Construct {
50
+ readonly fn: Function;
51
+ constructor(scope: Construct, id: string, props: CloudFrontFunctionProps);
52
+ static createDefaultDoc(scope: Construct, props: DefaultDocFunctionProps): CloudFrontFunction;
53
+ static createBasicAuthDefaultDoc(scope: Construct, props: BasicAuthDefaultDocFunctionProps): CloudFrontFunction;
54
+ static createViewerRequestResponseFunction(scope: Construct, id: string | null, props: ViewerRequestResponseFunctionProps): CloudFrontFunction;
55
+ }
@@ -0,0 +1,84 @@
1
+ import { resolve } from 'node:path';
2
+ import { readFileSync } from 'node:fs';
3
+ import { RemovalPolicy } from "aws-cdk-lib";
4
+ import { Construct } from 'constructs';
5
+ import { Distribution, Function, FunctionCode, FunctionRuntime, PriceClass } from 'aws-cdk-lib/aws-cloudfront';
6
+ import { tagResource } from '../lib/tags.js';
7
+ import { parseCsvRedirects } from '../lib/csv-redirects.js';
8
+ const __dirname = import.meta.dirname;
9
+ export class CloudFrontDistribution extends Construct {
10
+ distribution;
11
+ constructor(scope, id, props) {
12
+ super(scope, id);
13
+ let priceClass = PriceClass.PRICE_CLASS_ALL;
14
+ switch (props.priceClass) {
15
+ case 'NOT_PROD':
16
+ case 'PRICE_CLASS_100':
17
+ priceClass = PriceClass.PRICE_CLASS_100;
18
+ break;
19
+ case 'PRICE_CLASS_200':
20
+ priceClass = PriceClass.PRICE_CLASS_200;
21
+ break;
22
+ }
23
+ this.distribution = new Distribution(this, `${id}|CloudFrontDistribution`, {
24
+ comment: props.description,
25
+ defaultBehavior: props.defaultBehavior,
26
+ additionalBehaviors: props.additionalBehaviors,
27
+ domainNames: [props.domainName],
28
+ certificate: props.certificate,
29
+ priceClass,
30
+ webAclId: props.webAclId
31
+ });
32
+ tagResource(this.distribution, props.tags);
33
+ if (typeof props.destroy == 'boolean') {
34
+ this.distribution.applyRemovalPolicy(props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN);
35
+ }
36
+ }
37
+ }
38
+ export class CloudFrontFunction extends Construct {
39
+ fn;
40
+ constructor(scope, id, props) {
41
+ super(scope, id);
42
+ this.fn = new Function(this, 'CloudFrontFunction', {
43
+ functionName: props.functionName,
44
+ runtime: FunctionRuntime[props.runtime ?? 'JS_2_0'],
45
+ code: FunctionCode.fromInline(props.code)
46
+ });
47
+ tagResource(this.fn, props.tags);
48
+ if (typeof props.destroy == 'boolean') {
49
+ this.fn.applyRemovalPolicy(props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN);
50
+ }
51
+ }
52
+ static createDefaultDoc(scope, props) {
53
+ const code = readFileSync(resolve(__dirname, '../templates/cffn-default-doc.js'), 'utf8');
54
+ return this.createViewerRequestResponseFunction(scope, 'DefaultDocFunction', {
55
+ ...props,
56
+ credentials: '',
57
+ code
58
+ });
59
+ }
60
+ static createBasicAuthDefaultDoc(scope, props) {
61
+ const code = readFileSync(resolve(__dirname, '../templates/cffn-default-doc-basic-auth.js'), 'utf8');
62
+ return this.createViewerRequestResponseFunction(scope, 'BasicAuthDefaultDocFunction', {
63
+ ...props,
64
+ code
65
+ });
66
+ }
67
+ static createViewerRequestResponseFunction(scope, id, props) {
68
+ const csvPath = props.redirects?.pathsCsvFile ?? props.redirectsCsvPath;
69
+ const redirectPaths = csvPath ? parseCsvRedirects(csvPath) : (props.redirects?.paths ?? {});
70
+ const hasRedirects = Object.keys(redirectPaths).length > 0;
71
+ props.code = props.code
72
+ .replace('__DEFAULT_DOCUMENT__', props.defaultDocument ?? 'index.html')
73
+ .replace('__CREDENTIALS__', props.credentials ?? 'Og==')
74
+ .replace('__REDIRECTS__', hasRedirects ? JSON.stringify(redirectPaths) : 'null')
75
+ .replace('__TRAILING_SLASH__', props.redirects?.trailingSlash?.toString() ?? 'null')
76
+ .replace('__REDIR_DEF_DOC__', props.redirects?.redirectDefaultDocument?.toString() ?? 'false');
77
+ return new CloudFrontFunction(scope, id || 'ViewerRequestResponseFunction', {
78
+ functionName: props.functionName,
79
+ runtime: 'JS_2_0',
80
+ code: props.code
81
+ });
82
+ }
83
+ }
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmcm9udC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL2Nsb3VkZnJvbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV2QyxPQUFPLEVBQW1CLFlBQVksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoSSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHNUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFXdEMsTUFBTSxPQUFPLHNCQUF1QixTQUFRLFNBQVM7SUFDbkMsWUFBWSxDQUFlO0lBRTNDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBa0M7UUFDMUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDO1FBQzVDLFFBQVEsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3pCLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssaUJBQWlCO2dCQUNwQixVQUFVLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQztnQkFDeEMsTUFBTTtZQUNSLEtBQUssaUJBQWlCO2dCQUNwQixVQUFVLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQztnQkFDeEMsTUFBTTtRQUNWLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxH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QWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7UUFDNUYsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRTNELEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUk7YUFDcEIsT0FBTyxDQUFDLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxlQUFlLElBQUksWUFBWSxDQUFDO2FBQ3RFLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQzthQUN2RCxPQUFPLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2FBQy9FLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxNQUFNLENBQUM7YUFDbkYsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLElBQUksT0FBTyxDQUFDLENBQUM7UUFFakcsT0FBTyxJQUFJLGtCQUFrQixDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksK0JBQStCLEVBQUU7WUFDMUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJQ2VydGlmaWNhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCB7IEJlaGF2aW9yT3B0aW9ucywgRGlzdHJpYnV0aW9uLCBGdW5jdGlvbiwgRnVuY3Rpb25Db2RlLCBGdW5jdGlvblJ1bnRpbWUsIFByaWNlQ2xhc3MgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udCc7XG5pbXBvcnQgeyB0YWdSZXNvdXJjZSB9IGZyb20gJy4uL2xpYi90YWdzLmpzJztcbmltcG9ydCB7IHBhcnNlQ3N2UmVkaXJlY3RzIH0gZnJvbSAnLi4vbGliL2Nzdi1yZWRpcmVjdHMuanMnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZVByb3BzIH0gZnJvbSAnLi4vbGliL3R5cGVzLmpzJztcblxuY29uc3QgX19kaXJuYW1lID0gaW1wb3J0Lm1ldGEuZGlybmFtZTtcblxuZXhwb3J0IGludGVyZmFjZSBDbG91ZEZyb250RGlzdHJpYnV0aW9uUHJvcHMgZXh0ZW5kcyBSZXNvdXJjZVByb3BzIHtcbiAgZG9tYWluTmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZGVmYXVsdEJlaGF2aW9yOiBCZWhhdmlvck9wdGlvbnM7XG4gIGFkZGl0aW9uYWxCZWhhdmlvcnM/OiBSZWNvcmQ8c3RyaW5nLCBCZWhhdmlvck9wdGlvbnM+O1xuICBwcmljZUNsYXNzPzogJ1BSSUNFX0NMQVNTX0FMTCcgfCAnUFJJQ0VfQ0xBU1NfMTAwJyB8ICdQUklDRV9DTEFTU18yMDAnIHwgJ05PVF9QUk9EJyB8ICdQUk9EJztcbiAgY2VydGlmaWNhdGU6IElDZXJ0aWZpY2F0ZTtcbiAgd2ViQWNsSWQ/OiBzdHJpbmc7XG59XG5leHBvcnQgY2xhc3MgQ2xvdWRGcm9udERpc3RyaWJ1dGlvbiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb246IERpc3RyaWJ1dGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2xvdWRGcm9udERpc3RyaWJ1dGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGxldCBwcmljZUNsYXNzID0gUHJpY2VDbGFzcy5QUklDRV9DTEFTU19BTEw7XG4gICAgc3dpdGNoIChwcm9wcy5wcmljZUNsYXNzKSB7XG4gICAgICBjYXNlICdOT1RfUFJPRCc6XG4gICAgICBjYXNlICdQUklDRV9DTEFTU18xMDAnOlxuICAgICAgICBwcmljZUNsYXNzID0gUHJpY2VDbGFzcy5QUklDRV9DTEFTU18xMDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUFJJQ0VfQ0xBU1NfMjAwJzpcbiAgICAgICAgcHJpY2VDbGFzcyA9IFByaWNlQ2xhc3MuUFJJQ0VfQ0xBU1NfMjAwO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLmRpc3RyaWJ1dGlvbiA9IG5ldyBEaXN0cmlidXRpb24odGhpcywgYCR7aWR9fENsb3VkRnJvbnREaXN0cmlidXRpb25gLCB7XG4gICAgICBjb21tZW50OiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGRlZmF1bHRCZWhhdmlvcjogcHJvcHMuZGVmYXVsdEJlaGF2aW9yLFxuICAgICAgYWRkaXRpb25hbEJlaGF2aW9yczogcHJvcHMuYWRkaXRpb25hbEJlaGF2aW9ycyxcbiAgICAgIGRvbWFpbk5hbWVzOiBbcHJvcHMuZG9tYWluTmFtZV0sXG4gICAgICBjZXJ0aWZpY2F0ZTogcHJvcHMuY2VydGlmaWNhdGUsXG4gICAgICBwcmljZUNsYXNzLFxuICAgICAgd2ViQWNsSWQ6IHByb3BzLndlYkFjbElkXG4gICAgfSk7XG4gICAgdGFnUmVzb3VyY2UodGhpcy5kaXN0cmlidXRpb24sIHByb3BzLnRhZ3MpO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZGVzdHJveSA9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uLmFwcGx5UmVtb3ZhbFBvbGljeShwcm9wcy5kZXN0cm95ID8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZIDogUmVtb3ZhbFBvbGljeS5SRVRBSU4pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBIdHRwUmVkaXJlY3RDb2RlID0gMzAxIHwgMzAyIHwgMzAzIHwgMzA3IHwgMzA4O1xuZXhwb3J0IHR5cGUgQ2xvdWRGcm9udEZ1bmN0aW9uUmVkaXJlY3RQYXRocyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IFtzdHJpbmcsIEh0dHBSZWRpcmVjdENvZGVdPjtcblxuZXhwb3J0IGludGVyZmFjZSBDbG91ZEZyb250RnVuY3Rpb25SZWRpcmVjdHMge1xuICB0cmFpbGluZ1NsYXNoPzogYm9vbGVhbjtcbiAgZGVmYXVsdERvY3VtZW50Pzogc3RyaW5nO1xuICByZWRpcmVjdERlZmF1bHREb2N1bWVudD86IGJvb2xlYW47XG4gIHBhdGhzPzogQ2xvdWRGcm9udEZ1bmN0aW9uUmVkaXJlY3RQYXRocztcbiAgcGF0aHNDc3ZGaWxlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdlclJlcXVlc3RSZXNwb25zZUZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBSZXNvdXJjZVByb3BzIHtcbiAgZnVuY3Rpb25OYW1lPzogc3RyaW5nO1xuICBkZWZhdWx0RG9jdW1lbnQ/OiBzdHJpbmc7XG4gIHJlZGlyZWN0cz86IENsb3VkRnJvbnRGdW5jdGlvblJlZGlyZWN0cztcbiAgcmVkaXJlY3RzQ3N2UGF0aD86IHN0cmluZztcbiAgY3JlZGVudGlhbHM/OiBzdHJpbmc7XG4gIGNvZGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0RG9jRnVuY3Rpb25Qcm9wcyBleHRlbmRzIFJlc291cmNlUHJvcHMsIFBpY2s8Vmlld2VyUmVxdWVzdFJlc3BvbnNlRnVuY3Rpb25Qcm9wcywgJ2Z1bmN0aW9uTmFtZScgfCAnZGVmYXVsdERvY3VtZW50JyB8ICdyZWRpcmVjdHMnIHwgJ3JlZGlyZWN0c0NzdlBhdGgnPiB7XG4gIGZ1bmN0aW9uTmFtZT86IHN0cmluZztcbiAgZGVmYXVsdERvY3VtZW50Pzogc3RyaW5nO1xuICByZWRpcmVjdHM/OiBDbG91ZEZyb250RnVuY3Rpb25SZWRpcmVjdHM7XG4gIHJlZGlyZWN0c0NzdlBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzaWNBdXRoRGVmYXVsdERvY0Z1bmN0aW9uUHJvcHMgZXh0ZW5kcyBEZWZhdWx0RG9jRnVuY3Rpb25Qcm9wcyB7XG4gIGNyZWRlbnRpYWxzOiBzdHJpbmc7XG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBDbG91ZEZyb250RnVuY3Rpb25Qcm9wcyBleHRlbmRzIFJlc291cmNlUHJvcHMge1xuICBjb2RlOiBzdHJpbmc7XG4gIGZ1bmN0aW9uTmFtZT86IHN0cmluZztcbiAgcnVudGltZT86ICdKU18xXzAnIHwgJ0pTXzJfMCc7XG59XG5leHBvcnQgY2xhc3MgQ2xvdWRGcm9udEZ1bmN0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGZuOiBGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2xvdWRGcm9udEZ1bmN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5mbiA9IG5ldyBGdW5jdGlvbih0aGlzLCAnQ2xvdWRGcm9udEZ1bmN0aW9uJywge1xuICAgICAgZnVuY3Rpb25OYW1lOiBwcm9wcy5mdW5jdGlvbk5hbWUsXG4gICAgICBydW50aW1lOiBGdW5jdGlvblJ1bnRpbWVbcHJvcHMucnVudGltZSA/PyAnSlNfMl8wJ10sXG4gICAgICBjb2RlOiBGdW5jdGlvbkNvZGUuZnJvbUlubGluZShwcm9wcy5jb2RlKVxuICAgIH0pO1xuICAgIHRhZ1Jlc291cmNlKHRoaXMuZm4sIHByb3BzLnRhZ3MpO1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy5kZXN0cm95ID09ICdib29sZWFuJykge1xuICAgICAgdGhpcy5mbi5hcHBseVJlbW92YWxQb2xpY3kocHJvcHMuZGVzdHJveSA/IFJlbW92YWxQb2xpY3kuREVTVFJPWSA6IFJlbW92YWxQb2xpY3kuUkVUQUlOKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlRGVmYXVsdERvYyhzY29wZTogQ29uc3RydWN0LCBwcm9wczogRGVmYXVsdERvY0Z1bmN0aW9uUHJvcHMpIHtcbiAgICBjb25zdCBjb2RlID0gcmVhZEZpbGVTeW5jKHJlc29sdmUoX19kaXJuYW1lLCAnLi4vdGVtcGxhdGVzL2NmZm4tZGVmYXVsdC1kb2MuanMnKSwgJ3V0ZjgnKTtcblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVZpZXdlclJlcXVlc3RSZXNwb25zZUZ1bmN0aW9uKHNjb3BlLCAnRGVmYXVsdERvY0Z1bmN0aW9uJywge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBjcmVkZW50aWFsczogJycsXG4gICAgICBjb2RlXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlQmFzaWNBdXRoRGVmYXVsdERvYyhzY29wZTogQ29uc3RydWN0LCBwcm9wczogQmFzaWNBdXRoRGVmYXVsdERvY0Z1bmN0aW9uUHJvcHMpIHtcbiAgICBjb25zdCBjb2RlID0gcmVhZEZpbGVTeW5jKHJlc29sdmUoX19kaXJuYW1lLCAnLi4vdGVtcGxhdGVzL2NmZm4tZGVmYXVsdC1kb2MtYmFzaWMtYXV0aC5qcycpLCAndXRmOCcpO1xuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlVmlld2VyUmVxdWVzdFJlc3BvbnNlRnVuY3Rpb24oc2NvcGUsICdCYXNpY0F1dGhEZWZhdWx0RG9jRnVuY3Rpb24nLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGNvZGVcbiAgICB9KTtcblxuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVZpZXdlclJlcXVlc3RSZXNwb25zZUZ1bmN0aW9uKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcgfCBudWxsLCBwcm9wczogVmlld2VyUmVxdWVzdFJlc3BvbnNlRnVuY3Rpb25Qcm9wcykge1xuICAgIGNvbnN0IGNzdlBhdGggPSBwcm9wcy5yZWRpcmVjdHM/LnBhdGhzQ3N2RmlsZSA/PyBwcm9wcy5yZWRpcmVjdHNDc3ZQYXRoO1xuICAgIGNvbnN0IHJlZGlyZWN0UGF0aHMgPSBjc3ZQYXRoID8gcGFyc2VDc3ZSZWRpcmVjdHMoY3N2UGF0aCkgOiAocHJvcHMucmVkaXJlY3RzPy5wYXRocyA/PyB7fSk7XG4gICAgY29uc3QgaGFzUmVkaXJlY3RzID0gT2JqZWN0LmtleXMocmVkaXJlY3RQYXRocykubGVuZ3RoID4gMDtcblxuICAgIHByb3BzLmNvZGUgPSBwcm9wcy5jb2RlXG4gICAgICAucmVwbGFjZSgnX19ERUZBVUxUX0RPQ1VNRU5UX18nLCBwcm9wcy5kZWZhdWx0RG9jdW1lbnQgPz8gJ2luZGV4Lmh0bWwnKVxuICAgICAgLnJlcGxhY2UoJ19fQ1JFREVOVElBTFNfXycsIHByb3BzLmNyZWRlbnRpYWxzID8/ICdPZz09JylcbiAgICAgIC5yZXBsYWNlKCdfX1JFRElSRUNUU19fJywgaGFzUmVkaXJlY3RzID8gSlNPTi5zdHJpbmdpZnkocmVkaXJlY3RQYXRocykgOiAnbnVsbCcpXG4gICAgICAucmVwbGFjZSgnX19UUkFJTElOR19TTEFTSF9fJywgcHJvcHMucmVkaXJlY3RzPy50cmFpbGluZ1NsYXNoPy50b1N0cmluZygpID8/ICdudWxsJylcbiAgICAgIC5yZXBsYWNlKCdfX1JFRElSX0RFRl9ET0NfXycsIHByb3BzLnJlZGlyZWN0cz8ucmVkaXJlY3REZWZhdWx0RG9jdW1lbnQ/LnRvU3RyaW5nKCkgPz8gJ2ZhbHNlJyk7XG5cbiAgICByZXR1cm4gbmV3IENsb3VkRnJvbnRGdW5jdGlvbihzY29wZSwgaWQgfHwgJ1ZpZXdlclJlcXVlc3RSZXNwb25zZUZ1bmN0aW9uJywge1xuICAgICAgZnVuY3Rpb25OYW1lOiBwcm9wcy5mdW5jdGlvbk5hbWUsXG4gICAgICBydW50aW1lOiAnSlNfMl8wJyxcbiAgICAgIGNvZGU6IHByb3BzLmNvZGVcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,31 @@
1
+ import { Construct } from 'constructs';
2
+ import { BuildEnvironmentVariableType, IBuildImage, PipelineProject } from 'aws-cdk-lib/aws-codebuild';
3
+ import { ResourceProps } from "../lib/types.js";
4
+ import { SsmStringParameter as _SsmStringParameter } from '../lib/types.ts';
5
+ export type EnvironmentVariables = Record<string, {
6
+ value: any;
7
+ type?: BuildEnvironmentVariableType;
8
+ }>;
9
+ interface SsmStringParameter extends _SsmStringParameter {
10
+ encrypted?: boolean;
11
+ }
12
+ export interface EcrBuildImage {
13
+ repository: string;
14
+ tag: string;
15
+ }
16
+ export interface CodeBuildPipelineProjectProps extends ResourceProps {
17
+ projectName?: string;
18
+ buildSpec?: string | object;
19
+ buildImage?: ('STANDARD_5_0' | 'STANDARD_6_0' | 'STANDARD_7_0') | IBuildImage;
20
+ ecrBuildImage?: EcrBuildImage;
21
+ computeType?: ('SMALL' | 'MEDIUM' | 'LARGE' | 'X_LARGE' | 'X2_LARGE') | string;
22
+ environmentVariables?: EnvironmentVariables;
23
+ cloudFrontDistributionArn?: string;
24
+ s3BucketName?: string;
25
+ ssmParameters?: SsmStringParameter[];
26
+ }
27
+ export declare class CodeBuildPipelineProject extends Construct {
28
+ readonly project: PipelineProject;
29
+ constructor(scope: Construct, id: string, props: CodeBuildPipelineProjectProps);
30
+ }
31
+ export {};
@@ -0,0 +1,95 @@
1
+ import { RemovalPolicy } from "aws-cdk-lib";
2
+ import { Construct } from 'constructs';
3
+ import { BuildSpec, ComputeType, LinuxBuildImage, PipelineProject } from 'aws-cdk-lib/aws-codebuild';
4
+ import { Repository } from "aws-cdk-lib/aws-ecr";
5
+ import { PolicyStatement } from 'aws-cdk-lib/aws-iam';
6
+ import { Bucket } from 'aws-cdk-lib/aws-s3';
7
+ import { StringParameter } from 'aws-cdk-lib/aws-ssm';
8
+ import { tagResource } from "../lib/tags.js";
9
+ export class CodeBuildPipelineProject extends Construct {
10
+ project;
11
+ constructor(scope, id, props) {
12
+ super(scope, id);
13
+ if (!props.environmentVariables) {
14
+ props.environmentVariables = {};
15
+ }
16
+ if (props.cloudFrontDistributionArn && !props.environmentVariables.CLOUDFRONT_DISTRIBUTION_ID) {
17
+ props.environmentVariables.CLOUDFRONT_DISTRIBUTION_ID = {
18
+ value: props.cloudFrontDistributionArn.split('/').pop()
19
+ };
20
+ }
21
+ if (props.s3BucketName && !props.environmentVariables.S3_BUCKET_NAME) {
22
+ props.environmentVariables.S3_BUCKET_NAME = {
23
+ value: props.s3BucketName
24
+ };
25
+ }
26
+ let buildImage = undefined;
27
+ if (props.ecrBuildImage) {
28
+ const repository = props.ecrBuildImage.repository.startsWith('arn:aws') ?
29
+ Repository.fromRepositoryArn(this, 'EcrRepository', props.ecrBuildImage.repository) :
30
+ Repository.fromRepositoryName(this, 'EcrRepository', props.ecrBuildImage.repository);
31
+ buildImage = LinuxBuildImage.fromEcrRepository(repository, props.ecrBuildImage.tag);
32
+ }
33
+ else if (props.buildImage) {
34
+ if (typeof props.buildImage == 'string') {
35
+ buildImage = LinuxBuildImage[props.buildImage ?? 'STANDARD_7_0'];
36
+ }
37
+ else {
38
+ buildImage = props.buildImage;
39
+ }
40
+ }
41
+ this.project = new PipelineProject(this, 'CodeBuildPipelineProjectProps', {
42
+ projectName: props.projectName,
43
+ buildSpec: props.buildSpec ? typeof props.buildSpec == 'object' ? BuildSpec.fromObjectToYaml(props.buildSpec) : BuildSpec.fromSourceFilename(props.buildSpec ?? 'buildspec.yml') : undefined,
44
+ environment: {
45
+ buildImage: buildImage ?? LinuxBuildImage.STANDARD_7_0,
46
+ computeType: ComputeType[props.computeType ?? 'SMALL'],
47
+ environmentVariables: props.environmentVariables
48
+ }
49
+ });
50
+ tagResource(this.project, props.tags);
51
+ if (typeof props.destroy == 'boolean') {
52
+ this.project.applyRemovalPolicy(props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN);
53
+ }
54
+ // Add CloudWatch log permissions
55
+ this.project.addToRolePolicy(new PolicyStatement({
56
+ actions: [
57
+ 'logs:CreateLogGroup',
58
+ 'logs:CreateLogStream',
59
+ 'logs:PutLogEvents'
60
+ ],
61
+ resources: [this.project.projectArn]
62
+ }));
63
+ // Allow the project to create an invalidation
64
+ if (props.cloudFrontDistributionArn) {
65
+ this.project.addToRolePolicy(new PolicyStatement({
66
+ actions: ['cloudfront:CreateInvalidation'],
67
+ resources: [props.cloudFrontDistributionArn]
68
+ }));
69
+ }
70
+ // Allow the project to sync files to S3
71
+ if (props.s3BucketName) {
72
+ const s3Bucket = Bucket.fromBucketName(this, 'S3BucketByName', props.s3BucketName);
73
+ s3Bucket.grantReadWrite(this.project);
74
+ }
75
+ if (props.ssmParameters) {
76
+ for (const param of props.ssmParameters) {
77
+ let strParam;
78
+ if (param.encrypted) {
79
+ strParam = StringParameter.fromSecureStringParameterAttributes(this, param.path, {
80
+ parameterName: param.path,
81
+ version: param.version
82
+ });
83
+ }
84
+ else {
85
+ strParam = StringParameter.fromStringParameterAttributes(this, param.path, {
86
+ parameterName: param.path,
87
+ version: param.version
88
+ });
89
+ }
90
+ strParam.grantRead(this.project);
91
+ }
92
+ }
93
+ }
94
+ }
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWJ1aWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvY29kZWJ1aWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQWdDLFNBQVMsRUFBRSxXQUFXLEVBQWUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hKLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBb0IsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBeUI3QyxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsU0FBUztJQUNyQyxPQUFPLENBQWtCO0lBRXpDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0M7UUFDNUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMseUJBQXlCLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUM5RixLQUFLLENBQUMsb0JBQW9CLENBQUMsMEJBQTBCLEdBQUc7Z0JBQ3RELEtBQUssRUFBRSxLQUFLLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcs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QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlVHlwZSwgQnVpbGRTcGVjLCBDb21wdXRlVHlwZSwgSUJ1aWxkSW1hZ2UsIExpbnV4QnVpbGRJbWFnZSwgUGlwZWxpbmVQcm9qZWN0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZCc7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3JcIjtcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IElTdHJpbmdQYXJhbWV0ZXIsIFN0cmluZ1BhcmFtZXRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHsgdGFnUmVzb3VyY2UgfSBmcm9tIFwiLi4vbGliL3RhZ3MuanNcIjtcbmltcG9ydCB7IFJlc291cmNlUHJvcHMgfSBmcm9tIFwiLi4vbGliL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBTc21TdHJpbmdQYXJhbWV0ZXIgYXMgX1NzbVN0cmluZ1BhcmFtZXRlciB9IGZyb20gJy4uL2xpYi90eXBlcy50cyc7XG5cbmV4cG9ydCB0eXBlIEVudmlyb25tZW50VmFyaWFibGVzID0gUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogYW55LCB0eXBlPzogQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlVHlwZSB9PjtcblxuaW50ZXJmYWNlIFNzbVN0cmluZ1BhcmFtZXRlciBleHRlbmRzIF9Tc21TdHJpbmdQYXJhbWV0ZXIge1xuICBlbmNyeXB0ZWQ/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBFY3JCdWlsZEltYWdlIHtcbiAgcmVwb3NpdG9yeTogc3RyaW5nO1xuICB0YWc6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJ1aWxkUGlwZWxpbmVQcm9qZWN0UHJvcHMgZXh0ZW5kcyBSZXNvdXJjZVByb3BzIHtcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmc7XG4gIGJ1aWxkU3BlYz86IHN0cmluZyB8IG9iamVjdDtcbiAgYnVpbGRJbWFnZT86ICgnU1RBTkRBUkRfNV8wJyB8ICdTVEFOREFSRF82XzAnIHwgJ1NUQU5EQVJEXzdfMCcpIHwgSUJ1aWxkSW1hZ2U7XG4gIGVjckJ1aWxkSW1hZ2U/OiBFY3JCdWlsZEltYWdlLFxuICBjb21wdXRlVHlwZT86ICgnU01BTEwnIHwgJ01FRElVTScgfCAnTEFSR0UnIHwgJ1hfTEFSR0UnIHwgJ1gyX0xBUkdFJykgfCBzdHJpbmc7XG4gIGVudmlyb25tZW50VmFyaWFibGVzPzogRW52aXJvbm1lbnRWYXJpYWJsZXM7XG4gIGNsb3VkRnJvbnREaXN0cmlidXRpb25Bcm4/OiBzdHJpbmc7XG4gIHMzQnVja2V0TmFtZT86IHN0cmluZztcbiAgc3NtUGFyYW1ldGVycz86IFNzbVN0cmluZ1BhcmFtZXRlcltdO1xufVxuXG5leHBvcnQgY2xhc3MgQ29kZUJ1aWxkUGlwZWxpbmVQcm9qZWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHByb2plY3Q6IFBpcGVsaW5lUHJvamVjdDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29kZUJ1aWxkUGlwZWxpbmVQcm9qZWN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKCFwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcykge1xuICAgICAgcHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZXMgPSB7fTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmNsb3VkRnJvbnREaXN0cmlidXRpb25Bcm4gJiYgIXByb3BzLmVudmlyb25tZW50VmFyaWFibGVzLkNMT1VERlJPTlRfRElTVFJJQlVUSU9OX0lEKSB7XG4gICAgICBwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcy5DTE9VREZST05UX0RJU1RSSUJVVElPTl9JRCA9IHtcbiAgICAgICAgdmFsdWU6IHByb3BzLmNsb3VkRnJvbnREaXN0cmlidXRpb25Bcm4uc3BsaXQoJy8nKS5wb3AoKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuczNCdWNrZXROYW1lICYmICFwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcy5TM19CVUNLRVRfTkFNRSkge1xuICAgICAgcHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZXMuUzNfQlVDS0VUX05BTUUgPSB7XG4gICAgICAgIHZhbHVlOiBwcm9wcy5zM0J1Y2tldE5hbWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IGJ1aWxkSW1hZ2U6IElCdWlsZEltYWdlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5lY3JCdWlsZEltYWdlKSB7XG4gICAgICBjb25zdCByZXBvc2l0b3J5ID0gcHJvcHMuZWNyQnVpbGRJbWFnZS5yZXBvc2l0b3J5LnN0YXJ0c1dpdGgoJ2Fybjphd3MnKSA/IFxuICAgICAgICBSZXBvc2l0b3J5LmZyb21SZXBvc2l0b3J5QXJuKHRoaXMsICdFY3JSZXBvc2l0b3J5JywgcHJvcHMuZWNyQnVpbGRJbWFnZS5yZXBvc2l0b3J5KSA6XG4gICAgICAgIFJlcG9zaXRvcnkuZnJvbVJlcG9zaXRvcnlOYW1lKHRoaXMsICdFY3JSZXBvc2l0b3J5JywgcHJvcHMuZWNyQnVpbGRJbWFnZS5yZXBvc2l0b3J5KTtcbiAgICAgIGJ1aWxkSW1hZ2UgPSBMaW51eEJ1aWxkSW1hZ2UuZnJvbUVjclJlcG9zaXRvcnkocmVwb3NpdG9yeSwgcHJvcHMuZWNyQnVpbGRJbWFnZS50YWcpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuYnVpbGRJbWFnZSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5idWlsZEltYWdlID09ICdzdHJpbmcnKSB7XG4gICAgICAgIGJ1aWxkSW1hZ2UgPSBMaW51eEJ1aWxkSW1hZ2VbcHJvcHMuYnVpbGRJbWFnZSA/PyAnU1RBTkRBUkRfN18wJ11cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1aWxkSW1hZ2UgPSBwcm9wcy5idWlsZEltYWdlIGFzIElCdWlsZEltYWdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucHJvamVjdCA9IG5ldyBQaXBlbGluZVByb2plY3QodGhpcywgJ0NvZGVCdWlsZFBpcGVsaW5lUHJvamVjdFByb3BzJywge1xuICAgICAgcHJvamVjdE5hbWU6IHByb3BzLnByb2plY3ROYW1lLFxuICAgICAgYnVpbGRTcGVjOiBwcm9wcy5idWlsZFNwZWMgPyB0eXBlb2YgcHJvcHMuYnVpbGRTcGVjID09ICdvYmplY3QnID8gQnVpbGRTcGVjLmZyb21PYmplY3RUb1lhbWwocHJvcHMuYnVpbGRTcGVjKSA6IEJ1aWxkU3BlYy5mcm9tU291cmNlRmlsZW5hbWUocHJvcHMuYnVpbGRTcGVjID8/ICdidWlsZHNwZWMueW1sJykgOiB1bmRlZmluZWQsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBidWlsZEltYWdlOiBidWlsZEltYWdlID8/IExpbnV4QnVpbGRJbWFnZS5TVEFOREFSRF83XzAsXG4gICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZVtwcm9wcy5jb21wdXRlVHlwZSBhcyAoa2V5b2YgdHlwZW9mIENvbXB1dGVUeXBlIHwgdW5kZWZpbmVkKSA/PyAnU01BTEwnXSxcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHByb3BzLmVudmlyb25tZW50VmFyaWFibGVzXG4gICAgICB9XG4gICAgfSk7XG4gICAgdGFnUmVzb3VyY2UodGhpcy5wcm9qZWN0LCBwcm9wcy50YWdzKTtcbiAgICBpZiAodHlwZW9mIHByb3BzLmRlc3Ryb3kgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLnByb2plY3QuYXBwbHlSZW1vdmFsUG9saWN5KHByb3BzLmRlc3Ryb3kgPyBSZW1vdmFsUG9saWN5LkRFU1RST1kgOiBSZW1vdmFsUG9saWN5LlJFVEFJTik7XG4gICAgfVxuXG4gICAgLy8gQWRkIENsb3VkV2F0Y2ggbG9nIHBlcm1pc3Npb25zXG4gICAgdGhpcy5wcm9qZWN0LmFkZFRvUm9sZVBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ2xvZ3M6Q3JlYXRlTG9nR3JvdXAnLFxuICAgICAgICAnbG9nczpDcmVhdGVMb2dTdHJlYW0nLFxuICAgICAgICAnbG9nczpQdXRMb2dFdmVudHMnXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbdGhpcy5wcm9qZWN0LnByb2plY3RBcm5dXG4gICAgfSkpO1xuXG4gICAgLy8gQWxsb3cgdGhlIHByb2plY3QgdG8gY3JlYXRlIGFuIGludmFsaWRhdGlvblxuICAgIGlmIChwcm9wcy5jbG91ZEZyb250RGlzdHJpYnV0aW9uQXJuKSB7XG4gICAgICB0aGlzLnByb2plY3QuYWRkVG9Sb2xlUG9saWN5KG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ2Nsb3VkZnJvbnQ6Q3JlYXRlSW52YWxpZGF0aW9uJ10sXG4gICAgICAgIHJlc291cmNlczogW3Byb3BzLmNsb3VkRnJvbnREaXN0cmlidXRpb25Bcm5dXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgLy8gQWxsb3cgdGhlIHByb2plY3QgdG8gc3luYyBmaWxlcyB0byBTM1xuICAgIGlmIChwcm9wcy5zM0J1Y2tldE5hbWUpIHtcbiAgICAgIGNvbnN0IHMzQnVja2V0ID0gQnVja2V0LmZyb21CdWNrZXROYW1lKHRoaXMsICdTM0J1Y2tldEJ5TmFtZScsIHByb3BzLnMzQnVja2V0TmFtZSk7XG4gICAgICBzM0J1Y2tldC5ncmFudFJlYWRXcml0ZSh0aGlzLnByb2plY3QpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5zc21QYXJhbWV0ZXJzKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHByb3BzLnNzbVBhcmFtZXRlcnMpIHtcbiAgICAgICAgbGV0IHN0clBhcmFtOiBJU3RyaW5nUGFyYW1ldGVyO1xuICAgICAgICBpZiAocGFyYW0uZW5jcnlwdGVkKSB7XG4gICAgICAgICAgc3RyUGFyYW0gPSBTdHJpbmdQYXJhbWV0ZXIuZnJvbVNlY3VyZVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXModGhpcywgcGFyYW0ucGF0aCwge1xuICAgICAgICAgICAgcGFyYW1ldGVyTmFtZTogcGFyYW0ucGF0aCxcbiAgICAgICAgICAgIHZlcnNpb246IHBhcmFtLnZlcnNpb25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHJQYXJhbSA9IFN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyh0aGlzLCBwYXJhbS5wYXRoLCB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiBwYXJhbS5wYXRoLFxuICAgICAgICAgICAgdmVyc2lvbjogcGFyYW0udmVyc2lvblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHN0clBhcmFtLmdyYW50UmVhZCh0aGlzLnByb2plY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSJdfQ==
@@ -0,0 +1,30 @@
1
+ import { Construct } from 'constructs';
2
+ import { IProject } from "aws-cdk-lib/aws-codebuild";
3
+ import { Artifact, Pipeline } from "aws-cdk-lib/aws-codepipeline";
4
+ import { Bucket } from 'aws-cdk-lib/aws-s3';
5
+ import type { EnvironmentVariables } from './codebuild.js';
6
+ import { ResourceProps, SsmStringParameter } from "../lib/types.js";
7
+ export interface AddSourceStageParams {
8
+ stageName?: string;
9
+ codestarConnection: string | SsmStringParameter;
10
+ repoOwner: string;
11
+ repo: string;
12
+ branch: string;
13
+ artifactFormat: 'default' | 'fullClone';
14
+ }
15
+ export interface AddBuildStageParams {
16
+ stageName?: string;
17
+ codeBuildProject: IProject;
18
+ sourceArtifact: Artifact;
19
+ environmentVariables?: EnvironmentVariables;
20
+ }
21
+ export interface CodePipelineProjectProps extends ResourceProps {
22
+ pipelineName?: string;
23
+ }
24
+ export declare class CodePipelineProject extends Construct {
25
+ readonly s3Bucket: Bucket;
26
+ readonly pipeline: Pipeline;
27
+ constructor(scope: Construct, id: string, props: CodePipelineProjectProps);
28
+ addSourceStage(params: AddSourceStageParams): Artifact;
29
+ addBuildStage(params: AddBuildStageParams): void;
30
+ }
@@ -0,0 +1,63 @@
1
+ import { RemovalPolicy, PhysicalName } from "aws-cdk-lib";
2
+ import { Construct } from 'constructs';
3
+ import { Artifact, Pipeline } from "aws-cdk-lib/aws-codepipeline";
4
+ import { CodeBuildAction, CodeStarConnectionsSourceAction } from "aws-cdk-lib/aws-codepipeline-actions";
5
+ import { Bucket } from 'aws-cdk-lib/aws-s3';
6
+ import { StringParameter } from 'aws-cdk-lib/aws-ssm';
7
+ import { tagResource } from "../lib/tags.js";
8
+ export class CodePipelineProject extends Construct {
9
+ s3Bucket;
10
+ pipeline;
11
+ constructor(scope, id, props) {
12
+ super(scope, id);
13
+ this.s3Bucket = new Bucket(this, 'CodePipelineArtifactBucket', {
14
+ bucketName: PhysicalName.GENERATE_IF_NEEDED,
15
+ removalPolicy: props.destroy !== undefined ? props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN : undefined,
16
+ autoDeleteObjects: props.destroy === true ? true : undefined
17
+ });
18
+ tagResource(this.s3Bucket, props.tags);
19
+ this.pipeline = new Pipeline(this, 'CodePipelineProject', {
20
+ pipelineName: props.pipelineName,
21
+ artifactBucket: this.s3Bucket
22
+ });
23
+ tagResource(this.pipeline, props.tags);
24
+ if (typeof props.destroy == 'boolean') {
25
+ this.pipeline.applyRemovalPolicy(props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN);
26
+ }
27
+ }
28
+ addSourceStage(params) {
29
+ const artifact = new Artifact();
30
+ const connectionArn = typeof params.codestarConnection == 'string' ?
31
+ params.codestarConnection :
32
+ StringParameter.valueForStringParameter(this, params.codestarConnection.path, params.codestarConnection.version);
33
+ this.pipeline.addStage({
34
+ stageName: params.stageName ?? 'Source',
35
+ actions: [
36
+ new CodeStarConnectionsSourceAction({
37
+ actionName: params.stageName ?? 'Source',
38
+ output: artifact,
39
+ connectionArn,
40
+ owner: params.repoOwner,
41
+ repo: params.repo,
42
+ branch: params.branch,
43
+ codeBuildCloneOutput: params.artifactFormat === 'fullClone'
44
+ })
45
+ ]
46
+ });
47
+ return artifact;
48
+ }
49
+ addBuildStage(params) {
50
+ this.pipeline.addStage({
51
+ stageName: params.stageName ?? 'Build',
52
+ actions: [
53
+ new CodeBuildAction({
54
+ actionName: params.stageName ?? 'Build',
55
+ project: params.codeBuildProject,
56
+ input: params.sourceArtifact,
57
+ environmentVariables: params.environmentVariables
58
+ })
59
+ ]
60
+ });
61
+ }
62
+ }
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvY29kZXBpcGVsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFPLE1BQU0sYUFBYSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLCtCQUErQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUd0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFxQjdDLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxTQUFTO0lBQ2hDLFFBQVEsQ0FBUztJQUNqQixRQUFRLENBQVc7SUFFbkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUErQjtRQUN2RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLDRCQUE0QixFQUFFO1lBQzdELFVBQVUsRUFBRSxZQUFZLENBQUMsa0JBQWtCO1lBQzNDLGFBQWEsRUFBRSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNySCxpQkFBaUIsRUFBRSxLQUFLLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQzdELENBQUMsQ0FBQztRQUNILFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUN4RCxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDaEMsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQzlCLENBQUMsQ0FBQztRQUVILFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLE9BQU8sS0FBSyxDQUFDLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRyxDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUE0QjtRQUN6QyxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBRWhDLE1BQU0sYUFBYSxHQUFXLE9BQU8sTUFBTSxDQUFDLGtCQUFrQixJQUFJLFFBQVEsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzNCLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUcsTUFBTSxDQUFDLGtCQUF5QyxDQUFDLElBQUksRUFBRyxNQUFNLENBQUMsa0JBQXlDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFcEssSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDckIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksUUFBUTtZQUN2QyxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSwrQkFBK0IsQ0FBQztvQkFDbEMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksUUFBUTtvQkFDeEMsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLGFBQWE7b0JBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTO29CQUN2QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7b0JBQ2pCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtvQkFDckIsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLGNBQWMsS0FBSyxXQUFXO2lCQUM1RCxDQUFDO2FBQ0g7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQTJCO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ3JCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxJQUFJLE9BQU87WUFDdEMsT0FBTyxFQUFFO2dCQUNQLElBQUksZUFBZSxDQUFDO29CQUNsQixVQUFVLEVBQUUsTUFBTSxDQUFDLFNBQVMsSUFBSSxPQUFPO29CQUN2QyxPQUFPLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtvQkFDaEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxjQUFjO29CQUM1QixvQkFBb0IsRUFBRSxNQUFNLENBQUMsb0JBQW9CO2lCQUNsRCxDQUFDO2FBQ0g7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdmFsUG9saWN5LCBQaHlzaWNhbE5hbWUsIEF3cyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJUHJvamVjdCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkXCI7XG5pbXBvcnQgeyBBcnRpZmFjdCwgUGlwZWxpbmUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZVwiO1xuaW1wb3J0IHsgQ29kZUJ1aWxkQWN0aW9uLCBDb2RlU3RhckNvbm5lY3Rpb25zU291cmNlQWN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUtYWN0aW9uc1wiO1xuaW1wb3J0IHsgQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IFN0cmluZ1BhcmFtZXRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuXG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50VmFyaWFibGVzIH0gZnJvbSAnLi9jb2RlYnVpbGQuanMnO1xuaW1wb3J0IHsgdGFnUmVzb3VyY2UgfSBmcm9tIFwiLi4vbGliL3RhZ3MuanNcIjtcbmltcG9ydCB7IFJlc291cmNlUHJvcHMsIFNzbVN0cmluZ1BhcmFtZXRlciB9IGZyb20gXCIuLi9saWIvdHlwZXMuanNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBZGRTb3VyY2VTdGFnZVBhcmFtcyB7XG4gIHN0YWdlTmFtZT86IHN0cmluZztcbiAgY29kZXN0YXJDb25uZWN0aW9uOiBzdHJpbmcgfCBTc21TdHJpbmdQYXJhbWV0ZXI7XG4gIHJlcG9Pd25lcjogc3RyaW5nO1xuICByZXBvOiBzdHJpbmc7XG4gIGJyYW5jaDogc3RyaW5nO1xuICBhcnRpZmFjdEZvcm1hdDogJ2RlZmF1bHQnIHwgJ2Z1bGxDbG9uZSdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQnVpbGRTdGFnZVBhcmFtcyB7XG4gIHN0YWdlTmFtZT86IHN0cmluZztcbiAgY29kZUJ1aWxkUHJvamVjdDogSVByb2plY3Q7XG4gIHNvdXJjZUFydGlmYWN0OiBBcnRpZmFjdDtcbiAgZW52aXJvbm1lbnRWYXJpYWJsZXM/OiBFbnZpcm9ubWVudFZhcmlhYmxlcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2RlUGlwZWxpbmVQcm9qZWN0UHJvcHMgZXh0ZW5kcyBSZXNvdXJjZVByb3BzIHtcbiAgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xufVxuZXhwb3J0IGNsYXNzIENvZGVQaXBlbGluZVByb2plY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgczNCdWNrZXQ6IEJ1Y2tldDtcbiAgcHVibGljIHJlYWRvbmx5IHBpcGVsaW5lOiBQaXBlbGluZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29kZVBpcGVsaW5lUHJvamVjdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuczNCdWNrZXQgPSBuZXcgQnVja2V0KHRoaXMsICdDb2RlUGlwZWxpbmVBcnRpZmFjdEJ1Y2tldCcsIHtcbiAgICAgIGJ1Y2tldE5hbWU6IFBoeXNpY2FsTmFtZS5HRU5FUkFURV9JRl9ORUVERUQsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5kZXN0cm95ICE9PSB1bmRlZmluZWQgPyBwcm9wcy5kZXN0cm95ID8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZIDogUmVtb3ZhbFBvbGljeS5SRVRBSU4gOiB1bmRlZmluZWQsXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogcHJvcHMuZGVzdHJveSA9PT0gdHJ1ZSA/IHRydWUgOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgICB0YWdSZXNvdXJjZSh0aGlzLnMzQnVja2V0LCBwcm9wcy50YWdzKTtcblxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcywgJ0NvZGVQaXBlbGluZVByb2plY3QnLCB7XG4gICAgICBwaXBlbGluZU5hbWU6IHByb3BzLnBpcGVsaW5lTmFtZSxcbiAgICAgIGFydGlmYWN0QnVja2V0OiB0aGlzLnMzQnVja2V0XG4gICAgfSk7XG5cbiAgICB0YWdSZXNvdXJjZSh0aGlzLnBpcGVsaW5lLCBwcm9wcy50YWdzKTtcbiAgICBpZiAodHlwZW9mIHByb3BzLmRlc3Ryb3kgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLnBpcGVsaW5lLmFwcGx5UmVtb3ZhbFBvbGljeShwcm9wcy5kZXN0cm95ID8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZIDogUmVtb3ZhbFBvbGljeS5SRVRBSU4pO1xuICAgIH1cbiAgfVxuXG4gIGFkZFNvdXJjZVN0YWdlKHBhcmFtczogQWRkU291cmNlU3RhZ2VQYXJhbXMpOiBBcnRpZmFjdCB7XG4gICAgY29uc3QgYXJ0aWZhY3QgPSBuZXcgQXJ0aWZhY3QoKTtcblxuICAgIGNvbnN0IGNvbm5lY3Rpb25Bcm46IHN0cmluZyA9IHR5cGVvZiBwYXJhbXMuY29kZXN0YXJDb25uZWN0aW9uID09ICdzdHJpbmcnID9cbiAgICAgICBwYXJhbXMuY29kZXN0YXJDb25uZWN0aW9uIDpcbiAgICAgICBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIodGhpcywgKHBhcmFtcy5jb2Rlc3RhckNvbm5lY3Rpb24gYXMgU3NtU3RyaW5nUGFyYW1ldGVyKS5wYXRoLCAocGFyYW1zLmNvZGVzdGFyQ29ubmVjdGlvbiBhcyBTc21TdHJpbmdQYXJhbWV0ZXIpLnZlcnNpb24pO1xuXG4gICAgdGhpcy5waXBlbGluZS5hZGRTdGFnZSh7XG4gICAgICBzdGFnZU5hbWU6IHBhcmFtcy5zdGFnZU5hbWUgPz8gJ1NvdXJjZScsXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIG5ldyBDb2RlU3RhckNvbm5lY3Rpb25zU291cmNlQWN0aW9uKHtcbiAgICAgICAgICBhY3Rpb25OYW1lOiBwYXJhbXMuc3RhZ2VOYW1lID8/ICdTb3VyY2UnLFxuICAgICAgICAgIG91dHB1dDogYXJ0aWZhY3QsXG4gICAgICAgICAgY29ubmVjdGlvbkFybixcbiAgICAgICAgICBvd25lcjogcGFyYW1zLnJlcG9Pd25lcixcbiAgICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgICBicmFuY2g6IHBhcmFtcy5icmFuY2gsXG4gICAgICAgICAgY29kZUJ1aWxkQ2xvbmVPdXRwdXQ6IHBhcmFtcy5hcnRpZmFjdEZvcm1hdCA9PT0gJ2Z1bGxDbG9uZSdcbiAgICAgICAgfSlcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gYXJ0aWZhY3Q7XG4gIH1cblxuICBhZGRCdWlsZFN0YWdlKHBhcmFtczogQWRkQnVpbGRTdGFnZVBhcmFtcykge1xuICAgIHRoaXMucGlwZWxpbmUuYWRkU3RhZ2Uoe1xuICAgICAgc3RhZ2VOYW1lOiBwYXJhbXMuc3RhZ2VOYW1lID8/ICdCdWlsZCcsXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIG5ldyBDb2RlQnVpbGRBY3Rpb24oe1xuICAgICAgICAgIGFjdGlvbk5hbWU6IHBhcmFtcy5zdGFnZU5hbWUgPz8gJ0J1aWxkJyxcbiAgICAgICAgICBwcm9qZWN0OiBwYXJhbXMuY29kZUJ1aWxkUHJvamVjdCxcbiAgICAgICAgICBpbnB1dDogcGFyYW1zLnNvdXJjZUFydGlmYWN0LFxuICAgICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiBwYXJhbXMuZW52aXJvbm1lbnRWYXJpYWJsZXNcbiAgICAgICAgfSlcbiAgICAgIF1cbiAgICB9KTtcbiAgfVxufSJdfQ==
@@ -0,0 +1,14 @@
1
+ import { IDistribution } from "aws-cdk-lib/aws-cloudfront";
2
+ import { ARecord, AaaaRecord, IHostedZone } from "aws-cdk-lib/aws-route53";
3
+ import { Construct } from "constructs";
4
+ export interface CloudFrontAliasProps {
5
+ hostedZone: IHostedZone;
6
+ domainName: string;
7
+ distribution: IDistribution;
8
+ }
9
+ export declare class CloudFrontAlias extends Construct {
10
+ readonly aRecord: ARecord;
11
+ readonly aaaaRecord: AaaaRecord;
12
+ constructor(scope: Construct, id: string, props: CloudFrontAliasProps);
13
+ }
14
+ export declare function getHostedZone(scope: Construct, id: string, domainName: string): IHostedZone;
@@ -0,0 +1,24 @@
1
+ import { ARecord, AaaaRecord, HostedZone, RecordTarget } from "aws-cdk-lib/aws-route53";
2
+ import { CloudFrontTarget } from "aws-cdk-lib/aws-route53-targets";
3
+ import { Construct } from "constructs";
4
+ export class CloudFrontAlias extends Construct {
5
+ aRecord;
6
+ aaaaRecord;
7
+ constructor(scope, id, props) {
8
+ super(scope, id);
9
+ this.aRecord = new ARecord(this, `ARecord-${props.domainName}`, {
10
+ zone: props.hostedZone,
11
+ target: RecordTarget.fromAlias(new CloudFrontTarget(props.distribution)),
12
+ recordName: props.domainName
13
+ });
14
+ this.aaaaRecord = new AaaaRecord(this, `AaaaRecord-${props.domainName}`, {
15
+ zone: props.hostedZone,
16
+ target: RecordTarget.fromAlias(new CloudFrontTarget(props.distribution)),
17
+ recordName: props.domainName
18
+ });
19
+ }
20
+ }
21
+ export function getHostedZone(scope, id, domainName) {
22
+ return HostedZone.fromLookup(scope, `getHostedZone-${domainName}`, { domainName });
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGU1My5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL3JvdXRlNTMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFlLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFPdkMsTUFBTSxPQUFPLGVBQWdCLFNBQVEsU0FBUztJQUM1QixPQUFPLENBQVU7SUFDakIsVUFBVSxDQUFhO0lBRXZDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMkI7UUFDbkUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUM5RCxJQUFJLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDdEIsTUFBTSxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDeEUsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1NBQzdCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLGNBQWMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3ZFLElBQUksRUFBRSxLQUFLLENBQUMsVUFBVTtZQUN0QixNQUFNLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN4RSxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxVQUFrQjtJQUM1RSxPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLGlCQUFpQixVQUFVLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDckYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElEaXN0cmlidXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7IEFSZWNvcmQsIEFhYWFSZWNvcmQsIEhvc3RlZFpvbmUsIElIb3N0ZWRab25lLCBSZWNvcmRUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCB7IENsb3VkRnJvbnRUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDbG91ZEZyb250QWxpYXNQcm9wcyB7XG4gIGhvc3RlZFpvbmU6IElIb3N0ZWRab25lO1xuICBkb21haW5OYW1lOiBzdHJpbmc7XG4gIGRpc3RyaWJ1dGlvbjogSURpc3RyaWJ1dGlvbjsgXG59XG5leHBvcnQgY2xhc3MgQ2xvdWRGcm9udEFsaWFzIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGFSZWNvcmQ6IEFSZWNvcmQ7XG4gIHB1YmxpYyByZWFkb25seSBhYWFhUmVjb3JkOiBBYWFhUmVjb3JkO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDbG91ZEZyb250QWxpYXNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmFSZWNvcmQgPSBuZXcgQVJlY29yZCh0aGlzLCBgQVJlY29yZC0ke3Byb3BzLmRvbWFpbk5hbWV9YCwge1xuICAgICAgem9uZTogcHJvcHMuaG9zdGVkWm9uZSxcbiAgICAgIHRhcmdldDogUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhuZXcgQ2xvdWRGcm9udFRhcmdldChwcm9wcy5kaXN0cmlidXRpb24pKSxcbiAgICAgIHJlY29yZE5hbWU6IHByb3BzLmRvbWFpbk5hbWVcbiAgICB9KTtcblxuICAgIHRoaXMuYWFhYVJlY29yZCA9IG5ldyBBYWFhUmVjb3JkKHRoaXMsIGBBYWFhUmVjb3JkLSR7cHJvcHMuZG9tYWluTmFtZX1gLCB7XG4gICAgICB6b25lOiBwcm9wcy5ob3N0ZWRab25lLFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbUFsaWFzKG5ldyBDbG91ZEZyb250VGFyZ2V0KHByb3BzLmRpc3RyaWJ1dGlvbikpLFxuICAgICAgcmVjb3JkTmFtZTogcHJvcHMuZG9tYWluTmFtZVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIb3N0ZWRab25lKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGRvbWFpbk5hbWU6IHN0cmluZykge1xuICByZXR1cm4gSG9zdGVkWm9uZS5mcm9tTG9va3VwKHNjb3BlLCBgZ2V0SG9zdGVkWm9uZS0ke2RvbWFpbk5hbWV9YCwgeyBkb21haW5OYW1lIH0pO1xufSJdfQ==
@@ -0,0 +1,11 @@
1
+ import { Construct } from 'constructs';
2
+ import { Bucket } from 'aws-cdk-lib/aws-s3';
3
+ import { ResourceProps } from "../lib/types.js";
4
+ export interface S3BucketProps extends ResourceProps {
5
+ /** The name of the S3 bucket */
6
+ bucketName?: string;
7
+ }
8
+ export declare class S3Bucket extends Construct {
9
+ readonly bucket: Bucket;
10
+ constructor(scope: Construct, id: string, props: S3BucketProps);
11
+ }
@@ -0,0 +1,17 @@
1
+ import { RemovalPolicy } from "aws-cdk-lib";
2
+ import { Construct } from 'constructs';
3
+ import { Bucket } from 'aws-cdk-lib/aws-s3';
4
+ import { tagResource } from '../lib/tags.js';
5
+ export class S3Bucket extends Construct {
6
+ bucket;
7
+ constructor(scope, id, props) {
8
+ super(scope, id);
9
+ this.bucket = new Bucket(this, 'S3Bucket', {
10
+ bucketName: props.bucketName,
11
+ removalPolicy: props.destroy !== undefined ? props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN : undefined,
12
+ autoDeleteObjects: props.destroy === true ? true : undefined
13
+ });
14
+ tagResource(this.bucket, props.tags);
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9zMy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVE3QyxNQUFNLE9BQU8sUUFBUyxTQUFRLFNBQVM7SUFDckIsTUFBTSxDQUFTO0lBRS9CLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDekMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLGFBQWEsRUFBRSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNySCxpQkFBaUIsRUFBRSxLQUFLLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQzdELENBQUMsQ0FBQztRQUNILFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyB0YWdSZXNvdXJjZSB9IGZyb20gJy4uL2xpYi90YWdzLmpzJztcbmltcG9ydCB7IFJlc291cmNlUHJvcHMgfSBmcm9tIFwiLi4vbGliL3R5cGVzLmpzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUzNCdWNrZXRQcm9wcyBleHRlbmRzIFJlc291cmNlUHJvcHMge1xuICAvKiogVGhlIG5hbWUgb2YgdGhlIFMzIGJ1Y2tldCAqL1xuICBidWNrZXROYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgUzNCdWNrZXQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgYnVja2V0OiBCdWNrZXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFMzQnVja2V0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5idWNrZXQgPSBuZXcgQnVja2V0KHRoaXMsICdTM0J1Y2tldCcsIHtcbiAgICAgIGJ1Y2tldE5hbWU6IHByb3BzLmJ1Y2tldE5hbWUsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5kZXN0cm95ICE9PSB1bmRlZmluZWQgPyBwcm9wcy5kZXN0cm95ID8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZIDogUmVtb3ZhbFBvbGljeS5SRVRBSU4gOiB1bmRlZmluZWQsXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogcHJvcHMuZGVzdHJveSA9PT0gdHJ1ZSA/IHRydWUgOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgICB0YWdSZXNvdXJjZSh0aGlzLmJ1Y2tldCwgcHJvcHMudGFncyk7XG4gIH1cbn0iXX0=
@@ -0,0 +1,9 @@
1
+ import { Construct } from 'constructs';
2
+ import { StringParameter } from 'aws-cdk-lib/aws-ssm';
3
+ interface CreateStringParameterProps {
4
+ parameterName: string;
5
+ stringValue: string;
6
+ overwrite?: boolean;
7
+ }
8
+ export declare function createStringParameter(scope: Construct, id: string, { parameterName, stringValue, overwrite }: CreateStringParameterProps): StringParameter | undefined;
9
+ export {};
@@ -0,0 +1,17 @@
1
+ import { StringParameter } from 'aws-cdk-lib/aws-ssm';
2
+ export function createStringParameter(scope, id, { parameterName, stringValue, overwrite = false }) {
3
+ let param = undefined;
4
+ let flag = overwrite;
5
+ if (!flag) {
6
+ const existingValue = StringParameter.valueFromLookup(scope, parameterName, 'a8a79532-4163-46b9-a907-429dad04e93b');
7
+ flag = existingValue === 'a8a79532-4163-46b9-a907-429dad04e93b';
8
+ }
9
+ if (flag) {
10
+ param = new StringParameter(scope, id, {
11
+ parameterName,
12
+ stringValue
13
+ });
14
+ }
15
+ return param;
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvc3NtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQU90RCxNQUFNLFVBQVUscUJBQXFCLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFNBQVMsR0FBRyxLQUFLLEVBQThCO0lBQy9JLElBQUksS0FBSyxHQUFnQyxTQUFTLENBQUM7SUFDbkQsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDO0lBQ3JCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ3BILElBQUksR0FBRyxhQUFhLEtBQUssc0NBQXNDLENBQUM7SUFDbEUsQ0FBQztJQUNELElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNyQyxhQUFhO1lBQ2IsV0FBVztTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5cbmludGVyZmFjZSBDcmVhdGVTdHJpbmdQYXJhbWV0ZXJQcm9wcyB7XG4gIHBhcmFtZXRlck5hbWU6IHN0cmluZztcbiAgc3RyaW5nVmFsdWU6IHN0cmluZztcbiAgb3ZlcndyaXRlPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdHJpbmdQYXJhbWV0ZXIoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgeyBwYXJhbWV0ZXJOYW1lLCBzdHJpbmdWYWx1ZSwgb3ZlcndyaXRlID0gZmFsc2UgfTogQ3JlYXRlU3RyaW5nUGFyYW1ldGVyUHJvcHMpOiBTdHJpbmdQYXJhbWV0ZXIgfCB1bmRlZmluZWQge1xuICBsZXQgcGFyYW06IFN0cmluZ1BhcmFtZXRlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgbGV0IGZsYWcgPSBvdmVyd3JpdGU7XG4gIGlmICghZmxhZykge1xuICAgIGNvbnN0IGV4aXN0aW5nVmFsdWUgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKHNjb3BlLCBwYXJhbWV0ZXJOYW1lLCAnYThhNzk1MzItNDE2My00NmI5LWE5MDctNDI5ZGFkMDRlOTNiJyk7XG4gICAgZmxhZyA9IGV4aXN0aW5nVmFsdWUgPT09ICdhOGE3OTUzMi00MTYzLTQ2YjktYTkwNy00MjlkYWQwNGU5M2InO1xuICB9XG4gIGlmIChmbGFnKSB7XG4gICAgcGFyYW0gPSBuZXcgU3RyaW5nUGFyYW1ldGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGFyYW1ldGVyTmFtZSxcbiAgICAgIHN0cmluZ1ZhbHVlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHBhcmFtO1xufSJdfQ==
@@ -0,0 +1,21 @@
1
+ import { Construct } from 'constructs';
2
+ import { CfnWebACL } from 'aws-cdk-lib/aws-wafv2';
3
+ import type { ResourceProps } from '../lib/types.js';
4
+ export type WebAclManagedRule = 'AWSManagedRulesAmazonIpReputationList' | 'AWSManagedRulesAnonymousIpList' | 'AWSManagedRulesAntiDDoSRuleSet' | 'AWSManagedRulesBotControlRuleSet' | 'AWSManagedRulesCommonRuleSet' | 'AWSManagedRulesKnownBadInputsRuleSet' | 'AWSManagedRulesSQLiRuleSet';
5
+ export interface CloudFrontWebAclProps extends ResourceProps {
6
+ name: string;
7
+ managedRules?: (WebAclManagedRule & string)[];
8
+ }
9
+ export declare class CloudFrontWebAcl extends Construct {
10
+ readonly acl: CfnWebACL;
11
+ constructor(scope: Construct, id: string, props: CloudFrontWebAclProps);
12
+ }
13
+ export interface ApiGatewayWebAclProps extends ResourceProps {
14
+ name: string;
15
+ aclScope?: 'CLOUDFRONT' | 'REGIONAL';
16
+ managedRules?: (WebAclManagedRule & string)[];
17
+ }
18
+ export declare class ApiGatewayWebAcl extends Construct {
19
+ readonly acl: CfnWebACL;
20
+ constructor(scope: Construct, id: string, props: ApiGatewayWebAclProps);
21
+ }