@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
@@ -0,0 +1,89 @@
1
+ import { RemovalPolicy } from "aws-cdk-lib";
2
+ import { Construct } from 'constructs';
3
+ import { CfnWebACL } from 'aws-cdk-lib/aws-wafv2';
4
+ import { tagResource } from '../lib/tags.js';
5
+ import { cleanResourceName } from '../lib/utils.js';
6
+ export class CloudFrontWebAcl extends Construct {
7
+ acl;
8
+ constructor(scope, id, props) {
9
+ super(scope, id);
10
+ props.name = cleanResourceName(props.name);
11
+ if (!props.managedRules) {
12
+ props.managedRules = [
13
+ 'AWSManagedRulesAmazonIpReputationList',
14
+ 'AWSManagedRulesAnonymousIpList',
15
+ 'AWSManagedRulesCommonRuleSet',
16
+ 'AWSManagedRulesKnownBadInputsRuleSet',
17
+ 'AWSManagedRulesBotControlRuleSet'
18
+ ];
19
+ }
20
+ this.acl = new CfnWebACL(this, 'CloudFrontWebAcl', {
21
+ scope: 'CLOUDFRONT',
22
+ name: props.name,
23
+ defaultAction: { allow: {} },
24
+ visibilityConfig: {
25
+ cloudWatchMetricsEnabled: true,
26
+ sampledRequestsEnabled: true,
27
+ metricName: `${props.name}-metrics`
28
+ },
29
+ rules: transformManagedRules(props.managedRules)
30
+ });
31
+ tagResource(this.acl, props.tags);
32
+ if (typeof props.destroy == 'boolean') {
33
+ this.acl.applyRemovalPolicy(props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN);
34
+ }
35
+ }
36
+ }
37
+ export class ApiGatewayWebAcl extends Construct {
38
+ acl;
39
+ constructor(scope, id, props) {
40
+ super(scope, id);
41
+ props.name = cleanResourceName(props.name);
42
+ if (!props.managedRules) {
43
+ props.managedRules = [
44
+ 'AWSManagedRulesAmazonIpReputationList',
45
+ 'AWSManagedRulesAnonymousIpList',
46
+ 'AWSManagedRulesCommonRuleSet',
47
+ 'AWSManagedRulesSQLiRuleSet',
48
+ 'AWSManagedRulesKnownBadInputsRuleSet',
49
+ 'AWSManagedRulesBotControlRuleSet'
50
+ ];
51
+ }
52
+ this.acl = new CfnWebACL(this, 'ApiGatewayWebAcl', {
53
+ scope: props.aclScope ?? 'REGIONAL',
54
+ name: props.name,
55
+ defaultAction: { allow: {} },
56
+ visibilityConfig: {
57
+ cloudWatchMetricsEnabled: true,
58
+ sampledRequestsEnabled: true,
59
+ metricName: `${props.name}-metrics`
60
+ },
61
+ rules: transformManagedRules(props.managedRules)
62
+ });
63
+ tagResource(this.acl, props.tags);
64
+ if (typeof props.destroy == 'boolean') {
65
+ this.acl.applyRemovalPolicy(props.destroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN);
66
+ }
67
+ }
68
+ }
69
+ function transformManagedRules(rules) {
70
+ return rules.map((ruleName, i) => {
71
+ return {
72
+ name: `AWS-${ruleName}`,
73
+ priority: i,
74
+ statement: {
75
+ managedRuleGroupStatement: {
76
+ name: ruleName,
77
+ vendorName: 'AWS'
78
+ }
79
+ },
80
+ overrideAction: { none: {} },
81
+ visibilityConfig: {
82
+ cloudWatchMetricsEnabled: true,
83
+ sampledRequestsEnabled: true,
84
+ metricName: `AWS-${ruleName}`
85
+ }
86
+ };
87
+ });
88
+ }
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvd2FmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBZ0JwRCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsU0FBUztJQUM3QixHQUFHLENBQVk7SUFFL0IsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLEtBQUssQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsS0FBSyxDQUFDLFlBQVksR0FBRztnQkFDbkIsdUNBQXVDO2dCQUN2QyxnQ0FBZ0M7Z0JBQ2hDLDhCQUE4QjtnQkFDOUIsc0NBQXNDO2dCQUN0QyxrQ0FBa0M7YUFDbkMsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUNqRCxLQUFLLEVBQUUsWUFBWTtZQUNuQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUM1QixnQkFBZ0IsRUFBRTtnQkFDaEIsd0JBQXdCLEVBQUUsSUFBSTtnQkFDOUIsc0JBQXNCLEVBQUUsSUFBSTtnQkFDNUIs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b2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQ2ZuV2ViQUNMIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXdhZnYyJztcbmltcG9ydCB7IHRhZ1Jlc291cmNlIH0gZnJvbSAnLi4vbGliL3RhZ3MuanMnO1xuaW1wb3J0IHsgY2xlYW5SZXNvdXJjZU5hbWUgfSBmcm9tICcuLi9saWIvdXRpbHMuanMnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZVByb3BzIH0gZnJvbSAnLi4vbGliL3R5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgV2ViQWNsTWFuYWdlZFJ1bGUgPSBcbiAgJ0FXU01hbmFnZWRSdWxlc0FtYXpvbklwUmVwdXRhdGlvbkxpc3QnIHxcbiAgJ0FXU01hbmFnZWRSdWxlc0Fub255bW91c0lwTGlzdCcgfCBcbiAgJ0FXU01hbmFnZWRSdWxlc0FudGlERG9TUnVsZVNldCcgfCBcbiAgJ0FXU01hbmFnZWRSdWxlc0JvdENvbnRyb2xSdWxlU2V0JyB8XG4gICdBV1NNYW5hZ2VkUnVsZXNDb21tb25SdWxlU2V0JyB8XG4gICdBV1NNYW5hZ2VkUnVsZXNLbm93bkJhZElucHV0c1J1bGVTZXQnIHxcbiAgJ0FXU01hbmFnZWRSdWxlc1NRTGlSdWxlU2V0JztcblxuZXhwb3J0IGludGVyZmFjZSBDbG91ZEZyb250V2ViQWNsUHJvcHMgZXh0ZW5kcyBSZXNvdXJjZVByb3BzIHtcbiAgbmFtZTogc3RyaW5nO1xuICBtYW5hZ2VkUnVsZXM/OiAoV2ViQWNsTWFuYWdlZFJ1bGUgJiBzdHJpbmcpW107XG59XG5leHBvcnQgY2xhc3MgQ2xvdWRGcm9udFdlYkFjbCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBhY2w6IENmbldlYkFDTDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2xvdWRGcm9udFdlYkFjbFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHByb3BzLm5hbWUgPSBjbGVhblJlc291cmNlTmFtZShwcm9wcy5uYW1lKTtcblxuICAgIGlmICghcHJvcHMubWFuYWdlZFJ1bGVzKSB7XG4gICAgICBwcm9wcy5tYW5hZ2VkUnVsZXMgPSBbXG4gICAgICAgICdBV1NNYW5hZ2VkUnVsZXNBbWF6b25JcFJlcHV0YXRpb25MaXN0JyxcbiAgICAgICAgJ0FXU01hbmFnZWRSdWxlc0Fub255bW91c0lwTGlzdCcsXG4gICAgICAgICdBV1NNYW5hZ2VkUnVsZXNDb21tb25SdWxlU2V0JyxcbiAgICAgICAgJ0FXU01hbmFnZWRSdWxlc0tub3duQmFkSW5wdXRzUnVsZVNldCcsXG4gICAgICAgICdBV1NNYW5hZ2VkUnVsZXNCb3RDb250cm9sUnVsZVNldCdcbiAgICAgIF07XG4gICAgfVxuXG4gICAgdGhpcy5hY2wgPSBuZXcgQ2ZuV2ViQUNMKHRoaXMsICdDbG91ZEZyb250V2ViQWNsJywge1xuICAgICAgc2NvcGU6ICdDTE9VREZST05UJyxcbiAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICBkZWZhdWx0QWN0aW9uOiB7IGFsbG93OiB7fSB9LFxuICAgICAgdmlzaWJpbGl0eUNvbmZpZzoge1xuICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIHNhbXBsZWRSZXF1ZXN0c0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIG1ldHJpY05hbWU6IGAke3Byb3BzLm5hbWV9LW1ldHJpY3NgXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHRyYW5zZm9ybU1hbmFnZWRSdWxlcyhwcm9wcy5tYW5hZ2VkUnVsZXMpXG4gICAgfSk7XG4gICAgdGFnUmVzb3VyY2UodGhpcy5hY2wsIHByb3BzLnRhZ3MpO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZGVzdHJveSA9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRoaXMuYWNsLmFwcGx5UmVtb3ZhbFBvbGljeShwcm9wcy5kZXN0cm95ID8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZIDogUmVtb3ZhbFBvbGljeS5SRVRBSU4pO1xuICAgIH0gXG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlHYXRld2F5V2ViQWNsUHJvcHMgZXh0ZW5kcyBSZXNvdXJjZVByb3BzIHtcbiAgbmFtZTogc3RyaW5nO1xuICBhY2xTY29wZT86ICdDTE9VREZST05UJyB8ICdSRUdJT05BTCc7XG4gIG1hbmFnZWRSdWxlcz86IChXZWJBY2xNYW5hZ2VkUnVsZSAmIHN0cmluZylbXTtcbn1cbmV4cG9ydCBjbGFzcyBBcGlHYXRld2F5V2ViQWNsIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGFjbDogQ2ZuV2ViQUNMO1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXBpR2F0ZXdheVdlYkFjbFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHByb3BzLm5hbWUgPSBjbGVhblJlc291cmNlTmFtZShwcm9wcy5uYW1lKTtcblxuICAgIGlmICghcHJvcHMubWFuYWdlZFJ1bGVzKSB7XG4gICAgICBwcm9wcy5tYW5hZ2VkUnVsZXMgPSBbXG4gICAgICAgICdBV1NNYW5hZ2VkUnVsZXNBbWF6b25JcFJlcHV0YXRpb25MaXN0JyxcbiAgICAgICAgJ0FXU01hbmFnZWRSdWxlc0Fub255bW91c0lwTGlzdCcsXG4gICAgICAgICdBV1NNYW5hZ2VkUnVsZXNDb21tb25SdWxlU2V0JyxcbiAgICAgICAgJ0FXU01hbmFnZWRSdWxlc1NRTGlSdWxlU2V0JyxcbiAgICAgICAgJ0FXU01hbmFnZWRSdWxlc0tub3duQmFkSW5wdXRzUnVsZVNldCcsXG4gICAgICAgICdBV1NNYW5hZ2VkUnVsZXNCb3RDb250cm9sUnVsZVNldCdcbiAgICAgIF07XG4gICAgfVxuXG4gICAgdGhpcy5hY2wgPSBuZXcgQ2ZuV2ViQUNMKHRoaXMsICdBcGlHYXRld2F5V2ViQWNsJywge1xuICAgICAgc2NvcGU6IHByb3BzLmFjbFNjb3BlID8/ICdSRUdJT05BTCcsXG4gICAgICBuYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgZGVmYXVsdEFjdGlvbjogeyBhbGxvdzoge30gfSxcbiAgICAgIHZpc2liaWxpdHlDb25maWc6IHtcbiAgICAgICAgY2xvdWRXYXRjaE1ldHJpY3NFbmFibGVkOiB0cnVlLFxuICAgICAgICBzYW1wbGVkUmVxdWVzdHNFbmFibGVkOiB0cnVlLFxuICAgICAgICBtZXRyaWNOYW1lOiBgJHtwcm9wcy5uYW1lfS1tZXRyaWNzYFxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiB0cmFuc2Zvcm1NYW5hZ2VkUnVsZXMocHJvcHMubWFuYWdlZFJ1bGVzKVxuICAgIH0pO1xuICAgIHRhZ1Jlc291cmNlKHRoaXMuYWNsLCBwcm9wcy50YWdzKTtcbiAgICBpZiAodHlwZW9mIHByb3BzLmRlc3Ryb3kgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLmFjbC5hcHBseVJlbW92YWxQb2xpY3kocHJvcHMuZGVzdHJveSA/IFJlbW92YWxQb2xpY3kuREVTVFJPWSA6IFJlbW92YWxQb2xpY3kuUkVUQUlOKTtcbiAgICB9IFxuICB9XG59XG5cblxuZnVuY3Rpb24gdHJhbnNmb3JtTWFuYWdlZFJ1bGVzKHJ1bGVzOiAoV2ViQWNsTWFuYWdlZFJ1bGUgfCBzdHJpbmcpW10pOiBDZm5XZWJBQ0wuUnVsZVByb3BlcnR5W10ge1xuICByZXR1cm4gcnVsZXMubWFwKChydWxlTmFtZSwgaSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBgQVdTLSR7cnVsZU5hbWV9YCxcbiAgICAgIHByaW9yaXR5OiBpLFxuICAgICAgc3RhdGVtZW50OiB7XG4gICAgICAgIG1hbmFnZWRSdWxlR3JvdXBTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICBuYW1lOiBydWxlTmFtZSxcbiAgICAgICAgICB2ZW5kb3JOYW1lOiAnQVdTJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb3ZlcnJpZGVBY3Rpb246IHsgbm9uZToge30gfSxcbiAgICAgIHZpc2liaWxpdHlDb25maWc6IHsgXG4gICAgICAgIGNsb3VkV2F0Y2hNZXRyaWNzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgc2FtcGxlZFJlcXVlc3RzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbWV0cmljTmFtZTogYEFXUy0ke3J1bGVOYW1lfWBcbiAgICAgIH1cbiAgICB9IGFzIENmbldlYkFDTC5SdWxlUHJvcGVydHk7XG4gIH0pO1xufSJdfQ==
@@ -0,0 +1,10 @@
1
+ import { Environment } from "aws-cdk-lib";
2
+ export * from './lib/tags.ts';
3
+ interface GetEnvParams {
4
+ account?: number | string;
5
+ region?: string;
6
+ }
7
+ export declare function getEnv(region?: string): Environment;
8
+ export declare function getEnv(account?: string | number): Environment;
9
+ export declare function getEnv({ account, region }: GetEnvParams): Environment;
10
+ export declare function getEnv(env?: Environment): Environment;
package/dist/index.js ADDED
@@ -0,0 +1,26 @@
1
+ export * from "./lib/tags.js";
2
+ export function getEnv(env) {
3
+ let account = process.env.CDK_DEFAULT_ACCOUNT || '';
4
+ let region = process.env.CDK_DEFAULT_REGION || 'us-east-1';
5
+ if (env) {
6
+ switch (typeof env) {
7
+ case 'number':
8
+ account = env.toString();
9
+ break;
10
+ case 'string':
11
+ if (/^\d+$/.test(env)) {
12
+ account = env;
13
+ }
14
+ else {
15
+ region = env;
16
+ }
17
+ break;
18
+ default:
19
+ account = env.account ?? '';
20
+ region = env.region ?? region;
21
+ break;
22
+ }
23
+ }
24
+ return { account, region };
25
+ }
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsY0FBYyxlQUFlLENBQUM7QUFVOUIsTUFBTSxVQUFVLE1BQU0sQ0FBQyxHQUFrRDtJQUN2RSxJQUFJLE9BQU8sR0FBVyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztJQUM1RCxJQUFJLE1BQU0sR0FBVyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLFdBQVcsQ0FBQztJQUNuRSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1IsUUFBUSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ25CLEtBQUssUUFBUTtnQkFDWCxPQUFPLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN6QixNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN0QixPQUFPLEdBQUcsR0FBRyxDQUFDO2dCQUNoQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxHQUFHLEdBQUcsQ0FBQztnQkFDZixDQUFDO2dCQUNELE1BQU07WUFDUjtnQkFDRSxPQUFPLEdBQUksR0FBbUIsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO2dCQUM3QyxNQUFNLEdBQUksR0FBbUIsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDO2dCQUMvQyxNQUFNO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWdzLnRzJztcblxuaW50ZXJmYWNlIEdldEVudlBhcmFtcyB7IFxuICBhY2NvdW50PzogbnVtYmVyIHwgc3RyaW5nO1xuICByZWdpb24/OiBzdHJpbmc7IFxufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudihyZWdpb24/OiBzdHJpbmcpOiBFbnZpcm9ubWVudDtcbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnYoYWNjb3VudD86IHN0cmluZyB8IG51bWJlcik6IEVudmlyb25tZW50O1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudih7IGFjY291bnQsIHJlZ2lvbiB9OiBHZXRFbnZQYXJhbXMpOiBFbnZpcm9ubWVudDtcbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnYoZW52PzogRW52aXJvbm1lbnQpOiBFbnZpcm9ubWVudDtcbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnYoZW52Pzogc3RyaW5nIHwgbnVtYmVyIHwgR2V0RW52UGFyYW1zIHwgRW52aXJvbm1lbnQpIHtcbiAgbGV0IGFjY291bnQ6IHN0cmluZyA9IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX0FDQ09VTlQgfHwgJyc7XG4gIGxldCByZWdpb246IHN0cmluZyA9IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX1JFR0lPTiB8fCAndXMtZWFzdC0xJztcbiAgaWYgKGVudikge1xuICAgIHN3aXRjaCAodHlwZW9mIGVudikge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgYWNjb3VudCA9IGVudi50b1N0cmluZygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIGlmICgvXlxcZCskLy50ZXN0KGVudikpIHtcbiAgICAgICAgICBhY2NvdW50ID0gZW52O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZ2lvbiA9IGVudjtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFjY291bnQgPSAoZW52IGFzIEVudmlyb25tZW50KS5hY2NvdW50ID8/ICcnO1xuICAgICAgICByZWdpb24gPSAoZW52IGFzIEVudmlyb25tZW50KS5yZWdpb24gPz8gcmVnaW9uO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgYWNjb3VudCwgcmVnaW9uIH07XG59Il19
@@ -0,0 +1 @@
1
+ export declare const NPM_LIBRARY_NAME = "@inizioevoke/evosynth";
@@ -0,0 +1,2 @@
1
+ export const NPM_LIBRARY_NAME = '@inizioevoke/evosynth';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2NvbnN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IE5QTV9MSUJSQVJZX05BTUUgPSAnQGluaXppb2V2b2tlL2V2b3N5bnRoJzsiXX0=
@@ -0,0 +1,3 @@
1
+ import type { CloudFrontFunctionRedirectPaths } from '../constructs/cloudfront.js';
2
+ export declare function parseCsvRedirects(filePath: string): CloudFrontFunctionRedirectPaths;
3
+ export declare function mergeRedirects(base: CloudFrontFunctionRedirectPaths | undefined, override: CloudFrontFunctionRedirectPaths | undefined): CloudFrontFunctionRedirectPaths;
@@ -0,0 +1,124 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { resolve, isAbsolute } from 'node:path';
3
+ const VALID_HTTP_CODES = [301, 302, 303, 307, 308];
4
+ function parseCsvLine(line) {
5
+ const fields = [];
6
+ let current = '';
7
+ let inQuotes = false;
8
+ for (let i = 0; i < line.length; i++) {
9
+ const ch = line[i];
10
+ if (inQuotes) {
11
+ if (ch === '"') {
12
+ if (i + 1 < line.length && line[i + 1] === '"') {
13
+ current += '"';
14
+ i++;
15
+ }
16
+ else {
17
+ inQuotes = false;
18
+ }
19
+ }
20
+ else {
21
+ current += ch;
22
+ }
23
+ }
24
+ else {
25
+ if (ch === '"') {
26
+ inQuotes = true;
27
+ }
28
+ else if (ch === ',') {
29
+ fields.push(current.trim());
30
+ current = '';
31
+ }
32
+ else {
33
+ current += ch;
34
+ }
35
+ }
36
+ }
37
+ fields.push(current.trim());
38
+ return fields;
39
+ }
40
+ export function parseCsvRedirects(filePath) {
41
+ const resolvedPath = isAbsolute(filePath) ? filePath : resolve(process.cwd(), filePath);
42
+ const content = readFileSync(resolvedPath, 'utf8');
43
+ const lines = content.split(/\r?\n/).filter(line => line.trim() !== '');
44
+ if (lines.length === 0) {
45
+ return {};
46
+ }
47
+ const headers = parseCsvLine(lines[0]).map(h => h.toLowerCase());
48
+ const sourceIdx = headers.indexOf('source');
49
+ const destIdx = headers.indexOf('destination');
50
+ const codeIdx = headers.indexOf('http_code');
51
+ if (sourceIdx === -1) {
52
+ throw new Error("redirects.csv: Required column 'source' is missing.");
53
+ }
54
+ if (destIdx === -1) {
55
+ throw new Error("redirects.csv: Required column 'destination' is missing.");
56
+ }
57
+ const result = {};
58
+ for (let i = 1; i < lines.length; i++) {
59
+ const rowNum = i + 1;
60
+ const fields = parseCsvLine(lines[i]);
61
+ const source = fields[sourceIdx] ?? '';
62
+ const destination = fields[destIdx] ?? '';
63
+ if (!source) {
64
+ throw new Error(`redirects.csv: Row ${rowNum} has an empty 'source' value.`);
65
+ }
66
+ if (!destination) {
67
+ throw new Error(`redirects.csv: Row ${rowNum} has an empty 'destination' value.`);
68
+ }
69
+ if (source === destination) {
70
+ throw new Error(`redirects.csv: Row ${rowNum} contains a circular redirect — source and destination are the same: '${source}'.`);
71
+ }
72
+ let httpCode = 302;
73
+ if (codeIdx !== -1) {
74
+ const rawCode = fields[codeIdx] ?? '';
75
+ if (rawCode !== '') {
76
+ const parsed = parseInt(rawCode, 10);
77
+ if (!VALID_HTTP_CODES.includes(parsed)) {
78
+ throw new Error(`redirects.csv: Row ${rowNum} has an invalid 'http_code' value: '${rawCode}'. Expected a redirect status code (e.g. 301, 302, 307, 308).`);
79
+ }
80
+ httpCode = parsed;
81
+ }
82
+ }
83
+ result[source] = httpCode === 302 ? destination : [destination, httpCode];
84
+ }
85
+ // Detect indirect circular chains
86
+ detectCircularChains(result);
87
+ return result;
88
+ }
89
+ function detectCircularChains(redirects) {
90
+ const graph = new Map();
91
+ for (const [source, value] of Object.entries(redirects)) {
92
+ const dest = Array.isArray(value) ? value[0] : value;
93
+ graph.set(source, dest);
94
+ }
95
+ for (const start of graph.keys()) {
96
+ const visited = new Set();
97
+ let current = start;
98
+ while (current !== undefined && graph.has(current)) {
99
+ if (visited.has(current)) {
100
+ const chain = [...visited, current].join(' → ');
101
+ throw new Error(`redirects.csv: Circular redirect chain detected: ${chain}`);
102
+ }
103
+ visited.add(current);
104
+ current = graph.get(current);
105
+ }
106
+ }
107
+ }
108
+ export function mergeRedirects(base, override) {
109
+ if (!base && !override)
110
+ return {};
111
+ if (!base)
112
+ return { ...override };
113
+ if (!override)
114
+ return { ...base };
115
+ const merged = { ...base };
116
+ for (const [key, value] of Object.entries(override)) {
117
+ if (key in merged) {
118
+ console.warn(`Redirect conflict for '${key}': override wins.`);
119
+ }
120
+ merged[key] = value;
121
+ }
122
+ return merged;
123
+ }
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LXJlZGlyZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY3N2LXJlZGlyZWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBR2hELE1BQU0sZ0JBQWdCLEdBQXNCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRXRFLFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDaEMsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBQzVCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNqQixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQy9DLE9BQU8sSUFBSSxHQUFHLENBQUM7b0JBQ2YsQ0FBQyxFQUFFLENBQUM7Z0JBQ04sQ0FBQztxQkFBTSxDQUFDO29CQUNOLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ25CLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUNoQixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFD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LEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDcEQsSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7WUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyByZXNvbHZlLCBpc0Fic29sdXRlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB0eXBlIHsgQ2xvdWRGcm9udEZ1bmN0aW9uUmVkaXJlY3RQYXRocywgSHR0cFJlZGlyZWN0Q29kZSB9IGZyb20gJy4uL2NvbnN0cnVjdHMvY2xvdWRmcm9udC5qcyc7XG5cbmNvbnN0IFZBTElEX0hUVFBfQ09ERVM6IHJlYWRvbmx5IG51bWJlcltdID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XTtcblxuZnVuY3Rpb24gcGFyc2VDc3ZMaW5lKGxpbmU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgY3VycmVudCA9ICcnO1xuICBsZXQgaW5RdW90ZXMgPSBmYWxzZTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaCA9IGxpbmVbaV07XG4gICAgaWYgKGluUXVvdGVzKSB7XG4gICAgICBpZiAoY2ggPT09ICdcIicpIHtcbiAgICAgICAgaWYgKGkgKyAxIDwgbGluZS5sZW5ndGggJiYgbGluZVtpICsgMV0gPT09ICdcIicpIHtcbiAgICAgICAgICBjdXJyZW50ICs9ICdcIic7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGluUXVvdGVzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnQgKz0gY2g7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgICBpblF1b3RlcyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSAnLCcpIHtcbiAgICAgICAgZmllbGRzLnB1c2goY3VycmVudC50cmltKCkpO1xuICAgICAgICBjdXJyZW50ID0gJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50ICs9IGNoO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmaWVsZHMucHVzaChjdXJyZW50LnRyaW0oKSk7XG4gIHJldHVybiBmaWVsZHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNzdlJlZGlyZWN0cyhmaWxlUGF0aDogc3RyaW5nKTogQ2xvdWRGcm9udEZ1bmN0aW9uUmVkaXJlY3RQYXRocyB7XG4gIGNvbnN0IHJlc29sdmVkUGF0aCA9IGlzQWJzb2x1dGUoZmlsZVBhdGgpID8gZmlsZVBhdGggOiByZXNvbHZlKHByb2Nlc3MuY3dkKCksIGZpbGVQYXRoKTtcbiAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhyZXNvbHZlZFBhdGgsICd1dGY4Jyk7XG4gIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgvXFxyP1xcbi8pLmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnJyk7XG5cbiAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IGhlYWRlcnMgPSBwYXJzZUNzdkxpbmUobGluZXNbMF0pLm1hcChoID0+IGgudG9Mb3dlckNhc2UoKSk7XG4gIGNvbnN0IHNvdXJjZUlkeCA9IGhlYWRlcnMuaW5kZXhPZignc291cmNlJyk7XG4gIGNvbnN0IGRlc3RJZHggPSBoZWFkZXJzLmluZGV4T2YoJ2Rlc3RpbmF0aW9uJyk7XG4gIGNvbnN0IGNvZGVJZHggPSBoZWFkZXJzLmluZGV4T2YoJ2h0dHBfY29kZScpO1xuXG4gIGlmIChzb3VyY2VJZHggPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwicmVkaXJlY3RzLmNzdjogUmVxdWlyZWQgY29sdW1uICdzb3VyY2UnIGlzIG1pc3NpbmcuXCIpO1xuICB9XG4gIGlmIChkZXN0SWR4ID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInJlZGlyZWN0cy5jc3Y6IFJlcXVpcmVkIGNvbHVtbiAnZGVzdGluYXRpb24nIGlzIG1pc3NpbmcuXCIpO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBDbG91ZEZyb250RnVuY3Rpb25SZWRpcmVjdFBhdGhzID0ge307XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHJvd051bSA9IGkgKyAxO1xuICAgIGNvbnN0IGZpZWxkcyA9IHBhcnNlQ3N2TGluZShsaW5lc1tpXSk7XG5cbiAgICBjb25zdCBzb3VyY2UgPSBmaWVsZHNbc291cmNlSWR4XSA/PyAnJztcbiAgICBjb25zdCBkZXN0aW5hdGlvbiA9IGZpZWxkc1tkZXN0SWR4XSA/PyAnJztcblxuICAgIGlmICghc291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlZGlyZWN0cy5jc3Y6IFJvdyAke3Jvd051bX0gaGFzIGFuIGVtcHR5ICdzb3VyY2UnIHZhbHVlLmApO1xuICAgIH1cbiAgICBpZiAoIWRlc3RpbmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlZGlyZWN0cy5jc3Y6IFJvdyAke3Jvd051bX0gaGFzIGFuIGVtcHR5ICdkZXN0aW5hdGlvbicgdmFsdWUuYCk7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZSA9PT0gZGVzdGluYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcmVkaXJlY3RzLmNzdjogUm93ICR7cm93TnVtfSBjb250YWlucyBhIGNpcmN1bGFyIHJlZGlyZWN0IOKAlCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZTogJyR7c291cmNlfScuYCk7XG4gICAgfVxuXG4gICAgbGV0IGh0dHBDb2RlOiBIdHRwUmVkaXJlY3RDb2RlID0gMzAyO1xuICAgIGlmIChjb2RlSWR4ICE9PSAtMSkge1xuICAgICAgY29uc3QgcmF3Q29kZSA9IGZpZWxkc1tjb2RlSWR4XSA/PyAnJztcbiAgICAgIGlmIChyYXdDb2RlICE9PSAnJykge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludChyYXdDb2RlLCAxMCk7XG4gICAgICAgIGlmICghVkFMSURfSFRUUF9DT0RFUy5pbmNsdWRlcyhwYXJzZWQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZWRpcmVjdHMuY3N2OiBSb3cgJHtyb3dOdW19IGhhcyBhbiBpbnZhbGlkICdodHRwX2NvZGUnIHZhbHVlOiAnJHtyYXdDb2RlfScuIEV4cGVjdGVkIGEgcmVkaXJlY3Qgc3RhdHVzIGNvZGUgKGUuZy4gMzAxLCAzMDIsIDMwNywgMzA4KS5gKTtcbiAgICAgICAgfVxuICAgICAgICBodHRwQ29kZSA9IHBhcnNlZCBhcyBIdHRwUmVkaXJlY3RDb2RlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VsdFtzb3VyY2VdID0gaHR0cENvZGUgPT09IDMwMiA/IGRlc3RpbmF0aW9uIDogW2Rlc3RpbmF0aW9uLCBodHRwQ29kZV07XG4gIH1cblxuICAvLyBEZXRlY3QgaW5kaXJlY3QgY2lyY3VsYXIgY2hhaW5zXG4gIGRldGVjdENpcmN1bGFyQ2hhaW5zKHJlc3VsdCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZGV0ZWN0Q2lyY3VsYXJDaGFpbnMocmVkaXJlY3RzOiBDbG91ZEZyb250RnVuY3Rpb25SZWRpcmVjdFBhdGhzKTogdm9pZCB7XG4gIGNvbnN0IGdyYXBoID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBbc291cmNlLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVkaXJlY3RzKSkge1xuICAgIGNvbnN0IGRlc3QgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWU7XG4gICAgZ3JhcGguc2V0KHNvdXJjZSwgZGVzdCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHN0YXJ0IG9mIGdyYXBoLmtleXMoKSkge1xuICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBsZXQgY3VycmVudDogc3RyaW5nIHwgdW5kZWZpbmVkID0gc3RhcnQ7XG4gICAgd2hpbGUgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCAmJiBncmFwaC5oYXMoY3VycmVudCkpIHtcbiAgICAgIGlmICh2aXNpdGVkLmhhcyhjdXJyZW50KSkge1xuICAgICAgICBjb25zdCBjaGFpbiA9IFsuLi52aXNpdGVkLCBjdXJyZW50XS5qb2luKCcg4oaSICcpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlZGlyZWN0cy5jc3Y6IENpcmN1bGFyIHJlZGlyZWN0IGNoYWluIGRldGVjdGVkOiAke2NoYWlufWApO1xuICAgICAgfVxuICAgICAgdmlzaXRlZC5hZGQoY3VycmVudCk7XG4gICAgICBjdXJyZW50ID0gZ3JhcGguZ2V0KGN1cnJlbnQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VSZWRpcmVjdHMoXG4gIGJhc2U6IENsb3VkRnJvbnRGdW5jdGlvblJlZGlyZWN0UGF0aHMgfCB1bmRlZmluZWQsXG4gIG92ZXJyaWRlOiBDbG91ZEZyb250RnVuY3Rpb25SZWRpcmVjdFBhdGhzIHwgdW5kZWZpbmVkXG4pOiBDbG91ZEZyb250RnVuY3Rpb25SZWRpcmVjdFBhdGhzIHtcbiAgaWYgKCFiYXNlICYmICFvdmVycmlkZSkgcmV0dXJuIHt9O1xuICBpZiAoIWJhc2UpIHJldHVybiB7IC4uLm92ZXJyaWRlISB9O1xuICBpZiAoIW92ZXJyaWRlKSByZXR1cm4geyAuLi5iYXNlIH07XG5cbiAgY29uc3QgbWVyZ2VkID0geyAuLi5iYXNlIH07XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG92ZXJyaWRlKSkge1xuICAgIGlmIChrZXkgaW4gbWVyZ2VkKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFJlZGlyZWN0IGNvbmZsaWN0IGZvciAnJHtrZXl9Jzogb3ZlcnJpZGUgd2lucy5gKTtcbiAgICB9XG4gICAgbWVyZ2VkW2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gbWVyZ2VkO1xufVxuIl19
@@ -0,0 +1,19 @@
1
+ import { IConstruct } from 'constructs';
2
+ export declare const TAG_EVO_VERSION = "EvoSynthToolVersion";
3
+ export declare const TAG_EVO_STAGE = "EvoSynthStageName";
4
+ export declare const TAG_EVO_STACK = "EvoSynthStackName";
5
+ export declare function createEvoVersionTag(): {
6
+ [TAG_EVO_VERSION]: string;
7
+ };
8
+ export declare function addEvoVersionTag(resource: IConstruct): void;
9
+ export declare function createEvoStackTag(value: string): {
10
+ [TAG_EVO_STACK]: string;
11
+ };
12
+ export declare function addEvoStackTags(resource: IConstruct, value: string): void;
13
+ export declare function createEvoStageTag(value: string): {
14
+ [TAG_EVO_STAGE]: string;
15
+ };
16
+ export declare function addEvoStageTags(resource: IConstruct, value: string): void;
17
+ export declare function mergeTags(...tags: (Record<string, string> | null | undefined)[]): Record<string, string>;
18
+ export declare function tagResource(resource: IConstruct, tags?: Record<string, string>): void;
19
+ export declare function tagResource(resource: IConstruct, tag: string, value: string): void;
@@ -0,0 +1,47 @@
1
+ import { Tags } from 'aws-cdk-lib/core';
2
+ import { NPM_LIBRARY_NAME } from "./const.js";
3
+ import { TOOL_VERSION } from "./version.js";
4
+ export const TAG_EVO_VERSION = 'EvoSynthToolVersion';
5
+ export const TAG_EVO_STAGE = 'EvoSynthStageName';
6
+ export const TAG_EVO_STACK = 'EvoSynthStackName';
7
+ export function createEvoVersionTag() {
8
+ return { [TAG_EVO_VERSION]: `${NPM_LIBRARY_NAME}@${TOOL_VERSION}` };
9
+ }
10
+ export function addEvoVersionTag(resource) {
11
+ tagResource(resource, createEvoVersionTag());
12
+ }
13
+ export function createEvoStackTag(value) {
14
+ return { [TAG_EVO_STACK]: value };
15
+ }
16
+ export function addEvoStackTags(resource, value) {
17
+ addEvoVersionTag(resource);
18
+ tagResource(resource, createEvoStackTag(value));
19
+ }
20
+ export function createEvoStageTag(value) {
21
+ return { [TAG_EVO_STAGE]: value };
22
+ }
23
+ export function addEvoStageTags(resource, value) {
24
+ addEvoVersionTag(resource);
25
+ tagResource(resource, createEvoStageTag(value));
26
+ }
27
+ export function mergeTags(...tags) {
28
+ const _tags = tags.filter(t => t !== undefined && t !== null) ?? [];
29
+ return Object.assign({}, ..._tags);
30
+ }
31
+ export function tagResource(resource, ...args) {
32
+ let tags = undefined;
33
+ switch (args.length) {
34
+ case 1:
35
+ tags = tags || undefined;
36
+ break;
37
+ case 2:
38
+ tags = { [args[0]]: args[1] };
39
+ break;
40
+ }
41
+ if (tags) {
42
+ for (const [key, value] of Object.entries(tags)) {
43
+ Tags.of(resource).add(key, value);
44
+ }
45
+ }
46
+ }
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdGFncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFNUMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLHFCQUFxQixDQUFDO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQztBQUNqRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUM7QUFFakQsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxHQUFHLGdCQUFnQixJQUFJLFlBQVksRUFBRSxFQUFFLENBQUM7QUFDdEUsQ0FBQztBQUNELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxRQUFvQjtJQUNuRCxXQUFXLENBQUMsUUFBUSxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQWE7SUFDN0MsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDcEMsQ0FBQztBQUNELE1BQU0sVUFBVSxlQUFlLENBQUMsUUFBb0IsRUFBRSxLQUFhO0lBQ2pFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNCLFdBQVcsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQWE7SUFDN0MsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDcEMsQ0FBQztBQUNELE1BQU0sVUFBVSxlQUFlLENBQUMsUUFBb0IsRUFBRSxLQUFhO0lBQ2pFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNCLFdBQVcsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFHLElBQW1EO0lBQzlFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFJRCxNQUFNLFVBQVUsV0FBVyxDQUFDLFFBQW9CLEVBQUUsR0FBRyxJQUFXO0lBQzlELElBQUksSUFBSSxHQUF1QyxTQUFTLENBQUM7SUFDekQsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEIsS0FBSyxDQUFDO1lBQ0osSUFBSSxHQUFHLElBQUksSUFBSSxTQUFTLENBQUM7WUFDekIsTUFBTTtRQUNSLEtBQUssQ0FBQztZQUNKLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTTtJQUNWLENBQUM7SUFDRCxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgVGFncyB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgTlBNX0xJQlJBUllfTkFNRSB9IGZyb20gJy4vY29uc3QudHMnO1xuaW1wb3J0IHsgVE9PTF9WRVJTSU9OIH0gZnJvbSAnLi92ZXJzaW9uLnRzJztcblxuZXhwb3J0IGNvbnN0IFRBR19FVk9fVkVSU0lPTiA9ICdFdm9TeW50aFRvb2xWZXJzaW9uJztcbmV4cG9ydCBjb25zdCBUQUdfRVZPX1NUQUdFID0gJ0V2b1N5bnRoU3RhZ2VOYW1lJztcbmV4cG9ydCBjb25zdCBUQUdfRVZPX1NUQUNLID0gJ0V2b1N5bnRoU3RhY2tOYW1lJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV2b1ZlcnNpb25UYWcoKTogeyBbVEFHX0VWT19WRVJTSU9OXTogc3RyaW5nIH0ge1xuICByZXR1cm4geyBbVEFHX0VWT19WRVJTSU9OXTogYCR7TlBNX0xJQlJBUllfTkFNRX1AJHtUT09MX1ZFUlNJT059YCB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFkZEV2b1ZlcnNpb25UYWcocmVzb3VyY2U6IElDb25zdHJ1Y3QpIHtcbiAgdGFnUmVzb3VyY2UocmVzb3VyY2UsIGNyZWF0ZUV2b1ZlcnNpb25UYWcoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFdm9TdGFja1RhZyh2YWx1ZTogc3RyaW5nKTogeyBbVEFHX0VWT19TVEFDS106IHN0cmluZyB9IHtcbiAgcmV0dXJuIHsgW1RBR19FVk9fU1RBQ0tdOiB2YWx1ZSB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFkZEV2b1N0YWNrVGFncyhyZXNvdXJjZTogSUNvbnN0cnVjdCwgdmFsdWU6IHN0cmluZyl7XG4gIGFkZEV2b1ZlcnNpb25UYWcocmVzb3VyY2UpO1xuICB0YWdSZXNvdXJjZShyZXNvdXJjZSwgY3JlYXRlRXZvU3RhY2tUYWcodmFsdWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV2b1N0YWdlVGFnKHZhbHVlOiBzdHJpbmcpOiB7IFtUQUdfRVZPX1NUQUdFXTogc3RyaW5nIH0ge1xuICByZXR1cm4geyBbVEFHX0VWT19TVEFHRV06IHZhbHVlIH07XG59XG5leHBvcnQgZnVuY3Rpb24gYWRkRXZvU3RhZ2VUYWdzKHJlc291cmNlOiBJQ29uc3RydWN0LCB2YWx1ZTogc3RyaW5nKSB7XG4gIGFkZEV2b1ZlcnNpb25UYWcocmVzb3VyY2UpO1xuICB0YWdSZXNvdXJjZShyZXNvdXJjZSwgY3JlYXRlRXZvU3RhZ2VUYWcodmFsdWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlVGFncyguLi50YWdzOiAoUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IG51bGwgfCB1bmRlZmluZWQpW10pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgX3RhZ3MgPSB0YWdzLmZpbHRlcih0ID0+IHQgIT09IHVuZGVmaW5lZCAmJiB0ICE9PSBudWxsKSA/PyBbXTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIC4uLl90YWdzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhZ1Jlc291cmNlKHJlc291cmNlOiBJQ29uc3RydWN0LCB0YWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gdGFnUmVzb3VyY2UocmVzb3VyY2U6IElDb25zdHJ1Y3QsIHRhZzogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZDtcbmV4cG9ydCBmdW5jdGlvbiB0YWdSZXNvdXJjZShyZXNvdXJjZTogSUNvbnN0cnVjdCwgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgbGV0IHRhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDE6XG4gICAgICB0YWdzID0gdGFncyB8fCB1bmRlZmluZWQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB0YWdzID0geyBbYXJnc1swXV06IGFyZ3NbMV0gfTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmICh0YWdzKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGFncykpIHtcbiAgICAgIFRhZ3Mub2YocmVzb3VyY2UpLmFkZChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,14 @@
1
+ export type DeepPartial<T> = T extends object ? {
2
+ [P in keyof T]?: DeepPartial<T[P]>;
3
+ } : T;
4
+ export type WithRequiredProperty<Type, Key extends keyof Type> = Omit<Type, Key> & {
5
+ [Property in Key]-?: Type[Property];
6
+ };
7
+ export interface ResourceProps {
8
+ destroy?: boolean;
9
+ tags?: Record<string, string>;
10
+ }
11
+ export interface SsmStringParameter {
12
+ path: string;
13
+ version?: number;
14
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBEZWVwUGFydGlhbDxUPiA9IFQgZXh0ZW5kcyBvYmplY3QgPyB7XG4gIFtQIGluIGtleW9mIFRdPzogRGVlcFBhcnRpYWw8VFtQXT47XG59IDogVDtcblxuZXhwb3J0IHR5cGUgV2l0aFJlcXVpcmVkUHJvcGVydHk8VHlwZSwgS2V5IGV4dGVuZHMga2V5b2YgVHlwZT4gPSBPbWl0PFR5cGUsIEtleT4gJiB7XG4gIFtQcm9wZXJ0eSBpbiBLZXldLT86IFR5cGVbUHJvcGVydHldO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVByb3BzIHtcbiAgZGVzdHJveT86IGJvb2xlYW47XG4gIHRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNzbVN0cmluZ1BhcmFtZXRlciB7XG4gIHBhdGg6IHN0cmluZztcbiAgdmVyc2lvbj86IG51bWJlcjtcbn0iXX0=
@@ -0,0 +1,2 @@
1
+ export declare function domainAsId(domain: string): string;
2
+ export declare function cleanResourceName(name: string): string;
@@ -0,0 +1,7 @@
1
+ export function domainAsId(domain) {
2
+ return domain.replace(/\./g, '-');
3
+ }
4
+ export function cleanResourceName(name) {
5
+ return name.replace(/[^0-9a-z_\-]/gi, '');
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBYztJQUN2QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBWTtJQUM1QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBkb21haW5Bc0lkKGRvbWFpbjogc3RyaW5nKSB7XG4gIHJldHVybiBkb21haW4ucmVwbGFjZSgvXFwuL2csICctJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhblJlc291cmNlTmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIG5hbWUucmVwbGFjZSgvW14wLTlhLXpfXFwtXS9naSwgJycpO1xufVxuIl19
@@ -0,0 +1 @@
1
+ export declare const TOOL_VERSION: string;
@@ -0,0 +1,5 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ const pkg = JSON.parse(readFileSync(resolve(import.meta.dirname, '../../package.json'), 'utf8'));
4
+ export const TOOL_VERSION = pkg.version;
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLG9CQUFvQixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUVqRyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLE9BQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuXG5jb25zdCBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhyZXNvbHZlKGltcG9ydC5tZXRhLmRpcm5hbWUsICcuLi8uLi9wYWNrYWdlLmpzb24nKSwgJ3V0ZjgnKSk7XG5cbmV4cG9ydCBjb25zdCBUT09MX1ZFUlNJT04gPSBwa2cudmVyc2lvbiBhcyBzdHJpbmc7Il19
@@ -0,0 +1,17 @@
1
+ import { Stack, StackProps } from 'aws-cdk-lib/core';
2
+ import { Construct } from 'constructs';
3
+ import { CodeBuildPipelineProject, CodeBuildPipelineProjectProps } from '../../constructs/codebuild.js';
4
+ import { CodePipelineProject, AddSourceStageParams, AddBuildStageParams } from '../../constructs/codepipeline.js';
5
+ export interface CodePipelineStackProps {
6
+ pipelineName?: string;
7
+ sourceStage: AddSourceStageParams;
8
+ buildStage?: Pick<AddBuildStageParams, 'stageName' | 'environmentVariables'>;
9
+ codeBuildProject?: Omit<CodeBuildPipelineProjectProps, 'destroy' | 'tags'>;
10
+ destroy?: boolean;
11
+ tags?: Record<string, string>;
12
+ }
13
+ export declare class CodePipelineStack extends Stack {
14
+ readonly codeBuildPipelineProject: CodeBuildPipelineProject;
15
+ readonly codePipelineProject: CodePipelineProject;
16
+ constructor(scope: Construct, id: string, props: CodePipelineStackProps & StackProps);
17
+ }
@@ -0,0 +1,28 @@
1
+ import { Stack } from 'aws-cdk-lib/core';
2
+ import { CodeBuildPipelineProject } from '../../constructs/codebuild.js';
3
+ import { CodePipelineProject } from '../../constructs/codepipeline.js';
4
+ import { addEvoStackTags } from "../../lib/tags.js";
5
+ export class CodePipelineStack extends Stack {
6
+ codeBuildPipelineProject;
7
+ codePipelineProject;
8
+ constructor(scope, id, props) {
9
+ super(scope, id, props);
10
+ addEvoStackTags(this, 'CodePipelineStack');
11
+ this.codeBuildPipelineProject = new CodeBuildPipelineProject(this, 'CodeBuildPipelineProject', {
12
+ ...(props.codeBuildProject ?? {}),
13
+ destroy: props.destroy
14
+ });
15
+ this.codePipelineProject = new CodePipelineProject(this, 'CodePipelineProject', {
16
+ pipelineName: props.pipelineName,
17
+ destroy: props.destroy
18
+ });
19
+ const sourceArtifact = this.codePipelineProject.addSourceStage(props.sourceStage);
20
+ this.codePipelineProject.addBuildStage({
21
+ stageName: props.buildStage?.stageName,
22
+ codeBuildProject: this.codeBuildPipelineProject.project,
23
+ sourceArtifact: sourceArtifact,
24
+ environmentVariables: props.buildStage?.environmentVariables
25
+ });
26
+ }
27
+ }
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXBpcGVsaW5lLXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0YWNrcy93ZWItc3RhdGljLXNlcnZlcmxlc3MvY29kZXBpcGVsaW5lLXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsd0JBQXdCLEVBQWlDLE1BQU0sK0JBQStCLENBQUM7QUFDeEcsT0FBTyxFQUFFLG1CQUFtQixFQUE2QyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQVVwRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsS0FBSztJQUMxQix3QkFBd0IsQ0FBMkI7SUFDbkQsbUJBQW1CLENBQXNCO0lBRXpELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEM7UUFDbEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEIsZUFBZSxDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLHdCQUF3QixDQUFDLElBQUksRUFBRSwwQkFBMEIsRUFBRTtZQUM3RixHQUFHLENBQUMsS0FBSyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztZQUNqQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87U0FDdkIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksbUJBQW1CLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFO1lBQzlFLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87U0FDdkIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFbEYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQztZQUNyQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxTQUFTO1lBQ3RDLGdCQUFnQixFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPO1lBQ3ZELGNBQWMsRUFBRSxjQUFjO1lBQzlCLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsb0JBQW9CO1NBQzdELENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IENvZGVCdWlsZFBpcGVsaW5lUHJvamVjdCwgQ29kZUJ1aWxkUGlwZWxpbmVQcm9qZWN0UHJvcHMgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RzL2NvZGVidWlsZC5qcyc7XG5pbXBvcnQgeyBDb2RlUGlwZWxpbmVQcm9qZWN0LCBBZGRTb3VyY2VTdGFnZVBhcmFtcywgQWRkQnVpbGRTdGFnZVBhcmFtcyB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdHMvY29kZXBpcGVsaW5lLmpzJztcbmltcG9ydCB7IGFkZEV2b1N0YWNrVGFncyB9IGZyb20gJy4uLy4uL2xpYi90YWdzLnRzJztcblxuZXhwb3J0IGludGVyZmFjZSBDb2RlUGlwZWxpbmVTdGFja1Byb3BzIHtcbiAgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuICBzb3VyY2VTdGFnZTogQWRkU291cmNlU3RhZ2VQYXJhbXM7XG4gIGJ1aWxkU3RhZ2U/OiBQaWNrPEFkZEJ1aWxkU3RhZ2VQYXJhbXMsICdzdGFnZU5hbWUnIHwgJ2Vudmlyb25tZW50VmFyaWFibGVzJz47XG4gIGNvZGVCdWlsZFByb2plY3Q/OiBPbWl0PENvZGVCdWlsZFBpcGVsaW5lUHJvamVjdFByb3BzLCAnZGVzdHJveScgfCAndGFncyc+LFxuICBkZXN0cm95PzogYm9vbGVhbjtcbiAgdGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5leHBvcnQgY2xhc3MgQ29kZVBpcGVsaW5lU3RhY2sgZXh0ZW5kcyBTdGFjayB7XG4gIHB1YmxpYyByZWFkb25seSBjb2RlQnVpbGRQaXBlbGluZVByb2plY3Q6IENvZGVCdWlsZFBpcGVsaW5lUHJvamVjdDtcbiAgcHVibGljIHJlYWRvbmx5IGNvZGVQaXBlbGluZVByb2plY3Q6IENvZGVQaXBlbGluZVByb2plY3Q7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvZGVQaXBlbGluZVN0YWNrUHJvcHMgJiBTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgYWRkRXZvU3RhY2tUYWdzKHRoaXMsICdDb2RlUGlwZWxpbmVTdGFjaycpO1xuXG4gICAgdGhpcy5jb2RlQnVpbGRQaXBlbGluZVByb2plY3QgPSBuZXcgQ29kZUJ1aWxkUGlwZWxpbmVQcm9qZWN0KHRoaXMsICdDb2RlQnVpbGRQaXBlbGluZVByb2plY3QnLCB7XG4gICAgICAuLi4ocHJvcHMuY29kZUJ1aWxkUHJvamVjdCA/PyB7fSksXG4gICAgICBkZXN0cm95OiBwcm9wcy5kZXN0cm95XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvZGVQaXBlbGluZVByb2plY3QgPSBuZXcgQ29kZVBpcGVsaW5lUHJvamVjdCh0aGlzLCAnQ29kZVBpcGVsaW5lUHJvamVjdCcsIHtcbiAgICAgIHBpcGVsaW5lTmFtZTogcHJvcHMucGlwZWxpbmVOYW1lLFxuICAgICAgZGVzdHJveTogcHJvcHMuZGVzdHJveVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc291cmNlQXJ0aWZhY3QgPSB0aGlzLmNvZGVQaXBlbGluZVByb2plY3QuYWRkU291cmNlU3RhZ2UocHJvcHMuc291cmNlU3RhZ2UpO1xuXG4gICAgdGhpcy5jb2RlUGlwZWxpbmVQcm9qZWN0LmFkZEJ1aWxkU3RhZ2Uoe1xuICAgICAgc3RhZ2VOYW1lOiBwcm9wcy5idWlsZFN0YWdlPy5zdGFnZU5hbWUsXG4gICAgICBjb2RlQnVpbGRQcm9qZWN0OiB0aGlzLmNvZGVCdWlsZFBpcGVsaW5lUHJvamVjdC5wcm9qZWN0LFxuICAgICAgc291cmNlQXJ0aWZhY3Q6IHNvdXJjZUFydGlmYWN0LFxuICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHByb3BzLmJ1aWxkU3RhZ2U/LmVudmlyb25tZW50VmFyaWFibGVzXG4gICAgfSk7XG4gIH1cbn0iXX0=
@@ -0,0 +1,43 @@
1
+ import { Stack, StackProps } from 'aws-cdk-lib/core';
2
+ import { Construct } from 'constructs';
3
+ import { Certificate } from "aws-cdk-lib/aws-certificatemanager";
4
+ import { Distribution, Function, IResponseHeadersPolicy, ResponseHeadersPolicyProps } from 'aws-cdk-lib/aws-cloudfront';
5
+ import { ARecord, AaaaRecord } from "aws-cdk-lib/aws-route53";
6
+ import { Bucket } from "aws-cdk-lib/aws-s3";
7
+ import { CfnWebACL } from 'aws-cdk-lib/aws-wafv2';
8
+ import { CloudFrontFunctionRedirects } from '../../constructs/cloudfront.js';
9
+ import { SsmStringParameter } from '../../lib/types.ts';
10
+ export interface BasicAuthCredentials {
11
+ user: string;
12
+ password: string;
13
+ }
14
+ type AWSManagedResponseHeadersPolicy = 'CORS_ALLOW_ALL_ORIGINS' | 'CORS_ALLOW_ALL_ORIGINS_AND_SECURITY_HEADERS' | 'CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT' | 'CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT_AND_SECURITY_HEADERS' | 'SECURITY_HEADERS';
15
+ type UUID = `${string}-${string}-${string}-${string}-${string}`;
16
+ export interface WebGlobalStackProps {
17
+ envType: 'NOT_PROD' | 'PROD';
18
+ description?: string;
19
+ bucketName?: string;
20
+ hostedZone: string;
21
+ domainName: string;
22
+ basicAuth?: string | BasicAuthCredentials | SsmStringParameter;
23
+ viewerRequestResponse?: string;
24
+ redirects?: CloudFrontFunctionRedirects;
25
+ redirectsCsvPath?: string;
26
+ webAcl?: boolean | string | SsmStringParameter;
27
+ responseHeadersPolicy?: false | AWSManagedResponseHeadersPolicy | UUID | SsmStringParameter;
28
+ responseHeadersPolicyProps?: ResponseHeadersPolicyProps;
29
+ destroy?: boolean;
30
+ tags?: Record<string, string>;
31
+ }
32
+ export declare class WebGlobalStack extends Stack {
33
+ readonly sslCertificate: Certificate;
34
+ readonly s3Bucket: Bucket;
35
+ readonly cloudFrontFunction: Function;
36
+ readonly cloudFrontDistribution: Distribution;
37
+ readonly webAcl: CfnWebACL | undefined;
38
+ readonly responseHeadersPolicy: IResponseHeadersPolicy | undefined;
39
+ readonly aRecord: ARecord;
40
+ readonly aaaaRecord: AaaaRecord;
41
+ constructor(scope: Construct, id: string, props: WebGlobalStackProps & StackProps);
42
+ }
43
+ export {};