@cloudsnorkel/cdk-github-runners 0.14.18 → 0.14.19

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 (44) hide show
  1. package/.jsii +626 -140
  2. package/API.md +426 -17
  3. package/README.md +32 -2
  4. package/assets/providers/ami-root-device.lambda/index.js +11 -0
  5. package/lib/access.js +1 -1
  6. package/lib/image-builders/api.js +1 -1
  7. package/lib/image-builders/aws-image-builder/ami.d.ts +3 -2
  8. package/lib/image-builders/aws-image-builder/ami.js +9 -34
  9. package/lib/image-builders/aws-image-builder/base-image.d.ts +118 -0
  10. package/lib/image-builders/aws-image-builder/base-image.js +130 -0
  11. package/lib/image-builders/aws-image-builder/builder.js +17 -5
  12. package/lib/image-builders/aws-image-builder/container.d.ts +2 -1
  13. package/lib/image-builders/aws-image-builder/container.js +7 -6
  14. package/lib/image-builders/aws-image-builder/deprecated/ami.js +1 -1
  15. package/lib/image-builders/aws-image-builder/deprecated/container.js +1 -1
  16. package/lib/image-builders/aws-image-builder/deprecated/linux-components.js +1 -1
  17. package/lib/image-builders/aws-image-builder/deprecated/windows-components.js +1 -1
  18. package/lib/image-builders/aws-image-builder/index.d.ts +1 -0
  19. package/lib/image-builders/aws-image-builder/index.js +2 -1
  20. package/lib/image-builders/codebuild-deprecated.js +1 -1
  21. package/lib/image-builders/codebuild.js +15 -4
  22. package/lib/image-builders/common.d.ts +22 -3
  23. package/lib/image-builders/common.js +1 -1
  24. package/lib/image-builders/components.d.ts +1 -1
  25. package/lib/image-builders/components.js +31 -21
  26. package/lib/image-builders/static.js +4 -3
  27. package/lib/providers/ami-root-device.lambda.js +12 -1
  28. package/lib/providers/codebuild.js +4 -4
  29. package/lib/providers/common.js +3 -3
  30. package/lib/providers/composite.js +5 -5
  31. package/lib/providers/ec2.js +5 -5
  32. package/lib/providers/ecs.js +3 -3
  33. package/lib/providers/fargate.js +4 -4
  34. package/lib/providers/lambda.js +4 -4
  35. package/lib/runner.d.ts +24 -5
  36. package/lib/runner.js +46 -9
  37. package/lib/secrets.js +1 -1
  38. package/lib/utils.d.ts +13 -0
  39. package/lib/utils.js +47 -1
  40. package/lib/webhook-redelivery.d.ts +11 -0
  41. package/lib/webhook-redelivery.js +3 -1
  42. package/lib/webhook.d.ts +10 -0
  43. package/lib/webhook.js +3 -1
  44. package/package.json +1 -1
@@ -1,5 +1,6 @@
1
1
  import * as cdk from 'aws-cdk-lib';
2
2
  import { Construct } from 'constructs';
3
+ import { BaseImage } from './base-image';
3
4
  import { ImageBuilderComponent } from './builder';
4
5
  import { Architecture, Os } from '../../providers';
5
6
  /**
@@ -19,7 +20,7 @@ interface AmiRecipeProperties {
19
20
  /**
20
21
  * Base AMI to use for the new runner AMI.
21
22
  */
22
- readonly baseAmi: string;
23
+ readonly baseAmi: BaseImage;
23
24
  /**
24
25
  * Storage size for the builder.
25
26
  */
