@aws-amplify/graphql-model-transformer 1.5.0-rds.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. package/API.md +15 -15
  2. package/CHANGELOG.md +4 -5
  3. package/lib/graphql-types/mutation.d.ts.map +1 -1
  4. package/lib/graphql-types/mutation.js +2 -9
  5. package/lib/graphql-types/mutation.js.map +1 -1
  6. package/lib/rds-lambda.zip +0 -0
  7. package/lib/rds-notification-lambda.zip +0 -0
  8. package/lib/rds-patching-lambda.zip +0 -0
  9. package/lib/resolvers/generators/dynamodb-vtl-generator.d.ts +5 -6
  10. package/lib/resolvers/generators/dynamodb-vtl-generator.d.ts.map +1 -1
  11. package/lib/resolvers/generators/dynamodb-vtl-generator.js +5 -5
  12. package/lib/resolvers/generators/dynamodb-vtl-generator.js.map +1 -1
  13. package/lib/resolvers/generators/rds-vtl-generator.d.ts +5 -6
  14. package/lib/resolvers/generators/rds-vtl-generator.d.ts.map +1 -1
  15. package/lib/resolvers/generators/rds-vtl-generator.js +10 -10
  16. package/lib/resolvers/generators/rds-vtl-generator.js.map +1 -1
  17. package/lib/resolvers/generators/vtl-generator.d.ts +5 -6
  18. package/lib/resolvers/generators/vtl-generator.d.ts.map +1 -1
  19. package/lib/resolvers/rds/mutation.d.ts +3 -4
  20. package/lib/resolvers/rds/mutation.d.ts.map +1 -1
  21. package/lib/resolvers/rds/mutation.js +3 -7
  22. package/lib/resolvers/rds/mutation.js.map +1 -1
  23. package/lib/resolvers/rds/query.d.ts +1 -2
  24. package/lib/resolvers/rds/query.d.ts.map +1 -1
  25. package/lib/resolvers/rds/query.js +1 -3
  26. package/lib/resolvers/rds/query.js.map +1 -1
  27. package/lib/resolvers/rds/resolver.d.ts +7 -11
  28. package/lib/resolvers/rds/resolver.d.ts.map +1 -1
  29. package/lib/resolvers/rds/resolver.js +39 -50
  30. package/lib/resolvers/rds/resolver.js.map +1 -1
  31. package/lib/resources/dynamo-model-resource-generator.d.ts +2 -2
  32. package/lib/resources/dynamo-model-resource-generator.d.ts.map +1 -1
  33. package/lib/resources/dynamo-model-resource-generator.js +48 -43
  34. package/lib/resources/dynamo-model-resource-generator.js.map +1 -1
  35. package/lib/resources/model-resource-generator.js +8 -8
  36. package/lib/resources/model-resource-generator.js.map +1 -1
  37. package/lib/resources/rds-model-resource-generator.js +13 -13
  38. package/package.json +6 -5
  39. package/publish-notification-lambda/node_modules/.package-lock.json +11 -11
  40. package/publish-notification-lambda/node_modules/@types/node/README.md +1 -1
  41. package/publish-notification-lambda/node_modules/@types/node/package.json +2 -2
  42. package/publish-notification-lambda/node_modules/archiver/CHANGELOG.md +18 -0
  43. package/publish-notification-lambda/node_modules/archiver/package.json +7 -7
  44. package/publish-notification-lambda/node_modules/tslib/package.json +2 -2
  45. package/publish-notification-lambda/package-lock.json +11 -11
  46. package/rds-lambda/handler.ts +1 -2
  47. package/rds-lambda/node_modules/.package-lock.json +407 -362
  48. package/rds-lambda/node_modules/@babel/code-frame/package.json +3 -2
  49. package/rds-lambda/node_modules/@babel/core/package.json +9 -9
  50. package/rds-lambda/node_modules/@babel/helpers/package.json +5 -5
  51. package/rds-lambda/node_modules/@babel/highlight/package.json +1 -1
  52. package/rds-lambda/node_modules/@babel/parser/package.json +3 -3
  53. package/rds-lambda/node_modules/@babel/traverse/package.json +4 -4
  54. package/rds-lambda/node_modules/@babel/types/lib/index.js.flow +10 -10
  55. package/rds-lambda/node_modules/@babel/types/package.json +2 -2
  56. package/rds-lambda/node_modules/@jest/console/package.json +7 -7
  57. package/rds-lambda/node_modules/@jest/core/package.json +25 -25
  58. package/rds-lambda/node_modules/@jest/environment/package.json +6 -6
  59. package/rds-lambda/node_modules/@jest/expect/package.json +5 -5
  60. package/rds-lambda/node_modules/@jest/expect-utils/package.json +5 -5
  61. package/rds-lambda/node_modules/@jest/fake-timers/package.json +8 -8
  62. package/rds-lambda/node_modules/@jest/globals/package.json +7 -7
  63. package/rds-lambda/node_modules/@jest/reporters/node_modules/istanbul-lib-instrument/CHANGELOG.md +642 -0
  64. package/rds-lambda/node_modules/@jest/reporters/node_modules/istanbul-lib-instrument/LICENSE +24 -0
  65. package/rds-lambda/node_modules/@jest/reporters/node_modules/istanbul-lib-instrument/README.md +22 -0
  66. package/rds-lambda/node_modules/@jest/reporters/node_modules/istanbul-lib-instrument/package.json +50 -0
  67. package/rds-lambda/node_modules/@jest/reporters/node_modules/lru-cache/LICENSE +15 -0
  68. package/rds-lambda/node_modules/@jest/reporters/node_modules/lru-cache/README.md +166 -0
  69. package/rds-lambda/node_modules/@jest/reporters/node_modules/lru-cache/package.json +34 -0
  70. package/rds-lambda/node_modules/@jest/reporters/node_modules/semver/LICENSE +15 -0
  71. package/rds-lambda/node_modules/@jest/reporters/node_modules/semver/README.md +637 -0
  72. package/rds-lambda/node_modules/@jest/reporters/node_modules/semver/package.json +87 -0
  73. package/rds-lambda/node_modules/@jest/reporters/node_modules/semver/range.bnf +16 -0
  74. package/rds-lambda/node_modules/@jest/reporters/node_modules/yallist/LICENSE +15 -0
  75. package/rds-lambda/node_modules/@jest/reporters/node_modules/yallist/README.md +204 -0
  76. package/rds-lambda/node_modules/@jest/reporters/node_modules/yallist/package.json +29 -0
  77. package/rds-lambda/node_modules/@jest/reporters/package.json +14 -14
  78. package/rds-lambda/node_modules/@jest/schemas/package.json +3 -3
  79. package/rds-lambda/node_modules/@jest/source-map/package.json +3 -3
  80. package/rds-lambda/node_modules/@jest/test-result/package.json +7 -7
  81. package/rds-lambda/node_modules/@jest/test-sequencer/package.json +6 -6
  82. package/rds-lambda/node_modules/@jest/transform/package.json +8 -8
  83. package/rds-lambda/node_modules/@jest/types/package.json +4 -4
  84. package/rds-lambda/node_modules/@types/jest/README.md +1 -1
  85. package/rds-lambda/node_modules/@types/jest/package.json +2 -2
  86. package/rds-lambda/node_modules/@types/node/README.md +1 -1
  87. package/rds-lambda/node_modules/@types/node/package.json +2 -2
  88. package/rds-lambda/node_modules/archiver/CHANGELOG.md +18 -0
  89. package/rds-lambda/node_modules/archiver/package.json +7 -7
  90. package/rds-lambda/node_modules/babel-jest/README.md +1 -1
  91. package/rds-lambda/node_modules/babel-jest/package.json +6 -6
  92. package/rds-lambda/node_modules/babel-plugin-jest-hoist/README.md +1 -1
  93. package/rds-lambda/node_modules/babel-plugin-jest-hoist/package.json +3 -3
  94. package/rds-lambda/node_modules/babel-preset-jest/README.md +1 -1
  95. package/rds-lambda/node_modules/babel-preset-jest/package.json +4 -4
  96. package/rds-lambda/node_modules/caniuse-lite/package.json +1 -1
  97. package/rds-lambda/node_modules/diff-sequences/package.json +3 -3
  98. package/rds-lambda/node_modules/electron-to-chromium/chromium-versions.json +1 -1
  99. package/rds-lambda/node_modules/electron-to-chromium/full-chromium-versions.json +1 -1
  100. package/rds-lambda/node_modules/electron-to-chromium/full-versions.json +1 -1
  101. package/rds-lambda/node_modules/electron-to-chromium/package.json +1 -1
  102. package/rds-lambda/node_modules/electron-to-chromium/versions.json +1 -1
  103. package/rds-lambda/node_modules/expect/package.json +9 -10
  104. package/rds-lambda/node_modules/jest/package.json +6 -6
  105. package/rds-lambda/node_modules/jest-changed-files/package.json +4 -3
  106. package/rds-lambda/node_modules/jest-circus/README.md +1 -1
  107. package/rds-lambda/node_modules/jest-circus/package.json +14 -14
  108. package/rds-lambda/node_modules/jest-cli/package.json +10 -10
  109. package/rds-lambda/node_modules/jest-config/package.json +15 -15
  110. package/rds-lambda/node_modules/jest-diff/package.json +7 -7
  111. package/rds-lambda/node_modules/jest-docblock/package.json +3 -3
  112. package/rds-lambda/node_modules/jest-each/README.md +1 -1
  113. package/rds-lambda/node_modules/jest-each/package.json +7 -7
  114. package/rds-lambda/node_modules/jest-environment-node/package.json +9 -9
  115. package/rds-lambda/node_modules/jest-get-type/package.json +3 -3
  116. package/rds-lambda/node_modules/jest-haste-map/package.json +7 -7
  117. package/rds-lambda/node_modules/jest-leak-detector/package.json +5 -5
  118. package/rds-lambda/node_modules/jest-matcher-utils/README.md +1 -1
  119. package/rds-lambda/node_modules/jest-matcher-utils/package.json +7 -7
  120. package/rds-lambda/node_modules/jest-message-util/package.json +5 -5
  121. package/rds-lambda/node_modules/jest-mock/package.json +5 -5
  122. package/rds-lambda/node_modules/jest-regex-util/package.json +3 -3
  123. package/rds-lambda/node_modules/jest-resolve/package.json +6 -6
  124. package/rds-lambda/node_modules/jest-resolve-dependencies/package.json +10 -10
  125. package/rds-lambda/node_modules/jest-runner/package.json +20 -20
  126. package/rds-lambda/node_modules/jest-runtime/package.json +19 -19
  127. package/rds-lambda/node_modules/jest-snapshot/package.json +14 -14
  128. package/rds-lambda/node_modules/jest-util/package.json +4 -4
  129. package/rds-lambda/node_modules/jest-validate/package.json +6 -6
  130. package/rds-lambda/node_modules/jest-watcher/package.json +7 -7
  131. package/rds-lambda/node_modules/jest-worker/README.md +1 -1
  132. package/rds-lambda/node_modules/jest-worker/package.json +5 -5
  133. package/rds-lambda/node_modules/pretty-format/package.json +5 -5
  134. package/rds-lambda/node_modules/tslib/package.json +2 -2
  135. package/rds-lambda/package-lock.json +410 -365
  136. package/rds-patching-lambda/node_modules/.package-lock.json +11 -11
  137. package/rds-patching-lambda/node_modules/@types/node/README.md +1 -1
  138. package/rds-patching-lambda/node_modules/@types/node/package.json +2 -2
  139. package/rds-patching-lambda/node_modules/archiver/CHANGELOG.md +18 -0
  140. package/rds-patching-lambda/node_modules/archiver/package.json +7 -7
  141. package/rds-patching-lambda/node_modules/tslib/package.json +2 -2
  142. package/rds-patching-lambda/package-lock.json +11 -11
  143. package/src/__tests__/__snapshots__/model-transformer.test.ts.snap +0 -688
  144. package/src/__tests__/model-directive-arguments.test.ts +23 -28
  145. package/src/__tests__/model-transformer.test.ts +137 -216
  146. package/src/graphql-types/mutation.ts +3 -11
  147. package/src/resolvers/generators/dynamodb-vtl-generator.ts +5 -7
  148. package/src/resolvers/generators/rds-vtl-generator.ts +10 -12
  149. package/src/resolvers/generators/vtl-generator.ts +5 -6
  150. package/src/resolvers/rds/mutation.ts +3 -18
  151. package/src/resolvers/rds/query.ts +1 -9
  152. package/src/resolvers/rds/resolver.ts +45 -62
  153. package/src/resources/dynamo-model-resource-generator.ts +50 -47
  154. package/src/resources/model-resource-generator.ts +8 -8
  155. package/src/resources/rds-model-resource-generator.ts +13 -13
  156. package/tsconfig.tsbuildinfo +1 -1
