Skip to content

Commit

Permalink
fix: move @model parameters up to the rootstack
Browse files Browse the repository at this point in the history
  • Loading branch information
SwaySway committed Nov 8, 2021
1 parent 81cc461 commit 9075680
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1089,4 +1089,51 @@ describe('ModelTransformer: ', () => {

expectFieldsOnInputType(updateTodoInput!, ['name']);
});

it('should the model parameters at the root sack', () => {
const validSchema = `type Todo @model {
name: String
}`;

const transformer = new GraphQLTransform({
sandboxModeEnabled: true,
transformers: [new ModelTransformer()],
});
const out = transformer.transform(validSchema);
const rootStack = out.rootStack;
expect(rootStack).toBeDefined();

expect(rootStack.Parameters).toEqual(
expect.objectContaining({
DynamoDBModelTableReadIOPS: expect.objectContaining({
Type: 'String',
Default: 5,
Description: 'The number of read IOPS the table should support.',
}),
DynamoDBModelTableWriteIOPS: expect.objectContaining({
Type: 'String',
Default: 5,
Description: 'The number of write IOPS the table should support.',
}),
DynamoDBBillingMode: expect.objectContaining({
Type: 'String',
Default: 'PAY_PER_REQUEST',
AllowedValues: ['PAY_PER_REQUEST', 'PROVISIONED'],
Description: 'Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes.',
}),
DynamoDBEnablePointInTimeRecovery: expect.objectContaining({
Type: 'String',
Default: 'false',
AllowedValues: ['true', 'false'],
Description: 'Whether to enable Point in Time Recovery on the table',
}),
DynamoDBEnableServerSideEncryption: expect.objectContaining({
Type: 'String',
Default: 'true',
AllowedValues: ['true', 'false'],
Description: 'Enable service side encryption powered by KMS.',
}),
}),
);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
MutationFieldType,
QueryFieldType,
SubscriptionFieldType,
TransformerBeforeStepContextProvider,
TransformerContextProvider,
TransformerModelProvider,
TransformerPrepareStepContextProvider,
Expand Down Expand Up @@ -167,6 +168,33 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
this.options = this.getOptions(options);
}

before = (ctx: TransformerBeforeStepContextProvider) => {
// add parameters to the main stack
ctx.stackManager.addParameter(ResourceConstants.PARAMETERS.DynamoDBModelTableReadIOPS, {
description: 'The number of read IOPS the table should support.',
default: 5,
});
ctx.stackManager.addParameter(ResourceConstants.PARAMETERS.DynamoDBModelTableWriteIOPS, {
description: 'The number of write IOPS the table should support.',
default: 5,
});
ctx.stackManager.addParameter(ResourceConstants.PARAMETERS.DynamoDBBillingMode, {
description: 'Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes.',
default: 'PAY_PER_REQUEST',
allowedValues: ['PAY_PER_REQUEST', 'PROVISIONED'],
});
ctx.stackManager.addParameter(ResourceConstants.PARAMETERS.DynamoDBEnablePointInTimeRecovery, {
description: 'Whether to enable Point in Time Recovery on the table',
default: 'false',
allowedValues: ['true', 'false'],
});
ctx.stackManager.addParameter(ResourceConstants.PARAMETERS.DynamoDBEnableServerSideEncryption, {
description: 'Enable service side encryption powered by KMS.',
default: 'true',
allowedValues: ['true', 'false'],
});
};

object = (definition: ObjectTypeDefinitionNode, directive: DirectiveNode, ctx: TransformerSchemaVisitStepContextProvider): void => {
const isTypeNameReserved =
definition.name.value === ctx.output.getQueryTypeName() ||
Expand Down Expand Up @@ -1081,34 +1109,15 @@ export class ModelTransformer extends TransformerModelBase implements Transforme

// Add parameters.
const env = context.stackManager.getParameter(ResourceConstants.PARAMETERS.Env) as cdk.CfnParameter;
const readIops = new cdk.CfnParameter(stack, ResourceConstants.PARAMETERS.DynamoDBModelTableReadIOPS, {
description: 'The number of read IOPS the table should support.',
type: 'Number',
default: 5,
}).valueAsString;
const writeIops = new cdk.CfnParameter(stack, ResourceConstants.PARAMETERS.DynamoDBModelTableWriteIOPS, {
description: 'The number of write IOPS the table should support.',
type: 'Number',
default: 5,
}).valueAsString;
const billingMode = new cdk.CfnParameter(stack, ResourceConstants.PARAMETERS.DynamoDBBillingMode, {
description: 'Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes.',
type: 'String',
default: 'PAY_PER_REQUEST',
allowedValues: ['PAY_PER_REQUEST', 'PROVISIONED'],
}).valueAsString;
const pointInTimeRecovery = new cdk.CfnParameter(stack, ResourceConstants.PARAMETERS.DynamoDBEnablePointInTimeRecovery, {
description: 'Whether to enable Point in Time Recovery on the table.',
type: 'String',
default: 'false',
allowedValues: ['true', 'false'],
}).valueAsString;
const enableSSE = new cdk.CfnParameter(stack, ResourceConstants.PARAMETERS.DynamoDBEnableServerSideEncryption, {
description: 'Enable server side encryption powered by KMS.',
type: 'String',
default: 'true',
allowedValues: ['true', 'false'],
}).valueAsString;
const readIops = context.stackManager.getParameter(ResourceConstants.PARAMETERS.DynamoDBModelTableReadIOPS) as cdk.CfnParameter;
const writeIops = context.stackManager.getParameter(ResourceConstants.PARAMETERS.DynamoDBModelTableWriteIOPS) as cdk.CfnParameter;
const billingMode = context.stackManager.getParameter(ResourceConstants.PARAMETERS.DynamoDBBillingMode);
const pointInTimeRecovery = context.stackManager.getParameter(
ResourceConstants.PARAMETERS.DynamoDBEnablePointInTimeRecovery,
) as cdk.CfnParameter;
const enableSSE = context.stackManager.getParameter(
ResourceConstants.PARAMETERS.DynamoDBEnableServerSideEncryption,
) as cdk.CfnParameter;

// Add conditions.
// eslint-disable-next-line no-new
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ export interface TransformerContextProvider {

export type TransformerBeforeStepContextProvider = Pick<
TransformerContextProvider,
'inputDocument' | 'featureFlags' | 'isProjectUsingDataStore' | 'getResolverConfig' | 'authConfig'
'inputDocument' | 'featureFlags' | 'isProjectUsingDataStore' | 'getResolverConfig' | 'authConfig' | 'stackManager'
>;
export type TransformerSchemaVisitStepContextProvider = Pick<
TransformerContextProvider,
Expand Down

0 comments on commit 9075680

Please sign in to comment.