@aws-solutions-constructs/core
Version:
Core CDK Construct for patterns library
138 lines • 16.6 kB
JavaScript
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
* with the License. A copy of the License is located at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
* OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
* and limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.DefaultGlobalLambdaRestApiProps = DefaultGlobalLambdaRestApiProps;
exports.DefaultRegionalLambdaRestApiProps = DefaultRegionalLambdaRestApiProps;
exports.DefaultGlobalRestApiProps = DefaultGlobalRestApiProps;
exports.DefaultRegionalRestApiProps = DefaultRegionalRestApiProps;
exports.DefaultSpecRestApiProps = DefaultSpecRestApiProps;
exports.DefaultIntegrationResponses = DefaultIntegrationResponses;
/*
* The functions found here in the core library are for internal use and can be changed
* or removed outside of a major release. We recommend against calling them directly from client code.
*/
const api = require("aws-cdk-lib/aws-apigateway");
const utils_1 = require("./utils");
/**
* Private function to configure an api.RestApiProps
* @param scope - the construct to which the RestApi should be attached to.
* @param endpointType - endpoint type for Api Gateway e.g. Regional, Global, Private
* @param logGroup - CW Log group for Api Gateway access logging
*/
function DefaultRestApiProps(endpointType, logGroup, includeAuth = true) {
return {
endpointConfiguration: {
types: endpointType
},
cloudWatchRole: false,
// Configure API Gateway Access logging
deployOptions: {
accessLogDestination: new api.LogGroupLogDestination(logGroup),
accessLogFormat: api.AccessLogFormat.jsonWithStandardFields(),
loggingLevel: api.MethodLoggingLevel.INFO,
dataTraceEnabled: false,
tracingEnabled: true
},
defaultMethodOptions: {
authorizationType: includeAuth ? api.AuthorizationType.IAM : undefined
}
};
}
/**
* @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
*
* Provides the default set of properties for Edge/Global Lambda backed RestApi
* @param scope - the construct to which the RestApi should be attached to.
* @param _endpointType - endpoint type for Api Gateway e.g. Regional, Global, Private
* @param logGroup - CW Log group for Api Gateway access logging
*/
function DefaultGlobalLambdaRestApiProps(existingLambdaObj, logGroup) {
const baseProps = DefaultRestApiProps([api.EndpointType.EDGE], logGroup);
const extraProps = {
handler: existingLambdaObj,
};
return Object.assign(baseProps, extraProps);
}
/**
* @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
*
* Provides the default set of properties for Regional Lambda backed RestApi
* @param scope - the construct to which the RestApi should be attached to.
* @param _endpointType - endpoint type for Api Gateway e.g. Regional, Global, Private
* @param logGroup - CW Log group for Api Gateway access logging
*/
function DefaultRegionalLambdaRestApiProps(existingLambdaObj, logGroup, includeAuth = true) {
const baseProps = DefaultRestApiProps([api.EndpointType.REGIONAL], logGroup, includeAuth);
const extraProps = {
handler: existingLambdaObj,
};
return Object.assign(baseProps, extraProps);
}
/**
* @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
*
* Provides the default set of properties for Edge/Global RestApi
* @param logGroup - CW Log group for Api Gateway access logging
*/
function DefaultGlobalRestApiProps(logGroup) {
return DefaultRestApiProps([api.EndpointType.EDGE], logGroup);
}
/**
* @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
*
* Provides the default set of properties for Regional RestApi
* @param logGroup - CW Log group for Api Gateway access logging
*/
function DefaultRegionalRestApiProps(logGroup) {
return DefaultRestApiProps([api.EndpointType.REGIONAL], logGroup);
}
/**
* @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
*
* Provides the default set of properties for SpecRestApi
* @param logGroup - CloudWatch Log Group for Api Gateway Access Logging
*/
function DefaultSpecRestApiProps(scope, logGroup) {
return {
cloudWatchRole: false,
deployOptions: {
accessLogDestination: new api.LogGroupLogDestination(logGroup),
accessLogFormat: api.AccessLogFormat.jsonWithStandardFields(),
loggingLevel: api.MethodLoggingLevel.INFO,
dataTraceEnabled: false,
tracingEnabled: true
},
restApiName: (0, utils_1.generatePhysicalRestApiName)("", [scope.node.id]),
};
}
/**
* @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
*
* @returns The set of default integration responses for status codes 200 and 500.
*/
function DefaultIntegrationResponses() {
return [
{
statusCode: "200"
},
{
statusCode: "500",
responseTemplates: {
"text/html": "Error"
},
selectionPattern: "500"
}
];
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpZ2F0ZXdheS1kZWZhdWx0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFwaWdhdGV3YXktZGVmYXVsdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOztBQWlESCwwRUFRQztBQVVELDhFQVVDO0FBUUQsOERBRUM7QUFRRCxrRUFFQztBQVFELDBEQVlDO0FBT0Qsa0VBYUM7QUF2SUQ7OztHQUdHO0FBRUgsa0RBQWtEO0FBS2xELG1DQUFzRDtBQUV0RDs7Ozs7R0FLRztBQUNILFNBQVMsbUJBQW1CLENBQUMsWUFBZ0MsRUFBRSxRQUFrQixFQUFFLGNBQXVCLElBQUk7SUFDNUcsT0FBTztRQUNMLHFCQUFxQixFQUFFO1lBQ3JCLEtBQUssRUFBRSxZQUFZO1NBQ3BCO1FBQ0QsY0FBYyxFQUFFLEtBQUs7UUFDckIsdUNBQXVDO1FBQ3ZDLGFBQWEsRUFBRTtZQUNiLG9CQUFvQixFQUFFLElBQUksR0FBRyxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQztZQUM5RCxlQUFlLEVBQUUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsRUFBRTtZQUM3RCxZQUFZLEVBQUUsR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUk7WUFDekMsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixjQUFjLEVBQUUsSUFBSTtTQUNyQjtRQUNELG9CQUFvQixFQUFFO1lBQ3BCLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUN2RTtLQUVrQixDQUFDO0FBQ3hCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsK0JBQStCLENBQUMsaUJBQWtDLEVBQUUsUUFBa0I7SUFDcEcsTUFBTSxTQUFTLEdBQXFCLG1CQUFtQixDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUUzRixNQUFNLFVBQVUsR0FBMkI7UUFDekMsT0FBTyxFQUFFLGlCQUFpQjtLQUMzQixDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGlDQUFpQyxDQUFDLGlCQUFrQyxFQUNsRixRQUFrQixFQUNsQixjQUF1QixJQUFJO0lBQzNCLE1BQU0sU0FBUyxHQUFxQixtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRTVHLE1BQU0sVUFBVSxHQUEyQjtRQUN6QyxPQUFPLEVBQUUsaUJBQWlCO0tBQzNCLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLHlCQUF5QixDQUFDLFFBQWtCO0lBQzFELE9BQU8sbUJBQW1CLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLDJCQUEyQixDQUFDLFFBQWtCO0lBQzVELE9BQU8sbUJBQW1CLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLEtBQWdCLEVBQUUsUUFBa0I7SUFDMUUsT0FBTztRQUNMLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLGFBQWEsRUFBRTtZQUNiLG9CQUFvQixFQUFFLElBQUksR0FBRyxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQztZQUM5RCxlQUFlLEVBQUUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsRUFBRTtZQUM3RCxZQUFZLEVBQUUsR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUk7WUFDekMsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixjQUFjLEVBQUUsSUFBSTtTQUNyQjtRQUNELFdBQVcsRUFBRSxJQUFBLG1DQUEyQixFQUFDLEVBQUUsRUFBRSxDQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFFLENBQUM7S0FDaEUsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsMkJBQTJCO0lBQ3pDLE9BQU87UUFDTDtZQUNFLFVBQVUsRUFBRSxLQUFLO1NBQ2xCO1FBQ0Q7WUFDRSxVQUFVLEVBQUUsS0FBSztZQUNqQixpQkFBaUIsRUFBRTtnQkFDakIsV0FBVyxFQUFFLE9BQU87YUFDckI7WUFDRCxnQkFBZ0IsRUFBRSxLQUFLO1NBQ3hCO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKlxuICogIFRoZSBmdW5jdGlvbnMgZm91bmQgaGVyZSBpbiB0aGUgY29yZSBsaWJyYXJ5IGFyZSBmb3IgaW50ZXJuYWwgdXNlIGFuZCBjYW4gYmUgY2hhbmdlZFxuICogIG9yIHJlbW92ZWQgb3V0c2lkZSBvZiBhIG1ham9yIHJlbGVhc2UuIFdlIHJlY29tbWVuZCBhZ2FpbnN0IGNhbGxpbmcgdGhlbSBkaXJlY3RseSBmcm9tIGNsaWVudCBjb2RlLlxuICovXG5cbmltcG9ydCAqIGFzIGFwaSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheSc7XG5pbXBvcnQgeyBJbnRlZ3JhdGlvblJlc3BvbnNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXknO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgTG9nR3JvdXAgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IGdlbmVyYXRlUGh5c2ljYWxSZXN0QXBpTmFtZSB9IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIFByaXZhdGUgZnVuY3Rpb24gdG8gY29uZmlndXJlIGFuIGFwaS5SZXN0QXBpUHJvcHNcbiAqIEBwYXJhbSBzY29wZSAtIHRoZSBjb25zdHJ1Y3QgdG8gd2hpY2ggdGhlIFJlc3RBcGkgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLlxuICogQHBhcmFtIGVuZHBvaW50VHlwZSAtIGVuZHBvaW50IHR5cGUgZm9yIEFwaSBHYXRld2F5IGUuZy4gUmVnaW9uYWwsIEdsb2JhbCwgUHJpdmF0ZVxuICogQHBhcmFtIGxvZ0dyb3VwIC0gQ1cgTG9nIGdyb3VwIGZvciBBcGkgR2F0ZXdheSBhY2Nlc3MgbG9nZ2luZ1xuICovXG5mdW5jdGlvbiBEZWZhdWx0UmVzdEFwaVByb3BzKGVuZHBvaW50VHlwZTogYXBpLkVuZHBvaW50VHlwZVtdLCBsb2dHcm91cDogTG9nR3JvdXAsIGluY2x1ZGVBdXRoOiBib29sZWFuID0gdHJ1ZSk6IGFwaS5SZXN0QXBpUHJvcHMge1xuICByZXR1cm4ge1xuICAgIGVuZHBvaW50Q29uZmlndXJhdGlvbjoge1xuICAgICAgdHlwZXM6IGVuZHBvaW50VHlwZVxuICAgIH0sXG4gICAgY2xvdWRXYXRjaFJvbGU6IGZhbHNlLFxuICAgIC8vIENvbmZpZ3VyZSBBUEkgR2F0ZXdheSBBY2Nlc3MgbG9nZ2luZ1xuICAgIGRlcGxveU9wdGlvbnM6IHtcbiAgICAgIGFjY2Vzc0xvZ0Rlc3RpbmF0aW9uOiBuZXcgYXBpLkxvZ0dyb3VwTG9nRGVzdGluYXRpb24obG9nR3JvdXApLFxuICAgICAgYWNjZXNzTG9nRm9ybWF0OiBhcGkuQWNjZXNzTG9nRm9ybWF0Lmpzb25XaXRoU3RhbmRhcmRGaWVsZHMoKSxcbiAgICAgIGxvZ2dpbmdMZXZlbDogYXBpLk1ldGhvZExvZ2dpbmdMZXZlbC5JTkZPLFxuICAgICAgZGF0YVRyYWNlRW5hYmxlZDogZmFsc2UsXG4gICAgICB0cmFjaW5nRW5hYmxlZDogdHJ1ZVxuICAgIH0sXG4gICAgZGVmYXVsdE1ldGhvZE9wdGlvbnM6IHtcbiAgICAgIGF1dGhvcml6YXRpb25UeXBlOiBpbmNsdWRlQXV0aCA/IGFwaS5BdXRob3JpemF0aW9uVHlwZS5JQU0gOiB1bmRlZmluZWRcbiAgICB9XG5cbiAgfSBhcyBhcGkuUmVzdEFwaVByb3BzO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKlxuICogUHJvdmlkZXMgdGhlIGRlZmF1bHQgc2V0IG9mIHByb3BlcnRpZXMgZm9yIEVkZ2UvR2xvYmFsIExhbWJkYSBiYWNrZWQgUmVzdEFwaVxuICogQHBhcmFtIHNjb3BlIC0gdGhlIGNvbnN0cnVjdCB0byB3aGljaCB0aGUgUmVzdEFwaSBzaG91bGQgYmUgYXR0YWNoZWQgdG8uXG4gKiBAcGFyYW0gX2VuZHBvaW50VHlwZSAtIGVuZHBvaW50IHR5cGUgZm9yIEFwaSBHYXRld2F5IGUuZy4gUmVnaW9uYWwsIEdsb2JhbCwgUHJpdmF0ZVxuICogQHBhcmFtIGxvZ0dyb3VwIC0gQ1cgTG9nIGdyb3VwIGZvciBBcGkgR2F0ZXdheSBhY2Nlc3MgbG9nZ2luZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gRGVmYXVsdEdsb2JhbExhbWJkYVJlc3RBcGlQcm9wcyhleGlzdGluZ0xhbWJkYU9iajogbGFtYmRhLkZ1bmN0aW9uLCBsb2dHcm91cDogTG9nR3JvdXApOiBhcGkuTGFtYmRhUmVzdEFwaVByb3BzIHtcbiAgY29uc3QgYmFzZVByb3BzOiBhcGkuUmVzdEFwaVByb3BzID0gRGVmYXVsdFJlc3RBcGlQcm9wcyhbYXBpLkVuZHBvaW50VHlwZS5FREdFXSwgbG9nR3JvdXApO1xuXG4gIGNvbnN0IGV4dHJhUHJvcHM6IGFwaS5MYW1iZGFSZXN0QXBpUHJvcHMgPSB7XG4gICAgaGFuZGxlcjogZXhpc3RpbmdMYW1iZGFPYmosXG4gIH07XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYmFzZVByb3BzLCBleHRyYVByb3BzKTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICpcbiAqIFByb3ZpZGVzIHRoZSBkZWZhdWx0IHNldCBvZiBwcm9wZXJ0aWVzIGZvciBSZWdpb25hbCBMYW1iZGEgYmFja2VkIFJlc3RBcGlcbiAqIEBwYXJhbSBzY29wZSAtIHRoZSBjb25zdHJ1Y3QgdG8gd2hpY2ggdGhlIFJlc3RBcGkgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLlxuICogQHBhcmFtIF9lbmRwb2ludFR5cGUgLSBlbmRwb2ludCB0eXBlIGZvciBBcGkgR2F0ZXdheSBlLmcuIFJlZ2lvbmFsLCBHbG9iYWwsIFByaXZhdGVcbiAqIEBwYXJhbSBsb2dHcm91cCAtIENXIExvZyBncm91cCBmb3IgQXBpIEdhdGV3YXkgYWNjZXNzIGxvZ2dpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERlZmF1bHRSZWdpb25hbExhbWJkYVJlc3RBcGlQcm9wcyhleGlzdGluZ0xhbWJkYU9iajogbGFtYmRhLkZ1bmN0aW9uLFxuICBsb2dHcm91cDogTG9nR3JvdXAsXG4gIGluY2x1ZGVBdXRoOiBib29sZWFuID0gdHJ1ZSk6IGFwaS5MYW1iZGFSZXN0QXBpUHJvcHMge1xuICBjb25zdCBiYXNlUHJvcHM6IGFwaS5SZXN0QXBpUHJvcHMgPSBEZWZhdWx0UmVzdEFwaVByb3BzKFthcGkuRW5kcG9pbnRUeXBlLlJFR0lPTkFMXSwgbG9nR3JvdXAsIGluY2x1ZGVBdXRoKTtcblxuICBjb25zdCBleHRyYVByb3BzOiBhcGkuTGFtYmRhUmVzdEFwaVByb3BzID0ge1xuICAgIGhhbmRsZXI6IGV4aXN0aW5nTGFtYmRhT2JqLFxuICB9O1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKGJhc2VQcm9wcywgZXh0cmFQcm9wcyk7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqXG4gKiBQcm92aWRlcyB0aGUgZGVmYXVsdCBzZXQgb2YgcHJvcGVydGllcyBmb3IgRWRnZS9HbG9iYWwgUmVzdEFwaVxuICogQHBhcmFtIGxvZ0dyb3VwIC0gQ1cgTG9nIGdyb3VwIGZvciBBcGkgR2F0ZXdheSBhY2Nlc3MgbG9nZ2luZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gRGVmYXVsdEdsb2JhbFJlc3RBcGlQcm9wcyhsb2dHcm91cDogTG9nR3JvdXApIHtcbiAgcmV0dXJuIERlZmF1bHRSZXN0QXBpUHJvcHMoW2FwaS5FbmRwb2ludFR5cGUuRURHRV0sIGxvZ0dyb3VwKTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICpcbiAqIFByb3ZpZGVzIHRoZSBkZWZhdWx0IHNldCBvZiBwcm9wZXJ0aWVzIGZvciBSZWdpb25hbCBSZXN0QXBpXG4gKiBAcGFyYW0gbG9nR3JvdXAgLSBDVyBMb2cgZ3JvdXAgZm9yIEFwaSBHYXRld2F5IGFjY2VzcyBsb2dnaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEZWZhdWx0UmVnaW9uYWxSZXN0QXBpUHJvcHMobG9nR3JvdXA6IExvZ0dyb3VwKSB7XG4gIHJldHVybiBEZWZhdWx0UmVzdEFwaVByb3BzKFthcGkuRW5kcG9pbnRUeXBlLlJFR0lPTkFMXSwgbG9nR3JvdXApO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKlxuICogUHJvdmlkZXMgdGhlIGRlZmF1bHQgc2V0IG9mIHByb3BlcnRpZXMgZm9yIFNwZWNSZXN0QXBpXG4gKiBAcGFyYW0gbG9nR3JvdXAgLSBDbG91ZFdhdGNoIExvZyBHcm91cCBmb3IgQXBpIEdhdGV3YXkgQWNjZXNzIExvZ2dpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERlZmF1bHRTcGVjUmVzdEFwaVByb3BzKHNjb3BlOiBDb25zdHJ1Y3QsIGxvZ0dyb3VwOiBMb2dHcm91cCk6IGFwaS5SZXN0QXBpQmFzZVByb3BzIHtcbiAgcmV0dXJuIHtcbiAgICBjbG91ZFdhdGNoUm9sZTogZmFsc2UsXG4gICAgZGVwbG95T3B0aW9uczoge1xuICAgICAgYWNjZXNzTG9nRGVzdGluYXRpb246IG5ldyBhcGkuTG9nR3JvdXBMb2dEZXN0aW5hdGlvbihsb2dHcm91cCksXG4gICAgICBhY2Nlc3NMb2dGb3JtYXQ6IGFwaS5BY2Nlc3NMb2dGb3JtYXQuanNvbldpdGhTdGFuZGFyZEZpZWxkcygpLFxuICAgICAgbG9nZ2luZ0xldmVsOiBhcGkuTWV0aG9kTG9nZ2luZ0xldmVsLklORk8sXG4gICAgICBkYXRhVHJhY2VFbmFibGVkOiBmYWxzZSxcbiAgICAgIHRyYWNpbmdFbmFibGVkOiB0cnVlXG4gICAgfSxcbiAgICByZXN0QXBpTmFtZTogZ2VuZXJhdGVQaHlzaWNhbFJlc3RBcGlOYW1lKFwiXCIsIFsgc2NvcGUubm9kZS5pZCBdKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICpcbiAqIEByZXR1cm5zIFRoZSBzZXQgb2YgZGVmYXVsdCBpbnRlZ3JhdGlvbiByZXNwb25zZXMgZm9yIHN0YXR1cyBjb2RlcyAyMDAgYW5kIDUwMC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERlZmF1bHRJbnRlZ3JhdGlvblJlc3BvbnNlcygpOiBJbnRlZ3JhdGlvblJlc3BvbnNlW10ge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHN0YXR1c0NvZGU6IFwiMjAwXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIHN0YXR1c0NvZGU6IFwiNTAwXCIsXG4gICAgICByZXNwb25zZVRlbXBsYXRlczoge1xuICAgICAgICBcInRleHQvaHRtbFwiOiBcIkVycm9yXCJcbiAgICAgIH0sXG4gICAgICBzZWxlY3Rpb25QYXR0ZXJuOiBcIjUwMFwiXG4gICAgfVxuICBdO1xufVxuIl19
;