@@ -51,5 +52,5 @@ export declare class AmiRecipe extends cdk.Resource {
51
52
  *
52
53
  * @internal
53
54
  */
54
- export declare function defaultBaseAmi(scope: Construct, os: Os, architecture: Architecture): string;
55
+ export declare function defaultBaseAmi(scope: Construct, os: Os, architecture: Architecture): BaseImage;
55
56
  export {};
@@ -4,6 +4,7 @@ exports.AmiRecipe = void 0;
4
4
  exports.defaultBaseAmi = defaultBaseAmi;
5
5
  const cdk = require("aws-cdk-lib");
6
6
  const aws_cdk_lib_1 = require("aws-cdk-lib");
7
+ const base_image_1 = require("./base-image");
7
8
  const providers_1 = require("../../providers");
8
9
  const common_1 = require("../common");
9
10
  /**
@@ -21,7 +22,7 @@ class AmiRecipe extends cdk.Resource {
21
22
  });
22
23
  const blockDeviceMappings = props.storageSize ? [
23
24
  {
24
- deviceName: (0, providers_1.amiRootDevice)(this, props.baseAmi).ref,
25
+ deviceName: (0, providers_1.amiRootDevice)(this, props.baseAmi.image).ref,
25
26
  ebs: {
26
27
  volumeSize: props.storageSize.toGibibytes(),
27
28
  deleteOnTermination: true,
@@ -42,7 +43,7 @@ class AmiRecipe extends cdk.Resource {
42
43
  const recipe = new aws_cdk_lib_1.aws_imagebuilder.CfnImageRecipe(this, 'Recipe', {
43
44
  name: this.name,
44
45
  version: '1.0.x',
45
- parentImage: props.baseAmi,
46
+ parentImage: props.baseAmi.image,
46
47
  components,
47
48
  workingDirectory,
48
49
  tags: props.tags,
@@ -59,7 +60,6 @@ exports.AmiRecipe = AmiRecipe;
59
60
  * @internal
60
61
  */
61
62
  function defaultBaseAmi(scope, os, architecture) {
62
- const stack = cdk.Stack.of(scope);
63
63
  let arch;
64
64
  if (architecture.is(providers_1.Architecture.X86_64)) {
65
65
  arch = 'x86';
@@ -71,45 +71,20 @@ function defaultBaseAmi(scope, os, architecture) {
71
71
  throw new Error(`Unsupported architecture for base AMI: ${architecture.name}`);
72
72
  }
73
73
  if (os.is(providers_1.Os.LINUX_UBUNTU) || os.is(providers_1.Os.LINUX_UBUNTU_2204) || os.is(providers_1.Os.LINUX)) {
74
- return stack.formatArn({
75
- service: 'imagebuilder',
76
- resource: 'image',
77
- account: 'aws',
78
- resourceName: `ubuntu-server-22-lts-${arch}/x.x.x`,
79
- });
74
+ return base_image_1.BaseImage.fromImageBuilder(scope, `ubuntu-server-22-lts-${arch}`);
80
75
  }
81
76
  if (os.is(providers_1.Os.LINUX_UBUNTU_2404)) {
82
- return stack.formatArn({
83
- service: 'imagebuilder',
84
- resource: 'image',
85
- account: 'aws',
86
- resourceName: `ubuntu-server-24-lts-${arch}/x.x.x`,
87
- });
77
+ return base_image_1.BaseImage.fromImageBuilder(scope, `ubuntu-server-24-lts-${arch}`);
88
78
  }
89
79
  if (os.is(providers_1.Os.LINUX_AMAZON_2)) {
90
- return stack.formatArn({
91
- service: 'imagebuilder',
92
- resource: 'image',
93
- account: 'aws',
94
- resourceName: `amazon-linux-2-${arch}/x.x.x`,
95
- });
80
+ return base_image_1.BaseImage.fromImageBuilder(scope, `amazon-linux-2-${arch}`);
96
81
  }
97
82
  if (os.is(providers_1.Os.LINUX_AMAZON_2023)) {
98
- return stack.formatArn({
99
- service: 'imagebuilder',
100
- resource: 'image',
101
- account: 'aws',
102
- resourceName: `amazon-linux-2023-${arch}/x.x.x`,
103
- });
83
+ return base_image_1.BaseImage.fromImageBuilder(scope, `amazon-linux-2023-${arch}`);
104
84
  }
105
85
  if (os.is(providers_1.Os.WINDOWS)) {
106
- return stack.formatArn({
107
- service: 'imagebuilder',
108
- resource: 'image',
109
- account: 'aws',
110
- resourceName: `windows-server-2022-english-full-base-${arch}/x.x.x`,
111
- });
86
+ return base_image_1.BaseImage.fromImageBuilder(scope, `windows-server-2022-english-full-base-${arch}`);
112
87
  }
113
88
  throw new Error(`OS ${os.name} not supported for AMI runner image`);
114
89
  }
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1pLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ltYWdlLWJ1aWxkZXJzL2F3cy1pbWFnZS1idWlsZGVyL2FtaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF3R0Esd0NBMERDO0FBbEtELG1DQUFtQztBQUNuQyw2Q0FBK0Q7QUFHL0QsK0NBQWtFO0FBQ2xFLHNDQUFtRDtBQXVDbkQ7Ozs7R0FJRztBQUNILE1BQWEsU0FBVSxTQUFRLEdBQUcsQ0FBQyxRQUFRO0lBS3pDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNoRCxPQUFPO2dCQUNMLFlBQVksRUFBRSxTQUFTLENBQUMsR0FBRzthQUM1QixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzlDO2dCQUNFLFVBQVUsRUFBRSxJQUFBLHlCQUFhLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHO2dCQUNsRCxHQUFHLEVBQUU7b0JBQ0gsVUFBVSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO29CQUMzQyxtQkFBbUIsRUFBRSxJQUFJO2lCQUMxQjthQUNGO1NBQ0YsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFBLCtCQUFzQixFQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpDLElBQUksZ0JBQWdCLENBQUM7UUFDckIsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzlCLGdCQUFnQixHQUFHLGNBQWMsQ0FBQztRQUNwQyxDQUFDO2FBQU0s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Q0FBQztRQUNoQyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDckIsT0FBTyxFQUFFLGNBQWM7WUFDdkIsUUFBUSxFQUFFLE9BQU87WUFDakIsT0FBTyxFQUFFLEtBQUs7WUFDZCxZQUFZLEVBQUUscUJBQXFCLElBQUksUUFBUTtTQUNoRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLGNBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUNyQixPQUFPLEVBQUUsY0FBYztZQUN2QixRQUFRLEVBQUUsT0FBTztZQUNqQixPQUFPLEVBQUUsS0FBSztZQUNkLFlBQVksRUFBRSx5Q0FBeUMsSUFBSSxRQUFRO1NBQ3BFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUkscUNBQXFDLENBQUMsQ0FBQztBQUN0RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IGF3c19pbWFnZWJ1aWxkZXIgYXMgaW1hZ2VidWlsZGVyIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJbWFnZUJ1aWxkZXJDb21wb25lbnQgfSBmcm9tICcuL2J1aWxkZXInO1xuaW1wb3J0IHsgYW1pUm9vdERldmljZSwgQXJjaGl0ZWN0dXJlLCBPcyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycyc7XG5pbXBvcnQgeyB1bmlxdWVJbWFnZUJ1aWxkZXJOYW1lIH0gZnJvbSAnLi4vY29tbW9uJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBBbWlSZWNpcGUgY29uc3RydWN0LlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgQW1pUmVjaXBlUHJvcGVydGllcyB7XG4gIC8qKlxuICAgKiBUYXJnZXQgcGxhdGZvcm0uIE11c3QgbWF0Y2ggYnVpbGRlciBwbGF0Zm9ybS5cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtOiAnTGludXgnIHwgJ1dpbmRvd3MnO1xuXG4gIC8qKlxuICAgKiBUYXJnZXQgYXJjaGl0ZWN0dXJlLiBNdXN0IG1hdGNoIGJ1aWxkZXIgcGxhdGZvcm0uXG4gICAqL1xuICByZWFkb25seSBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZTtcblxuICAvKipcbiAgICogQmFzZSBBTUkgdG8gdXNlIGZvciB0aGUgbmV3IHJ1bm5lciBBTUkuXG4gICAqL1xuICByZWFkb25seSBiYXNlQW1pOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN0b3JhZ2Ugc2l6ZSBmb3IgdGhlIGJ1aWxkZXIuXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlU2l6ZT86IGNkay5TaXplO1xuXG4gIC8qKlxuICAgKiBDb21wb25lbnRzIHRvIGFkZCB0byB0YXJnZXQgY29udGFpbmVyIGltYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50czogSW1hZ2VCdWlsZGVyQ29tcG9uZW50W107XG5cbiAgLyoqXG4gICAqIFRhZ3MgdG8gYXBwbHkgdG8gdGhlIHJlY2lwZSBhbmQgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSB0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIEltYWdlIGJ1aWxkZXIgcmVjaXBlIGZvciBBbWF6b24gTWFjaGluZSBJbWFnZSAoQU1JKS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIEFtaVJlY2lwZSBleHRlbmRzIGNkay5SZXNvdXJjZSB7XG4gIHB1YmxpYyByZWFkb25seSBhcm46IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQW1pUmVjaXBlUHJvcGVydGllcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBsZXQgY29tcG9uZW50cyA9IHByb3BzLmNvbXBvbmVudHMubWFwKGNvbXBvbmVudCA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21wb25lbnRBcm46IGNvbXBvbmVudC5hcm4sXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3QgYmxvY2tEZXZpY2VNYXBwaW5ncyA9IHByb3BzLnN0b3JhZ2VTaXplID8gW1xuICAgICAge1xuICAgICAgICBkZXZpY2VOYW1lOiBhbWlSb290RGV2aWNlKHRoaXMsIHByb3BzLmJhc2VBbWkpLnJlZixcbiAgICAgICAgZWJzOiB7XG4gICAgICAgICAgdm9sdW1lU2l6ZTogcHJvcHMuc3RvcmFnZVNpemUudG9HaWJpYnl0ZXMoKSxcbiAgICAgICAgICBkZWxldGVPblRlcm1pbmF0aW9uOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdIDogdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5uYW1lID0gdW5pcXVlSW1hZ2VCdWlsZGVyTmFtZSh0aGlzKTtcblxuICAgIGxldCB3b3JraW5nRGlyZWN0b3J5O1xuICAgIGlmIChwcm9wcy5wbGF0Zm9ybSA9PSAnTGludXgnKSB7XG4gICAgICB3b3JraW5nRGlyZWN0b3J5ID0gJy9ob21lL3J1bm5lcic7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5wbGF0Zm9ybSA9PSAnV2luZG93cycpIHtcbiAgICAgIHdvcmtpbmdEaXJlY3RvcnkgPSAnQzovJzsgLy8gbXVzdCBleGlzdCBvciBJbWFnZSBCdWlsZGVyIGZhaWxzIGFuZCBtdXN0IG5vdCBiZSBlbXB0eSBvciBnaXQgd2lsbCBzdGFsbCBpbnN0YWxsaW5nIGZyb20gdGhlIGRlZmF1bHQgd2luZG93c1xcc3lzdGVtMzJcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBBTUkgcmVjaXBlIHBsYXRmb3JtOiAke3Byb3BzLnBsYXRmb3JtfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY2lwZSA9IG5ldyBpbWFnZWJ1aWxkZXIuQ2ZuSW1hZ2VSZWNpcGUodGhpcywgJ1JlY2lwZScsIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHZlcnNpb246ICcxLjAueCcsXG4gICAgICBwYXJlbnRJbWFnZTogcHJvcHMuYmFzZUFtaSxcbiAgICAgIGNvbXBvbmVudHMsXG4gICAgICB3b3JraW5nRGlyZWN0b3J5LFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIGJsb2NrRGV2aWNlTWFwcGluZ3MsXG4gICAgfSk7XG5cbiAgICB0aGlzLmFybiA9IHJlY2lwZS5hdHRyQXJuO1xuICAgIHRoaXMudmVyc2lvbiA9IHJlY2lwZS5nZXRBdHQoJ1ZlcnNpb24nLCBjZGsuUmVzb2x1dGlvblR5cGVIaW50LlNUUklORykudG9TdHJpbmcoKTtcbiAgfVxufVxuXG4vKipcbiAqIERlZmF1bHQgYmFzZSBBTUkgZm9yIGdpdmVuIE9TIGFuZCBhcmNoaXRlY3R1cmUuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0QmFzZUFtaShzY29wZTogQ29uc3RydWN0LCBvczogT3MsIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlKSB7XG4gIGNvbnN0IHN0YWNrID0gY2RrLlN0YWNrLm9mKHNjb3BlKTtcblxuICBsZXQgYXJjaDtcbiAgaWYgKGFyY2hpdGVjdHVyZS5pcyhBcmNoaXRlY3R1cmUuWDg2XzY0KSkge1xuICAgIGFyY2ggPSAneDg2JztcbiAgfSBlbHNlIGlmIChhcmNoaXRlY3R1cmUuaXMoQXJjaGl0ZWN0dXJlLkFSTTY0KSkge1xuICAgIGFyY2ggPSAnYXJtNjQnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlIGZvciBiYXNlIEFNSTogJHthcmNoaXRlY3R1cmUubmFtZX1gKTtcbiAgfVxuXG4gIGlmIChvcy5pcyhPcy5MSU5VWF9VQlVOVFUpIHx8IG9zLmlzKE9zLkxJTlVYX1VCVU5UVV8yMjA0KSB8fCBvcy5pcyhPcy5MSU5VWCkpIHtcbiAgICByZXR1cm4gc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgcmVzb3VyY2U6ICdpbWFnZScsXG4gICAgICBhY2NvdW50OiAnYXdzJyxcbiAgICAgIHJlc291cmNlTmFtZTogYHVidW50dS1zZXJ2ZXItMjItbHRzLSR7YXJjaH0veC54LnhgLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKG9zLmlzKE9zLkxJTlVYX1VCVU5UVV8yNDA0KSkge1xuICAgIHJldHVybiBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICByZXNvdXJjZTogJ2ltYWdlJyxcbiAgICAgIGFjY291bnQ6ICdhd3MnLFxuICAgICAgcmVzb3VyY2VOYW1lOiBgdWJ1bnR1LXNlcnZlci0yNC1sdHMtJHthcmNofS94LngueGAsXG4gICAgfSk7XG4gIH1cblxuICBpZiAob3MuaXMoT3MuTElOVVhfQU1BWk9OXzIpKSB7XG4gICAgcmV0dXJuIHN0YWNrLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgIHJlc291cmNlOiAnaW1hZ2UnLFxuICAgICAgYWNjb3VudDogJ2F3cycsXG4gICAgICByZXNvdXJjZU5hbWU6IGBhbWF6b24tbGludXgtMi0ke2FyY2h9L3gueC54YCxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChvcy5pcyhPcy5MSU5VWF9BTUFaT05fMjAyMykpIHtcbiAgICByZXR1cm4gc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgcmVzb3VyY2U6ICdpbWFnZScsXG4gICAgICBhY2NvdW50OiAnYXdzJyxcbiAgICAgIHJlc291cmNlTmFtZTogYGFtYXpvbi1saW51eC0yMDIzLSR7YXJjaH0veC54LnhgLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKG9zLmlzKE9zLldJTkRPV1MpKSB7XG4gICAgcmV0dXJuIHN0YWNrLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgIHJlc291cmNlOiAnaW1hZ2UnLFxuICAgICAgYWNjb3VudDogJ2F3cycsXG4gICAgICByZXNvdXJjZU5hbWU6IGB3aW5kb3dzLXNlcnZlci0yMDIyLWVuZ2xpc2gtZnVsbC1iYXNlLSR7YXJjaH0veC54LnhgLFxuICAgIH0pO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBPUyAke29zLm5hbWV9IG5vdCBzdXBwb3J0ZWQgZm9yIEFNSSBydW5uZXIgaW1hZ2VgKTtcbn1cblxuIl19
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1pLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ltYWdlLWJ1aWxkZXJzL2F3cy1pbWFnZS1idWlsZGVyL2FtaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF5R0Esd0NBK0JDO0FBeElELG1DQUFtQztBQUNuQyw2Q0FBK0Q7QUFFL0QsNkNBQXlDO0FBRXpDLCtDQUFrRTtBQUNsRSxzQ0FBbUQ7QUF1Q25EOzs7O0dBSUc7QUFDSCxNQUFhLFNBQVUsU0FBUSxHQUFHLENBQUMsUUFBUTtJQUt6QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDaEQsT0FBTztnQkFDTCxZQUFZLEVBQUUsU0FBUyxDQUFDLEdBQUc7YUFDNUIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUM5QztnQkFDRSxVQUFVLEVBQUUsSUFBQSx5QkFBYSxFQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUc7Z0JBQ3hELEdBQUcsRUFBRTtvQkFDSCxVQUFVLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7b0JBQzNDLG1CQUFtQixFQUFFLElBQUk7aUJBQzFCO2FBQ0Y7U0FDRixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUEsK0JBQXNCLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFFekMsSUFBSSxnQkFBZ0IsQ0FBQztRQUNyQixJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksT0FBTyxFQUFFLENBQUM7WUFDOUIsZ0JBQWdCLEdBQUcsY0FB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LEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLHFDQUFxQyxDQUFDLENBQUM7QUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBhd3NfaW1hZ2VidWlsZGVyIGFzIGltYWdlYnVpbGRlciB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQmFzZUltYWdlIH0gZnJvbSAnLi9iYXNlLWltYWdlJztcbmltcG9ydCB7IEltYWdlQnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4vYnVpbGRlcic7XG5pbXBvcnQgeyBhbWlSb290RGV2aWNlLCBBcmNoaXRlY3R1cmUsIE9zIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzJztcbmltcG9ydCB7IHVuaXF1ZUltYWdlQnVpbGRlck5hbWUgfSBmcm9tICcuLi9jb21tb24nO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIEFtaVJlY2lwZSBjb25zdHJ1Y3QuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmludGVyZmFjZSBBbWlSZWNpcGVQcm9wZXJ0aWVzIHtcbiAgLyoqXG4gICAqIFRhcmdldCBwbGF0Zm9ybS4gTXVzdCBtYXRjaCBidWlsZGVyIHBsYXRmb3JtLlxuICAgKi9cbiAgcmVhZG9ubHkgcGxhdGZvcm06ICdMaW51eCcgfCAnV2luZG93cyc7XG5cbiAgLyoqXG4gICAqIFRhcmdldCBhcmNoaXRlY3R1cmUuIE11c3QgbWF0Y2ggYnVpbGRlciBwbGF0Zm9ybS5cbiAgICovXG4gIHJlYWRvbmx5IGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlO1xuXG4gIC8qKlxuICAgKiBCYXNlIEFNSSB0byB1c2UgZm9yIHRoZSBuZXcgcnVubmVyIEFNSS5cbiAgICovXG4gIHJlYWRvbmx5IGJhc2VBbWk6IEJhc2VJbWFnZTtcblxuICAvKipcbiAgICogU3RvcmFnZSBzaXplIGZvciB0aGUgYnVpbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2VTaXplPzogY2RrLlNpemU7XG5cbiAgLyoqXG4gICAqIENvbXBvbmVudHMgdG8gYWRkIHRvIHRhcmdldCBjb250YWluZXIgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRzOiBJbWFnZUJ1aWxkZXJDb21wb25lbnRbXTtcblxuICAvKipcbiAgICogVGFncyB0byBhcHBseSB0byB0aGUgcmVjaXBlIGFuZCBpbWFnZS5cbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogSW1hZ2UgYnVpbGRlciByZWNpcGUgZm9yIEFtYXpvbiBNYWNoaW5lIEltYWdlIChBTUkpLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgQW1pUmVjaXBlIGV4dGVuZHMgY2RrLlJlc291cmNlIHtcbiAgcHVibGljIHJlYWRvbmx5IGFybjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBbWlSZWNpcGVQcm9wZXJ0aWVzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGxldCBjb21wb25lbnRzID0gcHJvcHMuY29tcG9uZW50cy5tYXAoY29tcG9uZW50ID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbXBvbmVudEFybjogY29tcG9uZW50LmFybixcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBibG9ja0RldmljZU1hcHBpbmdzID0gcHJvcHMuc3RvcmFnZVNpemUgPyBbXG4gICAgICB7XG4gICAgICAgIGRldmljZU5hbWU6IGFtaVJvb3REZXZpY2UodGhpcywgcHJvcHMuYmFzZUFtaS5pbWFnZSkucmVmLFxuICAgICAgICBlYnM6IHtcbiAgICAgICAgICB2b2x1bWVTaXplOiBwcm9wcy5zdG9yYWdlU2l6ZS50b0dpYmlieXRlcygpLFxuICAgICAgICAgIGRlbGV0ZU9uVGVybWluYXRpb246IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0gOiB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLm5hbWUgPSB1bmlxdWVJbWFnZUJ1aWxkZXJOYW1lKHRoaXMpO1xuXG4gICAgbGV0IHdvcmtpbmdEaXJlY3Rvcnk7XG4gICAgaWYgKHByb3BzLnBsYXRmb3JtID09ICdMaW51eCcpIHtcbiAgICAgIHdvcmtpbmdEaXJlY3RvcnkgPSAnL2hvbWUvcnVubmVyJztcbiAgICB9IGVsc2UgaWYgKHByb3BzLnBsYXRmb3JtID09ICdXaW5kb3dzJykge1xuICAgICAgd29ya2luZ0RpcmVjdG9yeSA9ICdDOi8nOyAvLyBtdXN0IGV4aXN0IG9yIEltYWdlIEJ1aWxkZXIgZmFpbHMgYW5kIG11c3Qgbm90IGJlIGVtcHR5IG9yIGdpdCB3aWxsIHN0YWxsIGluc3RhbGxpbmcgZnJvbSB0aGUgZGVmYXVsdCB3aW5kb3dzXFxzeXN0ZW0zMlxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEFNSSByZWNpcGUgcGxhdGZvcm06ICR7cHJvcHMucGxhdGZvcm19YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVjaXBlID0gbmV3IGltYWdlYnVpbGRlci5DZm5JbWFnZVJlY2lwZSh0aGlzLCAnUmVjaXBlJywge1xuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgdmVyc2lvbjogJzEuMC54JyxcbiAgICAgIHBhcmVudEltYWdlOiBwcm9wcy5iYXNlQW1pLmltYWdlLFxuICAgICAgY29tcG9uZW50cyxcbiAgICAgIHdvcmtpbmdEaXJlY3RvcnksXG4gICAgICB0YWdzOiBwcm9wcy50YWdzLFxuICAgICAgYmxvY2tEZXZpY2VNYXBwaW5ncyxcbiAgICB9KTtcblxuICAgIHRoaXMuYXJuID0gcmVjaXBlLmF0dHJBcm47XG4gICAgdGhpcy52ZXJzaW9uID0gcmVjaXBlLmdldEF0dCgnVmVyc2lvbicsIGNkay5SZXNvbHV0aW9uVHlwZUhpbnQuU1RSSU5HKS50b1N0cmluZygpO1xuICB9XG59XG5cbi8qKlxuICogRGVmYXVsdCBiYXNlIEFNSSBmb3IgZ2l2ZW4gT1MgYW5kIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRCYXNlQW1pKHNjb3BlOiBDb25zdHJ1Y3QsIG9zOiBPcywgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUpOiBCYXNlSW1hZ2Uge1xuICBsZXQgYXJjaDtcbiAgaWYgKGFyY2hpdGVjdHVyZS5pcyhBcmNoaXRlY3R1cmUuWDg2XzY0KSkge1xuICAgIGFyY2ggPSAneDg2JztcbiAgfSBlbHNlIGlmIChhcmNoaXRlY3R1cmUuaXMoQXJjaGl0ZWN0dXJlLkFSTTY0KSkge1xuICAgIGFyY2ggPSAnYXJtNjQnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlIGZvciBiYXNlIEFNSTogJHthcmNoaXRlY3R1cmUubmFtZX1gKTtcbiAgfVxuXG4gIGlmIChvcy5pcyhPcy5MSU5VWF9VQlVOVFUpIHx8IG9zLmlzKE9zLkxJTlVYX1VCVU5UVV8yMjA0KSB8fCBvcy5pcyhPcy5MSU5VWCkpIHtcbiAgICByZXR1cm4gQmFzZUltYWdlLmZyb21JbWFnZUJ1aWxkZXIoc2NvcGUsIGB1YnVudHUtc2VydmVyLTIyLWx0cy0ke2FyY2h9YCk7XG4gIH1cblxuICBpZiAob3MuaXMoT3MuTElOVVhfVUJVTlRVXzI0MDQpKSB7XG4gICAgcmV0dXJuIEJhc2VJbWFnZS5mcm9tSW1hZ2VCdWlsZGVyKHNjb3BlLCBgdWJ1bnR1LXNlcnZlci0yNC1sdHMtJHthcmNofWApO1xuICB9XG5cbiAgaWYgKG9zLmlzKE9zLkxJTlVYX0FNQVpPTl8yKSkge1xuICAgIHJldHVybiBCYXNlSW1hZ2UuZnJvbUltYWdlQnVpbGRlcihzY29wZSwgYGFtYXpvbi1saW51eC0yLSR7YXJjaH1gKTtcbiAgfVxuXG4gIGlmIChvcy5pcyhPcy5MSU5VWF9BTUFaT05fMjAyMykpIHtcbiAgICByZXR1cm4gQmFzZUltYWdlLmZyb21JbWFnZUJ1aWxkZXIoc2NvcGUsIGBhbWF6b24tbGludXgtMjAyMy0ke2FyY2h9YCk7XG4gIH1cblxuICBpZiAob3MuaXMoT3MuV0lORE9XUykpIHtcbiAgICByZXR1cm4gQmFzZUltYWdlLmZyb21JbWFnZUJ1aWxkZXIoc2NvcGUsIGB3aW5kb3dzLXNlcnZlci0yMDIyLWVuZ2xpc2gtZnVsbC1iYXNlLSR7YXJjaH1gKTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgT1MgJHtvcy5uYW1lfSBub3Qgc3VwcG9ydGVkIGZvciBBTUkgcnVubmVyIGltYWdlYCk7XG59XG5cbiJdfQ==
@@ -0,0 +1,118 @@
1
+ import * as ecr from 'aws-cdk-lib/aws-ecr';
2
+ import * as ssm from 'aws-cdk-lib/aws-ssm';
3
+ import { Construct } from 'constructs';
4
+ /**
5
+ * Type that can be used to specify a base image - either a string (deprecated) or a BaseImage object.
6
+ *
7
+ * To create a BaseImage object, use the static factory methods like BaseImage.fromAmiId().
8
+ *
9
+ * Note: String support is deprecated and will be removed in a future version. Use BaseImage static factory methods instead.
10
+ */
11
+ export type BaseImageInput = string | BaseImage;
12
+ /**
13
+ * Represents a base image that is used to start from in EC2 Image Builder image builds.
14
+ *
15
+ * This class is adapted from AWS CDK's BaseImage class to support both string and object inputs.
16
+ */
17
+ export declare class BaseImage {
18
+ /**
19
+ * The AMI ID to use as a base image in an image recipe
20
+ *
21
+ * @param amiId The AMI ID to use as the base image
22
+ */
23
+ static fromAmiId(amiId: string): BaseImage;
24
+ /**
25
+ * An AWS-provided EC2 Image Builder image to use as a base image in an image recipe.
26
+ *
27
+ * This constructs an Image Builder ARN for AWS-provided images like `ubuntu-server-22-lts-x86/x.x.x`.
28
+ *
29
+ * @param scope The construct scope (used to determine the stack and region)
30
+ * @param resourceName The Image Builder resource name pattern (e.g., `ubuntu-server-22-lts-x86` or `ubuntu-server-22-lts-${arch}`)
31
+ * @param version The version pattern (defaults to `x.x.x` to use the latest version)
32
+ */
33
+ static fromImageBuilder(scope: Construct, resourceName: string, version?: string): BaseImage;
34
+ /**
35
+ * The marketplace product ID for an AMI product to use as the base image in an image recipe
36
+ *
37
+ * @param productId The Marketplace AMI product ID to use as the base image
38
+ */
39
+ static fromMarketplaceProductId(productId: string): BaseImage;
40
+ /**
41
+ * The SSM parameter to use as the base image in an image recipe
42
+ *
43
+ * @param parameter The SSM parameter to use as the base image
44
+ */
45
+ static fromSsmParameter(parameter: ssm.IParameter): BaseImage;
46
+ /**
47
+ * The parameter name for the SSM parameter to use as the base image in an image recipe
48
+ *
49
+ * @param parameterName The name of the SSM parameter to use as the base image
50
+ */
51
+ static fromSsmParameterName(parameterName: string): BaseImage;
52
+ /**
53
+ * The direct string value of the base image to use in an image recipe. This can be an EC2 Image Builder image ARN,
54
+ * an SSM parameter, an AWS Marketplace product ID, or an AMI ID.
55
+ *
56
+ * @param baseImageString The base image as a direct string value
57
+ */
58
+ static fromString(baseImageString: string): BaseImage;
59
+ /**
60
+ * The rendered base image to use
61
+ */
62
+ readonly image: string;
63
+ protected constructor(image: string);
64
+ }
65
+ /**
66
+ * Type that can be used to specify a base container image - either a string (deprecated) or a BaseContainerImage object.
67
+ *
68
+ * To create a BaseContainerImage object, use the static factory methods like BaseContainerImage.fromEcr().
69
+ *
70
+ * Note: String support is deprecated and will be removed in a future version. Use BaseContainerImage static factory methods instead.
71
+ */
72
+ export type BaseContainerImageInput = string | BaseContainerImage;
73
+ /**
74
+ * Represents a base container image that is used to start from in EC2 Image Builder container builds.
75
+ *
76
+ * This class is adapted from AWS CDK's BaseContainerImage class to support both string and object inputs.
77
+ */
78
+ export declare class BaseContainerImage {
79
+ /**
80
+ * The DockerHub image to use as the base image in a container recipe
81
+ *
82
+ * @param repository The DockerHub repository where the base image resides in
83
+ * @param tag The tag of the base image in the DockerHub repository
84
+ */
85
+ static fromDockerHub(repository: string, tag: string): BaseContainerImage;
86
+ /**
87
+ * The ECR container image to use as the base image in a container recipe
88
+ *
89
+ * @param repository The ECR repository where the base image resides in
90
+ * @param tag The tag of the base image in the ECR repository
91
+ */
92
+ static fromEcr(repository: ecr.IRepository, tag: string): BaseContainerImage;
93
+ /**
94
+ * The ECR public container image to use as the base image in a container recipe
95
+ *
96
+ * @param registryAlias The alias of the ECR public registry where the base image resides in
97
+ * @param repositoryName The name of the ECR public repository, where the base image resides in
98
+ * @param tag The tag of the base image in the ECR public repository
99
+ */
100
+ static fromEcrPublic(registryAlias: string, repositoryName: string, tag: string): BaseContainerImage;
101
+ /**
102
+ * The string value of the base image to use in a container recipe. This can be an EC2 Image Builder image ARN,
103
+ * an ECR or ECR public image, or a container URI sourced from a third-party container registry such as DockerHub.
104
+ *
105
+ * @param baseContainerImageString The base image as a direct string value
106
+ */
107
+ static fromString(baseContainerImageString: string): BaseContainerImage;
108
+ /**
109
+ * The rendered base image to use
110
+ */
111
+ readonly image: string;
112
+ /**
113
+ * The ECR repository if this image was created from an ECR repository.
114
+ * This allows automatic permission granting for CodeBuild.
115
+ */
116
+ readonly ecrRepository?: ecr.IRepository;
117
+ protected constructor(image: string, ecrRepository?: ecr.IRepository);
118
+ }
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var _a, _b;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.BaseContainerImage = exports.BaseImage = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const cdk = require("aws-cdk-lib");
7
+ /**
8
+ * Represents a base image that is used to start from in EC2 Image Builder image builds.
9
+ *
10
+ * This class is adapted from AWS CDK's BaseImage class to support both string and object inputs.
11
+ */
12
+ class BaseImage {
13
+ /**
14
+ * The AMI ID to use as a base image in an image recipe
15
+ *
16
+ * @param amiId The AMI ID to use as the base image
17
+ */
18
+ static fromAmiId(amiId) {
19
+ return new BaseImage(amiId);
20
+ }
21
+ /**
22
+ * An AWS-provided EC2 Image Builder image to use as a base image in an image recipe.
23
+ *
24
+ * This constructs an Image Builder ARN for AWS-provided images like `ubuntu-server-22-lts-x86/x.x.x`.
25
+ *
26
+ * @param scope The construct scope (used to determine the stack and region)
27
+ * @param resourceName The Image Builder resource name pattern (e.g., `ubuntu-server-22-lts-x86` or `ubuntu-server-22-lts-${arch}`)
28
+ * @param version The version pattern (defaults to `x.x.x` to use the latest version)
29
+ */
30
+ static fromImageBuilder(scope, resourceName, version = 'x.x.x') {
31
+ const stack = cdk.Stack.of(scope);
32
+ return new BaseImage(stack.formatArn({
33
+ service: 'imagebuilder',
34
+ resource: 'image',
35
+ account: 'aws',
36
+ resourceName: `${resourceName}/${version}`,
37
+ }));
38
+ }
39
+ /**
40
+ * The marketplace product ID for an AMI product to use as the base image in an image recipe
41
+ *
42
+ * @param productId The Marketplace AMI product ID to use as the base image
43
+ */
44
+ static fromMarketplaceProductId(productId) {
45
+ return new BaseImage(productId);
46
+ }
47
+ /**
48
+ * The SSM parameter to use as the base image in an image recipe
49
+ *
50
+ * @param parameter The SSM parameter to use as the base image
51
+ */
52
+ static fromSsmParameter(parameter) {
53
+ return new BaseImage(`ssm:${parameter.parameterArn}`);
54
+ }
55
+ /**
56
+ * The parameter name for the SSM parameter to use as the base image in an image recipe
57
+ *
58
+ * @param parameterName The name of the SSM parameter to use as the base image
59
+ */
60
+ static fromSsmParameterName(parameterName) {
61
+ return new BaseImage(`ssm:${parameterName}`);
62
+ }
63
+ /**
64
+ * The direct string value of the base image to use in an image recipe. This can be an EC2 Image Builder image ARN,
65
+ * an SSM parameter, an AWS Marketplace product ID, or an AMI ID.
66
+ *
67
+ * @param baseImageString The base image as a direct string value
68
+ */
69
+ static fromString(baseImageString) {
70
+ return new BaseImage(baseImageString);
71
+ }
72
+ constructor(image) {
73
+ this.image = image;
74
+ }
75
+ }
76
+ exports.BaseImage = BaseImage;
77
+ _a = JSII_RTTI_SYMBOL_1;
78
+ BaseImage[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.BaseImage", version: "0.14.19" };
79
+ /**
80
+ * Represents a base container image that is used to start from in EC2 Image Builder container builds.
81
+ *
82
+ * This class is adapted from AWS CDK's BaseContainerImage class to support both string and object inputs.
83
+ */
84
+ class BaseContainerImage {
85
+ /**
86
+ * The DockerHub image to use as the base image in a container recipe
87
+ *
88
+ * @param repository The DockerHub repository where the base image resides in
89
+ * @param tag The tag of the base image in the DockerHub repository
90
+ */
91
+ static fromDockerHub(repository, tag) {
92
+ return new BaseContainerImage(`${repository}:${tag}`);
93
+ }
94
+ /**
95
+ * The ECR container image to use as the base image in a container recipe
96
+ *
97
+ * @param repository The ECR repository where the base image resides in
98
+ * @param tag The tag of the base image in the ECR repository
99
+ */
100
+ static fromEcr(repository, tag) {
101
+ return new BaseContainerImage(repository.repositoryUriForTag(tag), repository);
102
+ }
103
+ /**
104
+ * The ECR public container image to use as the base image in a container recipe
105
+ *
106
+ * @param registryAlias The alias of the ECR public registry where the base image resides in
107
+ * @param repositoryName The name of the ECR public repository, where the base image resides in
108
+ * @param tag The tag of the base image in the ECR public repository
109
+ */
110
+ static fromEcrPublic(registryAlias, repositoryName, tag) {
111
+ return new BaseContainerImage(`public.ecr.aws/${registryAlias}/${repositoryName}:${tag}`);
112
+ }
113
+ /**
114
+ * The string value of the base image to use in a container recipe. This can be an EC2 Image Builder image ARN,
115
+ * an ECR or ECR public image, or a container URI sourced from a third-party container registry such as DockerHub.
116
+ *
117
+ * @param baseContainerImageString The base image as a direct string value
118
+ */
119
+ static fromString(baseContainerImageString) {
120
+ return new BaseContainerImage(baseContainerImageString);
121
+ }
122
+ constructor(image, ecrRepository) {
123
+ this.image = image;
124
+ this.ecrRepository = ecrRepository;
125
+ }
126
+ }
127
+ exports.BaseContainerImage = BaseContainerImage;
128
+ _b = JSII_RTTI_SYMBOL_1;
129
+ BaseContainerImage[_b] = { fqn: "@cloudsnorkel/cdk-github-runners.BaseContainerImage", version: "0.14.19" };
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1pbWFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbWFnZS1idWlsZGVycy9hd3MtaW1hZ2UtYnVpbGRlci9iYXNlLWltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQW1DO0FBY25DOzs7O0dBSUc7QUFDSCxNQUFhLFNBQVM7SUFDcEI7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBYTtRQUNuQyxPQUFPLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFnQixFQUFFLFlBQW9CLEVBQUUsVUFBa0IsT0FBTztRQUM5RixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxPQUFPLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDbkMsT0FBTyxFQUFFLGNBQWM7WUFDdkIsUUFBUSxFQUFFLE9BQU87WUFDakIsT0FBTyxFQUFFLEtBQUs7WUFDZCxZQUFZLEVBQUUsR0FBRyxZQUFZLElBQUksT0FBTyxFQUFFO1NBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsd0JBQXdCLENBQUMsU0FBaUI7UUFDdEQsT0FBTyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUF5QjtRQUN0RCxPQUFPLElBQUksU0FBUyxDQUFDLE9BQU8sU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsb0JBQW9CLENBQUMsYUFBcUI7UUFDdEQsT0FBTyxJQUFJLFNBQVMsQ0FBQyxPQUFPLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxlQUF1QjtRQUM5QyxPQUFPLElBQUksU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFPRCxZQUFzQixLQUFhO1FBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7O0FBekVILDhCQTBFQzs7O0FBV0Q7Ozs7R0FJRztBQUNILE1BQWEsa0JBQWtCO0lBQzdCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxVQUFrQixFQUFFLEdBQVc7UUFDekQsT0FBTyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUEyQixFQUFFLEdBQVc7UUFDNUQsT0FBTyxJQUFJLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFxQixFQUFFLGNBQXNCLEVBQUUsR0FBVztRQUNwRixPQUFPLElBQUksa0JBQWtCLENBQUMsa0JBQWtCLGFBQWEsSUFBSSxjQUFjLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsVUFBVSxDQUFDLHdCQUFnQztRQUN2RCxPQUFPLElBQUksa0JBQWtCLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBYUQsWUFBc0IsS0FBYSxFQUFFLGFBQStCO1FBQ2xFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLENBQUM7O0FBeERILGdEQXlEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBlY3IgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcic7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBUeXBlIHRoYXQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGJhc2UgaW1hZ2UgLSBlaXRoZXIgYSBzdHJpbmcgKGRlcHJlY2F0ZWQpIG9yIGEgQmFzZUltYWdlIG9iamVjdC5cbiAqXG4gKiBUbyBjcmVhdGUgYSBCYXNlSW1hZ2Ugb2JqZWN0LCB1c2UgdGhlIHN0YXRpYyBmYWN0b3J5IG1ldGhvZHMgbGlrZSBCYXNlSW1hZ2UuZnJvbUFtaUlkKCkuXG4gKlxuICogTm90ZTogU3RyaW5nIHN1cHBvcnQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIFVzZSBCYXNlSW1hZ2Ugc3RhdGljIGZhY3RvcnkgbWV0aG9kcyBpbnN0ZWFkLlxuICovXG5leHBvcnQgdHlwZSBCYXNlSW1hZ2VJbnB1dCA9IHN0cmluZyB8IEJhc2VJbWFnZTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgYmFzZSBpbWFnZSB0aGF0IGlzIHVzZWQgdG8gc3RhcnQgZnJvbSBpbiBFQzIgSW1hZ2UgQnVpbGRlciBpbWFnZSBidWlsZHMuXG4gKlxuICogVGhpcyBjbGFzcyBpcyBhZGFwdGVkIGZyb20gQVdTIENESydzIEJhc2VJbWFnZSBjbGFzcyB0byBzdXBwb3J0IGJvdGggc3RyaW5nIGFuZCBvYmplY3QgaW5wdXRzLlxuICovXG5leHBvcnQgY2xhc3MgQmFzZUltYWdlIHtcbiAgLyoqXG4gICAqIFRoZSBBTUkgSUQgdG8gdXNlIGFzIGEgYmFzZSBpbWFnZSBpbiBhbiBpbWFnZSByZWNpcGVcbiAgICpcbiAgICogQHBhcmFtIGFtaUlkIFRoZSBBTUkgSUQgdG8gdXNlIGFzIHRoZSBiYXNlIGltYWdlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21BbWlJZChhbWlJZDogc3RyaW5nKTogQmFzZUltYWdlIHtcbiAgICByZXR1cm4gbmV3IEJhc2VJbWFnZShhbWlJZCk7XG4gIH1cblxuICAvKipcbiAgICogQW4gQVdTLXByb3ZpZGVkIEVDMiBJbWFnZSBCdWlsZGVyIGltYWdlIHRvIHVzZSBhcyBhIGJhc2UgaW1hZ2UgaW4gYW4gaW1hZ2UgcmVjaXBlLlxuICAgKlxuICAgKiBUaGlzIGNvbnN0cnVjdHMgYW4gSW1hZ2UgQnVpbGRlciBBUk4gZm9yIEFXUy1wcm92aWRlZCBpbWFnZXMgbGlrZSBgdWJ1bnR1LXNlcnZlci0yMi1sdHMteDg2L3gueC54YC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgKHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdGFjayBhbmQgcmVnaW9uKVxuICAgKiBAcGFyYW0gcmVzb3VyY2VOYW1lIFRoZSBJbWFnZSBCdWlsZGVyIHJlc291cmNlIG5hbWUgcGF0dGVybiAoZS5nLiwgYHVidW50dS1zZXJ2ZXItMjItbHRzLXg4NmAgb3IgYHVidW50dS1zZXJ2ZXItMjItbHRzLSR7YXJjaH1gKVxuICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgdmVyc2lvbiBwYXR0ZXJuIChkZWZhdWx0cyB0byBgeC54LnhgIHRvIHVzZSB0aGUgbGF0ZXN0IHZlcnNpb24pXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21JbWFnZUJ1aWxkZXIoc2NvcGU6IENvbnN0cnVjdCwgcmVzb3VyY2VOYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyA9ICd4LngueCcpOiBCYXNlSW1hZ2Uge1xuICAgIGNvbnN0IHN0YWNrID0gY2RrLlN0YWNrLm9mKHNjb3BlKTtcbiAgICByZXR1cm4gbmV3IEJhc2VJbWFnZShzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICByZXNvdXJjZTogJ2ltYWdlJyxcbiAgICAgIGFjY291bnQ6ICdhd3MnLFxuICAgICAgcmVzb3VyY2VOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LyR7dmVyc2lvbn1gLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWFya2V0cGxhY2UgcHJvZHVjdCBJRCBmb3IgYW4gQU1JIHByb2R1Y3QgdG8gdXNlIGFzIHRoZSBiYXNlIGltYWdlIGluIGFuIGltYWdlIHJlY2lwZVxuICAgKlxuICAgKiBAcGFyYW0gcHJvZHVjdElkIFRoZSBNYXJrZXRwbGFjZSBBTUkgcHJvZHVjdCBJRCB0byB1c2UgYXMgdGhlIGJhc2UgaW1hZ2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU1hcmtldHBsYWNlUHJvZHVjdElkKHByb2R1Y3RJZDogc3RyaW5nKTogQmFzZUltYWdlIHtcbiAgICByZXR1cm4gbmV3IEJhc2VJbWFnZShwcm9kdWN0SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBTU00gcGFyYW1ldGVyIHRvIHVzZSBhcyB0aGUgYmFzZSBpbWFnZSBpbiBhbiBpbWFnZSByZWNpcGVcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtZXRlciBUaGUgU1NNIHBhcmFtZXRlciB0byB1c2UgYXMgdGhlIGJhc2UgaW1hZ2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVNzbVBhcmFtZXRlcihwYXJhbWV0ZXI6IHNzbS5JUGFyYW1ldGVyKTogQmFzZUltYWdlIHtcbiAgICByZXR1cm4gbmV3IEJhc2VJbWFnZShgc3NtOiR7cGFyYW1ldGVyLnBhcmFtZXRlckFybn1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSBTU00gcGFyYW1ldGVyIHRvIHVzZSBhcyB0aGUgYmFzZSBpbWFnZSBpbiBhbiBpbWFnZSByZWNpcGVcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtZXRlck5hbWUgVGhlIG5hbWUgb2YgdGhlIFNTTSBwYXJhbWV0ZXIgdG8gdXNlIGFzIHRoZSBiYXNlIGltYWdlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Tc21QYXJhbWV0ZXJOYW1lKHBhcmFtZXRlck5hbWU6IHN0cmluZyk6IEJhc2VJbWFnZSB7XG4gICAgcmV0dXJuIG5ldyBCYXNlSW1hZ2UoYHNzbToke3BhcmFtZXRlck5hbWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRpcmVjdCBzdHJpbmcgdmFsdWUgb2YgdGhlIGJhc2UgaW1hZ2UgdG8gdXNlIGluIGFuIGltYWdlIHJlY2lwZS4gVGhpcyBjYW4gYmUgYW4gRUMyIEltYWdlIEJ1aWxkZXIgaW1hZ2UgQVJOLFxuICAgKiBhbiBTU00gcGFyYW1ldGVyLCBhbiBBV1MgTWFya2V0cGxhY2UgcHJvZHVjdCBJRCwgb3IgYW4gQU1JIElELlxuICAgKlxuICAgKiBAcGFyYW0gYmFzZUltYWdlU3RyaW5nIFRoZSBiYXNlIGltYWdlIGFzIGEgZGlyZWN0IHN0cmluZyB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nKGJhc2VJbWFnZVN0cmluZzogc3RyaW5nKTogQmFzZUltYWdlIHtcbiAgICByZXR1cm4gbmV3IEJhc2VJbWFnZShiYXNlSW1hZ2VTdHJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBiYXNlIGltYWdlIHRvIHVzZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGltYWdlOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGltYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmltYWdlID0gaW1hZ2U7XG4gIH1cbn1cblxuLyoqXG4gKiBUeXBlIHRoYXQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGJhc2UgY29udGFpbmVyIGltYWdlIC0gZWl0aGVyIGEgc3RyaW5nIChkZXByZWNhdGVkKSBvciBhIEJhc2VDb250YWluZXJJbWFnZSBvYmplY3QuXG4gKlxuICogVG8gY3JlYXRlIGEgQmFzZUNvbnRhaW5lckltYWdlIG9iamVjdCwgdXNlIHRoZSBzdGF0aWMgZmFjdG9yeSBtZXRob2RzIGxpa2UgQmFzZUNvbnRhaW5lckltYWdlLmZyb21FY3IoKS5cbiAqXG4gKiBOb3RlOiBTdHJpbmcgc3VwcG9ydCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4gVXNlIEJhc2VDb250YWluZXJJbWFnZSBzdGF0aWMgZmFjdG9yeSBtZXRob2RzIGluc3RlYWQuXG4gKi9cbmV4cG9ydCB0eXBlIEJhc2VDb250YWluZXJJbWFnZUlucHV0ID0gc3RyaW5nIHwgQmFzZUNvbnRhaW5lckltYWdlO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBiYXNlIGNvbnRhaW5lciBpbWFnZSB0aGF0IGlzIHVzZWQgdG8gc3RhcnQgZnJvbSBpbiBFQzIgSW1hZ2UgQnVpbGRlciBjb250YWluZXIgYnVpbGRzLlxuICpcbiAqIFRoaXMgY2xhc3MgaXMgYWRhcHRlZCBmcm9tIEFXUyBDREsncyBCYXNlQ29udGFpbmVySW1hZ2UgY2xhc3MgdG8gc3VwcG9ydCBib3RoIHN0cmluZyBhbmQgb2JqZWN0IGlucHV0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJhc2VDb250YWluZXJJbWFnZSB7XG4gIC8qKlxuICAgKiBUaGUgRG9ja2VySHViIGltYWdlIHRvIHVzZSBhcyB0aGUgYmFzZSBpbWFnZSBpbiBhIGNvbnRhaW5lciByZWNpcGVcbiAgICpcbiAgICogQHBhcmFtIHJlcG9zaXRvcnkgVGhlIERvY2tlckh1YiByZXBvc2l0b3J5IHdoZXJlIHRoZSBiYXNlIGltYWdlIHJlc2lkZXMgaW5cbiAgICogQHBhcmFtIHRhZyBUaGUgdGFnIG9mIHRoZSBiYXNlIGltYWdlIGluIHRoZSBEb2NrZXJIdWIgcmVwb3NpdG9yeVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRG9ja2VySHViKHJlcG9zaXRvcnk6IHN0cmluZywgdGFnOiBzdHJpbmcpOiBCYXNlQ29udGFpbmVySW1hZ2Uge1xuICAgIHJldHVybiBuZXcgQmFzZUNvbnRhaW5lckltYWdlKGAke3JlcG9zaXRvcnl9OiR7dGFnfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBFQ1IgY29udGFpbmVyIGltYWdlIHRvIHVzZSBhcyB0aGUgYmFzZSBpbWFnZSBpbiBhIGNvbnRhaW5lciByZWNpcGVcbiAgICpcbiAgICogQHBhcmFtIHJlcG9zaXRvcnkgVGhlIEVDUiByZXBvc2l0b3J5IHdoZXJlIHRoZSBiYXNlIGltYWdlIHJlc2lkZXMgaW5cbiAgICogQHBhcmFtIHRhZyBUaGUgdGFnIG9mIHRoZSBiYXNlIGltYWdlIGluIHRoZSBFQ1IgcmVwb3NpdG9yeVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRWNyKHJlcG9zaXRvcnk6IGVjci5JUmVwb3NpdG9yeSwgdGFnOiBzdHJpbmcpOiBCYXNlQ29udGFpbmVySW1hZ2Uge1xuICAgIHJldHVybiBuZXcgQmFzZUNvbnRhaW5lckltYWdlKHJlcG9zaXRvcnkucmVwb3NpdG9yeVVyaUZvclRhZyh0YWcpLCByZXBvc2l0b3J5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgRUNSIHB1YmxpYyBjb250YWluZXIgaW1hZ2UgdG8gdXNlIGFzIHRoZSBiYXNlIGltYWdlIGluIGEgY29udGFpbmVyIHJlY2lwZVxuICAgKlxuICAgKiBAcGFyYW0gcmVnaXN0cnlBbGlhcyBUaGUgYWxpYXMgb2YgdGhlIEVDUiBwdWJsaWMgcmVnaXN0cnkgd2hlcmUgdGhlIGJhc2UgaW1hZ2UgcmVzaWRlcyBpblxuICAgKiBAcGFyYW0gcmVwb3NpdG9yeU5hbWUgVGhlIG5hbWUgb2YgdGhlIEVDUiBwdWJsaWMgcmVwb3NpdG9yeSwgd2hlcmUgdGhlIGJhc2UgaW1hZ2UgcmVzaWRlcyBpblxuICAgKiBAcGFyYW0gdGFnIFRoZSB0YWcgb2YgdGhlIGJhc2UgaW1hZ2UgaW4gdGhlIEVDUiBwdWJsaWMgcmVwb3NpdG9yeVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRWNyUHVibGljKHJlZ2lzdHJ5QWxpYXM6IHN0cmluZywgcmVwb3NpdG9yeU5hbWU6IHN0cmluZywgdGFnOiBzdHJpbmcpOiBCYXNlQ29udGFpbmVySW1hZ2Uge1xuICAgIHJldHVybiBuZXcgQmFzZUNvbnRhaW5lckltYWdlKGBwdWJsaWMuZWNyLmF3cy8ke3JlZ2lzdHJ5QWxpYXN9LyR7cmVwb3NpdG9yeU5hbWV9OiR7dGFnfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIGJhc2UgaW1hZ2UgdG8gdXNlIGluIGEgY29udGFpbmVyIHJlY2lwZS4gVGhpcyBjYW4gYmUgYW4gRUMyIEltYWdlIEJ1aWxkZXIgaW1hZ2UgQVJOLFxuICAgKiBhbiBFQ1Igb3IgRUNSIHB1YmxpYyBpbWFnZSwgb3IgYSBjb250YWluZXIgVVJJIHNvdXJjZWQgZnJvbSBhIHRoaXJkLXBhcnR5IGNvbnRhaW5lciByZWdpc3RyeSBzdWNoIGFzIERvY2tlckh1Yi5cbiAgICpcbiAgICogQHBhcmFtIGJhc2VDb250YWluZXJJbWFnZVN0cmluZyBUaGUgYmFzZSBpbWFnZSBhcyBhIGRpcmVjdCBzdHJpbmcgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZyhiYXNlQ29udGFpbmVySW1hZ2VTdHJpbmc6IHN0cmluZyk6IEJhc2VDb250YWluZXJJbWFnZSB7XG4gICAgcmV0dXJuIG5ldyBCYXNlQ29udGFpbmVySW1hZ2UoYmFzZUNvbnRhaW5lckltYWdlU3RyaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgYmFzZSBpbWFnZSB0byB1c2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbWFnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgRUNSIHJlcG9zaXRvcnkgaWYgdGhpcyBpbWFnZSB3YXMgY3JlYXRlZCBmcm9tIGFuIEVDUiByZXBvc2l0b3J5LlxuICAgKiBUaGlzIGFsbG93cyBhdXRvbWF0aWMgcGVybWlzc2lvbiBncmFudGluZyBmb3IgQ29kZUJ1aWxkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVjclJlcG9zaXRvcnk/OiBlY3IuSVJlcG9zaXRvcnk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGltYWdlOiBzdHJpbmcsIGVjclJlcG9zaXRvcnk/OiBlY3IuSVJlcG9zaXRvcnkpIHtcbiAgICB0aGlzLmltYWdlID0gaW1hZ2U7XG4gICAgdGhpcy5lY3JSZXBvc2l0b3J5ID0gZWNyUmVwb3NpdG9yeTtcbiAgfVxufVxuIl19