@@ -2,11 +2,12 @@ import * as cdk from 'aws-cdk-lib';
2
2
  import { TransformerContextProvider } from '@aws-amplify/graphql-transformer-interfaces';
3
3
  import { ModelResourceIDs, ResourceConstants, SyncResourceIDs } from 'graphql-transformer-common';
4
4
  import { ObjectTypeDefinitionNode } from 'graphql';
5
- import { SyncUtils, TransformerNestedStack } from '@aws-amplify/graphql-transformer-core';
5
+ import { SyncUtils, setResourceName } from '@aws-amplify/graphql-transformer-core';
6
6
  import { AttributeType, CfnTable, StreamViewType, Table, TableEncryption } from 'aws-cdk-lib/aws-dynamodb';
7
7
  import { CfnDataSource } from 'aws-cdk-lib/aws-appsync';
8
8
  import * as iam from 'aws-cdk-lib/aws-iam';
9
9
  import { CfnRole } from 'aws-cdk-lib/aws-iam';
10
+ import { Construct } from 'constructs';
10
11
  import { DynamoDBModelVTLGenerator, ModelVTLGenerator } from '../resolvers';
11
12
  import { ModelResourceGenerator } from './model-resource-generator';
12
13
 
@@ -24,28 +25,29 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
24
25
 
