@aws-amplify/graphql-model-transformer 0.17.0-rds-support.0 → 0.17.0-rdsv2preview.0

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 (106) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/lib/graphql-model-transformer.d.ts.map +1 -1
  3. package/lib/graphql-model-transformer.js +12 -8
  4. package/lib/graphql-model-transformer.js.map +1 -1
  5. package/lib/rds-lambda.zip +0 -0
  6. package/lib/resolvers/generators/rds-vtl-generator.d.ts.map +1 -1
  7. package/lib/resolvers/generators/rds-vtl-generator.js +1 -1
  8. package/lib/resolvers/generators/rds-vtl-generator.js.map +1 -1
  9. package/lib/resolvers/rds/index.d.ts +1 -0
  10. package/lib/resolvers/rds/index.d.ts.map +1 -1
  11. package/lib/resolvers/rds/index.js +1 -0
  12. package/lib/resolvers/rds/index.js.map +1 -1
  13. package/lib/resolvers/rds/mutation.d.ts.map +1 -1
  14. package/lib/resolvers/rds/mutation.js +7 -2
  15. package/lib/resolvers/rds/mutation.js.map +1 -1
  16. package/lib/resolvers/rds/query.d.ts +2 -0
  17. package/lib/resolvers/rds/query.d.ts.map +1 -0
  18. package/lib/resolvers/rds/query.js +25 -0
  19. package/lib/resolvers/rds/query.js.map +1 -0
  20. package/lib/resolvers/rds/resolver.d.ts.map +1 -1
  21. package/lib/resolvers/rds/resolver.js +10 -9
  22. package/lib/resolvers/rds/resolver.js.map +1 -1
  23. package/package.json +7 -7
  24. package/rds-lambda/clients/DBClient.ts +3 -3
  25. package/rds-lambda/clients/mysql/MySQLClient.ts +54 -15
  26. package/rds-lambda/clients/mysql/MySQLPasswordClient.ts +4 -3
  27. package/rds-lambda/interfaces/BaseRequest.ts +2 -2
  28. package/rds-lambda/interfaces/ListRequest.ts +11 -0
  29. package/rds-lambda/node_modules/.package-lock.json +399 -391
  30. package/rds-lambda/node_modules/@aws-sdk/abort-controller/package.json +2 -2
  31. package/rds-lambda/node_modules/@aws-sdk/client-ssm/package.json +30 -30
  32. package/rds-lambda/node_modules/@aws-sdk/client-sso/package.json +26 -26
  33. package/rds-lambda/node_modules/@aws-sdk/client-sso-oidc/package.json +26 -26
  34. package/rds-lambda/node_modules/@aws-sdk/client-sts/package.json +29 -29
  35. package/rds-lambda/node_modules/@aws-sdk/config-resolver/package.json +5 -5
  36. package/rds-lambda/node_modules/@aws-sdk/credential-provider-env/package.json +3 -3
  37. package/rds-lambda/node_modules/@aws-sdk/credential-provider-imds/package.json +5 -5
  38. package/rds-lambda/node_modules/@aws-sdk/credential-provider-ini/package.json +9 -9
  39. package/rds-lambda/node_modules/@aws-sdk/credential-provider-node/package.json +10 -10
  40. package/rds-lambda/node_modules/@aws-sdk/credential-provider-process/package.json +4 -4
  41. package/rds-lambda/node_modules/@aws-sdk/credential-provider-sso/package.json +6 -6
  42. package/rds-lambda/node_modules/@aws-sdk/credential-provider-web-identity/package.json +3 -3
  43. package/rds-lambda/node_modules/@aws-sdk/fetch-http-handler/package.json +5 -5
  44. package/rds-lambda/node_modules/@aws-sdk/hash-node/package.json +2 -2
  45. package/rds-lambda/node_modules/@aws-sdk/invalid-dependency/package.json +2 -2
  46. package/rds-lambda/node_modules/@aws-sdk/middleware-content-length/package.json +3 -3
  47. package/rds-lambda/node_modules/@aws-sdk/middleware-endpoint/package.json +7 -7
  48. package/rds-lambda/node_modules/@aws-sdk/middleware-host-header/package.json +3 -3
  49. package/rds-lambda/node_modules/@aws-sdk/middleware-logger/package.json +2 -2
  50. package/rds-lambda/node_modules/@aws-sdk/middleware-recursion-detection/package.json +3 -3
  51. package/rds-lambda/node_modules/@aws-sdk/middleware-retry/package.json +7 -7
  52. package/rds-lambda/node_modules/@aws-sdk/middleware-sdk-sts/package.json +6 -6
  53. package/rds-lambda/node_modules/@aws-sdk/middleware-serde/package.json +2 -2
  54. package/rds-lambda/node_modules/@aws-sdk/middleware-signing/package.json +6 -6
  55. package/rds-lambda/node_modules/@aws-sdk/middleware-stack/package.json +2 -2
  56. package/rds-lambda/node_modules/@aws-sdk/middleware-user-agent/package.json +4 -4
  57. package/rds-lambda/node_modules/@aws-sdk/node-config-provider/package.json +4 -4
  58. package/rds-lambda/node_modules/@aws-sdk/node-http-handler/package.json +5 -5
  59. package/rds-lambda/node_modules/@aws-sdk/property-provider/package.json +2 -2
  60. package/rds-lambda/node_modules/@aws-sdk/protocol-http/package.json +2 -2
  61. package/rds-lambda/node_modules/@aws-sdk/querystring-builder/package.json +2 -2
  62. package/rds-lambda/node_modules/@aws-sdk/querystring-parser/package.json +2 -2
  63. package/rds-lambda/node_modules/@aws-sdk/service-error-classification/package.json +2 -2
  64. package/rds-lambda/node_modules/@aws-sdk/shared-ini-file-loader/package.json +2 -2
  65. package/rds-lambda/node_modules/@aws-sdk/signature-v4/package.json +4 -4
  66. package/rds-lambda/node_modules/@aws-sdk/smithy-client/package.json +3 -3
  67. package/rds-lambda/node_modules/@aws-sdk/token-providers/package.json +5 -5
  68. package/rds-lambda/node_modules/@aws-sdk/types/package.json +1 -1
  69. package/rds-lambda/node_modules/@aws-sdk/url-parser/package.json +3 -3
  70. package/rds-lambda/node_modules/@aws-sdk/util-defaults-mode-browser/package.json +4 -4
  71. package/rds-lambda/node_modules/@aws-sdk/util-defaults-mode-node/package.json +7 -7
  72. package/rds-lambda/node_modules/@aws-sdk/util-endpoints/package.json +2 -2
  73. package/rds-lambda/node_modules/@aws-sdk/util-middleware/package.json +2 -2
  74. package/rds-lambda/node_modules/@aws-sdk/util-retry/package.json +3 -3
  75. package/rds-lambda/node_modules/@aws-sdk/util-user-agent-browser/package.json +3 -3
  76. package/rds-lambda/node_modules/@aws-sdk/util-user-agent-node/package.json +4 -4
  77. package/rds-lambda/node_modules/@aws-sdk/util-waiter/package.json +3 -3
  78. package/rds-lambda/node_modules/caniuse-lite/README.md +2 -88
  79. package/rds-lambda/node_modules/caniuse-lite/package.json +2 -6
  80. package/rds-lambda/node_modules/electron-to-chromium/full-chromium-versions.json +1 -1
  81. package/rds-lambda/node_modules/electron-to-chromium/full-versions.json +1 -1
  82. package/rds-lambda/node_modules/electron-to-chromium/package.json +1 -1
  83. package/rds-lambda/node_modules/long/LICENSE +202 -202
  84. package/rds-lambda/node_modules/long/README.md +246 -280
  85. package/rds-lambda/node_modules/long/package.json +32 -43
  86. package/rds-lambda/node_modules/mysql2/README.md +2 -8
  87. package/rds-lambda/node_modules/mysql2/node_modules/lru-cache/LICENSE +1 -1
  88. package/rds-lambda/node_modules/mysql2/node_modules/lru-cache/README.md +102 -775
  89. package/rds-lambda/node_modules/mysql2/node_modules/lru-cache/package.json +9 -49
  90. package/rds-lambda/node_modules/mysql2/node_modules/yallist/LICENSE +15 -0
  91. package/rds-lambda/node_modules/mysql2/node_modules/yallist/README.md +204 -0
  92. package/rds-lambda/node_modules/mysql2/node_modules/yallist/package.json +29 -0
  93. package/rds-lambda/node_modules/mysql2/package.json +15 -21
  94. package/rds-lambda/package-lock.json +798 -782
  95. package/rds-lambda/package.json +1 -1
  96. package/rds-lambda/utils/rds_utils.ts +107 -0
  97. package/src/__tests__/model-transformer.test.ts +89 -1
  98. package/src/__tests__/test-utils/rds_utils.test.ts +299 -0
  99. package/src/graphql-model-transformer.ts +5 -1
  100. package/src/resolvers/generators/rds-vtl-generator.ts +2 -1
  101. package/src/resolvers/rds/index.ts +1 -0
  102. package/src/resolvers/rds/mutation.ts +7 -2
  103. package/src/resolvers/rds/query.ts +33 -0
  104. package/src/resolvers/rds/resolver.ts +25 -16
  105. package/tsconfig.tsbuildinfo +1 -1
  106. package/rds-lambda/node_modules/long/umd/package.json +0 -3
