Skip to content

Commit f50e602

Browse files
add new properties for resource request (#23)
1 parent e4c14e0 commit f50e602

File tree

5 files changed

+46
-13
lines changed

5 files changed

+46
-13
lines changed

src/interface.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,8 +236,14 @@ export class BaseResourceHandlerRequest<T extends BaseModel> extends BaseDto {
236236
@Expose() clientRequestToken: ClientRequestToken;
237237
@Expose() desiredResourceState?: T;
238238
@Expose() previousResourceState?: T;
239+
@Expose() desiredResourceTags: Dict<string>;
240+
@Expose() previousResourceTags: Dict<string>;
241+
@Expose() systemTags: Dict<string>;
242+
@Expose() awsAccountId: string;
243+
@Expose() awsPartition: string;
239244
@Expose() logicalResourceIdentifier?: LogicalResourceId;
240245
@Expose() nextToken?: NextToken;
246+
@Expose() region: string;
241247
}
242248

243249
export class UnmodeledRequest extends BaseResourceHandlerRequest<BaseModel> {
@@ -246,6 +252,20 @@ export class UnmodeledRequest extends BaseResourceHandlerRequest<BaseModel> {
246252
return UnmodeledRequest.deserialize(obj);
247253
}
248254

255+
@Exclude()
256+
public static getPartition(region: Optional<string>): Optional<string> {
257+
if (!region) {
258+
return null;
259+
}
260+
if (region.startsWith('cn')) {
261+
return 'aws-cn';
262+
}
263+
if (region.startsWith('us-gov')) {
264+
return 'aws-gov';
265+
}
266+
return 'aws';
267+
}
268+
249269
@Exclude()
250270
public toModeled<T extends BaseModel = BaseModel>(
251271
modelCls: Constructor<T> & { deserialize?: Function }
@@ -254,8 +274,13 @@ export class UnmodeledRequest extends BaseResourceHandlerRequest<BaseModel> {
254274
BaseResourceHandlerRequest<T>
255275
>({
256276
clientRequestToken: this.clientRequestToken,
277+
desiredResourceTags: this.desiredResourceTags,
278+
systemTags: this.systemTags,
279+
awsAccountId: this.awsAccountId,
257280
logicalResourceIdentifier: this.logicalResourceIdentifier,
258281
nextToken: this.nextToken,
282+
region: this.region,
283+
awsPartition: UnmodeledRequest.getPartition(this.region),
259284
});
260285
request.desiredResourceState = modelCls.deserialize(
261286
this.desiredResourceState || {}

src/proxy.ts

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -161,15 +161,4 @@ export class ProgressEvent<
161161
*/
162162
export class ResourceHandlerRequest<
163163
T extends BaseModel
164-
> extends BaseResourceHandlerRequest<T> {
165-
@Expose() clientRequestToken: string;
166-
@Expose() desiredResourceState: T;
167-
@Expose() previousResourceState: T;
168-
@Expose() desiredResourceTags: Dict<string>;
169-
@Expose() systemTags: Dict<string>;
170-
@Expose() awsAccountId: string;
171-
@Expose() awsPartition: string;
172-
@Expose() logicalResourceIdentifier: string;
173-
@Expose() nextToken: string;
174-
@Expose() region: string;
175-
}
164+
> extends BaseResourceHandlerRequest<T> {}

src/resource.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,11 @@ export abstract class BaseResource<T extends BaseModel = BaseModel> {
230230
clientRequestToken: request.bearerToken,
231231
desiredResourceState: request.requestData.resourceProperties,
232232
previousResourceState: request.requestData.previousResourceProperties,
233+
desiredResourceTags: request.requestData.stackTags,
234+
systemTags: request.requestData.systemTags,
235+
awsAccountId: request.awsAccountId,
233236
logicalResourceIdentifier: request.requestData.logicalResourceId,
237+
region: request.region,
234238
});
235239
return unmodeled.toModeled<T>(this.modelCls);
236240
} catch (err) {

tests/lib/interface.test.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Integer } from '../../src/interface';
1+
import { Integer, UnmodeledRequest } from '../../src/interface';
22
import { SerializableModel } from '../data/sample-model';
33

44
describe('when getting interface', () => {
@@ -62,4 +62,14 @@ describe('when getting interface', () => {
6262
expect(typeof serialized['SomeInt']).toBe('number');
6363
expect(serialized['SomeInt']).toBe(35190274);
6464
});
65+
66+
test('unmodeled request partion', () => {
67+
const partionMap = [null, 'aws', 'aws-cn', 'aws-gov'];
68+
[null, 'us-east-1', 'cn-region1', 'us-gov-region1'].forEach(
69+
(region: string, index: number) => {
70+
const partion = UnmodeledRequest.getPartition(region);
71+
expect(partion).toBe(partionMap[index]);
72+
}
73+
);
74+
});
6575
});

tests/lib/resource.test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,12 @@ describe('when getting resource', () => {
323323
clientRequestToken: request.bearerToken,
324324
desiredResourceState: { state: 'state1' },
325325
previousResourceState: { state: 'state2' },
326+
desiredResourceTags: request.requestData.stackTags,
327+
systemTags: request.requestData.systemTags,
328+
awsAccountId: request.awsAccountId,
326329
logicalResourceIdentifier: 'myBucket',
330+
region: request.region,
331+
awsPartition: 'aws',
327332
});
328333
});
329334

0 commit comments

Comments
 (0)