@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.
- package/CHANGELOG.md +8 -1
- package/lib/graphql-model-transformer.d.ts.map +1 -1
- package/lib/graphql-model-transformer.js +12 -8
- package/lib/graphql-model-transformer.js.map +1 -1
- package/lib/rds-lambda.zip +0 -0
- package/lib/resolvers/generators/rds-vtl-generator.d.ts.map +1 -1
- package/lib/resolvers/generators/rds-vtl-generator.js +1 -1
- package/lib/resolvers/generators/rds-vtl-generator.js.map +1 -1
- package/lib/resolvers/rds/index.d.ts +1 -0
- package/lib/resolvers/rds/index.d.ts.map +1 -1
- package/lib/resolvers/rds/index.js +1 -0
- package/lib/resolvers/rds/index.js.map +1 -1
- package/lib/resolvers/rds/mutation.d.ts.map +1 -1
- package/lib/resolvers/rds/mutation.js +7 -2
- package/lib/resolvers/rds/mutation.js.map +1 -1
- package/lib/resolvers/rds/query.d.ts +2 -0
- package/lib/resolvers/rds/query.d.ts.map +1 -0
- package/lib/resolvers/rds/query.js +25 -0
- package/lib/resolvers/rds/query.js.map +1 -0
- package/lib/resolvers/rds/resolver.d.ts.map +1 -1
- package/lib/resolvers/rds/resolver.js +10 -9
- package/lib/resolvers/rds/resolver.js.map +1 -1
- package/package.json +7 -7
- package/rds-lambda/clients/DBClient.ts +3 -3
- package/rds-lambda/clients/mysql/MySQLClient.ts +54 -15
- package/rds-lambda/clients/mysql/MySQLPasswordClient.ts +4 -3
- package/rds-lambda/interfaces/BaseRequest.ts +2 -2
- package/rds-lambda/interfaces/ListRequest.ts +11 -0
- package/rds-lambda/node_modules/.package-lock.json +399 -391
- package/rds-lambda/node_modules/@aws-sdk/abort-controller/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/client-ssm/package.json +30 -30
- package/rds-lambda/node_modules/@aws-sdk/client-sso/package.json +26 -26
- package/rds-lambda/node_modules/@aws-sdk/client-sso-oidc/package.json +26 -26
- package/rds-lambda/node_modules/@aws-sdk/client-sts/package.json +29 -29
- package/rds-lambda/node_modules/@aws-sdk/config-resolver/package.json +5 -5
- package/rds-lambda/node_modules/@aws-sdk/credential-provider-env/package.json +3 -3
- package/rds-lambda/node_modules/@aws-sdk/credential-provider-imds/package.json +5 -5
- package/rds-lambda/node_modules/@aws-sdk/credential-provider-ini/package.json +9 -9
- package/rds-lambda/node_modules/@aws-sdk/credential-provider-node/package.json +10 -10
- package/rds-lambda/node_modules/@aws-sdk/credential-provider-process/package.json +4 -4
- package/rds-lambda/node_modules/@aws-sdk/credential-provider-sso/package.json +6 -6
- package/rds-lambda/node_modules/@aws-sdk/credential-provider-web-identity/package.json +3 -3
- package/rds-lambda/node_modules/@aws-sdk/fetch-http-handler/package.json +5 -5
- package/rds-lambda/node_modules/@aws-sdk/hash-node/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/invalid-dependency/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/middleware-content-length/package.json +3 -3
- package/rds-lambda/node_modules/@aws-sdk/middleware-endpoint/package.json +7 -7
- package/rds-lambda/node_modules/@aws-sdk/middleware-host-header/package.json +3 -3
- package/rds-lambda/node_modules/@aws-sdk/middleware-logger/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/middleware-recursion-detection/package.json +3 -3
- package/rds-lambda/node_modules/@aws-sdk/middleware-retry/package.json +7 -7
- package/rds-lambda/node_modules/@aws-sdk/middleware-sdk-sts/package.json +6 -6
- package/rds-lambda/node_modules/@aws-sdk/middleware-serde/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/middleware-signing/package.json +6 -6
- package/rds-lambda/node_modules/@aws-sdk/middleware-stack/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/middleware-user-agent/package.json +4 -4
- package/rds-lambda/node_modules/@aws-sdk/node-config-provider/package.json +4 -4
- package/rds-lambda/node_modules/@aws-sdk/node-http-handler/package.json +5 -5
- package/rds-lambda/node_modules/@aws-sdk/property-provider/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/protocol-http/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/querystring-builder/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/querystring-parser/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/service-error-classification/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/shared-ini-file-loader/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/signature-v4/package.json +4 -4
- package/rds-lambda/node_modules/@aws-sdk/smithy-client/package.json +3 -3
- package/rds-lambda/node_modules/@aws-sdk/token-providers/package.json +5 -5
- package/rds-lambda/node_modules/@aws-sdk/types/package.json +1 -1
- package/rds-lambda/node_modules/@aws-sdk/url-parser/package.json +3 -3
- package/rds-lambda/node_modules/@aws-sdk/util-defaults-mode-browser/package.json +4 -4
- package/rds-lambda/node_modules/@aws-sdk/util-defaults-mode-node/package.json +7 -7
- package/rds-lambda/node_modules/@aws-sdk/util-endpoints/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/util-middleware/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/util-retry/package.json +3 -3
- package/rds-lambda/node_modules/@aws-sdk/util-user-agent-browser/package.json +3 -3
- package/rds-lambda/node_modules/@aws-sdk/util-user-agent-node/package.json +4 -4
- package/rds-lambda/node_modules/@aws-sdk/util-waiter/package.json +3 -3
- package/rds-lambda/node_modules/caniuse-lite/README.md +2 -88
- package/rds-lambda/node_modules/caniuse-lite/package.json +2 -6
- package/rds-lambda/node_modules/electron-to-chromium/full-chromium-versions.json +1 -1
- package/rds-lambda/node_modules/electron-to-chromium/full-versions.json +1 -1
- package/rds-lambda/node_modules/electron-to-chromium/package.json +1 -1
- package/rds-lambda/node_modules/long/LICENSE +202 -202
- package/rds-lambda/node_modules/long/README.md +246 -280
- package/rds-lambda/node_modules/long/package.json +32 -43
- package/rds-lambda/node_modules/mysql2/README.md +2 -8
- package/rds-lambda/node_modules/mysql2/node_modules/lru-cache/LICENSE +1 -1
- package/rds-lambda/node_modules/mysql2/node_modules/lru-cache/README.md +102 -775
- package/rds-lambda/node_modules/mysql2/node_modules/lru-cache/package.json +9 -49
- package/rds-lambda/node_modules/mysql2/node_modules/yallist/LICENSE +15 -0
- package/rds-lambda/node_modules/mysql2/node_modules/yallist/README.md +204 -0
- package/rds-lambda/node_modules/mysql2/node_modules/yallist/package.json +29 -0
- package/rds-lambda/node_modules/mysql2/package.json +15 -21
- package/rds-lambda/package-lock.json +798 -782
- package/rds-lambda/package.json +1 -1
- package/rds-lambda/utils/rds_utils.ts +107 -0
- package/src/__tests__/model-transformer.test.ts +89 -1
- package/src/__tests__/test-utils/rds_utils.test.ts +299 -0
- package/src/graphql-model-transformer.ts +5 -1
- package/src/resolvers/generators/rds-vtl-generator.ts +2 -1
- package/src/resolvers/rds/index.ts +1 -0
- package/src/resolvers/rds/mutation.ts +7 -2
- package/src/resolvers/rds/query.ts +33 -0
- package/src/resolvers/rds/resolver.ts +25 -16
- package/tsconfig.tsbuildinfo +1 -1
- 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
|
-
|
|
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
|
-
|
|
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('
|
|
66
|
+
? Number.parseInt(Buffer.from(request.args.nextToken, 'base64').toString('utf-8'), 10)
|
|
52
67
|
: 0;
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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.
|
|
87
|
+
query.where(key, request.args.input[key]);
|
|
68
88
|
});
|
|
69
89
|
await query.delete();
|
|
70
|
-
|
|
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
|
|
26
|
-
client: '
|
|
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
|
+
}
|