cdk-serverless 1.1.43 → 2.0.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/README.md +3 -116
- package/docs/constructs/.nojekyll +1 -0
- package/docs/constructs/assets/highlight.css +92 -0
- package/docs/constructs/assets/main.js +58 -0
- package/docs/constructs/assets/search.js +1 -0
- package/docs/constructs/assets/style.css +1338 -0
- package/docs/constructs/classes/AssetCdn.html +165 -0
- package/docs/constructs/classes/BaseApi.html +152 -0
- package/docs/constructs/classes/CognitoAuthentication.html +172 -0
- package/docs/constructs/classes/LambdaFunction.html +1101 -0
- package/docs/constructs/classes/RestApi.html +306 -0
- package/docs/constructs/classes/SingleTableDatastore.html +155 -0
- package/docs/constructs/classes/Workflow.html +170 -0
- package/docs/constructs/index.html +122 -0
- package/docs/constructs/interfaces/AssetCdnProps.html +89 -0
- package/docs/constructs/interfaces/BaseApiProps.html +158 -0
- package/docs/constructs/interfaces/CognitoAuthenticationProps.html +151 -0
- package/docs/constructs/interfaces/ICognitoAuthentication.html +86 -0
- package/docs/constructs/interfaces/IJwtAuthentication.html +96 -0
- package/docs/constructs/interfaces/LambdaFunctionProps.html +189 -0
- package/docs/constructs/interfaces/LambdaTracingOptions.html +85 -0
- package/docs/constructs/interfaces/RestApiProps.html +227 -0
- package/docs/constructs/interfaces/SingleTableDatastoreProps.html +109 -0
- package/docs/constructs/interfaces/SingleTableDesign.html +113 -0
- package/docs/constructs/interfaces/WorkflowProps.html +105 -0
- package/docs/constructs/modules.html +85 -0
- package/docs/constructs/types/LambdaOptions.html +58 -0
- package/docs/lambda/.nojekyll +1 -0
- package/docs/lambda/assets/highlight.css +36 -0
- package/docs/lambda/assets/main.js +58 -0
- package/docs/lambda/assets/search.js +1 -0
- package/docs/lambda/assets/style.css +1338 -0
- package/docs/lambda/classes/auth.ApiGatewayv1CognitoAuthorizer.html +323 -0
- package/docs/lambda/classes/auth.ApiGatewayv1JwtAuthorizer.html +322 -0
- package/docs/lambda/classes/auth.ApiGatewayv2CognitoAuthorizer.html +324 -0
- package/docs/lambda/classes/auth.ApiGatewayv2JwtAuthorizer.html +320 -0
- package/docs/lambda/classes/auth.AppSyncCognitoAuthorizer.html +314 -0
- package/docs/lambda/classes/auth.CognitoAuthorizer.html +303 -0
- package/docs/lambda/classes/auth.JwtAuthorizer.html +298 -0
- package/docs/lambda/classes/errors.BadRequestError.html +193 -0
- package/docs/lambda/classes/errors.ForbiddenError.html +193 -0
- package/docs/lambda/classes/errors.HttpError.html +199 -0
- package/docs/lambda/classes/errors.NotFoundError.html +193 -0
- package/docs/lambda/classes/errors.UnauthenticatedError.html +193 -0
- package/docs/lambda/functions/api.createAppSyncHandler.html +98 -0
- package/docs/lambda/functions/api.createHttpHandler.html +95 -0
- package/docs/lambda/functions/api.createOpenApiHandler.html +95 -0
- package/docs/lambda/functions/api.createOpenApiHandlerWithRequestBody.html +95 -0
- package/docs/lambda/functions/api.createOpenApiHandlerWithRequestBodyNoResponse.html +93 -0
- package/docs/lambda/index.html +140 -0
- package/docs/lambda/interfaces/api.AppSyncHandlerContext.html +123 -0
- package/docs/lambda/interfaces/api.HttpHandlerContext.html +122 -0
- package/docs/lambda/interfaces/api.HttpResponseContext.html +117 -0
- package/docs/lambda/interfaces/api.Operation.html +109 -0
- package/docs/lambda/interfaces/api.OperationWithRequestBody.html +123 -0
- package/docs/lambda/modules/api.html +100 -0
- package/docs/lambda/modules/auth.html +88 -0
- package/docs/lambda/modules/errors.html +86 -0
- package/docs/lambda/modules.html +81 -0
- package/docs/lambda/types/api.APIGatewayv1Handler.html +79 -0
- package/docs/lambda/types/api.AppSyncHandler.html +100 -0
- package/docs/lambda/types/api.HttpHandler.html +101 -0
- package/docs/projen/.nojekyll +1 -0
- package/docs/projen/assets/highlight.css +85 -0
- package/docs/projen/assets/main.js +58 -0
- package/docs/projen/assets/search.js +1 -0
- package/docs/projen/assets/style.css +1338 -0
- package/docs/projen/classes/Datastore.html +180 -0
- package/docs/projen/classes/RestApi.html +184 -0
- package/docs/projen/classes/ServerlessProject.html +1246 -0
- package/docs/projen/classes/Workflow.html +178 -0
- package/docs/projen/index.html +112 -0
- package/docs/projen/interfaces/DatastoreOptions.html +75 -0
- package/docs/projen/interfaces/RestApiOptions.html +75 -0
- package/docs/projen/interfaces/ServerlessProjectOptions.html +1921 -0
- package/docs/projen/interfaces/WorkflowOptions.html +75 -0
- package/docs/projen/modules.html +65 -0
- package/docs/projen/variables/PACKAGE_NAME.html +48 -0
- package/lib/constructs/asset-cdn.js +2 -1
- package/lib/constructs/{auth.d.ts → authentication.d.ts} +32 -15
- package/lib/constructs/authentication.js +136 -0
- package/lib/constructs/base-api.d.ts +10 -21
- package/lib/constructs/base-api.js +2 -37
- package/lib/constructs/func.d.ts +6 -25
- package/lib/constructs/func.js +16 -37
- package/lib/constructs/index.d.ts +4 -6
- package/lib/constructs/index.js +5 -7
- package/lib/constructs/rest-api.d.ts +73 -0
- package/lib/constructs/rest-api.js +278 -0
- package/lib/constructs/table.d.ts +25 -6
- package/lib/constructs/table.js +12 -70
- package/lib/constructs/workflow.d.ts +18 -0
- package/lib/constructs/workflow.js +58 -0
- package/lib/lambda/auth.d.ts +144 -0
- package/lib/lambda/auth.js +309 -0
- package/lib/lambda/errors.d.ts +16 -0
- package/lib/lambda/errors.js +35 -0
- package/lib/lambda/handler.d.ts +90 -0
- package/lib/lambda/handler.js +217 -0
- package/lib/lambda/index.d.ts +3 -0
- package/lib/lambda/index.js +30 -0
- package/lib/projen/core.d.ts +4 -14
- package/lib/projen/core.js +25 -29
- package/lib/projen/datastore.d.ts +13 -0
- package/lib/projen/datastore.js +145 -0
- package/lib/projen/index.d.ts +3 -2
- package/lib/projen/index.js +5 -3
- package/lib/projen/rest-api.d.ts +13 -0
- package/lib/projen/rest-api.js +127 -0
- package/lib/projen/workflow.d.ts +18 -0
- package/lib/projen/workflow.js +99 -0
- package/package.json +44 -35
- package/CHANGELOG.md +0 -170
- package/img/autocomplete.gif +0 -0
- package/lib/constructs/auth.js +0 -135
- package/lib/constructs/graphql-api.d.ts +0 -44
- package/lib/constructs/graphql-api.js +0 -221
- package/lib/constructs/http-api.d.ts +0 -58
- package/lib/constructs/http-api.js +0 -242
- package/lib/constructs/monitoring.d.ts +0 -23
- package/lib/constructs/monitoring.js +0 -47
- package/lib/constructs/scheduled-func.d.ts +0 -63
- package/lib/constructs/scheduled-func.js +0 -54
- package/lib/constructs/webhook.d.ts +0 -33
- package/lib/constructs/webhook.js +0 -86
- package/lib/projen/graphql-api.d.ts +0 -7
- package/lib/projen/graphql-api.js +0 -58
- package/lib/projen/http-api.d.ts +0 -7
- package/lib/projen/http-api.js +0 -43
- package/lib/types/index.d.ts +0 -1
- package/lib/types/index.js +0 -18
- package/lib/types/table.d.ts +0 -34
- package/lib/types/table.js +0 -31
- package/version.json +0 -3
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.createAppSyncHandler = exports.createHttpHandler = exports.createOpenApiHandler = exports.createOpenApiHandlerWithRequestBodyNoResponse = exports.createOpenApiHandlerWithRequestBody = void 0;
|
|
30
|
+
const process_1 = require("process");
|
|
31
|
+
const lambda_log_1 = __importDefault(require("lambda-log"));
|
|
32
|
+
const auth_1 = require("./auth");
|
|
33
|
+
const errors = __importStar(require("./errors"));
|
|
34
|
+
/**
|
|
35
|
+
* A factory function that creates an HTTP request handler for an OpenAPI operation with a request body.
|
|
36
|
+
*/
|
|
37
|
+
const createOpenApiHandlerWithRequestBody = (handler) => {
|
|
38
|
+
return (0, exports.createHttpHandler)(handler);
|
|
39
|
+
};
|
|
40
|
+
exports.createOpenApiHandlerWithRequestBody = createOpenApiHandlerWithRequestBody;
|
|
41
|
+
/**
|
|
42
|
+
* A factory function that creates an HTTP request handler for an OpenAPI operation with a request body and no response.
|
|
43
|
+
*/
|
|
44
|
+
const createOpenApiHandlerWithRequestBodyNoResponse = (handler) => {
|
|
45
|
+
return (0, exports.createHttpHandler)(handler);
|
|
46
|
+
};
|
|
47
|
+
exports.createOpenApiHandlerWithRequestBodyNoResponse = createOpenApiHandlerWithRequestBodyNoResponse;
|
|
48
|
+
/**
|
|
49
|
+
* A factory function that creates an HTTP request handler for an OpenAPI operation.
|
|
50
|
+
*/
|
|
51
|
+
const createOpenApiHandler = (handler) => {
|
|
52
|
+
return (0, exports.createHttpHandler)(handler);
|
|
53
|
+
};
|
|
54
|
+
exports.createOpenApiHandler = createOpenApiHandler;
|
|
55
|
+
/**
|
|
56
|
+
* Create an authorizer for the authentication method chosen (JWT or Cognito).
|
|
57
|
+
*/
|
|
58
|
+
const createAuthorizer = (event, log) => {
|
|
59
|
+
// If Cognito is used, USER_POOL_ID is injected into the function's environment. Currently assumes JWT otherwise.
|
|
60
|
+
if (process_1.env.USER_POOL_ID) {
|
|
61
|
+
return new auth_1.ApiGatewayv1CognitoAuthorizer(event, log);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
// This might need to get more sophisticated if more authorization methods need to be supported.
|
|
65
|
+
return new auth_1.ApiGatewayv1JwtAuthorizer(event, 'admin', log);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* A factory function that creates an HTTP request handler.
|
|
70
|
+
*/
|
|
71
|
+
const createHttpHandler = (handler) => {
|
|
72
|
+
return async (event, context) => {
|
|
73
|
+
var _a, _b;
|
|
74
|
+
// Create an object to hold the context for this HTTP request
|
|
75
|
+
const auth = createAuthorizer(event, lambda_log_1.default);
|
|
76
|
+
const ctx = {
|
|
77
|
+
event,
|
|
78
|
+
auth,
|
|
79
|
+
lambdaContext: context,
|
|
80
|
+
logger: lambda_log_1.default,
|
|
81
|
+
response: { headers: {}, json: true },
|
|
82
|
+
};
|
|
83
|
+
// Add the request ID to the logging metadata, and enable debug logging if the DEBUG environment variable is set to "true"
|
|
84
|
+
ctx.logger.options.meta.requestId = context.awsRequestId;
|
|
85
|
+
ctx.logger.options.debug = process.env.DEBUG === 'true';
|
|
86
|
+
// Log the event object for debugging purposes
|
|
87
|
+
ctx.logger.debug(JSON.stringify(event));
|
|
88
|
+
try {
|
|
89
|
+
// Authenticate the user using the Cognito authorizer
|
|
90
|
+
await ctx.auth.authenticate();
|
|
91
|
+
// Call the user-defined handler function, passing in the request context object and the parsed request body
|
|
92
|
+
const res = await handler(ctx, parseBody(event));
|
|
93
|
+
// Construct and return the HTTP response
|
|
94
|
+
return {
|
|
95
|
+
statusCode: (_a = ctx.response.statusCode) !== null && _a !== void 0 ? _a : (res ? 200 : 204),
|
|
96
|
+
headers: {
|
|
97
|
+
'Content-Type': 'application/json',
|
|
98
|
+
...corsHeader(event),
|
|
99
|
+
...ctx.response.headers,
|
|
100
|
+
},
|
|
101
|
+
body: res ? (ctx.response.json ? JSON.stringify(res) : res) : '',
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
// Handle any errors that occur during request processing
|
|
106
|
+
// If the error is an instance of HttpError, return an HTTP response with the error status code and message
|
|
107
|
+
if (error instanceof errors.HttpError) {
|
|
108
|
+
return {
|
|
109
|
+
statusCode: error.statusCode,
|
|
110
|
+
headers: {
|
|
111
|
+
'Content-Type': 'application/json',
|
|
112
|
+
...corsHeader(event),
|
|
113
|
+
...ctx.response.headers,
|
|
114
|
+
},
|
|
115
|
+
body: error.message,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
// If the error is a Boom error (from the hapi.js framework), return an HTTP response with the error status code and payload
|
|
119
|
+
if (error.isBoom) {
|
|
120
|
+
return {
|
|
121
|
+
statusCode: error.output.statusCode,
|
|
122
|
+
headers: {
|
|
123
|
+
'Content-Type': 'application/json',
|
|
124
|
+
...error.output.headers,
|
|
125
|
+
...corsHeader(event),
|
|
126
|
+
...ctx.response.headers,
|
|
127
|
+
},
|
|
128
|
+
body: JSON.stringify(error.output.payload),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// For all other types of errors, log the error and return a 500 status code with the error message
|
|
132
|
+
ctx.logger.error(error);
|
|
133
|
+
return {
|
|
134
|
+
statusCode: (_b = ctx.response.statusCode) !== null && _b !== void 0 ? _b : 500,
|
|
135
|
+
headers: {
|
|
136
|
+
'Content-Type': 'application/json',
|
|
137
|
+
...corsHeader(event),
|
|
138
|
+
...ctx.response.headers,
|
|
139
|
+
},
|
|
140
|
+
body: error.toString(),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
exports.createHttpHandler = createHttpHandler;
|
|
146
|
+
/**
|
|
147
|
+
* This function takes an event object representing an API Gateway Proxy event
|
|
148
|
+
* with a Cognito authorizer, and extracts and parses the request body, if present.
|
|
149
|
+
*
|
|
150
|
+
* @param event The API Gateway Proxy event with a Cognito authorizer
|
|
151
|
+
* @returns The parsed request body
|
|
152
|
+
*/
|
|
153
|
+
function parseBody(event) {
|
|
154
|
+
var _a;
|
|
155
|
+
let body = event.body;
|
|
156
|
+
// If the request body is base64-encoded, decode it
|
|
157
|
+
if (event.body && event.isBase64Encoded) {
|
|
158
|
+
const buff = Buffer.from(event.body, 'base64');
|
|
159
|
+
body = buff.toString('utf8');
|
|
160
|
+
}
|
|
161
|
+
// If the request body is in JSON format, parse it into a JavaScript object
|
|
162
|
+
if (event.headers && ((_a = event.headers['content-type']) === null || _a === void 0 ? void 0 : _a.includes('application/json'))) {
|
|
163
|
+
return JSON.parse(body !== null && body !== void 0 ? body : '{}');
|
|
164
|
+
}
|
|
165
|
+
// If the request body is not present or not in JSON format, return it as-is
|
|
166
|
+
return body;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Returns the CORS headers to be included in the API Gateway response.
|
|
170
|
+
*
|
|
171
|
+
* @param event - The API Gateway event object.
|
|
172
|
+
* @returns An object containing the CORS headers.
|
|
173
|
+
*/
|
|
174
|
+
function corsHeader(event) {
|
|
175
|
+
var _a, _b, _c;
|
|
176
|
+
return {
|
|
177
|
+
'Access-Control-Allow-Origin': (_b = (_a = event === null || event === void 0 ? void 0 : event.headers) === null || _a === void 0 ? void 0 : _a.origin) !== null && _b !== void 0 ? _b : '*',
|
|
178
|
+
'Access-Control-Allow-Credentials': ((_c = event === null || event === void 0 ? void 0 : event.headers) === null || _c === void 0 ? void 0 : _c.origin) ? 'true' : 'false',
|
|
179
|
+
'Access-Control-Allow-Methods': '*',
|
|
180
|
+
'Access-Control-Allow-Headers': 'Authorization, *', // Allow the Authorization header and any other headers
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Creates an AppSync resolver handler from the given AppSyncHandler.
|
|
185
|
+
* Returns a function that can be used as an AppSync resolver.
|
|
186
|
+
*
|
|
187
|
+
* @param handler The AppSyncHandler to use as the resolver.
|
|
188
|
+
*/
|
|
189
|
+
const createAppSyncHandler = (handler) => {
|
|
190
|
+
return async (event, context) => {
|
|
191
|
+
const ctx = {
|
|
192
|
+
event,
|
|
193
|
+
lambdaContext: context,
|
|
194
|
+
logger: lambda_log_1.default,
|
|
195
|
+
cognitoAuth: new auth_1.AppSyncCognitoAuthorizer(event),
|
|
196
|
+
};
|
|
197
|
+
// set the meta information in logger
|
|
198
|
+
ctx.logger.options.meta.requestId = context.awsRequestId;
|
|
199
|
+
// set the debug flag for logger
|
|
200
|
+
ctx.logger.options.debug = process.env.DEBUG === 'true';
|
|
201
|
+
// log the received event
|
|
202
|
+
ctx.logger.debug(JSON.stringify(event));
|
|
203
|
+
try {
|
|
204
|
+
// authenticate the incoming request
|
|
205
|
+
await ctx.cognitoAuth.authenticate();
|
|
206
|
+
// invoke the handler function with the context
|
|
207
|
+
return await handler(ctx);
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
// log the error and throw it again
|
|
211
|
+
ctx.logger.error(error);
|
|
212
|
+
throw error;
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
};
|
|
216
|
+
exports.createAppSyncHandler = createAppSyncHandler;
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYW1iZGEvaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFDQUE4QjtBQUM5Qiw0REFBK0M7QUFDL0MsaUNBTWdCO0FBQ2hCLGlEQUFtQztBQTZEbkM7O0dBRUc7QUFDSSxNQUFNLG1DQUFtQyxHQUFHLENBQStELE9BQTBILEVBQXVCLEVBQUU7SUFDblEsT0FBTyxJQUFBLHlCQUFpQixFQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQztBQUZXLFFBQUEsbUNBQW1DLHVDQUU5QztBQUVGOztHQUVHO0FBQ0ksTUFBTSw2Q0FBNkMsR0FBRyxDQUFzQyxPQUE0RSxFQUF1QixFQUFFO0lBQ3RNLE9BQU8sSUFBQSx5QkFBaUIsRUFBQyxPQUFPLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUM7QUFGVyxRQUFBLDZDQUE2QyxpREFFeEQ7QUFFRjs7R0FFRztBQUNJLE1BQU0sb0JBQW9CLEdBQUcsQ0FBZ0QsT0FBNkUsRUFBdUIsRUFBRTtJQUN4TCxPQUFPLElBQUEseUJBQWlCLEVBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDO0FBRlcsUUFBQSxvQkFBb0Isd0JBRS9CO0FBRUY7O0dBRUc7QUFDSCxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBcUYsRUFBRSxHQUFjLEVBQUUsRUFBRTtJQUNqSSxpSEFBaUg7SUFDakgsSUFBSSxhQUFHLENBQUMsWUFBWSxFQUFFO1FBQ3BCLE9BQU8sSUFBSSxvQ0FBNkIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDdEQ7U0FBTTtRQUNMLGdHQUFnRztRQUNoRyxPQUFPLElBQUksZ0NBQXlCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztLQUMzRDtBQUNILENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0ksTUFB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LE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMzQjtRQUFDLE9BQU8sS0FBVSxFQUFFO1lBQ25CLG1DQUFtQztZQUNuQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixNQUFNLEtBQUssQ0FBQztTQUNiO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBN0JTLFFBQUEsb0JBQW9CLHdCQTZCN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbnYgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCBsb2dnZXIsIHsgTGFtYmRhTG9nIH0gZnJvbSAnbGFtYmRhLWxvZyc7XG5pbXBvcnQge1xuICBBcGlHYXRld2F5djFDb2duaXRvQXV0aG9yaXplcixcbiAgQXBpR2F0ZXdheXYxSnd0QXV0aG9yaXplcixcbiAgQXBwU3luY0NvZ25pdG9BdXRob3JpemVyLFxuICBDb2duaXRvQXV0aG9yaXplcixcbiAgSnd0QXV0aG9yaXplcixcbn0gZnJvbSAnLi9hdXRoJztcbmltcG9ydCAqIGFzIGVycm9ycyBmcm9tICcuL2Vycm9ycyc7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8gSFRUUCBBcGlcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBwcm9wZXJ0aWVzIGZvciBhbiBIVFRQIHJlc3BvbnNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBSZXNwb25zZUNvbnRleHQge1xuICBzdGF0dXNDb2RlPzogbnVtYmVyO1xuICBoZWFkZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAganNvbjogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcHJvcGVydGllcyBmb3IgYW4gSFRUUCByZXF1ZXN0IGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cEhhbmRsZXJDb250ZXh0IHtcbiAgZXZlbnQ6IEFXU0xhbWJkYS5BUElHYXRld2F5UHJveHlXaXRoQ29nbml0b0F1dGhvcml6ZXJFdmVudDtcbiAgbGFtYmRhQ29udGV4dDogQVdTTGFtYmRhLkNvbnRleHQ7XG4gIGxvZ2dlcjogbG9nZ2VyLkxhbWJkYUxvZztcbiAgcmVzcG9uc2U6IEh0dHBSZXNwb25zZUNvbnRleHQ7XG4gIGF1dGg6IEp3dEF1dGhvcml6ZXI7XG59XG5cbi8qKlxuICogQSB0eXBlIGRlZmluaXRpb24gZm9yIGFuIEhUVFAgaGFuZGxlci5cbiAqL1xuZXhwb3J0IHR5cGUgSHR0cEhhbmRsZXI8VCwgUj4gPSAoXG4gIGNvbnRleHQ6IEh0dHBIYW5kbGVyQ29udGV4dCxcbiAgYm9keTogVCxcbikgPT4gUHJvbWlzZTxSPjtcblxuLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcHJvcGVydGllcyBmb3IgYW4gT3BlbkFQSSBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlcmF0aW9uIHtcbiAgcmVzcG9uc2VzOiB7XG4gICAgW3N0YXR1c0NvZGU6IG51bWJlcl06IHtcbiAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nOiBhbnk7XG4gICAgICB9O1xuICAgIH0gfCBhbnk7XG4gIH07XG59XG5cbi8qKlxuICogQSB0eXBlIGRlZmluaXRpb24gZm9yIGFuIEFQSSBHYXRld2F5IHYxIHJlcXVlc3QgaGFuZGxlci5cbiAqL1xuZXhwb3J0IHR5cGUgQVBJR2F0ZXdheXYxSGFuZGxlciA9XG4gIEFXU0xhbWJkYS5IYW5kbGVyPEFXU0xhbWJkYS5BUElHYXRld2F5UHJveHlXaXRoQ29nbml0b0F1dGhvcml6ZXJFdmVudCwgQVdTTGFtYmRhLkFQSUdhdGV3YXlQcm94eVJlc3VsdCB8IHVuZGVmaW5lZD47XG5cbi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHByb3BlcnRpZXMgZm9yIGFuIE9wZW5BUEkgb3BlcmF0aW9uIHdpdGggYSByZXF1ZXN0IGJvZHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlcmF0aW9uV2l0aFJlcXVlc3RCb2R5IGV4dGVuZHMgT3BlcmF0aW9uIHtcbiAgcmVxdWVzdEJvZHk6IHsgY29udGVudDogeyAnYXBwbGljYXRpb24vanNvbic6IGFueSB9IH07XG59XG5cbi8qKlxuICogQSBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhbiBIVFRQIHJlcXVlc3QgaGFuZGxlciBmb3IgYW4gT3BlbkFQSSBvcGVyYXRpb24gd2l0aCBhIHJlcXVlc3QgYm9keS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9wZW5BcGlIYW5kbGVyV2l0aFJlcXVlc3RCb2R5ID0gPE9QIGV4dGVuZHMgT3BlcmF0aW9uV2l0aFJlcXVlc3RCb2R5LCBTQyBleHRlbmRzIG51bWJlciA9IDIwMD4oaGFuZGxlcjogSHR0cEhhbmRsZXI8T1BbJ3JlcXVlc3RCb2R5J11bJ2NvbnRlbnQnXVsnYXBwbGljYXRpb24vanNvbiddLCBPUFsncmVzcG9uc2VzJ11bU0NdWydjb250ZW50J11bJ2FwcGxpY2F0aW9uL2pzb24nXT4pOiBBUElHYXRld2F5djFIYW5kbGVyID0+IHtcbiAgcmV0dXJuIGNyZWF0ZUh0dHBIYW5kbGVyKGhhbmRsZXIpO1xufTtcblxuLyoqXG4gKiBBIGZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGFuIEhUVFAgcmVxdWVzdCBoYW5kbGVyIGZvciBhbiBPcGVuQVBJIG9wZXJhdGlvbiB3aXRoIGEgcmVxdWVzdCBib2R5IGFuZCBubyByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9wZW5BcGlIYW5kbGVyV2l0aFJlcXVlc3RCb2R5Tm9SZXNwb25zZSA9IDxPUCBleHRlbmRzIE9wZXJhdGlvbldpdGhSZXF1ZXN0Qm9keT4oaGFuZGxlcjogSHR0cEhhbmRsZXI8T1BbJ3JlcXVlc3RCb2R5J11bJ2NvbnRlbnQnXVsnYXBwbGljYXRpb24vanNvbiddLCB2b2lkPik6IEFQSUdhdGV3YXl2MUhhbmRsZXIgPT4ge1xuICByZXR1cm4gY3JlYXRlSHR0cEhhbmRsZXIoaGFuZGxlcik7XG59O1xuXG4vKipcbiAqIEEgZmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYW4gSFRUUCByZXF1ZXN0IGhhbmRsZXIgZm9yIGFuIE9wZW5BUEkgb3BlcmF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlT3BlbkFwaUhhbmRsZXIgPSA8T1AgZXh0ZW5kcyBPcGVyYXRpb24sIFNDIGV4dGVuZHMgbnVtYmVyID0gMjAwPihoYW5kbGVyOiBIdHRwSGFuZGxlcjxhbnksIE9QWydyZXNwb25zZXMnXVtTQ11bJ2NvbnRlbnQnXVsnYXBwbGljYXRpb24vanNvbiddPik6IEFQSUdhdGV3YXl2MUhhbmRsZXIgPT4ge1xuICByZXR1cm4gY3JlYXRlSHR0cEhhbmRsZXIoaGFuZGxlcik7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhbiBhdXRob3JpemVyIGZvciB0aGUgYXV0aGVudGljYXRpb24gbWV0aG9kIGNob3NlbiAoSldUIG9yIENvZ25pdG8pLlxuICovXG5jb25zdCBjcmVhdGVBdXRob3JpemVyID0gKGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5RXZlbnRCYXNlPEFXU0xhbWJkYS5BUElHYXRld2F5UHJveHlDb2duaXRvQXV0aG9yaXplcj4sIGxvZzogTGFtYmRhTG9nKSA9PiB7XG4gIC8vIElmIENvZ25pdG8gaXMgdXNlZCwgVVNFUl9QT09MX0lEIGlzIGluamVjdGVkIGludG8gdGhlIGZ1bmN0aW9uJ3MgZW52aXJvbm1lbnQuIEN1cnJlbnRseSBhc3N1bWVzIEpXVCBvdGhlcndpc2UuXG4gIGlmIChlbnYuVVNFUl9QT09MX0lEKSB7XG4gICAgcmV0dXJuIG5ldyBBcGlHYXRld2F5djFDb2duaXRvQXV0aG9yaXplcihldmVudCwgbG9nKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIG1pZ2h0IG5lZWQgdG8gZ2V0IG1vcmUgc29waGlzdGljYXRlZCBpZiBtb3JlIGF1dGhvcml6YXRpb24gbWV0aG9kcyBuZWVkIHRvIGJlIHN1cHBvcnRlZC5cbiAgICByZXR1cm4gbmV3IEFwaUdhdGV3YXl2MUp3dEF1dGhvcml6ZXIoZXZlbnQsICdhZG1pbicsIGxvZyk7XG4gIH1cbn07XG5cbi8qKlxuICogQSBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhbiBIVFRQIHJlcXVlc3QgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUh0dHBIYW5kbGVyID1cbiAgPFQsIFI+KGhhbmRsZXI6IEh0dHBIYW5kbGVyPFQsIFI+KTogQVBJR2F0ZXdheXYxSGFuZGxlciA9PiB7XG4gICAgcmV0dXJuIGFzeW5jIChldmVudCwgY29udGV4dCkgPT4ge1xuICAgICAgLy8gQ3JlYXRlIGFuIG9iamVjdCB0byBob2xkIHRoZSBjb250ZXh0IGZvciB0aGlzIEhUVFAgcmVxdWVzdFxuICAgICAgY29uc3QgYXV0aCA9IGNyZWF0ZUF1dGhvcml6ZXIoZXZlbnQsIGxvZ2dlciBhcyB1bmtub3duIGFzIGxvZ2dlci5MYW1iZGFMb2cpO1xuICAgICAgY29uc3QgY3R4OiBIdHRwSGFuZGxlckNvbnRleHQgPSB7XG4gICAgICAgIGV2ZW50LFxuICAgICAgICBhdXRoLFxuICAgICAgICBsYW1iZGFDb250ZXh0OiBjb250ZXh0LFxuICAgICAgICBsb2dnZXI6IGxvZ2dlciBhcyB1bmtub3duIGFzIGxvZ2dlci5MYW1iZGFMb2csXG4gICAgICAgIHJlc3BvbnNlOiB7IGhlYWRlcnM6IHt9LCBqc29uOiB0cnVlIH0sXG4gICAgICB9O1xuICAgICAgLy8gQWRkIHRoZSByZXF1ZXN0IElEIHRvIHRoZSBsb2dnaW5nIG1ldGFkYXRhLCBhbmQgZW5hYmxlIGRlYnVnIGxvZ2dpbmcgaWYgdGhlIERFQlVHIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCB0byBcInRydWVcIlxuICAgICAgY3R4LmxvZ2dlci5vcHRpb25zLm1ldGEucmVxdWVzdElkID0gY29udGV4dC5hd3NSZXF1ZXN0SWQ7XG4gICAgICBjdHgubG9nZ2VyLm9wdGlvbnMuZGVidWcgPSBwcm9jZXNzLmVudi5ERUJVRyA9PT0gJ3RydWUnO1xuXG4gICAgICAvLyBMb2cgdGhlIGV2ZW50IG9iamVjdCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzXG4gICAgICBjdHgubG9nZ2VyLmRlYnVnKEpTT04uc3RyaW5naWZ5KGV2ZW50KSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEF1dGhlbnRpY2F0ZSB0aGUgdXNlciB1c2luZyB0aGUgQ29nbml0byBhdXRob3JpemVyXG4gICAgICAgIGF3YWl0IGN0eC5hdXRoLmF1dGhlbnRpY2F0ZSgpO1xuXG4gICAgICAgIC8vIENhbGwgdGhlIHVzZXItZGVmaW5lZCBoYW5kbGVyIGZ1bmN0aW9uLCBwYXNzaW5nIGluIHRoZSByZXF1ZXN0IGNvbnRleHQgb2JqZWN0IGFuZCB0aGUgcGFyc2VkIHJlcXVlc3QgYm9keVxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBoYW5kbGVyKGN0eCwgcGFyc2VCb2R5KGV2ZW50KSk7XG5cbiAgICAgICAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdGhlIEhUVFAgcmVzcG9uc2VcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGF0dXNDb2RlOiBjdHgucmVzcG9uc2Uuc3RhdHVzQ29kZSA/PyAocmVzID8gMjAwIDogMjA0KSxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgLi4uY29yc0hlYWRlcihldmVudCksXG4gICAgICAgICAgICAuLi5jdHgucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvZHk6IHJlcyA/IChjdHgucmVzcG9uc2UuanNvbiA/IEpTT04uc3RyaW5naWZ5KHJlcykgOiByZXMpIDogJycsXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIC8vIEhhbmRsZSBhbnkgZXJyb3JzIHRoYXQgb2NjdXIgZHVyaW5nIHJlcXVlc3QgcHJvY2Vzc2luZ1xuXG4gICAgICAgIC8vIElmIHRoZSBlcnJvciBpcyBhbiBpbnN0YW5jZSBvZiBIdHRwRXJyb3IsIHJldHVybiBhbiBIVFRQIHJlc3BvbnNlIHdpdGggdGhlIGVycm9yIHN0YXR1cyBjb2RlIGFuZCBtZXNzYWdlXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIGVycm9ycy5IdHRwRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdHVzQ29kZTogZXJyb3Iuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgLi4uY29yc0hlYWRlcihldmVudCksXG4gICAgICAgICAgICAgIC4uLmN0eC5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvZHk6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGUgZXJyb3IgaXMgYSBCb29tIGVycm9yIChmcm9tIHRoZSBoYXBpLmpzIGZyYW1ld29yayksIHJldHVybiBhbiBIVFRQIHJlc3BvbnNlIHdpdGggdGhlIGVycm9yIHN0YXR1cyBjb2RlIGFuZCBwYXlsb2FkXG4gICAgICAgIGlmIChlcnJvci5pc0Jvb20pIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdHVzQ29kZTogZXJyb3Iub3V0cHV0LnN0YXR1c0NvZGUsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgIC4uLmVycm9yLm91dHB1dC5oZWFkZXJzLFxuICAgICAgICAgICAgICAuLi5jb3JzSGVhZGVyKGV2ZW50KSxcbiAgICAgICAgICAgICAgLi4uY3R4LnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoZXJyb3Iub3V0cHV0LnBheWxvYWQpLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIGFsbCBvdGhlciB0eXBlcyBvZiBlcnJvcnMsIGxvZyB0aGUgZXJyb3IgYW5kIHJldHVybiBhIDUwMCBzdGF0dXMgY29kZSB3aXRoIHRoZSBlcnJvciBtZXNzYWdlXG4gICAgICAgIGN0eC5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXR1c0NvZGU6IGN0eC5yZXNwb25zZS5zdGF0dXNDb2RlID8/IDUwMCxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgLi4uY29yc0hlYWRlcihldmVudCksXG4gICAgICAgICAgICAuLi5jdHgucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvZHk6IGVycm9yLnRvU3RyaW5nKCksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGFuIGV2ZW50IG9iamVjdCByZXByZXNlbnRpbmcgYW4gQVBJIEdhdGV3YXkgUHJveHkgZXZlbnRcbiAqIHdpdGggYSBDb2duaXRvIGF1dGhvcml6ZXIsIGFuZCBleHRyYWN0cyBhbmQgcGFyc2VzIHRoZSByZXF1ZXN0IGJvZHksIGlmIHByZXNlbnQuXG4gKlxuICogQHBhcmFtIGV2ZW50IFRoZSBBUEkgR2F0ZXdheSBQcm94eSBldmVudCB3aXRoIGEgQ29nbml0byBhdXRob3JpemVyXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIHJlcXVlc3QgYm9keVxuICovXG5mdW5jdGlvbiBwYXJzZUJvZHk8VD4oZXZlbnQ6IEFXU0xhbWJkYS5BUElHYXRld2F5UHJveHlXaXRoQ29nbml0b0F1dGhvcml6ZXJFdmVudCk6IFQge1xuICBsZXQgYm9keSA9IGV2ZW50LmJvZHk7XG5cbiAgLy8gSWYgdGhlIHJlcXVlc3QgYm9keSBpcyBiYXNlNjQtZW5jb2RlZCwgZGVjb2RlIGl0XG4gIGlmIChldmVudC5ib2R5ICYmIGV2ZW50LmlzQmFzZTY0RW5jb2RlZCkge1xuICAgIGNvbnN0IGJ1ZmYgPSBCdWZmZXIuZnJvbShldmVudC5ib2R5ISwgJ2Jhc2U2NCcpO1xuICAgIGJvZHkgPSBidWZmLnRvU3RyaW5nKCd1dGY4Jyk7XG4gIH1cblxuICAvLyBJZiB0aGUgcmVxdWVzdCBib2R5IGlzIGluIEpTT04gZm9ybWF0LCBwYXJzZSBpdCBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAgaWYgKGV2ZW50LmhlYWRlcnMgJiYgZXZlbnQuaGVhZGVyc1snY29udGVudC10eXBlJ10/LmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShib2R5ID8/ICd7fScpO1xuICB9XG5cbiAgLy8gSWYgdGhlIHJlcXVlc3QgYm9keSBpcyBub3QgcHJlc2VudCBvciBub3QgaW4gSlNPTiBmb3JtYXQsIHJldHVybiBpdCBhcy1pc1xuICByZXR1cm4gYm9keSBhcyBhbnk7XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBDT1JTIGhlYWRlcnMgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIEFQSSBHYXRld2F5IHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSBldmVudCAtIFRoZSBBUEkgR2F0ZXdheSBldmVudCBvYmplY3QuXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgQ09SUyBoZWFkZXJzLlxuICovXG5mdW5jdGlvbiBjb3JzSGVhZGVyKGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5V2l0aENvZ25pdG9BdXRob3JpemVyRXZlbnQpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gIHJldHVybiB7XG4gICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6IGV2ZW50Py5oZWFkZXJzPy5vcmlnaW4gPz8gJyonLCAvLyBBbGxvdyByZXF1ZXN0cyBmcm9tIHRoZSBvcmlnaW4gaGVhZGVyLCBvciBhbGxvdyBhbnkgb3JpZ2luIGlmIG5vdCBwcmVzZW50XG4gICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJzogZXZlbnQ/LmhlYWRlcnM/Lm9yaWdpbiA/ICd0cnVlJyA6ICdmYWxzZScsIC8vIEluY2x1ZGUgY29va2llcyBpbiBjcm9zcy1vcmlnaW4gcmVxdWVzdHMgaWYgdGhlIG9yaWdpbiBoZWFkZXIgaXMgcHJlc2VudFxuICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJzogJyonLCAvLyBBbGxvdyBhbnkgSFRUUCBtZXRob2RcbiAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycyc6ICdBdXRob3JpemF0aW9uLCAqJywgLy8gQWxsb3cgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIGFuZCBhbnkgb3RoZXIgaGVhZGVyc1xuICB9O1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLyBBcHBTeW5jXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBUaGUgY29udGV4dCBmb3IgdGhlIEFwcFN5bmMgcmVzb2x2ZXIgZnVuY3Rpb24uXG4gKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXZlbnQsIGxhbWJkYSBjb250ZXh0LCBsb2dnZXIsIGFuZCBDb2duaXRvIGF1dGhvcml6ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwU3luY0hhbmRsZXJDb250ZXh0PFQ+IHtcbiAgZXZlbnQ6IEFXU0xhbWJkYS5BcHBTeW5jUmVzb2x2ZXJFdmVudDxUPjtcbiAgbGFtYmRhQ29udGV4dDogQVdTTGFtYmRhLkNvbnRleHQ7XG4gIGxvZ2dlcjogbG9nZ2VyLkxhbWJkYUxvZztcbiAgY29nbml0b0F1dGg6IENvZ25pdG9BdXRob3JpemVyO1xufVxuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGFuIEFwcFN5bmMgcmVzb2x2ZXIgZXZlbnQuXG4gKiBSZWNlaXZlcyB0aGUgY29udGV4dCBvYmplY3QgYW5kIHJldHVybnMgdGhlIHJlc3BvbnNlLlxuICovXG5leHBvcnQgdHlwZSBBcHBTeW5jSGFuZGxlcjxULCBSPiA9IChcbiAgY29udGV4dDogQXBwU3luY0hhbmRsZXJDb250ZXh0PFQ+LFxuKSA9PiBQcm9taXNlPFI+O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gQXBwU3luYyByZXNvbHZlciBoYW5kbGVyIGZyb20gdGhlIGdpdmVuIEFwcFN5bmNIYW5kbGVyLlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgYXMgYW4gQXBwU3luYyByZXNvbHZlci5cbiAqXG4gKiBAcGFyYW0gaGFuZGxlciBUaGUgQXBwU3luY0hhbmRsZXIgdG8gdXNlIGFzIHRoZSByZXNvbHZlci5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFwcFN5bmNIYW5kbGVyID1cbiAgPFQsIFI+KGhhbmRsZXI6IEFwcFN5bmNIYW5kbGVyPFQsIFI+KTogQVdTTGFtYmRhLkFwcFN5bmNSZXNvbHZlckhhbmRsZXI8VCwgUj4gPT4ge1xuICAgIHJldHVybiBhc3luYyAoZXZlbnQsIGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGN0eDogQXBwU3luY0hhbmRsZXJDb250ZXh0PFQ+ID0ge1xuICAgICAgICBldmVudCxcbiAgICAgICAgbGFtYmRhQ29udGV4dDogY29udGV4dCxcbiAgICAgICAgbG9nZ2VyOiBsb2dnZXIgYXMgdW5rbm93biBhcyBsb2dnZXIuTGFtYmRhTG9nLFxuICAgICAgICBjb2duaXRvQXV0aDogbmV3IEFwcFN5bmNDb2duaXRvQXV0aG9yaXplcihldmVudCksXG4gICAgICB9O1xuXG4gICAgICAvLyBzZXQgdGhlIG1ldGEgaW5mb3JtYXRpb24gaW4gbG9nZ2VyXG4gICAgICBjdHgubG9nZ2VyLm9wdGlvbnMubWV0YS5yZXF1ZXN0SWQgPSBjb250ZXh0LmF3c1JlcXVlc3RJZDtcbiAgICAgIC8vIHNldCB0aGUgZGVidWcgZmxhZyBmb3IgbG9nZ2VyXG4gICAgICBjdHgubG9nZ2VyLm9wdGlvbnMuZGVidWcgPSBwcm9jZXNzLmVudi5ERUJVRyA9PT0gJ3RydWUnO1xuXG4gICAgICAvLyBsb2cgdGhlIHJlY2VpdmVkIGV2ZW50XG4gICAgICBjdHgubG9nZ2VyLmRlYnVnKEpTT04uc3RyaW5naWZ5KGV2ZW50KSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0ZSB0aGUgaW5jb21pbmcgcmVxdWVzdFxuICAgICAgICBhd2FpdCBjdHguY29nbml0b0F1dGguYXV0aGVudGljYXRlKCk7XG4gICAgICAgIC8vIGludm9rZSB0aGUgaGFuZGxlciBmdW5jdGlvbiB3aXRoIHRoZSBjb250ZXh0XG4gICAgICAgIHJldHVybiBhd2FpdCBoYW5kbGVyKGN0eCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIC8vIGxvZyB0aGUgZXJyb3IgYW5kIHRocm93IGl0IGFnYWluXG4gICAgICAgIGN0eC5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4iXX0=
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.errors = exports.api = exports.auth = void 0;
|
|
27
|
+
exports.auth = __importStar(require("./auth"));
|
|
28
|
+
exports.api = __importStar(require("./handler"));
|
|
29
|
+
exports.errors = __importStar(require("./errors"));
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGFtYmRhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQStCO0FBQy9CLGlEQUFpQztBQUNqQyxtREFBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBhcyBhdXRoIGZyb20gJy4vYXV0aCc7XG5leHBvcnQgKiBhcyBhcGkgZnJvbSAnLi9oYW5kbGVyJztcbmV4cG9ydCAqIGFzIGVycm9ycyBmcm9tICcuL2Vycm9ycyc7Il19
|
package/lib/projen/core.d.ts
CHANGED
|
@@ -1,17 +1,7 @@
|
|
|
1
1
|
import * as pj from 'projen';
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
* Configure yarn scripts to run 'cdk diff' and 'cdk deploy'.
|
|
5
|
-
* The key is the name of the script and the value is the glob pattern of cdk deploy
|
|
6
|
-
*
|
|
7
|
-
* Created scripts will be `diff:{key}`, `deploy:{key}`, and `deploy:{key} --watch`
|
|
8
|
-
*
|
|
9
|
-
* @default no deploy scripts
|
|
10
|
-
*/
|
|
11
|
-
deployScripts?: {
|
|
12
|
-
[script: string]: string;
|
|
13
|
-
};
|
|
2
|
+
export declare const PACKAGE_NAME = "@taimos/cdk-serverless-v2";
|
|
3
|
+
export interface ServerlessProjectOptions extends pj.awscdk.AwsCdkTypeScriptAppOptions {
|
|
14
4
|
}
|
|
15
|
-
export declare class
|
|
16
|
-
constructor(
|
|
5
|
+
export declare class ServerlessProject extends pj.awscdk.AwsCdkTypeScriptApp {
|
|
6
|
+
constructor(options: ServerlessProjectOptions);
|
|
17
7
|
}
|
package/lib/projen/core.js
CHANGED
|
@@ -23,35 +23,31 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.
|
|
26
|
+
exports.ServerlessProject = exports.PACKAGE_NAME = void 0;
|
|
27
27
|
const pj = __importStar(require("projen"));
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
28
|
+
exports.PACKAGE_NAME = '@taimos/cdk-serverless-v2';
|
|
29
|
+
class ServerlessProject extends pj.awscdk.AwsCdkTypeScriptApp {
|
|
30
|
+
constructor(options) {
|
|
31
|
+
var _a, _b;
|
|
32
|
+
super({
|
|
33
|
+
...options,
|
|
34
|
+
projenrcTs: true,
|
|
35
|
+
deps: [
|
|
36
|
+
...(_a = options.deps) !== null && _a !== void 0 ? _a : [],
|
|
37
|
+
'uuid',
|
|
38
|
+
'esbuild',
|
|
39
|
+
'js-yaml',
|
|
40
|
+
'openapi-typescript',
|
|
41
|
+
],
|
|
42
|
+
devDeps: [
|
|
43
|
+
...(_b = options.devDeps) !== null && _b !== void 0 ? _b : [],
|
|
44
|
+
'@types/aws-lambda',
|
|
45
|
+
'@types/uuid',
|
|
46
|
+
'@types/lambda-log',
|
|
47
|
+
'@types/js-yaml',
|
|
48
|
+
],
|
|
49
|
+
});
|
|
54
50
|
}
|
|
55
51
|
}
|
|
56
|
-
exports.
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
exports.ServerlessProject = ServerlessProject;
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9qZW4vY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE2QjtBQUVoQixRQUFBLFlBQVksR0FBRywyQkFBMkIsQ0FBQztBQU14RCxNQUFhLGlCQUFrQixTQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsbUJBQW1CO0lBRWxFLFlBQVksT0FBaUM7O1FBQzNDLEtBQUssQ0FBQztZQUNKLEdBQUcsT0FBTztZQUNWLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLElBQUksRUFBRTtnQkFDSixHQUFHLE1BQUEsT0FBTyxDQUFDLElBQUksbUNBQUksRUFBRTtnQkFDckIsTUFBTTtnQkFDTixTQUFTO2dCQUNULFNBQVM7Z0JBQ1Qsb0JBQW9CO2FBQ3JCO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEdBQUcsTUFBQSxPQUFPLENBQUMsT0FBTyxtQ0FBSSxFQUFFO2dCQUN4QixtQkFBbUI7Z0JBQ25CLGFBQWE7Z0JBQ2IsbUJBQW1CO2dCQUNuQixnQkFBZ0I7YUFDakI7U0FDRixDQUFDLENBQUM7SUFFTCxDQUFDO0NBRUY7QUF4QkQsOENBd0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGogZnJvbSAncHJvamVuJztcblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAdGFpbW9zL2Nkay1zZXJ2ZXJsZXNzLXYyJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJsZXNzUHJvamVjdE9wdGlvbnMgZXh0ZW5kcyBwai5hd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMge1xuICAvL1xufVxuXG5leHBvcnQgY2xhc3MgU2VydmVybGVzc1Byb2plY3QgZXh0ZW5kcyBwai5hd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcCB7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogU2VydmVybGVzc1Byb2plY3RPcHRpb25zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHByb2plbnJjVHM6IHRydWUsXG4gICAgICBkZXBzOiBbXG4gICAgICAgIC4uLm9wdGlvbnMuZGVwcyA/PyBbXSxcbiAgICAgICAgJ3V1aWQnLFxuICAgICAgICAnZXNidWlsZCcsXG4gICAgICAgICdqcy15YW1sJyxcbiAgICAgICAgJ29wZW5hcGktdHlwZXNjcmlwdCcsXG4gICAgICBdLFxuICAgICAgZGV2RGVwczogW1xuICAgICAgICAuLi5vcHRpb25zLmRldkRlcHMgPz8gW10sXG4gICAgICAgICdAdHlwZXMvYXdzLWxhbWJkYScsXG4gICAgICAgICdAdHlwZXMvdXVpZCcsXG4gICAgICAgICdAdHlwZXMvbGFtYmRhLWxvZycsXG4gICAgICAgICdAdHlwZXMvanMteWFtbCcsXG4gICAgICBdLFxuICAgIH0pO1xuXG4gIH1cblxufSJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { OneSchema } from 'dynamodb-onetable';
|
|
2
|
+
import * as pj from 'projen';
|
|
3
|
+
export interface DatastoreOptions {
|
|
4
|
+
readonly modelName: string;
|
|
5
|
+
readonly definitionFile: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class Datastore extends pj.Component {
|
|
8
|
+
protected options: DatastoreOptions;
|
|
9
|
+
constructor(app: pj.awscdk.AwsCdkTypeScriptApp, options: DatastoreOptions);
|
|
10
|
+
protected createModelFile(fileName: string, model: OneSchema): void;
|
|
11
|
+
private stringifyModel;
|
|
12
|
+
protected createConstructFile(fileName: string, model: OneSchema): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.Datastore = void 0;
|
|
27
|
+
const fs = __importStar(require("fs"));
|
|
28
|
+
const pj = __importStar(require("projen"));
|
|
29
|
+
const core_1 = require("./core");
|
|
30
|
+
class Datastore extends pj.Component {
|
|
31
|
+
constructor(app, options) {
|
|
32
|
+
super(app);
|
|
33
|
+
this.options = options;
|
|
34
|
+
app.addDeps('dynamodb-onetable');
|
|
35
|
+
app.addDeps('@aws-sdk/client-dynamodb');
|
|
36
|
+
app.addDeps('@aws-sdk/lib-dynamodb');
|
|
37
|
+
const model = JSON.parse(fs.readFileSync(options.definitionFile).toString());
|
|
38
|
+
this.createModelFile(`./src/generated/datastore.${options.modelName.toLowerCase()}-model.generated.ts`, model);
|
|
39
|
+
this.createConstructFile(`./src/generated/datastore.${options.modelName.toLowerCase()}-construct.generated.ts`, model);
|
|
40
|
+
}
|
|
41
|
+
createModelFile(fileName, model) {
|
|
42
|
+
fs.writeFileSync(fileName, `/* eslint-disable */
|
|
43
|
+
import { Model, Table, Entity } from 'dynamodb-onetable';
|
|
44
|
+
import { env } from 'process';
|
|
45
|
+
import { Dynamo } from 'dynamodb-onetable/Dynamo';
|
|
46
|
+
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
|
|
47
|
+
|
|
48
|
+
export const dynamoClient = new Dynamo({ client: new DynamoDBClient({}) })
|
|
49
|
+
export const TABLE_NAME: string = env.TABLE!;
|
|
50
|
+
|
|
51
|
+
${Object.entries(model.indexes).map(([idx, data]) => `export const Index_${idx}_Name = '${idx}';
|
|
52
|
+
export const Index_${idx}_HashKey = '${data.hash}';
|
|
53
|
+
export const Index_${idx}_SortKey = '${data.sort}';
|
|
54
|
+
`).join('\n')}
|
|
55
|
+
|
|
56
|
+
export const Schema = ${this.stringifyModel(model)};
|
|
57
|
+
|
|
58
|
+
export const table = new Table({
|
|
59
|
+
client: dynamoClient,
|
|
60
|
+
name: TABLE_NAME,
|
|
61
|
+
schema: Schema,
|
|
62
|
+
isoDates: true,
|
|
63
|
+
// logger: true,
|
|
64
|
+
hidden: false,
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
${Object.entries(model.models).map(([typeName, _]) => `export type ${typeName}Type = Entity<typeof Schema.models.${typeName}>
|
|
68
|
+
export const ${typeName}: Model<${typeName}Type> = table.getModel<${typeName}Type>('${typeName}');
|
|
69
|
+
`)}
|
|
70
|
+
|
|
71
|
+
`, {
|
|
72
|
+
encoding: 'utf-8',
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
stringifyModel(model) {
|
|
76
|
+
// array, binary, boolean, date, number, object, set, string
|
|
77
|
+
// Array, Binary, Boolean, Buffer, Date, Number, Object, Set, String
|
|
78
|
+
return JSON.stringify(model, null, 2)
|
|
79
|
+
.replace(/"type": "array"/g, '"type": Array')
|
|
80
|
+
.replace(/"type": "binary"/g, '"type": Binary')
|
|
81
|
+
.replace(/"type": "boolean"/g, '"type": Boolean')
|
|
82
|
+
.replace(/"type": "date"/g, '"type": Date')
|
|
83
|
+
.replace(/"type": "number"/g, '"type": Number')
|
|
84
|
+
.replace(/"type": "object"/g, '"type": Object')
|
|
85
|
+
.replace(/"type": "set"/g, '"type": Set')
|
|
86
|
+
.replace(/"type": "string"/g, '"type": String');
|
|
87
|
+
}
|
|
88
|
+
createConstructFile(fileName, model) {
|
|
89
|
+
fs.writeFileSync(fileName, `/* eslint-disable */
|
|
90
|
+
import { AttributeType, ProjectionType } from 'aws-cdk-lib/aws-dynamodb';
|
|
91
|
+
import { Construct } from 'constructs';
|
|
92
|
+
import { SingleTableDatastore, SingleTableDatastoreProps } from '${core_1.PACKAGE_NAME}/lib/constructs';
|
|
93
|
+
|
|
94
|
+
export interface ${this.options.modelName}DatastoreProps extends Omit<SingleTableDatastoreProps, 'design'> {
|
|
95
|
+
//
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export class ${this.options.modelName}Datastore extends SingleTableDatastore {
|
|
99
|
+
|
|
100
|
+
constructor(scope: Construct, id: string, props: ${this.options.modelName}DatastoreProps = {}) {
|
|
101
|
+
super(scope, id, {
|
|
102
|
+
...props,
|
|
103
|
+
design: {
|
|
104
|
+
primaryKey: {
|
|
105
|
+
partitionKey: '${model.indexes.primary.hash}',
|
|
106
|
+
${model.indexes.primary.sort ? `sortKey: '${model.indexes.primary.sort}',` : ''}
|
|
107
|
+
},
|
|
108
|
+
// timeToLiveAttribute: 'TODO',
|
|
109
|
+
globalIndexes: [
|
|
110
|
+
${Object.entries(model.indexes).filter(([idx, data]) => idx !== 'primary' && data.type !== 'local').map(([idx, data]) => `{
|
|
111
|
+
indexName: '${idx}',
|
|
112
|
+
partitionKey: {
|
|
113
|
+
name: '${data.hash}',
|
|
114
|
+
type: AttributeType.STRING,
|
|
115
|
+
},
|
|
116
|
+
${data.sort ? `sortKey: {
|
|
117
|
+
name: '${data.sort}',
|
|
118
|
+
type: AttributeType.STRING,
|
|
119
|
+
},` : ''}
|
|
120
|
+
projectionType: ProjectionType.${typeof data.project === 'string' ? data.project.toUpperCase() : 'INCLUDE'},
|
|
121
|
+
${Array.isArray(data.project) ? `nonKeyAttributes: [${data.project.map(e => `'${e}'`).join(',')}],` : ''}
|
|
122
|
+
}`).join(',\n')}
|
|
123
|
+
],
|
|
124
|
+
localIndexes: [
|
|
125
|
+
${Object.entries(model.indexes).filter(([_, data]) => data.type === 'local').map(([idx, data]) => `{
|
|
126
|
+
indexName: '${idx}',
|
|
127
|
+
sortKey: {
|
|
128
|
+
name: '${data.sort}',
|
|
129
|
+
type: AttributeType.STRING,
|
|
130
|
+
},
|
|
131
|
+
projectionType: ProjectionType.${typeof data.project === 'string' ? data.project : 'INCLUDE'},
|
|
132
|
+
${Array.isArray(data.project) ? `nonKeyAttributes: [${data.project.map(e => `'${e}'`).join(',')}],` : ''}
|
|
133
|
+
}`).join(',\n')}
|
|
134
|
+
],
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
}`, {
|
|
140
|
+
encoding: 'utf-8',
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
exports.Datastore = Datastore;
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb2plbi9kYXRhc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFFekIsMkNBQTZCO0FBQzdCLGlDQUFzQztBQU90QyxNQUFhLFNBQVUsU0FBUSxFQUFFLENBQUMsU0FBUztJQUV6QyxZQUFZLEdBQWtDLEVBQVksT0FBeUI7UUFDakYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRDZDLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBR2pGLEdBQUcsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNqQyxHQUFHLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDeEMsR0FBRyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBRXJDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQWMsQ0FBQztRQUUxRixJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixPQUFPLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsNkJBQTZCLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pILENBQUM7SUFFUyxlQUFlLENBQUMsUUFBZ0IsRUFBRSxLQUFnQjtRQUUxRCxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRTs7Ozs7Ozs7O0VBUzdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxF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LENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4RyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzs7O1lBR2IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDOzBCQUNsRixHQUFHOzt1QkFFTixJQUFJLENBQUMsSUFBSTs7OzZDQUdhLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVM7Y0FDMUYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4RyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzs7Ozs7O0VBTXZCLEVBQUU7WUFDRSxRQUFRLEVBQUUsT0FBTztTQUNsQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBRUY7QUEzSEQsOEJBMkhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHsgT25lU2NoZW1hIH0gZnJvbSAnZHluYW1vZGItb25ldGFibGUnO1xuaW1wb3J0ICogYXMgcGogZnJvbSAncHJvamVuJztcbmltcG9ydCB7IFBBQ0tBR0VfTkFNRSB9IGZyb20gJy4vY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YXN0b3JlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IG1vZGVsTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBkZWZpbml0aW9uRmlsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgRGF0YXN0b3JlIGV4dGVuZHMgcGouQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3RvcihhcHA6IHBqLmF3c2Nkay5Bd3NDZGtUeXBlU2NyaXB0QXBwLCBwcm90ZWN0ZWQgb3B0aW9uczogRGF0YXN0b3JlT3B0aW9ucykge1xuICAgIHN1cGVyKGFwcCk7XG5cbiAgICBhcHAuYWRkRGVwcygnZHluYW1vZGItb25ldGFibGUnKTtcbiAgICBhcHAuYWRkRGVwcygnQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiJyk7XG4gICAgYXBwLmFkZERlcHMoJ0Bhd3Mtc2RrL2xpYi1keW5hbW9kYicpO1xuXG4gICAgY29uc3QgbW9kZWwgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhvcHRpb25zLmRlZmluaXRpb25GaWxlKS50b1N0cmluZygpKSBhcyBPbmVTY2hlbWE7XG5cbiAgICB0aGlzLmNyZWF0ZU1vZGVsRmlsZShgLi9zcmMvZ2VuZXJhdGVkL2RhdGFzdG9yZS4ke29wdGlvbnMubW9kZWxOYW1lLnRvTG93ZXJDYXNlKCl9LW1vZGVsLmdlbmVyYXRlZC50c2AsIG1vZGVsKTtcbiAgICB0aGlzLmNyZWF0ZUNvbnN0cnVjdEZpbGUoYC4vc3JjL2dlbmVyYXRlZC9kYXRhc3RvcmUuJHtvcHRpb25zLm1vZGVsTmFtZS50b0xvd2VyQ2FzZSgpfS1jb25zdHJ1Y3QuZ2VuZXJhdGVkLnRzYCwgbW9kZWwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsRmlsZShmaWxlTmFtZTogc3RyaW5nLCBtb2RlbDogT25lU2NoZW1hKSB7XG5cbiAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVOYW1lLCBgLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IE1vZGVsLCBUYWJsZSwgRW50aXR5IH0gZnJvbSAnZHluYW1vZGItb25ldGFibGUnO1xuaW1wb3J0IHsgZW52IH0gZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgeyBEeW5hbW8gfSBmcm9tICdkeW5hbW9kYi1vbmV0YWJsZS9EeW5hbW8nO1xuaW1wb3J0IHsgRHluYW1vREJDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZHluYW1vZGInO1xuXG5leHBvcnQgY29uc3QgZHluYW1vQ2xpZW50ID0gbmV3IER5bmFtbyh7IGNsaWVudDogbmV3IER5bmFtb0RCQ2xpZW50KHt9KSB9KVxuZXhwb3J0IGNvbnN0IFRBQkxFX05BTUU6IHN0cmluZyA9IGVudi5UQUJMRSE7XG5cbiR7T2JqZWN0LmVudHJpZXMobW9kZWwuaW5kZXhlcykubWFwKChbaWR4LCBkYXRhXSkgPT4gYGV4cG9ydCBjb25zdCBJbmRleF8ke2lkeH1fTmFtZSA9ICcke2lkeH0nO1xuZXhwb3J0IGNvbnN0IEluZGV4XyR7aWR4fV9IYXNoS2V5ID0gJyR7ZGF0YS5oYXNofSc7XG5leHBvcnQgY29uc3QgSW5kZXhfJHtpZHh9X1NvcnRLZXkgPSAnJHtkYXRhLnNvcnR9JztcbmApLmpvaW4oJ1xcbicpfVxuXG5leHBvcnQgY29uc3QgU2NoZW1hID0gJHt0aGlzLnN0cmluZ2lmeU1vZGVsKG1vZGVsKX07XG5cbmV4cG9ydCBjb25zdCB0YWJsZSA9IG5ldyBUYWJsZSh7XG4gIGNsaWVudDogZHluYW1vQ2xpZW50LFxuICBuYW1lOiBUQUJMRV9OQU1FLFxuICBzY2hlbWE6IFNjaGVtYSxcbiAgaXNvRGF0ZXM6IHRydWUsXG4gIC8vIGxvZ2dlcjogdHJ1ZSxcbiAgaGlkZGVuOiBmYWxzZSxcbn0pO1xuXG4ke09iamVjdC5lbnRyaWVzKG1vZGVsLm1vZGVscykubWFwKChbdHlwZU5hbWUsIF9dKSA9PiBgZXhwb3J0IHR5cGUgJHt0eXBlTmFtZX1UeXBlID0gRW50aXR5PHR5cGVvZiBTY2hlbWEubW9kZWxzLiR7dHlwZU5hbWV9PlxuZXhwb3J0IGNvbnN0ICR7dHlwZU5hbWV9OiBNb2RlbDwke3R5cGVOYW1lfVR5cGU+ID0gdGFibGUuZ2V0TW9kZWw8JHt0eXBlTmFtZX1UeXBlPignJHt0eXBlTmFtZX0nKTtcbmApfVxuXG5gLCB7XG4gICAgICBlbmNvZGluZzogJ3V0Zi04JyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaW5naWZ5TW9kZWwobW9kZWw6IE9uZVNjaGVtYSkge1xuICAgIC8vIGFycmF5LCBiaW5hcnksIGJvb2xlYW4sICAgICAgICAgZGF0ZSwgbnVtYmVyLCBvYmplY3QsIHNldCwgc3RyaW5nXG4gICAgLy8gQXJyYXksIEJpbmFyeSwgQm9vbGVhbiwgQnVmZmVyLCBEYXRlLCBOdW1iZXIsIE9iamVjdCwgU2V0LCBTdHJpbmdcblxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShtb2RlbCwgbnVsbCwgMilcbiAgICAgIC5yZXBsYWNlKC9cInR5cGVcIjogXCJhcnJheVwiL2csICdcInR5cGVcIjogQXJyYXknKVxuICAgICAgLnJlcGxhY2UoL1widHlwZVwiOiBcImJpbmFyeVwiL2csICdcInR5cGVcIjogQmluYXJ5JylcbiAgICAgIC5yZXBsYWNlKC9cInR5cGVcIjogXCJib29sZWFuXCIvZywgJ1widHlwZVwiOiBCb29sZWFuJylcbiAgICAgIC5yZXBsYWNlKC9cInR5cGVcIjogXCJkYXRlXCIvZywgJ1widHlwZVwiOiBEYXRlJylcbiAgICAgIC5yZXBsYWNlKC9cInR5cGVcIjogXCJudW1iZXJcIi9nLCAnXCJ0eXBlXCI6IE51bWJlcicpXG4gICAgICAucmVwbGFjZSgvXCJ0eXBlXCI6IFwib2JqZWN0XCIvZywgJ1widHlwZVwiOiBPYmplY3QnKVxuICAgICAgLnJlcGxhY2UoL1widHlwZVwiOiBcInNldFwiL2csICdcInR5cGVcIjogU2V0JylcbiAgICAgIC5yZXBsYWNlKC9cInR5cGVcIjogXCJzdHJpbmdcIi9nLCAnXCJ0eXBlXCI6IFN0cmluZycpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUNvbnN0cnVjdEZpbGUoZmlsZU5hbWU6IHN0cmluZywgbW9kZWw6IE9uZVNjaGVtYSkge1xuXG4gICAgZnMud3JpdGVGaWxlU3luYyhmaWxlTmFtZSwgYC8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBBdHRyaWJ1dGVUeXBlLCBQcm9qZWN0aW9uVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1keW5hbW9kYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFNpbmdsZVRhYmxlRGF0YXN0b3JlLCBTaW5nbGVUYWJsZURhdGFzdG9yZVByb3BzIH0gZnJvbSAnJHtQQUNLQUdFX05BTUV9L2xpYi9jb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSAke3RoaXMub3B0aW9ucy5tb2RlbE5hbWV9RGF0YXN0b3JlUHJvcHMgZXh0ZW5kcyBPbWl0PFNpbmdsZVRhYmxlRGF0YXN0b3JlUHJvcHMsICdkZXNpZ24nPiB7XG4gIC8vXG59XG5cbmV4cG9ydCBjbGFzcyAke3RoaXMub3B0aW9ucy5tb2RlbE5hbWV9RGF0YXN0b3JlIGV4dGVuZHMgU2luZ2xlVGFibGVEYXRhc3RvcmUge1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiAke3RoaXMub3B0aW9ucy5tb2RlbE5hbWV9RGF0YXN0b3JlUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBkZXNpZ246IHtcbiAgICAgICAgcHJpbWFyeUtleToge1xuICAgICAgICAgIHBhcnRpdGlvbktleTogJyR7bW9kZWwuaW5kZXhlcy5wcmltYXJ5Lmhhc2h9JyxcbiAgICAgICAgICAke21vZGVsLmluZGV4ZXMucHJpbWFyeS5zb3J0ID8gYHNvcnRLZXk6ICcke21vZGVsLmluZGV4ZXMucHJpbWFyeS5zb3J0fScsYCA6ICcnfVxuICAgICAgICB9LFxuICAgICAgICAvLyB0aW1lVG9MaXZlQXR0cmlidXRlOiAnVE9ETycsXG4gICAgICAgIGdsb2JhbEluZGV4ZXM6IFtcbiAgICAgICAgICAke09iamVjdC5lbnRyaWVzKG1vZGVsLmluZGV4ZXMpLmZpbHRlcigoW2lkeCwgZGF0YV0pID0+IGlkeCAhPT0gJ3ByaW1hcnknICYmIGRhdGEudHlwZSAhPT0gJ2xvY2FsJykubWFwKChbaWR4LCBkYXRhXSkgPT4gYHtcbiAgICAgICAgICAgIGluZGV4TmFtZTogJyR7aWR4fScsXG4gICAgICAgICAgICBwYXJ0aXRpb25LZXk6IHtcbiAgICAgICAgICAgICAgbmFtZTogJyR7ZGF0YS5oYXNofScsXG4gICAgICAgICAgICAgIHR5cGU6IEF0dHJpYnV0ZVR5cGUuU1RSSU5HLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICR7ZGF0YS5zb3J0ID8gYHNvcnRLZXk6IHtcbiAgICAgICAgICAgICAgbmFtZTogJyR7ZGF0YS5zb3J0fScsXG4gICAgICAgICAgICAgIHR5cGU6IEF0dHJpYnV0ZVR5cGUuU1RSSU5HLFxuICAgICAgICAgICAgfSxgIDogJyd9XG4gICAgICAgICAgICBwcm9qZWN0aW9uVHlwZTogUHJvamVjdGlvblR5cGUuJHt0eXBlb2YgZGF0YS5wcm9qZWN0ID09PSAnc3RyaW5nJyA/IGRhdGEucHJvamVjdC50b1VwcGVyQ2FzZSgpIDogJ0lOQ0xVREUnfSxcbiAgICAgICAgICAgICR7QXJyYXkuaXNBcnJheShkYXRhLnByb2plY3QpID8gYG5vbktleUF0dHJpYnV0ZXM6IFske2RhdGEucHJvamVjdC5tYXAoZSA9PiBgJyR7ZX0nYCkuam9pbignLCcpfV0sYCA6ICcnfVxuICAgICAgICAgIH1gKS5qb2luKCcsXFxuJyl9XG4gICAgICAgIF0sXG4gICAgICAgIGxvY2FsSW5kZXhlczogW1xuICAgICAgICAgICR7T2JqZWN0LmVudHJpZXMobW9kZWwuaW5kZXhlcykuZmlsdGVyKChbXywgZGF0YV0pID0+IGRhdGEudHlwZSA9PT0gJ2xvY2FsJykubWFwKChbaWR4LCBkYXRhXSkgPT4gYHtcbiAgICAgICAgICAgIGluZGV4TmFtZTogJyR7aWR4fScsXG4gICAgICAgICAgICBzb3J0S2V5OiB7XG4gICAgICAgICAgICAgIG5hbWU6ICcke2RhdGEuc29ydH0nLFxuICAgICAgICAgICAgICB0eXBlOiBBdHRyaWJ1dGVUeXBlLlNUUklORyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uVHlwZTogUHJvamVjdGlvblR5cGUuJHt0eXBlb2YgZGF0YS5wcm9qZWN0ID09PSAnc3RyaW5nJyA/IGRhdGEucHJvamVjdCA6ICdJTkNMVURFJ30sXG4gICAgICAgICAgICAke0FycmF5LmlzQXJyYXkoZGF0YS5wcm9qZWN0KSA/IGBub25LZXlBdHRyaWJ1dGVzOiBbJHtkYXRhLnByb2plY3QubWFwKGUgPT4gYCcke2V9J2ApLmpvaW4oJywnKX1dLGAgOiAnJ31cbiAgICAgICAgICB9YCkuam9pbignLFxcbicpfVxuICAgICAgICBdLFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbn1gLCB7XG4gICAgICBlbmNvZGluZzogJ3V0Zi04JyxcbiAgICB9KTtcbiAgfVxuXG59Il19
|
package/lib/projen/index.d.ts
CHANGED
package/lib/projen/index.js
CHANGED
|
@@ -15,6 +15,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./core"), exports);
|
|
18
|
-
__exportStar(require("./
|
|
19
|
-
__exportStar(require("./
|
|
20
|
-
|
|
18
|
+
__exportStar(require("./rest-api"), exports);
|
|
19
|
+
__exportStar(require("./datastore"), exports);
|
|
20
|
+
__exportStar(require("./workflow"), exports);
|
|
21
|
+
// export * from './graphql-api';
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvamVuL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBdUI7QUFDdkIsNkNBQTJCO0FBQzNCLDhDQUE0QjtBQUM1Qiw2Q0FBMkI7QUFDM0IsaUNBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jb3JlJztcbmV4cG9ydCAqIGZyb20gJy4vcmVzdC1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhc3RvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrZmxvdyc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2dyYXBocWwtYXBpJzsiXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { OpenAPI3 } from 'openapi-typescript';
|
|
2
|
+
import * as pj from 'projen';
|
|
3
|
+
export interface RestApiOptions {
|
|
4
|
+
readonly apiName: string;
|
|
5
|
+
readonly definitionFile: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class RestApi extends pj.Component {
|
|
8
|
+
protected options: RestApiOptions;
|
|
9
|
+
constructor(app: pj.awscdk.AwsCdkTypeScriptApp, options: RestApiOptions);
|
|
10
|
+
protected createConstructFile(fileName: string): void;
|
|
11
|
+
protected addRestResource(apiSpec: OpenAPI3, path: string, method: string): void;
|
|
12
|
+
protected createEntryFile(entryFile: string, method: string, operationId: string): void;
|
|
13
|
+
}
|