UNPKG

@aws-solutions-constructs/core

Version:
188 lines 19.5 kB
"use strict"; /** * 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 }); const assertions_1 = require("aws-cdk-lib/assertions"); const aws_cdk_lib_1 = require("aws-cdk-lib"); const defaults = require(".."); const fieldSchema = [{ name: "id", type: "int", comment: "Identifier for the record" }, { name: "name", type: "string", comment: "The name of the record" }, { name: "type", type: "string", comment: "The type of the record" }, { name: "numericvalue", type: "int", comment: "Some value associated with the record" }]; // -------------------------------------------------------------- // Create database by passing props // -------------------------------------------------------------- test('create default CfnTable with default props', () => { const stack = new aws_cdk_lib_1.Stack(); defaults.DefaultGlueTable(stack, { catalogId: 'fakecatalogfortest', databaseName: 'fakedatabase', tableInput: { parameters: { classification: 'json' }, storageDescriptor: { parameters: { endpointUrl: `https://kinesis.${aws_cdk_lib_1.Aws.REGION}.amazonaws.com`, streamName: 'testStream', typeOfData: 'kinesis' } } } }); assertions_1.Template.fromStack(stack).hasResource('AWS::Glue::Table', { Type: "AWS::Glue::Table", Properties: { CatalogId: "fakecatalogfortest", DatabaseName: "fakedatabase", TableInput: { Parameters: { classification: "json" }, StorageDescriptor: { Parameters: { endpointUrl: { "Fn::Join": [ "", [ "https://kinesis.", { Ref: "AWS::Region" }, ".amazonaws.com" ] ] }, streamName: "testStream", typeOfData: "kinesis" } } } } }); }); // -------------------------------------------------------------- // Create database by passing no props to database (default database) // -------------------------------------------------------------- test('Create table', () => { const stack = new aws_cdk_lib_1.Stack(); defaults.createGlueTable(stack, defaults.createGlueDatabase(stack), undefined, fieldSchema, 'kinesis', { STREAM_NAME: 'testStream' }); const template = assertions_1.Template.fromStack(stack); template.hasResource('AWS::Glue::Database', { Type: "AWS::Glue::Database", Properties: { CatalogId: { Ref: "AWS::AccountId" }, DatabaseInput: { Description: "An AWS Glue database generated by AWS Solutions Construct" } } }); template.hasResource('AWS::Glue::Table', { Properties: { CatalogId: { Ref: "AWS::AccountId" }, DatabaseName: { Ref: "GlueDatabase" }, TableInput: { Parameters: { classification: "json" }, StorageDescriptor: { Columns: [ { Comment: "Identifier for the record", Name: "id", Type: "int" }, { Comment: "The name of the record", Name: "name", Type: "string" }, { Comment: "The type of the record", Name: "type", Type: "string" }, { Comment: "Some value associated with the record", Name: "numericvalue", Type: "int" } ], Compressed: false, InputFormat: "org.apache.hadoop.mapred.TextInputFormat", Location: "testStream", NumberOfBuckets: -1, OutputFormat: "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat", Parameters: { endpointUrl: { "Fn::Join": [ "", [ "https://kinesis.", { Ref: "AWS::Region" }, ".amazonaws.com" ] ] }, streamName: "testStream", typeOfData: "kinesis" }, SerdeInfo: { Parameters: { paths: "id,name,type,numericvalue" }, SerializationLibrary: "org.openx.data.jsonserde.JsonSerDe" } }, TableType: "EXTERNAL_TABLE" } } }); }); // -------------------------------------------------------------- // Pass an unsupported source type, it should throw an error // -------------------------------------------------------------- test('error condition', () => { const stack = new aws_cdk_lib_1.Stack(); try { const database = defaults.DefaultGlueDatabase(stack, defaults.DefaultGlueDatabaseProps()); defaults.DefaultGlueTable(database, defaults.DefaultGlueTableProps(database, fieldSchema, 'SomeSource', { STREAM_NAME: 'somefakestream' })); } catch (error) { expect(error).toBeInstanceOf(Error); } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2x1ZS10YWJsZS1oZWxwZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImdsdWUtdGFibGUtaGVscGVyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOztBQUVILHVEQUFrRDtBQUNsRCw2Q0FBeUM7QUFDekMsK0JBQStCO0FBRS9CLE1BQU0sV0FBVyxHQUFHLENBQUM7UUFDbkIsSUFBSSxFQUFFLElBQUk7UUFDVixJQUFJLEVBQUUsS0FBSztRQUNYLE9BQU8sRUFBRSwyQkFBMkI7S0FDckMsRUFBRTtRQUNELElBQUksRUFBRSxNQUFNO1FBQ1osSUFBSSxFQUFFLFFBQVE7UUFDZCxPQUFPLEVBQUUsd0JBQXdCO0tBQ2xDLEVBQUU7UUFDRCxJQUFJLEVBQUUsTUFBTTtRQUNaLElBQUksRUFBRSxRQUFRO1FBQ2QsT0FBTyxFQUFFLHdCQUF3QjtLQUNsQyxFQUFFO1FBQ0QsSUFBSSxFQUFFLGNBQWM7UUFDcEIsSUFBSSxFQUFFLEtBQUs7UUFDWCxPQUFPLEVBQUUsdUNBQXVDO0tBQ2pELENBQUMsQ0FBQztBQUVILGlFQUFpRTtBQUNqRSxtQ0FBbUM7QUFDbkMsaUVBQWlFO0FBQ2pFLElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7SUFDdEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxFQUFFLENBQUM7SUFDMUIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRTtRQUMvQixTQUFTLEVBQUUsb0JBQW9CO1FBQy9CLFlBQVksRUFBRSxjQUFjO1FBQzVCLFVBQVUsRUFBRTtZQUNWLFVBQVUsRUFBRTtnQkFDVixjQUFjLEVBQUUsTUFBTTthQUN2QjtZQUNELGlCQUFpQixFQUFFO2dCQUNqQixVQUFVLEVBQUU7b0JBQ1YsV0FBVyxFQUFFLG1CQUFtQixpQkFBRyxDQUFDLE1BQU0sZ0JBQWdCO29CQUMxRCxVQUFVLEVBQUUsWUFBWTtvQkFDeEIsVUFBVSxFQUFFLFNBQVM7aUJBQ3RC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Q0Y7eUJBQ0Y7d0JBQ0QsVUFBVSxFQUFFLFlBQVk7d0JBQ3hCLFVBQVUsRUFBRSxTQUFTO3FCQUN0QjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsVUFBVSxFQUFFOzRCQUNWLEtBQUssRUFBRSwyQkFBMkI7eUJBQ25DO3dCQUNELG9CQUFvQixFQUFFLG9DQUFvQztxQkFDM0Q7aUJBQ0Y7Z0JBQ0QsU0FBUyxFQUFFLGdCQUFnQjthQUM1QjtTQUNGO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxpRUFBaUU7QUFDakUsNERBQTREO0FBQzVELGlFQUFpRTtBQUNqRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssRUFBRSxDQUFDO0lBQzFCLElBQUksQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQztRQUMxRixRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxFQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBQyxDQUFDLENBQUMsQ0FBQztJQUM1SSxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcbmltcG9ydCB7IEF3cywgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tICcuLic7XG5cbmNvbnN0IGZpZWxkU2NoZW1hID0gW3tcbiAgbmFtZTogXCJpZFwiLFxuICB0eXBlOiBcImludFwiLFxuICBjb21tZW50OiBcIklkZW50aWZpZXIgZm9yIHRoZSByZWNvcmRcIlxufSwge1xuICBuYW1lOiBcIm5hbWVcIixcbiAgdHlwZTogXCJzdHJpbmdcIixcbiAgY29tbWVudDogXCJUaGUgbmFtZSBvZiB0aGUgcmVjb3JkXCJcbn0sIHtcbiAgbmFtZTogXCJ0eXBlXCIsXG4gIHR5cGU6IFwic3RyaW5nXCIsXG4gIGNvbW1lbnQ6IFwiVGhlIHR5cGUgb2YgdGhlIHJlY29yZFwiXG59LCB7XG4gIG5hbWU6IFwibnVtZXJpY3ZhbHVlXCIsXG4gIHR5cGU6IFwiaW50XCIsXG4gIGNvbW1lbnQ6IFwiU29tZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlY29yZFwiXG59XTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENyZWF0ZSBkYXRhYmFzZSBieSBwYXNzaW5nIHByb3BzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudGVzdCgnY3JlYXRlIGRlZmF1bHQgQ2ZuVGFibGUgd2l0aCBkZWZhdWx0IHByb3BzJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICBkZWZhdWx0cy5EZWZhdWx0R2x1ZVRhYmxlKHN0YWNrLCB7XG4gICAgY2F0YWxvZ0lkOiAnZmFrZWNhdGFsb2dmb3J0ZXN0JyxcbiAgICBkYXRhYmFzZU5hbWU6ICdmYWtlZGF0YWJhc2UnLFxuICAgIHRhYmxlSW5wdXQ6IHtcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgY2xhc3NpZmljYXRpb246ICdqc29uJ1xuICAgICAgfSxcbiAgICAgIHN0b3JhZ2VEZXNjcmlwdG9yOiB7XG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBlbmRwb2ludFVybDogYGh0dHBzOi8va2luZXNpcy4ke0F3cy5SRUdJT059LmFtYXpvbmF3cy5jb21gLFxuICAgICAgICAgIHN0cmVhbU5hbWU6ICd0ZXN0U3RyZWFtJyxcbiAgICAgICAgICB0eXBlT2ZEYXRhOiAna2luZXNpcydcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5oYXNSZXNvdXJjZSgnQVdTOjpHbHVlOjpUYWJsZScsIHtcbiAgICBUeXBlOiBcIkFXUzo6R2x1ZTo6VGFibGVcIixcbiAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICBDYXRhbG9nSWQ6IFwiZmFrZWNhdGFsb2dmb3J0ZXN0XCIsXG4gICAgICBEYXRhYmFzZU5hbWU6IFwiZmFrZWRhdGFiYXNlXCIsXG4gICAgICBUYWJsZUlucHV0OiB7XG4gICAgICAgIFBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBjbGFzc2lmaWNhdGlvbjogXCJqc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgU3RvcmFnZURlc2NyaXB0b3I6IHtcbiAgICAgICAgICBQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBlbmRwb2ludFVybDoge1xuICAgICAgICAgICAgICBcIkZuOjpKb2luXCI6IFtcbiAgICAgICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIFwiaHR0cHM6Ly9raW5lc2lzLlwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBSZWY6IFwiQVdTOjpSZWdpb25cIlxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFwiLmFtYXpvbmF3cy5jb21cIlxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0cmVhbU5hbWU6IFwidGVzdFN0cmVhbVwiLFxuICAgICAgICAgICAgdHlwZU9mRGF0YTogXCJraW5lc2lzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDcmVhdGUgZGF0YWJhc2UgYnkgcGFzc2luZyBubyBwcm9wcyB0byBkYXRhYmFzZSAoZGVmYXVsdCBkYXRhYmFzZSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG50ZXN0KCdDcmVhdGUgdGFibGUnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIGRlZmF1bHRzLmNyZWF0ZUdsdWVUYWJsZShzdGFjaywgZGVmYXVsdHMuY3JlYXRlR2x1ZURhdGFiYXNlKHN0YWNrKSwgdW5kZWZpbmVkLCBmaWVsZFNjaGVtYSwgJ2tpbmVzaXMnLCB7XG4gICAgU1RSRUFNX05BTUU6ICd0ZXN0U3RyZWFtJ1xuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlKCdBV1M6OkdsdWU6OkRhdGFiYXNlJywge1xuICAgIFR5cGU6IFwiQVdTOjpHbHVlOjpEYXRhYmFzZVwiLFxuICAgIFByb3BlcnRpZXM6IHtcbiAgICAgIENhdGFsb2dJZDoge1xuICAgICAgICBSZWY6IFwiQVdTOjpBY2NvdW50SWRcIlxuICAgICAgfSxcbiAgICAgIERhdGFiYXNlSW5wdXQ6IHtcbiAgICAgICAgRGVzY3JpcHRpb246IFwiQW4gQVdTIEdsdWUgZGF0YWJhc2UgZ2VuZXJhdGVkIGJ5IEFXUyBTb2x1dGlvbnMgQ29uc3RydWN0XCJcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlKCdBV1M6OkdsdWU6OlRhYmxlJywge1xuICAgIFByb3BlcnRpZXM6IHtcbiAgICAgIENhdGFsb2dJZDoge1xuICAgICAgICBSZWY6IFwiQVdTOjpBY2NvdW50SWRcIlxuICAgICAgfSxcbiAgICAgIERhdGFiYXNlTmFtZToge1xuICAgICAgICBSZWY6IFwiR2x1ZURhdGFiYXNlXCJcbiAgICAgIH0sXG4gICAgICBUYWJsZUlucHV0OiB7XG4gICAgICAgIFBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBjbGFzc2lmaWNhdGlvbjogXCJqc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgU3RvcmFnZURlc2NyaXB0b3I6IHtcbiAgICAgICAgICBDb2x1bW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIENvbW1lbnQ6IFwiSWRlbnRpZmllciBmb3IgdGhlIHJlY29yZFwiLFxuICAgICAgICAgICAgICBOYW1lOiBcImlkXCIsXG4gICAgICAgICAgICAgIFR5cGU6IFwiaW50XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIENvbW1lbnQ6IFwiVGhlIG5hbWUgb2YgdGhlIHJlY29yZFwiLFxuICAgICAgICAgICAgICBOYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICAgICAgVHlwZTogXCJzdHJpbmdcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQ29tbWVudDogXCJUaGUgdHlwZSBvZiB0aGUgcmVjb3JkXCIsXG4gICAgICAgICAgICAgIE5hbWU6IFwidHlwZVwiLFxuICAgICAgICAgICAgICBUeXBlOiBcInN0cmluZ1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBDb21tZW50OiBcIlNvbWUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWNvcmRcIixcbiAgICAgICAgICAgICAgTmFtZTogXCJudW1lcmljdmFsdWVcIixcbiAgICAgICAgICAgICAgVHlwZTogXCJpbnRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgQ29tcHJlc3NlZDogZmFsc2UsXG4gICAgICAgICAgSW5wdXRGb3JtYXQ6IFwib3JnLmFwYWNoZS5oYWRvb3AubWFwcmVkLlRleHRJbnB1dEZvcm1hdFwiLFxuICAgICAgICAgIExvY2F0aW9uOiBcInRlc3RTdHJlYW1cIixcbiAgICAgICAgICBOdW1iZXJPZkJ1Y2tldHM6IC0xLFxuICAgICAgICAgIE91dHB1dEZvcm1hdDogXCJvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLmlvLkhpdmVJZ25vcmVLZXlUZXh0T3V0cHV0Rm9ybWF0XCIsXG4gICAgICAgICAgUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZW5kcG9pbnRVcmw6IHtcbiAgICAgICAgICAgICAgXCJGbjo6Sm9pblwiOiBbXG4gICAgICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBcImh0dHBzOi8va2luZXNpcy5cIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgUmVmOiBcIkFXUzo6UmVnaW9uXCJcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBcIi5hbWF6b25hd3MuY29tXCJcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHJlYW1OYW1lOiBcInRlc3RTdHJlYW1cIixcbiAgICAgICAgICAgIHR5cGVPZkRhdGE6IFwia2luZXNpc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBTZXJkZUluZm86IHtcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgcGF0aHM6IFwiaWQsbmFtZSx0eXBlLG51bWVyaWN2YWx1ZVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgU2VyaWFsaXphdGlvbkxpYnJhcnk6IFwib3JnLm9wZW54LmRhdGEuanNvbnNlcmRlLkpzb25TZXJEZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBUYWJsZVR5cGU6IFwiRVhURVJOQUxfVEFCTEVcIlxuICAgICAgfVxuICAgIH1cbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBhc3MgYW4gdW5zdXBwb3J0ZWQgc291cmNlIHR5cGUsIGl0IHNob3VsZCB0aHJvdyBhbiBlcnJvclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnRlc3QoJ2Vycm9yIGNvbmRpdGlvbicsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IGRlZmF1bHRzLkRlZmF1bHRHbHVlRGF0YWJhc2Uoc3RhY2ssIGRlZmF1bHRzLkRlZmF1bHRHbHVlRGF0YWJhc2VQcm9wcygpKTtcbiAgICBkZWZhdWx0cy5EZWZhdWx0R2x1ZVRhYmxlKGRhdGFiYXNlLCBkZWZhdWx0cy5EZWZhdWx0R2x1ZVRhYmxlUHJvcHMoZGF0YWJhc2UsIGZpZWxkU2NoZW1hLCAnU29tZVNvdXJjZScsIHtTVFJFQU1fTkFNRTogJ3NvbWVmYWtlc3RyZWFtJ30pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBleHBlY3QoZXJyb3IpLnRvQmVJbnN0YW5jZU9mKEVycm9yKTtcbiAgfVxufSk7Il19