@@ -1,7 +1,7 @@
1
1
  import { Knex } from 'knex';
2
2
  import { DBClient } from '../DBClient';
3
3
  import { BaseRequest, Request } from '../../interfaces/BaseRequest';
4
- import { ListRequest } from '../../interfaces/ListRequest';
4
+ import { IndexRequest, ListRequest } from '../../interfaces/ListRequest';
5
5
 
6
6
  export abstract class MySQLClient extends DBClient {
7
7
  client: Knex;
@@ -20,6 +20,8 @@ export abstract class MySQLClient extends DBClient {
20
20
  return this.executeList(request as ListRequest);
21
21
  case 'DELETE':
22
22
  return this.executeDelete(request as Request);
23
+ case 'INDEX':
24
+ return this.executeIndex(request as IndexRequest);
23
25
  default:
24
26
  throw Error('Invalid operation');
25
27
  }
@@ -29,8 +31,14 @@ export abstract class MySQLClient extends DBClient {
29
31
  }
30
32
 
31
33
  private executeCreate = async (request: Request): Promise<any> => {
34
+ // Insert the record
32
35
  await (await this.getClient())(request.table).insert(request.args.input);
33
- return request.args.input;
36
+
37
+ // Select the record
38
+ const resultQuery = (await this.getClient())(request.table);
39
+ this.addKeyConditions(resultQuery, request);
40
+ const result = await resultQuery.select();
41
+ return result ? result[0] : {};
34
42
  }
35
43
 
36
44
  private executeGet = async (request: Request): Promise<any> => {
@@ -41,32 +49,63 @@ export abstract class MySQLClient extends DBClient {
41
49
  }
42
50
 
43
51
  private executeUpdate = async (request: Request): Promise<any> => {
52
+ // Update the record
44
53
  const query = (await this.getClient())(request.table);
45
54
  this.addKeyConditions(query, request);
46
- return request.args.input;
55
+ await query.update(request.args.input);
56
+
57
+ // Select the record
58
+ const resultQuery = (await this.getClient())(request.table);
59
+ this.addKeyConditions(resultQuery, request);
60
+ const result = await resultQuery.select();
61
+ return result ? result[0] : {};
47
62
  }
48
63
 
49
64
  private executeList = async (request: ListRequest): Promise<any> => {
50
65
  const nextOffset = request.args?.nextToken
51
- ? Number.parseInt(Buffer.from(request.args.nextToken, 'base64').toString('base64'), 10)
66
+ ? Number.parseInt(Buffer.from(request.args.nextToken, 'base64').toString('utf-8'), 10)
52
67
  : 0;
53
- const query = (await this.getClient())(request.table).select().offset(nextOffset).limit(request.args?.limit ?? 100);
54
- if (request.args?.filter) {
55
- Object.keys(request.args.filter).filter((key) => request.args.hasOwnProperty(key)).forEach((key) => {
56
- query.whereLike(key, request.args.filter[key]);
57
- });
58
- this.addSortConditions(query, request);
59
- }
60
- const nextToken = Buffer.from((nextOffset + request.args.limit).toString());
61
- return { items: (await query.returning('*')), nextToken };
68
+ const limit = request.args?.limit ?? 100;
69
+ const query = (await this.getClient())(request.table).select().offset(nextOffset).limit(limit);
70
+
71
+ this.addSortConditions(query, request);
72
+ const result = await query.returning('*');
73
+ const endOfResults = result?.length && result?.length < limit;
74
+ const nextToken = endOfResults ? null : Buffer.from((nextOffset + request.args.limit).toString()).toString('base64');
75
+ return { items: result, nextToken };
62
76
  }
63
77
 
64
78
  private executeDelete = async (request: Request): Promise<any> => {
79
+ // Select the record
80
+ const resultQuery = (await this.getClient())(request.table);
81
+ this.addKeyConditions(resultQuery, request);
82
+ const result = await resultQuery.select();
83
+
84
+ // Delete the record
65
85
  const query = (await this.getClient())(request.table);
66
86
  Object.keys(request.args.input).filter((key) => request.args.input.hasOwnProperty(key)).forEach((key) => {
67
- query.whereLike(key, request.args.input[key]);
87
+ query.where(key, request.args.input[key]);
68
88
  });
69
89
  await query.delete();
70
- return request.args.input;
90
+
91
+ return result ? result[0] : {};
92
+ }
93
+
94
+ private executeIndex = async (request: IndexRequest): Promise<any> => {
95
+ const searchFilter = JSON.parse(JSON.stringify(request.args.input));
96
+ ['filter', 'limit', 'nextToken', 'sortDirection'].forEach(key => {
97
+ delete searchFilter[key];
98
+ });
99
+ const nextOffset = request.args?.nextToken
100
+ ? Number.parseInt(Buffer.from(request.args.nextToken, 'base64').toString('utf-8'), 10)
101
+ : 0;
102
+ const limit = request.args?.limit ?? 100;
103
+ const query = (await this.getClient())(request.table).where(searchFilter).select().offset(nextOffset).limit(limit);
104
+
105
+ this.addSortConditions(query, request);
106
+ const result = await query.returning('*');
107
+ const endOfResults = result?.length && result?.length < limit;
108
+ const nextToken = endOfResults ? null : Buffer.from((nextOffset + request.args.limit).toString()).toString('base64');
109
+ return { items: result, nextToken };
71
110
  }
72
111
  }
@@ -1,6 +1,7 @@
1
- import Knex from 'knex';
1
+ import knex, { Knex } from 'knex';
2
2
  import { SSMClient, GetParameterCommand } from '@aws-sdk/client-ssm';
3
3
  import { MySQLClient } from './MySQLClient';
4
+ import * as mysql2 from 'mysql2/promise';
4
5
 
5
6
  /**
6
7
  * Postgres client with password connection implementation
@@ -22,8 +23,8 @@ export class MySQLPasswordClient extends MySQLClient {
22
23
  return this.client;
23
24
  }
24
25
  const passwordClient = this.getSSMClient();
25
- return Knex({
26
- client: 'mysql',
26
+ return knex({
27
+ client: 'mysql2',
27
28
  connection: {
28
29
  host: process.env.host,
29
30
  port: Number.parseInt(process.env.port ?? '3306', 10),
@@ -9,14 +9,14 @@ export interface RequestArgs extends BaseRequestArgs {
9
9
 
10
10
  export interface BaseRequest {
11
11
  table: string;
12
- operation: 'GET' | 'LIST' | 'CREATE' | 'UPDATE' | 'DELETE';
12
+ operation: 'GET' | 'LIST' | 'CREATE' | 'UPDATE' | 'DELETE' | 'INDEX';
13
13
  operationName: string;
14
14
  args: BaseRequestArgs;
15
15
  }
16
16
 
17
17
  export interface Request extends BaseRequest {
18
18
  table: string;
19
- operation: 'GET' | 'LIST' | 'CREATE' | 'UPDATE' | 'DELETE';
19
+ operation: 'GET' | 'LIST' | 'CREATE' | 'UPDATE' | 'DELETE' | 'INDEX';
20
20
  operationName: string;
21
21
  args: RequestArgs;
22
22
  }
@@ -18,3 +18,14 @@ export interface ListRequest extends BaseRequest {
18
18
  operationName: string;
19
19
  args: ListRequestArgs;
20
20
  }
21
+
22
+ export interface IndexRequestArgs extends ListRequestArgs {
23
+ [key: string]: any;
24
+ }
25
+
26
+ export interface IndexRequest extends BaseRequest {
27
+ table: string;
28
+ operation: 'INDEX';
29
+ operationName: string;
30
+ args: IndexRequestArgs;
31
+ }