25
26
  if (this.isProvisioned()) {
26
27
  // add model related-parameters to the root stack
27
- ctx.stackManager.addParameter(ResourceConstants.PARAMETERS.DynamoDBModelTableReadIOPS, {
28
+ const rootStack = cdk.Stack.of(ctx.stackManager.scope);
29
+ new cdk.CfnParameter(rootStack, ResourceConstants.PARAMETERS.DynamoDBModelTableReadIOPS, {
28
30
  description: 'The number of read IOPS the table should support.',
29
31
  type: 'Number',
30
32
  default: 5,
31
33
  });
32
- ctx.stackManager.addParameter(ResourceConstants.PARAMETERS.DynamoDBModelTableWriteIOPS, {
34
+ new cdk.CfnParameter(rootStack, ResourceConstants.PARAMETERS.DynamoDBModelTableWriteIOPS, {
33
35
  description: 'The number of write IOPS the table should support.',
34
36
  type: 'Number',
35
37
  default: 5,
36
38
  });
37
- ctx.stackManager.addParameter(ResourceConstants.PARAMETERS.DynamoDBBillingMode, {
39
+ new cdk.CfnParameter(rootStack, ResourceConstants.PARAMETERS.DynamoDBBillingMode, {
38
40
  description: 'Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes.',
39
41
  default: 'PAY_PER_REQUEST',
40
42
  allowedValues: ['PAY_PER_REQUEST', 'PROVISIONED'],
41
43
  });
42
- ctx.stackManager.addParameter(ResourceConstants.PARAMETERS.DynamoDBEnablePointInTimeRecovery, {
44
+ new cdk.CfnParameter(rootStack, ResourceConstants.PARAMETERS.DynamoDBEnablePointInTimeRecovery, {
43
45
  description: 'Whether to enable Point in Time Recovery on the table.',
44
46
  type: 'String',
45
47
  default: 'false',
46
48
  allowedValues: ['true', 'false'],
47
49
  });
48
- ctx.stackManager.addParameter(ResourceConstants.PARAMETERS.DynamoDBEnableServerSideEncryption, {
50
+ new cdk.CfnParameter(rootStack, ResourceConstants.PARAMETERS.DynamoDBEnableServerSideEncryption, {
49
51
  description: 'Enable server side encryption powered by KMS.',
50
52
  type: 'String',
51
53
  default: 'true',
@@ -57,9 +59,9 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
57
59
  // This name is used by the mock functionality. Changing this can break mock.
58
60
  const tableBaseName = ctx.resourceHelper.getModelNameMapping(model!.name.value);
59
61
  const tableLogicalName = ModelResourceIDs.ModelTableResourceID(tableBaseName);
60
- const stack = ctx.stackManager.getStackFor(tableLogicalName, tableBaseName);
62
+ const scope = ctx.stackManager.getScopeFor(tableLogicalName, tableBaseName);
61
63
 
62
- this.createModelTable(stack, model, ctx);
64
+ this.createModelTable(scope, model, ctx);
63
65
  });
64
66
 
65
67
  this.generateResolvers(ctx);
@@ -70,71 +72,68 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
70
72
  return new DynamoDBModelVTLGenerator();
71
73
  }
72
74
 
73
- private createModelTable(stack: cdk.Stack, def: ObjectTypeDefinitionNode, context: TransformerContextProvider): void {
74
- const tableLogicalName = ModelResourceIDs.ModelTableResourceID(def!.name.value);
75
- const tableName = context.resourceHelper.generateTableName(def!.name.value);
75
+ private createModelTable(scope: Construct, def: ObjectTypeDefinitionNode, context: TransformerContextProvider): void {
76
+ const modelName = def!.name.value;
77
+ const tableLogicalName = ModelResourceIDs.ModelTableResourceID(modelName);
78
+ const tableName = context.resourceHelper.generateTableName(modelName);
76
79
 
77
80
  // Add parameters.
78
- const env = context.stackManager.getParameter(ResourceConstants.PARAMETERS.Env) as cdk.CfnParameter;
79
- const readIops = new cdk.CfnParameter(stack, ResourceConstants.PARAMETERS.DynamoDBModelTableReadIOPS, {
81
+ const readIops = new cdk.CfnParameter(scope, ResourceConstants.PARAMETERS.DynamoDBModelTableReadIOPS, {
80
82
  description: 'The number of read IOPS the table should support.',
81
83
  type: 'Number',
82
84
  default: 5,
83
85
  });
84
- const writeIops = new cdk.CfnParameter(stack, ResourceConstants.PARAMETERS.DynamoDBModelTableWriteIOPS, {
86
+ const writeIops = new cdk.CfnParameter(scope, ResourceConstants.PARAMETERS.DynamoDBModelTableWriteIOPS, {
85
87
  description: 'The number of write IOPS the table should support.',
86
88
  type: 'Number',
87
89
  default: 5,
88
90
  });
89
- const billingMode = new cdk.CfnParameter(stack, ResourceConstants.PARAMETERS.DynamoDBBillingMode, {
91
+ const billingMode = new cdk.CfnParameter(scope, ResourceConstants.PARAMETERS.DynamoDBBillingMode, {
90
92
  description: 'Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes.',
91
93
  type: 'String',
92
94
  default: 'PAY_PER_REQUEST',
93
95
  allowedValues: ['PAY_PER_REQUEST', 'PROVISIONED'],
94
96
  });
95
- const pointInTimeRecovery = new cdk.CfnParameter(stack, ResourceConstants.PARAMETERS.DynamoDBEnablePointInTimeRecovery, {
97
+ const pointInTimeRecovery = new cdk.CfnParameter(scope, ResourceConstants.PARAMETERS.DynamoDBEnablePointInTimeRecovery, {
96
98
  description: 'Whether to enable Point in Time Recovery on the table.',
97
99
  type: 'String',
98
100
  default: 'false',
99
101
  allowedValues: ['true', 'false'],
100
102
  });
101
- const enableSSE = new cdk.CfnParameter(stack, ResourceConstants.PARAMETERS.DynamoDBEnableServerSideEncryption, {
103
+ const enableSSE = new cdk.CfnParameter(scope, ResourceConstants.PARAMETERS.DynamoDBEnableServerSideEncryption, {
102
104
  description: 'Enable server side encryption powered by KMS.',
103
105
  type: 'String',
104
106
  default: 'true',
105
107
  allowedValues: ['true', 'false'],
106
108
  });
107
109
  // add the connection between the root and nested stack so the values can be passed down
108
- (stack as TransformerNestedStack).setParameter(readIops.node.id, cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBModelTableReadIOPS));
109
- (stack as TransformerNestedStack).setParameter(writeIops.node.id, cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBModelTableWriteIOPS));
110
- (stack as TransformerNestedStack).setParameter(billingMode.node.id, cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBBillingMode));
111
- (stack as TransformerNestedStack).setParameter(
110
+ (scope as cdk.NestedStack).setParameter(readIops.node.id, cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBModelTableReadIOPS));
111
+ (scope as cdk.NestedStack).setParameter(writeIops.node.id, cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBModelTableWriteIOPS));
112
+ (scope as cdk.NestedStack).setParameter(billingMode.node.id, cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBBillingMode));
113
+ (scope as cdk.NestedStack).setParameter(
112
114
  pointInTimeRecovery.node.id,
113
115
  cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBEnablePointInTimeRecovery),
114
116
  );
115
- (stack as TransformerNestedStack).setParameter(
116
- enableSSE.node.id,
117
- cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBEnableServerSideEncryption),
118
- );
117
+ (scope as cdk.NestedStack).setParameter(enableSSE.node.id, cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBEnableServerSideEncryption));
119
118
 
120
119
  // Add conditions.
121
- new cdk.CfnCondition(stack, ResourceConstants.CONDITIONS.HasEnvironmentParameter, {
122
- expression: cdk.Fn.conditionNot(cdk.Fn.conditionEquals(env, ResourceConstants.NONE)),
120
+ new cdk.CfnCondition(scope, ResourceConstants.CONDITIONS.HasEnvironmentParameter, {
121
+ expression: cdk.Fn.conditionNot(cdk.Fn.conditionEquals(context.synthParameters.amplifyEnvironmentName, ResourceConstants.NONE)),
123
122
  });
124
- const useSSE = new cdk.CfnCondition(stack, ResourceConstants.CONDITIONS.ShouldUseServerSideEncryption, {
123
+ const useSSE = new cdk.CfnCondition(scope, ResourceConstants.CONDITIONS.ShouldUseServerSideEncryption, {
125
124
  expression: cdk.Fn.conditionEquals(enableSSE, 'true'),
126
125
  });
127
- const usePayPerRequestBilling = new cdk.CfnCondition(stack, ResourceConstants.CONDITIONS.ShouldUsePayPerRequestBilling, {
126
+ const usePayPerRequestBilling = new cdk.CfnCondition(scope, ResourceConstants.CONDITIONS.ShouldUsePayPerRequestBilling, {
128
127
  expression: cdk.Fn.conditionEquals(billingMode, 'PAY_PER_REQUEST'),
129
128
  });
130
- const usePointInTimeRecovery = new cdk.CfnCondition(stack, ResourceConstants.CONDITIONS.ShouldUsePointInTimeRecovery, {
129
+ const usePointInTimeRecovery = new cdk.CfnCondition(scope, ResourceConstants.CONDITIONS.ShouldUsePointInTimeRecovery, {
131
130
  expression: cdk.Fn.conditionEquals(pointInTimeRecovery, 'true'),
132
131
  });
133
132
 
134
133
  const removalPolicy = this.options.EnableDeletionProtection ? cdk.RemovalPolicy.RETAIN : cdk.RemovalPolicy.DESTROY;
135
134
 
136
135
  // Expose a way in context to allow proper resource naming
137
- const table = new Table(stack, tableLogicalName, {
136
+ const table = new Table(scope, tableLogicalName, {
138
137
  tableName,
139
138
  partitionKey: {
140
139
  name: 'id',
@@ -146,6 +145,7 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
146
145
  ...(context.isProjectUsingDataStore() ? { timeToLiveAttribute: '_ttl' } : undefined),
147
146
  });
148
147
  const cfnTable = table.node.defaultChild as CfnTable;
148
+ setResourceName(table, { name: modelName, setOnDefaultChild: true });
149
149
 
150
150
  cfnTable.provisionedThroughput = cdk.Fn.conditionIf(usePayPerRequestBilling.logicalId, cdk.Fn.ref('AWS::NoValue'), {
151
151
  ReadCapacityUnits: readIops,
@@ -162,29 +162,31 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
162
162
  };
163
163
 
164
164
  const streamArnOutputId = `GetAtt${ModelResourceIDs.ModelTableStreamArn(def!.name.value)}`;
165
- new cdk.CfnOutput(stack, streamArnOutputId, {
166
- value: cdk.Fn.getAtt(tableLogicalName, 'StreamArn').toString(),
167
- description: 'Your DynamoDB table StreamArn.',
168
- exportName: cdk.Fn.join(':', [context.api.apiId, 'GetAtt', tableLogicalName, 'StreamArn']),
169
- });
165
+ if (table.tableStreamArn) {
166
+ new cdk.CfnOutput(cdk.Stack.of(scope), streamArnOutputId, {
167
+ value: table.tableStreamArn,
168
+ description: 'Your DynamoDB table StreamArn.',
169
+ exportName: cdk.Fn.join(':', [context.api.apiId, 'GetAtt', tableLogicalName, 'StreamArn']),
170
+ });
171
+ }
170
172
 
171
173
  const tableNameOutputId = `GetAtt${tableLogicalName}Name`;
172
- new cdk.CfnOutput(stack, tableNameOutputId, {
173
- value: cdk.Fn.ref(tableLogicalName),
174
+ new cdk.CfnOutput(cdk.Stack.of(scope), tableNameOutputId, {
175
+ value: table.tableName,
174
176
  description: 'Your DynamoDB table name.',
175
177
  exportName: cdk.Fn.join(':', [context.api.apiId, 'GetAtt', tableLogicalName, 'Name']),
176
178
  });
177
179
 
178
- const role = this.createIAMRole(context, def, stack, tableName);
180
+ const role = this.createIAMRole(context, def, scope, tableName);
179
181
  const tableDataSourceLogicalName = `${def!.name.value}Table`;
180
- this.createModelTableDataSource(def, context, table, stack, role, tableDataSourceLogicalName);
182
+ this.createModelTableDataSource(def, context, table, scope, role, tableDataSourceLogicalName);
181
183
  }
182
184
 
183
185
  private createModelTableDataSource(
184
186
  def: ObjectTypeDefinitionNode,
185
187
  context: TransformerContextProvider,
186
188
  table: Table,
187
- stack: cdk.Stack,
189
+ scope: Construct,
188
190
  role: iam.Role,
189
191
  dataSourceLogicalName: string,
190
192
  ): void {
@@ -193,7 +195,7 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
193
195
  datasourceRoleLogicalID,
194
196
  table,
195
197
  { name: dataSourceLogicalName, serviceRole: role },
196
- stack,
198
+ scope,
197
199
  );
198
200
 
199
201
  const cfnDataSource = dataSource.node.defaultChild as CfnDataSource;
@@ -211,7 +213,7 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
211
213
  }
212
214
 
213
215
  const datasourceOutputId = `GetAtt${datasourceRoleLogicalID}Name`;
214
- new cdk.CfnOutput(stack, datasourceOutputId, {
216
+ new cdk.CfnOutput(cdk.Stack.of(scope), datasourceOutputId, {
215
217
  value: dataSource.ds.attrName,
216
218
  description: 'Your model DataSource name.',
217
219
  exportName: cdk.Fn.join(':', [context.api.apiId, 'GetAtt', datasourceRoleLogicalID, 'Name']),
@@ -225,16 +227,17 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
225
227
  /**
226
228
  * createIAMRole
227
229
  */
228
- createIAMRole = (context: TransformerContextProvider, def: ObjectTypeDefinitionNode, stack: cdk.Stack, tableName: string): iam.Role => {
230
+ createIAMRole = (context: TransformerContextProvider, def: ObjectTypeDefinitionNode, scope: Construct, tableName: string): iam.Role => {
229
231
  const roleName = context.resourceHelper.generateIAMRoleName(ModelResourceIDs.ModelTableIAMRoleID(def!.name.value));
230
- const role = new iam.Role(stack, ModelResourceIDs.ModelTableIAMRoleID(def!.name.value), {
232
+ const role = new iam.Role(scope, ModelResourceIDs.ModelTableIAMRoleID(def!.name.value), {
231
233
  roleName,
232
234
  assumedBy: new iam.ServicePrincipal('appsync.amazonaws.com'),
233
235
  });
236
+ setResourceName(role, { name: ModelResourceIDs.ModelTableIAMRoleID(def!.name.value), setOnDefaultChild: true });
234
237
 
235
238
  const amplifyDataStoreTableName = context.resourceHelper.generateTableName(SyncResourceIDs.syncTableName);
236
239
  role.attachInlinePolicy(
237
- new iam.Policy(stack, 'DynamoDBAccess', {
240
+ new iam.Policy(scope, 'DynamoDBAccess', {
238
241
  statements: [
239
242
  new iam.PolicyStatement({
240
243
  effect: iam.Effect.ALLOW,
@@ -278,7 +281,7 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
278
281
  const syncConfig = SyncUtils.getSyncConfig(context, def!.name.value);
279
282
  if (syncConfig && SyncUtils.isLambdaSyncConfig(syncConfig)) {
280
283
  role.attachInlinePolicy(
281
- SyncUtils.createSyncLambdaIAMPolicy(context, stack, syncConfig.LambdaConflictHandler.name, syncConfig.LambdaConflictHandler.region),
284
+ SyncUtils.createSyncLambdaIAMPolicy(context, scope, syncConfig.LambdaConflictHandler.name, syncConfig.LambdaConflictHandler.region),
282
285
  );
283
286
  }
284
287
 
@@ -132,7 +132,7 @@ export abstract class ModelResourceGenerator {
132
132
  `${query.typeName}.${query.fieldName}.{slotName}.{slotIndex}.req.vtl`,
133
133
  ),
134
134
  );
135
- resolver.mapToStack(context.stackManager.getStackFor(query.resolverLogicalId, def!.name.value));
135
+ resolver.setScope(context.stackManager.getScopeFor(query.resolverLogicalId, def!.name.value));
136
136
  context.resolvers.addResolver(query.typeName, query.fieldName, resolver);
137
137
  });
138
138
 
@@ -166,7 +166,7 @@ export abstract class ModelResourceGenerator {
166
166
  `${mutation.typeName}.${mutation.fieldName}.{slotName}.{slotIndex}.req.vtl`,
167
167
  ),
168
168
  );
169
- resolver.mapToStack(context.stackManager.getStackFor(mutation.resolverLogicalId, def!.name.value));
169
+ resolver.setScope(context.stackManager.getScopeFor(mutation.resolverLogicalId, def!.name.value));
170
170
  context.resolvers.addResolver(mutation.typeName, mutation.fieldName, resolver);
171
171
  });
172
172
 
@@ -213,7 +213,7 @@ export abstract class ModelResourceGenerator {
213
213
  ),
214
214
  );
215
215
  }
216
- resolver.mapToStack(context.stackManager.getStackFor(subscription.resolverLogicalId, def!.name.value));
216
+ resolver.setScope(context.stackManager.getScopeFor(subscription.resolverLogicalId, def!.name.value));
217
217
  context.resolvers.addResolver(subscription.typeName, subscription.fieldName, resolver);
218
218
  });
219
219
  }
@@ -252,7 +252,7 @@ export abstract class ModelResourceGenerator {
252
252
  resolverLogicalId,
253
253
  dataSource,
254
254
  MappingTemplate.s3MappingTemplateFromString(
255
- vtlGenerator.generateGetRequestTemplate(requestConfig, ctx),
255
+ vtlGenerator.generateGetRequestTemplate(requestConfig),
256
256
  `${typeName}.${fieldName}.req.vtl`,
257
257
  ),
258
258
  MappingTemplate.s3MappingTemplateFromString(
@@ -292,7 +292,7 @@ export abstract class ModelResourceGenerator {
292
292
  resolverLogicalId,
293
293
  dataSource,
294
294
  MappingTemplate.s3MappingTemplateFromString(
295
- vtlGenerator.generateListRequestTemplate(requestConfig, ctx),
295
+ vtlGenerator.generateListRequestTemplate(requestConfig),
296
296
  `${typeName}.${fieldName}.req.vtl`,
297
297
  ),
298
298
  MappingTemplate.s3MappingTemplateFromString(
@@ -338,7 +338,7 @@ export abstract class ModelResourceGenerator {
338
338
  resolverLogicalId,
339
339
  dataSource,
340
340
  MappingTemplate.s3MappingTemplateFromString(
341
- vtlGenerator.generateCreateRequestTemplate(requestConfig, ctx),
341
+ vtlGenerator.generateCreateRequestTemplate(requestConfig),
342
342
  `${typeName}.${fieldName}.req.vtl`,
343
343
  ),
344
344
  MappingTemplate.s3MappingTemplateFromString(
@@ -400,7 +400,7 @@ export abstract class ModelResourceGenerator {
400
400
  resolverLogicalId,
401
401
  dataSource,
402
402
  MappingTemplate.s3MappingTemplateFromString(
403
- vtlGenerator.generateUpdateRequestTemplate(requestConfig, ctx),
403
+ vtlGenerator.generateUpdateRequestTemplate(requestConfig),
404
404
  `${typeName}.${fieldName}.req.vtl`,
405
405
  ),
406
406
  MappingTemplate.s3MappingTemplateFromString(
@@ -461,7 +461,7 @@ export abstract class ModelResourceGenerator {
461
461
  resolverLogicalId,
462
462
  dataSource,
463
463
  MappingTemplate.s3MappingTemplateFromString(
464
- vtlGenerator.generateDeleteRequestTemplate(requestConfig, ctx),
464
+ vtlGenerator.generateDeleteRequestTemplate(requestConfig),
465
465
  `${typeName}.${fieldName}.req.vtl`,
466
466
  ),
467
467
  MappingTemplate.s3MappingTemplateFromString(
@@ -37,17 +37,17 @@ export class RdsModelResourceGenerator extends ModelResourceGenerator {
37
37
  RDSLambdaDataSourceLogicalID,
38
38
  RDSPatchingSubscriptionLogicalID,
39
39
  } = ResourceConstants.RESOURCES;
40
- const lambdaRoleStack = context.stackManager.getStackFor(RDSLambdaIAMRoleLogicalID, RDS_STACK_NAME);
41
- const lambdaStack = context.stackManager.getStackFor(RDSLambdaLogicalID, RDS_STACK_NAME);
42
- setRDSLayerMappings(lambdaStack, context.rdsLayerMapping);
40
+ const lambdaRoleScope = context.stackManager.getScopeFor(RDSLambdaIAMRoleLogicalID, RDS_STACK_NAME);
41
+ const lambdaScope = context.stackManager.getScopeFor(RDSLambdaLogicalID, RDS_STACK_NAME);
42
+ setRDSLayerMappings(lambdaScope, context.rdsLayerMapping);
43
43
  const role = createRdsLambdaRole(
44
44
  context.resourceHelper.generateIAMRoleName(RDSLambdaIAMRoleLogicalID),
45
- lambdaRoleStack,
45
+ lambdaRoleScope,
46
46
  secretEntry as RDSConnectionSecrets,
47
47
  );
48
48
 
49
49
  const lambda = createRdsLambda(
50
- lambdaStack,
50
+ lambdaScope,
51
51
  context.api,
52
52
  role,
53
53
  {
@@ -60,22 +60,22 @@ export class RdsModelResourceGenerator extends ModelResourceGenerator {
60
60
  context.sqlLambdaVpcConfig,
61
61
  );
62
62
 
63
- const patchingLambdaRoleStack = context.stackManager.getStackFor(RDSPatchingLambdaIAMRoleLogicalID, RDS_STACK_NAME);
64
- const patchingLambdaStack = context.stackManager.getStackFor(RDSPatchingLambdaLogicalID, RDS_STACK_NAME);
63
+ const patchingLambdaRoleScope = context.stackManager.getScopeFor(RDSPatchingLambdaIAMRoleLogicalID, RDS_STACK_NAME);
64
+ const patchingLambdaScope = context.stackManager.getScopeFor(RDSPatchingLambdaLogicalID, RDS_STACK_NAME);
65
65
  const patchingLambdaRole = createRdsPatchingLambdaRole(
66
66
  context.resourceHelper.generateIAMRoleName(RDSPatchingLambdaIAMRoleLogicalID),
67
- patchingLambdaRoleStack,
67
+ patchingLambdaRoleScope,
68
68
  lambda.functionArn,
69
69
  );
70
70
 
71
71
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
72
- const patchingLambda = createRdsPatchingLambda(patchingLambdaStack, context.api, patchingLambdaRole, {
72
+ const patchingLambda = createRdsPatchingLambda(patchingLambdaScope, context.api, patchingLambdaRole, {
73
73
  LAMBDA_FUNCTION_ARN: lambda.functionArn,
74
74
  });
75
75
 
76
76
  // Add SNS subscription for patching notifications
77
- const patchingSubscriptionStack = context.stackManager.getStackFor(RDSPatchingSubscriptionLogicalID, RDS_STACK_NAME);
78
- const snsTopic = Topic.fromTopicArn(patchingSubscriptionStack, 'RDSPatchingTopic', RDS_PATCHING_SNS_TOPIC_ARN);
77
+ const patchingSubscriptionScope = context.stackManager.getScopeFor(RDSPatchingSubscriptionLogicalID, RDS_STACK_NAME);
78
+ const snsTopic = Topic.fromTopicArn(patchingSubscriptionScope, 'RDSPatchingTopic', RDS_PATCHING_SNS_TOPIC_ARN);
79
79
  const subscription = new LambdaSubscription(patchingLambda, {
80
80
  filterPolicy: {
81
81
  Region: SubscriptionFilter.stringFilter({
@@ -85,8 +85,8 @@ export class RdsModelResourceGenerator extends ModelResourceGenerator {
85
85
  });
86
86
  snsTopic.addSubscription(subscription);
87
87
 
88
- const lambdaDataSourceStack = context.stackManager.getStackFor(RDSLambdaDataSourceLogicalID, RDS_STACK_NAME);
89
- const rdsDatasource = context.api.host.addLambdaDataSource(`${RDSLambdaDataSourceLogicalID}`, lambda, {}, lambdaDataSourceStack);
88
+ const lambdaDataSourceScope = context.stackManager.getScopeFor(RDSLambdaDataSourceLogicalID, RDS_STACK_NAME);
89
+ const rdsDatasource = context.api.host.addLambdaDataSource(`${RDSLambdaDataSourceLogicalID}`, lambda, {}, lambdaDataSourceScope);
90
90
  this.models.forEach((model) => {
91
91
  context.dataSources.add(model, rdsDatasource);
92
92
  this.datasourceMap[model.name.value] = rdsDatasource;