diff --git a/examples/basic-usage.ts b/examples/basic-usage.ts index 3448cea..79bc3c3 100644 --- a/examples/basic-usage.ts +++ b/examples/basic-usage.ts @@ -1,5 +1,4 @@ #!/usr/bin/env node -import 'source-map-support/register'; import { App, Stack } from 'aws-cdk-lib'; import { SecureBucket, SecurityLevel } from '../src'; diff --git a/examples/blueprints-usage.ts b/examples/blueprints-usage.ts index f756a0a..885a16e 100644 --- a/examples/blueprints-usage.ts +++ b/examples/blueprints-usage.ts @@ -1,5 +1,4 @@ #!/usr/bin/env node -import 'source-map-support/register'; import { App, Stack, PropertyInjectors } from 'aws-cdk-lib'; import { Bucket } from 'aws-cdk-lib/aws-s3'; diff --git a/src/resources/s3-bucket/secure-bucket.ts b/src/resources/s3-bucket/secure-bucket.ts index a024314..7449e12 100644 --- a/src/resources/s3-bucket/secure-bucket.ts +++ b/src/resources/s3-bucket/secure-bucket.ts @@ -70,6 +70,26 @@ export class SecureBucket extends Construct { /** The underlying hardened bucket. */ public readonly bucket: Bucket; + /** The bucket's ARN. Convenience pass-through for `this.bucket.bucketArn`. */ + public get bucketArn(): string { + return this.bucket.bucketArn; + } + + /** The bucket's name. Convenience pass-through for `this.bucket.bucketName`. */ + public get bucketName(): string { + return this.bucket.bucketName; + } + + /** The bucket's domain name. Convenience pass-through for `this.bucket.bucketDomainName`. */ + public get bucketDomainName(): string { + return this.bucket.bucketDomainName; + } + + /** The bucket's regional domain name. Convenience pass-through for `this.bucket.bucketRegionalDomainName`. */ + public get bucketRegionalDomainName(): string { + return this.bucket.bucketRegionalDomainName; + } + constructor(scope: Construct, id: string, props: SecureBucketProps = {}) { super(scope, id); diff --git a/test/resources/s3-bucket/secure-bucket.test.ts b/test/resources/s3-bucket/secure-bucket.test.ts index d6a02fd..717df35 100644 --- a/test/resources/s3-bucket/secure-bucket.test.ts +++ b/test/resources/s3-bucket/secure-bucket.test.ts @@ -184,4 +184,27 @@ describe('SecureBucket', () => { expect(secureBucket.bucket.node.id).toBe('Bucket'); }); }); + + describe('attribute pass-through getters', () => { + it('exposes bucketArn and bucketName directly on the construct', () => { + const bucket = new SecureBucket(stack, 'TestBucket', { + bucketName: 'my-secure-bucket', + }); + + expect(bucket.bucketArn).toBeDefined(); + expect(bucket.bucketArn).toBe(bucket.bucket.bucketArn); + expect(bucket.bucketName).toBe(bucket.bucket.bucketName); + expect(bucket.bucketDomainName).toBe(bucket.bucket.bucketDomainName); + expect(bucket.bucketRegionalDomainName).toBe(bucket.bucket.bucketRegionalDomainName); + }); + + it('resolves getters to the same values as the wrapped bucket', () => { + const bucket = new SecureBucket(stack, 'TestBucket', { + bucketName: 'direct-access', + }); + + expect(bucket.bucketArn).toBe(bucket.bucket.bucketArn); + expect(bucket.bucketName).toBe(bucket.bucket.bucketName); + }); + }); });